Difference between revisions of "Team:GO Paris-Saclay"

m
Line 1: Line 1:
 
 
<html>
 
<html>
  
Line 13: Line 12:
 
<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/I2llZml4KSBmb3JtYXQoImVtYmVkZGVkLW9wZW50eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjgvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzEvMWUvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIudHRmKSBmb3JtYXQoInRydWV0eXBlIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzMvM2YvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuc3ZnI01hdGVyaWFsSWNvbnMtUmVndWxhcikgZm9ybWF0KCJzdmciKX0ubWF0ZXJpYWwtaWNvbnN7Zm9udC1mYW1pbHk6J01hdGVyaWFsIEljb25zJztmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbDtkaXJlY3Rpb246bHRyOy1tb3otZm9udC1mZWF0dXJlLXNldHRpbmdzOidsaWdhJzstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9aDEsaDIsaDMsaDQsaDUsaDZ7Ym9yZGVyLWJvdHRvbTowfQ==">
 
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxhLmxlbmd0aDtwKyspb1tpPWFbcF1dJiZmLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxhPTE7YTx0Lmxlbmd0aDthKyspMCE9PW9bdFthXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9aShpLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezM6MH0sdT1bXTtmdW5jdGlvbiBpKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfWkuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLmNoYXJzZXQ9InV0Zi04IixhLnRpbWVvdXQ9MTIwLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkucCsiIisoe31bZV18fGUpKyIuanMifShlKTt2YXIgYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh7dHlwZToidGltZW91dCIsdGFyZ2V0OmF9KX0sMTJlNCk7ZnVuY3Rpb24gbChyKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHQ9b1tlXTtpZigwIT09dCl7aWYodCl7dmFyIG49ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSx1PXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmMsaT1uZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLlxuKCIrbisiOiAiK3UrIikiKTtpLnR5cGU9bixpLnJlcXVlc3Q9dSx0WzFdKGkpfW9bZV09dm9pZCAwfX1hLm9uZXJyb3I9YS5vbmxvYWQ9bCx1LmFwcGVuZENoaWxkKGEpfXJldHVybiBQcm9taXNlLmFsbChyKX0saS5tPWUsaS5jPW4saS5kPWZ1bmN0aW9uKGUscix0KXtpLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0saS5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQociwiYSIscikscn0saS5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxpLnA9IiIsaS5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9O3ZhciBhPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYz1hLnB1c2guYmluZChhKTthLnB1c2g9cixhPWEuc2xpY2UoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylyKGFbbF0pO3ZhciBzPWM7dCgpfShbXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s2XSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/dC5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz10JiZ0LnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgYyh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsdCl9cmV0dXJuIHQuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZihlLlByb21pc2UhPT1PLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jdXJyZW50O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihvLGkpe2lmKE8uaGFzT3duUHJvcGVydHkobykpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK28pO2lmKCFlWyJfX1pvbmVfZGlzYWJsZV8iK29dKXt2YXIgYT0iWm9uZToiK287bihhKSxPW29dPWkoZSx0LFMpLHIoYSxhKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRab25lV2l0aChlKTtpZih0KXJldHVybiB0Ll9wcm9wZXJ0aWVzW2VdfSx0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0Oyl7aWYodC5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdDt0PXQuX3BhcmVudH1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLGUpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK2UpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxlLHQpLHI9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsdCl9fSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihlLHQsbil7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKGUuc3RhdGUhPT15fHxlLnR5cGUhPT14KXt2YXIgcj1lLnN0YXRlIT1rO3ImJmUuX3RyYW5zaXRpb25UbyhrLG0pLGUucnVuQ291bnQrKzt2YXIgbz1qO2o9ZSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtlLnR5cGU9PUUmJmUuZGF0YSYmIWUuZGF0YS5pc1BlcmlvZGljJiYoZS5jYW5jZWxGbj1udWxsKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsZSx0LG4pfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7ZS5zdGF0ZSE9PXkmJmUuc3RhdGUhPT1UJiYoZS50eXBlPT14fHxlLmRhdGEmJmUuZGF0YS5pc1BlcmlvZGljP3ImJmUuX3RyYW5zaXRpb25UbyhtLGspOihlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLHImJmUuX3RyYW5zaXRpb25Ubyh5LGsseSkpKSxEPUQucGFyZW50LGo9b319fSx0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lJiZlLnpvbmUhPT10aGlzKWZvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrZS56b25lLm5hbWUpO3Q9dC5wYXJlbnR9ZS5fdHJhbnNpdGlvblRvKF8seSk7dmFyIG49W107ZS5fem9uZURlbGVnYXRlcz1uLGUuX3pvbmU9dGhpczt0cnl7ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsXyx5KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiBlLl96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsMSksZS5zdGF0ZT09XyYmZS5fdHJhbnNpdGlvblRvKG0sXyksZX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHcsZSx0LG4scixudWxsKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KEUsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHgsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2UuX3RyYW5zaXRpb25UbyhiLG0sayk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsYiksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLGUuX3RyYW5zaXRpb25Ubyh5LGIpLGUucnVuQ291bnQ9MCxlfSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fem9uZURlbGVnYXRlczstMT09dCYmKGUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5fdXBkYXRlVGFza0NvdW50KGUudHlwZSx0KX0sdC5fX3N5bWJvbF9fPXosdH0oKSxhPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhpcy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYmKG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFzVGFzazsocnx8dCYmdC5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1yP246YSx0aGlzLl9oYXNUYXNrRGxndD10LHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9ZSxuLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9YSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PXQsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1hLHRoaXMuX2ludm9rZVRhc2tEbGd0PXQsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9YSx0aGlzLl9jYW5jZWxUYXNrRGxndD10LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsZSx0KTpuZXcgaShlLHQpfSxlLnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGUsdCxuKTp0fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxlLHQsbixyLG8pOnQuYXBwbHkobixyKX0sZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZuLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKG49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxlLHQpKXx8KG49dCk7ZWxzZSBpZih0LnNjaGVkdWxlRm4pdC5zY2hlZHVsZUZuKHQpO2Vsc2V7aWYodC50eXBlIT13KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7dih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGUsdCxuLHIpOnQuY2FsbGJhY2suYXBwbHkobixyKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuX2NhbmNlbFRhc2taUyluPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGUsdCk7ZWxzZXtpZighdC5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO249dC5jYW5jZWxGbih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxlLHQpfWNhdGNoKHQpe3RoaXMuaGFuZGxlRXJyb3IoZSx0KX19LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90YXNrQ291bnRzLHI9bltlXSxvPW5bZV09cit0O2lmKG88MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1yJiYwIT1vfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6bi5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6bi5tYWNyb1Rhc2s+MCxldmVudFRhc2s6bi5ldmVudFRhc2s+MCxjaGFuZ2U6ZX0pfSxlfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4scixvLGksYSxjKXt0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1yLHRoaXMuZGF0YT1pLHRoaXMuc2NoZWR1bGVGbj1hLHRoaXMuY2FuY2VsRm49Yyx0aGlzLmNhbGxiYWNrPW87dmFyIHU9dGhpczt0aGlzLmludm9rZT1uPT09eCYmaSYmaS51c2VHP3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suY2FsbChlLHUsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxQKys7dHJ5e3JldHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09UCYmZCgpLFAtLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKHksXyl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrIiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVjdGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5fc3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT15JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lkIDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LHR9KCkscz16KCJzZXRUaW1lb3V0IiksbD16KCJQcm9taXNlIiksZj16KCJ0aGVuIikscD1bXSxoPSExO2Z1bmN0aW9uIHYodCl7MD09PVAmJjA9PT1wLmxlbmd0aCYmKG98fGVbbF0mJihvPWVbbF0ucmVzb2x2ZSgwKSksbz9vW2ZdKGQpOmVbc10oZCwwKSksdCYmcC5wdXNoKHQpfWZ1bmN0aW9uIGQoKXtpZighaCl7Zm9yKGg9ITA7cC5sZW5ndGg7KXt2YXIgZT1wO3A9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaChlKXtTLm9uVW5oYW5kbGVkRXJyb3IoZSl9fX1TLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBnPXtuYW1lOiJOTyBaT05FIn0seT0ibm90U2NoZWR1bGVkIixfPSJzY2hlZHVsaW5nIixtPSJzY2hlZHVsZWQiLGs9InJ1bm5pbmciLGI9ImNhbmNlbGluZyIsVD0idW5rbm93biIsdz0ibWljcm9UYXNrIixFPSJtYWNyb1Rhc2siLHg9ImV2ZW50VGFzayIsTz17fSxTPXtzeW1ib2w6eixjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIER9LG9uVW5oYW5kbGVkRXJyb3I6WixtaWNyb3Rhc2tEcmFpbkRvbmU6WixzY2hlZHVsZU1pY3JvVGFzazp2LHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWlbeigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpaLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIFp9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sc2V0TmF0aXZlUHJvbWlzZTpmdW5jdGlvbihlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXNvbHZlJiYobz1lLnJlc29sdmUoMCkpfX0sRD17cGFyZW50Om51bGwsem9uZTpuZXcgaShudWxsLG51bGwpfSxqPW51bGwsUD0wO2Z1bmN0aW9uIFooKXt9ZnVuY3Rpb24geihlKXtyZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXIoIlpvbmUiLCJab25lIiksZS5ab25lPWl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsKSxab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1PYmplY3QuZGVmaW5lUHJvcGVydHksaT1uLnN5bWJvbCxhPVtdLGM9aSgiUHJvbWlzZSIpLHU9aSgidGhlbiIpLHM9Il9fY3JlYXRpb25UcmFjZV9fIjtuLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24oZSl7aWYobi5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgdD1lJiZlLnJlamVjdGlvbjt0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCwiOyBab25lOiIsZS56b25lLm5hbWUsIjsgVGFzazoiLGUudGFzayYmZS50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLHQsdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKGUpfX0sbi5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IoO2EubGVuZ3RoOylmb3IodmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1hLnNoaWZ0KCk7dHJ5e2Uuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWNhdGNoKGUpe2YoZSl9fTthLmxlbmd0aDspZSgpfTt2YXIgbD1pKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIGYoZSl7bi5vblVuaGFuZGxlZEVycm9yKGUpO3RyeXt2YXIgcj10W2xdO3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNhbGwodGhpcyxlKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUudGhlbn1mdW5jdGlvbiBoKGUpe3JldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE0ucmVqZWN0KGUpfXZhciBkPWkoInN0YXRlIiksZz1pKCJ2YWx1ZSIpLHk9aSgiZmluYWxseSIpLF89aSgicGFyZW50UHJvbWlzZVZhbHVlIiksbT1pKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxrPSJQcm9taXNlLnRoZW4iLGI9bnVsbCxUPSEwLHc9ITEsRT0wO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e2ooZSx0LG4pfWNhdGNoKHQpe2ooZSwhMSx0KX19fXZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxTPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixEPWkoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBqKGUscixpKXt2YXIgYyx1PU8oKTtpZihlPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFMpO2lmKGVbZF09PT1iKXt2YXIgbD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGkmJiJmdW5jdGlvbiIhPXR5cGVvZiBpfHwobD1pJiZpLnRoZW4pfWNhdGNoKHQpe3JldHVybiB1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKSxlfWlmKHIhPT13JiZpIGluc3RhbmNlb2YgTSYmaS5oYXNPd25Qcm9wZXJ0eShkKSYmaS5oYXNPd25Qcm9wZXJ0eShnKSYmaVtkXSE9PWIpWihpKSxqKGUsaVtkXSxpW2ddKTtlbHNlIGlmKHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7bC5jYWxsKGksdSh4KGUscikpLHUoeChlLCExKSkpfWNhdGNoKHQpe3UoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpfWVsc2V7ZVtkXT1yO3ZhciBmPWVbZ107aWYoZVtnXT1pLGVbeV09PT15JiZyPT09VCYmKGVbZF09ZVttXSxlW2ddPWVbX10pLHI9PT13JiZpIGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBwPXQuY3VycmVudFRhc2smJnQuY3VycmVudFRhc2suZGF0YSYmdC5jdXJyZW50VGFzay5kYXRhW3NdO3AmJm8oaSxELHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpwfSl9Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDspeihlLGZbaCsrXSxmW2grK10sZltoKytdLGZbaCsrXSk7aWYoMD09Zi5sZW5ndGgmJnI9PXcpe2VbZF09RTt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKChjPWkpJiZjLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oYy5jb25zdHJ1Y3RvciYmYy5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeShjKTpjP2MudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpKyhpJiZpLnN0YWNrPyJcbiIraS5zdGFjazoiIikpfWNhdGNoKHIpe3ZhciB2PXI7di5yZWplY3Rpb249aSx2LnByb21pc2U9ZSx2LnpvbmU9dC5jdXJyZW50LHYudGFzaz10LmN1cnJlbnRUYXNrLGEucHVzaCh2KSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX19cmV0dXJuIGV9dmFyIFA9aSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBaKGUpe2lmKGVbZF09PT1FKXt0cnl7dmFyIG49dFtQXTtuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5jYWxsKHRoaXMse3JlamVjdGlvbjplW2ddLHByb21pc2U6ZX0pfWNhdGNoKGUpe31lW2RdPXc7Zm9yKHZhciByPTA7cjxhLmxlbmd0aDtyKyspZT09PWFbcl0ucHJvbWlzZSYmYS5zcGxpY2UociwxKX19ZnVuY3Rpb24geihlLHQsbixyLG8pe1ooZSk7dmFyIGk9ZVtkXSxhPWk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpoOiJmdW5jdGlvbiI9PXR5cGVvZiBvP286djt0LnNjaGVkdWxlTWljcm9UYXNrKGssZnVuY3Rpb24oKXt0cnl7dmFyIHI9ZVtnXSxvPW4mJnk9PT1uW3ldO28mJihuW19dPXIsblttXT1pKTt2YXIgYz10LnJ1bihhLHZvaWQgMCxvJiZhIT09diYmYSE9PWg/W106W3JdKTtqKG4sITAsYyl9Y2F0Y2goZSl7aihuLCExLGUpfX0sbil9dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7dGhpc1tkXT1iLHRoaXNbZ109W107dHJ5e3QmJnQoeCh0aGlzLFQpLHgodGhpcyx3KSl9Y2F0Y2goZSl7aih0aGlzLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksVCxlKX0sZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KTtmdW5jdGlvbiBvKGUpe3ImJihyPXQoZSkpfWZ1bmN0aW9uIGkoZSl7ciYmKHI9bihlKSl9Zm9yKHZhciBhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKG8saSl9cmV0dXJuIHJ9LGUuYWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSksbz0wLGk9W10sYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7aVtlXT1uLC0tb3x8dChpKX19KG8pLG4pLG8rK31yZXR1cm4gb3x8dChpKSxyfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsbil7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCksbz10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKG8scixlLG4pOnoodGhpcyxvLHIsZSxuKSxyfSxlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCk7blt5XT15O3ZhciByPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gocixuLGUsZSk6eih0aGlzLHIsbixlLGUpLG59LGV9KCk7TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO3ZhciBDPWVbY109ZS5Qcm9taXNlLFI9dC5fX3N5bWJvbF9fKCJab25lQXdhcmVQcm9taXNlIiksST1yKGUsIlByb21pc2UiKTtJJiYhSS5jb25maWd1cmFibGV8fChJJiZkZWxldGUgSS53cml0YWJsZSxJJiZkZWxldGUgSS52YWx1ZSxJfHwoST17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxJLmdldD1mdW5jdGlvbigpe3JldHVybiBlW1JdP2VbUl06ZVtjXX0sSS5zZXQ9ZnVuY3Rpb24odCl7dD09PU0/ZVtSXT10OihlW2NdPXQsdC5wcm90b3R5cGVbdV18fHEodCksbi5zZXROYXRpdmVQcm9taXNlKHQpKX0sbyhlLCJQcm9taXNlIixJKSksZS5Qcm9taXNlPU07dmFyIEYsTD1pKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj1yKHQsInRoZW4iKTtpZighbnx8ITEhPT1uLndyaXRhYmxlJiZuLmNvbmZpZ3VyYWJsZSl7dmFyIG89dC50aGVuO3RbdV09byxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IE0oZnVuY3Rpb24oZSx0KXtvLmNhbGwobixlLHQpfSkudGhlbihlLHQpfSxlW0xdPSEwfX1pZihDKXtxKEMpO3ZhciBBPWUuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihlLmZldGNoPShGPUEsZnVuY3Rpb24oKXt2YXIgZT1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlIGluc3RhbmNlb2YgTSlyZXR1cm4gZTt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB0W0xdfHxxKHQpLGV9KSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09YSxNfSk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixyPU9iamVjdC5jcmVhdGUsbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYz1ab25lLl9fc3ltYm9sX18oaSksdT1ab25lLl9fc3ltYm9sX18oYSkscz0idHJ1ZSIsbD0iZmFsc2UiLGY9Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gcChlLHQpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scixvKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGUsdCxuLHIsbyl9dmFyIHY9Wm9uZS5fX3N5bWJvbF9fLGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csZz1kP3dpbmRvdzp2b2lkIDAseT1kJiZnfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCxfPSJyZW1vdmVBdHRyaWJ1dGUiLG09W251bGxdO2Z1bmN0aW9uIGsoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09cChlW25dLHQrIl8iK24pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe3JldHVybiFlfHwhMSE9PWUud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0JiZ2b2lkIDA9PT1lLnNldCl9dmFyIFQ9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHc9ISgibnciaW4geSkmJnZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLEU9IXcmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCkseD12b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSxPPXt9LFM9ZnVuY3Rpb24oZSl7aWYoZT1lfHx5LmV2ZW50KXt2YXIgdD1PW2UudHlwZV07dHx8KHQ9T1tlLnR5cGVdPXYoIk9OX1BST1BFUlRZIitlLnR5cGUpKTt2YXIgbj0odGhpc3x8ZS50YXJnZXR8fHkpW3RdLHI9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09cnx8cnx8ZS5wcmV2ZW50RGVmYXVsdCgpLHJ9fTtmdW5jdGlvbiBEKG4scixvKXt2YXIgaT1lKG4scik7aWYoIWkmJm8mJmUobyxyKSYmKGk9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksaSYmaS5jb25maWd1cmFibGUpe2RlbGV0ZSBpLndyaXRhYmxlLGRlbGV0ZSBpLnZhbHVlO3ZhciBhPWkuZ2V0LGM9aS5zZXQsdT1yLnN1YnN0cigyKSxzPU9bdV07c3x8KHM9T1t1XT12KCJPTl9QUk9QRVJUWSIrdSkpLGkuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHx8biE9PXl8fCh0PXkpLHQmJih0W3NdJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIodSxTKSxjJiZjLmFwcGx5KHQsbSksImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRbc109ZSx0LmFkZEV2ZW50TGlzdGVuZXIodSxTLCExKSk6dFtzXT1udWxsKX0saS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGV8fG4hPT15fHwoZT15KSwhZSlyZXR1cm4gbnVsbDt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQ7aWYoYSl7dmFyIG89YSYmYS5jYWxsKHRoaXMpO2lmKG8pcmV0dXJuIGkuc2V0LmNhbGwodGhpcyxvKSwiZnVuY3Rpb24iPT10eXBlb2YgZVtfXSYmZS5yZW1vdmVBdHRyaWJ1dGUociksb31yZXR1cm4gbnVsbH0sdChuLHIsaSl9fWZ1bmN0aW9uIGooZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspRChlLCJvbiIrdFtyXSxuKTtlbHNle3ZhciBvPVtdO2Zvcih2YXIgaSBpbiBlKSJvbiI9PWkuc3Vic3RyKDAsMikmJm8ucHVzaChpKTtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKylEKGUsb1thXSxuKX19dmFyIFA9digib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIFooZSl7dmFyIG49eVtlXTtpZihuKXt5W3YoZSldPW4seVtlXT1mdW5jdGlvbigpe3ZhciB0PWsoYXJndW1lbnRzLGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbUF09bmV3IG47YnJlYWs7Y2FzZSAxOnRoaXNbUF09bmV3IG4odFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbUF09bmV3IG4odFswXSx0WzFdKTticmVhaztjYXNlIDM6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sTSh5W2VdLG4pO3ZhciByLG89bmV3IG4oZnVuY3Rpb24oKXt9KTtmb3IociBpbiBvKSJYTUxIdHRwUmVxdWVzdCI9PT1lJiYicmVzcG9uc2VCbG9iIj09PXJ8fGZ1bmN0aW9uKG4peyJmdW5jdGlvbiI9PXR5cGVvZiBvW25dP3lbZV0ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl0uYXBwbHkodGhpc1tQXSxhcmd1bWVudHMpfTp0KHlbZV0ucHJvdG90eXBlLG4se3NldDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD8odGhpc1tQXVtuXT1wKHQsZSsiLiIrbiksTSh0aGlzW1BdW25dLHQpKTp0aGlzW1BdW25dPXR9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dfX0pfShyKTtmb3IociBpbiBuKSJwcm90b3R5cGUiIT09ciYmbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHlbZV1bcl09bltyXSl9fWZ1bmN0aW9uIHoodCxyLG8pe2Zvcih2YXIgaT10O2kmJiFpLmhhc093blByb3BlcnR5KHIpOylpPW4oaSk7IWkmJnRbcl0mJihpPXQpO3ZhciBhLGM9dihyKTtpZihpJiYhKGE9aVtjXSkmJihhPWlbY109aVtyXSxiKGkmJmUoaSxyKSkpKXt2YXIgdT1vKGEsYyxyKTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyxhcmd1bWVudHMpfSxNKGlbcl0sYSl9cmV0dXJuIGF9ZnVuY3Rpb24gTShlLHQpe2VbdigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT10fXZhciBDPSExLFI9ITE7ZnVuY3Rpb24gSSgpe2lmKEMpcmV0dXJuIFI7Qz0hMDt0cnl7dmFyIGU9Zy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xPT09ZS5pbmRleE9mKCJNU0lFICIpJiYtMT09PWUuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT1lLmluZGV4T2YoIkVkZ2UvIil8fChSPSEwKSxSfWNhdGNoKGUpe319Wm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihlKXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj12KCJPcmlnaW5hbERlbGVnYXRlIikscj12KCJQcm9taXNlIiksbz12KCJFcnJvciIpLGk9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGk9dGhpc1tuXTtpZihpKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3QuYXBwbHkodGhpc1tuXSxhcmd1bWVudHMpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIGE9ZVtyXTtpZihhKXJldHVybiB0LmFwcGx5KGEsYXJndW1lbnRzKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBjPWVbb107aWYoYylyZXR1cm4gdC5hcHBseShjLGFyZ3VtZW50cyl9fXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aVtuXT10LEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1pO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIEY9e3VzZUc6ITB9LEw9e30scT17fSxBPS9eX196b25lX3N5bWJvbF9fKFx3KykodHJ1ZXxmYWxzZSkkLyxIPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiO2Z1bmN0aW9uIE4oZSx0LHIpe3ZhciBvPXImJnIuYWRkfHxpLGM9ciYmci5ybXx8YSx1PXImJnIubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHA9ciYmci5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsaD12KG8pLGQ9Ii4iK28rIjoiLGc9InByZXBlbmRMaXN0ZW5lciIseT0iLiIrZysiOiIsXz1mdW5jdGlvbihlLHQsbil7aWYoIWUuaXNSZW1vdmVkKXt2YXIgcj1lLmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgciYmci5oYW5kbGVFdmVudCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaGFuZGxlRXZlbnQoZSl9LGUub3JpZ2luYWxEZWxlZ2F0ZT1yKSxlLmludm9rZShlLHQsW25dKTt2YXIgbz1lLm9wdGlvbnM7byYmIm9iamVjdCI9PXR5cGVvZiBvJiZvLm9uY2UmJnRbY10uY2FsbCh0LG4udHlwZSxlLm9yaWdpbmFsRGVsZWdhdGU/ZS5vcmlnaW5hbERlbGVnYXRlOmUuY2FsbGJhY2ssbyl9fSxtPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtsXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX0saz1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bc11dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19O2Z1bmN0aW9uIGIodCxyKXtpZighdClyZXR1cm4hMTt2YXIgaT0hMDtyJiZ2b2lkIDAhPT1yLnVzZUcmJihpPXIudXNlRyk7dmFyIGE9ciYmci52aCxfPSEwO3ImJnZvaWQgMCE9PXIuY2hrRHVwJiYoXz1yLmNoa0R1cCk7dmFyIGI9ITE7ciYmdm9pZCAwIT09ci5ydCYmKGI9ci5ydCk7Zm9yKHZhciBUPXQ7VCYmIVQuaGFzT3duUHJvcGVydHkobyk7KVQ9bihUKTtpZighVCYmdFtvXSYmKFQ9dCksIVQpcmV0dXJuITE7aWYoVFtoXSlyZXR1cm4hMTt2YXIgdyxFPXt9LHg9VFtoXT1UW29dLE89VFt2KGMpXT1UW2NdLFM9VFt2KHUpXT1UW3VdLEQ9VFt2KHApXT1UW3BdO3ImJnIucHJlcGVuZCYmKHc9VFt2KHIucHJlcGVuZCldPVRbci5wcmVwZW5kXSk7dmFyIGo9aT9mdW5jdGlvbigpe2lmKCFFLmlzRXhpc3RpbmcpcmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxFLmNhcHR1cmU/azptLEUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUD1pP2Z1bmN0aW9uKGUpe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHQ9TFtlLmV2ZW50TmFtZV0sbj12b2lkIDA7dCYmKG49dFtlLmNhcHR1cmU/czpsXSk7dmFyIHI9biYmZS50YXJnZXRbbl07aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPT09ZSl7ci5zcGxpY2UobywxKSxlLmlzUmVtb3ZlZD0hMCwwPT09ci5sZW5ndGgmJihlLmFsbFJlbW92ZWQ9ITAsZS50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKGUuYWxsUmVtb3ZlZClyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuY2FwdHVyZT9rOm0sZS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmludm9rZSxlLm9wdGlvbnMpfSxaPXImJnIuZGlmZj9yLmRpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4iZnVuY3Rpb24iPT09biYmZS5jYWxsYmFjaz09PXR8fCJvYmplY3QiPT09biYmZS5vcmlnaW5hbERlbGVnYXRlPT09dH0sej1ab25lW1pvbmUuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSxDPWZ1bmN0aW9uKHQsbixyLG8sYyx1KXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9ITEpLHZvaWQgMD09PXUmJih1PSExKSxmdW5jdGlvbigpe3ZhciBwPXRoaXN8fGUsaD1hcmd1bWVudHNbMV07aWYoIWgpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB2PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXtpZighaC5oYW5kbGVFdmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dj0hMH1pZighYXx8YSh0LGgscCxhcmd1bWVudHMpKXt2YXIgZCxnPWFyZ3VtZW50c1swXSx5PWFyZ3VtZW50c1syXTtpZih6KWZvcih2YXIgbT0wO208ei5sZW5ndGg7bSsrKWlmKGc9PT16W21dKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaz0hMTt2b2lkIDA9PT15P2Q9ITE6ITA9PT15P2Q9ITA6ITE9PT15P2Q9ITE6KGQ9ISF5JiYhIXkuY2FwdHVyZSxrPSEheSYmISF5Lm9uY2UpO3ZhciBiLFQ9Wm9uZS5jdXJyZW50LHc9TFtnXTtpZih3KWI9d1tkP3M6bF07ZWxzZXt2YXIgeD1mKyhnK2wpLE89ZisoZytzKTtMW2ddPXt9LExbZ11bbF09eCxMW2ddW3NdPU8sYj1kP086eH12YXIgUyxEPXBbYl0saj0hMTtpZihEKXtpZihqPSEwLF8pZm9yKG09MDttPEQubGVuZ3RoO20rKylpZihaKERbbV0saCkpcmV0dXJufWVsc2UgRD1wW2JdPVtdO3ZhciBQPXAuY29uc3RydWN0b3IubmFtZSxNPXFbUF07TSYmKFM9TVtnXSksU3x8KFM9UCtuK2cpLEUub3B0aW9ucz15LGsmJihFLm9wdGlvbnMub25jZT0hMSksRS50YXJnZXQ9cCxFLmNhcHR1cmU9ZCxFLmV2ZW50TmFtZT1nLEUuaXNFeGlzdGluZz1qO3ZhciBDPWk/RjpudWxsO0MmJihDLnRhc2tEYXRhPUUpO3ZhciBSPVQuc2NoZWR1bGVFdmVudFRhc2soUyxoLEMscixvKTtyZXR1cm4gRS50YXJnZXQ9bnVsbCxDJiYoQy50YXNrRGF0YT1udWxsKSxrJiYoeS5vbmNlPSEwKSxSLm9wdGlvbnM9eSxSLnRhcmdldD1wLFIuY2FwdHVyZT1kLFIuZXZlbnROYW1lPWcsdiYmKFIub3JpZ2luYWxEZWxlZ2F0ZT1oKSx1P0QudW5zaGlmdChSKTpELnB1c2goUiksYz9wOnZvaWQgMH19fTtyZXR1cm4gVFtvXT1DKHgsZCxqLFAsYiksdyYmKFRbZ109Qyh3LHksZnVuY3Rpb24oZSl7cmV0dXJuIHcuY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQLGIsITApKSxUW2NdPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzfHxlLHI9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzJdO3Q9dm9pZCAwIT09byYmKCEwPT09b3x8ITEhPT1vJiYhIW8mJiEhby5jYXB0dXJlKTt2YXIgaT1hcmd1bWVudHNbMV07aWYoIWkpcmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhfHxhKE8saSxuLGFyZ3VtZW50cykpe3ZhciBjLHU9TFtyXTt1JiYoYz11W3Q/czpsXSk7dmFyIGY9YyYmbltjXTtpZihmKWZvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgaD1mW3BdO2lmKFooaCxpKSlyZXR1cm4gZi5zcGxpY2UocCwxKSxoLmlzUmVtb3ZlZD0hMCwwPT09Zi5sZW5ndGgmJihoLmFsbFJlbW92ZWQ9ITAsbltjXT1udWxsKSxoLnpvbmUuY2FuY2VsVGFzayhoKSxiP246dm9pZCAwfXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRbdV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj1XKHRoaXN8fGUsYXJndW1lbnRzWzBdKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07dC5wdXNoKG8ub3JpZ2luYWxEZWxlZ2F0ZT9vLm9yaWdpbmFsRGVsZWdhdGU6by5jYWxsYmFjayl9cmV0dXJuIHR9LFRbcF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzfHxlLG49YXJndW1lbnRzWzBdO2lmKG4pe3ZhciByPUxbbl07aWYocil7dmFyIG89dFtyW2xdXSxpPXRbcltzXV07aWYobyl7dmFyIGE9by5zbGljZSgpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspdGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9aWYoaSlmb3IoYT1pLnNsaWNlKCksaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgdTt0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBmPU9iamVjdC5rZXlzKHQpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHY9QS5leGVjKGZbaF0pLGQ9diYmdlsxXTtkJiYicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpc1twXS5jYWxsKHRoaXMsZCl9dGhpc1twXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoYilyZXR1cm4gdGhpc30sTShUW29dLHgpLE0oVFtjXSxPKSxEJiZNKFRbcF0sRCksUyYmTShUW3VdLFMpLCEwfWZvcih2YXIgVD1bXSx3PTA7dzx0Lmxlbmd0aDt3KyspVFt3XT1iKHRbd10scik7cmV0dXJuIFR9ZnVuY3Rpb24gVyhlLHQpe3ZhciBuPVtdO2Zvcih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQpKXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10pfX1yZXR1cm4gbn12YXIgWD12KCJ6b25lVGFzayIpO2Z1bmN0aW9uIEsoZSx0LG4scil7dmFyIG89bnVsbCxpPW51bGw7bis9cjt2YXIgYT17fTtmdW5jdGlvbiBjKHQpe3ZhciBuPXQuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uKCl7dHJ5e3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3QuZGF0YSYmdC5kYXRhLmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIG4uaGFuZGxlSWQ/ZGVsZXRlIGFbbi5oYW5kbGVJZF06bi5oYW5kbGVJZCYmKG4uaGFuZGxlSWRbWF09bnVsbCkpfX0sbi5oYW5kbGVJZD1vLmFwcGx5KGUsbi5hcmdzKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGkoZS5kYXRhLmhhbmRsZUlkKX1vPXooZSx0Kz1yLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihvLGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpWzBdKXt2YXIgcz1oKHQsaVswXSx7aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRlbGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2lbMV18fDA6bnVsbCxhcmdzOml9LGMsdSk7aWYoIXMpcmV0dXJuIHM7dmFyIGw9cy5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9hW2xdPXM6bCYmKGxbWF09cyksbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihzLnJlZj1sLnJlZi5iaW5kKGwpLHMudW5yZWY9bC51bnJlZi5iaW5kKGwpKSwibnVtYmVyIj09dHlwZW9mIGx8fGw/bDpzfXJldHVybiBuLmFwcGx5KGUsaSl9fSksaT16KGUsbixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbyxpPXJbMF07Im51bWJlciI9PXR5cGVvZiBpP289YVtpXToobz1pJiZpW1hdKXx8KG89aSksbyYmInN0cmluZyI9PXR5cGVvZiBvLnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1vLnN0YXRlJiYoby5jYW5jZWxGbiYmby5kYXRhLmlzUGVyaW9kaWN8fDA9PT1vLnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgaT9kZWxldGUgYVtpXTppJiYoaVtYXT1udWxsKSxvLnpvbmUuY2FuY2VsVGFzayhvKSk6dC5hcHBseShlLHIpfX0pfXZhciBVPU9iamVjdFt2KCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1PYmplY3RbdigiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWT1PYmplY3QuY3JlYXRlLEo9digidW5jb25maWd1cmFibGVzIik7ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlJiZlW0pdJiZlW0pdW3RdfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBPYmplY3QuaXNGcm96ZW4obil8fChuLmNvbmZpZ3VyYWJsZT0hMCksbi5jb25maWd1cmFibGV8fChlW0pdfHxPYmplY3QuaXNGcm96ZW4oZSl8fFUoZSxKLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLGVbSl0mJihlW0pdW3RdPSEwKSksbn1mdW5jdGlvbiBRKGUsdCxuLHIpe3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKHIpe3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNjcmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK3IpfX19dmFyICQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGx5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLGVlPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIsIm1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sdGU9WyJsb2FkIl0sbmU9WyJibHVyIiwiZXJyb3IiLCJmb2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiLCJtZXNzYWdlZXJyb3IiXSxyZT1bImJvdW5jZSIsImZpbmlzaCIsInN0YXJ0Il0sb2U9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwicHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxpZT1bInVwZ3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tlZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGFlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJtZXNzYWdlIl0sY2U9WyJlcnJvciIsIm1lc3NhZ2UiXSx1ZT1bImFib3J0IiwiYW5pbWF0aW9uY2FuY2VsIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYXV4Y2xpY2siLCJiZWZvcmVpbnB1dCIsImJsdXIiLCJjYW5jZWwiLCJjYW5wbGF5IiwiY2FucGxheXRocm91Z2giLCJjaGFuZ2UiLCJjb21wb3NpdGlvbnN0YXJ0IiwiY29tcG9zaXRpb251cGRhdGUiLCJjb21wb3NpdGlvbmVuZCIsImN1ZWNoYW5nZSIsImNsaWNrIiwiY2xvc2UiLCJjb250ZXh0bWVudSIsImN1cmVjaGFuZ2UiLCJkYmxjbGljayIsImRyYWciLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ2V4aXQiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkdXJhdGlvbmNoYW5nZSIsImVtcHRpZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJnb3Rwb2ludGVyY2FwdHVyZSIsImlucHV0IiwiaW52YWxpZCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwibG9hZCIsImxvYWRzdGFydCIsImxvYWRlZGRhdGEiLCJsb2FkZWRtZXRhZGF0YSIsImxvc3Rwb2ludGVyY2FwdHVyZSIsIm1vdXNlZG93biIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwibW91c2V3aGVlbCIsIm9yaWVudGF0aW9uY2hhbmdlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2ludG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwicmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwidG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidHJhbnNpdGlvbmNhbmNlbCIsInRyYW5zaXRpb25lbmQiLCJ3YWl0aW5nIiwid2hlZWwiXS5jb25jYXQoWyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLFsidG9nZ2xlIl0sWyJhZnRlcnNjcmlwdGV4ZWN1dGUiLCJiZWZvcmVzY3JpcHRleGVjdXRlIiwiRE9NQ29udGVudExvYWRlZCIsImZ1bGxzY3JlZW5jaGFuZ2UiLCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIm1zZnVsbHNjcmVlbmNoYW5nZSIsImZ1bGxzY3JlZW5lcnJvciIsIm1vemZ1bGxzY3JlZW5lcnJvciIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciIsIm1zZnVsbHNjcmVlbmVycm9yIiwicmVhZHlzdGF0ZWNoYW5nZSIsInZpc2liaWxpdHljaGFuZ2UiXSwkLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIHNlKGUsdCxuLHIpe2UmJmooZSxmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIHQ7dmFyIHI9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0PT09ZX0pO2lmKCFyfHwwPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIG89clswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW8uaW5kZXhPZihlKX0pfShlLHQsbikscil9ZnVuY3Rpb24gbGUoYyx1KXtpZighd3x8eCl7dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7aWYoZnVuY3Rpb24oKXtpZigoRXx8eCkmJiFlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe3ZhciBuPWUoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihuJiYhbi5jb25maWd1cmFibGUpcmV0dXJuITF9dmFyIHI9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG89ZShyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiKTtpZihvKXt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U7cmV0dXJuIHQociwib25yZWFkeXN0YXRlY2hhbmdlIixvfHx7fSksaX12YXIgYT12KCJmYWtlIik7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1thXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbYV09ZX19KTt2YXIgYyx1PWZ1bmN0aW9uKCl7fTtyZXR1cm4oYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZT11LGk9Y1thXT09PXUsYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSgpKXt2YXIgbD11Ll9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZihFKXt2YXIgZj13aW5kb3c7c2UoZix1ZS5jb25jYXQoWyJtZXNzYWdlZXJyb3IiXSksbCxuKGYpKSxzZShEb2N1bWVudC5wcm90b3R5cGUsdWUsbCksdm9pZCAwIT09Zi5TVkdFbGVtZW50JiZzZShmLlNWR0VsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxlZSxsKSxzZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCksc2UoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpO3ZhciBoPWYuSFRNTE1hcnF1ZWVFbGVtZW50O2gmJnNlKGgucHJvdG90eXBlLHJlLGwpO3ZhciBkPWYuV29ya2VyO2QmJnNlKGQucHJvdG90eXBlLGNlLGwpfXNlKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvZSxsKTt2YXIgZz11LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZyYmc2UoZyYmZy5wcm90b3R5cGUsb2UsbCksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHNlKElEQkluZGV4LnByb3RvdHlwZSxpZSxsKSxzZShJREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJEYXRhYmFzZS5wcm90b3R5cGUsaWUsbCksc2UoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLGllLGwpLHNlKElEQkN1cnNvci5wcm90b3R5cGUsaWUsbCkpLHMmJnNlKFdlYlNvY2tldC5wcm90b3R5cGUsYWUsbCl9ZWxzZSFmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJvbiIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJnZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0mJiFvW25dW2ZlXSYmKCh0PXAob1tuXSxyKSlbZmVdPW9bbl0sb1tuXT10KSxvPW8ucGFyZW50RWxlbWVudH0sITApfSx0PTA7dDx1ZS5sZW5ndGg7dCsrKWUodCl9KCksWigiWE1MSHR0cFJlcXVlc3QiKSxzJiZmdW5jdGlvbih0LG4pe3ZhciBjPW4uV2ViU29ja2V0O24uRXZlbnRUYXJnZXR8fE4obixbYy5wcm90b3R5cGVdKSxuLldlYlNvY2tldD1mdW5jdGlvbih0LG4pe3ZhciB1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGModCxuKTpuZXcgYyh0KSxmPWUobCwib25tZXNzYWdlIik7cmV0dXJuIGYmJiExPT09Zi5jb25maWd1cmFibGU/KHU9cihsKSxzPWwsW2ksYSwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9by5jYWxsKGFyZ3VtZW50cyk7aWYoZT09PWl8fGU9PT1hKXt2YXIgbj10Lmxlbmd0aD4wP3RbMF06dm9pZCAwO2lmKG4pe3ZhciByPVpvbmUuX19zeW1ib2xfXygiT05fUFJPUEVSVFkiK24pO2xbcl09dVtyXX19cmV0dXJuIGxbZV0uYXBwbHkobCx0KX19KSk6dT1sLGoodSxbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHV9O3ZhciB1PW4uV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBjKXVbc109Y1tzXX0oMCx1KX19dmFyIGZlPXYoInVuYm91bmQiKTtab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblByb3BlcnRpZXM9aixuLnBhdGNoTWV0aG9kPXosbi5iaW5kQXJndW1lbnRzPWt9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihlKXtLKGUsInNldCIsImNsZWFyIiwiVGltZW91dCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbnRlcnZhbCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKGUpe0soZSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLHI9MDtyPG4ubGVuZ3RoO3IrKyl6KGUsbltyXSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Ll9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKTtlW3JdJiYodFtyXT1lW3JdKSxmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuRXZlbnQ7biYmbi5wcm90b3R5cGUmJnQucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dFtIXT0hMCxlJiZlLmFwcGx5KHQsbil9fSl9KGUsdCl9KGUsbiksZnVuY3Rpb24oZSx0KXt2YXIgbj0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLG89W10saT1lLnd0ZixhPW4uc3BsaXQoIiwiKTtpP289YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkhUTUwiK2UrIkVsZW1lbnQifSkuY29uY2F0KHIpOmUuRXZlbnRUYXJnZXQ/by5wdXNoKCJFdmVudFRhcmdldCIpOm89cjtmb3IodmFyIGM9ZS5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsdT1lLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEscD1JKCksaD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix2PTA7djx1ZS5sZW5ndGg7disrKXt2YXIgZD1mKygoaz11ZVt2XSkrbCksZz1mKyhrK3MpO0xba109e30sTFtrXVtsXT1kLExba11bc109Z31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hW3ZdLF89cVt5XT17fSxtPTA7bTx1ZS5sZW5ndGg7bSsrKXt2YXIgaztfW2s9dWVbbV1dPXkrIi5hZGRFdmVudExpc3RlbmVyOiIra312YXIgYj1bXTtmb3Iodj0wO3Y8by5sZW5ndGg7disrKXt2YXIgVD1lW29bdl1dO2IucHVzaChUJiZULnByb3RvdHlwZSl9TihlLGIse3ZoOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFjJiZwKXtpZih1KXRyeXt2YXIgbztpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZih1KXRyeXt0LnRvU3RyaW5nKCl9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1yZXR1cm4hMH19KSx0LnBhdGNoRXZlbnRUYXJnZXQ9Tn0oZSxuKTt2YXIgbz1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7byYmby5wcm90b3R5cGUmJm4ucGF0Y2hFdmVudFRhcmdldChlLFtvLnByb3RvdHlwZV0pLFooIk11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiksWigiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKSxaKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1bmN0aW9uKHQsbixyKXtsZSgwLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7aWYoVihlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3QrIicgb2YgIitlKTt2YXIgcj1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4icHJvdG90eXBlIiE9PXQmJihuPUcoZSx0LG4pKSxRKGUsdCxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sdFtuXSl9KSxlfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxPYmplY3QuaXNGcm96ZW4odCl8fE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1HKGUsbix0W25dKX0pLFkoZSx0KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPUIoZSx0KTtyZXR1cm4gVihlLHQpJiYobi5jb25maWd1cmFibGU9ITEpLG59LGZ1bmN0aW9uKG4pe2lmKChFfHx4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50KXt2YXIgcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQsbz1bImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl07ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4mJm4ucHJvdG90eXBlJiZvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxpLGEsYz0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK3QsdT1uLnByb3RvdHlwZTtpZih1Lmhhc093blByb3BlcnR5KHQpKXt2YXIgcz1lKHUsdCk7cyYmcy52YWx1ZT8ocy52YWx1ZT1wKHMudmFsdWUsYyksYT0oaT1zKS5jb25maWd1cmFibGUsUShyPW4ucHJvdG90eXBlLG89dCxpPUcocixvLGkpLGEpKTp1W3RdPXAodVt0XSxjKX1lbHNlIHVbdF0mJih1W3RdPXAodVt0XSxjKSl9KSxyLmNhbGwoZG9jdW1lbnQsdCxuKX0sTShkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQscil9fSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goImNhbnZhcyIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT10JiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUudG9CbG9iJiZmdW5jdGlvbihlLG4scil7dmFyIG89bnVsbDtmdW5jdGlvbiBpKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hcmdzW3QuY2JJZHhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX1vPXoodC5wcm90b3R5cGUsInRvQmxvYiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bmFtZToiSFRNTENhbnZhc0VsZW1lbnQudG9CbG9iIix0YXJnZXQ6ZSxjYklkeDowLGFyZ3M6dH19KHQsbik7cmV0dXJuIHIuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3IuY2JJZHhdP2goci5uYW1lLG5bci5jYklkeF0scixpLG51bGwpOmUuYXBwbHkodCxuKX19KX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpe3ZhciBzPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxsPXNbY10sZj1zW3VdO2lmKCFsKXt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYocCl7dmFyIHY9cC5wcm90b3R5cGU7bD12W2NdLGY9dlt1XX19dmFyIGQ9InJlYWR5c3RhdGVjaGFuZ2UiLGc9InNjaGVkdWxlZCI7ZnVuY3Rpb24geShlKXtYTUxIdHRwUmVxdWVzdFtpXT0hMTt2YXIgdD1lLmRhdGEscj10LnRhcmdldCxhPXJbb107bHx8KGw9cltjXSxmPXJbdV0pLGEmJmYuY2FsbChyLGQsYSk7dmFyIHM9cltvXT1mdW5jdGlvbigpe3IucmVhZHlTdGF0ZT09PXIuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbaV0mJmUuc3RhdGU9PT1nJiZlLmludm9rZSgpfTtyZXR1cm4gbC5jYWxsKHIsZCxzKSxyW25dfHwocltuXT1lKSxiLmFwcGx5KHIsdC5hcmdzKSxYTUxIdHRwUmVxdWVzdFtpXT0hMCxlfWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYWJvcnRlZD0hMCxULmFwcGx5KHQudGFyZ2V0LHQuYXJncyl9dmFyIGs9eihzLCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdPTA9PXRbMl0sZVthXT10WzFdLGsuYXBwbHkoZSx0KX19KSxiPXoocywic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT9iLmFwcGx5KGUsdCk6aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsXyx7dGFyZ2V0OmUsdXJsOmVbYV0saXNQZXJpb2RpYzohMSxkZWxheTpudWxsLGFyZ3M6dCxhYm9ydGVkOiExfSx5LG0pfX0pLFQ9eihzLCJhYm9ydCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuXTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSl7aWYobnVsbD09dC5jYW5jZWxGbnx8dC5kYXRhJiZ0LmRhdGEuYWJvcnRlZClyZXR1cm47dC56b25lLmNhbmNlbFRhc2sodCl9fX0pfSgpO3ZhciBuPXYoInhoclRhc2siKSxyPXYoInhoclN5bmMiKSxvPXYoInhockxpc3RlbmVyIiksaT12KCJ4aHJTY2hlZHVsZWQiKSxhPXYoInhoclVSTCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbih0KXt0Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPXQuY29uc3RydWN0b3IubmFtZSxvPWZ1bmN0aW9uKG8pe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe2lmKCFiKGUodCxpKSkpcmV0dXJuImNvbnRpbnVlIjt0W2ldPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxrKGFyZ3VtZW50cyxyKyIuIitpKSl9O3JldHVybiBNKHQsZSksdH0oYSl9fSxpPTA7aTxuLmxlbmd0aDtpKyspbyhpKX0odC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihuKXtXKGUsdCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihvKXt2YXIgaT1uZXcgbyh0LHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtyLmludm9rZShpKX19KX19ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJih0W3YoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPW4oInVuaGFuZGxlZHJlamVjdGlvbiIpLHRbdigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bigicmVqZWN0aW9uaGFuZGxlZCIpKX0pfSgpfSwiMVRzQSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSwiMk9pRiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LDM6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCJoTi9nIil9LCIzTHlqIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiS3JvSiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LCI0NVR2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmdldCx1PXIua2V5LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiBjKGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9zKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LCI0OUQ0IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZSx0LG4scil7YShlLHQsbyhuKSxpKHIpKX19KX0sIjRMaUQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiM0x5aiIpLGM9bigiWjZ2RiIpLHU9bigiU2xrWSIpLHM9bigiOWdYNyIpLGw9bigiMC9SNCIpLGY9bigiZWVWcSIpLHA9bigiWE1WaCIpLGg9bigiZnlEcSIpLHY9bigiWGJ6aSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixkLGcseSl7dmFyIF89cltlXSxtPV8saz1nPyJzZXQiOiJhZGQiLGI9bSYmbS5wcm90b3R5cGUsVD17fSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWJbZV07aShiLGUsImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4geSYmIWwoZSk/dm9pZCAwOnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUpLHRoaXN9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoeXx8Yi5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IG0seD1FW2tdKHk/e306LTAsMSkhPUUsTz1mKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSxTPXAoZnVuY3Rpb24oZSl7bmV3IG0oZSl9KSxEPSF5JiZmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBtLHQ9NTt0LS07KWVba10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSk7U3x8KChtPXQoZnVuY3Rpb24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBfLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShuLGcscltrXSxyKSxyfSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9bSksKE98fEQpJiYodygiZGVsZXRlIiksdygiaGFzIiksZyYmdygiZ2V0IikpLChEfHx4KSYmdyhrKSx5JiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIG09ZC5nZXRDb25zdHJ1Y3Rvcih0LGUsZyxrKSxhKG0ucHJvdG90eXBlLG4pLGMuTkVFRD0hMDtyZXR1cm4gaChtLGUpLFRbZV09bSxvKG8uRytvLlcrby5GKihtIT1fKSxUKSx5fHxkLnNldFN0cm9uZyhtLGUsZyksbX19LCI0UjR1IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiNkZNTyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oIkVXbUMiKSxpPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKCJmdW5jdGlvbiIhPXR5cGVvZih0PWUuY29uc3RydWN0b3IpfHx0IT09QXJyYXkmJiFvKHQucHJvdG90eXBlKXx8KHQ9dm9pZCAwKSxyKHQpJiZudWxsPT09KHQ9dFtpXSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/QXJyYXk6dH19LCI3RGxoIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5oYXMsYT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSwiOUFBbiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSwiOWdYNyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LEFmbno6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJMUUFjIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCJNdWtiIiksYz1uKCJoUElRIiksdT1uKCJRYURiIikscz1uKCJmeURxIiksbD1uKCJPUDNZIiksZj1uKCJLMHhVIikoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LGQsZyx5KXt1KG4sdCx2KTt2YXIgXyxtLGssYj1mdW5jdGlvbihlKXtpZighcCYmZSBpbiB4KXJldHVybiB4W2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsdz0idmFsdWVzIj09ZCxFPSExLHg9ZS5wcm90b3R5cGUsTz14W2ZdfHx4WyJAQGl0ZXJhdG9yIl18fGQmJnhbZF0sUz1PfHxiKGQpLEQ9ZD93P2IoImVudHJpZXMiKTpTOnZvaWQgMCxqPSJBcnJheSI9PXQmJnguZW50cmllc3x8TztpZihqJiYoaz1sKGouY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmsubmV4dCYmKHMoayxULCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2Yga1tmXXx8YShrLGYsaCkpLHcmJk8mJiJ2YWx1ZXMiIT09Ty5uYW1lJiYoRT0hMCxTPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLHImJiF5fHwhcCYmIUUmJnhbZl18fGEoeCxmLFMpLGNbdF09UyxjW1RdPWgsZClpZihfPXt2YWx1ZXM6dz9TOmIoInZhbHVlcyIpLGtleXM6Zz9TOmIoImtleXMiKSxlbnRyaWVzOkR9LHkpZm9yKG0gaW4gXyltIGluIHh8fGkoeCxtLF9bbV0pO2Vsc2UgbyhvLlArby5GKihwfHxFKSx0LF8pO3JldHVybiBffX0sQnFmVjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5nZXQsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxDa2tUOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJZbXF2IiksaT1uKCJTL2ovIiksYT1uKCJuZThpIiksYz1uKCJ6UndvIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MT09ZSx1PTI9PWUscz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmLGg9dHx8YztyZXR1cm4gZnVuY3Rpb24odCxjLHYpe2Zvcih2YXIgZCxnLHk9aSh0KSxfPW8oeSksbT1yKGMsdiwzKSxrPWEoXy5sZW5ndGgpLGI9MCxUPW4/aCh0LGspOnU/aCh0LDApOnZvaWQgMDtrPmI7YisrKWlmKChwfHxiIGluIF8pJiYoZz1tKGQ9X1tiXSxiLHkpLGUpKWlmKG4pVFtiXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOlQucHVzaChkKX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6c3x8bD9sOlR9fX0sRFZnQTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiemhBYiIpLG89bigiNFI0dSIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LEVLMEU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIkNra1QiKSgwKSxpPW4oIktyb0oiKSxhPW4oIlo2dkYiKSxjPW4oImN6TksiKSx1PW4oIlpENjciKSxzPW4oIjAvUjQiKSxsPW4oImVlVnEiKSxmPW4oInM1cVkiKSxwPWEuZ2V0V2VhayxoPU9iamVjdC5pc0V4dGVuc2libGUsdj11LnVmc3RvcmUsZD17fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0seT17Z2V0OmZ1bmN0aW9uKGUpe2lmKHMoZSkpe3ZhciB0PXAoZSk7cmV0dXJuITA9PT10P3YoZih0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZGVmKGYodGhpcywiV2Vha01hcCIpLGUsdCl9fSxfPWUuZXhwb3J0cz1uKCI0TGlEIikoIldlYWtNYXAiLGcseSx1LCEwLCEwKTtsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgXykuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGQpLDcpLmdldChkKX0pJiYoYygocj11LmdldENvbnN0cnVjdG9yKGcsIldlYWtNYXAiKSkucHJvdG90eXBlLHkpLGEuTkVFRD0hMCxvKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsbj10W2VdO2kodCxlLGZ1bmN0aW9uKHQsbyl7aWYocyh0KSYmIWgodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyByKTt2YXIgaT10aGlzLl9mW2VdKHQsbyk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiBuLmNhbGwodGhpcyx0LG8pfSl9KSl9LEVXbUM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LEVlbUg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVxY0YiKSxvPW4oIlJqRC8iKSxpPW4oImFDRmoiKSxhPW4oImFwbVQiKSxjPW4oImFhZ3giKSx1PW4oInhwcWwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4oIm5oNGciKT9zOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSx1KXRyeXtyZXR1cm4gcyhlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxGSlc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJ5M3c5IiksaT1uKCJEVmdBIik7ZS5leHBvcnRzPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciBuLGE9aSh0KSxjPWEubGVuZ3RoLHU9MDtjPnU7KXIuZihlLG49YVt1KytdLHRbbl0pO3JldHVybiBlfX0sRlpjcTpmdW5jdGlvbihlLHQsbil7bigiNDlENCIpLG4oInpxK0MiKSxuKCI0NVR2IiksbigidUF0ZCIpLG4oIkJxZlYiKSxuKCJmTi8zIiksbigiaVcrUyIpLG4oIjdEbGgiKSxuKCJPcHhiIiksZS5leHBvcnRzPW4oImczZzUiKS5SZWZsZWN0fSxINmhmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSwiSThhKyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKSxvPW4oIksweFUiKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sSXc3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiZHlaWCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQoZSk6e319fSwiSis2ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkk4YSsiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPW4oImhQSVEiKTtlLmV4cG9ydHM9bigiZzNnNSIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sSmlFYTpmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxLMHhVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoIndrcyIpLG89bigieWxxcyIpLGk9bigiZHlaWCIpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LEtyb0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oIk11a2IiKSxpPW4oImFhZ3giKSxhPW4oInlscXMiKSgic3JjIiksYz1GdW5jdGlvbi50b1N0cmluZyx1PSgiIitjKS5zcGxpdCgidG9TdHJpbmciKTtuKCJnM2c1IikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5jYWxsKGUpfSwoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGMpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3MmJihpKG4sIm5hbWUiKXx8byhuLCJuYW1lIix0KSksZVt0XSE9PW4mJihzJiYoaShuLGEpfHxvKG4sYSxlW3RdPyIiK2VbdF06dS5qb2luKFN0cmluZyh0KSkpKSxlPT09cj9lW3RdPW46Yz9lW3RdP2VbdF09bjpvKGUsdCxuKTooZGVsZXRlIGVbdF0sbyhlLHQsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGMuY2FsbCh0aGlzKX0pfSxLdXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJGSlc1IiksaT1uKCI0UjR1IiksYT1uKCJZVHZBIikoIklFX1BST1RPIiksYz1mdW5jdGlvbigpe30sdT1mdW5jdGlvbigpe3ZhciBlLHQ9bigiSXc3MSIpKCJpZnJhbWUiKSxyPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLG4oIityTHYiKS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLHU9ZS5GO3ItLTspZGVsZXRlIHUucHJvdG90eXBlW2lbcl1dO3JldHVybiB1KCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oYy5wcm90b3R5cGU9cihlKSxuPW5ldyBjLGMucHJvdG90eXBlPW51bGwsblthXT1lKTpuPXUoKSx2b2lkIDA9PT10P246byhuLHQpfX0sTFFBYzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sTFpXdDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sTTZRajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaFBJUSIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxNdWtiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJSakQvIik7ZS5leHBvcnRzPW4oIm5oNGciKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LE42Y0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjlBQW4iKSxvPW4oIlhLRlUiKSxpPW4oIlZUZXIiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJFSzBFIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldCh0LGk9bmV3IHIpfXJldHVybiBpfTtlLmV4cG9ydHM9e3N0b3JlOmEsbWFwOmMsaGFzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxnZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQoZSl9LHNldDpmdW5jdGlvbihlLHQsbixyKXtjKG4sciwhMCkuc2V0KGUsdCl9LGtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ci5wdXNoKHQpfSkscn0sa2V5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJpbmcoZSl9LGV4cDpmdW5jdGlvbihlKXtvKG8uUywiUmVmbGVjdCIsZSl9fX0sT1AzWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiUy9qLyIpLGk9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LE9weGI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIjJPaUYiKSxhPXIua2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LFEzbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlNsa1kiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSxRYURiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiS3V0aCIpLG89bigiUmpELyIpLGk9bigiZnlEcSIpLGE9e307bigiTXVrYiIpKGEsbigiSzB4VSIpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPXIoYSx7bmV4dDpvKDEsbil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxSWWk3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGU9K2UpPzA6KGU+MD9yOm4pKGUpfX0sIlJqRC8iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIlMvai8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxTbGtZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJINmhmIiksaT1uKCJNNlFqIiksYT1uKCJ5M3c5IiksYz1uKCJuZThpIiksdT1uKCJKKzZlIikscz17fSxsPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBoLHYsZCxnLHk9cD9mdW5jdGlvbigpe3JldHVybiBlfTp1KGUpLF89cihuLGYsdD8yOjEpLG09MDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHkpKXtmb3IoaD1jKGUubGVuZ3RoKTtoPm07bSsrKWlmKChnPXQ/XyhhKHY9ZVttXSlbMF0sdlsxXSk6XyhlW21dKSk9PT1zfHxnPT09bClyZXR1cm4gZ31lbHNlIGZvcihkPXkuY2FsbChlKTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKChnPW8oZCxfLHYudmFsdWUsdCkpPT09c3x8Zz09PWwpcmV0dXJuIGd9KS5CUkVBSz1zLHQuUkVUVVJOPWx9LFQzOWI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sVXFjRjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sVlRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZzNnNSIpLG89bigiZHlaWCIpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCJMUUFjIik/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSxYS0ZVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJnM2c1IiksaT1uKCJNdWtiIiksYT1uKCJLcm9KIiksYz1uKCJtMFBwIiksdT1mdW5jdGlvbihlLHQsbil7dmFyIHMsbCxmLHAsaD1lJnUuRix2PWUmdS5HLGQ9ZSZ1LlAsZz1lJnUuQix5PXY/cjplJnUuUz9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsXz12P286b1t0XXx8KG9bdF09e30pLG09Xy5wcm90b3R5cGV8fChfLnByb3RvdHlwZT17fSk7Zm9yKHMgaW4gdiYmKG49dCksbilmPSgobD0haCYmeSYmdm9pZCAwIT09eVtzXSk/eTpuKVtzXSxwPWcmJmw/YyhmLHIpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBmP2MoRnVuY3Rpb24uY2FsbCxmKTpmLHkmJmEoeSxzLGYsZSZ1LlUpLF9bc10hPWYmJmkoXyxzLHApLGQmJm1bc10hPWYmJihtW3NdPWYpfTtyLmNvcmU9byx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LGUuZXhwb3J0cz11fSxYTVZoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLMHhVIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLGE9aVtyXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sWGJ6aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiaTVkYyIpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoaT1hLnByb3RvdHlwZSkhPT1uLnByb3RvdHlwZSYmcihpKSYmbyYmbyhlLGkpLGV9fSxZVHZBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoImtleXMiKSxvPW4oInlscXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sWW1xdjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sWjZ2RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWxxcyIpKCJtZXRhIiksbz1uKCIwL1I0IiksaT1uKCJhYWd4IiksYT1uKCJoc3dhIikuZixjPTAsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gdShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGw9ZnVuY3Rpb24oZSl7YShlLHIse3ZhbHVlOntpOiJPIisgKytjLHc6e319fSl9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighbyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtsKGUpfXJldHVybiBlW3JdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtsKGUpfXJldHVybiBlW3JdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBzJiZmLk5FRUQmJnUoZSkmJiFpKGUscikmJmwoZSksZX19fSxaRDY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiM0x5aiIpLG89bigiWjZ2RiIpLmdldFdlYWssaT1uKCJ5M3c5IiksYT1uKCIwL1I0IiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJDa2tUIiksbD1uKCJhYWd4IiksZj1uKCJzNXFZIikscD1zKDUpLGg9cyg2KSx2PTAsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fbHx8KGUuX2w9bmV3IGcpfSxnPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhpcyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXYrKyxlLl9sPXZvaWQgMCx2b2lkIDAhPXImJnUocixuLGVbaV0sZSl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5kZWxldGUoZSk6biYmbChuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5oYXMoZSk6biYmbChuLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/ZChlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTpkfX0sYUNGajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiWW1xdiIpLG89bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LGFhZ3g6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxhcG1UOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sY3pOSzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkRWZ0EiKSxvPW4oIkppRWEiKSxpPW4oIlVxY0YiKSxhPW4oIlMvai8iKSxjPW4oIlltcXYiKSx1PU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSF1fHxuKCJlZVZxIikoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT11KHt9LGUpW25dfHxPYmplY3Qua2V5cyh1KHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksdT1hcmd1bWVudHMubGVuZ3RoLHM9MSxsPW8uZixmPWkuZjt1PnM7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW3MrK10pLHY9bD9yKGgpLmNvbmNhdChsKGgpKTpyKGgpLGQ9di5sZW5ndGgsZz0wO2Q+ZzspZi5jYWxsKGgscD12W2crK10pJiYobltwXT1oW3BdKTtyZXR1cm4gbn06dX0sImQvR2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZHlaWDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZWVWcTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZWxacTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oImhzd2EiKSxpPW4oIm5oNGciKSxhPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO2kmJnQmJiF0W2FdJiZvLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiZk4vMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ5RHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKS5mLG89bigiYWFneCIpLGk9bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIW8oZT1uP2U6ZS5wcm90b3R5cGUsaSkmJnIoZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZzNnNTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjcifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sImhOL2ciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4oIkZaY3EiKSxuKCIwVFdwIil9LGhQSVE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGhzd2E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oInhwcWwiKSxpPW4oImFwbVQiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYocihlKSx0PWkodCwhMCkscihuKSxvKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxpNWRjOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJ5M3c5IiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5eyhyPW4oIm0wUHAiKShGdW5jdGlvbi5jYWxsLG4oIkVlbUgiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSkoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpyKGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSwiaVcrUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSxtMFBwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIyT2lGIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxuZThpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LG5oNGc6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sczVxWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSx1QXRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJUMzliIiksbz1uKCJRM25lIiksaT1uKCJONmNKIiksYT1uKCJ5M3c5IiksYz1uKCJPUDNZIiksdT1pLmtleXMscz1pLmtleSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dShlLHQpLGk9YyhlKTtpZihudWxsPT09aSlyZXR1cm4gbjt2YXIgYT1sKGksdCk7cmV0dXJuIGEubGVuZ3RoP24ubGVuZ3RoP28obmV3IHIobi5jb25jYXQoYSkpKTphOm59O2kuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYShlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnMoYXJndW1lbnRzWzFdKSl9fSl9LHZoUFU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSx3MmE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhQ0ZqIiksbz1uKCJuZThpIiksaT1uKCJkL0djIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1yKHQpLHM9byh1Lmxlbmd0aCksbD1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmw7KWlmKChjPXVbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+bDtsKyspaWYoKGV8fGwgaW4gdSkmJnVbbF09PT1uKXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19fSx3bXZHOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJLdXRoIiksaT1uKCIzTHlqIiksYT1uKCJtMFBwIiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJBZm56IiksbD1uKCIxVHNBIiksZj1uKCJlbFpxIikscD1uKCJuaDRnIiksaD1uKCJaNnZGIikuZmFzdEtleSx2PW4oInM1cVkiKSxkPXA/Il9zIjoic2l6ZSIsZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9aCh0KTtpZigiRiIhPT1yKXJldHVybiBlLl9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2MoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9byhudWxsKSxlLl9mPXZvaWQgMCxlLl9sPXZvaWQgMCxlW2RdPTAsdm9pZCAwIT1yJiZ1KHIsbixlW3NdLGUpfSk7cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXYodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj12KHRoaXMsdCkscj1nKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3YodGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIWcodih0aGlzLHQpLGUpfX0pLHAmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLHQpW2RdfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWcoZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89aCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVtkXSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpnLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7cyhlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PXYoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/bCgwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLGwoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSx4cHFsOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIm5oNGciKSYmIW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigiSXc3MSIpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0seTN3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSx5bHFzOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0selJ3bzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiNkZNTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcocihlKSkodCl9fSx6aEFiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJhQ0ZqIiksaT1uKCJ3MmE1IikoITEpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGM9byhlKSx1PTAscz1bXTtmb3IobiBpbiBjKW4hPWEmJnIoYyxuKSYmcy5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMywzXV1dKTshZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZS5kb2N1bWVudCxyPWUuT2JqZWN0LG89ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGwsYT0vXltBLVpdK1thLXpdLyxpPWZ1bmN0aW9uKGUsdCl7KHQ9dC50b0xvd2VyQ2FzZSgpKWluIHV8fCh1W2VdPSh1W2VdfHxbXSkuY29uY2F0KHQpLHVbdF09dVt0LnRvVXBwZXJDYXNlKCldPWUpfSx1PShyLmNyZWF0ZXx8cikobnVsbCksYz17fTtmb3IobiBpbiBlKWZvcihsIGluIGVbbl0pZm9yKHVbbF09bz1lW25dW2xdLHQ9MDt0PG8ubGVuZ3RoO3QrKyl1W29bdF0udG9Mb3dlckNhc2UoKV09dVtvW3RdLnRvVXBwZXJDYXNlKCldPWw7cmV0dXJuIGMuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT91W2VdfHwoYS50ZXN0KGUpP1tdOiIiKTpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIHUpZS50ZXN0KHQpJiZuLnB1c2godCk7cmV0dXJuIG59KGUpfSxjLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBhLnRlc3QoZSk/aShlLHQpOmkodCxlKSxjfSxjfSh7Y29sbGVjdGlvbnM6e0hUTUxBbGxDb2xsZWN0aW9uOlsiYWxsIl0sSFRNTENvbGxlY3Rpb246WyJmb3JtcyJdLEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOlsiZWxlbWVudHMiXSxIVE1MT3B0aW9uc0NvbGxlY3Rpb246WyJvcHRpb25zIl19LGVsZW1lbnRzOntFbGVtZW50OlsiZWxlbWVudCJdLEhUTUxBbmNob3JFbGVtZW50OlsiYSJdLEhUTUxBcHBsZXRFbGVtZW50OlsiYXBwbGV0Il0sSFRNTEFyZWFFbGVtZW50OlsiYXJlYSJdLEhUTUxBdHRhY2htZW50RWxlbWVudDpbImF0dGFjaG1lbnQiXSxIVE1MQXVkaW9FbGVtZW50OlsiYXVkaW8iXSxIVE1MQlJFbGVtZW50OlsiYnIiXSxIVE1MQmFzZUVsZW1lbnQ6WyJiYXNlIl0sSFRNTEJvZHlFbGVtZW50OlsiYm9keSJdLEhUTUxCdXR0b25FbGVtZW50OlsiYnV0dG9uIl0sSFRNTENhbnZhc0VsZW1lbnQ6WyJjYW52YXMiXSxIVE1MQ29udGVudEVsZW1lbnQ6WyJjb250ZW50Il0sSFRNTERMaXN0RWxlbWVudDpbImRsIl0sSFRNTERhdGFFbGVtZW50OlsiZGF0YSJdLEhUTUxEYXRhTGlzdEVsZW1lbnQ6WyJkYXRhbGlzdCJdLEhUTUxEZXRhaWxzRWxlbWVudDpbImRldGFpbHMiXSxIVE1MRGlhbG9nRWxlbWVudDpbImRpYWxvZyJdLEhUTUxEaXJlY3RvcnlFbGVtZW50OlsiZGlyIl0sSFRNTERpdkVsZW1lbnQ6WyJkaXYiXSxIVE1MRG9jdW1lbnQ6WyJkb2N1bWVudCJdLEhUTUxFbGVtZW50OlsiZWxlbWVudCIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYiIsImJkaSIsImJkbyIsImNpdGUiLCJjb2RlIiwiY29tbWFuZCIsImRkIiwiZGZuIiwiZHQiLCJlbSIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJoZWFkZXIiLCJpIiwia2JkIiwibWFyayIsIm5hdiIsIm5vc2NyaXB0IiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzbWFsbCIsInN0cm9uZyIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ1IiwidmFyIiwid2JyIl0sSFRNTEVtYmVkRWxlbWVudDpbImVtYmVkIl0sSFRNTEZpZWxkU2V0RWxlbWVudDpbImZpZWxkc2V0Il0sSFRNTEZvbnRFbGVtZW50OlsiZm9udCJdLEhUTUxGb3JtRWxlbWVudDpbImZvcm0iXSxIVE1MRnJhbWVFbGVtZW50OlsiZnJhbWUiXSxIVE1MRnJhbWVTZXRFbGVtZW50OlsiZnJhbWVzZXQiXSxIVE1MSFJFbGVtZW50OlsiaHIiXSxIVE1MSGVhZEVsZW1lbnQ6WyJoZWFkIl0sSFRNTEhlYWRpbmdFbGVtZW50OlsiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Il0sSFRNTEh0bWxFbGVtZW50OlsiaHRtbCJdLEhUTUxJRnJhbWVFbGVtZW50OlsiaWZyYW1lIl0sSFRNTEltYWdlRWxlbWVudDpbImltZyJdLEhUTUxJbnB1dEVsZW1lbnQ6WyJpbnB1dCJdLEhUTUxLZXlnZW5FbGVtZW50Olsia2V5Z2VuIl0sSFRNTExJRWxlbWVudDpbImxpIl0sSFRNTExhYmVsRWxlbWVudDpbImxhYmVsIl0sSFRNTExlZ2VuZEVsZW1lbnQ6WyJsZWdlbmQiXSxIVE1MTGlua0VsZW1lbnQ6WyJsaW5rIl0sSFRNTE1hcEVsZW1lbnQ6WyJtYXAiXSxIVE1MTWFycXVlZUVsZW1lbnQ6WyJtYXJxdWVlIl0sSFRNTE1lZGlhRWxlbWVudDpbIm1lZGlhIl0sSFRNTE1lbnVFbGVtZW50OlsibWVudSJdLEhUTUxNZW51SXRlbUVsZW1lbnQ6WyJtZW51aXRlbSJdLEhUTUxNZXRhRWxlbWVudDpbIm1ldGEiXSxIVE1MTWV0ZXJFbGVtZW50OlsibWV0ZXIiXSxIVE1MTW9kRWxlbWVudDpbImRlbCIsImlucyJdLEhUTUxPTGlzdEVsZW1lbnQ6WyJvbCJdLEhUTUxPYmplY3RFbGVtZW50Olsib2JqZWN0Il0sSFRNTE9wdEdyb3VwRWxlbWVudDpbIm9wdGdyb3VwIl0sSFRNTE9wdGlvbkVsZW1lbnQ6WyJvcHRpb24iXSxIVE1MT3V0cHV0RWxlbWVudDpbIm91dHB1dCJdLEhUTUxQYXJhZ3JhcGhFbGVtZW50OlsicCJdLEhUTUxQYXJhbUVsZW1lbnQ6WyJwYXJhbSJdLEhUTUxQaWN0dXJlRWxlbWVudDpbInBpY3R1cmUiXSxIVE1MUHJlRWxlbWVudDpbInByZSJdLEhUTUxQcm9ncmVzc0VsZW1lbnQ6WyJwcm9ncmVzcyJdLEhUTUxRdW90ZUVsZW1lbnQ6WyJibG9ja3F1b3RlIiwicSIsInF1b3RlIl0sSFRNTFNjcmlwdEVsZW1lbnQ6WyJzY3JpcHQiXSxIVE1MU2VsZWN0RWxlbWVudDpbInNlbGVjdCJdLEhUTUxTaGFkb3dFbGVtZW50Olsic2hhZG93Il0sSFRNTFNsb3RFbGVtZW50Olsic2xvdCJdLEhUTUxTb3VyY2VFbGVtZW50Olsic291cmNlIl0sSFRNTFNwYW5FbGVtZW50Olsic3BhbiJdLEhUTUxTdHlsZUVsZW1lbnQ6WyJzdHlsZSJdLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlsiY2FwdGlvbiJdLEhUTUxUYWJsZUNlbGxFbGVtZW50OlsidGQiLCJ0aCJdLEhUTUxUYWJsZUNvbEVsZW1lbnQ6WyJjb2wiLCJjb2xncm91cCJdLEhUTUxUYWJsZUVsZW1lbnQ6WyJ0YWJsZSJdLEhUTUxUYWJsZVJvd0VsZW1lbnQ6WyJ0ciJdLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0sSFRNTFRlbXBsYXRlRWxlbWVudDpbInRlbXBsYXRlIl0sSFRNTFRleHRBcmVhRWxlbWVudDpbInRleHRhcmVhIl0sSFRNTFRpbWVFbGVtZW50OlsidGltZSJdLEhUTUxUaXRsZUVsZW1lbnQ6WyJ0aXRsZSJdLEhUTUxUcmFja0VsZW1lbnQ6WyJ0cmFjayJdLEhUTUxVTGlzdEVsZW1lbnQ6WyJ1bCJdLEhUTUxVbmtub3duRWxlbWVudDpbInVua25vd24iLCJ2aGdyb3VwdiIsInZrZXlnZW4iXSxIVE1MVmlkZW9FbGVtZW50OlsidmlkZW8iXX0sbm9kZXM6e0F0dHI6WyJub2RlIl0sQXVkaW86WyJhdWRpbyJdLENEQVRBU2VjdGlvbjpbIm5vZGUiXSxDaGFyYWN0ZXJEYXRhOlsibm9kZSJdLENvbW1lbnQ6WyIjY29tbWVudCJdLERvY3VtZW50OlsiI2RvY3VtZW50Il0sRG9jdW1lbnRGcmFnbWVudDpbIiNkb2N1bWVudC1mcmFnbWVudCJdLERvY3VtZW50VHlwZTpbIm5vZGUiXSxIVE1MRG9jdW1lbnQ6WyIjZG9jdW1lbnQiXSxJbWFnZTpbImltZyJdLE9wdGlvbjpbIm9wdGlvbiJdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbIm5vZGUiXSxTaGFkb3dSb290OlsiI3NoYWRvdy1yb290Il0sVGV4dDpbIiN0ZXh0Il0sWE1MRG9jdW1lbnQ6WyJ4bWwiXX19KTsib2JqZWN0IiE9dHlwZW9mIHQmJih0PXt0eXBlOnR8fCJhdXRvIn0pO3ZhciBsLGEsaSx1LGMscyxtLGYscCxkPSJyZWdpc3RlckVsZW1lbnQiLGg9Il9fIitkKygxZTUqZS5NYXRoLnJhbmRvbSgpPj4wKSxUPSJhZGRFdmVudExpc3RlbmVyIixMPSJhdHRhY2hlZCIsTT0iQ2FsbGJhY2siLEU9ImRldGFjaGVkIix2PSJleHRlbmRzIixIPSJhdHRyaWJ1dGVDaGFuZ2VkIitNLGc9TCtNLGI9ImNvbm5lY3RlZCIrTSx5PSJkaXNjb25uZWN0ZWQiK00sQz0iY3JlYXRlZCIrTSx3PUUrTSxBPSJBRERJVElPTiIsTz0iUkVNT1ZBTCIsTj0iRE9NQXR0ck1vZGlmaWVkIixEPSJET01Db250ZW50TG9hZGVkIixJPSJET01TdWJ0cmVlTW9kaWZpZWQiLEY9IjwiLFM9Ij0iLFY9L15bQS1aXVtBLVowLTldKig/Oi1bQS1aMC05XSspKyQvLFA9WyJBTk5PVEFUSU9OLVhNTCIsIkNPTE9SLVBST0ZJTEUiLCJGT05ULUZBQ0UiLCJGT05ULUZBQ0UtU1JDIiwiRk9OVC1GQUNFLVVSSSIsIkZPTlQtRkFDRS1GT1JNQVQiLCJGT05ULUZBQ0UtTkFNRSIsIk1JU1NJTkctR0xZUEgiXSxSPVtdLFU9W10saz0iIixfPW4uZG9jdW1lbnRFbGVtZW50LHE9Ui5pbmRleE9mfHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGg7dC0tJiZ0aGlzW3RdIT09ZTspO3JldHVybiB0fSx4PXIucHJvdG90eXBlLEI9eC5oYXNPd25Qcm9wZXJ0eSxaPXguaXNQcm90b3R5cGVPZixqPXIuZGVmaW5lUHJvcGVydHksRz1bXSx6PXIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEs9ci5nZXRPd25Qcm9wZXJ0eU5hbWVzLFg9ci5nZXRQcm90b3R5cGVPZiwkPXIuc2V0UHJvdG90eXBlT2YsUT0hIXIuX19wcm90b19fLFc9Il9fZHJlQ0V2MSIsWT1lLmN1c3RvbUVsZW1lbnRzLEo9IS9eZm9yY2UvLnRlc3QodC50eXBlKSYmISEoWSYmWS5kZWZpbmUmJlkuZ2V0JiZZLndoZW5EZWZpbmVkKSxlZT1yLmNyZWF0ZXx8cix0ZT1lLk1hcHx8ZnVuY3Rpb24oKXt2YXIgZSx0PVtdLG49W107cmV0dXJue2dldDpmdW5jdGlvbihlKXtyZXR1cm4gbltxLmNhbGwodCxlKV19LHNldDpmdW5jdGlvbihyLG8peyhlPXEuY2FsbCh0LHIpKTwwP25bdC5wdXNoKHIpLTFdPW86bltlXT1vfX19LG5lPWUuUHJvbWlzZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0hMSxyPXtjYXRjaDpmdW5jdGlvbigpe3JldHVybiByfSx0aGVuOmZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSksbiYmc2V0VGltZW91dChvLDEpLHJ9fTtmdW5jdGlvbiBvKGUpe2ZvcihuPSEwO3QubGVuZ3RoOyl0LnNoaWZ0KCkoZSl9cmV0dXJuIGUobykscn0scmU9ITEsb2U9ZWUobnVsbCksbGU9ZWUobnVsbCksYWU9bmV3IHRlLGllPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHVlPXIuY3JlYXRlfHxmdW5jdGlvbiBlKHQpe3JldHVybiB0PyhlLnByb3RvdHlwZT10LG5ldyBlKTp0aGlzfSxjZT0kfHwoUT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9OksmJno/ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuLHI9Syh0KSxvPTAsbD1yLmxlbmd0aDtvPGw7bysrKUIuY2FsbChlLG49cltvXSl8fGooZSxuLHoodCxuKSl9cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZG97ZSh0LG4pfXdoaWxlKChuPVgobikpJiYhWi5jYWxsKG4sdCkpO3JldHVybiB0fX0oKTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX0pLHNlPWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG1lPShlLkhUTUxFbGVtZW50fHxlLkVsZW1lbnR8fGUuTm9kZSkucHJvdG90eXBlLGZlPSFaLmNhbGwobWUsXykscGU9ZmU/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4udmFsdWUsZX06aixkZT1mZT9mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9OmZ1bmN0aW9uKGUpe3JldHVybiBaLmNhbGwobWUsZSl9LGhlPWZlJiZbXSxUZT1tZS5hdHRhY2hTaGFkb3csTGU9bWUuY2xvbmVOb2RlLE1lPW1lLmRpc3BhdGNoRXZlbnQsRWU9bWUuZ2V0QXR0cmlidXRlLHZlPW1lLmhhc0F0dHJpYnV0ZSxIZT1tZS5yZW1vdmVBdHRyaWJ1dGUsZ2U9bWUuc2V0QXR0cmlidXRlLGJlPW4uY3JlYXRlRWxlbWVudCx5ZT1iZSxDZT1zZSYme2F0dHJpYnV0ZXM6ITAsY2hhcmFjdGVyRGF0YTohMCxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0sd2U9c2V8fGZ1bmN0aW9uKGUpe0llPSExLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihOLHdlKX0sQWU9MCxPZT1kIGluIG4mJiEvXmZvcmNlLWFsbC8udGVzdCh0LnR5cGUpLE5lPSEwLERlPSExLEllPSEwLEZlPSEwLFNlPSEwO2Z1bmN0aW9uIFZlKCl7dmFyIGU9bC5zcGxpY2UoMCxsLmxlbmd0aCk7Zm9yKEFlPTA7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jYWxsKG51bGwsZS5zaGlmdCgpKX1mdW5jdGlvbiBQZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylHZShlW25dLHQpfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtkZSh0KSYmKEdlKHQsZSksay5sZW5ndGgmJlBlKHQucXVlcnlTZWxlY3RvckFsbChrKSxlKSl9fWZ1bmN0aW9uIFVlKGUpe3ZhciB0PUVlLmNhbGwoZSwiaXMiKSxuPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXEuY2FsbChSLHQ/Uyt0LnRvVXBwZXJDYXNlKCk6RituKTtyZXR1cm4gdCYmLTE8ciYmIWtlKG4sdCk/LTE6cn1mdW5jdGlvbiBrZShlLHQpe3JldHVybi0xPGsuaW5kZXhPZihlKydbaXM9IicrdCsnIl0nKX1mdW5jdGlvbiBfZShlKXt2YXIgdD1lLmN1cnJlbnRUYXJnZXQsbj1lLmF0dHJDaGFuZ2Uscj1lLmF0dHJOYW1lLG89ZS50YXJnZXQsbD1lW0FdfHwyLGE9ZVtPXXx8MzshU2V8fG8mJm8hPT10fHwhdFtIXXx8InN0eWxlIj09PXJ8fGUucHJldlZhbHVlPT09ZS5uZXdWYWx1ZSYmKCIiIT09ZS5uZXdWYWx1ZXx8biE9PWwmJm4hPT1hKXx8dFtIXShyLG49PT1sP251bGw6ZS5wcmV2VmFsdWUsbj09PWE/bnVsbDplLm5ld1ZhbHVlKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1SZShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7bC5wdXNoKHQsZS50YXJnZXQpLEFlJiZjbGVhclRpbWVvdXQoQWUpLEFlPXNldFRpbWVvdXQoVmUsMSl9fWZ1bmN0aW9uIHhlKGUpe0ZlJiYoRmU9ITEsZS5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoRCx4ZSkpLGsubGVuZ3RoJiZQZSgoZS50YXJnZXR8fG4pLnF1ZXJ5U2VsZWN0b3JBbGwoayksZS5kZXRhaWw9PT1FP0U6TCksZmUmJmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxuPWhlLmxlbmd0aDt0PG47dCsrKV8uY29udGFpbnMoZT1oZVt0XSl8fChuLS0saGUuc3BsaWNlKHQtLSwxKSxHZShlLEUpKX0oKX1mdW5jdGlvbiBCZShlLHQpe2dlLmNhbGwodGhpcyxlLHQpLGEuY2FsbCh0aGlzLHt0YXJnZXQ6dGhpc30pfWZ1bmN0aW9uIFplKGUsdCl7Y2UoZSx0KSxjP2Mub2JzZXJ2ZShlLENlKTooSWUmJihlLnNldEF0dHJpYnV0ZT1CZSxlW2hdPXUoZSksZVtUXShJLGEpKSxlW1RdKE4sX2UpKSxlW0NdJiZTZSYmKGUuY3JlYXRlZD0hMCxlW0NdKCksZS5jcmVhdGVkPSExKX1mdW5jdGlvbiBqZShlKXt0aHJvdyBuZXcgRXJyb3IoIkEgIitlKyIgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiKX1mdW5jdGlvbiBHZShlLHQpe3ZhciBuLHIsbz1VZShlKTstMTxvJiYobShlLFVbb10pLG89MCx0IT09THx8ZVtMXT90IT09RXx8ZVtFXXx8KGVbTF09ITEsZVtFXT0hMCxyPSJkaXNjb25uZWN0ZWQiLG89MSk6KGVbRV09ITEsZVtMXT0hMCxyPSJjb25uZWN0ZWQiLG89MSxmZSYmcS5jYWxsKGhlLGUpPDAmJmhlLnB1c2goZSkpLG8mJihuPWVbdCtNXXx8ZVtyK01dKSYmbi5jYWxsKGUpKX1mdW5jdGlvbiB6ZSgpe31mdW5jdGlvbiBLZShlLHQscil7dmFyIG89ciYmclt2XXx8IiIsbD10LnByb3RvdHlwZSxhPXVlKGwpLGk9dC5vYnNlcnZlZEF0dHJpYnV0ZXN8fEcsdT17cHJvdG90eXBlOmF9O3BlKGEsQyx7dmFsdWU6ZnVuY3Rpb24oKXtpZihyZSlyZT0hMTtlbHNlIGlmKCF0aGlzW1ddKXt0aGlzW1ddPSEwLG5ldyB0KHRoaXMpLGxbQ10mJmxbQ10uY2FsbCh0aGlzKTt2YXIgZT1vZVthZS5nZXQodCldOyghSnx8ZS5jcmVhdGUubGVuZ3RoPjEpJiZRZSh0aGlzKX19fSkscGUoYSxILHt2YWx1ZTpmdW5jdGlvbihlKXstMTxxLmNhbGwoaSxlKSYmbFtIXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSksbFtiXSYmcGUoYSxnLHt2YWx1ZTpsW2JdfSksbFt5XSYmcGUoYSx3LHt2YWx1ZTpsW3ldfSksbyYmKHVbdl09byksZT1lLnRvVXBwZXJDYXNlKCksb2VbZV09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOm8/W28saWUoZSldOltlXX0sYWUuc2V0KHQsZSksbltkXShlLnRvTG93ZXJDYXNlKCksdSksV2UoZSksbGVbZV0ucigpfWZ1bmN0aW9uIFhlKGUpe3ZhciB0PW9lW2UudG9VcHBlckNhc2UoKV07cmV0dXJuIHQmJnQuY29uc3RydWN0b3J9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSYmZS5pc3x8IiJ9ZnVuY3Rpb24gUWUoZSl7Zm9yKHZhciB0LG49ZVtIXSxyPW4/ZS5hdHRyaWJ1dGVzOkcsbz1yLmxlbmd0aDtvLS07KW4uY2FsbChlLCh0PXJbb10pLm5hbWV8fHQubm9kZU5hbWUsbnVsbCx0LnZhbHVlfHx0Lm5vZGVWYWx1ZSl9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuKGU9ZS50b1VwcGVyQ2FzZSgpKWluIGxlfHwobGVbZV09e30sbGVbZV0ucD1uZXcgbmUoZnVuY3Rpb24odCl7bGVbZV0ucj10fSkpLGxlW2VdLnB9ZnVuY3Rpb24gWWUoKXtZJiZkZWxldGUgZS5jdXN0b21FbGVtZW50cyxqKGUsImN1c3RvbUVsZW1lbnRzIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm5ldyB6ZX0pLGooZSwiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnplfSk7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciByPWVbdF07aWYocil7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxvO3JldHVybiBlfHwoZT10aGlzKSxlW1ddfHwocmU9ITAsdD1vZVthZS5nZXQoZS5jb25zdHJ1Y3RvcildLChlPShvPUomJjE9PT10LmNyZWF0ZS5sZW5ndGgpP1JlZmxlY3QuY29uc3RydWN0KHIsRyx0LmNvbnN0cnVjdG9yKTpuLmNyZWF0ZUVsZW1lbnQuYXBwbHkobix0LmNyZWF0ZSkpW1ddPSEwLHJlPSExLG98fFFlKGUpKSxlfSxlW3RdLnByb3RvdHlwZT1yLnByb3RvdHlwZTt0cnl7ci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZVt0XX1jYXRjaChuKXtqKHIsVyx7dmFsdWU6ZVt0XX0pfX19LHI9by5nZXQoL15IVE1MW0EtWl0qW2Etel0vKSxsPXIubGVuZ3RoO2wtLTt0KHJbbF0pKTtuLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0kZSh0KTtyZXR1cm4gbj95ZS5jYWxsKHRoaXMsZSxpZShuKSk6eWUuY2FsbCh0aGlzLGUpfSxPZXx8KERlPSEwLG5bZF0oIiIpKX1pZihzZSYmKChwPW4uY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPGRpdj48ZGl2PjwvZGl2PjwvZGl2PiIsbmV3IHNlKGZ1bmN0aW9uKGUsdCl7aWYoZVswXSYmImNoaWxkTGlzdCI9PWVbMF0udHlwZSYmIWVbMF0ucmVtb3ZlZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgbj0ocD16KG1lLCJpbm5lckhUTUwiKSkmJnAuc2V0O24mJmoobWUsImlubmVySFRNTCIse3NldDpmdW5jdGlvbihlKXtmb3IoO3RoaXMubGFzdENoaWxkOyl0aGlzLnJlbW92ZUNoaWxkKHRoaXMubGFzdENoaWxkKTtuLmNhbGwodGhpcyxlKX19KX10LmRpc2Nvbm5lY3QoKSxwPW51bGx9KS5vYnNlcnZlKHAse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSkscC5pbm5lckhUTUw9IiIpLE9lfHwoJHx8UT8obT1mdW5jdGlvbihlLHQpe1ouY2FsbCh0LGUpfHxaZShlLHQpfSxmPVplKTpmPW09ZnVuY3Rpb24oZSx0KXtlW2hdfHwoZVtoXT1yKCEwKSxaZShlLHQpKX0sZmU/KEllPSExLGZ1bmN0aW9uKCl7dmFyIGU9eihtZSxUKSx0PWUudmFsdWUsbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO3QuYXR0ck5hbWU9ZSx0LnByZXZWYWx1ZT1FZS5jYWxsKHRoaXMsZSksdC5uZXdWYWx1ZT1udWxsLHRbT109dC5hdHRyQ2hhbmdlPTIsSGUuY2FsbCh0aGlzLGUpLE1lLmNhbGwodGhpcyx0KX0scj1mdW5jdGlvbihlLHQpe3ZhciBuPXZlLmNhbGwodGhpcyxlKSxyPW4mJkVlLmNhbGwodGhpcyxlKSxvPW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSk7Z2UuY2FsbCh0aGlzLGUsdCksby5hdHRyTmFtZT1lLG8ucHJldlZhbHVlPW4/cjpudWxsLG8ubmV3VmFsdWU9dCxuP28uTU9ESUZJQ0FUSU9OPW8uYXR0ckNoYW5nZT0xOm9bQV09by5hdHRyQ2hhbmdlPTAsTWUuY2FsbCh0aGlzLG8pfSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jdXJyZW50VGFyZ2V0LHI9bltoXSxvPWUucHJvcGVydHlOYW1lO3IuaGFzT3duUHJvcGVydHkobykmJihyPXJbb10sKHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KSkuYXR0ck5hbWU9ci5uYW1lLHQucHJldlZhbHVlPXIudmFsdWV8fG51bGwsdC5uZXdWYWx1ZT1yLnZhbHVlPW5bb118fG51bGwsbnVsbD09dC5wcmV2VmFsdWU/dFtBXT10LmF0dHJDaGFuZ2U9MDp0Lk1PRElGSUNBVElPTj10LmF0dHJDaGFuZ2U9MSxNZS5jYWxsKG4sdCkpfTtlLnZhbHVlPWZ1bmN0aW9uKGUsbCxhKXtlPT09TiYmdGhpc1tIXSYmdGhpcy5zZXRBdHRyaWJ1dGUhPT1yJiYodGhpc1toXT17Y2xhc3NOYW1lOntuYW1lOiJjbGFzcyIsdmFsdWU6dGhpcy5jbGFzc05hbWV9fSx0aGlzLnNldEF0dHJpYnV0ZT1yLHRoaXMucmVtb3ZlQXR0cmlidXRlPW4sdC5jYWxsKHRoaXMsInByb3BlcnR5Y2hhbmdlIixvKSksdC5jYWxsKHRoaXMsZSxsLGEpfSxqKG1lLFQsZSl9KCkpOnNlfHwoX1tUXShOLHdlKSxfLnNldEF0dHJpYnV0ZShoLDEpLF8ucmVtb3ZlQXR0cmlidXRlKGgpLEllJiYoYT1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodGhpcz09PWUudGFyZ2V0KXtmb3IociBpbiB0PXRoaXNbaF0sdGhpc1toXT1uPXUodGhpcyksbil7aWYoIShyIGluIHQpKXJldHVybiBpKDAsdGhpcyxyLHRbcl0sbltyXSxBKTtpZihuW3JdIT09dFtyXSlyZXR1cm4gaSgxLHRoaXMscix0W3JdLG5bcl0sIk1PRElGSUNBVElPTiIpfWZvcihyIGluIHQpaWYoIShyIGluIG4pKXJldHVybiBpKDIsdGhpcyxyLHRbcl0sbltyXSxPKX19LGk9ZnVuY3Rpb24oZSx0LG4scixvLGwpe3ZhciBhPXthdHRyQ2hhbmdlOmUsY3VycmVudFRhcmdldDp0LGF0dHJOYW1lOm4scHJldlZhbHVlOnIsbmV3VmFsdWU6b307YVtsXT1lLF9lKGEpfSx1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9e30sbz1lLmF0dHJpYnV0ZXMsbD0wLGE9by5sZW5ndGg7bDxhO2wrKykic2V0QXR0cmlidXRlIiE9PShuPSh0PW9bbF0pLm5hbWUpJiYocltuXT10LnZhbHVlKTtyZXR1cm4gcn0pKSxuW2RdPWZ1bmN0aW9uKGUsdCl7aWYocj1lLnRvVXBwZXJDYXNlKCksTmUmJihOZT0hMSxzZT8oYz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjt0KGVbbisrXSkpO31yZXR1cm4gbmV3IHNlKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbyxsLGEsaT0wLHU9ci5sZW5ndGg7aTx1O2krKykiY2hpbGRMaXN0Ij09PShvPXJbaV0pLnR5cGU/KG4oby5hZGRlZE5vZGVzLGUpLG4oby5yZW1vdmVkTm9kZXMsdCkpOihsPW8udGFyZ2V0LFNlJiZsW0hdJiYic3R5bGUiIT09by5hdHRyaWJ1dGVOYW1lJiYoYT1FZS5jYWxsKGwsby5hdHRyaWJ1dGVOYW1lKSkhPT1vLm9sZFZhbHVlJiZsW0hdKG8uYXR0cmlidXRlTmFtZSxvLm9sZFZhbHVlLGEpKX0pfShSZShMKSxSZShFKSksKHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGMub2JzZXJ2ZShlLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGV9KShuKSxUZSYmKG1lLmF0dGFjaFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBzKFRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSk6KGw9W10sbltUXSgiRE9NTm9kZUluc2VydGVkIixxZShMKSksbltUXSgiRE9NTm9kZVJlbW92ZWQiLHFlKEUpKSksbltUXShELHhlKSxuW1RdKCJyZWFkeXN0YXRlY2hhbmdlIix4ZSksbWUuY2xvbmVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PUxlLmNhbGwodGhpcywhIWUpLG49VWUodCk7cmV0dXJuLTE8biYmZih0LFVbbl0pLGUmJmsubGVuZ3RoJiZmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylmKHQ9ZVtuXSxVW1VlKHQpXSl9KHQucXVlcnlTZWxlY3RvckFsbChrKSksdH0pLERlKXJldHVybiBEZT0hMTtpZigtMjxxLmNhbGwoUixTK3IpK3EuY2FsbChSLEYrcikmJmplKGUpLCFWLnRlc3Qocil8fC0xPHEuY2FsbChQLHIpKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgIitlKyIgaXMgaW52YWxpZCIpO3ZhciByLG8sYT1mdW5jdGlvbigpe3JldHVybiB1P24uY3JlYXRlRWxlbWVudChtLHIpOm4uY3JlYXRlRWxlbWVudChtKX0saT10fHx4LHU9Qi5jYWxsKGksdiksbT11P3Rbdl0udG9VcHBlckNhc2UoKTpyO3JldHVybiB1JiYtMTxxLmNhbGwoUixGK20pJiZqZShtKSxvPVIucHVzaCgodT9TOkYpK3IpLTEsaz1rLmNvbmNhdChrLmxlbmd0aD8iLCI6IiIsdT9tKydbaXM9IicrZS50b0xvd2VyQ2FzZSgpKyciXSc6bSksYS5wcm90b3R5cGU9VVtvXT1CLmNhbGwoaSwicHJvdG90eXBlIik/aS5wcm90b3R5cGU6dWUobWUpLGsubGVuZ3RoJiZQZShuLnF1ZXJ5U2VsZWN0b3JBbGwoayksTCksYX0sbi5jcmVhdGVFbGVtZW50PXllPWZ1bmN0aW9uKGUsdCl7dmFyIHI9JGUodCksbz1yP2JlLmNhbGwobixlLGllKHIpKTpiZS5jYWxsKG4sZSksbD0iIitlLGE9cS5jYWxsKFIsKHI/UzpGKSsocnx8bCkudG9VcHBlckNhc2UoKSksaT0tMTxhO3JldHVybiByJiYoby5zZXRBdHRyaWJ1dGUoImlzIixyPXIudG9Mb3dlckNhc2UoKSksaSYmKGk9a2UobC50b1VwcGVyQ2FzZSgpLHIpKSksU2U9IW4uY3JlYXRlRWxlbWVudC5pbm5lckhUTUxIZWxwZXIsaSYmZihvLFVbYV0pLG99KSx6ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnplLGRlZmluZTpKP2Z1bmN0aW9uKGUsdCxuKXtpZihuKUtlKGUsdCxuKTtlbHNle3ZhciByPWUudG9VcHBlckNhc2UoKTtvZVtyXT17Y29uc3RydWN0b3I6dCxjcmVhdGU6W3JdfSxhZS5zZXQodCxyKSxZLmRlZmluZShlLHQpfX06S2UsZ2V0Oko/ZnVuY3Rpb24oZSl7cmV0dXJuIFkuZ2V0KGUpfHxYZShlKX06WGUsd2hlbkRlZmluZWQ6Sj9mdW5jdGlvbihlKXtyZXR1cm4gbmUucmFjZShbWS53aGVuRGVmaW5lZChlKSxXZShlKV0pfTpXZX0sIVl8fC9eZm9yY2UvLnRlc3QodC50eXBlKSlZZSgpO2Vsc2UgaWYoIXQubm9CdWlsdEluKXRyeXshZnVuY3Rpb24odCxyLG8pe3ZhciBsPW5ldyBSZWdFeHAoIl48YVxccytpcz0oJ3xcIikiK28rIlxcMT48L2E+JCIpO2lmKHJbdl09ImEiLCh0LnByb3RvdHlwZT11ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10LGUuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG8sdCxyKSwhbC50ZXN0KG4uY3JlYXRlRWxlbWVudCgiYSIse2lzOm99KS5vdXRlckhUTUwpfHwhbC50ZXN0KChuZXcgdCkub3V0ZXJIVE1MKSl0aHJvdyByfShmdW5jdGlvbiBlKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxBbmNob3JFbGVtZW50LFtdLGUpfSx7fSwiZG9jdW1lbnQtcmVnaXN0ZXItZWxlbWVudC1hIil9Y2F0Y2goZSl7WWUoKX1pZighdC5ub0J1aWx0SW4pdHJ5e2JlLmNhbGwobiwiYSIsImEiKX1jYXRjaChlKXtpZT1mdW5jdGlvbihlKXtyZXR1cm57aXM6ZS50b0xvd2VyQ2FzZSgpfX19fSh3aW5kb3cpOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbNF0seyIrdEo0IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyJiYhZS5jbG9zZWQ7bisrKWUubmV4dCh0W25dKTtlLmNsb3NlZHx8ZS5jb21wbGV0ZSgpfX19LCIrdW1LIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sIi9XWXYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LCIwL1E2IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIldmNHAiKSxhPW4oImxMQVAiKSxzPW4oIm42Z0ciKSx1PW4oIllsYlEiKSxjPW4oIllTaDIiKSxsPShuKCJnSWNZIiksbigicHVnVCIpKSxmPU9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSksaD1PYmplY3Qoby52KShmdW5jdGlvbigpe30pLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oZikscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfShmKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2VsZW1lbnQ9ZSxyLl9uYXZMaXN0PW4sci5faXNOYXZMaXN0PSExLHIuX2lzTmF2TGlzdD0hIW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KGgpLHk9T2JqZWN0KG8udikoT2JqZWN0KG8udykoZnVuY3Rpb24oKXt9KSksdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLl9jaGFuZ2VEZXRlY3Rvcj1uLGkuc2VsZWN0aW9uTGlzdD1yLGkuX3NlbGVjdGVkPSExLGkuX2Rpc2FibGVkPSExLGkuX2hhc0ZvY3VzPSExLGkuY2hlY2tib3hQb3NpdGlvbj0iYWZ0ZXIiLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5zZWxlY3Rpb25MaXN0JiZ0aGlzLnNlbGVjdGlvbkxpc3QuZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qocy5iKSh0KTtlIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuaXNTZWxlY3RlZCh0aGlzKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmIpKHQpO2UhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NldFNlbGVjdGVkKGUpLHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVwb3J0VmFsdWVDaGFuZ2UoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fc2VsZWN0ZWQ7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpeyh0Ll9zZWxlY3RlZHx8ZSkmJih0LnNlbGVjdGVkPSEwLHQuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pfSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zZWxlY3RlZCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdGVkPSExfSksdGhpcy5zZWxlY3Rpb25MaXN0Ll9yZW1vdmVPcHRpb25Gcm9tTGlzdCh0aGlzKX0sZS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZH0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGV4dD90aGlzLl90ZXh0Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ6IiJ9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVDbGljaz1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnRvZ2dsZSgpLHRoaXMuc2VsZWN0aW9uTGlzdC5fZW1pdENoYW5nZUV2ZW50KHRoaXMpKX0sZS5wcm90b3R5cGUuX2hhbmRsZUZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5faGFzRm9jdXM9ITAsdGhpcy5zZWxlY3Rpb25MaXN0Ll9zZXRGb2N1c2VkT3B0aW9uKHRoaXMpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSExLHRoaXMuc2VsZWN0aW9uTGlzdC5fb25Ub3VjaGVkKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9zZXRTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9dCx0P3RoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0KHRoaXMpOnRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuZGVzZWxlY3QodGhpcyksdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksITApfSxlfShPYmplY3Qoby52KShmdW5jdGlvbigpe30pKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2VsZW1lbnQ9ZSxyLnNlbGVjdGlvbkNoYW5nZT1uZXcgaS5tLHIudGFiSW5kZXg9MCxyLnNlbGVjdGVkT3B0aW9ucz1uZXcgdS5hKCEwKSxyLl9vbkNoYW5nZT1mdW5jdGlvbih0KXt9LHIuX21vZGVsQ2hhbmdlcz1sLmEuRU1QVFksci5fb25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSxyLnRhYkluZGV4PXBhcnNlSW50KG4pfHwwLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgYS5hKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkuc2tpcFByZWRpY2F0ZShmdW5jdGlvbigpe3JldHVybiExfSksdGhpcy5fdGVtcFZhbHVlcyYmKHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHRoaXMuX3RlbXBWYWx1ZXMpLHRoaXMuX3RlbXBWYWx1ZXM9bnVsbCksdGhpcy5fbW9kZWxDaGFuZ2VzPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZih0LmFkZGVkKWZvcih2YXIgZT0wLG49dC5hZGRlZDtlPG4ubGVuZ3RoO2UrKyluW2VdLnNlbGVjdGVkPSEwO2lmKHQucmVtb3ZlZClmb3IodmFyIHI9MCxpPXQucmVtb3ZlZDtyPGkubGVuZ3RoO3IrKylpW3JdLnNlbGVjdGVkPSExfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZCghMCl9LGUucHJvdG90eXBlLmRlc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCExKX0sZS5wcm90b3R5cGUuX3NldEZvY3VzZWRPcHRpb249ZnVuY3Rpb24odCl7dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5fZ2V0T3B0aW9uSW5kZXgodCkpfSxlLnByb3RvdHlwZS5fcmVtb3ZlT3B0aW9uRnJvbUxpc3Q9ZnVuY3Rpb24odCl7aWYodC5faGFzRm9jdXMpe3ZhciBlPXRoaXMuX2dldE9wdGlvbkluZGV4KHQpO2U+MD90aGlzLl9rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOjA9PT1lJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjEmJnRoaXMuX2tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKX19LGUucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXIscj1uLmFjdGl2ZUl0ZW1JbmRleDtzd2l0Y2goZSl7Y2FzZSBjLmo6Y2FzZSBjLmQ6dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbigpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7Y2FzZSBjLmY6Y2FzZSBjLmM6ZT09PWMuZj9uLnNldEZpcnN0SXRlbUFjdGl2ZSgpOm4uc2V0TGFzdEl0ZW1BY3RpdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDpuLm9uS2V5ZG93bih0KX1lIT09Yy5sJiZlIT09Yy5ifHwhdC5zaGlmdEtleXx8bi5hY3RpdmVJdGVtSW5kZXg9PT1yfHx0aGlzLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb24oKX0sZS5wcm90b3R5cGUuX3JlcG9ydFZhbHVlQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZ0aGlzLl9vbkNoYW5nZSh0aGlzLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcygpKX0sZS5wcm90b3R5cGUuX2VtaXRDaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy5vcHRpb249ZX0odGhpcyx0KSl9LGUucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zP3RoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHR8fFtdKTp0aGlzLl90ZW1wVmFsdWVzPXR9LGUucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD10fSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2U9dH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5fb25Ub3VjaGVkPXR9LGUucHJvdG90eXBlLl9zZXRPcHRpb25zRnJvbVZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMSl9KSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5vcHRpb25zLmZpbmQoZnVuY3Rpb24obil7cmV0dXJuIGUuY29tcGFyZVdpdGg/ZS5jb21wYXJlV2l0aChuLnZhbHVlLHQpOm4udmFsdWU9PT10fSl9KS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5fc2V0U2VsZWN0ZWQoITApfSl9LGUucHJvdG90eXBlLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90eXBlLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtpZihudWxsIT10JiZ0aGlzLl9pc1ZhbGlkSW5kZXgodCkpe3ZhciBlPXRoaXMub3B0aW9ucy50b0FycmF5KClbdF07ZSYmKGUudG9nZ2xlKCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KGUpKX19LGUucHJvdG90eXBlLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9ITE7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24obil7bi5fc2V0U2VsZWN0ZWQodCkmJihlPSEwKX0pLGUmJnRoaXMuX3JlcG9ydFZhbHVlQ2hhbmdlKCl9LGUucHJvdG90eXBlLl9pc1ZhbGlkSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5vcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuX2dldE9wdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMudG9BcnJheSgpLmluZGV4T2YodCl9LGV9KHkpLGI9ZnVuY3Rpb24oKXt9fSwiMC91USI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCI2YmxGIiksaT1uKCIvV1l2Iiksbz1uKCIyZVBsIiksYT1uKCJ4VGxhIikscz1uKCJFbjgrIiksdT1uKCJJVVRiIiksYz1uKCJwdWdUIiksbD1uKCJTNVhRIiksZj1uKCJ1NjdEIiksaD1uKCJKY1J2IiksZD1uKCJGeGIxIik7ZnVuY3Rpb24gcCh0LGUpe2lmKCFlKXJldHVybiB0IGluc3RhbmNlb2Ygci5hP3Q6bmV3IHIuYShPYmplY3QoZC5hKSh0KSk7aWYobnVsbCE9dCl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2EuYV19KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7dmFyIHI9bmV3IGMuYTtyZXR1cm4gci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3ZhciBpPXRbYS5hXSgpO3IuYWRkKGkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0KHQpfSkpfSxlcnJvcjpmdW5jdGlvbih0KXtyLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7ci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9fSkpfSkpLHJ9Ok9iamVjdChoLmEpKHQpKX0odCxlKTtpZihPYmplY3QoaS5hKSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyBjLmE7cmV0dXJuIHIuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtuLm5leHQodCksci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9KSl9LGZ1bmN0aW9uKHQpe3IuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKX0pfSkpLHJ9Ok9iamVjdChsLmEpKHQpKX0odCxlKTtpZihPYmplY3Qoby5hKSh0KSlyZXR1cm4gT2JqZWN0KHUuYSkodCxlKTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbcy5hXX0odCl8fCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyByLmEoZT9mdW5jdGlvbihuKXt2YXIgcixpPW5ldyBjLmE7cmV0dXJuIGkuYWRkKGZ1bmN0aW9uKCl7ciYmImZ1bmN0aW9uIj09dHlwZW9mIHIucmV0dXJuJiZyLnJldHVybigpfSksaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3I9dFtzLmFdKCksaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe2lmKCFuLmNsb3NlZCl7dmFyIHQsZTt0cnl7dmFyIGk9ci5uZXh0KCk7dD1pLnZhbHVlLGU9aS5kb25lfWNhdGNoKHQpe3JldHVybiB2b2lkIG4uZXJyb3IodCl9ZT9uLmNvbXBsZXRlKCk6KG4ubmV4dCh0KSx0aGlzLnNjaGVkdWxlKCkpfX0pKX0pKSxpfTpPYmplY3QoZi5hKSh0KSl9KHQsZSl9dGhyb3cgbmV3IFR5cGVFcnJvcigobnVsbCE9PXQmJnR5cGVvZiB0fHx0KSsiIGlzIG5vdCBvYnNlcnZhYmxlIil9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KX0sIjIxTGIiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9bigiT3pmQiIpLG89bigiSzlJYSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIHIuc2NoZWR1bGVyPWUsci53b3JrPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksbj4wP3QucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxlLG4pOih0aGlzLmRlbGF5PW4sdGhpcy5zdGF0ZT1lLHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4+MHx8dGhpcy5jbG9zZWQ/dC5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsZSxuKTp0aGlzLl9leGVjdXRlKGUsbil9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MCksbnVsbCE9PXImJnI+MHx8bnVsbD09PXImJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsZSxuLHIpOmUuZmx1c2godGhpcyl9LGV9KG4oImg5RHEiKS5hKSxzPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gci5iKGUsdCksZX0obigiQ1M5USIpLmEpKShhKSx1PW4oInB1Z1QiKSxjPW4oIkZGT28iKSxsPW4oIjYwaVUiKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPTApO3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1uLGkuZGVsYXk9cixpfXJldHVybiByLmIoZSx0KSxlLmRpc3BhdGNoPWZ1bmN0aW9uKHQpe3Qubm90aWZpY2F0aW9uLm9ic2VydmUodC5kZXN0aW5hdGlvbiksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5zY2hlZHVsZU1lc3NhZ2U9ZnVuY3Rpb24odCl7dGhpcy5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZS5kaXNwYXRjaCx0aGlzLmRlbGF5LG5ldyBoKHQsdGhpcy5kZXN0aW5hdGlvbikpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZU5leHQodCkpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZUVycm9yKHQpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZUNvbXBsZXRlKCkpfSxlfShjLmEpLGg9ZnVuY3Rpb24odCxlKXt0aGlzLm5vdGlmaWNhdGlvbj10LHRoaXMuZGVzdGluYXRpb249ZX0sZD1uKCI4ZzhBIikscD1uKCJ1TWFPIiksbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1yLGkuX2V2ZW50cz1bXSxpLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITEsaS5fYnVmZmVyU2l6ZT1lPDE/MTplLGkuX3dpbmRvd1RpbWU9bjwxPzE6bixuPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPyhpLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsaS5uZXh0PWkubmV4dEluZmluaXRlVGltZVdpbmRvdyk6aS5uZXh0PWkubmV4dFRpbWVXaW5kb3csaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubmV4dEluZmluaXRlVGltZVdpbmRvdz1mdW5jdGlvbihlKXt2YXIgbj10aGlzLl9ldmVudHM7bi5wdXNoKGUpLG4ubGVuZ3RoPnRoaXMuX2J1ZmZlclNpemUmJm4uc2hpZnQoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUubmV4dFRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dGhpcy5fZXZlbnRzLnB1c2gobmV3IHkodGhpcy5fZ2V0Tm93KCksZSkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cscj1uP3RoaXMuX2V2ZW50czp0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLGk9dGhpcy5zY2hlZHVsZXIsbz1yLmxlbmd0aDtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgZC5hO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmhhc0Vycm9yP2U9dS5hLkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGU9bmV3IHAuYSh0aGlzLHQpKSxpJiZ0LmFkZCh0PW5ldyBmKHQsaSkpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChyW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8cykubm93KCl9LGUucHJvdG90eXBlLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9nZXROb3coKSxlPXRoaXMuX2J1ZmZlclNpemUsbj10aGlzLl93aW5kb3dUaW1lLHI9dGhpcy5fZXZlbnRzLGk9ci5sZW5ndGgsbz0wO288aSYmISh0LXJbb10udGltZTxuKTspbysrO3JldHVybiBpPmUmJihvPU1hdGgubWF4KG8saS1lKSksbz4wJiZyLnNwbGljZSgwLG8pLHJ9LGV9KG8uYSkseT1mdW5jdGlvbih0LGUpe3RoaXMudGltZT10LHRoaXMudmFsdWU9ZX07bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB4fSk7dmFyIHY9ImlubGluZSIsZz1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXTtmdW5jdGlvbiBiKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBnLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPWdbMF0pLHI9PT12JiYocj1pIT09dj9pOiIiLGk9diksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19ZnVuY3Rpb24gXyh0KXtyZXR1cm4gYih0KVswXS5pbmRleE9mKCJyb3ciKT4tMX12YXIgdz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuX2Fubm91bmNlcj1uZXcgbSgxKSxpLmxheW91dCQ9aS5fYW5ub3VuY2VyLmFzT2JzZXJ2YWJsZSgpLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmxheW91dHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygibGF5b3V0Iiwicm93IixmdW5jdGlvbih0KXtlLl91cGRhdGVXaXRoRGlyZWN0aW9uKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImxheW91dCIpfHwicm93Iix0aGlzLl9tcUFjdGl2YXRpb24mJih0PXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9Yih0KTtyZXR1cm4gZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj0hMSkse2Rpc3BsYXk6cj8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6ZVswXSwiZmxleC13cmFwIjpufHxudWxsfX0oMCxlWzFdLGVbMl0pfSh0fHwiIik7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudChlKSx0aGlzLl9hbm5vdW5jZXIubmV4dCh7ZGlyZWN0aW9uOmVbImZsZXgtZGlyZWN0aW9uIl0sd3JhcDohIWVbImZsZXgtd3JhcCJdJiYibm93cmFwIiE9PWVbImZsZXgtd3JhcCJdfSl9LGV9KGkuYikseD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyxhKXt2YXIgcz10LmNhbGwodGhpcyxlLG4sYSl8fHRoaXM7cmV0dXJuIHMuX3pvbmU9aSxzLl9kaXJlY3Rpb25hbGl0eT1vLHMuX2xheW91dD0icm93IixyJiYocy5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKHMuX29uTGF5b3V0Q2hhbmdlLmJpbmQocykpKSxzLl9kaXJlY3Rpb25XYXRjaGVyPXMuX2RpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUocy5fdXBkYXRlV2l0aFZhbHVlLmJpbmQocykpLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXAiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmdhcHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fd2F0Y2hDb250ZW50Q2hhbmdlcygpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJnYXAiLCIwIixmdW5jdGlvbihlKXt0Ll91cGRhdGVXaXRoVmFsdWUoZS52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKSx0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX2RpcmVjdGlvbldhdGNoZXImJnRoaXMuX2RpcmVjdGlvbldhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3dhdGNoQ29udGVudENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXImJih0Ll9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkZWROb2RlcyYmdC5hZGRlZE5vZGVzLmxlbmd0aD4wfHx0LnJlbW92ZWROb2RlcyYmdC5yZW1vdmVkTm9kZXMubGVuZ3RoPjB9KSYmdC5fdXBkYXRlV2l0aFZhbHVlKCl9KSx0Ll9vYnNlcnZlci5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCx7Y2hpbGRMaXN0OiEwfSkpfSl9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2xheW91dD0odC5kaXJlY3Rpb258fCIiKS50b0xvd2VyQ2FzZSgpLGcuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIHI9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciByPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxpPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4ocil8fGlzTmFOKGkpfHxyPT09aT8wOnI+aT8xOi0xfSk7aWYoci5sZW5ndGg+MClpZihuLmVuZHNXaXRoKFMpKW49bi5zdWJzdHJpbmcoMCxuLmluZGV4T2YoUykpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkR3JpZFBhZGRpbmcobiksciksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl9idWlsZEdyaWRNYXJnaW4obikpO2Vsc2V7dmFyIGk9ci5wb3AoKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUyhuKSxyKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUygpLFtpXSl9fSxlLnByb3RvdHlwZS5fYnVpbGRHcmlkUGFkZGluZz1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj10OmU9dCx7cGFkZGluZzoiMHB4ICIrZSsiICIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZEdyaWRNYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9IjBweCIsbj0iMHB4IjtyZXR1cm4icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlP249Ii0iK3Q6ZT0iLSIrdCx7bWFyZ2luOiIwcHggIitlKyIgLSIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1udWxsKTt2YXIgZSxuPXsibWFyZ2luLWxlZnQiOm51bGwsIm1hcmdpbi1yaWdodCI6bnVsbCwibWFyZ2luLXRvcCI6bnVsbCwibWFyZ2luLWJvdHRvbSI6bnVsbH07c3dpdGNoKHRoaXMuX2xheW91dCl7Y2FzZSJjb2x1bW4iOmU9Im1hcmdpbi1ib3R0b20iO2JyZWFrO2Nhc2UiY29sdW1uLXJldmVyc2UiOmU9Im1hcmdpbi10b3AiO2JyZWFrO2Nhc2Uicm93IjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1sZWZ0IjoibWFyZ2luLXJpZ2h0IjticmVhaztjYXNlInJvdy1yZXZlcnNlIjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1yaWdodCI6Im1hcmdpbi1sZWZ0IjticmVhaztkZWZhdWx0OmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQifXJldHVybiBuW2VdPXQsbn0sZX0oaS5iKSxTPSIgZ3JpZCI7ZnVuY3Rpb24gRSh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciByPTAsaT1lO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1pW3JdO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8pe3ZhciBhPXQuY2FsbCh0aGlzLGUsbixpKXx8dGhpcztyZXR1cm4gYS5fY29udGFpbmVyPXIsYS5zdHlsZVV0aWxzPWksYS5sYXlvdXRDb25maWc9byxhLl9jYWNoZUlucHV0KCJmbGV4IiwiIiksYS5fY2FjaGVJbnB1dCgic2hyaW5rIiwxKSxhLl9jYWNoZUlucHV0KCJncm93IiwxKSxyJiYoYS5fbGF5b3V0V2F0Y2hlcj1yLmxheW91dCQuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2EuX29uTGF5b3V0Q2hhbmdlKHQpfSkpLGF9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaHJpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgic2hyaW5rIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdyb3ciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ3JvdyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXgiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5mbGV4fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiZmxleCIsIiIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlU3R5bGUodC52YWx1ZSl9KSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fbGF5b3V0PXR8fHRoaXMuX2xheW91dHx8e2RpcmVjdGlvbjoicm93Iix3cmFwOiExfSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9dHx8dGhpcy5fcXVlcnlJbnB1dCgiZmxleCIpfHwiIjt0aGlzLl9tcUFjdGl2YXRpb24mJihlPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIG49U3RyaW5nKGUpLnJlcGxhY2UoIjsiLCIiKSxyPU9iamVjdChpLm8pKG4sdGhpcy5fcXVlcnlJbnB1dCgiZ3JvdyIpLHRoaXMuX3F1ZXJ5SW5wdXQoInNocmluayIpKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX3ZhbGlkYXRlVmFsdWUuYXBwbHkodGhpcyxyKSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbih0aGlzLnBhcmVudEVsZW1lbnQsdGhpcy5sYXlvdXRDb25maWcuYWRkRmxleFRvUGFyZW50KS5pbmRleE9mKCJjb2x1bW4iKT4tMT8iY29sdW1uIjoicm93IixpPV8ocik/Im1heC13aWR0aCI6Im1heC1oZWlnaHQiLG89XyhyKT8ibWluLXdpZHRoIjoibWluLWhlaWdodCIsYT1TdHJpbmcobikuaW5kZXhPZigiY2FsYyIpPi0xLHM9YXx8ImF1dG8iPT1uLHU9U3RyaW5nKG4pLmluZGV4T2YoIiUiKT4tMSYmIWEsYz1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoImVtIik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2dyIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidmgiKT4tMSxsPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxzLGY9YXx8Yzt0PSIwIj09dD8wOnQsZT0iMCI9PWU/MDplO3ZhciBoPSF0JiYhZSxkPXt9LHA9eyJtYXgtd2lkdGgiOm51bGwsIm1heC1oZWlnaHQiOm51bGwsIm1pbi13aWR0aCI6bnVsbCwibWluLWhlaWdodCI6bnVsbH07c3dpdGNoKG58fCIiKXtjYXNlIiI6bj0icm93Ij09PXI/IjAlIjp0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8/IjAuMDAwMDAwMDAxcHgiOiJhdXRvIjticmVhaztjYXNlImluaXRpYWwiOmNhc2Uibm9ncm93Ijp0PTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJncm93IjpuPSIxMDAlIjticmVhaztjYXNlIm5vc2hyaW5rIjplPTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJhdXRvIjpicmVhaztjYXNlIm5vbmUiOnQ9MCxlPTAsbj0iYXV0byI7YnJlYWs7ZGVmYXVsdDpmfHx1fHxpc05hTihuKXx8KG4rPSIlIiksIjAlIj09PW4mJihmPSEwKSwiMHB4Ij09PW4mJihuPSIwJSIpLGQ9RShwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpmP246IjEwMCUifTp7ZmxleDp0KyIgIitlKyIgIisoZj9uOiIxMDAlIil9KX1yZXR1cm4gZC5mbGV4fHxkWyJmbGV4LWdyb3ciXXx8KGQ9RShwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpufTp7ZmxleDp0KyIgIitlKyIgIitufSkpLCIwJSIhPT1uJiYiMHB4IiE9PW4mJiIwLjAwMDAwMDAwMXB4IiE9PW4mJiJhdXRvIiE9PW4mJihkW29dPWh8fGwmJnQ/bjpudWxsLGRbaV09aHx8IXMmJmU/bjpudWxsKSxkW29dfHxkW2ldP3RoaXMuX2xheW91dCYmdGhpcy5fbGF5b3V0LndyYXAmJihkW2E/ImZsZXgtYmFzaXMiOiJmbGV4Il09ZFtpXT9hP2RbaV06dCsiICIrZSsiICIrZFtpXTphP2Rbb106dCsiICIrZSsiICIrZFtvXSk6ZD1FKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSxFKGQseyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZX0oaS5iKSxPPXttYXJnaW46MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIiwibWluLXdpZHRoIjoiMTAwJSIsIm1pbi1oZWlnaHQiOiIxMDAlIn0sVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlLG4scil8fHRoaXM7cmV0dXJuIGkuZWxSZWY9bixpLl9hcHBseVN0eWxlVG9FbGVtZW50KE8pLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oaS5iKSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiBvLl9sYXlvdXQ9InJvdyIsciYmKG8uX2xheW91dFdhdGNoZXI9ci5sYXlvdXQkLnN1YnNjcmliZShvLl9vbkxheW91dENoYW5nZS5iaW5kKG8pKSksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksZy5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5fbGF5b3V0fSl8fCh0aGlzLl9sYXlvdXQ9InJvdyIpO3ZhciBuPXRoaXMuX3F1ZXJ5SW5wdXQoImFsaWduIil8fCJzdGFydCBzdHJldGNoIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCksdGhpcy5fYWxsb3dTdHJldGNoaW5nKG4sdGhpcy5fbGF5b3V0fHwicm93Iil9LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuc3BsaXQoIiAiKSxyPW5bMV07c3dpdGNoKG5bMF0pe2Nhc2UiY2VudGVyIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iY2VudGVyIjticmVhaztjYXNlInNwYWNlLWFyb3VuZCI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWFyb3VuZCI7YnJlYWs7Y2FzZSJzcGFjZS1iZXR3ZWVuIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtYmV0d2VlbiI7YnJlYWs7Y2FzZSJzcGFjZS1ldmVubHkiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1ldmVubHkiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZGVmYXVsdDplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1zdGFydCJ9c3dpdGNoKHIpe2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImZsZXgtc3RhcnQiO2JyZWFrO2Nhc2UiYmFzZWxpbmUiOmVbImFsaWduLWl0ZW1zIl09ImJhc2VsaW5lIjticmVhaztjYXNlImNlbnRlciI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJlbmQiOmNhc2UiZmxleC1lbmQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LWVuZCI7YnJlYWs7Y2FzZSJzdHJldGNoIjpkZWZhdWx0OmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJzdHJldGNoIn1yZXR1cm4gRShlLHtkaXNwbGF5OiJmbGV4IiwiZmxleC1kaXJlY3Rpb24iOnRoaXMuX2xheW91dHx8InJvdyIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pfSxlLnByb3RvdHlwZS5fYWxsb3dTdHJldGNoaW5nPWZ1bmN0aW9uKHQsZSl7InN0cmV0Y2giPT10LnNwbGl0KCIgIilbMV0mJnRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQoeyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsIm1heC13aWR0aCI6XyhlKT9udWxsOiIxMDAlIiwibWF4LWhlaWdodCI6XyhlKT8iMTAwJSI6bnVsbH0pfSxlfShpLmIpLEE9ZnVuY3Rpb24oKXt9fSwiMjZGVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIks5SWEiKSxvPW4oIjhnOEEiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIHIuYihlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsZSk7cmV0dXJuIG4mJiFuLmNsb3NlZCYmZS5uZXh0KHRoaXMuX3ZhbHVlKSxufSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe2lmKHRoaXMuaGFzRXJyb3IpdGhyb3cgdGhpcy50aHJvd25FcnJvcjtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgby5hO3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oaS5hKX0sIjJCZGoiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiMmVQbCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdH19LCIzcEpRIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbigibXJTRyIpLG4oIk96ZkIiKSxuKCJuNmdHIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSwiNGMzNSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKTtmdW5jdGlvbiBvKCl7dGhyb3cgRXJyb3IoIkhvc3QgYWxyZWFkeSBoYXMgYSBwb3J0YWwgYXR0YWNoZWQiKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dCYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYSBwb3J0YWwgdG8gYSBudWxsIFBvcnRhbE91dGxldCIpfSgpLHQuaGFzQXR0YWNoZWQoKSYmbygpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbD09dD9mdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0oKToodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBdHRhY2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0QXR0YWNoZWRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmNvbXBvbmVudD1lLGkudmlld0NvbnRhaW5lclJlZj1uLGkuaW5qZWN0b3I9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGEpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnRlbXBsYXRlUmVmPWUsaS52aWV3Q29udGFpbmVyUmVmPW4saS5jb250ZXh0PXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KGEpLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNEaXNwb3NlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzQXR0YWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHBvcnRhbCB0byBhdHRhY2giKX0oKSx0aGlzLmhhc0F0dGFjaGVkKCkmJm8oKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hDb21wb25lbnRQb3J0YWwodCkpOnQgaW5zdGFuY2VvZiB1Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnZvaWQgZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYW4gdW5rbm93biBQb3J0YWwgdHlwZS4gQmFzZVBvcnRhbE91dGxldCBhY2NlcHRzIGVpdGhlciBhIENvbXBvbmVudFBvcnRhbCBvciBhIFRlbXBsYXRlUG9ydGFsLiIpfSgpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5kZXRhY2goKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwfSx0LnByb3RvdHlwZS5zZXREaXNwb3NlRm49ZnVuY3Rpb24odCl7dGhpcy5fZGlzcG9zZUZuPXR9LHQucHJvdG90eXBlLl9pbnZva2VEaXNwb3NlRm49ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPXIsby5fZGVmYXVsdEluamVjdG9yPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLHI9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhlPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQocix0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KSk6KGU9ci5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe24uX2FwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShlKSksZX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmlld0NvbnRhaW5lclJlZixyPW4uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gci5kZXRlY3RDaGFuZ2VzKCksci5yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpfSksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXt2YXIgdD1uLmluZGV4T2Yocik7LTEhPT10JiZuLnJlbW92ZSh0KX0pLHJ9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9LGUucHJvdG90eXBlLl9nZXRDb21wb25lbnRSb290Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19LGV9KGMpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsci5fdmlld0NvbnRhaW5lclJlZj1uLHIuX2lzSW5pdGlhbGl6ZWQ9ITEsci5hdHRhY2hlZD1uZXcgaS5tLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwb3J0YWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHNldDpmdW5jdGlvbihlKXsoIXRoaXMuaGFzQXR0YWNoZWQoKXx8ZXx8dGhpcy5faXNJbml0aWFsaXplZCkmJih0aGlzLmhhc0F0dGFjaGVkKCkmJnQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLGUmJnQucHJvdG90eXBlLmF0dGFjaC5jYWxsKHRoaXMsZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRhY2hlZFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwsdGhpcy5fYXR0YWNoZWRSZWY9bnVsbH0sZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciBuPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixyPXRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCksaT1uLmNyZWF0ZUNvbXBvbmVudChyLG4ubGVuZ3RoLGUuaW5qZWN0b3J8fG4ucGFyZW50SW5qZWN0b3IpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVzdHJveSgpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0KTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuLmNhbGwodGhpcyxmdW5jdGlvbigpe3JldHVybiBuLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPXIsdGhpcy5hdHRhY2hlZC5lbWl0KHIpLHJ9LGV9KGMpLGg9ZnVuY3Rpb24oKXt9fSwiNjBpVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIkc1SjEiKSxpPW4oIkYvWEwiKSxvPW4oIlhsUHciKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9bix0aGlzLmhhc1ZhbHVlPSJOIj09PXR9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdC5uZXh0JiZ0Lm5leHQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gdC5lcnJvciYmdC5lcnJvcih0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiB0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlKCl9fSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQ/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLG4pfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiBPYmplY3QoaS5hKSh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBPYmplY3Qoby5hKSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBPYmplY3Qoci5iKSgpfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCB2YWx1ZSIpfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/bmV3IHQoIk4iLGUpOnQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb249bmV3IHQoIk4iLHZvaWQgMCksdH0oKX0sIjY3WS8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4gQXJlIHlvdSBsb29raW5nIGZvciBgbWFwVG8oKWA/Iik7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcm9qZWN0PXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByb2plY3QsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5wcm9qZWN0PW4saS5jb3VudD0wLGkudGhpc0FyZz1yfHxpLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGkuYSl9LCI2VU14IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkNjbkciKSxpPShuKCIwL1E2IiksbigiSXAwUiIpLG4oIkZ6cWMiKSxuKCJXZjRwIikpLG89bigiZFdaZyIpLGE9KG4oIkxDNXAiKSxuKCJ3RncxIikpO24oImdJY1kiKSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciBzPXIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gdSh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIGM9ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci5pYigyLFsodCgpKCksci5PYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLHIuT2EoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuTmEoMiwyMTI5OTIsbnVsbCwwLGkucSxbci5rLHIueCxvLmEsWzIsaS5nXSxbMixhLmFdXSx7ZGlzYWJsZWQ6WzAsImRpc2FibGVkIl0sdHJpZ2dlcjpbMSwidHJpZ2dlciJdfSxudWxsKSxyLlhhKG51bGwsMCksKHQoKSgpLHIuT2EoNCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLlhhKG51bGwsMSksci5YYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsci5ZYShlLDIpLnVuYm91bmRlZCl9KX19LCI2YWh3IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiaUx4USIpLGk9bigiREtUYiIpLG89e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoci5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3QoaS5hKSh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fX0sIjZibEYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiRkZPbyIpLGk9bigiTC9WOSIpLG89bigiNmFodyIpLGE9bigieFRsYSIpLHM9bigieTNCeSIpLHU9bigiaUx4USIpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIGE9dGhpcy5vcGVyYXRvcixzPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2Ygci5hKXJldHVybiB0O2lmKHRbaS5hXSlyZXR1cm4gdFtpLmFdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IHIuYSh0LGUsbik6bmV3IHIuYShvLmEpfSh0LGUsbik7aWYoYT9hLmNhbGwocyx0aGlzLnNvdXJjZSk6cy5hZGQodGhpcy5zb3VyY2V8fHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYhcy5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fc3Vic2NyaWJlKHMpOnRoaXMuX3RyeVN1YnNjcmliZShzKSksdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnMuc3luY0Vycm9yVGhyb3dhYmxlJiYocy5zeW5jRXJyb3JUaHJvd2FibGU9ITEscy5zeW5jRXJyb3JUaHJvd24pKXRocm93IHMuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9bChlKSkoZnVuY3Rpb24oZSxyKXt2YXIgaTtpPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe3IodCksaSYmaS51bnN1YnNjcmliZSgpfX0scixlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbYS5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAwPT09dC5sZW5ndGg/dGhpczpPYmplY3Qocy5iKSh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PWwodCkpKGZ1bmN0aW9uKHQsbil7dmFyIHI7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQocil9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gbCh0KXtpZih0fHwodD11LmEuUHJvbWlzZXx8UHJvbWlzZSksIXQpdGhyb3cgbmV3IEVycm9yKCJubyBQcm9taXNlIGltcGwgZm91bmQiKTtyZXR1cm4gdH19LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiByLmIoZSx0KSxlfShFcnJvcil9LCI4bU1yIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJDY25HIiksbz1uKCJXZjRwIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fcGxhdGZvcm09bixpLl9kb2N1bWVudD1yLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3QoaS5XKSgpJiZ0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCksdGhpcy5fdG9vbGJhclJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpfSkpfSxlLnByb3RvdHlwZS5fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9vbGJhclJvd3MubGVuZ3RoJiZbXS5zbGljZS5jYWxsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC10b29sYmFyLXJvdyIpKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZSE9PSh0Ll9kb2N1bWVudD90Ll9kb2N1bWVudC5DT01NRU5UX05PREU6OCl9KS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50LnRyaW0oKX0pJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9KCl9LGV9KE9iamVjdChvLnUpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxzPWZ1bmN0aW9uKCl7fX0sIjlaMUYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJNR0JTIiksbz1uKCJ6b3RtIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHModCkscj1lLmxpZnQobik7cmV0dXJuIG4uY2F1Z2h0PXJ9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnNlbGVjdG9yLHRoaXMuY2F1Z2h0KSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5zZWxlY3Rvcj1uLGkuY2F1Z2h0PXIsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgbj12b2lkIDA7dHJ5e249dGhpcy5zZWxlY3RvcihlLHRoaXMuY2F1Z2h0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LnByb3RvdHlwZS5lcnJvci5jYWxsKHRoaXMsZSl9dGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCksdGhpcy5hZGQoT2JqZWN0KG8uYSkodGhpcyxuKSl9fSxlfShpLmEpfSxBeUpxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgcj1uKCJDY25HIiksaT0obigiamxabSIpLG4oIklwMFIiKSksbz0obigiWWhiTyIpLG4oIjRjMzUiKSksYT0obigiWWxiUSIpLG4oImxMQVAiKSxyLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWx7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDt0cmFuc2l0aW9uOm1hcmdpbiAyMjVtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1leHBhbnNpb24tcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSkpO2Z1bmN0aW9uIHModCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuRmEoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDEsMCxbWyJib2R5IiwxXV0sbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Il0sWyJyb2xlIiwicmVnaW9uIl1dLFtbMjQsIkBib2R5RXhwYW5zaW9uIiwwXSxbMSwiYXJpYS1sYWJlbGxlZGJ5IiwwXSxbOCwiaWQiLDBdXSxbW251bGwsIkBib2R5RXhwYW5zaW9uLmRvbmUiXSxbbnVsbCwiQGJvZHlFeHBhbnNpb24uc3RhcnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLGk9dC5jb21wb25lbnQ7cmV0dXJuIkBib2R5RXhwYW5zaW9uLmRvbmUiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSwiQGJvZHlFeHBhbnNpb24uc3RhcnQiPT09ZSYmKHI9ITEhPT1pLl9ib2R5QW5pbWF0aW9uKG4pJiZyKSxyfSxudWxsLG51bGwpKSwodCgpKCksci5PYSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksci5YYShudWxsLDEpLCh0KCkoKSxyLkZhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwscykpLHIuTmEoNSwyMTI5OTIsbnVsbCwwLG8uYSxbci5qLHIuTl0se3BvcnRhbDpbMCwicG9ydGFsIl19LG51bGwpLHIuWGEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9wb3J0YWwpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5fZ2V0RXhwYW5kZWRTdGF0ZSgpLG4uX2hlYWRlcklkLG4uaWQpfSl9dmFyIGM9ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjRweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye291dGxpbmU6MH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2N1cnNvcjpwb2ludGVyfS5tYXQtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixbZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZ3JvdzoyfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweCAycHggMDtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiaW5kaWNhdG9yUm90YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMTgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImV4cGFuc2lvbkhlaWdodCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tjb2xsYXBzZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2NvbGxhcHNlZEhlaWdodDoiNDhweCJ9fX0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7ZXhwYW5kZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2V4cGFuZGVkSGVpZ2h0OiI2NHB4In19fSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTozLHN0ZXBzOlt7dHlwZToxMSxzZWxlY3RvcjoiQGluZGljYXRvclJvdGF0ZSIsYW5pbWF0aW9uOnt0eXBlOjksb3B0aW9uczpudWxsfSxvcHRpb25zOntvcHRpb25hbDohMH19LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuT2EoMCwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24taW5kaWNhdG9yIl1dLFtbMjQsIkBpbmRpY2F0b3JSb3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9nZXRFeHBhbmRlZFN0YXRlKCkpfSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gci5pYigyLFsodCgpKCksci5PYSgwLDAsbnVsbCxudWxsLDMsInNwYW4iLFtbImNsYXNzIiwibWF0LWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksci5YYShudWxsLDApLHIuWGEobnVsbCwxKSxyLlhhKG51bGwsMiksKHQoKSgpLHIuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxsKSksci5OYSg1LDE2Mzg0LG51bGwsMCxpLmssW3IuTixyLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3Nob3dUb2dnbGUoKSl9LG51bGwpfX0sQ1M5UTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4scil7dm9pZCAwPT09ciYmKHI9aS5ub3cpO3ZhciBvPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PW8/ZS5kZWxlZ2F0ZS5ub3coKTpyKCl9KXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uYWN0aXZlPSExLG8uc2NoZWR1bGVkPXZvaWQgMCxvfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihuLHIsaSl7cmV0dXJuIHZvaWQgMD09PXImJihyPTApLGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT10aGlzP2UuZGVsZWdhdGUuc2NoZWR1bGUobixyLGkpOnQucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxuLHIsaSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aW9ucztpZih0aGlzLmFjdGl2ZSllLnB1c2godCk7ZWxzZXt2YXIgbjt0aGlzLmFjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLmFjdGl2ZT0hMSxuKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgbn19fSxlfShpKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiSWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFplfSksbi5kKGUsIkphIixmdW5jdGlvbigpe3JldHVybiBYZX0pLG4uZChlLCJHYSIsZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiVyIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUSIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiVSIsZnVuY3Rpb24oKXtyZXR1cm4gQ2V9KSxuLmQoZSwiTCIsZnVuY3Rpb24oKXtyZXR1cm4gR3R9KSxuLmQoZSwiWSIsZnVuY3Rpb24oKXtyZXR1cm4gUXR9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gWWV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gJGV9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gRnR9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwiRSIsZnVuY3Rpb24oKXtyZXR1cm4gQ259KSxuLmQoZSwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gRW59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJPIixmdW5jdGlvbigpe3JldHVybiBYfSksbi5kKGUsIk0iLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJUIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsIlYiLGZ1bmN0aW9uKCl7cmV0dXJuIFp9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJIIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGxlfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIE10fSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsIkkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1lfSksbi5kKGUsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIHZlfSksbi5kKGUsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFVlfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSksbi5kKGUsIkciLGZ1bmN0aW9uKCl7cmV0dXJuIEFlfSksbi5kKGUsIlAiLGZ1bmN0aW9uKCl7cmV0dXJuIGtlfSksbi5kKGUsIlgiLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsIlJhIixmdW5jdGlvbigpe3JldHVybiBqZX0pLG4uZChlLCJCYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gc3R9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEF0fSksbi5kKGUsIkNhIixmdW5jdGlvbigpe3JldHVybiBibn0pLG4uZChlLCJEYSIsZnVuY3Rpb24oKXtyZXR1cm4gU259KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsIlBhIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsIlVhIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImZiIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsIlNhIixmdW5jdGlvbigpe3JldHVybiBjdH0pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwiRmEiLGZ1bmN0aW9uKCl7cmV0dXJuIGdyfSksbi5kKGUsIkthIixmdW5jdGlvbigpe3JldHVybiBMcn0pLG4uZChlLCJMYSIsZnVuY3Rpb24oKXtyZXR1cm4gUW99KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEhufSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiB1aX0pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gYnJ9KSxuLmQoZSwiUWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHlyfSksbi5kKGUsIlZhIixmdW5jdGlvbigpe3JldHVybiBBcn0pLG4uZChlLCJXYSIsZnVuY3Rpb24oKXtyZXR1cm4ga3J9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGppfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBLcn0pLG4uZChlLCJhYiIsZnVuY3Rpb24oKXtyZXR1cm4gY2l9KSxuLmQoZSwiZGIiLGZ1bmN0aW9uKCl7cmV0dXJuIGxpfSksbi5kKGUsIlphIixmdW5jdGlvbigpe3JldHVybiBQaX0pLG4uZChlLCJiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwiY2IiLGZ1bmN0aW9uKCl7cmV0dXJuIE1pfSksbi5kKGUsImViIixmdW5jdGlvbigpe3JldHVybiBDaX0pLG4uZChlLCJnYiIsZnVuY3Rpb24oKXtyZXR1cm4gRGl9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIHpufSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBWaX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oInB1Z1QiKSxvPW4oIks5SWEiKSxhPW4oIjZibEYiKSxzPW4oInAwaWIiKSx1PW4oIlMxblgiKTtmdW5jdGlvbiBjKHQpe3JldHVybntwcm92aWRlZEluOnQucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OnQuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2Rlc2M9dCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5uZ0luamVjdGFibGVEZWY9dm9pZCAwIT09ZT9jKHtwcm92aWRlZEluOmUucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6ZS5mYWN0b3J5fSk6dm9pZCAwfXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJJbmplY3Rpb25Ub2tlbiAiK3RoaXMuX2Rlc2N9LHR9KCksZj0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIGgodCxlLG4pe3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtpZih0KXt2YXIgaT10LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShlKSk7Zm9yKHZhciBvIGluIGkpdGhpc1tvXT1pW29dfX19KGUpO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07aWYodGhpcyBpbnN0YW5jZW9mIG8pcmV0dXJuIGkuYXBwbHkodGhpcyx0KSx0aGlzO3ZhciBuLGE9bmV3KChuPW8pLmJpbmQuYXBwbHkobixPYmplY3Qoci5kKShbdm9pZCAwXSx0KSkpO3JldHVybiBzLmFubm90YXRpb249YSxzO2Z1bmN0aW9uIHModCxlLG4pe2Zvcih2YXIgcj10Lmhhc093blByb3BlcnR5KGYpP3RbZl06T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZix7dmFsdWU6W119KVtmXTtyLmxlbmd0aDw9bjspci5wdXNoKG51bGwpO3JldHVybihyW25dPXJbbl18fFtdKS5wdXNoKGEpLHR9fXJldHVybiBuJiYoby5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkpLG8ucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPXQsby5hbm5vdGF0aW9uQ2xzPW8sb312YXIgZD1uZXcgbCgiQW5hbHl6ZUZvckVudHJ5Q29tcG9uZW50cyIpO0Z1bmN0aW9uO3ZhciBwPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3csbT0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZix5PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwsdj1wfHx5fHxtLGc9UHJvbWlzZS5yZXNvbHZlKDApLGI9bnVsbDtmdW5jdGlvbiBfKCl7aWYoIWIpe3ZhciB0PXYuU3ltYm9sO2lmKHQmJnQuaXRlcmF0b3IpYj10Lml0ZXJhdG9yO2Vsc2UgZm9yKHZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIHI9ZVtuXTsiZW50cmllcyIhPT1yJiYic2l6ZSIhPT1yJiZNYXAucHJvdG90eXBlW3JdPT09TWFwLnByb3RvdHlwZS5lbnRyaWVzJiYoYj1yKX19cmV0dXJuIGJ9ZnVuY3Rpb24gdyh0KXsidW5kZWZpbmVkIj09dHlwZW9mIFpvbmU/Zy50aGVuKGZ1bmN0aW9uKCl7dCYmdC5hcHBseShudWxsLG51bGwpfSk6Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJzY2hlZHVsZU1pY3JvdGFzayIsdCl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0PT09ZXx8Im51bWJlciI9PXR5cGVvZiB0JiYibnVtYmVyIj09dHlwZW9mIGUmJmlzTmFOKHQpJiZpc05hTihlKX1mdW5jdGlvbiBTKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdDtpZih0IGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIlsiK3QubWFwKFMpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PXQpcmV0dXJuIiIrdDtpZih0Lm92ZXJyaWRkZW5OYW1lKXJldHVybiIiK3Qub3ZlcnJpZGRlbk5hbWU7aWYodC5uYW1lKXJldHVybiIiK3QubmFtZTt2YXIgZT10LnRvU3RyaW5nKCk7aWYobnVsbD09ZSlyZXR1cm4iIitlO3ZhciBuPWUuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PW4/ZTplLnN1YnN0cmluZygwLG4pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuX19mb3J3YXJkX3JlZl9fPUUsdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBTKHRoaXMoKSl9LHR9ZnVuY3Rpb24gQyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5oYXNPd25Qcm9wZXJ0eSgiX19mb3J3YXJkX3JlZl9fIikmJnQuX19mb3J3YXJkX3JlZl9fPT09RT90KCk6dH12YXIgTz1oKCJJbmplY3QiLGZ1bmN0aW9uKHQpe3JldHVybnt0b2tlbjp0fX0pLFQ9aCgiT3B0aW9uYWwiKSxrPWgoIlNlbGYiKSxBPWgoIlNraXBTZWxmIiksaj0iX19zb3VyY2UiLEk9bmV3IE9iamVjdCxNPW5ldyBsKCJJTkpFQ1RPUiIpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT1JKSxlPT09SSl0aHJvdyBuZXcgRXJyb3IoIk51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgIitTKHQpKyIhIik7cmV0dXJuIGV9LHR9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/bmV3IHEodCxlKTpuZXcgcSh0LnByb3ZpZGVycyx0LnBhcmVudCx0Lm5hbWV8fG51bGwpfSx0LlRIUk9XX0lGX05PVF9GT1VORD1JLHQuTlVMTD1uZXcgUCx0Lm5nSW5qZWN0YWJsZURlZj1jKHtwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gWihNKX19KSx0fSgpLFI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEQ9W10sRj1SLEw9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKX0sVj17fSx6PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKHRbZV09PT1WKXJldHVybiBlO3Rocm93IEVycm9yKCIhcHJvcCIpfSh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6Vn0pLEI9Ti5OVUxMLFU9L1xuL2dtLEg9Ilx1MDI3NSIscT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PWUmJihlPUIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMucGFyZW50PWUsdGhpcy5zb3VyY2U9bjt2YXIgcj10aGlzLl9yZWNvcmRzPW5ldyBNYXA7ci5zZXQoTix7dG9rZW46TixmbjpSLGRlcHM6RCx2YWx1ZTp0aGlzLHVzZU5ldzohMX0pLHIuc2V0KE0se3Rva2VuOk0sZm46UixkZXBzOkQsdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxmdW5jdGlvbiB0KGUsbil7aWYobilpZigobj1DKG4pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspdChlLG5bcl0pO2Vsc2V7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pdGhyb3cgUSgiRnVuY3Rpb24vQ2xhc3Mgbm90IHN1cHBvcnRlZCIsbik7aWYoIW58fCJvYmplY3QiIT10eXBlb2Ygbnx8IW4ucHJvdmlkZSl0aHJvdyBRKCJVbmV4cGVjdGVkIHByb3ZpZGVyIixuKTt2YXIgaT1DKG4ucHJvdmlkZSksbz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT1ELG49dC5kZXBzO2lmKG4mJm4ubGVuZ3RoKXtlPVtdO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT02O2lmKCh1PUMobltyXSkpaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIG89MCxhPXU7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cyBpbnN0YW5jZW9mIFR8fHM9PVQ/aXw9MTpzIGluc3RhbmNlb2YgQXx8cz09QT9pJj0tMzpzIGluc3RhbmNlb2Yga3x8cz09az9pJj0tNTp1PXMgaW5zdGFuY2VvZiBPP3MudG9rZW46QyhzKX1lLnB1c2goe3Rva2VuOnUsb3B0aW9uczppfSl9fWVsc2UgaWYodC51c2VFeGlzdGluZyl7dmFyIHU7ZT1be3Rva2VuOnU9Qyh0LnVzZUV4aXN0aW5nKSxvcHRpb25zOjZ9XX1lbHNlIGlmKCEobnx8eiBpbiB0KSl0aHJvdyBRKCInZGVwcycgcmVxdWlyZWQiLHQpO3JldHVybiBlfSh0KSxuPVIscj1ELGk9ITEsbz1DKHQucHJvdmlkZSk7aWYoeiBpbiB0KXI9dC51c2VWYWx1ZTtlbHNlIGlmKHQudXNlRmFjdG9yeSluPXQudXNlRmFjdG9yeTtlbHNlIGlmKHQudXNlRXhpc3RpbmcpO2Vsc2UgaWYodC51c2VDbGFzcylpPSEwLG49Qyh0LnVzZUNsYXNzKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBvKXRocm93IFEoIlN0YXRpY1Byb3ZpZGVyIGRvZXMgbm90IGhhdmUgW3VzZVZhbHVlfHVzZUZhY3Rvcnl8dXNlRXhpc3Rpbmd8dXNlQ2xhc3NdIG9yIFtwcm92aWRlXSBpcyBub3QgbmV3YWJsZSIsdCk7aT0hMCxuPW99cmV0dXJue2RlcHM6ZSxmbjpuLHVzZU5ldzppLHZhbHVlOnJ9fShuKTtpZighMD09PW4ubXVsdGkpe3ZhciBhPWUuZ2V0KGkpO2lmKGEpe2lmKGEuZm4hPT1MKXRocm93IEcoaSl9ZWxzZSBlLnNldChpLGE9e3Rva2VuOm4ucHJvdmlkZSxkZXBzOltdLHVzZU5ldzohMSxmbjpMLHZhbHVlOkR9KTthLmRlcHMucHVzaCh7dG9rZW46aT1uLG9wdGlvbnM6Nn0pfXZhciBzPWUuZ2V0KGkpO2lmKHMmJnMuZm49PUwpdGhyb3cgRyhpKTtlLnNldChpLG8pfX0ocix0KX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0wKTt2YXIgaT10aGlzLl9yZWNvcmRzLmdldCh0KTt0cnl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLGksbyxhLHMpe3RyeXtyZXR1cm4gZnVuY3Rpb24oZSxuLGksbyxhLHMpe3ZhciB1LGM7aWYoIW58fDQmcykyJnN8fCh1PW8uZ2V0KGUsYSwwKSk7ZWxzZXtpZigodT1uLnZhbHVlKT09Ril0aHJvdyBFcnJvcihIKyJDaXJjdWxhciBkZXBlbmRlbmN5Iik7aWYodT09PUQpe24udmFsdWU9Rjt2YXIgbD1uLnVzZU5ldyxmPW4uZm4saD1uLmRlcHMsZD1EO2lmKGgubGVuZ3RoKXtkPVtdO2Zvcih2YXIgcD0wO3A8aC5sZW5ndGg7cCsrKXt2YXIgbT1oW3BdLHk9bS5vcHRpb25zLHY9MiZ5P2kuZ2V0KG0udG9rZW4pOnZvaWQgMDtkLnB1c2godChtLnRva2VuLHYsaSx2fHw0Jnk/bzpCLDEmeT9udWxsOk4uVEhST1dfSUZfTk9UX0ZPVU5ELDApKX19bi52YWx1ZT11PWw/bmV3KChjPWYpLmJpbmQuYXBwbHkoYyxPYmplY3Qoci5kKShbdm9pZCAwXSxkKSkpOmYuYXBwbHkodm9pZCAwLGQpfX1yZXR1cm4gdX0oZSxuLGksbyxhLHMpfWNhdGNoKHQpe3Rocm93IHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQpKSwodC5uZ1RlbXBUb2tlblBhdGg9dC5uZ1RlbXBUb2tlblBhdGh8fFtdKS51bnNoaWZ0KGUpLG4mJm4udmFsdWU9PUYmJihuLnZhbHVlPUQpLHR9fSh0LGksdGhpcy5fcmVjb3Jkcyx0aGlzLnBhcmVudCxlLG4pfWNhdGNoKGUpe3ZhciBvPWUubmdUZW1wVG9rZW5QYXRoO3Rocm93IHRbal0mJm8udW5zaGlmdCh0W2pdKSxlLm1lc3NhZ2U9VygiXG4iK2UubWVzc2FnZSxvLHRoaXMuc291cmNlKSxlLm5nVG9rZW5QYXRoPW8sZS5uZ1RlbXBUb2tlblBhdGg9bnVsbCxlfX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHVzaChTKG4pKX0pLCJTdGF0aWNJbmplY3RvclsiK3Quam9pbigiLCAiKSsiXSJ9LHR9KCk7ZnVuY3Rpb24gRyh0KXtyZXR1cm4gUSgiQ2Fubm90IG1peCBtdWx0aSBwcm92aWRlcnMgYW5kIHJlZ3VsYXIgcHJvdmlkZXJzIix0KX1mdW5jdGlvbiBXKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1udWxsKSx0PXQmJiJcbiI9PT10LmNoYXJBdCgwKSYmdC5jaGFyQXQoMSk9PUg/dC5zdWJzdHIoMik6dDt2YXIgcj1TKGUpO2lmKGUgaW5zdGFuY2VvZiBBcnJheSlyPWUubWFwKFMpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIGk9W107Zm9yKHZhciBvIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShvKSl7dmFyIGE9ZVtvXTtpLnB1c2gobysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpTKGEpKSl9cj0ieyIraS5qb2luKCIsICIpKyJ9In1yZXR1cm4iU3RhdGljSW5qZWN0b3JFcnJvciIrKG4/IigiK24rIikiOiIiKSsiWyIrcisiXTogIit0LnJlcGxhY2UoVSwiXG4gICIpfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gbmV3IEVycm9yKFcodCxlKSl9dmFyIFk9dm9pZCAwO2Z1bmN0aW9uIEsodCl7dmFyIGU9WTtyZXR1cm4gWT10LGV9ZnVuY3Rpb24gWih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PVkpdGhyb3cgbmV3IEVycm9yKCJpbmplY3QoKSBtdXN0IGJlIGNhbGxlZCBmcm9tIGFuIGluamVjdGlvbiBjb250ZXh0Iik7aWYobnVsbD09PVkpe3ZhciBuPXQubmdJbmplY3RhYmxlRGVmO2lmKG4mJiJyb290Ij09bi5wcm92aWRlZEluKXJldHVybiB2b2lkIDA9PT1uLnZhbHVlP24udmFsdWU9bi5mYWN0b3J5KCk6bi52YWx1ZTt0aHJvdyBuZXcgRXJyb3IoIkluamVjdG9yOiBOT1RfRk9VTkQgWyIrUyh0KSsiXSIpfXJldHVybiBZLmdldCh0LDgmZT9udWxsOnZvaWQgMCxlKX1TdHJpbmc7dmFyIFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLHRbdC5OYXRpdmU9MV09Ik5hdGl2ZSIsdFt0Lk5vbmU9Ml09Ik5vbmUiLHRbdC5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsdH0oe30pLCQ9ZnVuY3Rpb24odCl7dGhpcy5mdWxsPXQsdGhpcy5tYWpvcj10LnNwbGl0KCIuIilbMF0sdGhpcy5taW5vcj10LnNwbGl0KCIuIilbMV0sdGhpcy5wYXRjaD10LnNwbGl0KCIuIikuc2xpY2UoMikuam9pbigiLiIpfSxKPW5ldyAkKCI2LjAuOSIpLHR0PSJuZ0RlYnVnQ29udGV4dCIsZXQ9Im5nT3JpZ2luYWxFcnJvciIsbnQ9Im5nRXJyb3JMb2dnZXIiO2Z1bmN0aW9uIHJ0KHQpe3JldHVybiB0W3R0XX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFtldF19ZnVuY3Rpb24gb3QodCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07dC5lcnJvci5hcHBseSh0LE9iamVjdChyLmQpKGUpKX12YXIgYXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY29uc29sZT1jb25zb2xlfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGVFcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcih0KSxuPXRoaXMuX2ZpbmRDb250ZXh0KHQpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIHRbbnRdfHxvdH0odCk7cih0aGlzLl9jb25zb2xlLCJFUlJPUiIsdCksZSYmcih0aGlzLl9jb25zb2xlLCJPUklHSU5BTCBFUlJPUiIsZSksbiYmcih0aGlzLl9jb25zb2xlLCJFUlJPUiBDT05URVhUIixuKX0sdC5wcm90b3R5cGUuX2ZpbmRDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3J0KHQpP3J0KHQpOnRoaXMuX2ZpbmRDb250ZXh0KGl0KHQpKTpudWxsfSx0LnByb3RvdHlwZS5fZmluZE9yaWdpbmFsRXJyb3I9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWl0KHQpO2UmJml0KGUpOyllPWl0KGUpO3JldHVybiBlfSx0fSgpLHN0PW5ldyBsKCJUaGUgcHJlc2VuY2Ugb2YgdGhpcyB0b2tlbiBtYXJrcyBhbiBpbmplY3RvciBhcyBiZWluZyB0aGUgcm9vdCBpbmplY3Rvci4iKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4hIXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRoZW59ZnVuY3Rpb24gY3QodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zdWJzY3JpYmV9dmFyIGx0PW5ldyBsKCJBcHBsaWNhdGlvbiBJbml0aWFsaXplciIpLGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuYXBwSW5pdHM9dCx0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuZG9uZT0hMSx0aGlzLmRvbmVQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsbil7ZS5yZXNvbHZlPXQsZS5yZWplY3Q9bn0pfXJldHVybiB0LnByb3RvdHlwZS5ydW5Jbml0aWFsaXplcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmluaXRpYWxpemVkKXt2YXIgZT1bXSxuPWZ1bmN0aW9uKCl7dC5kb25lPSEwLHQucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcih2YXIgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXt2YXIgaT10aGlzLmFwcEluaXRzW3JdKCk7dXQoaSkmJmUucHVzaChpKX1Qcm9taXNlLmFsbChlKS50aGVuKGZ1bmN0aW9uKCl7bigpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KSwwPT09ZS5sZW5ndGgmJm4oKSx0aGlzLmluaXRpYWxpemVkPSEwfX0sdH0oKSxodD1uZXcgbCgiQXBwSWQiKTtmdW5jdGlvbiBkdCgpe3JldHVybiIiK3B0KCkrcHQoKStwdCgpfWZ1bmN0aW9uIHB0KCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoOTcrTWF0aC5mbG9vcigyNSpNYXRoLnJhbmRvbSgpKSl9dmFyIG10PW5ldyBsKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLHl0PW5ldyBsKCJQbGF0Zm9ybSBJRCIpLHZ0PW5ldyBsKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLGd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQpfSx0LnByb3RvdHlwZS53YXJuPWZ1bmN0aW9uKHQpe2NvbnNvbGUud2Fybih0KX0sdH0oKTtmdW5jdGlvbiBidCgpe3Rocm93IG5ldyBFcnJvcigiUnVudGltZSBjb21waWxlciBpcyBub3QgbG9hZGVkIil9dmFyIF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZVN5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGU9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNsZWFyQ2FjaGVGb3I9ZnVuY3Rpb24odCl7fSx0fSgpLHd0PWZ1bmN0aW9uKCl7fSx4dD1mdW5jdGlvbigpe307ZnVuY3Rpb24gU3QodCl7dmFyIGU9RXJyb3IoIk5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAiK1ModCkrIi4gRGlkIHlvdSBhZGQgaXQgdG8gQE5nTW9kdWxlLmVudHJ5Q29tcG9uZW50cz8iKTtyZXR1cm4gZVtPdF09dCxlfXZhciBFdCxDdCxPdD0ibmdDb21wb25lbnQiLFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dGhyb3cgU3QodCl9LHR9KCksa3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5VTEw9bmV3IFR0LHR9KCksQXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uZ01vZHVsZT1uLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO3RoaXMuX2ZhY3Rvcmllcy5zZXQoaS5jb21wb25lbnRUeXBlLGkpfX1yZXR1cm4gdC5wcm90b3R5cGUucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTtpZighZSYmdGhpcy5fcGFyZW50JiYoZT10aGlzLl9wYXJlbnQucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCkpLCFlKXRocm93IFN0KHQpO3JldHVybiBuZXcganQoZSx0aGlzLl9uZ01vZHVsZSl9LHR9KCksanQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5mYWN0b3J5PWUsci5uZ01vZHVsZT1uLHIuc2VsZWN0b3I9ZS5zZWxlY3RvcixyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlLHIubmdDb250ZW50U2VsZWN0b3JzPWUubmdDb250ZW50U2VsZWN0b3JzLHIuaW5wdXRzPWUuaW5wdXRzLHIub3V0cHV0cz1lLm91dHB1dHMscn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHRoaXMuZmFjdG9yeS5jcmVhdGUodCxlLG4scnx8dGhpcy5uZ01vZHVsZSl9LGV9KHh0KSxJdD1mdW5jdGlvbigpe30sTXQ9ZnVuY3Rpb24oKXt9LFB0PWZ1bmN0aW9uKCl7dmFyIHQ9di53dGY7cmV0dXJuISghdHx8IShFdD10LnRyYWNlKXx8KEN0PUV0LmV2ZW50cywwKSl9KCk7ZnVuY3Rpb24gTnQodCxlKXtyZXR1cm4gbnVsbH12YXIgUnQ9UHQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCksQ3QuY3JlYXRlU2NvcGUodCxlKX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gTnR9LER0PVB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIEV0LmxlYXZlU2NvcGUodCxlKSxlfTpmdW5jdGlvbih0LGUpe3JldHVybiBlfSxGdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX19pc0FzeW5jPWUsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3QucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZSYmIm9iamVjdCI9PXR5cGVvZiBlPyhvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5uZXh0KHQpfSl9OmZ1bmN0aW9uKHQpe2UubmV4dCh0KX0sZS5lcnJvciYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLmVycm9yKHQpfSl9OmZ1bmN0aW9uKHQpe2UuZXJyb3IodCl9KSxlLmNvbXBsZXRlJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9OmZ1bmN0aW9uKCl7ZS5jb21wbGV0ZSgpfSkpOihvPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX0pfTpmdW5jdGlvbih0KXtlKHQpfSxuJiYoYT10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4odCl9KX06ZnVuY3Rpb24odCl7bih0KX0pLHImJihzPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiByKCl9KX06ZnVuY3Rpb24oKXtyKCl9KSk7dmFyIHU9dC5wcm90b3R5cGUuc3Vic2NyaWJlLmNhbGwodGhpcyxvLGEscyk7cmV0dXJuIGUgaW5zdGFuY2VvZiBpLmEmJmUuYWRkKHUpLHV9LGV9KG8uYSksTHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlLG49dC5lbmFibGVMb25nU3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm47aWYodGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBGdCghMSksdGhpcy5vblN0YWJsZT1uZXcgRnQoITEpLHRoaXMub25FcnJvcj1uZXcgRnQoITEpLCJ1bmRlZmluZWQiPT10eXBlb2YgWm9uZSl0aHJvdyBuZXcgRXJyb3IoIkluIHRoaXMgY29uZmlndXJhdGlvbiBBbmd1bGFyIHJlcXVpcmVzIFpvbmUuanMiKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCksdGhpcy5fbmVzdGluZz0wLHRoaXMuX291dGVyPXRoaXMuX2lubmVyPVpvbmUuY3VycmVudCxab25lLnd0ZlpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLnd0ZlpvbmVTcGVjKSksWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxyJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLChlPXRoaXMpLl9pbm5lcj1lLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24odCxuLHIsaSxvLGEpe3RyeXtyZXR1cm4gVXQoZSksdC5pbnZva2VUYXNrKHIsaSxvLGEpfWZpbmFsbHl7SHQoZSl9fSxvbkludm9rZTpmdW5jdGlvbih0LG4scixpLG8sYSxzKXt0cnl7cmV0dXJuIFV0KGUpLHQuaW52b2tlKHIsaSxvLGEscyl9ZmluYWxseXtIdChlKX19LG9uSGFzVGFzazpmdW5jdGlvbih0LG4scixpKXt0Lmhhc1Rhc2socixpKSxuPT09ciYmKCJtaWNyb1Rhc2siPT1pLmNoYW5nZT8oZS5oYXNQZW5kaW5nTWljcm90YXNrcz1pLm1pY3JvVGFzayxCdChlKSk6Im1hY3JvVGFzayI9PWkuY2hhbmdlJiYoZS5oYXNQZW5kaW5nTWFjcm90YXNrcz1pLm1hY3JvVGFzaykpfSxvbkhhbmRsZUVycm9yOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiB0LmhhbmRsZUVycm9yKHIsaSksZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLm9uRXJyb3IuZW1pdChpKX0pLCExfX0pfXJldHVybiB0LmlzSW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe3JldHVybiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfSx0LmFzc2VydEluQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtpZighdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIG5vdCEiKX0sdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYodC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyEiKX0sdC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9pbm5lcixvPWkuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK3IsdCx6dCxWdCxWdCk7dHJ5e3JldHVybiBpLnJ1blRhc2sobyxlLG4pfWZpbmFsbHl7aS5jYW5jZWxUYXNrKG8pfX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQodCxlLG4pfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3V0ZXIucnVuKHQpfSx0fSgpO2Z1bmN0aW9uIFZ0KCl7fXZhciB6dD17fTtmdW5jdGlvbiBCdCh0KXtpZigwPT10Ll9uZXN0aW5nJiYhdC5oYXNQZW5kaW5nTWljcm90YXNrcyYmIXQuaXNTdGFibGUpdHJ5e3QuX25lc3RpbmcrKyx0Lm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKHQuX25lc3RpbmctLSwhdC5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7dC5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Lm9uU3RhYmxlLmVtaXQobnVsbCl9KX1maW5hbGx5e3QuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBVdCh0KXt0Ll9uZXN0aW5nKyssdC5pc1N0YWJsZSYmKHQuaXNTdGFibGU9ITEsdC5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIEh0KHQpe3QuX25lc3RpbmctLSxCdCh0KX12YXIgcXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBGdCx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEZ0LHRoaXMub25TdGFibGU9bmV3IEZ0LHRoaXMub25FcnJvcj1uZXcgRnR9cmV0dXJuIHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5HdWFyZGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1bk91dHNpZGVBbmd1bGFyPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdH0oKSxHdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fZGlkV29yaz0hMSx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksdC5ydW4oZnVuY3Rpb24oKXtlLnRhc2tUcmFja2luZ1pvbmU9Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9cmV0dXJuIHQucHJvdG90eXBlLl93YXRjaEFuZ3VsYXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe3QuX2RpZFdvcms9ITAsdC5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe3QuX2lzWm9uZVN0YWJsZT0hMCx0Ll9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfSx0LnByb3RvdHlwZS5pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuaXNTdGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfSx0LnByb3RvdHlwZS5fcnVuQ2FsbGJhY2tzSWZSZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5pc1N0YWJsZSgpKXcoZnVuY3Rpb24oKXtmb3IoOzAhPT10Ll9jYWxsYmFja3MubGVuZ3RoOyl7dmFyIGU9dC5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChlLnRpbWVvdXRJZCksZS5kb25lQ2IodC5fZGlkV29yayl9dC5fZGlkV29yaz0hMX0pO2Vsc2V7dmFyIGU9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC51cGRhdGVDYnx8IXQudXBkYXRlQ2IoZSl8fChjbGVhclRpbWVvdXQodC50aW1lb3V0SWQpLCExKX0pLHRoaXMuX2RpZFdvcms9ITB9fSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nVGFza3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQuc291cmNlLGlzUGVyaW9kaWM6dC5kYXRhLmlzUGVyaW9kaWMsZGVsYXk6dC5kYXRhLmRlbGF5LGNyZWF0aW9uTG9jYXRpb246dC5jcmVhdGlvbkxvY2F0aW9uLHhocjp0LmRhdGEudGFyZ2V0fX0pOltdfSx0LnByb3RvdHlwZS5hZGRDYWxsYmFjaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPS0xO2UmJmU+MCYmKGk9c2V0VGltZW91dChmdW5jdGlvbigpe3IuX2NhbGxiYWNrcz1yLl9jYWxsYmFja3MuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWVvdXRJZCE9PWl9KSx0KHIuX2RpZFdvcmssci5nZXRQZW5kaW5nVGFza3MoKSl9LGUpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOnQsdGltZW91dElkOmksdXBkYXRlQ2I6bn0pfSx0LnByb3RvdHlwZS53aGVuU3RhYmxlPWZ1bmN0aW9uKHQsZSxuKXtpZihuJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9kaXN0L3Rhc2stdHJhY2tpbmcuanMiIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKHQsZSxuKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9LHQucHJvdG90eXBlLmdldFBlbmRpbmdSZXF1ZXN0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50fSx0LnByb3RvdHlwZS5maW5kUHJvdmlkZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm5bXX0sdH0oKSxXdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcCxLdC5hZGRUb1dpbmRvdyh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQodCxlKX0sdC5wcm90b3R5cGUudW5yZWdpc3RlckFwcGxpY2F0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUodCl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX0sdC5wcm90b3R5cGUuZ2V0VGVzdGFiaWxpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQodCl8fG51bGx9LHQucHJvdG90eXBlLmdldEFsbFRlc3RhYmlsaXRpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGxSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX0sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSxLdC5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyx0LGUpfSx0LmN0b3JQYXJhbWV0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHR9KCk7ZnVuY3Rpb24gUXQodCl7S3Q9dH12YXIgWXQsS3Q9bmV3KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYWRkVG9XaW5kb3c9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5maW5kVGVzdGFiaWxpdHlJblRyZWU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBudWxsfSx0fSgpKSxadD0hMCxYdD0hMSwkdD1uZXcgbCgiQWxsb3dNdWx0aXBsZVRva2VuIik7ZnVuY3Rpb24gSnQoKXtpZihYdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBlbmFibGUgcHJvZCBtb2RlIGFmdGVyIHBsYXRmb3JtIHNldHVwLiIpO1p0PSExfWZ1bmN0aW9uIHRlKCl7cmV0dXJuIFh0PSEwLFp0fXZhciBlZT1mdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMudG9rZW49ZX07ZnVuY3Rpb24gbmUodCxlLG4pe3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgcj0iUGxhdGZvcm06ICIrZSxpPW5ldyBsKHIpO3JldHVybiBmdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG89cmUoKTtpZighb3x8by5pbmplY3Rvci5nZXQoJHQsITEpKWlmKHQpdChuLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6aSx1c2VWYWx1ZTohMH0pKTtlbHNle3ZhciBhPW4uY29uY2F0KGUpLmNvbmNhdCh7cHJvdmlkZTppLHVzZVZhbHVlOiEwfSk7IWZ1bmN0aW9uKHQpe2lmKFl0JiYhWXQuZGVzdHJveWVkJiYhWXQuaW5qZWN0b3IuZ2V0KCR0LCExKSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGNhbiBiZSBvbmx5IG9uZSBwbGF0Zm9ybS4gRGVzdHJveSB0aGUgcHJldmlvdXMgb25lIHRvIGNyZWF0ZSBhIG5ldyBvbmUuIik7WXQ9dC5nZXQoaWUpO3ZhciBlPXQuZ2V0KG10LG51bGwpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KE4uY3JlYXRlKHtwcm92aWRlcnM6YSxuYW1lOnJ9KSl9cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXJlKCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJObyBwbGF0Zm9ybSBleGlzdHMhIik7aWYoIWUuaW5qZWN0b3IuZ2V0KHQsbnVsbCkpdGhyb3cgbmV3IEVycm9yKCJBIHBsYXRmb3JtIHdpdGggYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjcmVhdGVkLiBQbGVhc2UgZGVzdHJveSBpdCBmaXJzdC4iKTtyZXR1cm4gZX0oaSl9fWZ1bmN0aW9uIHJlKCl7cmV0dXJuIFl0JiYhWXQuZGVzdHJveWVkP1l0Om51bGx9dmFyIGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9pbmplY3Rvcj10LHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZUZhY3Rvcnk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXRoaXMsaT0ibm9vcCI9PT0obj1lP2Uubmdab25lOnZvaWQgMCk/bmV3IHF0Oigiem9uZS5qcyI9PT1uP3ZvaWQgMDpuKXx8bmV3IEx0KHtlbmFibGVMb25nU3RhY2tUcmFjZTp0ZSgpfSksbz1be3Byb3ZpZGU6THQsdXNlVmFsdWU6aX1dO3JldHVybiBpLnJ1bihmdW5jdGlvbigpe3ZhciBlPU4uY3JlYXRlKHtwcm92aWRlcnM6byxwYXJlbnQ6ci5pbmplY3RvcixuYW1lOnQubW9kdWxlVHlwZS5uYW1lfSksbj10LmNyZWF0ZShlKSxhPW4uaW5qZWN0b3IuZ2V0KGF0LG51bGwpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm8gRXJyb3JIYW5kbGVyLiBJcyBwbGF0Zm9ybSBtb2R1bGUgKEJyb3dzZXJNb2R1bGUpIGluY2x1ZGVkPyIpO3JldHVybiBuLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBzZShyLl9tb2R1bGVzLG4pfSksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBpLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2EuaGFuZGxlRXJyb3IodCl9fSl9KSxmdW5jdGlvbih0LGUsaSl7dHJ5e3ZhciBvPSgoYT1uLmluamVjdG9yLmdldChmdCkpLnJ1bkluaXRpYWxpemVycygpLGEuZG9uZVByb21pc2UudGhlbihmdW5jdGlvbigpe3JldHVybiByLl9tb2R1bGVEb0Jvb3RzdHJhcChuKSxufSkpO3JldHVybiB1dChvKT9vLmNhdGNoKGZ1bmN0aW9uKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59KTpvfWNhdGNoKG4pe3Rocm93IGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihuKX0pLG59dmFyIGF9KGEsaSl9KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTW9kdWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5pbmplY3Rvci5nZXQod3QpLGk9b2Uoe30sZSk7cmV0dXJuIHIuY3JlYXRlQ29tcGlsZXIoW2ldKS5jb21waWxlTW9kdWxlQXN5bmModCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gbi5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHQsaSl9KX0sdC5wcm90b3R5cGUuX21vZHVsZURvQm9vdHN0cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5qZWN0b3IuZ2V0KGFlKTtpZih0Ll9ib290c3RyYXBDb21wb25lbnRzLmxlbmd0aD4wKXQuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5ib290c3RyYXAodCl9KTtlbHNle2lmKCF0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEVycm9yKCJUaGUgbW9kdWxlICIrUyh0Lmluc3RhbmNlLmNvbnN0cnVjdG9yKSsnIHdhcyBib290c3RyYXBwZWQsIGJ1dCBpdCBkb2VzIG5vdCBkZWNsYXJlICJATmdNb2R1bGUuYm9vdHN0cmFwIiBjb21wb25lbnRzIG5vciBhICJuZ0RvQm9vdHN0cmFwIiBtZXRob2QuIFBsZWFzZSBkZWZpbmUgb25lIG9mIHRoZXNlLicpO3QuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChlKX10aGlzLl9tb2R1bGVzLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwbGF0Zm9ybSBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCEiKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2Rlc3Ryb3llZD0hMH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gb2UodCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLnJlZHVjZShvZSx0KTpPYmplY3Qoci5hKSh7fSx0LGUpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8pe3ZhciBjPXRoaXM7dGhpcy5fem9uZT10LHRoaXMuX2NvbnNvbGU9ZSx0aGlzLl9pbmplY3Rvcj1uLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9aSx0aGlzLl9pbml0U3RhdHVzPW8sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXM9dGUoKSx0aGlzLl96b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7Yy5fem9uZS5ydW4oZnVuY3Rpb24oKXtjLnRpY2soKX0pfX0pO3ZhciBsPW5ldyBhLmEoZnVuY3Rpb24odCl7Yy5fc3RhYmxlPWMuX3pvbmUuaXNTdGFibGUmJiFjLl96b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhYy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyxjLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KGMuX3N0YWJsZSksdC5jb21wbGV0ZSgpfSl9KSxmPW5ldyBhLmEoZnVuY3Rpb24odCl7dmFyIGU7Yy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2U9Yy5fem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtMdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksdyhmdW5jdGlvbigpe2MuX3N0YWJsZXx8Yy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc3x8Yy5fem9uZS5oYXNQZW5kaW5nTWljcm90YXNrc3x8KGMuX3N0YWJsZT0hMCx0Lm5leHQoITApKX0pfSl9KTt2YXIgbj1jLl96b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7THQuYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGMuX3N0YWJsZSYmKGMuX3N0YWJsZT0hMSxjLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5uZXh0KCExKX0pKX0pO3JldHVybiBmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxuLnVuc3Vic2NyaWJlKCl9fSk7dGhpcy5pc1N0YWJsZT1PYmplY3Qocy5hKShsLGYucGlwZShPYmplY3QodS5hKSgpKSl9cmV0dXJuIHQucHJvdG90eXBlLmJvb3RzdHJhcD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcztpZighdGhpcy5faW5pdFN0YXR1cy5kb25lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGJvb3RzdHJhcCBhcyB0aGVyZSBhcmUgc3RpbGwgYXN5bmNocm9ub3VzIGluaXRpYWxpemVycyBydW5uaW5nLiBCb290c3RyYXAgY29tcG9uZW50cyBpbiB0aGUgYG5nRG9Cb290c3RyYXBgIG1ldGhvZCBvZiB0aGUgcm9vdCBtb2R1bGUuIik7bj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKG4uY29tcG9uZW50VHlwZSk7dmFyIGk9biBpbnN0YW5jZW9mIGp0P251bGw6dGhpcy5faW5qZWN0b3IuZ2V0KEl0KSxvPW4uY3JlYXRlKE4uTlVMTCxbXSxlfHxuLnNlbGVjdG9yLGkpO28ub25EZXN0cm95KGZ1bmN0aW9uKCl7ci5fdW5sb2FkQ29tcG9uZW50KG8pfSk7dmFyIGE9by5pbmplY3Rvci5nZXQoR3QsbnVsbCk7cmV0dXJuIGEmJm8uaW5qZWN0b3IuZ2V0KFd0KS5yZWdpc3RlckFwcGxpY2F0aW9uKG8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCxhKSx0aGlzLl9sb2FkQ29tcG9uZW50KG8pLHRlKCkmJnRoaXMuX2NvbnNvbGUubG9nKCJBbmd1bGFyIGlzIHJ1bm5pbmcgaW4gdGhlIGRldmVsb3BtZW50IG1vZGUuIENhbGwgZW5hYmxlUHJvZE1vZGUoKSB0byBlbmFibGUgdGhlIHByb2R1Y3Rpb24gbW9kZS4iKSxvfSx0LnByb3RvdHlwZS50aWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgRXJyb3IoIkFwcGxpY2F0aW9uUmVmLnRpY2sgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5Iik7dmFyIG49dC5fdGlja1Njb3BlKCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZW5mb3JjZU5vTmV3Q2hhbmdlcyYmdGhpcy5fdmlld3MuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jaGVja05vQ2hhbmdlcygpfSl9Y2F0Y2godCl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBlLl9leGNlcHRpb25IYW5kbGVyLmhhbmRsZUVycm9yKHQpfSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSxEdChuKX19LHQucHJvdG90eXBlLmF0dGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDt0aGlzLl92aWV3cy5wdXNoKGUpLGUuYXR0YWNoVG9BcHBSZWYodGhpcyl9LHQucHJvdG90eXBlLmRldGFjaFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dDtzZSh0aGlzLl92aWV3cyxlKSxlLmRldGFjaEZyb21BcHBSZWYoKX0sdC5wcm90b3R5cGUuX2xvYWRDb21wb25lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hdHRhY2hWaWV3KHQuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKHQpLHRoaXMuX2luamVjdG9yLmdldCh2dCxbXSkuY29uY2F0KHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycykuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pfSx0LnByb3RvdHlwZS5fdW5sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuZGV0YWNoVmlldyh0Lmhvc3RWaWV3KSxzZSh0aGlzLmNvbXBvbmVudHMsdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInZpZXdDb3VudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5fdGlja1Njb3BlPVJ0KCJBcHBsaWNhdGlvblJlZiN0aWNrKCkiKSx0fSgpO2Z1bmN0aW9uIHNlKHQsZSl7dmFyIG49dC5pbmRleE9mKGUpO24+LTEmJnQuc3BsaWNlKG4sMSl9dmFyIHVlPWZ1bmN0aW9uKCl7fSxjZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iix0W3QuRGFzaENhc2U9Ml09IkRhc2hDYXNlIix0fSh7fSksbGU9ZnVuY3Rpb24odCl7dGhpcy5uYXRpdmVFbGVtZW50PXR9LGZlPWZ1bmN0aW9uKCl7fSxoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5jaGFuZ2VzPW5ldyBGdCx0aGlzLmxlbmd0aD0wfXJldHVybiB0LnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfSx0LnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKHQpfSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQodCl9LHQucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaCh0KX0sdC5wcm90b3R5cGUuc29tZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKHQpfSx0LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX0sdC5wcm90b3R5cGVbXygpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzW18oKV0oKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXN1bHRzPWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9QXJyYXkuaXNBcnJheShuKT90KG4pOm47cmV0dXJuIGUuY29uY2F0KHIpfSxbXSl9KHQpLHRoaXMuZGlydHk9ITEsdGhpcy5sZW5ndGg9dGhpcy5fcmVzdWx0cy5sZW5ndGgsdGhpcy5sYXN0PXRoaXMuX3Jlc3VsdHNbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD10aGlzLl9yZXN1bHRzWzBdfSx0LnByb3RvdHlwZS5ub3RpZnlPbkNoYW5nZXM9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuZW1pdCh0aGlzKX0sdC5wcm90b3R5cGUuc2V0RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5jaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LHR9KCksZGU9ZnVuY3Rpb24oKXt9LHBlPXtmYWN0b3J5UGF0aFByZWZpeDoiIixmYWN0b3J5UGF0aFN1ZmZpeDoiLm5nZmFjdG9yeSJ9LG1lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NvbXBpbGVyPXQsdGhpcy5fY29uZmlnPWV8fHBlfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb21waWxlciBpbnN0YW5jZW9mIF90P3RoaXMubG9hZEZhY3RvcnkodCk6dGhpcy5sb2FkQW5kQ29tcGlsZSh0KX0sdC5wcm90b3R5cGUubG9hZEFuZENvbXBpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxvPWlbMF0sYT1pWzFdO3JldHVybiB2b2lkIDA9PT1hJiYoYT0iZGVmYXVsdCIpLG4oImNybmQiKShvKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W2FdfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4geWUodCxvLGEpfSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5fY29tcGlsZXIuY29tcGlsZU1vZHVsZUFzeW5jKHQpfSl9LHQucHJvdG90eXBlLmxvYWRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChyLmMpKHQuc3BsaXQoIiMiKSwyKSxpPWVbMF0sbz1lWzFdLGE9Ik5nRmFjdG9yeSI7cmV0dXJuIHZvaWQgMD09PW8mJihvPSJkZWZhdWx0IixhPSIiKSxuKCJjcm5kIikodGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoUHJlZml4K2krdGhpcy5fY29uZmlnLmZhY3RvcnlQYXRoU3VmZml4KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0W28rYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB5ZSh0LGksbyl9KX0sdH0oKTtmdW5jdGlvbiB5ZSh0LGUsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCAnIituKyInIGluICciK2UrIiciKTtyZXR1cm4gdH12YXIgdmU9ZnVuY3Rpb24oKXt9LGdlPWZ1bmN0aW9uKCl7fSxiZT1mdW5jdGlvbigpe30sX2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9kZWJ1Z0NvbnRleHQ9bix0aGlzLm5hdGl2ZU5vZGU9dCxlJiZlIGluc3RhbmNlb2Ygd2U/ZS5hZGRDaGlsZCh0aGlzKTp0aGlzLnBhcmVudD1udWxsLHRoaXMubGlzdGVuZXJzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5pbmplY3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVmZXJlbmNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWJ1Z0NvbnRleHQucmVmZXJlbmNlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5wcm92aWRlclRva2Vuc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLHdlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gaS5wcm9wZXJ0aWVzPXt9LGkuYXR0cmlidXRlcz17fSxpLmNsYXNzZXM9e30saS5zdHlsZXM9e30saS5jaGlsZE5vZGVzPVtdLGkubmF0aXZlRWxlbWVudD1lLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYWRkQ2hpbGQ9ZnVuY3Rpb24odCl7dCYmKHRoaXMuY2hpbGROb2Rlcy5wdXNoKHQpLHQucGFyZW50PXRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PWUmJih0LnBhcmVudD1udWxsLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoZSwxKSl9LGUucHJvdG90eXBlLmluc2VydENoaWxkcmVuQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXMsbz10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMSE9PW8mJigobj10aGlzLmNoaWxkTm9kZXMpLnNwbGljZS5hcHBseShuLE9iamVjdChyLmQpKFtvKzEsMF0sZSkpLGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCksdC5wYXJlbnQ9aX0pKX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCk7LTE9PT1uP3RoaXMuYWRkQ2hpbGQoZSk6KGUucGFyZW50JiZlLnBhcmVudC5yZW1vdmVDaGlsZChlKSxlLnBhcmVudD10aGlzLHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UobiwwLGUpKX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnlBbGwodClbMF18fG51bGx9LGUucHJvdG90eXBlLnF1ZXJ5QWxsPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiB4ZSh0aGlzLHQsZSksZX0sZS5wcm90b3R5cGUucXVlcnlBbGxOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gU2UodGhpcyx0LGUpLGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS50cmlnZ2VyRXZlbnRIYW5kbGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuKXtuLm5hbWU9PXQmJm4uY2FsbGJhY2soZSl9KX0sZX0oX2UpO2Z1bmN0aW9uIHhlKHQsZSxuKXt0LmNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IGluc3RhbmNlb2Ygd2UmJihlKHQpJiZuLnB1c2godCkseGUodCxlLG4pKX0pfWZ1bmN0aW9uIFNlKHQsZSxuKXt0IGluc3RhbmNlb2Ygd2UmJnQuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCkmJm4ucHVzaCh0KSx0IGluc3RhbmNlb2Ygd2UmJlNlKHQsZSxuKX0pfXZhciBFZT1uZXcgTWFwO2Z1bmN0aW9uIENlKHQpe3JldHVybiBFZS5nZXQodCl8fG51bGx9ZnVuY3Rpb24gT2UodCl7RWUuc2V0KHQubmF0aXZlTm9kZSx0KX1mdW5jdGlvbiBUZSh0LGUpe3ZhciBuPWplKHQpLHI9amUoZSk7cmV0dXJuIG4mJnI/ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj10W18oKV0oKSxpPWVbXygpXSgpOzspe3ZhciBvPXIubmV4dCgpLGE9aS5uZXh0KCk7aWYoby5kb25lJiZhLmRvbmUpcmV0dXJuITA7aWYoby5kb25lfHxhLmRvbmUpcmV0dXJuITE7aWYoIW4oby52YWx1ZSxhLnZhbHVlKSlyZXR1cm4hMX19KHQsZSxUZSk6IShufHwhdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8cnx8IWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpfHx4KHQsZSl9dmFyIGtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLndyYXBwZWQ9dH1yZXR1cm4gdC53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdC51bndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaXNXcmFwcGVkKGUpP2Uud3JhcHBlZDplfSx0LmlzV3JhcHBlZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9LHR9KCksQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnByZXZpb3VzVmFsdWU9dCx0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMuZmlyc3RDaGFuZ2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuaXNGaXJzdENoYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfSx0fSgpO2Z1bmN0aW9uIGplKHQpe3JldHVybiEhSWUodCkmJihBcnJheS5pc0FycmF5KHQpfHwhKHQgaW5zdGFuY2VvZiBNYXApJiZfKClpbiB0KX1mdW5jdGlvbiBJZSh0KXtyZXR1cm4gbnVsbCE9PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdHx8Im9iamVjdCI9PXR5cGVvZiB0KX12YXIgTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gamUodCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE5lKHQpfSx0fSgpLFBlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9LE5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49dHx8UGV9cmV0dXJuIHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2l0SGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE9wZXJhdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5faXRIZWFkLG49dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxpPW51bGw7ZXx8bjspe3ZhciBvPSFufHxlJiZlLmN1cnJlbnRJbmRleDxMZShuLHIsaSk/ZTpuLGE9TGUobyxyLGkpLHM9by5jdXJyZW50SW5kZXg7aWYobz09PW4pci0tLG49bi5fbmV4dFJlbW92ZWQ7ZWxzZSBpZihlPWUuX25leHQsbnVsbD09by5wcmV2aW91c0luZGV4KXIrKztlbHNle2l8fChpPVtdKTt2YXIgdT1hLXIsYz1zLXI7aWYodSE9Yyl7Zm9yKHZhciBsPTA7bDx1O2wrKyl7dmFyIGY9bDxpLmxlbmd0aD9pW2xdOmlbbF09MCxoPWYrbDtjPD1oJiZoPHUmJihpW2xdPWYrMSl9aVtvLnByZXZpb3VzSW5kZXhdPWMtdX19YSE9PXMmJnQobyxhLHMpfX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c0l0SGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoQWRkZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaE1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0TW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFJlbW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9LHQucHJvdG90eXBlLmRpZmY9ZnVuY3Rpb24odCl7aWYobnVsbD09dCYmKHQ9W10pLCFqZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK1ModCkrIicuIE9ubHkgYXJyYXlzIGFuZCBpdGVyYWJsZXMgYXJlIGFsbG93ZWQiKTtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9yZXNldCgpO3ZhciBuLHIsaSxvPXRoaXMuX2l0SGVhZCxhPSExO2lmKEFycmF5LmlzQXJyYXkodCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO2Zvcih2YXIgcz0wO3M8dGhpcy5sZW5ndGg7cysrKWk9dGhpcy5fdHJhY2tCeUZuKHMscj10W3NdKSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxpKT8oYSYmKG89dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24obyxyLGkscykpLHgoby5pdGVtLHIpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShvLHIpKToobz10aGlzLl9taXNtYXRjaChvLHIsaSxzKSxhPSEwKSxvPW8uX25leHR9ZWxzZSBuPTAsZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSk7ZWxzZSBmb3IodmFyIHI9dFtfKCldKCksaT12b2lkIDA7IShpPXIubmV4dCgpKS5kb25lOyllKGkudmFsdWUpfSh0LGZ1bmN0aW9uKHQpe2k9ZS5fdHJhY2tCeUZuKG4sdCksbnVsbCE9PW8mJngoby50cmFja0J5SWQsaSk/KGEmJihvPWUuX3ZlcmlmeVJlaW5zZXJ0aW9uKG8sdCxpLG4pKSx4KG8uaXRlbSx0KXx8ZS5fYWRkSWRlbnRpdHlDaGFuZ2Uobyx0KSk6KG89ZS5fbWlzbWF0Y2gobyx0LGksbiksYT0hMCksbz1vLl9uZXh0LG4rK30pLHRoaXMubGVuZ3RoPW47cmV0dXJuIHRoaXMuX3RydW5jYXRlKG8pLHRoaXMuY29sbGVjdGlvbj10LHRoaXMuaXNEaXJ0eX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMCxlPXZvaWQgMDtmb3IodD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0PXRoaXMuX21vdmVzSGVhZDtudWxsIT09dDt0PWUpdC5wcmV2aW91c0luZGV4PXQuY3VycmVudEluZGV4LGU9dC5fbmV4dE1vdmVkO3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fSx0LnByb3RvdHlwZS5fbWlzbWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk7cmV0dXJuIG51bGw9PT10P2k9dGhpcy5faXRUYWlsOihpPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChuLHIpKT8oeCh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fbW92ZUFmdGVyKHQsaSxyKSk6bnVsbCE9PSh0PW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9yZWluc2VydEFmdGVyKHQsaSxyKSk6dD10aGlzLl9hZGRBZnRlcihuZXcgUmUoZSxuKSxpLHIpLHR9LHQucHJvdG90eXBlLl92ZXJpZnlSZWluc2VydGlvbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChuLG51bGwpO3JldHVybiBudWxsIT09aT90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoaSx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9LHQucHJvdG90eXBlLl90cnVuY2F0ZT1mdW5jdGlvbih0KXtmb3IoO251bGwhPT10Oyl7dmFyIGU9dC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayh0KSksdD1lfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1RhaWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfSx0LnByb3RvdHlwZS5fcmVpbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgcj10Ll9wcmV2UmVtb3ZlZCxpPXQuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09cj90aGlzLl9yZW1vdmFsc0hlYWQ9aTpyLl9uZXh0UmVtb3ZlZD1pLG51bGw9PT1pP3RoaXMuX3JlbW92YWxzVGFpbD1yOmkuX3ByZXZSZW1vdmVkPXIsdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fbW92ZUFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxuKSx0aGlzLl9hZGRUb01vdmVzKHQsbiksdH0sdC5wcm90b3R5cGUuX2FkZEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD10OnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHR9LHQucHJvdG90eXBlLl9pbnNlcnRBZnRlcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bnVsbD09PWU/dGhpcy5faXRIZWFkOmUuX25leHQ7cmV0dXJuIHQuX25leHQ9cix0Ll9wcmV2PWUsbnVsbD09PXI/dGhpcy5faXRUYWlsPXQ6ci5fcHJldj10LG51bGw9PT1lP3RoaXMuX2l0SGVhZD10OmUuX25leHQ9dCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IEZlKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1uLHR9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX0sdC5wcm90b3R5cGUuX3VubGluaz1mdW5jdGlvbih0KXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7dmFyIGU9dC5fcHJldixuPXQuX25leHQ7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2l0SGVhZD1uOmUuX25leHQ9bixudWxsPT09bj90aGlzLl9pdFRhaWw9ZTpuLl9wcmV2PWUsdH0sdC5wcm90b3R5cGUuX2FkZFRvTW92ZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wcmV2aW91c0luZGV4PT09ZT90Oih0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10LHQpfSx0LnByb3RvdHlwZS5fYWRkVG9SZW1vdmFscz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgRmUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9bnVsbCx0Ll9uZXh0UmVtb3ZlZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9dCx0Ll9wcmV2UmVtb3ZlZD1udWxsKToodC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPXQpLHR9LHQucHJvdG90eXBlLl9hZGRJZGVudGl0eUNoYW5nZT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lml0ZW09ZSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9dCx0fSx0fSgpLFJlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9LERlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPXQsdC5fbmV4dER1cD1udWxsLHQuX3ByZXZEdXA9bnVsbCk6KHRoaXMuX3RhaWwuX25leHREdXA9dCx0Ll9wcmV2RHVwPXRoaXMuX3RhaWwsdC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9dCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcihuPXRoaXMuX2hlYWQ7bnVsbCE9PW47bj1uLl9uZXh0RHVwKWlmKChudWxsPT09ZXx8ZTw9bi5jdXJyZW50SW5kZXgpJiZ4KG4udHJhY2tCeUlkLHQpKXJldHVybiBuO3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5fcHJldkR1cCxuPXQuX25leHREdXA7cmV0dXJuIG51bGw9PT1lP3RoaXMuX2hlYWQ9bjplLl9uZXh0RHVwPW4sbnVsbD09PW4/dGhpcy5fdGFpbD1lOm4uX3ByZXZEdXA9ZSxudWxsPT09dGhpcy5faGVhZH0sdH0oKSxGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm1hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQsbj10aGlzLm1hcC5nZXQoZSk7bnx8KG49bmV3IERlLHRoaXMubWFwLnNldChlLG4pKSxuLmFkZCh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBuP24uZ2V0KHQsZSk6bnVsbH0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0VtcHR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXAuY2xlYXIoKX0sdH0oKTtmdW5jdGlvbiBMZSh0LGUsbil7dmFyIHI9dC5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1yKXJldHVybiByO3ZhciBpPTA7cmV0dXJuIG4mJnI8bi5sZW5ndGgmJihpPW5bcl0pLHIrZStpfXZhciBWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWFwfHxJZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6ZX0sdH0oKSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBIZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNEaXJ0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX2NoYW5nZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZvckVhY2hJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0KXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hQcmV2aW91c0l0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hDaGFuZ2VkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fEllKHQpKSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHRyeWluZyB0byBkaWZmICciK1ModCkrIicuIE9ubHkgbWFwcyBhbmQgb2JqZWN0cyBhcmUgYWxsb3dlZCIpfWVsc2UgdD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG49dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCxmdW5jdGlvbih0LHIpe2lmKG4mJm4ua2V5PT09cillLl9tYXliZUFkZFRvQ2hhbmdlcyhuLHQpLGUuX2FwcGVuZEFmdGVyPW4sbj1uLl9uZXh0O2Vsc2V7dmFyIGk9ZS5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocix0KTtuPWUuX2luc2VydEJlZm9yZU9yQXBwZW5kKG4saSl9fSksbil7bi5fcHJldiYmKG4uX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPW47Zm9yKHZhciByPW47bnVsbCE9PXI7cj1yLl9uZXh0UmVtb3ZlZClyPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoci5rZXkpLHIuX25leHRSZW1vdmVkPXIuX25leHQsci5wcmV2aW91c1ZhbHVlPXIuY3VycmVudFZhbHVlLHIuY3VycmVudFZhbHVlPW51bGwsci5fcHJldj1udWxsLHIuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9LHQucHJvdG90eXBlLl9pbnNlcnRCZWZvcmVPckFwcGVuZD1mdW5jdGlvbih0LGUpe2lmKHQpe3ZhciBuPXQuX3ByZXY7cmV0dXJuIGUuX25leHQ9dCxlLl9wcmV2PW4sdC5fcHJldj1lLG4mJihuLl9uZXh0PWUpLHQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1lKSx0aGlzLl9hcHBlbmRBZnRlcj10LHR9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1lLGUuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9ZSx0aGlzLl9hcHBlbmRBZnRlcj1lLG51bGx9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3JlY29yZHMuaGFzKHQpKXt2YXIgbj10aGlzLl9yZWNvcmRzLmdldCh0KTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhuLGUpO3ZhciByPW4uX3ByZXYsaT1uLl9uZXh0O3JldHVybiByJiYoci5fbmV4dD1pKSxpJiYoaS5fcHJldj1yKSxuLl9uZXh0PW51bGwsbi5fcHJldj1udWxsLG59dmFyIG89bmV3IEJlKHQpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldCh0LG8pLG8uY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9BZGRpdGlvbnMobyksb30sdC5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0RpcnR5KXt2YXIgdD12b2lkIDA7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLHQ9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT10O3Q9dC5fbmV4dCl0Ll9uZXh0UHJldmlvdXM9dC5fbmV4dDtmb3IodD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09dDt0PXQuX25leHRDaGFuZ2VkKXQucHJldmlvdXNWYWx1ZT10LmN1cnJlbnRWYWx1ZTtmb3IodD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPXQ7dD10Ll9uZXh0QWRkZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fSx0LnByb3RvdHlwZS5fbWF5YmVBZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCxlKXt4KGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2FkZFRvQWRkaXRpb25zPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD10Oih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9dCx0aGlzLl9hZGRpdGlvbnNUYWlsPXQpfSx0LnByb3RvdHlwZS5fYWRkVG9DaGFuZ2VzPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD10Oih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9dCx0aGlzLl9jaGFuZ2VzVGFpbD10KX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24odCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0sbil9KX0sdH0oKSxCZT1mdW5jdGlvbih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9LFVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmZhY3Rvcmllcz10fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbihlLG4pe2lmKG51bGwhPW4pe3ZhciByPW4uZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IHQoZSl9LHQuZXh0ZW5kPWZ1bmN0aW9uKGUpe3JldHVybntwcm92aWRlOnQsdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBleHRlbmQgSXRlcmFibGVEaWZmZXJzIHdpdGhvdXQgYSBwYXJlbnQgaW5qZWN0b3IiKTtyZXR1cm4gdC5jcmVhdGUoZSxuKX0sZGVwczpbW3QsbmV3IEEsbmV3IFRdXX19LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYobnVsbCE9bilyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIicgb2YgdHlwZSAnIisoKGU9dCkubmFtZXx8dHlwZW9mIGUpKyInIil9LHQubmdJbmplY3RhYmxlRGVmPWMoe3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoW25ldyBNZV0pfX0pLHR9KCksSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KHIpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBLZXlWYWx1ZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgQSxuZXcgVF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZhY3Rvcmllcy5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN1cHBvcnRzKHQpfSk7aWYoZSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK3QrIiciKX0sdH0oKSxxZT1bbmV3IFZlXSxHZT1uZXcgVWUoW25ldyBNZV0pLFdlPW5ldyBIZShxZSksUWU9bmUobnVsbCwiY29yZSIsW3twcm92aWRlOnl0LHVzZVZhbHVlOiJ1bmtub3duIn0se3Byb3ZpZGU6aWUsZGVwczpbTl19LHtwcm92aWRlOld0LGRlcHM6W119LHtwcm92aWRlOmd0LGRlcHM6W119XSksWWU9bmV3IGwoIkxvY2FsZUlkIik7ZnVuY3Rpb24gS2UoKXtyZXR1cm4gR2V9ZnVuY3Rpb24gWmUoKXtyZXR1cm4gV2V9ZnVuY3Rpb24gWGUodCl7cmV0dXJuIHR8fCJlbi1VUyJ9dmFyICRlPWZ1bmN0aW9uKHQpe30sSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuZGVmYXVsdERvYz10LHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmJvZHksbnVsbD09dGhpcy5pbmVydEJvZHlFbGVtZW50KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaHRtbCIpO3RoaXMuaW5lcnREb2N1bWVudC5hcHBlbmRDaGlsZChlKSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxlLmFwcGVuZENoaWxkKHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9dGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48ZyBvbmxvYWQ9InRoaXMucGFyZW50Tm9kZS5yZW1vdmUoKSI+PC9nPjwvc3ZnPicsIXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yfHx0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik/KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9Jzxzdmc+PHA+PHN0eWxlPjxpbWcgc3JjPSI8L3N0eWxlPjxpbWcgc3JjPXggb25lcnJvcj1hbGVydCgxKS8vIj4nLHRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3RvciYmdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoInN2ZyBpbWciKSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuISF3aW5kb3cuRE9NUGFyc2VyfWNhdGNoKHQpe3JldHVybiExfX0oKT90aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfRE9NUGFyc2VyOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50KTp0aGlzLmdldEluZXJ0Qm9keUVsZW1lbnQ9dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X1hIUn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9YSFI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt0PWVuY29kZVVSSSh0KX1jYXRjaCh0KXtyZXR1cm4gbnVsbH12YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZS5yZXNwb25zZVR5cGU9ImRvY3VtZW50IixlLm9wZW4oIkdFVCIsImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsIit0LCExKSxlLnNlbmQobnVsbCk7dmFyIG49ZS5yZXNwb25zZS5ib2R5O3JldHVybiBuLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCksbn0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI9ZnVuY3Rpb24odCl7dD0iPGJvZHk+PHJlbW92ZT48L3JlbW92ZT4iK3QrIjwvYm9keT4iO3RyeXt2YXIgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBlLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCksZX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19LHQucHJvdG90eXBlLmdldEluZXJ0Qm9keUVsZW1lbnRfSW5lcnREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4iY29udGVudCJpbiBlPyhlLmlubmVySFRNTD10LGUpOih0aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPXQsdGhpcy5kZWZhdWx0RG9jLmRvY3VtZW50TW9kZSYmdGhpcy5zdHJpcEN1c3RvbU5zQXR0cnModGhpcy5pbmVydEJvZHlFbGVtZW50KSx0aGlzLmluZXJ0Qm9keUVsZW1lbnQpfSx0LnByb3RvdHlwZS5zdHJpcEN1c3RvbU5zQXR0cnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXR0cmlidXRlcyxuPWUubGVuZ3RoLTE7MDxuO24tLSl7dmFyIHI9ZS5pdGVtKG4pLm5hbWU7InhtbG5zOm5zMSIhPT1yJiYwIT09ci5pbmRleE9mKCJuczE6Iil8fHQucmVtb3ZlQXR0cmlidXRlKHIpfWZvcih2YXIgaT10LmZpcnN0Q2hpbGQ7aTspaS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyhpKSxpPWkubmV4dFNpYmxpbmd9LHR9KCksdG49L14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteJjovPyNdKig/OlsvPyNdfCQpKS9naSxlbj0vXmRhdGE6KD86aW1hZ2VcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1wvKD86bXAzfG9nYXxvZ2d8b3B1cykpO2Jhc2U2NCxbYS16MC05K1wvXSs9KiQvaTtmdW5jdGlvbiBubih0KXtyZXR1cm4odD1TdHJpbmcodCkpLm1hdGNoKHRuKXx8dC5tYXRjaChlbik/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBVUkwgdmFsdWUgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIiksInVuc2FmZToiK3QpfWZ1bmN0aW9uIHJuKHQpe3ZhciBlLG4saT17fTt0cnl7Zm9yKHZhciBvPU9iamVjdChyLmUpKHQuc3BsaXQoIiwiKSksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpaVthLnZhbHVlXT0hMH1jYXRjaCh0KXtlPXtlcnJvcjp0fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGUpdGhyb3cgZS5lcnJvcn19cmV0dXJuIGl9ZnVuY3Rpb24gb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG4saSxvPXt9O3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuZSkodCkscz1hLm5leHQoKTshcy5kb25lO3M9YS5uZXh0KCkpe3ZhciB1PXMudmFsdWU7Zm9yKHZhciBjIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShjKSYmKG9bY109ITApfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIG99dmFyIGFuLHNuPXJuKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksdW49cm4oImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjbj1ybigicnAscnQiKSxsbj1vbihjbix1biksZm49b24oc24sb24odW4scm4oImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLG9uKGNuLHJuKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksbG4pLGhuPXJuKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkbj1ybigic3Jjc2V0IikscG49b24oaG4sZG4scm4oImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHN0YXJ0LHN1bW1hcnksdGFiaW5kZXgsdGFyZ2V0LHRpdGxlLHRyYW5zbGF0ZSx0eXBlLHVzZW1hcCx2YWxpZ24sdmFsdWUsdnNwYWNlLHdpZHRoIikpLG1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2FuaXRpemVkU29tZXRoaW5nPSExLHRoaXMuYnVmPVtdfXJldHVybiB0LnByb3RvdHlwZS5zYW5pdGl6ZUNoaWxkcmVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZpcnN0Q2hpbGQ7ZTspaWYoZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP3RoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTt2YXIgbj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKG4pe2U9bjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9LHQucHJvdG90eXBlLnN0YXJ0RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoZm4uaGFzT3duUHJvcGVydHkoZSkpe3RoaXMuYnVmLnB1c2goIjwiKSx0aGlzLmJ1Zi5wdXNoKGUpO2Zvcih2YXIgbixyPXQuYXR0cmlidXRlcyxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXIuaXRlbShpKSxhPW8ubmFtZSxzPWEudG9Mb3dlckNhc2UoKTtpZihwbi5oYXNPd25Qcm9wZXJ0eShzKSl7dmFyIHU9by52YWx1ZTtobltzXSYmKHU9bm4odSkpLGRuW3NdJiYobj11LHU9KG49U3RyaW5nKG4pKS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbm4odC50cmltKCkpfSkuam9pbigiLCAiKSksdGhpcy5idWYucHVzaCgiICIsYSwnPSInLGduKHUpLCciJyl9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH10aGlzLmJ1Zi5wdXNoKCI+Iil9ZWxzZSB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMH0sdC5wcm90b3R5cGUuZW5kRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Zm4uaGFzT3duUHJvcGVydHkoZSkmJiFzbi5oYXNPd25Qcm9wZXJ0eShlKSYmKHRoaXMuYnVmLnB1c2goIjwvIiksdGhpcy5idWYucHVzaChlKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfSx0LnByb3RvdHlwZS5jaGFycz1mdW5jdGlvbih0KXt0aGlzLmJ1Zi5wdXNoKGduKHQpKX0sdC5wcm90b3R5cGUuY2hlY2tDbG9iYmVyZWRFbGVtZW50PWZ1bmN0aW9uKHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogIit0Lm91dGVySFRNTCk7cmV0dXJuIGV9LHR9KCkseW49L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGXS9nLHZuPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBnbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSh5bixmdW5jdGlvbih0KXtyZXR1cm4iJiMiKygxMDI0Kih0LmNoYXJDb2RlQXQoMCktNTUyOTYpKyh0LmNoYXJDb2RlQXQoMSktNTYzMjApKzY1NTM2KSsiOyJ9KS5yZXBsYWNlKHZuLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrdC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWZ1bmN0aW9uIGJuKHQsZSl7dmFyIG49bnVsbDt0cnl7YW49YW58fG5ldyBKZSh0KTt2YXIgcj1lP1N0cmluZyhlKToiIjtuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocik7dmFyIGk9NSxvPXI7ZG97aWYoMD09PWkpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2ktLSxyPW8sbz1uLmlubmVySFRNTCxuPWFuLmdldEluZXJ0Qm9keUVsZW1lbnQocil9d2hpbGUociE9PW8pO3ZhciBhPW5ldyBtbixzPWEuc2FuaXRpemVDaGlsZHJlbihfbihuKXx8bik7cmV0dXJuIHRlKCkmJmEuc2FuaXRpemVkU29tZXRoaW5nJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgSFRNTCBzdHJpcHBlZCBzb21lIGNvbnRlbnQgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpLiIpLHN9ZmluYWxseXtpZihuKWZvcih2YXIgdT1fbihuKXx8bjt1LmZpcnN0Q2hpbGQ7KXUucmVtb3ZlQ2hpbGQodS5maXJzdENoaWxkKX19ZnVuY3Rpb24gX24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PXQubm9kZU5hbWV9KHQpP3QuY29udGVudDpudWxsfXZhciB3bj1uZXcgUmVnRXhwKCJeKFstLC5cIiclXyEjIGEtekEtWjAtOV0rfCg/Oig/Om1hdHJpeHx0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXd8cGVyc3BlY3RpdmUpKD86WHxZfDNkKT98KD86cmdifGhzbClhP3woPzpyZXBlYXRpbmctKT8oPzpsaW5lYXJ8cmFkaWFsKS1ncmFkaWVudHwoPzpjYWxjfGF0dHIpKVxcKFstMC05LiUsICNhLXpBLVpdK1xcKSkkIiwiZyIpLHhuPS9edXJsXCgoW14pXSspXCkkLztmdW5jdGlvbiBTbih0KXtpZighKHQ9U3RyaW5nKHQpLnRyaW0oKSkpcmV0dXJuIiI7dmFyIGU9dC5tYXRjaCh4bik7cmV0dXJuIGUmJm5uKGVbMV0pPT09ZVsxXXx8dC5tYXRjaCh3bikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMCxuPSEwLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dC5jaGFyQXQocik7IiciPT09aSYmbj9lPSFlOiciJz09PWkmJmUmJihuPSFuKX1yZXR1cm4gZSYmbn0odCk/dDoodGUoKSYmY29uc29sZS53YXJuKCJXQVJOSU5HOiBzYW5pdGl6aW5nIHVuc2FmZSBzdHlsZSB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksInVuc2FmZSIpfXZhciBFbj1mdW5jdGlvbih0KXtyZXR1cm4gdFt0Lk5PTkU9MF09Ik5PTkUiLHRbdC5IVE1MPTFdPSJIVE1MIix0W3QuU1RZTEU9Ml09IlNUWUxFIix0W3QuU0NSSVBUPTNdPSJTQ1JJUFQiLHRbdC5VUkw9NF09IlVSTCIsdFt0LlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIix0fSh7fSksQ249ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIE9uKHQsZSxuKXt2YXIgcj10LnN0YXRlLGk9MTc5MiZyO3JldHVybiBpPT09ZT8odC5zdGF0ZT0tMTc5MyZyfG4sdC5pbml0SW5kZXg9LTEsITApOmk9PT1ufWZ1bmN0aW9uIFRuKHQsZSxuKXtyZXR1cm4oMTc5MiZ0LnN0YXRlKT09PWUmJnQuaW5pdEluZGV4PD1uJiYodC5pbml0SW5kZXg9bisxLCEwKX1mdW5jdGlvbiBrbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIEFuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gam4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBJbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIE1uKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19dmFyIFBuPXtzZXRDdXJyZW50Tm9kZTp2b2lkIDAsY3JlYXRlUm9vdFZpZXc6dm9pZCAwLGNyZWF0ZUVtYmVkZGVkVmlldzp2b2lkIDAsY3JlYXRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY3JlYXRlTmdNb2R1bGVSZWY6dm9pZCAwLG92ZXJyaWRlUHJvdmlkZXI6dm9pZCAwLG92ZXJyaWRlQ29tcG9uZW50Vmlldzp2b2lkIDAsY2xlYXJPdmVycmlkZXM6dm9pZCAwLGNoZWNrQW5kVXBkYXRlVmlldzp2b2lkIDAsY2hlY2tOb0NoYW5nZXNWaWV3OnZvaWQgMCxkZXN0cm95Vmlldzp2b2lkIDAscmVzb2x2ZURlcDp2b2lkIDAsY3JlYXRlRGVidWdDb250ZXh0OnZvaWQgMCxoYW5kbGVFdmVudDp2b2lkIDAsdXBkYXRlRGlyZWN0aXZlczp2b2lkIDAsdXBkYXRlUmVuZGVyZXI6dm9pZCAwLGRpcnR5UGFyZW50UXVlcmllczp2b2lkIDB9O2Z1bmN0aW9uIE5uKHQsZSxuLHIpe3ZhciBpPSJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yOiBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkLiBQcmV2aW91cyB2YWx1ZTogJyIrZSsiJy4gQ3VycmVudCB2YWx1ZTogJyIrbisiJy4iO3JldHVybiByJiYoaSs9IiBJdCBzZWVtcyBsaWtlIHRoZSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBhbmQgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXJ0eSBjaGVja2VkLiBIYXMgaXQgYmVlbiBjcmVhdGVkIGluIGEgY2hhbmdlIGRldGVjdGlvbiBob29rID8iKSxmdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBFcnJvcih0KTtyZXR1cm4gUm4obixlKSxufShpLHQpfWZ1bmN0aW9uIFJuKHQsZSl7dFt0dF09ZSx0W250XT1lLmxvZ0Vycm9yLmJpbmQoZSl9ZnVuY3Rpb24gRG4odCl7cmV0dXJuIG5ldyBFcnJvcigiVmlld0Rlc3Ryb3llZEVycm9yOiBBdHRlbXB0IHRvIHVzZSBhIGRlc3Ryb3llZCB2aWV3OiAiK3QpfXZhciBGbj1mdW5jdGlvbigpe30sTG49bmV3IE1hcDtmdW5jdGlvbiBWbih0KXt2YXIgZT1Mbi5nZXQodCk7cmV0dXJuIGV8fChlPVModCkrIl8iK0xuLnNpemUsTG4uc2V0KHQsZSkpLGV9ZnVuY3Rpb24gem4odCxlLG4scil7aWYoa2UuaXNXcmFwcGVkKHIpKXtyPWtlLnVud3JhcChyKTt2YXIgaT10LmRlZi5ub2Rlc1tlXS5iaW5kaW5nSW5kZXgrbixvPWtlLnVud3JhcCh0Lm9sZFZhbHVlc1tpXSk7dC5vbGRWYWx1ZXNbaV09bmV3IGtlKG8pfXJldHVybiByfXZhciBCbj0iJCR1bmRlZmluZWQiLFVuPSIkJGVtcHR5IjtmdW5jdGlvbiBIbih0KXtyZXR1cm57aWQ6Qm4sc3R5bGVzOnQuc3R5bGVzLGVuY2Fwc3VsYXRpb246dC5lbmNhcHN1bGF0aW9uLGRhdGE6dC5kYXRhfX12YXIgcW49MDtmdW5jdGlvbiBHbih0LGUsbixyKXtyZXR1cm4hKCEoMiZ0LnN0YXRlKSYmeCh0Lm9sZFZhbHVlc1tlLmJpbmRpbmdJbmRleCtuXSxyKSl9ZnVuY3Rpb24gV24odCxlLG4scil7cmV0dXJuISFHbih0LGUsbixyKSYmKHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dPXIsITApfWZ1bmN0aW9uIFFuKHQsZSxuLHIpe3ZhciBpPXQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dO2lmKDEmdC5zdGF0ZXx8IVRlKGkscikpe3ZhciBvPWUuYmluZGluZ3Nbbl0ubmFtZTt0aHJvdyBObihQbi5jcmVhdGVEZWJ1Z0NvbnRleHQodCxlLm5vZGVJbmRleCksbysiOiAiK2ksbysiOiAiK3IsMCE9KDEmdC5zdGF0ZSkpfX1mdW5jdGlvbiBZbih0KXtmb3IodmFyIGU9dDtlOykyJmUuZGVmLmZsYWdzJiYoZS5zdGF0ZXw9OCksZT1lLnZpZXdDb250YWluZXJQYXJlbnR8fGUucGFyZW50fWZ1bmN0aW9uIEtuKHQsZSl7Zm9yKHZhciBuPXQ7biYmbiE9PWU7KW4uc3RhdGV8PTY0LG49bi52aWV3Q29udGFpbmVyUGFyZW50fHxuLnBhcmVudH1mdW5jdGlvbiBabih0LGUsbixyKXt0cnl7cmV0dXJuIFluKDMzNTU0NDMyJnQuZGVmLm5vZGVzW2VdLmZsYWdzP0FuKHQsZSkuY29tcG9uZW50Vmlldzp0KSxQbi5oYW5kbGVFdmVudCh0LGUsbixyKX1jYXRjaChlKXt0LnJvb3QuZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGUpfX1mdW5jdGlvbiBYbih0KXtyZXR1cm4gdC5wYXJlbnQ/QW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLm5vZGVJbmRleCk6bnVsbH1mdW5jdGlvbiAkbih0KXtyZXR1cm4gdC5wYXJlbnQ/dC5wYXJlbnROb2RlRGVmLnBhcmVudDpudWxsfWZ1bmN0aW9uIEpuKHQsZSl7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIEFuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAyOnJldHVybiBrbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0fX1mdW5jdGlvbiB0cih0KXtyZXR1cm4hIXQucGFyZW50JiYhISgzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIGVyKHQpe3JldHVybiEoIXQucGFyZW50fHwzMjc2OCZ0LnBhcmVudE5vZGVEZWYuZmxhZ3MpfWZ1bmN0aW9uIG5yKHQpe3JldHVybiAxPDx0JTMyfWZ1bmN0aW9uIHJyKHQpe3ZhciBlPXt9LG49MCxpPXt9O3JldHVybiB0JiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG89T2JqZWN0KHIuYykodCwyKSxhPW9bMF0scz1vWzFdOyJudW1iZXIiPT10eXBlb2YgYT8oZVthXT1zLG58PW5yKGEpKTppW2FdPXN9KSx7bWF0Y2hlZFF1ZXJpZXM6ZSxyZWZlcmVuY2VzOmksbWF0Y2hlZFF1ZXJ5SWRzOm59fWZ1bmN0aW9uIGlyKHQsZSl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3ZhciBuLGksbztyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT8oaT0obz1PYmplY3Qoci5jKSh0LDIpKVswXSxuPW9bMV0pOihpPTAsbj10KSxuJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2YgbikmJmUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGose3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkse2ZsYWdzOmksdG9rZW46bix0b2tlbktleTpWbihuKX19KX1mdW5jdGlvbiBvcih0LGUsbil7dmFyIHI9bi5yZW5kZXJQYXJlbnQ7cmV0dXJuIHI/MD09KDEmci5mbGFncyl8fDA9PSgzMzU1NDQzMiZyLmZsYWdzKXx8ci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZSYmci5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZS5lbmNhcHN1bGF0aW9uPT09WC5OYXRpdmU/QW4odCxuLnJlbmRlclBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ6dm9pZCAwOmV9dmFyIGFyPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHNyKHQpe3ZhciBlPWFyLmdldCh0KTtyZXR1cm4gZXx8KChlPXQoZnVuY3Rpb24oKXtyZXR1cm4gRm59KSkuZmFjdG9yeT10LGFyLnNldCh0LGUpKSxlfWZ1bmN0aW9uIHVyKHQsZSxuLHIsaSl7Mz09PWUmJihuPXQucmVuZGVyZXIucGFyZW50Tm9kZShKbih0LHQuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSkpKSxjcih0LGUsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxuLHIsaSl9ZnVuY3Rpb24gY3IodCxlLG4scixpLG8sYSl7Zm9yKHZhciBzPW47czw9cjtzKyspe3ZhciB1PXQuZGVmLm5vZGVzW3NdOzExJnUuZmxhZ3MmJmZyKHQsdSxlLGksbyxhKSxzKz11LmNoaWxkQ291bnR9fWZ1bmN0aW9uIGxyKHQsZSxuLHIsaSxvKXtmb3IodmFyIGE9dDthJiYhdHIoYSk7KWE9YS5wYXJlbnQ7Zm9yKHZhciBzPWEucGFyZW50LHU9JG4oYSksYz11Lm5vZGVJbmRleCt1LmNoaWxkQ291bnQsbD11Lm5vZGVJbmRleCsxO2w8PWM7bCsrKXt2YXIgZj1zLmRlZi5ub2Rlc1tsXTtmLm5nQ29udGVudEluZGV4PT09ZSYmZnIocyxmLG4scixpLG8pLGwrPWYuY2hpbGRDb3VudH1pZighcy5wYXJlbnQpe3ZhciBoPXQucm9vdC5wcm9qZWN0YWJsZU5vZGVzW2VdO2lmKGgpZm9yKGw9MDtsPGgubGVuZ3RoO2wrKylocih0LGhbbF0sbixyLGksbyl9fWZ1bmN0aW9uIGZyKHQsZSxuLHIsaSxvKXtpZig4JmUuZmxhZ3MpbHIodCxlLm5nQ29udGVudC5pbmRleCxuLHIsaSxvKTtlbHNle3ZhciBhPUpuKHQsZSk7aWYoMz09PW4mJjMzNTU0NDMyJmUuZmxhZ3MmJjQ4JmUuYmluZGluZ0ZsYWdzPygxNiZlLmJpbmRpbmdGbGFncyYmaHIodCxhLG4scixpLG8pLDMyJmUuYmluZGluZ0ZsYWdzJiZocihBbih0LGUubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEsbixyLGksbykpOmhyKHQsYSxuLHIsaSxvKSwxNjc3NzIxNiZlLmZsYWdzKWZvcih2YXIgcz1Bbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLHU9MDt1PHMubGVuZ3RoO3UrKyl1cihzW3VdLG4scixpLG8pOzEmZS5mbGFncyYmIWUuZWxlbWVudC5uYW1lJiZjcih0LG4sZS5ub2RlSW5kZXgrMSxlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQscixpLG8pfX1mdW5jdGlvbiBocih0LGUsbixyLGksbyl7dmFyIGE9dC5yZW5kZXJlcjtzd2l0Y2gobil7Y2FzZSAxOmEuYXBwZW5kQ2hpbGQocixlKTticmVhaztjYXNlIDI6YS5pbnNlcnRCZWZvcmUocixlLGkpO2JyZWFrO2Nhc2UgMzphLnJlbW92ZUNoaWxkKHIsZSk7YnJlYWs7Y2FzZSAwOm8ucHVzaChlKX19dmFyIGRyPS9eOihbXjpdKyk6KC4rKSQvO2Z1bmN0aW9uIHByKHQpe2lmKCI6Ij09PXRbMF0pe3ZhciBlPXQubWF0Y2goZHIpO3JldHVybltlWzFdLGVbMl1dfXJldHVyblsiIix0XX1mdW5jdGlvbiBtcih0KXtmb3IodmFyIGU9MCxuPTA7bjx0Lmxlbmd0aDtuKyspZXw9dFtuXS5mbGFncztyZXR1cm4gZX1mdW5jdGlvbiB5cih0LGUsbixyLGksbyxhLHMsdSxjLGwsZixoLGQscCxtLHksdixnLGIpe3N3aXRjaCh0KXtjYXNlIDE6cmV0dXJuIGUrdnIobikrcjtjYXNlIDI6cmV0dXJuIGUrdnIobikrcit2cihpKStvO2Nhc2UgMzpyZXR1cm4gZSt2cihuKStyK3ZyKGkpK28rdnIoYSkrcztjYXNlIDQ6cmV0dXJuIGUrdnIobikrcit2cihpKStvK3ZyKGEpK3MrdnIodSkrYztjYXNlIDU6cmV0dXJuIGUrdnIobikrcit2cihpKStvK3ZyKGEpK3MrdnIodSkrYyt2cihsKStmO2Nhc2UgNjpyZXR1cm4gZSt2cihuKStyK3ZyKGkpK28rdnIoYSkrcyt2cih1KStjK3ZyKGwpK2YrdnIoaCkrZDtjYXNlIDc6cmV0dXJuIGUrdnIobikrcit2cihpKStvK3ZyKGEpK3MrdnIodSkrYyt2cihsKStmK3ZyKGgpK2QrdnIocCkrbTtjYXNlIDg6cmV0dXJuIGUrdnIobikrcit2cihpKStvK3ZyKGEpK3MrdnIodSkrYyt2cihsKStmK3ZyKGgpK2QrdnIocCkrbSt2cih5KSt2O2Nhc2UgOTpyZXR1cm4gZSt2cihuKStyK3ZyKGkpK28rdnIoYSkrcyt2cih1KStjK3ZyKGwpK2YrdnIoaCkrZCt2cihwKSttK3ZyKHkpK3YrdnIoZykrYjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRoYW4gOSBleHByZXNzaW9ucyIpfX1mdW5jdGlvbiB2cih0KXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCk6IiJ9ZnVuY3Rpb24gZ3IodCxlLG4scixpLG8pe3R8PTE7dmFyIGE9cnIoZSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsZmxhZ3M6dCxjaGVja0luZGV4Oi0xLGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOmEubWF0Y2hlZFF1ZXJpZXMsbWF0Y2hlZFF1ZXJ5SWRzOmEubWF0Y2hlZFF1ZXJ5SWRzLHJlZmVyZW5jZXM6YS5yZWZlcmVuY2VzLG5nQ29udGVudEluZGV4Om4sY2hpbGRDb3VudDpyLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDp7bnM6bnVsbCxuYW1lOm51bGwsYXR0cnM6bnVsbCx0ZW1wbGF0ZTpvP3NyKG8pOm51bGwsY29tcG9uZW50UHJvdmlkZXI6bnVsbCxjb21wb25lbnRWaWV3Om51bGwsY29tcG9uZW50UmVuZGVyZXJUeXBlOm51bGwscHVibGljUHJvdmlkZXJzOm51bGwsYWxsUHJvdmlkZXJzOm51bGwsaGFuZGxlRXZlbnQ6aXx8Rm59LHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGJyKHQsZSxuLGksbyxhLHMsdSxjLGwsZixoKXt2b2lkIDA9PT1zJiYocz1bXSksbHx8KGw9Rm4pO3ZhciBkPXJyKG4pLHA9ZC5tYXRjaGVkUXVlcmllcyxtPWQucmVmZXJlbmNlcyx5PWQubWF0Y2hlZFF1ZXJ5SWRzLHY9bnVsbCxnPW51bGw7YSYmKHY9KE09T2JqZWN0KHIuYykocHIoYSksMikpWzBdLGc9TVsxXSksdT11fHxbXTtmb3IodmFyIGI9bmV3IEFycmF5KHUubGVuZ3RoKSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PU9iamVjdChyLmMpKHVbX10sMykseD13WzBdLFM9d1sxXSxFPXdbMl0sQz1PYmplY3Qoci5jKShwcihTKSwyKSxPPUNbMF0sVD1DWzFdLGs9dm9pZCAwLEE9dm9pZCAwO3N3aXRjaCgxNSZ4KXtjYXNlIDQ6QT1FO2JyZWFrO2Nhc2UgMTpjYXNlIDg6az1FfWJbX109e2ZsYWdzOngsbnM6TyxuYW1lOlQsbm9uTWluaWZpZWROYW1lOlQsc2VjdXJpdHlDb250ZXh0Omssc3VmZml4OkF9fWM9Y3x8W107dmFyIGo9bmV3IEFycmF5KGMubGVuZ3RoKTtmb3IoXz0wO188Yy5sZW5ndGg7XysrKXt2YXIgST1PYmplY3Qoci5jKShjW19dLDIpO2pbX109e3R5cGU6MCx0YXJnZXQ6SVswXSxldmVudE5hbWU6SVsxXSxwcm9wTmFtZTpudWxsfX12YXIgTSxQPShzPXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHIuYykodCwyKSxuPWVbMF0saT1lWzFdLG89T2JqZWN0KHIuYykocHIobiksMik7cmV0dXJuW29bMF0sb1sxXSxpXX0pO3JldHVybiBoPWZ1bmN0aW9uKHQpe2lmKHQmJnQuaWQ9PT1Cbil7dmFyIGU9bnVsbCE9dC5lbmNhcHN1bGF0aW9uJiZ0LmVuY2Fwc3VsYXRpb24hPT1YLk5vbmV8fHQuc3R5bGVzLmxlbmd0aHx8T2JqZWN0LmtleXModC5kYXRhKS5sZW5ndGg7dC5pZD1lPyJjIitxbisrOlVufXJldHVybiB0JiZ0LmlkPT09VW4mJih0PW51bGwpLHR8fG51bGx9KGgpLGYmJihlfD0zMzU1NDQzMikse25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmV8PTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6cCxtYXRjaGVkUXVlcnlJZHM6eSxyZWZlcmVuY2VzOm0sbmdDb250ZW50SW5kZXg6aSxjaGlsZENvdW50Om8sYmluZGluZ3M6YixiaW5kaW5nRmxhZ3M6bXIoYiksb3V0cHV0czpqLGVsZW1lbnQ6e25zOnYsbmFtZTpnLGF0dHJzOlAsdGVtcGxhdGU6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6Znx8bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6aCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpsfHxGbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gX3IodCxlLG4pe3ZhciBpLG89bi5lbGVtZW50LGE9dC5yb290LnNlbGVjdG9yT3JOb2RlLHM9dC5yZW5kZXJlcjtpZih0LnBhcmVudHx8IWEpe2k9by5uYW1lP3MuY3JlYXRlRWxlbWVudChvLm5hbWUsby5ucyk6cy5jcmVhdGVDb21tZW50KCIiKTt2YXIgdT1vcih0LGUsbik7dSYmcy5hcHBlbmRDaGlsZCh1LGkpfWVsc2UgaT1zLnNlbGVjdFJvb3RFbGVtZW50KGEpO2lmKG8uYXR0cnMpZm9yKHZhciBjPTA7YzxvLmF0dHJzLmxlbmd0aDtjKyspe3ZhciBsPU9iamVjdChyLmMpKG8uYXR0cnNbY10sMyk7cy5zZXRBdHRyaWJ1dGUoaSxsWzFdLGxbMl0sbFswXSl9cmV0dXJuIGl9ZnVuY3Rpb24gd3IodCxlLG4scil7Zm9yKHZhciBpPTA7aTxuLm91dHB1dHMubGVuZ3RoO2krKyl7dmFyIG89bi5vdXRwdXRzW2ldLGE9eHIodCxuLm5vZGVJbmRleCwoZj1vLmV2ZW50TmFtZSwobD1vLnRhcmdldCk/bCsiOiIrZjpmKSkscz1vLnRhcmdldCx1PXQ7ImNvbXBvbmVudCI9PT1vLnRhcmdldCYmKHM9bnVsbCx1PWUpO3ZhciBjPXUucmVuZGVyZXIubGlzdGVuKHN8fHIsby5ldmVudE5hbWUsYSk7dC5kaXNwb3NhYmxlc1tuLm91dHB1dEluZGV4K2ldPWN9dmFyIGwsZn1mdW5jdGlvbiB4cih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24gU3IodCxlLG4scil7aWYoIVduKHQsZSxuLHIpKXJldHVybiExO3ZhciBpPWUuYmluZGluZ3Nbbl0sbz1Bbih0LGUubm9kZUluZGV4KSxhPW8ucmVuZGVyRWxlbWVudCxzPWkubmFtZTtzd2l0Y2goMTUmaS5mbGFncyl7Y2FzZSAxOiFmdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9ZS5zZWN1cml0eUNvbnRleHQscz1hP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoYSxvKTpvO3M9bnVsbCE9cz9zLnRvU3RyaW5nKCk6bnVsbDt2YXIgdT10LnJlbmRlcmVyO251bGwhPW8/dS5zZXRBdHRyaWJ1dGUobixpLHMscik6dS5yZW1vdmVBdHRyaWJ1dGUobixpLHIpfSh0LGksYSxpLm5zLHMscik7YnJlYWs7Y2FzZSAyOiFmdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LnJlbmRlcmVyO3I/aS5hZGRDbGFzcyhlLG4pOmkucmVtb3ZlQ2xhc3MoZSxuKX0odCxhLHMscik7YnJlYWs7Y2FzZSA0OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUoRW4uU1RZTEUsaSk7aWYobnVsbCE9byl7bz1vLnRvU3RyaW5nKCk7dmFyIGE9ZS5zdWZmaXg7bnVsbCE9YSYmKG8rPWEpfWVsc2Ugbz1udWxsO3ZhciBzPXQucmVuZGVyZXI7bnVsbCE9bz9zLnNldFN0eWxlKG4scixvKTpzLnJlbW92ZVN0eWxlKG4scil9KHQsaSxhLHMscik7YnJlYWs7Y2FzZSA4OiFmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPWUuc2VjdXJpdHlDb250ZXh0LGE9bz90LnJvb3Quc2FuaXRpemVyLnNhbml0aXplKG8saSk6aTt0LnJlbmRlcmVyLnNldFByb3BlcnR5KG4scixhKX0oMzM1NTQ0MzImZS5mbGFncyYmMzImaS5mbGFncz9vLmNvbXBvbmVudFZpZXc6dCxpLGEscyxyKX1yZXR1cm4hMH12YXIgRXI9bmV3IE9iamVjdCxDcj1WbihOKSxPcj1WbihNKSxUcj1WbihJdCk7ZnVuY3Rpb24ga3IodCxlLG4scil7cmV0dXJuIG49QyhuKSx7aW5kZXg6LTEsZGVwczppcihyLFMoZSkpLGZsYWdzOnQsdG9rZW46ZSx2YWx1ZTpufX1mdW5jdGlvbiBBcih0KXtmb3IodmFyIGU9e30sbj1bXSxyPSExLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXTtvLnRva2VuPT09c3QmJihyPSEwKSwxMDczNzQxODI0Jm8uZmxhZ3MmJm4ucHVzaChvLnRva2VuKSxvLmluZGV4PWksZVtWbihvLnRva2VuKV09b31yZXR1cm57ZmFjdG9yeTpudWxsLHByb3ZpZGVyc0J5S2V5OmUscHJvdmlkZXJzOnQsbW9kdWxlczpuLGlzUm9vdDpyfX1mdW5jdGlvbiBqcih0LGUsbil7dm9pZCAwPT09biYmKG49Ti5USFJPV19JRl9OT1RfRk9VTkQpO3ZhciByLGksbz1LKHQpO3RyeXtpZig4JmUuZmxhZ3MpcmV0dXJuIGUudG9rZW47aWYoMiZlLmZsYWdzJiYobj1udWxsKSwxJmUuZmxhZ3MpcmV0dXJuIHQuX3BhcmVudC5nZXQoZS50b2tlbixuKTt2YXIgYT1lLnRva2VuS2V5O3N3aXRjaChhKXtjYXNlIENyOmNhc2UgT3I6Y2FzZSBUcjpyZXR1cm4gdH12YXIgcz10Ll9kZWYucHJvdmlkZXJzQnlLZXlbYV07aWYocyl7dmFyIHU9dC5fcHJvdmlkZXJzW3MuaW5kZXhdO3JldHVybiB2b2lkIDA9PT11JiYodT10Ll9wcm92aWRlcnNbcy5pbmRleF09SXIodCxzKSksdT09PUVyP3ZvaWQgMDp1fWlmKGUudG9rZW4ubmdJbmplY3RhYmxlRGVmJiYocj10LG51bGwhPShpPWUudG9rZW4ubmdJbmplY3RhYmxlRGVmKS5wcm92aWRlZEluJiYoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fZGVmLm1vZHVsZXMuaW5kZXhPZihpLnByb3ZpZGVkSW4pPi0xfShyKXx8InJvb3QiPT09aS5wcm92aWRlZEluJiZyLl9kZWYuaXNSb290KSkpe3ZhciBjPXQuX3Byb3ZpZGVycy5sZW5ndGg7cmV0dXJuIHQuX2RlZi5wcm92aWRlcnNCeUtleVtlLnRva2VuS2V5XT17ZmxhZ3M6NTEyMCx2YWx1ZTplLnRva2VuLm5nSW5qZWN0YWJsZURlZi5mYWN0b3J5LGRlcHM6W10saW5kZXg6Yyx0b2tlbjplLnRva2VufSx0Ll9wcm92aWRlcnNbY109RXIsdC5fcHJvdmlkZXJzW2NdPUlyKHQsdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldKX1yZXR1cm4gNCZlLmZsYWdzP246dC5fcGFyZW50LmdldChlLnRva2VuLG4pfWZpbmFsbHl7SyhvKX19ZnVuY3Rpb24gSXIodCxlKXt2YXIgbjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOm49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUoanIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBuZXcgZShqcih0LG5bMF0pLGpyKHQsblsxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGUoanIodCxuWzBdKSxqcih0LG5bMV0pLGpyKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPW5ldyBBcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPWpyKHQsblthXSk7cmV0dXJuIG5ldyhlLmJpbmQuYXBwbHkoZSxPYmplY3Qoci5kKShbdm9pZCAwXSxvKSkpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAxMDI0Om49ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW4ubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDA6cmV0dXJuIGUoKTtjYXNlIDE6cmV0dXJuIGUoanIodCxuWzBdKSk7Y2FzZSAyOnJldHVybiBlKGpyKHQsblswXSksanIodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBlKGpyKHQsblswXSksanIodCxuWzFdKSxqcih0LG5bMl0pKTtkZWZhdWx0OmZvcih2YXIgbz1BcnJheShpKSxhPTA7YTxpO2ErKylvW2FdPWpyKHQsblthXSk7cmV0dXJuIGUuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKG8pKX19KHQsZS52YWx1ZSxlLmRlcHMpO2JyZWFrO2Nhc2UgMjA0ODpuPWpyKHQsZS5kZXBzWzBdKTticmVhaztjYXNlIDI1NjpuPWUudmFsdWV9cmV0dXJuIG49PT1Fcnx8bnVsbD09bnx8Im9iamVjdCIhPXR5cGVvZiBufHwxMzEwNzImZS5mbGFnc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIG4ubmdPbkRlc3Ryb3l8fChlLmZsYWdzfD0xMzEwNzIpLHZvaWQgMD09PW4/RXI6bn1mdW5jdGlvbiBNcih0LGUpe3ZhciBuPXQudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cztpZigobnVsbD09ZXx8ZT49bi5sZW5ndGgpJiYoZT1uLmxlbmd0aC0xKSxlPDApcmV0dXJuIG51bGw7dmFyIHI9bltlXTtyZXR1cm4gci52aWV3Q29udGFpbmVyUGFyZW50PW51bGwsRHIobixlKSxQbi5kaXJ0eVBhcmVudFF1ZXJpZXMociksTnIocikscn1mdW5jdGlvbiBQcih0LGUsbil7dmFyIHI9ZT9KbihlLGUuZGVmLmxhc3RSZW5kZXJSb290Tm9kZSk6dC5yZW5kZXJFbGVtZW50O3VyKG4sMixuLnJlbmRlcmVyLnBhcmVudE5vZGUociksbi5yZW5kZXJlci5uZXh0U2libGluZyhyKSx2b2lkIDApfWZ1bmN0aW9uIE5yKHQpe3VyKHQsMyxudWxsLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBScih0LGUsbil7ZT49dC5sZW5ndGg/dC5wdXNoKG4pOnQuc3BsaWNlKGUsMCxuKX1mdW5jdGlvbiBEcih0LGUpe2U+PXQubGVuZ3RoLTE/dC5wb3AoKTp0LnNwbGljZShlLDEpfXZhciBGcj1uZXcgT2JqZWN0O2Z1bmN0aW9uIExyKHQsZSxuLHIsaSxvKXtyZXR1cm4gbmV3IFZyKHQsZSxuLHIsaSxvKX12YXIgVnI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpLG8sYSl7dmFyIHM9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBzLnNlbGVjdG9yPWUscy5jb21wb25lbnRUeXBlPW4scy5faW5wdXRzPWkscy5fb3V0cHV0cz1vLHMubmdDb250ZW50U2VsZWN0b3JzPWEscy52aWV3RGVmRmFjdG9yeT1yLHN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbnB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuX2lucHV0cztmb3IodmFyIG4gaW4gZSl0LnB1c2goe3Byb3BOYW1lOm4sdGVtcGxhdGVOYW1lOmVbbl19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm91dHB1dHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fb3V0cHV0cyl0LnB1c2goe3Byb3BOYW1lOmUsdGVtcGxhdGVOYW1lOnRoaXMuX291dHB1dHNbZV19KTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4scil7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJuZ01vZHVsZSBzaG91bGQgYmUgcHJvdmlkZWQiKTt2YXIgaT1zcih0aGlzLnZpZXdEZWZGYWN0b3J5KSxvPWkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRQcm92aWRlci5ub2RlSW5kZXgsYT1Qbi5jcmVhdGVSb290Vmlldyh0LGV8fFtdLG4saSxyLEZyKSxzPWpuKGEsbykuaW5zdGFuY2U7cmV0dXJuIG4mJmEucmVuZGVyZXIuc2V0QXR0cmlidXRlKEFuKGEsMCkucmVuZGVyRWxlbWVudCwibmctdmVyc2lvbiIsSi5mdWxsKSxuZXcgenIoYSxuZXcgcXIoYSkscyl9LGV9KHh0KSx6cj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3ZpZXc9ZSxpLl92aWV3UmVmPW4saS5fY29tcG9uZW50PXIsaS5fZWxEZWY9aS5fdmlldy5kZWYubm9kZXNbMF0saS5ob3N0Vmlldz1uLGkuY2hhbmdlRGV0ZWN0b3JSZWY9bixpLmluc3RhbmNlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsZShBbih0aGlzLl92aWV3LHRoaXMuX2VsRGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgWXIodGhpcy5fdmlldyx0aGlzLl9lbERlZil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjb21wb25lbnRUeXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudC5jb25zdHJ1Y3Rvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fdmlld1JlZi5kZXN0cm95KCl9LGUucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3UmVmLm9uRGVzdHJveSh0KX0sZX0oZnVuY3Rpb24oKXt9KTtmdW5jdGlvbiBCcih0LGUsbil7cmV0dXJuIG5ldyBVcih0LGUsbil9dmFyIFVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlldz10LHRoaXMuX2VsRGVmPWUsdGhpcy5fZGF0YT1uLHRoaXMuX2VtYmVkZGVkVmlld3M9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgbGUodGhpcy5fZGF0YS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZcih0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3ZpZXcsZT10aGlzLl9lbERlZi5wYXJlbnQ7IWUmJnQ7KWU9JG4odCksdD10LnBhcmVudDtyZXR1cm4gdD9uZXcgWXIodCxlKTpuZXcgWXIodGhpcy5fdmlldyxudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgZT1Ncih0aGlzLl9kYXRhLHQpO1BuLmRlc3Ryb3lWaWV3KGUpfX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VtYmVkZGVkVmlld3NbdF07aWYoZSl7dmFyIG49bmV3IHFyKGUpO3JldHVybiBuLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSxufXJldHVybiBudWxsfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuY3JlYXRlRW1iZWRkZWRWaWV3KGV8fHt9KTtyZXR1cm4gdGhpcy5pbnNlcnQocixuKSxyfSx0LnByb3RvdHlwZS5jcmVhdGVDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz1ufHx0aGlzLnBhcmVudEluamVjdG9yO2l8fHQgaW5zdGFuY2VvZiBqdHx8KGk9by5nZXQoSXQpKTt2YXIgYT10LmNyZWF0ZShvLHIsdm9pZCAwLGkpO3JldHVybiB0aGlzLmluc2VydChhLmhvc3RWaWV3LGUpLGF9LHQucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUpe2lmKHQuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGluc2VydCBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhPXQ7cmV0dXJuIGk9YS5fdmlldyxvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbnVsbCE9PShyPWUpJiZ2b2lkIDAhPT1yfHwocj1vLmxlbmd0aCksaS52aWV3Q29udGFpbmVyUGFyZW50PXRoaXMuX3ZpZXcsUnIobyxyLGkpLGZ1bmN0aW9uKHQsZSl7dmFyIG49WG4oZSk7aWYobiYmbiE9PXQmJiEoMTYmZS5zdGF0ZSkpe2Uuc3RhdGV8PTE2O3ZhciByPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO3J8fChyPW4udGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzPVtdKSxyLnB1c2goZSksZnVuY3Rpb24odCxuKXtpZighKDQmbi5mbGFncykpe2UucGFyZW50LmRlZi5ub2RlRmxhZ3N8PTQsbi5mbGFnc3w9NDtmb3IodmFyIHI9bi5wYXJlbnQ7cjspci5jaGlsZEZsYWdzfD00LHI9ci5wYXJlbnR9fSgwLGUucGFyZW50Tm9kZURlZil9fShuLGkpLFBuLmRpcnR5UGFyZW50UXVlcmllcyhpKSxQcihuLHI+MD9vW3ItMV06bnVsbCxpKSxhLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZih0aGlzKSx0fSx0LnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbW92ZSBhIGRlc3Ryb3llZCBWaWV3IGluIGEgVmlld0NvbnRhaW5lciEiKTt2YXIgbixyLGksbyxhLHM9dGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpO3JldHVybiBpPWUsYT0obz0obj10aGlzLl9kYXRhKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzKVtyPXNdLERyKG8sciksbnVsbD09aSYmKGk9by5sZW5ndGgpLFJyKG8saSxhKSxQbi5kaXJ0eVBhcmVudFF1ZXJpZXMoYSksTnIoYSksUHIobixpPjA/b1tpLTFdOm51bGwsYSksdH0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZW1iZWRkZWRWaWV3cy5pbmRleE9mKHQuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9TXIodGhpcy5fZGF0YSx0KTtlJiZQbi5kZXN0cm95VmlldyhlKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPU1yKHRoaXMuX2RhdGEsdCk7cmV0dXJuIGU/bmV3IHFyKGUpOm51bGx9LHR9KCk7ZnVuY3Rpb24gSHIodCl7cmV0dXJuIG5ldyBxcih0KX12YXIgcXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3ZpZXc9dCx0aGlzLl92aWV3Q29udGFpbmVyUmVmPW51bGwsdGhpcy5fYXBwUmVmPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdE5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVyKHRoaXMuX3ZpZXcsMCx2b2lkIDAsdm9pZCAwLHQ9W10pLHQ7dmFyIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwIT0oMTI4JnRoaXMuX3ZpZXcuc3RhdGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpe1luKHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LnN0YXRlJj0tNX0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ZpZXcucm9vdC5yZW5kZXJlckZhY3Rvcnk7dC5iZWdpbiYmdC5iZWdpbigpO3RyeXtQbi5jaGVja0FuZFVwZGF0ZVZpZXcodGhpcy5fdmlldyl9ZmluYWxseXt0LmVuZCYmdC5lbmQoKX19LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7UG4uY2hlY2tOb0NoYW5nZXNWaWV3KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5yZWF0dGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGV8PTR9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl92aWV3LmRpc3Bvc2FibGVzfHwodGhpcy5fdmlldy5kaXNwb3NhYmxlcz1bXSksdGhpcy5fdmlldy5kaXNwb3NhYmxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fYXBwUmVmP3RoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpOnRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX3ZpZXdDb250YWluZXJSZWYuZGV0YWNoKHRoaXMuX3ZpZXdDb250YWluZXJSZWYuaW5kZXhPZih0aGlzKSksUG4uZGVzdHJveVZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaEZyb21BcHBSZWY9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY9bnVsbCxOcih0aGlzLl92aWV3KSxQbi5kaXJ0eVBhcmVudFF1ZXJpZXModGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmF0dGFjaFRvQXBwUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIFZpZXdDb250YWluZXIhIik7dGhpcy5fYXBwUmVmPXR9LHQucHJvdG90eXBlLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZj1mdW5jdGlvbih0KXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IEVycm9yKCJUaGlzIHZpZXcgaXMgYWxyZWFkeSBhdHRhY2hlZCBkaXJlY3RseSB0byB0aGUgQXBwbGljYXRpb25SZWYhIik7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10fSx0fSgpO2Z1bmN0aW9uIEdyKHQsZSl7cmV0dXJuIG5ldyBXcih0LGUpfXZhciBXcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wYXJlbnRWaWV3PWUsci5fZGVmPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGVFbWJlZGRlZFZpZXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxcihQbi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYsdGhpcy5fZGVmLmVsZW1lbnQudGVtcGxhdGUsdCkpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImVsZW1lbnRSZWYiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGxlKEFuKHRoaXMuX3BhcmVudFZpZXcsdGhpcy5fZGVmLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odmUpO2Z1bmN0aW9uIFFyKHQsZSl7cmV0dXJuIG5ldyBZcih0LGUpfXZhciBZcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLmVsRGVmPWV9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksUG4ucmVzb2x2ZURlcCh0aGlzLnZpZXcsdGhpcy5lbERlZiwhIXRoaXMuZWxEZWYmJjAhPSgzMzU1NDQzMiZ0aGlzLmVsRGVmLmZsYWdzKSx7ZmxhZ3M6MCx0b2tlbjp0LHRva2VuS2V5OlZuKHQpfSxlKX0sdH0oKTtmdW5jdGlvbiBLcih0LGUpe3ZhciBuPXQuZGVmLm5vZGVzW2VdO2lmKDEmbi5mbGFncyl7dmFyIHI9QW4odCxuLm5vZGVJbmRleCk7cmV0dXJuIG4uZWxlbWVudC50ZW1wbGF0ZT9yLnRlbXBsYXRlOnIucmVuZGVyRWxlbWVudH1pZigyJm4uZmxhZ3MpcmV0dXJuIGtuKHQsbi5ub2RlSW5kZXgpLnJlbmRlclRleHQ7aWYoMjAyNDAmbi5mbGFncylyZXR1cm4gam4odCxuLm5vZGVJbmRleCkuaW5zdGFuY2U7dGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIHN0YXRlOiByZWFkIG5vZGVWYWx1ZSBmb3Igbm9kZSBpbmRleCAiK2UpfWZ1bmN0aW9uIFpyKHQpe3JldHVybiBuZXcgWHIodC5yZW5kZXJlcil9dmFyIFhyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KHIuYykocHIoZSksMiksaT10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQoblsxXSxuWzBdKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGkpLGl9LHQucHJvdG90eXBlLmNyZWF0ZVZpZXdSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVUZW1wbGF0ZUFuY2hvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksZX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChlKTtyZXR1cm4gdCYmdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LG4pLG59LHQucHJvdG90eXBlLnByb2plY3ROb2Rlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlW25dKX0sdC5wcm90b3R5cGUuYXR0YWNoVmlld0FmdGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KSxyPXRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCksaT0wO2k8ZS5sZW5ndGg7aSsrKXRoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKG4sZVtpXSxyKX0sdC5wcm90b3R5cGUuZGV0YWNoVmlldz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXSxyPXRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShuKTt0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHIsbil9fSx0LnByb3RvdHlwZS5kZXN0cm95Vmlldz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUoZVtuXSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuR2xvYmFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PYmplY3Qoci5jKShwcihlKSwyKSxvPWlbMF0sYT1pWzFdO251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxhLG4sbyk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxhLG8pfSx0LnByb3RvdHlwZS5zZXRCaW5kaW5nRGVidWdJbmZvPWZ1bmN0aW9uKHQsZSxuKXt9LHQucHJvdG90eXBlLnNldEVsZW1lbnRDbGFzcz1mdW5jdGlvbih0LGUsbil7bj90aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSk6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGU9ZnVuY3Rpb24odCxlLG4pe251bGwhPW4/dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbik6dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5pbnZva2VFbGVtZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSxuKXt0W2VdLmFwcGx5KHQsbil9LHQucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEiKX0sdH0oKTtmdW5jdGlvbiAkcih0LGUsbixyKXtyZXR1cm4gbmV3IEpyKHQsZSxuLHIpfXZhciBKcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fbW9kdWxlVHlwZT10LHRoaXMuX3BhcmVudD1lLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bix0aGlzLl9kZWY9cix0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLmluamVjdG9yPXRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2RlZixuPXQuX3Byb3ZpZGVycz1uZXcgQXJyYXkoZS5wcm92aWRlcnMubGVuZ3RoKSxyPTA7cjxlLnByb3ZpZGVycy5sZW5ndGg7cisrKXt2YXIgaT1lLnByb3ZpZGVyc1tyXTs0MDk2JmkuZmxhZ3N8fHZvaWQgMD09PW5bcl0mJihuW3JdPUlyKHQsaSkpfX0odGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9Ti5USFJPV19JRl9OT1RfRk9VTkQpLHZvaWQgMD09PW4mJihuPTApO3ZhciByPTA7cmV0dXJuIDQmbj9yfD0xOjImbiYmKHJ8PTQpLGpyKHRoaXMse3Rva2VuOnQsdG9rZW5LZXk6Vm4odCksZmxhZ3M6cn0sZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQodGhpcy5fbW9kdWxlVHlwZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXQoa3QpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmcgbW9kdWxlICIrUyh0aGlzLmluc3RhbmNlLmNvbnN0cnVjdG9yKSsiIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiIpO3RoaXMuX2Rlc3Ryb3llZD0hMCxmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Ll9kZWYscj1uZXcgU2V0LGk9MDtpPG4ucHJvdmlkZXJzLmxlbmd0aDtpKyspaWYoMTMxMDcyJm4ucHJvdmlkZXJzW2ldLmZsYWdzKXt2YXIgbz10Ll9wcm92aWRlcnNbaV07aWYobyYmbyE9PUVyKXt2YXIgYT1vLm5nT25EZXN0cm95OyJmdW5jdGlvbiIhPXR5cGVvZiBhfHxyLmhhcyhvKXx8KGEuYXBwbHkobyksci5hZGQobykpfX19KHRoaXMpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2godCl9LHR9KCksdGk9Vm4oZnVuY3Rpb24oKXt9KSxlaT1WbihmdW5jdGlvbigpe30pLG5pPVZuKGxlKSxyaT1WbihnZSksaWk9Vm4odmUpLG9pPVZuKGJlKSxhaT1WbihOKSxzaT1WbihNKTtmdW5jdGlvbiB1aSh0LGUsbixpLG8sYSxzLHUpe3ZhciBjPVtdO2lmKHMpZm9yKHZhciBsIGluIHMpe3ZhciBmPU9iamVjdChyLmMpKHNbbF0sMik7Y1tmWzBdXT17ZmxhZ3M6OCxuYW1lOmwsbm9uTWluaWZpZWROYW1lOmZbMV0sbnM6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19dmFyIGg9W107aWYodSlmb3IodmFyIGQgaW4gdSloLnB1c2goe3R5cGU6MSxwcm9wTmFtZTpkLHRhcmdldDpudWxsLGV2ZW50TmFtZTp1W2RdfSk7cmV0dXJuIGZpKHQsZXw9MTYzODQsbixpLG8sbyxhLGMsaCl9ZnVuY3Rpb24gY2kodCxlLG4pe3JldHVybiBmaSgtMSx0fD0xNixudWxsLDAsZSxlLG4pfWZ1bmN0aW9uIGxpKHQsZSxuLHIsaSl7cmV0dXJuIGZpKC0xLHQsZSwwLG4scixpKX1mdW5jdGlvbiBmaSh0LGUsbixyLGksbyxhLHMsdSl7dmFyIGM9cnIobiksbD1jLm1hdGNoZWRRdWVyaWVzLGY9Yy5yZWZlcmVuY2VzLGg9Yy5tYXRjaGVkUXVlcnlJZHM7dXx8KHU9W10pLHN8fChzPVtdKSxvPUMobyk7dmFyIGQ9aXIoYSxTKGkpKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpsLG1hdGNoZWRRdWVyeUlkczpoLHJlZmVyZW5jZXM6ZixuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OnIsYmluZGluZ3M6cyxiaW5kaW5nRmxhZ3M6bXIocyksb3V0cHV0czp1LGVsZW1lbnQ6bnVsbCxwcm92aWRlcjp7dG9rZW46aSx2YWx1ZTpvLGRlcHM6ZH0sdGV4dDpudWxsLHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIGhpKHQsZSl7cmV0dXJuIHlpKHQsZSl9ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIG49dDtuLnBhcmVudCYmIXRyKG4pOyluPW4ucGFyZW50O3JldHVybiB2aShuLnBhcmVudCwkbihuKSwhMCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyl9ZnVuY3Rpb24gcGkodCxlKXt2YXIgbj12aSh0LGUucGFyZW50LCgzMjc2OCZlLmZsYWdzKT4wLGUucHJvdmlkZXIudmFsdWUsZS5wcm92aWRlci5kZXBzKTtpZihlLm91dHB1dHMubGVuZ3RoKWZvcih2YXIgcj0wO3I8ZS5vdXRwdXRzLmxlbmd0aDtyKyspe3ZhciBpPWUub3V0cHV0c1tyXSxvPW5baS5wcm9wTmFtZV0uc3Vic2NyaWJlKG1pKHQsZS5wYXJlbnQubm9kZUluZGV4LGkuZXZlbnROYW1lKSk7dC5kaXNwb3NhYmxlc1tlLm91dHB1dEluZGV4K3JdPW8udW5zdWJzY3JpYmUuYmluZChvKX1yZXR1cm4gbn1mdW5jdGlvbiBtaSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBabih0LGUsbixyKX19ZnVuY3Rpb24geWkodCxlKXt2YXIgbj0oODE5MiZlLmZsYWdzKT4wLGk9ZS5wcm92aWRlcjtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgNTEyOnJldHVybiB2aSh0LGUucGFyZW50LG4saS52YWx1ZSxpLmRlcHMpO2Nhc2UgMTAyNDpyZXR1cm4gZnVuY3Rpb24odCxlLG4saSxvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBpKCk7Y2FzZSAxOnJldHVybiBpKGJpKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gaShiaSh0LGUsbixvWzBdKSxiaSh0LGUsbixvWzFdKSxiaSh0LGUsbixvWzJdKSk7ZGVmYXVsdDpmb3IodmFyIHM9QXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1iaSh0LGUsbixvW3VdKTtyZXR1cm4gaS5hcHBseSh2b2lkIDAsT2JqZWN0KHIuZCkocykpfX0odCxlLnBhcmVudCxuLGkudmFsdWUsaS5kZXBzKTtjYXNlIDIwNDg6cmV0dXJuIGJpKHQsZS5wYXJlbnQsbixpLmRlcHNbMF0pO2Nhc2UgMjU2OnJldHVybiBpLnZhbHVlfX1mdW5jdGlvbiB2aSh0LGUsbixpLG8pe3ZhciBhPW8ubGVuZ3RoO3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIG5ldyBpO2Nhc2UgMTpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSkpO2Nhc2UgMjpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSkpO2Nhc2UgMzpyZXR1cm4gbmV3IGkoYmkodCxlLG4sb1swXSksYmkodCxlLG4sb1sxXSksYmkodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPW5ldyBBcnJheShhKSx1PTA7dTxhO3UrKylzW3VdPWJpKHQsZSxuLG9bdV0pO3JldHVybiBuZXcoaS5iaW5kLmFwcGx5KGksT2JqZWN0KHIuZCkoW3ZvaWQgMF0scykpKX19dmFyIGdpPXt9O2Z1bmN0aW9uIGJpKHQsZSxuLHIsaSl7aWYodm9pZCAwPT09aSYmKGk9Ti5USFJPV19JRl9OT1RfRk9VTkQpLDgmci5mbGFncylyZXR1cm4gci50b2tlbjt2YXIgbz10OzImci5mbGFncyYmKGk9bnVsbCk7dmFyIGE9ci50b2tlbktleTthPT09b2kmJihuPSEoIWV8fCFlLmVsZW1lbnQuY29tcG9uZW50VmlldykpLGUmJjEmci5mbGFncyYmKG49ITEsZT1lLnBhcmVudCk7Zm9yKHZhciBzPXQ7czspe2lmKGUpc3dpdGNoKGEpe2Nhc2UgdGk6cmV0dXJuIFpyKF9pKHMsZSxuKSk7Y2FzZSBlaTpyZXR1cm4gX2kocyxlLG4pLnJlbmRlcmVyO2Nhc2Ugbmk6cmV0dXJuIG5ldyBsZShBbihzLGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtjYXNlIHJpOnJldHVybiBBbihzLGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgaWk6aWYoZS5lbGVtZW50LnRlbXBsYXRlKXJldHVybiBBbihzLGUubm9kZUluZGV4KS50ZW1wbGF0ZTticmVhaztjYXNlIG9pOnJldHVybiBIcihfaShzLGUsbikpO2Nhc2UgYWk6Y2FzZSBzaTpyZXR1cm4gUXIocyxlKTtkZWZhdWx0OnZhciB1PShuP2UuZWxlbWVudC5hbGxQcm92aWRlcnM6ZS5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycylbYV07aWYodSl7dmFyIGM9am4ocyx1Lm5vZGVJbmRleCk7cmV0dXJuIGN8fChjPXtpbnN0YW5jZTp5aShzLHUpfSxzLm5vZGVzW3Uubm9kZUluZGV4XT1jKSxjLmluc3RhbmNlfX1uPXRyKHMpLGU9JG4ocykscz1zLnBhcmVudCw0JnIuZmxhZ3MmJihzPW51bGwpfXZhciBsPW8ucm9vdC5pbmplY3Rvci5nZXQoci50b2tlbixnaSk7cmV0dXJuIGwhPT1naXx8aT09PWdpP2w6by5yb290Lm5nTW9kdWxlLmluamVjdG9yLmdldChyLnRva2VuLGkpfWZ1bmN0aW9uIF9pKHQsZSxuKXt2YXIgcjtpZihuKXI9QW4odCxlLm5vZGVJbmRleCkuY29tcG9uZW50VmlldztlbHNlIGZvcihyPXQ7ci5wYXJlbnQmJiF0cihyKTspcj1yLnBhcmVudDtyZXR1cm4gcn1mdW5jdGlvbiB3aSh0LGUsbixyLGksbyl7aWYoMzI3Njgmbi5mbGFncyl7dmFyIGE9QW4odCxuLnBhcmVudC5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7MiZhLmRlZi5mbGFncyYmKGEuc3RhdGV8PTgpfWlmKGUuaW5zdGFuY2Vbbi5iaW5kaW5nc1tyXS5uYW1lXT1pLDUyNDI4OCZuLmZsYWdzKXtvPW98fHt9O3ZhciBzPWtlLnVud3JhcCh0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtyXSk7b1tuLmJpbmRpbmdzW3JdLm5vbk1pbmlmaWVkTmFtZV09bmV3IEFlKHMsaSwwIT0oMiZ0LnN0YXRlKSl9cmV0dXJuIHQub2xkVmFsdWVzW24uYmluZGluZ0luZGV4K3JdPWksb31mdW5jdGlvbiB4aSh0LGUpe2lmKHQuZGVmLm5vZGVGbGFncyZlKWZvcih2YXIgbj10LmRlZi5ub2RlcyxyPTAsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldLGE9by5wYXJlbnQ7Zm9yKCFhJiZvLmZsYWdzJmUmJkVpKHQsaSxvLmZsYWdzJmUscisrKSwwPT0oby5jaGlsZEZsYWdzJmUpJiYoaSs9by5jaGlsZENvdW50KTthJiYxJmEuZmxhZ3MmJmk9PT1hLm5vZGVJbmRleCthLmNoaWxkQ291bnQ7KWEuZGlyZWN0Q2hpbGRGbGFncyZlJiYocj1TaSh0LGEsZSxyKSksYT1hLnBhcmVudH19ZnVuY3Rpb24gU2kodCxlLG4scil7Zm9yKHZhciBpPWUubm9kZUluZGV4KzE7aTw9ZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50O2krKyl7dmFyIG89dC5kZWYubm9kZXNbaV07by5mbGFncyZuJiZFaSh0LGksby5mbGFncyZuLHIrKyksaSs9by5jaGlsZENvdW50fXJldHVybiByfWZ1bmN0aW9uIEVpKHQsZSxuLHIpe3ZhciBpPWpuKHQsZSk7aWYoaSl7dmFyIG89aS5pbnN0YW5jZTtvJiYoUG4uc2V0Q3VycmVudE5vZGUodCxlKSwxMDQ4NTc2Jm4mJlRuKHQsNTEyLHIpJiZvLm5nQWZ0ZXJDb250ZW50SW5pdCgpLDIwOTcxNTImbiYmby5uZ0FmdGVyQ29udGVudENoZWNrZWQoKSw0MTk0MzA0Jm4mJlRuKHQsNzY4LHIpJiZvLm5nQWZ0ZXJWaWV3SW5pdCgpLDgzODg2MDgmbiYmby5uZ0FmdGVyVmlld0NoZWNrZWQoKSwxMzEwNzImbiYmby5uZ09uRGVzdHJveSgpKX19ZnVuY3Rpb24gQ2kodCxlLG4pe3ZhciByPVtdO2Zvcih2YXIgaSBpbiBuKXIucHVzaCh7cHJvcE5hbWU6aSxiaW5kaW5nVHlwZTpuW2ldfSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczp0LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG5nQ29udGVudEluZGV4Oi0xLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sY2hpbGRDb3VudDowLGJpbmRpbmdzOltdLGJpbmRpbmdGbGFnczowLG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDpudWxsLHF1ZXJ5OntpZDplLGZpbHRlcklkOm5yKGUpLGJpbmRpbmdzOnJ9LG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBPaSh0KXtmb3IodmFyIGU9dC5kZWYubm9kZU1hdGNoZWRRdWVyaWVzO3QucGFyZW50JiZlcih0KTspe3ZhciBuPXQucGFyZW50Tm9kZURlZjt0PXQucGFyZW50O2Zvcih2YXIgcj1uLm5vZGVJbmRleCtuLmNoaWxkQ291bnQsaT0wO2k8PXI7aSsrKTY3MTA4ODY0JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJihvLnF1ZXJ5LmZpbHRlcklkJmUpPT09by5xdWVyeS5maWx0ZXJJZCYmTW4odCxpKS5zZXREaXJ0eSgpLCEoMSZvLmZsYWdzJiZpK28uY2hpbGRDb3VudDxuLm5vZGVJbmRleCkmJjY3MTA4ODY0Jm8uY2hpbGRGbGFncyYmNTM2ODcwOTEyJm8uY2hpbGRGbGFnc3x8KGkrPW8uY2hpbGRDb3VudCl9aWYoMTM0MjE3NzI4JnQuZGVmLm5vZGVGbGFncylmb3IoaT0wO2k8dC5kZWYubm9kZXMubGVuZ3RoO2krKyl7dmFyIG87MTM0MjE3NzI4JihvPXQuZGVmLm5vZGVzW2ldKS5mbGFncyYmNTM2ODcwOTEyJm8uZmxhZ3MmJk1uKHQsaSkuc2V0RGlydHkoKSxpKz1vLmNoaWxkQ291bnR9fWZ1bmN0aW9uIFRpKHQsZSl7dmFyIG49TW4odCxlLm5vZGVJbmRleCk7aWYobi5kaXJ0eSl7dmFyIHIsaT12b2lkIDA7aWYoNjcxMDg4NjQmZS5mbGFncyl7dmFyIG89ZS5wYXJlbnQucGFyZW50O2k9a2kodCxvLm5vZGVJbmRleCxvLm5vZGVJbmRleCtvLmNoaWxkQ291bnQsZS5xdWVyeSxbXSkscj1qbih0LGUucGFyZW50Lm5vZGVJbmRleCkuaW5zdGFuY2V9ZWxzZSAxMzQyMTc3MjgmZS5mbGFncyYmKGk9a2kodCwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLGUucXVlcnksW10pLHI9dC5jb21wb25lbnQpO24ucmVzZXQoaSk7Zm9yKHZhciBhPWUucXVlcnkuYmluZGluZ3Mscz0hMSx1PTA7dTxhLmxlbmd0aDt1Kyspe3ZhciBjPWFbdV0sbD12b2lkIDA7c3dpdGNoKGMuYmluZGluZ1R5cGUpe2Nhc2UgMDpsPW4uZmlyc3Q7YnJlYWs7Y2FzZSAxOmw9bixzPSEwfXJbYy5wcm9wTmFtZV09bH1zJiZuLm5vdGlmeU9uQ2hhbmdlcygpfX1mdW5jdGlvbiBraSh0LGUsbixyLGkpe2Zvcih2YXIgbz1lO288PW47bysrKXt2YXIgYT10LmRlZi5ub2Rlc1tvXSxzPWEubWF0Y2hlZFF1ZXJpZXNbci5pZF07aWYobnVsbCE9cyYmaS5wdXNoKEFpKHQsYSxzKSksMSZhLmZsYWdzJiZhLmVsZW1lbnQudGVtcGxhdGUmJihhLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCl7dmFyIHU9QW4odCxvKTtpZigoYS5jaGlsZE1hdGNoZWRRdWVyaWVzJnIuZmlsdGVySWQpPT09ci5maWx0ZXJJZCYmKGtpKHQsbysxLG8rYS5jaGlsZENvdW50LHIsaSksbys9YS5jaGlsZENvdW50KSwxNjc3NzIxNiZhLmZsYWdzKWZvcih2YXIgYz11LnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsbD0wO2w8Yy5sZW5ndGg7bCsrKXt2YXIgZj1jW2xdLGg9WG4oZik7aCYmaD09PXUmJmtpKGYsMCxmLmRlZi5ub2Rlcy5sZW5ndGgtMSxyLGkpfXZhciBkPXUudGVtcGxhdGUuX3Byb2plY3RlZFZpZXdzO2lmKGQpZm9yKGw9MDtsPGQubGVuZ3RoO2wrKyl7dmFyIHA9ZFtsXTtraShwLDAscC5kZWYubm9kZXMubGVuZ3RoLTEscixpKX19KGEuY2hpbGRNYXRjaGVkUXVlcmllcyZyLmZpbHRlcklkKSE9PXIuZmlsdGVySWQmJihvKz1hLmNoaWxkQ291bnQpfXJldHVybiBpfWZ1bmN0aW9uIEFpKHQsZSxuKXtpZihudWxsIT1uKXN3aXRjaChuKXtjYXNlIDE6cmV0dXJuIEFuKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7Y2FzZSAwOnJldHVybiBuZXcgbGUoQW4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSAyOnJldHVybiBBbih0LGUubm9kZUluZGV4KS50ZW1wbGF0ZTtjYXNlIDM6cmV0dXJuIEFuKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXI7Y2FzZSA0OnJldHVybiBqbih0LGUubm9kZUluZGV4KS5pbnN0YW5jZX19ZnVuY3Rpb24gamkodCxlKXtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4Oi0xLGZsYWdzOjgsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDp0LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDp7aW5kZXg6ZX19fWZ1bmN0aW9uIElpKHQsZSxuKXt2YXIgcj1vcih0LGUsbik7ciYmbHIodCxuLm5nQ29udGVudC5pbmRleCwxLHIsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIE1pKHQsZSl7cmV0dXJuIFJpKDEyOCx0LG5ldyBBcnJheShlKzEpKX1mdW5jdGlvbiBQaSh0LGUpe3JldHVybiBSaSgzMix0LG5ldyBBcnJheShlKSl9ZnVuY3Rpb24gTmkodCxlKXtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscj1uLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKyl7dmFyIGE9bltvXTtpW2VbYV1dPWF9cmV0dXJuIFJpKDY0LHQsaSl9ZnVuY3Rpb24gUmkodCxlLG4pe2Zvcih2YXIgcj1uZXcgQXJyYXkobi5sZW5ndGgpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtyW2ldPXtmbGFnczo4LG5hbWU6byxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpvLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpudWxsfX1yZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OmUsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4Oi0xLGNoaWxkQ291bnQ6MCxiaW5kaW5nczpyLGJpbmRpbmdGbGFnczptcihyKSxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBEaSh0LGUsbil7Zm9yKHZhciByPW5ldyBBcnJheShuLmxlbmd0aC0xKSxpPTE7aTxuLmxlbmd0aDtpKyspcltpLTFdPXtmbGFnczo4LG5hbWU6bnVsbCxuczpudWxsLG5vbk1pbmlmaWVkTmFtZTpudWxsLHNlY3VyaXR5Q29udGV4dDpudWxsLHN1ZmZpeDpuW2ldfTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6MixjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LG5nQ29udGVudEluZGV4OmUsY2hpbGRDb3VudDowLGJpbmRpbmdzOnIsYmluZGluZ0ZsYWdzOjgsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0OntwcmVmaXg6blswXX0scXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gRmkodCxlLG4pe3ZhciByLGk9dC5yZW5kZXJlcjtyPWkuY3JlYXRlVGV4dChuLnRleHQucHJlZml4KTt2YXIgbz1vcih0LGUsbik7cmV0dXJuIG8mJmkuYXBwZW5kQ2hpbGQobyxyKSx7cmVuZGVyVGV4dDpyfX1mdW5jdGlvbiBMaSh0LGUpe3JldHVybihudWxsIT10P3QudG9TdHJpbmcoKToiIikrZS5zdWZmaXh9ZnVuY3Rpb24gVmkodCxlLG4scil7Zm9yKHZhciBpPTAsbz0wLGE9MCxzPTAsdT0wLGM9bnVsbCxsPW51bGwsZj0hMSxoPSExLGQ9bnVsbCxwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBtPWVbcF07aWYobS5ub2RlSW5kZXg9cCxtLnBhcmVudD1jLG0uYmluZGluZ0luZGV4PWksbS5vdXRwdXRJbmRleD1vLG0ucmVuZGVyUGFyZW50PWwsYXw9bS5mbGFncyx1fD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQpe3ZhciB5PW0uZWxlbWVudDt5LnB1YmxpY1Byb3ZpZGVycz1jP2MuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM6T2JqZWN0LmNyZWF0ZShudWxsKSx5LmFsbFByb3ZpZGVycz15LnB1YmxpY1Byb3ZpZGVycyxmPSExLGg9ITEsbS5lbGVtZW50LnRlbXBsYXRlJiYodXw9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyl9aWYoQmkoYyxtLGUubGVuZ3RoKSxpKz1tLmJpbmRpbmdzLmxlbmd0aCxvKz1tLm91dHB1dHMubGVuZ3RoLCFsJiYzJm0uZmxhZ3MmJihkPW0pLDIwMjI0Jm0uZmxhZ3Mpe2Z8fChmPSEwLGMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnM9T2JqZWN0LmNyZWF0ZShjLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKSxjLmVsZW1lbnQuYWxsUHJvdmlkZXJzPWMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpO3ZhciB2PTAhPSgzMjc2OCZtLmZsYWdzKTswPT0oODE5MiZtLmZsYWdzKXx8dj9jLmVsZW1lbnQucHVibGljUHJvdmlkZXJzW1ZuKG0ucHJvdmlkZXIudG9rZW4pXT1tOihofHwoaD0hMCxjLmVsZW1lbnQuYWxsUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUoYy5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycykpLGMuZWxlbWVudC5hbGxQcm92aWRlcnNbVm4obS5wcm92aWRlci50b2tlbildPW0pLHYmJihjLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXI9bSl9aWYoYz8oYy5jaGlsZEZsYWdzfD1tLmZsYWdzLGMuZGlyZWN0Q2hpbGRGbGFnc3w9bS5mbGFncyxjLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PW0ubWF0Y2hlZFF1ZXJ5SWRzLG0uZWxlbWVudCYmbS5lbGVtZW50LnRlbXBsYXRlJiYoYy5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLmVsZW1lbnQudGVtcGxhdGUubm9kZU1hdGNoZWRRdWVyaWVzKSk6c3w9bS5mbGFncyxtLmNoaWxkQ291bnQ+MCljPW0semkobSl8fChsPW0pO2Vsc2UgZm9yKDtjJiZwPT09Yy5ub2RlSW5kZXgrYy5jaGlsZENvdW50Oyl7dmFyIGc9Yy5wYXJlbnQ7ZyYmKGcuY2hpbGRGbGFnc3w9Yy5jaGlsZEZsYWdzLGcuY2hpbGRNYXRjaGVkUXVlcmllc3w9Yy5jaGlsZE1hdGNoZWRRdWVyaWVzKSxsPShjPWcpJiZ6aShjKT9jLnJlbmRlclBhcmVudDpjfX1yZXR1cm57ZmFjdG9yeTpudWxsLG5vZGVGbGFnczphLHJvb3ROb2RlRmxhZ3M6cyxub2RlTWF0Y2hlZFF1ZXJpZXM6dSxmbGFnczp0LG5vZGVzOmUsdXBkYXRlRGlyZWN0aXZlczpufHxGbix1cGRhdGVSZW5kZXJlcjpyfHxGbixoYW5kbGVFdmVudDpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gZVtuXS5lbGVtZW50LmhhbmRsZUV2ZW50KHQscixpKX0sYmluZGluZ0NvdW50Omksb3V0cHV0Q291bnQ6byxsYXN0UmVuZGVyUm9vdE5vZGU6ZH19ZnVuY3Rpb24gemkodCl7cmV0dXJuIDAhPSgxJnQuZmxhZ3MpJiZudWxsPT09dC5lbGVtZW50Lm5hbWV9ZnVuY3Rpb24gQmkodCxlLG4pe3ZhciByPWUuZWxlbWVudCYmZS5lbGVtZW50LnRlbXBsYXRlO2lmKHIpe2lmKCFyLmxhc3RSZW5kZXJSb290Tm9kZSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IEVtYmVkZGVkIHRlbXBsYXRlcyB3aXRob3V0IG5vZGVzIGFyZSBub3QgYWxsb3dlZCEiKTtpZihyLmxhc3RSZW5kZXJSb290Tm9kZSYmMTY3NzcyMTYmci5sYXN0UmVuZGVyUm9vdE5vZGUuZmxhZ3MpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBMYXN0IHJvb3Qgbm9kZSBvZiBhIHRlbXBsYXRlIGNhbid0IGhhdmUgZW1iZWRkZWQgdmlld3MsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZigyMDIyNCZlLmZsYWdzJiYwPT0oMSYodD90LmZsYWdzOjApKSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFN0YXRpY1Byb3ZpZGVyL0RpcmVjdGl2ZSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGVsZW1lbnRzIG9yIGFuY2hvcnMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZihlLnF1ZXJ5KXtpZig2NzEwODg2NCZlLmZsYWdzJiYoIXR8fDA9PSgxNjM4NCZ0LmZsYWdzKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBDb250ZW50IFF1ZXJ5IG5vZGVzIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgZGlyZWN0aXZlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpO2lmKDEzNDIxNzcyOCZlLmZsYWdzJiZ0KXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogVmlldyBRdWVyeSBub2RlcyBoYXZlIHRvIGJlIHRvcCBsZXZlbCBub2RlcywgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfWlmKGUuY2hpbGRDb3VudCl7dmFyIGk9dD90Lm5vZGVJbmRleCt0LmNoaWxkQ291bnQ6bi0xO2lmKGUubm9kZUluZGV4PD1pJiZlLm5vZGVJbmRleCtlLmNoaWxkQ291bnQ+aSl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGNoaWxkQ291bnQgb2Ygbm9kZSBsZWFkcyBvdXRzaWRlIG9mIHBhcmVudCwgYXQgaW5kZXggIitlLm5vZGVJbmRleCsiISIpfX1mdW5jdGlvbiBVaSh0LGUsbixyKXt2YXIgaT1HaSh0LnJvb3QsdC5yZW5kZXJlcix0LGUsbik7cmV0dXJuIFdpKGksdC5jb21wb25lbnQsciksUWkoaSksaX1mdW5jdGlvbiBIaSh0LGUsbil7dmFyIHI9R2kodCx0LnJlbmRlcmVyLG51bGwsbnVsbCxlKTtyZXR1cm4gV2kocixuLG4pLFFpKHIpLHJ9ZnVuY3Rpb24gcWkodCxlLG4scil7dmFyIGksbz1lLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlO3JldHVybiBpPW8/dC5yb290LnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihyLG8pOnQucm9vdC5yZW5kZXJlcixHaSh0LnJvb3QsaSx0LGUuZWxlbWVudC5jb21wb25lbnRQcm92aWRlcixuKX1mdW5jdGlvbiBHaSh0LGUsbixyLGkpe3ZhciBvPW5ldyBBcnJheShpLm5vZGVzLmxlbmd0aCksYT1pLm91dHB1dENvdW50P25ldyBBcnJheShpLm91dHB1dENvdW50KTpudWxsO3JldHVybntkZWY6aSxwYXJlbnQ6bix2aWV3Q29udGFpbmVyUGFyZW50Om51bGwscGFyZW50Tm9kZURlZjpyLGNvbnRleHQ6bnVsbCxjb21wb25lbnQ6bnVsbCxub2RlczpvLHN0YXRlOjEzLHJvb3Q6dCxyZW5kZXJlcjplLG9sZFZhbHVlczpuZXcgQXJyYXkoaS5iaW5kaW5nQ291bnQpLGRpc3Bvc2FibGVzOmEsaW5pdEluZGV4Oi0xfX1mdW5jdGlvbiBXaSh0LGUsbil7dC5jb21wb25lbnQ9ZSx0LmNvbnRleHQ9bn1mdW5jdGlvbiBRaSh0KXt2YXIgZTt0cih0KSYmKGU9QW4odC5wYXJlbnQsdC5wYXJlbnROb2RlRGVmLnBhcmVudC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Zvcih2YXIgbj10LmRlZixyPXQubm9kZXMsaT0wO2k8bi5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgbz1uLm5vZGVzW2ldO1BuLnNldEN1cnJlbnROb2RlKHQsaSk7dmFyIGE9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmby5mbGFncyl7Y2FzZSAxOnZhciBzPV9yKHQsZSxvKSx1PXZvaWQgMDtpZigzMzU1NDQzMiZvLmZsYWdzKXt2YXIgYz1zcihvLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7dT1Qbi5jcmVhdGVDb21wb25lbnRWaWV3KHQsbyxjLHMpfXdyKHQsdSxvLHMpLGE9e3JlbmRlckVsZW1lbnQ6cyxjb21wb25lbnRWaWV3OnUsdmlld0NvbnRhaW5lcjpudWxsLHRlbXBsYXRlOm8uZWxlbWVudC50ZW1wbGF0ZT9Hcih0LG8pOnZvaWQgMH0sMTY3NzcyMTYmby5mbGFncyYmKGEudmlld0NvbnRhaW5lcj1Ccih0LG8sYSkpO2JyZWFrO2Nhc2UgMjphPUZpKHQsZSxvKTticmVhaztjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgMjU2OihhPXJbaV0pfHw0MDk2Jm8uZmxhZ3N8fChhPXtpbnN0YW5jZTpoaSh0LG8pfSk7YnJlYWs7Y2FzZSAxNjphPXtpbnN0YW5jZTpkaSh0LG8pfTticmVhaztjYXNlIDE2Mzg0OihhPXJbaV0pfHwoYT17aW5zdGFuY2U6cGkodCxvKX0pLDMyNzY4Jm8uZmxhZ3MmJldpKEFuKHQsby5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3LGEuaW5zdGFuY2UsYS5pbnN0YW5jZSk7YnJlYWs7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmE9e3ZhbHVlOnZvaWQgMH07YnJlYWs7Y2FzZSA2NzEwODg2NDpjYXNlIDEzNDIxNzcyODphPW5ldyBoZTticmVhaztjYXNlIDg6SWkodCxlLG8pLGE9dm9pZCAwfXJbaV09YX1ubyh0LGVvLkNyZWF0ZVZpZXdOb2RlcyksYW8odCwyMDEzMjY1OTIsMjY4NDM1NDU2LDApfWZ1bmN0aW9uIFlpKHQpe1hpKHQpLFBuLnVwZGF0ZURpcmVjdGl2ZXModCwxKSxybyh0LGVvLkNoZWNrTm9DaGFuZ2VzKSxQbi51cGRhdGVSZW5kZXJlcih0LDEpLG5vKHQsZW8uQ2hlY2tOb0NoYW5nZXMpLHQuc3RhdGUmPS05N31mdW5jdGlvbiBLaSh0KXsxJnQuc3RhdGU/KHQuc3RhdGUmPS0yLHQuc3RhdGV8PTIpOnQuc3RhdGUmPS0zLE9uKHQsMCwyNTYpLFhpKHQpLFBuLnVwZGF0ZURpcmVjdGl2ZXModCwwKSxybyh0LGVvLkNoZWNrQW5kVXBkYXRlKSxhbyh0LDY3MTA4ODY0LDUzNjg3MDkxMiwwKTt2YXIgZT1Pbih0LDI1Niw1MTIpO3hpKHQsMjA5NzE1MnwoZT8xMDQ4NTc2OjApKSxQbi51cGRhdGVSZW5kZXJlcih0LDApLG5vKHQsZW8uQ2hlY2tBbmRVcGRhdGUpLGFvKHQsMTM0MjE3NzI4LDUzNjg3MDkxMiwwKSx4aSh0LDgzODg2MDh8KChlPU9uKHQsNTEyLDc2OCkpPzQxOTQzMDQ6MCkpLDImdC5kZWYuZmxhZ3MmJih0LnN0YXRlJj0tOSksdC5zdGF0ZSY9LTk3LE9uKHQsNzY4LDEwMjQpfWZ1bmN0aW9uIFppKHQsZSxuLGksbyxhLHMsdSxjLGwsZixoLGQpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxjLGwsZil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmKXt2YXIgaD1lLmJpbmRpbmdzLmxlbmd0aCxkPSExO3JldHVybiBoPjAmJlNyKHQsZSwwLG4pJiYoZD0hMCksaD4xJiZTcih0LGUsMSxyKSYmKGQ9ITApLGg+MiYmU3IodCxlLDIsaSkmJihkPSEwKSxoPjMmJlNyKHQsZSwzLG8pJiYoZD0hMCksaD40JiZTcih0LGUsNCxhKSYmKGQ9ITApLGg+NSYmU3IodCxlLDUscykmJihkPSEwKSxoPjYmJlNyKHQsZSw2LHUpJiYoZD0hMCksaD43JiZTcih0LGUsNyxjKSYmKGQ9ITApLGg+OCYmU3IodCxlLDgsbCkmJihkPSEwKSxoPjkmJlNyKHQsZSw5LGYpJiYoZD0hMCksZH0odCxlLG4scixpLG8sYSxzLHUsYyxsLGYpO2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsYyxsLGYpe3ZhciBoPSExLGQ9ZS5iaW5kaW5ncyxwPWQubGVuZ3RoO2lmKHA+MCYmV24odCxlLDAsbikmJihoPSEwKSxwPjEmJlduKHQsZSwxLHIpJiYoaD0hMCkscD4yJiZXbih0LGUsMixpKSYmKGg9ITApLHA+MyYmV24odCxlLDMsbykmJihoPSEwKSxwPjQmJlduKHQsZSw0LGEpJiYoaD0hMCkscD41JiZXbih0LGUsNSxzKSYmKGg9ITApLHA+NiYmV24odCxlLDYsdSkmJihoPSEwKSxwPjcmJlduKHQsZSw3LGMpJiYoaD0hMCkscD44JiZXbih0LGUsOCxsKSYmKGg9ITApLHA+OSYmV24odCxlLDksZikmJihoPSEwKSxoKXt2YXIgbT1lLnRleHQucHJlZml4O3A+MCYmKG0rPUxpKG4sZFswXSkpLHA+MSYmKG0rPUxpKHIsZFsxXSkpLHA+MiYmKG0rPUxpKGksZFsyXSkpLHA+MyYmKG0rPUxpKG8sZFszXSkpLHA+NCYmKG0rPUxpKGEsZFs0XSkpLHA+NSYmKG0rPUxpKHMsZFs1XSkpLHA+NiYmKG0rPUxpKHUsZFs2XSkpLHA+NyYmKG0rPUxpKGMsZFs3XSkpLHA+OCYmKG0rPUxpKGwsZFs4XSkpLHA+OSYmKG0rPUxpKGYsZFs5XSkpO3ZhciB5PWtuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHQ7dC5yZW5kZXJlci5zZXRWYWx1ZSh5LG0pfXJldHVybiBofSh0LGUsbixyLGksbyxhLHMsdSxjLGwsZik7Y2FzZSAxNjM4NDpyZXR1cm4gZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsYyxsLGYpe3ZhciBoPWpuKHQsZS5ub2RlSW5kZXgpLGQ9aC5pbnN0YW5jZSxwPSExLG09dm9pZCAwLHk9ZS5iaW5kaW5ncy5sZW5ndGg7cmV0dXJuIHk+MCYmR24odCxlLDAsbikmJihwPSEwLG09d2kodCxoLGUsMCxuLG0pKSx5PjEmJkduKHQsZSwxLHIpJiYocD0hMCxtPXdpKHQsaCxlLDEscixtKSkseT4yJiZHbih0LGUsMixpKSYmKHA9ITAsbT13aSh0LGgsZSwyLGksbSkpLHk+MyYmR24odCxlLDMsbykmJihwPSEwLG09d2kodCxoLGUsMyxvLG0pKSx5PjQmJkduKHQsZSw0LGEpJiYocD0hMCxtPXdpKHQsaCxlLDQsYSxtKSkseT41JiZHbih0LGUsNSxzKSYmKHA9ITAsbT13aSh0LGgsZSw1LHMsbSkpLHk+NiYmR24odCxlLDYsdSkmJihwPSEwLG09d2kodCxoLGUsNix1LG0pKSx5PjcmJkduKHQsZSw3LGMpJiYocD0hMCxtPXdpKHQsaCxlLDcsYyxtKSkseT44JiZHbih0LGUsOCxsKSYmKHA9ITAsbT13aSh0LGgsZSw4LGwsbSkpLHk+OSYmR24odCxlLDksZikmJihwPSEwLG09d2kodCxoLGUsOSxmLG0pKSxtJiZkLm5nT25DaGFuZ2VzKG0pLDY1NTM2JmUuZmxhZ3MmJlRuKHQsMjU2LGUubm9kZUluZGV4KSYmZC5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZkLm5nRG9DaGVjaygpLHB9KHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmKXt2YXIgaD1lLmJpbmRpbmdzLGQ9ITEscD1oLmxlbmd0aDtpZihwPjAmJlduKHQsZSwwLG4pJiYoZD0hMCkscD4xJiZXbih0LGUsMSxyKSYmKGQ9ITApLHA+MiYmV24odCxlLDIsaSkmJihkPSEwKSxwPjMmJlduKHQsZSwzLG8pJiYoZD0hMCkscD40JiZXbih0LGUsNCxhKSYmKGQ9ITApLHA+NSYmV24odCxlLDUscykmJihkPSEwKSxwPjYmJlduKHQsZSw2LHUpJiYoZD0hMCkscD43JiZXbih0LGUsNyxjKSYmKGQ9ITApLHA+OCYmV24odCxlLDgsbCkmJihkPSEwKSxwPjkmJlduKHQsZSw5LGYpJiYoZD0hMCksZCl7dmFyIG09SW4odCxlLm5vZGVJbmRleCkseT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnk9bmV3IEFycmF5KGgubGVuZ3RoKSxwPjAmJih5WzBdPW4pLHA+MSYmKHlbMV09cikscD4yJiYoeVsyXT1pKSxwPjMmJih5WzNdPW8pLHA+NCYmKHlbNF09YSkscD41JiYoeVs1XT1zKSxwPjYmJih5WzZdPXUpLHA+NyYmKHlbN109YykscD44JiYoeVs4XT1sKSxwPjkmJih5WzldPWYpO2JyZWFrO2Nhc2UgNjQ6eT17fSxwPjAmJih5W2hbMF0ubmFtZV09bikscD4xJiYoeVtoWzFdLm5hbWVdPXIpLHA+MiYmKHlbaFsyXS5uYW1lXT1pKSxwPjMmJih5W2hbM10ubmFtZV09bykscD40JiYoeVtoWzRdLm5hbWVdPWEpLHA+NSYmKHlbaFs1XS5uYW1lXT1zKSxwPjYmJih5W2hbNl0ubmFtZV09dSkscD43JiYoeVtoWzddLm5hbWVdPWMpLHA+OCYmKHlbaFs4XS5uYW1lXT1sKSxwPjkmJih5W2hbOV0ubmFtZV09Zik7YnJlYWs7Y2FzZSAxMjg6dmFyIHY9bjtzd2l0Y2gocCl7Y2FzZSAxOnk9di50cmFuc2Zvcm0obik7YnJlYWs7Y2FzZSAyOnk9di50cmFuc2Zvcm0ocik7YnJlYWs7Y2FzZSAzOnk9di50cmFuc2Zvcm0ocixpKTticmVhaztjYXNlIDQ6eT12LnRyYW5zZm9ybShyLGksbyk7YnJlYWs7Y2FzZSA1Onk9di50cmFuc2Zvcm0ocixpLG8sYSk7YnJlYWs7Y2FzZSA2Onk9di50cmFuc2Zvcm0ocixpLG8sYSxzKTticmVhaztjYXNlIDc6eT12LnRyYW5zZm9ybShyLGksbyxhLHMsdSk7YnJlYWs7Y2FzZSA4Onk9di50cmFuc2Zvcm0ocixpLG8sYSxzLHUsYyk7YnJlYWs7Y2FzZSA5Onk9di50cmFuc2Zvcm0ocixpLG8sYSxzLHUsYyxsKTticmVhaztjYXNlIDEwOnk9di50cmFuc2Zvcm0ocixpLG8sYSxzLHUsYyxsLGYpfX1tLnZhbHVlPXl9cmV0dXJuIGR9KHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxpLG8sYSxzLHUsYyxsLGYsaCxkKTpmdW5jdGlvbih0LGUsbil7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ITEsaT0wO2k8bi5sZW5ndGg7aSsrKVNyKHQsZSxpLG5baV0pJiYocj0hMCk7cmV0dXJuIHJ9KHQsZSxuKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxpPSExLG89MDtvPG4ubGVuZ3RoO28rKylXbih0LGUsbyxuW29dKSYmKGk9ITApO2lmKGkpe3ZhciBhPSIiO2ZvcihvPTA7bzxuLmxlbmd0aDtvKyspYSs9TGkobltvXSxyW29dKTthPWUudGV4dC5wcmVmaXgrYTt2YXIgcz1rbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUocyxhKX1yZXR1cm4gaX0odCxlLG4pO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9am4odCxlLm5vZGVJbmRleCksaT1yLmluc3RhbmNlLG89ITEsYT12b2lkIDAscz0wO3M8bi5sZW5ndGg7cysrKUduKHQsZSxzLG5bc10pJiYobz0hMCxhPXdpKHQscixlLHMsbltzXSxhKSk7cmV0dXJuIGEmJmkubmdPbkNoYW5nZXMoYSksNjU1MzYmZS5mbGFncyYmVG4odCwyNTYsZS5ub2RlSW5kZXgpJiZpLm5nT25Jbml0KCksMjYyMTQ0JmUuZmxhZ3MmJmkubmdEb0NoZWNrKCksb30odCxlLG4pO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODpyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT1lLmJpbmRpbmdzLG89ITEsYT0wO2E8bi5sZW5ndGg7YSsrKVduKHQsZSxhLG5bYV0pJiYobz0hMCk7aWYobyl7dmFyIHM9SW4odCxlLm5vZGVJbmRleCksdT12b2lkIDA7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDMyOnU9bjticmVhaztjYXNlIDY0OmZvcih1PXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl1W2lbYV0ubmFtZV09blthXTticmVhaztjYXNlIDEyODp2YXIgYz1uWzBdLGw9bi5zbGljZSgxKTt1PWMudHJhbnNmb3JtLmFwcGx5KGMsT2JqZWN0KHIuZCkobCkpfXMudmFsdWU9dX1yZXR1cm4gb30odCxlLG4pO2RlZmF1bHQ6dGhyb3cidW5yZWFjaGFibGUifX0odCxlLGkpfWZ1bmN0aW9uIFhpKHQpe3ZhciBlPXQuZGVmO2lmKDQmZS5ub2RlRmxhZ3MpZm9yKHZhciBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPWUubm9kZXNbbl07aWYoNCZyLmZsYWdzKXt2YXIgaT1Bbih0LG4pLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXt2YXIgYT1pW29dO2Euc3RhdGV8PTMyLEtuKGEsdCl9fWVsc2UgMD09KDQmci5jaGlsZEZsYWdzKSYmKG4rPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uICRpKHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmLGgpe3JldHVybiAwPT09bj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMsdSxjLGwsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGg7aD4wJiZRbih0LGUsMCxuKSxoPjEmJlFuKHQsZSwxLHIpLGg+MiYmUW4odCxlLDIsaSksaD4zJiZRbih0LGUsMyxvKSxoPjQmJlFuKHQsZSw0LGEpLGg+NSYmUW4odCxlLDUscyksaD42JiZRbih0LGUsNix1KSxoPjcmJlFuKHQsZSw3LGMpLGg+OCYmUW4odCxlLDgsbCksaD45JiZRbih0LGUsOSxmKX0odCxlLHIsaSxvLGEscyx1LGMsbCxmLGgpOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylRbih0LGUscixuW3JdKX0odCxlLHIpLCExfWZ1bmN0aW9uIEppKHQsZSl7aWYoTW4odCxlLm5vZGVJbmRleCkuZGlydHkpdGhyb3cgTm4oUG4uY3JlYXRlRGVidWdDb250ZXh0KHQsZS5ub2RlSW5kZXgpLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBub3QgZGlydHkiLCJRdWVyeSAiK2UucXVlcnkuaWQrIiBkaXJ0eSIsMCE9KDEmdC5zdGF0ZSkpfWZ1bmN0aW9uIHRvKHQpe2lmKCEoMTI4JnQuc3RhdGUpKXtpZihybyh0LGVvLkRlc3Ryb3kpLG5vKHQsZW8uRGVzdHJveSkseGkodCwxMzEwNzIpLHQuZGlzcG9zYWJsZXMpZm9yKHZhciBlPTA7ZTx0LmRpc3Bvc2FibGVzLmxlbmd0aDtlKyspdC5kaXNwb3NhYmxlc1tlXSgpOyFmdW5jdGlvbih0KXtpZigxNiZ0LnN0YXRlKXt2YXIgZT1Ybih0KTtpZihlKXt2YXIgbj1lLnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztuJiYoRHIobixuLmluZGV4T2YodCkpLFBuLmRpcnR5UGFyZW50UXVlcmllcyh0KSl9fX0odCksdC5yZW5kZXJlci5kZXN0cm95Tm9kZSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVzLmxlbmd0aCxuPTA7bjxlO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07MSZyLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoQW4odCxuKS5yZW5kZXJFbGVtZW50KToyJnIuZmxhZ3M/dC5yZW5kZXJlci5kZXN0cm95Tm9kZShrbih0LG4pLnJlbmRlclRleHQpOig2NzEwODg2NCZyLmZsYWdzfHwxMzQyMTc3Mjgmci5mbGFncykmJk1uKHQsbikuZGVzdHJveSgpfX0odCksdHIodCkmJnQucmVuZGVyZXIuZGVzdHJveSgpLHQuc3RhdGV8PTEyOH19dmFyIGVvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuQ3JlYXRlVmlld05vZGVzPTBdPSJDcmVhdGVWaWV3Tm9kZXMiLHRbdC5DaGVja05vQ2hhbmdlcz0xXT0iQ2hlY2tOb0NoYW5nZXMiLHRbdC5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzPTJdPSJDaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzIix0W3QuQ2hlY2tBbmRVcGRhdGU9M109IkNoZWNrQW5kVXBkYXRlIix0W3QuQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cz00XT0iQ2hlY2tBbmRVcGRhdGVQcm9qZWN0ZWRWaWV3cyIsdFt0LkRlc3Ryb3k9NV09IkRlc3Ryb3kiLHR9KHt9KTtmdW5jdGlvbiBubyh0LGUpe3ZhciBuPXQuZGVmO2lmKDMzNTU0NDMyJm4ubm9kZUZsYWdzKWZvcih2YXIgcj0wO3I8bi5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT1uLm5vZGVzW3JdOzMzNTU0NDMyJmkuZmxhZ3M/aW8oQW4odCxyKS5jb21wb25lbnRWaWV3LGUpOjA9PSgzMzU1NDQzMiZpLmNoaWxkRmxhZ3MpJiYocis9aS5jaGlsZENvdW50KX19ZnVuY3Rpb24gcm8odCxlKXt2YXIgbj10LmRlZjtpZigxNjc3NzIxNiZuLm5vZGVGbGFncylmb3IodmFyIHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIGk9bi5ub2Rlc1tyXTtpZigxNjc3NzIxNiZpLmZsYWdzKWZvcih2YXIgbz1Bbih0LHIpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsYT0wO2E8by5sZW5ndGg7YSsrKWlvKG9bYV0sZSk7ZWxzZSAwPT0oMTY3NzcyMTYmaS5jaGlsZEZsYWdzKSYmKHIrPWkuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dC5zdGF0ZTtzd2l0Y2goZSl7Y2FzZSBlby5DaGVja05vQ2hhbmdlczowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9ZaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrTm9DaGFuZ2VzUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/WWkodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5DaGVja0FuZFVwZGF0ZTowPT0oMTI4Jm4pJiYoMTI9PSgxMiZuKT9LaSh0KTo2NCZuJiZvbyh0LGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MpKTticmVhaztjYXNlIGVvLkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M6MD09KDEyOCZuKSYmKDMyJm4/S2kodCk6NjQmbiYmb28odCxlKSk7YnJlYWs7Y2FzZSBlby5EZXN0cm95OnRvKHQpO2JyZWFrO2Nhc2UgZW8uQ3JlYXRlVmlld05vZGVzOlFpKHQpfX1mdW5jdGlvbiBvbyh0LGUpe3JvKHQsZSksbm8odCxlKX1mdW5jdGlvbiBhbyh0LGUsbixyKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSYmdC5kZWYubm9kZUZsYWdzJm4pZm9yKHZhciBpPXQuZGVmLm5vZGVzLmxlbmd0aCxvPTA7bzxpO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb107aWYoYS5mbGFncyZlJiZhLmZsYWdzJm4pc3dpdGNoKFBuLnNldEN1cnJlbnROb2RlKHQsYS5ub2RlSW5kZXgpLHIpe2Nhc2UgMDpUaSh0LGEpO2JyZWFrO2Nhc2UgMTpKaSh0LGEpfWEuY2hpbGRGbGFncyZlJiZhLmNoaWxkRmxhZ3Mmbnx8KG8rPWEuY2hpbGRDb3VudCl9fXZhciBzbz0hMTtmdW5jdGlvbiB1byh0LGUsbixyLGksbyl7cmV0dXJuIEhpKGxvKHQsaSxpLmluamVjdG9yLmdldCh1ZSksZSxuKSxyLG8pfWZ1bmN0aW9uIGNvKHQsZSxuLHIsaSxvKXt2YXIgYT1pLmluamVjdG9yLmdldCh1ZSkscz1sbyh0LGksbmV3IEdvKGEpLGUsbiksdT13byhyKTtyZXR1cm4gSG8oam8uY3JlYXRlLEhpLG51bGwsW3MsdSxvXSl9ZnVuY3Rpb24gbG8odCxlLG4scixpKXt2YXIgbz1lLmluamVjdG9yLmdldChDbiksYT1lLmluamVjdG9yLmdldChhdCk7cmV0dXJue25nTW9kdWxlOmUsaW5qZWN0b3I6dCxwcm9qZWN0YWJsZU5vZGVzOnIsc2VsZWN0b3JPck5vZGU6aSxzYW5pdGl6ZXI6byxyZW5kZXJlckZhY3Rvcnk6bixyZW5kZXJlcjpuLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCksZXJyb3JIYW5kbGVyOmF9fWZ1bmN0aW9uIGZvKHQsZSxuLHIpe3ZhciBpPXdvKG4pO3JldHVybiBIbyhqby5jcmVhdGUsVWksbnVsbCxbdCxlLGkscl0pfWZ1bmN0aW9uIGhvKHQsZSxuLHIpe3JldHVybiBuPXZvLmdldChlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIucHJvdmlkZXIudG9rZW4pfHx3byhuKSxIbyhqby5jcmVhdGUscWksbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIHBvKHQsZSxuLHIpe3JldHVybiAkcih0LGUsbixmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT0hMSxuPSExO3JldHVybiAwPT09bW8uc2l6ZT97aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufToodC5wcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1tby5nZXQodC50b2tlbik7Mzg0MCZ0LmZsYWdzJiZyJiYoZT0hMCxuPW58fHIuZGVwcmVjYXRlZEJlaGF2aW9yKX0pLHQubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3lvLmZvckVhY2goZnVuY3Rpb24ocixpKXtpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluPT09dCYmKGU9ITAsbj1ufHxyLmRlcHJlY2F0ZWRCZWhhdmlvcil9KX0pLHtoYXNPdmVycmlkZXM6ZSxoYXNEZXByZWNhdGVkT3ZlcnJpZGVzOm59KX0odCksbj1lLmhhc0RlcHJlY2F0ZWRPdmVycmlkZXM7cmV0dXJuIGUuaGFzT3ZlcnJpZGVzPyhmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQucHJvdmlkZXJzLmxlbmd0aDtlKyspe3ZhciByPXQucHJvdmlkZXJzW2VdO24mJihyLmZsYWdzfD00MDk2KTt2YXIgaT1tby5nZXQoci50b2tlbik7aSYmKHIuZmxhZ3M9LTM4NDEmci5mbGFnc3xpLmZsYWdzLHIuZGVwcz1pcihpLmRlcHMpLHIudmFsdWU9aS52YWx1ZSl9aWYoeW8uc2l6ZT4wKXt2YXIgbz1uZXcgU2V0KHQubW9kdWxlcyk7eW8uZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG8uaGFzKHIubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4pKXt2YXIgaT17dG9rZW46cixmbGFnczplLmZsYWdzfChuPzQwOTY6MCksZGVwczppcihlLmRlcHMpLHZhbHVlOmUudmFsdWUsaW5kZXg6dC5wcm92aWRlcnMubGVuZ3RofTt0LnByb3ZpZGVycy5wdXNoKGkpLHQucHJvdmlkZXJzQnlLZXlbVm4ocildPWl9fSl9fSh0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBGbn0pKSx0KTp0fShyKSl9dmFyIG1vPW5ldyBNYXAseW89bmV3IE1hcCx2bz1uZXcgTWFwO2Z1bmN0aW9uIGdvKHQpe21vLnNldCh0LnRva2VuLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuJiZ0LnRva2VuLm5nSW5qZWN0YWJsZURlZiYmImZ1bmN0aW9uIj09dHlwZW9mIHQudG9rZW4ubmdJbmplY3RhYmxlRGVmLnByb3ZpZGVkSW4mJnlvLnNldCh0LnRva2VuLHQpfWZ1bmN0aW9uIGJvKHQsZSl7dmFyIG49c3Ioc3IoZS52aWV3RGVmRmFjdG9yeSkubm9kZXNbMF0uZWxlbWVudC5jb21wb25lbnRWaWV3KTt2by5zZXQodCxuKX1mdW5jdGlvbiBfbygpe21vLmNsZWFyKCkseW8uY2xlYXIoKSx2by5jbGVhcigpfWZ1bmN0aW9uIHdvKHQpe2lmKDA9PT1tby5zaXplKXJldHVybiB0O3ZhciBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxuPW51bGwscj0wO3I8dC5ub2Rlcy5sZW5ndGg7cisrKXt2YXIgaT10Lm5vZGVzW3JdOzEmaS5mbGFncyYmKG49aSksbiYmMzg0MCZpLmZsYWdzJiZtby5oYXMoaS5wcm92aWRlci50b2tlbikmJihlLnB1c2gobi5ub2RlSW5kZXgpLG49bnVsbCl9cmV0dXJuIGV9KHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdDt0PXQuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybiBGbn0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXIodCxlW25dKTtyZXR1cm4gdDtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciBuPWUrMTtuPHQubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5ub2Rlc1tuXTtpZigxJnIuZmxhZ3MpcmV0dXJuO2lmKDM4NDAmci5mbGFncyl7dmFyIGk9ci5wcm92aWRlcixvPW1vLmdldChpLnRva2VuKTtvJiYoci5mbGFncz0tMzg0MSZyLmZsYWdzfG8uZmxhZ3MsaS5kZXBzPWlyKG8uZGVwcyksaS52YWx1ZT1vLnZhbHVlKX19fX1mdW5jdGlvbiB4byh0LGUsbixyLGksbyxhLHMsdSxjLGwsZixoKXt2YXIgZD10LmRlZi5ub2Rlc1tlXTtyZXR1cm4gWmkodCxkLG4scixpLG8sYSxzLHUsYyxsLGYsaCksMjI0JmQuZmxhZ3M/SW4odCxlKS52YWx1ZTp2b2lkIDB9ZnVuY3Rpb24gU28odCxlLG4scixpLG8sYSxzLHUsYyxsLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuICRpKHQsZCxuLHIsaSxvLGEscyx1LGMsbCxmLGgpLDIyNCZkLmZsYWdzP0luKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIEVvKHQpe3JldHVybiBIbyhqby5kZXRlY3RDaGFuZ2VzLEtpLG51bGwsW3RdKX1mdW5jdGlvbiBDbyh0KXtyZXR1cm4gSG8oam8uY2hlY2tOb0NoYW5nZXMsWWksbnVsbCxbdF0pfWZ1bmN0aW9uIE9vKHQpe3JldHVybiBIbyhqby5kZXN0cm95LHRvLG51bGwsW3RdKX12YXIgVG8sa28sQW8sam89ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5jcmVhdGU9MF09ImNyZWF0ZSIsdFt0LmRldGVjdENoYW5nZXM9MV09ImRldGVjdENoYW5nZXMiLHRbdC5jaGVja05vQ2hhbmdlcz0yXT0iY2hlY2tOb0NoYW5nZXMiLHRbdC5kZXN0cm95PTNdPSJkZXN0cm95Iix0W3QuaGFuZGxlRXZlbnQ9NF09ImhhbmRsZUV2ZW50Iix0fSh7fSk7ZnVuY3Rpb24gSW8odCxlKXtrbz10LEFvPWV9ZnVuY3Rpb24gTW8odCxlLG4scil7cmV0dXJuIElvKHQsZSksSG8oam8uaGFuZGxlRXZlbnQsdC5kZWYuaGFuZGxlRXZlbnQsbnVsbCxbdCxlLG4scl0pfWZ1bmN0aW9uIFBvKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oam9bVG9dKTtyZXR1cm4gSW8odCxWbyh0LDApKSx0LmRlZi51cGRhdGVEaXJlY3RpdmVzKGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9W10sbz0zO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTNdPWFyZ3VtZW50c1tvXTt2YXIgYT10LmRlZi5ub2Rlc1tuXTtyZXR1cm4gMD09PWU/Um8odCxhLHIsaSk6RG8odCxhLHIsaSksMTYzODQmYS5mbGFncyYmSW8odCxWbyh0LG4pKSwyMjQmYS5mbGFncz9Jbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIE5vKHQsZSl7aWYoMTI4JnQuc3RhdGUpdGhyb3cgRG4oam9bVG9dKTtyZXR1cm4gSW8odCx6byh0LDApKSx0LmRlZi51cGRhdGVSZW5kZXJlcihmdW5jdGlvbih0LG4scil7Zm9yKHZhciBpPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKWlbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP1JvKHQsYSxyLGkpOkRvKHQsYSxyLGkpLDMmYS5mbGFncyYmSW8odCx6byh0LG4pKSwyMjQmYS5mbGFncz9Jbih0LGEubm9kZUluZGV4KS52YWx1ZTp2b2lkIDB9LHQpfWZ1bmN0aW9uIFJvKHQsZSxuLGkpe2lmKFppLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShbdCxlLG5dLGkpKSl7dmFyIG89MT09PW4/aVswXTppO2lmKDE2Mzg0JmUuZmxhZ3Mpe2Zvcih2YXIgYT17fSxzPTA7czxlLmJpbmRpbmdzLmxlbmd0aDtzKyspe3ZhciB1PWUuYmluZGluZ3Nbc10sYz1vW3NdOzgmdS5mbGFncyYmKGFbKGQ9dS5ub25NaW5pZmllZE5hbWUsIm5nLXJlZmxlY3QtIisoZD1kLnJlcGxhY2UoL1skQF0vZywiXyIpLnJlcGxhY2UoRm8sZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIi0iK3RbMV0udG9Mb3dlckNhc2UoKX0pKSldPUxvKGMpKX12YXIgbD1lLnBhcmVudCxmPUFuKHQsbC5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQ7aWYobC5lbGVtZW50Lm5hbWUpZm9yKHZhciBoIGluIGEpbnVsbCE9KGM9YVtoXSk/dC5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZixoLGMpOnQucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGYsaCk7ZWxzZSB0LnJlbmRlcmVyLnNldFZhbHVlKGYsImJpbmRpbmdzPSIrSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpKX19dmFyIGR9ZnVuY3Rpb24gRG8odCxlLG4saSl7JGkuYXBwbHkodm9pZCAwLE9iamVjdChyLmQpKFt0LGUsbl0saSkpfXZhciBGbz0vKFtBLVpdKS9nO2Z1bmN0aW9uIExvKHQpe3RyeXtyZXR1cm4gbnVsbCE9dD90LnRvU3RyaW5nKCkuc2xpY2UoMCwzMCk6dH1jYXRjaCh0KXtyZXR1cm4iW0VSUk9SXSBFeGNlcHRpb24gd2hpbGUgdHJ5aW5nIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUifX1mdW5jdGlvbiBWbyh0LGUpe2Zvcih2YXIgbj1lO248dC5kZWYubm9kZXMubGVuZ3RoO24rKyl7dmFyIHI9dC5kZWYubm9kZXNbbl07aWYoMTYzODQmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gem8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciByPXQuZGVmLm5vZGVzW25dO2lmKDMmci5mbGFncyYmci5iaW5kaW5ncyYmci5iaW5kaW5ncy5sZW5ndGgpcmV0dXJuIG59cmV0dXJuIG51bGx9dmFyIEJvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMubm9kZUluZGV4PWUsbnVsbD09ZSYmKHRoaXMubm9kZUluZGV4PWU9MCksdGhpcy5ub2RlRGVmPXQuZGVmLm5vZGVzW2VdO2Zvcih2YXIgbj10aGlzLm5vZGVEZWYscj10O24mJjA9PSgxJm4uZmxhZ3MpOyluPW4ucGFyZW50O2lmKCFuKWZvcig7IW4mJnI7KW49JG4ocikscj1yLnBhcmVudDt0aGlzLmVsRGVmPW4sdGhpcy5lbFZpZXc9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbE9yQ29tcFZpZXciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQW4odGhpcy5lbFZpZXcsdGhpcy5lbERlZi5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXd8fHRoaXMudmlld30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFFyKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbE9yQ29tcFZpZXcuY29udGV4dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByb3ZpZGVyVG9rZW5zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107aWYodGhpcy5lbERlZilmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmdC5wdXNoKG4ucHJvdmlkZXIudG9rZW4pLGUrPW4uY2hpbGRDb3VudH1yZXR1cm4gdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZmVyZW5jZXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLmVsRGVmKXtVbyh0aGlzLmVsVmlldyx0aGlzLmVsRGVmLHQpO2Zvcih2YXIgZT10aGlzLmVsRGVmLm5vZGVJbmRleCsxO2U8PXRoaXMuZWxEZWYubm9kZUluZGV4K3RoaXMuZWxEZWYuY2hpbGRDb3VudDtlKyspe3ZhciBuPXRoaXMuZWxWaWV3LmRlZi5ub2Rlc1tlXTsyMDIyNCZuLmZsYWdzJiZVbyh0aGlzLmVsVmlldyxuLHQpLGUrPW4uY2hpbGRDb3VudH19cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnRSZW5kZXJFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCl7Zm9yKDt0JiYhdHIodCk7KXQ9dC5wYXJlbnQ7cmV0dXJuIHQucGFyZW50P0FuKHQucGFyZW50LCRuKHQpLm5vZGVJbmRleCk6bnVsbH0odGhpcy5lbE9yQ29tcFZpZXcpO3JldHVybiB0P3QucmVuZGVyRWxlbWVudDp2b2lkIDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZW5kZXJOb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDImdGhpcy5ub2RlRGVmLmZsYWdzP0puKHRoaXMudmlldyx0aGlzLm5vZGVEZWYpOkpuKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmxvZ0Vycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9W10sbz0xO288YXJndW1lbnRzLmxlbmd0aDtvKyspaVtvLTFdPWFyZ3VtZW50c1tvXTsyJnRoaXMubm9kZURlZi5mbGFncz8oZT10aGlzLnZpZXcuZGVmLG49dGhpcy5ub2RlRGVmLm5vZGVJbmRleCk6KGU9dGhpcy5lbFZpZXcuZGVmLG49dGhpcy5lbERlZi5ub2RlSW5kZXgpO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9MDtyPD1lO3IrKykzJnQubm9kZXNbcl0uZmxhZ3MmJm4rKztyZXR1cm4gbn0oZSxuKSxzPS0xO2UuZmFjdG9yeShmdW5jdGlvbigpe3JldHVybisrcz09PWE/KGU9dC5lcnJvcikuYmluZC5hcHBseShlLE9iamVjdChyLmQpKFt0XSxpKSk6Rm47dmFyIGV9KSxzPGEmJih0LmVycm9yKCJJbGxlZ2FsIHN0YXRlOiB0aGUgVmlld0RlZmluaXRpb25GYWN0b3J5IGRpZCBub3QgY2FsbCB0aGUgbG9nZ2VyISIpLHQuZXJyb3IuYXBwbHkodCxPYmplY3Qoci5kKShpKSkpfSx0fSgpO2Z1bmN0aW9uIFVvKHQsZSxuKXtmb3IodmFyIHIgaW4gZS5yZWZlcmVuY2VzKW5bcl09QWkodCxlLGUucmVmZXJlbmNlc1tyXSl9ZnVuY3Rpb24gSG8odCxlLG4scil7dmFyIGk9VG8sbz1rbyxhPUFvO3RyeXtUbz10O3ZhciBzPWUuYXBwbHkobixyKTtyZXR1cm4ga289byxBbz1hLFRvPWksc31jYXRjaCh0KXtpZihydCh0KXx8IWtvKXRocm93IHQ7dGhyb3cgZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIEVycm9yfHwodD1uZXcgRXJyb3IodC50b1N0cmluZygpKSksUm4odCxlKSx0fSh0LHFvKCkpfX1mdW5jdGlvbiBxbygpe3JldHVybiBrbz9uZXcgQm8oa28sQW8pOm51bGx9dmFyIEdvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmRlbGVnYXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBXbyh0aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKHQsZSkpfSx0LnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX0sdC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmU/dGhpcy5kZWxlZ2F0ZS53aGVuUmVuZGVyaW5nRG9uZSgpOlByb21pc2UucmVzb2x2ZShudWxsKX0sdH0oKSxXbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZGF0YT10aGlzLmRlbGVnYXRlLmRhdGF9cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3lOb2RlPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtFZS5kZWxldGUodC5uYXRpdmVOb2RlKX0oQ2UodCkpLHRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUmJnRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGUodCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpLHI9cW8oKTtpZihyKXt2YXIgaT1uZXcgd2UobixudWxsLHIpO2kubmFtZT10LE9lKGkpfXJldHVybiBufSx0LnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KSxuPXFvKCk7cmV0dXJuIG4mJk9lKG5ldyBfZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmNyZWF0ZVRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KHQpLG49cW8oKTtyZXR1cm4gbiYmT2UobmV3IF9lKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1DZSh0KSxyPUNlKGUpO24mJnImJm4gaW5zdGFuY2VvZiB3ZSYmbi5hZGRDaGlsZChyKSx0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSl9LHQucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9Q2UodCksaT1DZShlKSxvPUNlKG4pO3ImJmkmJnIgaW5zdGFuY2VvZiB3ZSYmci5pbnNlcnRCZWZvcmUobyxpKSx0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbil9LHQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49Q2UodCkscj1DZShlKTtuJiZyJiZuIGluc3RhbmNlb2Ygd2UmJm4ucmVtb3ZlQ2hpbGQociksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5zZWxlY3RSb290RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50KHQpLG49cW8oKTtyZXR1cm4gbiYmT2UobmV3IHdlKGUsbnVsbCxuKSksZX0sdC5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPUNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuYXR0cmlidXRlc1tyP3IrIjoiK2U6ZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9Q2UodCk7ciYmciBpbnN0YW5jZW9mIHdlJiYoci5hdHRyaWJ1dGVzW24/bisiOiIrZTplXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49Q2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSEwKSx0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49Q2UodCk7biYmbiBpbnN0YW5jZW9mIHdlJiYobi5jbGFzc2VzW2VdPSExKSx0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPUNlKHQpO2kmJmkgaW5zdGFuY2VvZiB3ZSYmKGkuc3R5bGVzW2VdPW4pLHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLG4scil9LHQucHJvdG90eXBlLnJlbW92ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1DZSh0KTtyJiZyIGluc3RhbmNlb2Ygd2UmJihyLnN0eWxlc1tlXT1udWxsKSx0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSxuKX0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUNlKHQpO3ImJnIgaW5zdGFuY2VvZiB3ZSYmKHIucHJvcGVydGllc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxuKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPUNlKHQpO3ImJnIubGlzdGVuZXJzLnB1c2gobmV3IGZ1bmN0aW9uKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5jYWxsYmFjaz1lfShlLG4pKX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5wYXJlbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9LHQucHJvdG90eXBlLm5leHRTaWJsaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLm5leHRTaWJsaW5nKHQpfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLnNldFZhbHVlKHQsZSl9LHR9KCk7ZnVuY3Rpb24gUW8odCxlLG4pe3JldHVybiBuZXcgWW8odCxlLG4pfXZhciBZbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkubW9kdWxlVHlwZT1lLGkuX2Jvb3RzdHJhcENvbXBvbmVudHM9bixpLl9uZ01vZHVsZURlZkZhY3Rvcnk9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0KXshZnVuY3Rpb24oKXtpZighc28pe3NvPSEwO3ZhciB0PXRlKCk/e3NldEN1cnJlbnROb2RlOklvLGNyZWF0ZVJvb3RWaWV3OmNvLGNyZWF0ZUVtYmVkZGVkVmlldzpmbyxjcmVhdGVDb21wb25lbnRWaWV3OmhvLGNyZWF0ZU5nTW9kdWxlUmVmOnBvLG92ZXJyaWRlUHJvdmlkZXI6Z28sb3ZlcnJpZGVDb21wb25lbnRWaWV3OmJvLGNsZWFyT3ZlcnJpZGVzOl9vLGNoZWNrQW5kVXBkYXRlVmlldzpFbyxjaGVja05vQ2hhbmdlc1ZpZXc6Q28sZGVzdHJveVZpZXc6T28sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCbyh0LGUpfSxoYW5kbGVFdmVudDpNbyx1cGRhdGVEaXJlY3RpdmVzOlBvLHVwZGF0ZVJlbmRlcmVyOk5vfTp7c2V0Q3VycmVudE5vZGU6ZnVuY3Rpb24oKXt9LGNyZWF0ZVJvb3RWaWV3OnVvLGNyZWF0ZUVtYmVkZGVkVmlldzpVaSxjcmVhdGVDb21wb25lbnRWaWV3OnFpLGNyZWF0ZU5nTW9kdWxlUmVmOiRyLG92ZXJyaWRlUHJvdmlkZXI6Rm4sb3ZlcnJpZGVDb21wb25lbnRWaWV3OkZuLGNsZWFyT3ZlcnJpZGVzOkZuLGNoZWNrQW5kVXBkYXRlVmlldzpLaSxjaGVja05vQ2hhbmdlc1ZpZXc6WWksZGVzdHJveVZpZXc6dG8sY3JlYXRlRGVidWdDb250ZXh0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBCbyh0LGUpfSxoYW5kbGVFdmVudDpmdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5kZWYuaGFuZGxlRXZlbnQodCxlLG4scil9LHVwZGF0ZURpcmVjdGl2ZXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlRGlyZWN0aXZlcygwPT09ZT94bzpTbyx0KX0sdXBkYXRlUmVuZGVyZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWYudXBkYXRlUmVuZGVyZXIoMD09PWU/eG86U28sdCl9fTtQbi5zZXRDdXJyZW50Tm9kZT10LnNldEN1cnJlbnROb2RlLFBuLmNyZWF0ZVJvb3RWaWV3PXQuY3JlYXRlUm9vdFZpZXcsUG4uY3JlYXRlRW1iZWRkZWRWaWV3PXQuY3JlYXRlRW1iZWRkZWRWaWV3LFBuLmNyZWF0ZUNvbXBvbmVudFZpZXc9dC5jcmVhdGVDb21wb25lbnRWaWV3LFBuLmNyZWF0ZU5nTW9kdWxlUmVmPXQuY3JlYXRlTmdNb2R1bGVSZWYsUG4ub3ZlcnJpZGVQcm92aWRlcj10Lm92ZXJyaWRlUHJvdmlkZXIsUG4ub3ZlcnJpZGVDb21wb25lbnRWaWV3PXQub3ZlcnJpZGVDb21wb25lbnRWaWV3LFBuLmNsZWFyT3ZlcnJpZGVzPXQuY2xlYXJPdmVycmlkZXMsUG4uY2hlY2tBbmRVcGRhdGVWaWV3PXQuY2hlY2tBbmRVcGRhdGVWaWV3LFBuLmNoZWNrTm9DaGFuZ2VzVmlldz10LmNoZWNrTm9DaGFuZ2VzVmlldyxQbi5kZXN0cm95Vmlldz10LmRlc3Ryb3lWaWV3LFBuLnJlc29sdmVEZXA9YmksUG4uY3JlYXRlRGVidWdDb250ZXh0PXQuY3JlYXRlRGVidWdDb250ZXh0LFBuLmhhbmRsZUV2ZW50PXQuaGFuZGxlRXZlbnQsUG4udXBkYXRlRGlyZWN0aXZlcz10LnVwZGF0ZURpcmVjdGl2ZXMsUG4udXBkYXRlUmVuZGVyZXI9dC51cGRhdGVSZW5kZXJlcixQbi5kaXJ0eVBhcmVudFF1ZXJpZXM9T2l9fSgpO3ZhciBlPXNyKHRoaXMuX25nTW9kdWxlRGVmRmFjdG9yeSk7cmV0dXJuIFBuLmNyZWF0ZU5nTW9kdWxlUmVmKHRoaXMubW9kdWxlVHlwZSx0fHxOLk5VTEwsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cyxlKX0sZX0oTXQpO2Z1bmN0aW9uIEtvKHQsZSxuKXt0IT1lJiYkbyhuKX1mdW5jdGlvbiBabyh0LGUpe251bGwhPXQmJiRvKGUpfWZ1bmN0aW9uIFhvKHQsZSl7bnVsbD09dCYmJG8oZSl9ZnVuY3Rpb24gJG8odCl7dGhyb3cgbmV3IEVycm9yKCJBU1NFUlRJT04gRVJST1I6ICIrdCl9ZnVuY3Rpb24gSm8odCxlLG4scil7dmFyIGk9cj9lOm47aSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpZVtuKzFdLmNhbGwodFtlW25dXSl9KHQsaSl9InVuZGVmaW5lZCI9PXR5cGVvZiBuZ0Rldk1vZGUmJigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5uZ0Rldk1vZGU9ITApLCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKHNlbGYubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmKGdsb2JhbC5uZ0Rldk1vZGU9ITApKTt2YXIgdGEsZWEsbmEscmEsaWEsb2EsYWEsc2EsdWEsY2EsbGE9Il9fbmdIb3N0TE5vZGVfXyIsZmE9UHJvbWlzZS5yZXNvbHZlKG51bGwpLGhhPVswLDBdLGRhPW51bGwscGE9ITE7ZnVuY3Rpb24gbWEodCxlKXt2YXIgbj1kYTtyZXR1cm4gc2E9dCYmdC5kYXRhLHVhPXQmJnQuZGlyZWN0aXZlcyxpYT10JiZ0LnRWaWV3LmRhdGEsYWE9dCYmMT09KDEmdC5mbGFncyksdGE9dCYmdC5yZW5kZXJlcix0JiZ0LmJpbmRpbmdJbmRleDwwJiYodC5iaW5kaW5nSW5kZXg9dC5iaW5kaW5nU3RhcnRJbmRleCksbnVsbCE9ZSYmKG5hPWUscmE9ITApLGRhPXQsb2E9dCYmdC5xdWVyaWVzLG59ZnVuY3Rpb24geWEodCl7cGF8fEpvKHVhLGRhLnRWaWV3LnZpZXdIb29rcyxkYS50Vmlldy52aWV3Q2hlY2tIb29rcyxhYSksZGEuZmxhZ3MmPS02LGRhLmxpZmVjeWNsZVN0YWdlPTEsZGEuYmluZGluZ0luZGV4PS0xLG1hKHQsbnVsbCl9ZnVuY3Rpb24gdmEoKXtiYSgpO3ZhciB0PWRhLnRWaWV3O3QuZmlyc3RUZW1wbGF0ZVBhc3M9ITEsZ2EodC5ob3N0QmluZGluZ3MpLGZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpZm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXhhKHRbZV0sdFtlKzFdKX0odC5jb21wb25lbnRzKX1mdW5jdGlvbiBnYSh0KXtpZihudWxsIT10KWZvcih2YXIgZT1kYS50Vmlldy5kaXJlY3RpdmVzLG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0saT1lW3JdO2kuaG9zdEJpbmRpbmdzJiZpLmhvc3RCaW5kaW5ncyhyLHRbbisxXSl9fWZ1bmN0aW9uIGJhKCl7aWYoIXBhKXt2YXIgdD1kYS50VmlldzsoZnVuY3Rpb24odCxlLG4pezE9PT10LmxpZmVjeWNsZVN0YWdlJiYoSm8odC5kaXJlY3RpdmVzLGUuaW5pdEhvb2tzLGUuY2hlY2tIb29rcyxuKSx0LmxpZmVjeWNsZVN0YWdlPTIpfSkoZGEsdCxhYSksSm8odWEsdC5jb250ZW50SG9va3MsdC5jb250ZW50Q2hlY2tIb29rcyxhYSl9fWZ1bmN0aW9uIF9hKHQsZSxuLHIsaSxvKXt2YXIgYSxzLHUsYyxsLGYsaCxkLHAsbT1yYSx5PW5hO3RyeXtyYT0hMCxuYT1udWxsO3ZhciB2PTI7bnVsbD09dCYmKHM9bnVsbCx1PTIsYz1udWxsLGw9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybntwYXJlbnQ6ZGEsaWQ6LTEsZmxhZ3M6MTEsbm9kZTpudWxsLGRhdGE6W10sZGlyZWN0aXZlczpudWxsLHRWaWV3Om4sY2xlYW51cDpudWxsLHJlbmRlcmVyOmUsY2hpbGQ6bnVsbCx0YWlsOm51bGwsbmV4dDpudWxsLGJpbmRpbmdTdGFydEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSx0ZW1wbGF0ZTpyLGNvbnRleHQ6aSxkeW5hbWljVmlld0NvdW50OjAsbGlmZWN5Y2xlU3RhZ2U6MSxxdWVyaWVzOm51bGwsaW5qZWN0b3I6ZGEmJmRhLmluamVjdG9yfX0oMCxyLGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5uZ1ByaXZhdGVEYXRhfHwodC5uZ1ByaXZhdGVEYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6W10sZGlyZWN0aXZlczpudWxsLGZpcnN0VGVtcGxhdGVQYXNzOiEwLGluaXRIb29rczpudWxsLGNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwscGlwZURlc3Ryb3lIb29rczpudWxsLGhvc3RCaW5kaW5nczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCxwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUsY3VycmVudE1hdGNoZXM6bnVsbH19KGUsbikpfShlLGl8fG51bGwsb3x8bnVsbCksZSxuKSxmPXJhP25hOm5hJiZuYS5wYXJlbnQsaD0ocmE/b2E6bmEmJm5hLnF1ZXJpZXMpfHxmJiZmLnF1ZXJpZXMmJmYucXVlcmllcy5jaGlsZCgpLHA9ZnVuY3Rpb24odCxlLG4scixpLG8pe3JldHVybnt0eXBlOnQsbmF0aXZlOnIsdmlldzplLHBhcmVudDpuLGNoaWxkOm51bGwsbmV4dDpudWxsLG5vZGVJbmplY3RvcjpuP24ubm9kZUluamVjdG9yOm51bGwsZGF0YTppLHF1ZXJpZXM6byx0Tm9kZTpudWxsLHBOZXh0T3JQYXJlbnQ6bnVsbCxkeW5hbWljTENvbnRhaW5lck5vZGU6bnVsbH19KHUsZGEsZixjLChkPW51bGwhPWwpP2w6bnVsbCxoKSwyPT0oMiZ1KSYmZCYmKG5nRGV2TW9kZSYmWm8obC5ub2RlLCJMVmlldy5ub2RlIHNob3VsZCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksbC5ub2RlPXApLG51bGwhPXMmJihuZ0Rldk1vZGUmJmZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9c2EpLEtvKGUubGVuZ3RoLHQsImluZGV4ICIrdCsiIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSBlbmQgb2YgYXJyIChsZW5ndGggIitlLmxlbmd0aCsiKSIpfShzKSxzYVtzXT1wLHM+PWlhLmxlbmd0aD9pYVtzXT1udWxsOnAudE5vZGU9aWFbc10scmE/KG9hPW51bGwsbmEudmlldyE9PWRhJiYyIT09bmEudHlwZXx8KG5nRGV2TW9kZSYmWm8obmEuY2hpbGQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgY2hpbGQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2V0LiIpLG5hLmNoaWxkPXApKTpuYSYmKG5nRGV2TW9kZSYmWm8obmEubmV4dCwicHJldmlvdXNPclBhcmVudE5vZGUncyBuZXh0IHByb3BlcnR5IHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldCAiK3MrIi4iKSxuYS5uZXh0PXAsbmEuZHluYW1pY0xDb250YWluZXJOb2RlJiYobmEuZHluYW1pY0xDb250YWluZXJOb2RlLm5leHQ9cCkpKSxuYT1wLHJhPSEwLHQ9cCx2PTEpLGE9bWEodC5kYXRhLHQpLGUodixuKSx2YSgpLHdhKCl9ZmluYWxseXt5YShhKSxyYT1tLG5hPXl9cmV0dXJuIHR9ZnVuY3Rpb24gd2EoKXtmb3IodmFyIHQ9ZGEuY2hpbGQ7bnVsbCE9PXQ7dD10Lm5leHQpaWYoMCE9PXQuZHluYW1pY1ZpZXdDb3VudCYmdC52aWV3cylmb3IodmFyIGU9dCxuPTA7bjxlLnZpZXdzLmxlbmd0aDtuKyspe3ZhciByPWUudmlld3Nbbl07X2EocixyLmRhdGEudGVtcGxhdGUsci5kYXRhLmNvbnRleHQsdGEpfX1mdW5jdGlvbiB4YSh0LGUpe25nRGV2TW9kZSYmQ2EoZSk7dmFyIG4scixpPXNhW2VdO25nRGV2TW9kZSYmKHI9MyxYbyhuPWksInNob3VsZCBiZSBjYWxsZWQgd2l0aCBhIG5vZGUiKSxLbyhuLnR5cGUsciwic2hvdWxkIGJlIGEgIitmdW5jdGlvbih0KXtyZXR1cm4gMT09dD8iUHJvamVjdGlvbiI6MD09dD8iQ29udGFpbmVyIjoyPT10PyJWaWV3IjozPT10PyJFbGVtZW50IjoiPHVua25vd24+In0ocikpKSxuZ0Rldk1vZGUmJlhvKGkuZGF0YSwiQ29tcG9uZW50J3MgaG9zdCBub2RlIHNob3VsZCBoYXZlIGFuIExWaWV3IGF0dGFjaGVkLiIpO3ZhciBvLGE9aS5kYXRhOzg9PSg4JmEuZmxhZ3MpJiY2JmEuZmxhZ3MmJihuZ0Rldk1vZGUmJkNhKHQsdWEpLEVhKGEsaSxkYS50Vmlldy5kaXJlY3RpdmVzW3RdLChvPXVhW3RdLEFycmF5LmlzQXJyYXkobyk/b1swXTpvKSkpfWZ1bmN0aW9uIFNhKHQpe3ZhciBlPU9hKHQpO25nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLEVhKGUuZGF0YSxlLGUudmlldy50Vmlldy5kaXJlY3RpdmVzW2UudE5vZGUuZmxhZ3M+PjEzXSx0KX1mdW5jdGlvbiBFYSh0LGUsbixyKXt2YXIgaT1tYSh0LGUpLG89bi50ZW1wbGF0ZTt0cnl7bygxJnQuZmxhZ3M/MzoyLHIpLHZhKCksd2EoKX1maW5hbGx5e3lhKGkpfX1mdW5jdGlvbiBDYSh0LGUpe251bGw9PWUmJihlPXNhKSx0Pj0oZT9lLmxlbmd0aDowKSYmJG8oImluZGV4IGV4cGVjdGVkIHRvIGJlIGEgdmFsaWQgZGF0YSBpbmRleCIpfWZ1bmN0aW9uIE9hKHQpe25nRGV2TW9kZSYmWG8odCwiZXhwZWN0aW5nIGNvbXBvbmVudCBnb3QgbnVsbCIpO3ZhciBlPXRbbGFdO3JldHVybiBuZ0Rldk1vZGUmJlhvKHQsIm9iamVjdCBpcyBub3QgYSBjb21wb25lbnQiKSxlfWNhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXc9dCx0aGlzLmNvbnRleHQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldENvbXBvbmVudENvbnRleHQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLm1hcmtGb3JDaGVjaz1mdW5jdGlvbigpeyFmdW5jdGlvbih0KXtmb3IodmFyIGU9dDtudWxsIT1lLnBhcmVudDspZS5mbGFnc3w9NCxlPWUucGFyZW50O3ZhciBuLHI7ZS5mbGFnc3w9NCxuZ0Rldk1vZGUmJlhvKGUuY29udGV4dCwicm9vdENvbnRleHQiKSwobj1lLmNvbnRleHQpLmNsZWFuPT1mYSYmKG4uY2xlYW49bmV3IFByb21pc2UoZnVuY3Rpb24odCl7cmV0dXJuIHI9dH0pLG4uc2NoZWR1bGVyKGZ1bmN0aW9uKCl7dmFyIHQsZTtlPU9hKCh0PWZ1bmN0aW9uKHQpe25nRGV2TW9kZSYmWG8odCwiY29tcG9uZW50Iik7Zm9yKHZhciBlPU9hKHQpLnZpZXc7ZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9KG4uY29tcG9uZW50KSkuY29udGV4dC5jb21wb25lbnQpLG5nRGV2TW9kZSYmWG8oZS5kYXRhLCJDb21wb25lbnQgaG9zdCBub2RlIHNob3VsZCBiZSBhdHRhY2hlZCB0byBhbiBMVmlldyIpLGZ1bmN0aW9uKG4scixpLG8pe3ZhciBhPW1hKHQsZSk7dHJ5e2VhLmJlZ2luJiZlYS5iZWdpbigpLGJhKCksZ2EoaGEpLHhhKDAsMCl9ZmluYWxseXtlYS5lbmQmJmVhLmVuZCgpLHlhKGEpfX0oKSxyKG51bGwpLG4uY2xlYW49ZmF9KSl9KHRoaXMuX3ZpZXcpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzJj0tOX0sdC5wcm90b3R5cGUucmVhdHRhY2g9ZnVuY3Rpb24oKXt0aGlzLl92aWV3LmZsYWdzfD04fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7U2EodGhpcy5jb250ZXh0KX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7cGE9ITA7dHJ5e1NhKHQpfWZpbmFsbHl7cGE9ITF9fSh0aGlzLmNvbnRleHQpfSx0fSgpLE9iamVjdChyLmIpKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jYS5jYWxsKHRoaXMsdC5kYXRhLG4pfHx0aGlzO3JldHVybiByLl9sVmlld05vZGU9dCxyfSxjYSl9LERLVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX0sRWhtazpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHIsaT1uKCJlaWhzIik7ZnVuY3Rpb24gbygpe3RyeXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2F0Y2godCl7cmV0dXJuIGkuYS5lPXQsaS5hfX1mdW5jdGlvbiBhKHQpe3JldHVybiByPXQsb319LCJFbjgrIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKX0sIkYvWEwiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJua1k3IiksaT1uKCJJVVRiIiksbz1uKCJHNUoxIiksYT1uKCJQVThMIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj10W3QubGVuZ3RoLTFdO3N3aXRjaChPYmplY3Qoci5hKShuKT90LnBvcCgpOm49dm9pZCAwLHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIE9iamVjdChvLmIpKG4pO2Nhc2UgMTpyZXR1cm4gbj9PYmplY3QoaS5hKSh0LG4pOk9iamVjdChhLmEpKHRbMF0pO2RlZmF1bHQ6cmV0dXJuIE9iamVjdChpLmEpKHQsbil9fX0sRkZPbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIHI9bigibXJTRyIpLGk9bigiMkJkaiIpLG89bigiNmFodyIpLGE9bigicHVnVCIpLHM9bigiTC9WOSIpLHU9bigiaUx4USIpLGM9bigiREtUYiIpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3N3aXRjaChpLnN5bmNFcnJvclZhbHVlPW51bGwsaS5zeW5jRXJyb3JUaHJvd249ITEsaS5zeW5jRXJyb3JUaHJvd2FibGU9ITEsaS5pc1N0b3BwZWQ9ITEsYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmkuZGVzdGluYXRpb249by5hO2JyZWFrO2Nhc2UgMTppZighZSl7aS5kZXN0aW5hdGlvbj1vLmE7YnJlYWt9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtpZihoKGUpKXt2YXIgYT1lW3MuYV0oKTtpLnN5bmNFcnJvclRocm93YWJsZT1hLnN5bmNFcnJvclRocm93YWJsZSxpLmRlc3RpbmF0aW9uPWEsYS5hZGQoaSl9ZWxzZSBpLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSk7YnJlYWt9ZGVmYXVsdDppLnN5bmNFcnJvclRocm93YWJsZT0hMCxpLmRlc3RpbmF0aW9uPW5ldyBmKGksZSxuLHIpfXJldHVybiBpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZVtzLmFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUuY3JlYXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgaT1uZXcgZSh0LG4scik7cmV0dXJuIGkuc3luY0Vycm9yVGhyb3dhYmxlPSExLGl9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dGhpcy5pc1N0b3BwZWR8fHRoaXMuX25leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNTdG9wcGVkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCx0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZUFuZFJlY3ljbGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnQsZT10aGlzLl9wYXJlbnRzO3JldHVybiB0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9wYXJlbnRzPW51bGwsdGhpcy51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkPSExLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuX3BhcmVudD10LHRoaXMuX3BhcmVudHM9ZSx0aGlzfSxlfShhLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixhKXt2YXIgcyx1PXQuY2FsbCh0aGlzKXx8dGhpczt1Ll9wYXJlbnRTdWJzY3JpYmVyPWU7dmFyIGM9dTtyZXR1cm4gT2JqZWN0KGkuYSkobik/cz1uOm4mJihzPW4ubmV4dCxyPW4uZXJyb3IsYT1uLmNvbXBsZXRlLG4hPT1vLmEmJihjPU9iamVjdC5jcmVhdGUobiksT2JqZWN0KGkuYSkoYy51bnN1YnNjcmliZSkmJnUuYWRkKGMudW5zdWJzY3JpYmUuYmluZChjKSksYy51bnN1YnNjcmliZT11LnVuc3Vic2NyaWJlLmJpbmQodSkpKSx1Ll9jb250ZXh0PWMsdS5fbmV4dD1zLHUuX2Vycm9yPXIsdS5fY29tcGxldGU9YSx1fXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCYmdGhpcy5fbmV4dCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZS5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9uZXh0LHQpJiZ0aGlzLnVuc3Vic2NyaWJlKCk6dGhpcy5fX3RyeU9yVW5zdWIodGhpcy5fbmV4dCx0KX19LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcixuPXUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nO2lmKHRoaXMuX2Vycm9yKW4mJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKHRoaXMuX2Vycm9yLHQpLHRoaXMudW5zdWJzY3JpYmUoKSk7ZWxzZSBpZihlLnN5bmNFcnJvclRocm93YWJsZSluPyhlLnN5bmNFcnJvclZhbHVlPXQsZS5zeW5jRXJyb3JUaHJvd249ITApOk9iamVjdChjLmEpKHQpLHRoaXMudW5zdWJzY3JpYmUoKTtlbHNle2lmKHRoaXMudW5zdWJzY3JpYmUoKSxuKXRocm93IHQ7T2JqZWN0KGMuYSkodCl9fX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLmlzU3RvcHBlZCl7dmFyIGU9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjtpZih0aGlzLl9jb21wbGV0ZSl7dmFyIG49ZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29tcGxldGUuY2FsbCh0Ll9jb250ZXh0KX07dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlPyh0aGlzLl9fdHJ5T3JTZXRFcnJvcihlLG4pLHRoaXMudW5zdWJzY3JpYmUoKSk6KHRoaXMuX190cnlPclVuc3ViKG4pLHRoaXMudW5zdWJzY3JpYmUoKSl9ZWxzZSB0aGlzLnVuc3Vic2NyaWJlKCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yVW5zdWI9ZnVuY3Rpb24odCxlKXt0cnl7dC5jYWxsKHRoaXMuX2NvbnRleHQsZSl9Y2F0Y2godCl7aWYodGhpcy51bnN1YnNjcmliZSgpLHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKXRocm93IHQ7T2JqZWN0KGMuYSkodCl9fSxlLnByb3RvdHlwZS5fX3RyeU9yU2V0RXJyb3I9ZnVuY3Rpb24odCxlLG4pe2lmKCF1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyBuZXcgRXJyb3IoImJhZCBjYWxsIik7dHJ5e2UuY2FsbCh0aGlzLl9jb250ZXh0LG4pfWNhdGNoKGUpe3JldHVybiB1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZz8odC5zeW5jRXJyb3JWYWx1ZT1lLHQuc3luY0Vycm9yVGhyb3duPSEwLCEwKTooT2JqZWN0KGMuYSkoZSksITApfXJldHVybiExfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYXJlbnRTdWJzY3JpYmVyO3RoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9wYXJlbnRTdWJzY3JpYmVyPW51bGwsdC51bnN1YnNjcmliZSgpfSxlfShsKTtmdW5jdGlvbiBoKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbHx8InN5bmNFcnJvclRocm93YWJsZSJpbiB0JiZ0W3MuYV19fSxGVlN5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9ZnVuY3Rpb24oKXt9LGk9ZnVuY3Rpb24oKXt9LG89ZnVuY3Rpb24oKXt9LGE9ZnVuY3Rpb24oKXt9LHM9ZnVuY3Rpb24oKXt9LHU9ZnVuY3Rpb24oKXt9fSxGYk45OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIkNjbkciKSxpPShuKCI4bU1yIiksbigiRnpxYyIpLG4oIldmNHAiKSxuKCJkV1pnIiksbigiSXAwUiIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyJAbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCV9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhIChtYXgtd2lkdGg6NTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLHIuWGEobnVsbCwxKV0sbnVsbCxudWxsKX19LEZ4YjE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pO3ZhciByPW4oIjZibEYiKSxpPW4oIit0SjQiKSxvPW4oIlM1WFEiKSxhPW4oInU2N0QiKSxzPW4oIkpjUnYiKSx1PW4oIjJlUGwiKSxjPW4oIi9XWXYiKSxsPW4oIk1jU28iKSxmPW4oIkVuOCsiKSxoPW4oInhUbGEiKSxkPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiByLmEpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9pc1NjYWxhcj8oZS5uZXh0KHQudmFsdWUpLHZvaWQgZS5jb21wbGV0ZSgpKTp0LnN1YnNjcmliZShlKX07aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaC5hXSlyZXR1cm4gT2JqZWN0KHMuYSkodCk7aWYoT2JqZWN0KHUuYSkodCkpcmV0dXJuIE9iamVjdChpLmEpKHQpO2lmKE9iamVjdChjLmEpKHQpKXJldHVybiBPYmplY3Qoby5hKSh0KTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2YgdFtmLmFdKXJldHVybiBPYmplY3QoYS5hKSh0KTt2YXIgZT1PYmplY3QobC5hKSh0KT8iYW4gaW52YWxpZCBvYmplY3QiOiInIit0KyInIjt0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3UgcHJvdmlkZWQgIitlKyIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgQXJyYXksIG9yIEl0ZXJhYmxlLiIpfX0sRnpxYzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJJcDBSIiksaT1uKCJDY25HIiksbz1uZXcgaS5vKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KGkuVikoci5kKX19KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBpLm0sdCYmKHRoaXMudmFsdWU9KHQuYm9keT90LmJvZHkuZGlyOm51bGwpfHwodC5kb2N1bWVudEVsZW1lbnQ/dC5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIil9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVikobyw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHM9ZnVuY3Rpb24oKXt9fSxHNUoxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIjZibEYiKSxpPW5ldyByLmEoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcGxldGUoKX0pO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByLmEoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gZS5jb21wbGV0ZSgpfSl9KX0odCk6aX19LEdpM2k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKSxvPW4oIlQxRE0iKTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW8uYSksZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgcyh0LGUpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5kdWVUaW1lPXQsdGhpcy5zY2hlZHVsZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdSh0LHRoaXMuZHVlVGltZSx0aGlzLnNjaGVkdWxlcikpfSx0fSgpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuZHVlVGltZT1uLGkuc2NoZWR1bGVyPXIsaS5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCxpLmxhc3RWYWx1ZT1udWxsLGkuaGFzVmFsdWU9ITEsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5sYXN0VmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLHRoaXMuYWRkKHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uPXRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKGMsdGhpcy5kdWVUaW1lLHRoaXMpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZWROZXh0KCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5kZWJvdW5jZWROZXh0PWZ1bmN0aW9uKCl7aWYodGhpcy5jbGVhckRlYm91bmNlKCksdGhpcy5oYXNWYWx1ZSl7dmFyIHQ9dGhpcy5sYXN0VmFsdWU7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmhhc1ZhbHVlPSExLHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX19LGUucHJvdG90eXBlLmNsZWFyRGVib3VuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbjtudWxsIT09dCYmKHRoaXMucmVtb3ZlKHQpLHQudW5zdWJzY3JpYmUoKSx0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj1udWxsKX0sZX0oaS5hKTtmdW5jdGlvbiBjKHQpe3QuZGVib3VuY2VkTmV4dCgpfX0sSVVUYjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBhfSk7dmFyIHI9bigiNmJsRiIpLGk9bigicHVnVCIpLG89bigiK3RKNCIpO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IHIuYShlP2Z1bmN0aW9uKG4pe3ZhciByPW5ldyBpLmEsbz0wO3JldHVybiByLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7byE9PXQubGVuZ3RoPyhuLm5leHQodFtvKytdKSxuLmNsb3NlZHx8ci5hZGQodGhpcy5zY2hlZHVsZSgpKSk6bi5jb21wbGV0ZSgpfSkpLHJ9Ok9iamVjdChvLmEpKHQpKX19LElwMFI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwidSIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBNfSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgcj1uKCJDY25HIiksaT1uKCJtclNHIiksbz1mdW5jdGlvbigpe30sYT1uZXcgci5vKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpLHM9ZnVuY3Rpb24oKXt9LHU9bmV3IHIubygiYXBwQmFzZUhyZWYiKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO3RoaXMuX3N1YmplY3Q9bmV3IHIubSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5PWU7dmFyIGk9dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VIcmVmPXQuc3RyaXBUcmFpbGluZ1NsYXNoKGwoaSkpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kub25Qb3BTdGF0ZShmdW5jdGlvbih0KXtuLl9zdWJqZWN0LmVtaXQoe3VybDpuLnBhdGgoITApLHBvcDohMCxzdGF0ZTp0LnN0YXRlLHR5cGU6dC50eXBlfSl9KX1yZXR1cm4gdC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMubm9ybWFsaXplKHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucGF0aCh0KSl9LHQucHJvdG90eXBlLmlzQ3VycmVudFBhdGhFcXVhbFRvPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPSIiKSx0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoZSt0Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKG4pKX0sdC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0LnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlLnN0YXJ0c1dpdGgodCk/ZS5zdWJzdHJpbmcodC5sZW5ndGgpOmV9KHRoaXMuX2Jhc2VIcmVmLGwoZSkpKX0sdC5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiLyIhPT10WzBdJiYodD0iLyIrdCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwodCl9LHQucHJvdG90eXBlLmdvPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5wdXNoU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPSIiKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShuLCIiLHQsZSl9LHQucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmZvcndhcmQoKX0sdC5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuYmFjaygpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7bmV4dDp0LGVycm9yOmUsY29tcGxldGU6bn0pfSx0Lm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiPyIhPT10WzBdPyI/Iit0OnR9LHQuam9pbldpdGhTbGFzaD1mdW5jdGlvbih0LGUpe2lmKDA9PXQubGVuZ3RoKXJldHVybiBlO2lmKDA9PWUubGVuZ3RoKXJldHVybiB0O3ZhciBuPTA7cmV0dXJuIHQuZW5kc1dpdGgoIi8iKSYmbisrLGUuc3RhcnRzV2l0aCgiLyIpJiZuKyssMj09bj90K2Uuc3Vic3RyaW5nKDEpOjE9PW4/dCtlOnQrIi8iK2V9LHQuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goLyN8XD98JC8pLG49ZSYmZS5pbmRleHx8dC5sZW5ndGg7cmV0dXJuIHQuc2xpY2UoMCxuLSgiLyI9PT10W24tMV0/MTowKSkrdC5zbGljZShuKX0sdH0oKTtmdW5jdGlvbiBsKHQpe3JldHVybiB0LnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9wbGF0Zm9ybUxvY2F0aW9uPWUsci5fYmFzZUhyZWY9IiIsbnVsbCE9biYmKHIuX2Jhc2VIcmVmPW4pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKTt2YXIgZT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG51bGw9PWUmJihlPSIjIiksZS5sZW5ndGg+MD9lLnN1YnN0cmluZygxKTplfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7dmFyIGU9Yy5qb2luV2l0aFNsYXNoKHRoaXMuX2Jhc2VIcmVmLHQpO3JldHVybiBlLmxlbmd0aD4wPyIjIitlOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2Mubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2Mubm9ybWFsaXplUXVlcnlQYXJhbXMocikpOzA9PWkubGVuZ3RoJiYoaT10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShzKSxoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7aWYoci5fcGxhdGZvcm1Mb2NhdGlvbj1lLG51bGw9PW4mJihuPXIuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCkpLG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJObyBiYXNlIGhyZWYgc2V0LiBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgQVBQX0JBU0VfSFJFRiB0b2tlbiBvciBhZGQgYSBiYXNlIGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50LiIpO3JldHVybiByLl9iYXNlSHJlZj1uLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUub25Qb3BTdGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUodCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UodCl9LGUucHJvdG90eXBlLmdldEJhc2VIcmVmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfSxlLnByb3RvdHlwZS5wcmVwYXJlRXh0ZXJuYWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIGMuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KX0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStjLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uc2VhcmNoKSxuPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmdD8iIitlK246ZX0sZS5wcm90b3R5cGUucHVzaFN0YXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rYy5ub3JtYWxpemVRdWVyeVBhcmFtcyhyKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLGkpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitjLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKHIpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0LGUsaSl9LGUucHJvdG90eXBlLmZvcndhcmQ9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX0sZS5wcm90b3R5cGUuYmFjaz1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfSxlfShzKSxkPXZvaWQgMCxwPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sZF0sW1siQU0iLCJQTSJdLGQsZF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sZCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sZCxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGQsInsxfSAnYXQnIHswfSIsZF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCIkIiwiVVMgRG9sbGFyIix7fSxmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKE1hdGguYWJzKHQpKSxuPXQudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1lJiYwPT09bj8xOjV9XSxtPXt9LHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5aZXJvPTBdPSJaZXJvIix0W3QuT25lPTFdPSJPbmUiLHRbdC5Ud289Ml09IlR3byIsdFt0LkZldz0zXT0iRmV3Iix0W3QuTWFueT00XT0iTWFueSIsdFt0Lk90aGVyPTVdPSJPdGhlciIsdH0oe30pLHY9bmV3IHIubygiVXNlVjRQbHVyYWxzIiksZz1mdW5jdGlvbigpe30sYj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmxvY2FsZT1lLHIuZGVwcmVjYXRlZFBsdXJhbEZuPW4scn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRQbHVyYWxDYXRlZ29yeT1mdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbj90aGlzLmRlcHJlY2F0ZWRQbHVyYWxGbihlfHx0aGlzLmxvY2FsZSx0KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLG49bVtlXTtpZihuKXJldHVybiBuO3ZhciByPWUuc3BsaXQoIi0iKVswXTtpZihuPW1bcl0pcmV0dXJuIG47aWYoImVuIj09PXIpcmV0dXJuIHA7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICInK3QrJyIuJyl9KHQpWzE4XX0oZXx8dGhpcy5sb2NhbGUpKHQpKXtjYXNlIHkuWmVybzpyZXR1cm4iemVybyI7Y2FzZSB5Lk9uZTpyZXR1cm4ib25lIjtjYXNlIHkuVHdvOnJldHVybiJ0d28iO2Nhc2UgeS5GZXc6cmV0dXJuImZldyI7Y2FzZSB5Lk1hbnk6cmV0dXJuIm1hbnkiO2RlZmF1bHQ6cmV0dXJuIm90aGVyIn19LGV9KGcpO2Z1bmN0aW9uIF8odCxlKXtlPWVuY29kZVVSSUNvbXBvbmVudChlKTt0cnl7Zm9yKHZhciBuPU9iamVjdChpLmUpKHQuc3BsaXQoIjsiKSkscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBvPXIudmFsdWUsYT1vLmluZGV4T2YoIj0iKSxzPU9iamVjdChpLmMpKC0xPT1hP1tvLCIiXTpbby5zbGljZSgwLGEpLG8uc2xpY2UoYSsxKV0sMiksdT1zWzFdO2lmKHNbMF0udHJpbSgpPT09ZSlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHUpfX1jYXRjaCh0KXtjPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobD1uLnJldHVybikmJmwuY2FsbChuKX1maW5hbGx5e2lmKGMpdGhyb3cgYy5lcnJvcn19cmV0dXJuIG51bGw7dmFyIGMsbH12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5faXRlcmFibGVEaWZmZXJzPXQsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWUsdGhpcy5fbmdFbD1uLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5faW5pdGlhbENsYXNzZXM9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nQ2xhc3MiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5fcmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiB0P3Quc3BsaXQoL1xzKy8pOnQsdGhpcy5fcmF3Q2xhc3MmJihPYmplY3Qoci5SYSkodGhpcy5fcmF3Q2xhc3MpP3RoaXMuX2l0ZXJhYmxlRGlmZmVyPXRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKTp0aGlzLl9rZXlWYWx1ZURpZmZlcj10aGlzLl9rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe2lmKHRoaXMuX2l0ZXJhYmxlRGlmZmVyKXt2YXIgdD10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTt0JiZ0aGlzLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcyh0KX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXt2YXIgZT10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKX19LHQucHJvdG90eXBlLl9hcHBseUtleVZhbHVlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5rZXksdC5jdXJyZW50VmFsdWUpfSksdC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uKHQpe3QucHJldmlvdXNWYWx1ZSYmZS5fdG9nZ2xlQ2xhc3ModC5rZXksITEpfSl9LHQucHJvdG90eXBlLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaEFkZGVkSXRlbShmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQuaXRlbSl0aHJvdyBuZXcgRXJyb3IoIk5nQ2xhc3MgY2FuIG9ubHkgdG9nZ2xlIENTUyBjbGFzc2VzIGV4cHJlc3NlZCBhcyBzdHJpbmdzLCBnb3QgIitPYmplY3Qoci5mYikodC5pdGVtKSk7ZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCEwKX0pLHQuZm9yRWFjaFJlbW92ZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0Lml0ZW0sITEpfSl9LHQucHJvdG90eXBlLl9hcHBseUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITApfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3MobiwhIXRbbl0pfSkpfSx0LnByb3RvdHlwZS5fcmVtb3ZlQ2xhc3Nlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgU2V0P3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCExKX0pKX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczsodD10LnRyaW0oKSkmJnQuc3BsaXQoL1xzKy9nKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2U/bi5fcmVuZGVyZXIuYWRkQ2xhc3Mobi5fbmdFbC5uYXRpdmVFbGVtZW50LHQpOm4uX3JlbmRlcmVyLnJlbW92ZUNsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KX0pfSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1uLHRoaXMuY291bnQ9cn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5pbmRleH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxhc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImV2ZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib2RkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXZlbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3Q29udGFpbmVyPXQsdGhpcy5fdGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPW4sdGhpcy5fZGlmZmVyPW51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdGb3JUcmFja0J5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn0sc2V0OmZ1bmN0aW9uKHQpe09iamVjdChyLlcpKCkmJm51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigidHJhY2tCeSBtdXN0IGJlIGEgZnVuY3Rpb24sIGJ1dCByZWNlaXZlZCAiK0pTT04uc3RyaW5naWZ5KHQpKyIuIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vZG9jcy90cy9sYXRlc3QvYXBpL2NvbW1vbi9pbmRleC9OZ0Zvci1kaXJlY3RpdmUuaHRtbCMhI2NoYW5nZS1wcm9wYWdhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKSx0aGlzLl90cmFja0J5Rm49dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yVGVtcGxhdGUiLHtzZXQ6ZnVuY3Rpb24odCl7dCYmKHRoaXMuX3RlbXBsYXRlPXQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe2lmKCJuZ0Zvck9mImluIHQpe3ZhciBlPXQubmdGb3JPZi5jdXJyZW50VmFsdWU7aWYoIXRoaXMuX2RpZmZlciYmZSl0cnl7dGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrZSsiJyBvZiB0eXBlICciKygobj1lKS5uYW1lfHx0eXBlb2YgbikrIicuIE5nRm9yIG9ubHkgc3VwcG9ydHMgYmluZGluZyB0byBJdGVyYWJsZXMgc3VjaCBhcyBBcnJheXMuIil9fXZhciBufSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3ZhciB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMubmdGb3JPZik7dCYmdGhpcy5fYXBwbHlDaGFuZ2VzKHQpfX0sdC5wcm90b3R5cGUuX2FwcGx5Q2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107dC5mb3JFYWNoT3BlcmF0aW9uKGZ1bmN0aW9uKHQscixpKXtpZihudWxsPT10LnByZXZpb3VzSW5kZXgpe3ZhciBvPWUuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGUuX3RlbXBsYXRlLG5ldyB4KG51bGwsZS5uZ0Zvck9mLC0xLC0xKSxpKSxhPW5ldyBFKHQsbyk7bi5wdXNoKGEpfWVsc2UgbnVsbD09aT9lLl92aWV3Q29udGFpbmVyLnJlbW92ZShyKToobz1lLl92aWV3Q29udGFpbmVyLmdldChyKSxlLl92aWV3Q29udGFpbmVyLm1vdmUobyxpKSxhPW5ldyBFKHQsbyksbi5wdXNoKGEpKX0pO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXRoaXMuX3BlclZpZXdDaGFuZ2UobltyXS52aWV3LG5bcl0ucmVjb3JkKTtyPTA7Zm9yKHZhciBpPXRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoO3I8aTtyKyspe3ZhciBvPXRoaXMuX3ZpZXdDb250YWluZXIuZ2V0KHIpO28uY29udGV4dC5pbmRleD1yLG8uY29udGV4dC5jb3VudD1pLG8uY29udGV4dC5uZ0Zvck9mPXRoaXMubmdGb3JPZn10LmZvckVhY2hJZGVudGl0eUNoYW5nZShmdW5jdGlvbih0KXtlLl92aWV3Q29udGFpbmVyLmdldCh0LmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfSl9LHQucHJvdG90eXBlLl9wZXJWaWV3Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7dC5jb250ZXh0LiRpbXBsaWNpdD1lLml0ZW19LHR9KCksRT1mdW5jdGlvbih0LGUpe3RoaXMucmVjb3JkPXQsdGhpcy52aWV3PWV9LEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX2NvbnRleHQ9bmV3IE8sdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWYiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPXQsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZlRoZW4iLHtzZXQ6ZnVuY3Rpb24odCl7VCgibmdJZlRoZW4iLHQpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj10LHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmdJZkVsc2UiLHtzZXQ6ZnVuY3Rpb24odCl7VCgibmdJZkVsc2UiLHQpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj10LHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl91cGRhdGVWaWV3PWZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfSx0fSgpLE89ZnVuY3Rpb24oKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfTtmdW5jdGlvbiBUKHQsZSl7aWYoZSYmIWUuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcih0KyIgbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyIrT2JqZWN0KHIuZmIpKGUpKyInLiIpfXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fZGlmZmVycz10LHRoaXMuX25nRWw9ZSx0aGlzLl9yZW5kZXJlcj1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nU3R5bGUiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbmdTdHlsZT10LCF0aGlzLl9kaWZmZXImJnQmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHQpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9kaWZmZXIpe3ZhciB0PXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksbnVsbCl9KSx0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KX0sdC5wcm90b3R5cGUuX3NldFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0KGkuYykodC5zcGxpdCgiLiIpLDIpLHI9blswXSxvPW5bMV07bnVsbCE9KGU9bnVsbCE9ZSYmbz8iIitlK286ZSk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsZSk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpfSx0fSgpLEE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjpmdW5jdGlvbih0KXt0aHJvdyB0fX0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0sdH0oKSxqPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVN1YnNjcmlwdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxmdW5jdGlvbih0KXt0aHJvdyB0fSl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0fSgpKSxJPW5ldyBBLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZj10LHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGx9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCl9LHQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb2JqP3QhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybSh0KSk6dGhpcy5fbGF0ZXN0VmFsdWU9PT10aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlP3RoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU6KHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhpcy5fbGF0ZXN0VmFsdWUsci5QLndyYXAodGhpcy5fbGF0ZXN0VmFsdWUpKToodCYmdGhpcy5fc3Vic2NyaWJlKHQpLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9dGhpcy5fbGF0ZXN0VmFsdWUsdGhpcy5fbGF0ZXN0VmFsdWUpfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fb2JqPXQsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3kodCksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbih0LGZ1bmN0aW9uKG4pe3JldHVybiBlLl91cGRhdGVMYXRlc3RWYWx1ZSh0LG4pfSl9LHQucHJvdG90eXBlLl9zZWxlY3RTdHJhdGVneT1mdW5jdGlvbihlKXtpZihPYmplY3Qoci5UYSkoZSkpcmV0dXJuIGo7aWYoT2JqZWN0KHIuU2EpKGUpKXJldHVybiBJO3Rocm93IG49dCxFcnJvcigiSW52YWxpZFBpcGVBcmd1bWVudDogJyIrZSsiJyBmb3IgcGlwZSAnIitPYmplY3Qoci5mYikobikrIiciKTt2YXIgbn0sdC5wcm90b3R5cGUuX2Rpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9LHQucHJvdG90eXBlLl91cGRhdGVMYXRlc3RWYWx1ZT1mdW5jdGlvbih0LGUpe3Q9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1lLHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKSl9LHR9KCksUD1mdW5jdGlvbigpe30sTj1uZXcgci5vKCJEb2N1bWVudFRva2VuIiksUj0iYnJvd3NlciIsRD0ic2VydmVyIjtmdW5jdGlvbiBGKHQpe3JldHVybiB0PT09Un1mdW5jdGlvbiBMKHQpe3JldHVybiB0PT09RH19LEpjUnY6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oInhUbGEiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3IuYV0oKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5zdWJzY3JpYmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTtyZXR1cm4gbi5zdWJzY3JpYmUoZSl9fX0sSzlJYTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgcj1uKCJtclNHIiksaT1uKCI2YmxGIiksbz1uKCJGRk9vIiksYT1uKCJwdWdUIikscz1uKCI4ZzhBIiksdT1uKCJ1TWFPIiksYz1uKCJML1Y5IiksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLmRlc3RpbmF0aW9uPWUsbn1yZXR1cm4gci5iKGUsdCksZX0oby5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGUub2JzZXJ2ZXJzPVtdLGUuY2xvc2VkPSExLGUuaXNTdG9wcGVkPSExLGUuaGFzRXJyb3I9ITEsZS50aHJvd25FcnJvcj1udWxsLGV9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlW2MuYV09ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwodGhpcyl9LGUucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGgodGhpcyx0aGlzKTtyZXR1cm4gZS5vcGVyYXRvcj10LGV9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTtpZighdGhpcy5pc1N0b3BwZWQpZm9yKHZhciBlPXRoaXMub2JzZXJ2ZXJzLG49ZS5sZW5ndGgscj1lLnNsaWNlKCksaT0wO2k8bjtpKyspcltpXS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO3RoaXMuaGFzRXJyb3I9ITAsdGhpcy50aHJvd25FcnJvcj10LHRoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgZT10aGlzLm9ic2VydmVycyxuPWUubGVuZ3RoLHI9ZS5zbGljZSgpLGk9MDtpPG47aSsrKXJbaV0uZXJyb3IodCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHMuYTt0aGlzLmlzU3RvcHBlZD0hMDtmb3IodmFyIHQ9dGhpcy5vYnNlcnZlcnMsZT10Lmxlbmd0aCxuPXQuc2xpY2UoKSxyPTA7cjxlO3IrKyluW3JdLmNvbXBsZXRlKCk7dGhpcy5vYnNlcnZlcnMubGVuZ3RoPTB9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9bnVsbH0sZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZT1mdW5jdGlvbihlKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO3JldHVybiB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO3JldHVybiB0aGlzLmhhc0Vycm9yPyh0LmVycm9yKHRoaXMudGhyb3duRXJyb3IpLGEuYS5FTVBUWSk6dGhpcy5pc1N0b3BwZWQ/KHQuY29tcGxldGUoKSxhLmEuRU1QVFkpOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLG5ldyB1LmEodGhpcyx0KSl9LGUucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBpLmE7cmV0dXJuIHQuc291cmNlPXRoaXMsdH0sZS5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGgodCxlKX0sZX0oaS5hKSxoPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuZGVzdGluYXRpb249ZSxyLnNvdXJjZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLm5leHQmJmUubmV4dCh0KX0sZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZXN0aW5hdGlvbjtlJiZlLmVycm9yJiZ0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGVzdGluYXRpb247dCYmdC5jb21wbGV0ZSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZS5zdWJzY3JpYmUodCk6YS5hLkVNUFRZfSxlfShmKX0sIkwvVjkiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJyeFN1YnNjcmliZXIiKToiQEByeFN1YnNjcmliZXIifSxMQzVwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJuNmdHIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSxNR0JTOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJtclNHIiksaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5RXJyb3I9ZnVuY3Rpb24odCxlKXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG4oIkZGT28iKS5hKX0sTWNTbzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSwiTXIrWCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIlNNc20iKSxuKCJGenFjIiksbigiV2Y0cCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWljb257YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZpbGw6Y3VycmVudENvbG9yO2hlaWdodDoyNHB4O3dpZHRoOjI0cHh9Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99Il0sZGF0YTp7fX0pKTtmdW5jdGlvbiBvKHQpe3JldHVybiByLmliKDIsW3IuWGEobnVsbCwwKV0sbnVsbCxudWxsKX19LE5TWUw6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBndH0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFd0fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGFlfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSk7dmFyIHI9bigibXJTRyIpLGk9bigiaWhZWSIpO2Z1bmN0aW9uIG8oKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3N9ZnVuY3Rpb24gYSh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGkuZDtjYXNlIDE6cmV0dXJuIHRbMF07ZGVmYXVsdDpyZXR1cm4gbmV3IGkubih0KX19ZnVuY3Rpb24gcyh0LGUsbixyLG8sYSl7dm9pZCAwPT09byYmKG89e30pLHZvaWQgMD09PWEmJihhPXt9KTt2YXIgcz1bXSx1PVtdLGM9LTEsbD1udWxsO2lmKHIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10Lm9mZnNldCxyPW49PWMsZj1yJiZsfHx7fTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4sdT10W25dO2lmKCJvZmZzZXQiIT09bilzd2l0Y2gocj1lLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShyLHMpLHUpe2Nhc2UgaS5vOnU9b1tuXTticmVhaztjYXNlIGkuYTp1PWFbbl07YnJlYWs7ZGVmYXVsdDp1PWUubm9ybWFsaXplU3R5bGVWYWx1ZShuLHIsdSxzKX1mW3JdPXV9KSxyfHx1LnB1c2goZiksbD1mLGM9bn0pLHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGFuaW1hdGUgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIC0gIitzLmpvaW4oIlxuIC0gIikpO3JldHVybiB1fWZ1bmN0aW9uIHUodCxlLG4scil7c3dpdGNoKGUpe2Nhc2Uic3RhcnQiOnQub25TdGFydChmdW5jdGlvbigpe3JldHVybiByKG4mJmMobiwic3RhcnQiLHQpKX0pO2JyZWFrO2Nhc2UiZG9uZSI6dC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gcihuJiZjKG4sImRvbmUiLHQpKX0pO2JyZWFrO2Nhc2UiZGVzdHJveSI6dC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gcihuJiZjKG4sImRlc3Ryb3kiLHQpKX0pfX1mdW5jdGlvbiBjKHQsZSxuKXt2YXIgcj1uLnRvdGFsVGltZSxpPWwodC5lbGVtZW50LHQudHJpZ2dlck5hbWUsdC5mcm9tU3RhdGUsdC50b1N0YXRlLGV8fHQucGhhc2VOYW1lLHZvaWQgMD09cj90LnRvdGFsVGltZTpyLCEhbi5kaXNhYmxlZCksbz10Ll9kYXRhO3JldHVybiBudWxsIT1vJiYoaS5fZGF0YT1vKSxpfWZ1bmN0aW9uIGwodCxlLG4scixpLG8sYSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPSIiKSx2b2lkIDA9PT1vJiYobz0wKSx7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsZnJvbVN0YXRlOm4sdG9TdGF0ZTpyLHBoYXNlTmFtZTppLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhYX19ZnVuY3Rpb24gZih0LGUsbil7dmFyIHI7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXA/KHI9dC5nZXQoZSkpfHx0LnNldChlLHI9bik6KHI9dFtlXSl8fChyPXRbZV09bikscn1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpO3JldHVyblt0LnN1YnN0cmluZygxLGUpLHQuc3Vic3RyKGUrMSldfXZhciBkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LHA9ZnVuY3Rpb24odCxlKXtyZXR1cm4hMX0sbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHk9bygpO2lmKHl8fCJ1bmRlZmluZWQiIT10eXBlb2YgRWxlbWVudCl7aWYoZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbnRhaW5zKGUpfSx5fHxFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5tYXRjaGVzKGUpfTtlbHNle3ZhciB2PUVsZW1lbnQucHJvdG90eXBlLGc9di5tYXRjaGVzU2VsZWN0b3J8fHYubW96TWF0Y2hlc1NlbGVjdG9yfHx2Lm1zTWF0Y2hlc1NlbGVjdG9yfHx2Lm9NYXRjaGVzU2VsZWN0b3J8fHYud2Via2l0TWF0Y2hlc1NlbGVjdG9yO2cmJihwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGcuYXBwbHkodCxbZV0pfSl9bT1mdW5jdGlvbih0LGUsbil7dmFyIGk9W107aWYobilpLnB1c2guYXBwbHkoaSxPYmplY3Qoci5kKSh0LnF1ZXJ5U2VsZWN0b3JBbGwoZSkpKTtlbHNle3ZhciBvPXQucXVlcnlTZWxlY3RvcihlKTtvJiZpLnB1c2gobyl9cmV0dXJuIGl9fXZhciBiPW51bGwsXz0hMTtmdW5jdGlvbiB3KHQpe2J8fChiPSgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmJvZHk6bnVsbCl8fHt9LF89ISFiLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBiLnN0eWxlKTt2YXIgZT0hMDtyZXR1cm4gYi5zdHlsZSYmIWZ1bmN0aW9uKHQpe3JldHVybiJlYmtpdCI9PXQuc3Vic3RyaW5nKDEsNil9KHQpJiYhKGU9dCBpbiBiLnN0eWxlKSYmXyYmKGU9IldlYmtpdCIrdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnN1YnN0cigxKWluIGIuc3R5bGUpLGV9dmFyIHg9cCxTPWQsRT1tO2Z1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpO2Vbcl09dFtuXX0pLGV9dmFyIE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBFKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnx8IiJ9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4scixvLGEscyl7cmV0dXJuIHZvaWQgMD09PWEmJihhPVtdKSxuZXcgaS5kKG4scil9LHR9KCksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQuTk9PUD1uZXcgTyx0fSgpLGs9MWUzO2Z1bmN0aW9uIEEodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWV8fGUubGVuZ3RoPDI/MDpqKHBhcnNlRmxvYXQoZVsxXSksZVsyXSl9ZnVuY3Rpb24gaih0LGUpe3N3aXRjaChlKXtjYXNlInMiOnJldHVybiB0Kms7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gSSh0LGUsbil7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/dDpmdW5jdGlvbih0LGUsbil7dmFyIHIsaT0wLG89IiI7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgYT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09YSlyZXR1cm4gZS5wdXNoKCdUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZC4nKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07cj1qKHBhcnNlRmxvYXQoYVsxXSksYVsyXSk7dmFyIHM9YVszXTtudWxsIT1zJiYoaT1qKE1hdGguZmxvb3IocGFyc2VGbG9hdChzKSksYVs0XSkpO3ZhciB1PWFbNV07dSYmKG89dSl9ZWxzZSByPXQ7aWYoIW4pe3ZhciBjPSExLGw9ZS5sZW5ndGg7cjwwJiYoZS5wdXNoKCJEdXJhdGlvbiB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksYz0hMCksaTwwJiYoZS5wdXNoKCJEZWxheSB2YWx1ZXMgYmVsb3cgMCBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIHN0ZXAuIiksYz0hMCksYyYmZS5zcGxpY2UobCwwLCdUaGUgcHJvdmlkZWQgdGltaW5nIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZC4nKX1yZXR1cm57ZHVyYXRpb246cixkZWxheTppLGVhc2luZzpvfX0odCxlLG4pfWZ1bmN0aW9uIE0odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7ZVtuXT10W25dfSksZX1mdW5jdGlvbiBQKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj17fSksZSlmb3IodmFyIHIgaW4gdCluW3JdPXRbcl07ZWxzZSBNKHQsbik7cmV0dXJuIG59ZnVuY3Rpb24gTih0LGUsbil7cmV0dXJuIG4/ZSsiOiIrbisiOyI6IiJ9ZnVuY3Rpb24gUih0KXtmb3IodmFyIGU9IiIsbj0wO248dC5zdHlsZS5sZW5ndGg7bisrKWUrPU4oMCxyPXQuc3R5bGUuaXRlbShuKSx0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUocikpO2Zvcih2YXIgciBpbiB0LnN0eWxlKXQuc3R5bGUuaGFzT3duUHJvcGVydHkocikmJiFyLnN0YXJ0c1dpdGgoIl8iKSYmKGUrPU4oMCxyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKSx0LnN0eWxlW3JdKSk7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIixlKX1mdW5jdGlvbiBEKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9cShuKTt0LnN0eWxlW3JdPWVbbl19KSxvKCkmJlIodCkpfWZ1bmN0aW9uIEYodCxlKXt0LnN0eWxlJiYoT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj1xKGUpO3Quc3R5bGVbbl09IiJ9KSxvKCkmJlIodCkpfWZ1bmN0aW9uIEwodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/MT09dC5sZW5ndGg/dFswXTpPYmplY3QoaS5pKSh0KTp0fXZhciBWPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIHoodCl7dmFyIGU9W107aWYoInN0cmluZyI9PXR5cGVvZiB0KXtmb3IodmFyIG49dC50b1N0cmluZygpLHI9dm9pZCAwO3I9Vi5leGVjKG4pOyllLnB1c2goclsxXSk7Vi5sYXN0SW5kZXg9MH1yZXR1cm4gZX1mdW5jdGlvbiBCKHQsZSxuKXt2YXIgcj10LnRvU3RyaW5nKCksaT1yLnJlcGxhY2UoVixmdW5jdGlvbih0LHIpe3ZhciBpPWVbcl07cmV0dXJuIGUuaGFzT3duUHJvcGVydHkocil8fChuLnB1c2goIlBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBhbmltYXRpb24gcGFyYW0gIityKSxpPSIiKSxpLnRvU3RyaW5nKCl9KTtyZXR1cm4gaT09cj90Oml9ZnVuY3Rpb24gVSh0KXtmb3IodmFyIGU9W10sbj10Lm5leHQoKTshbi5kb25lOyllLnB1c2gobi52YWx1ZSksbj10Lm5leHQoKTtyZXR1cm4gZX12YXIgSD0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gcSh0KXtyZXR1cm4gdC5yZXBsYWNlKEgsZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIHRbMV0udG9VcHBlckNhc2UoKX0pfWZ1bmN0aW9uIEcodCxlKXtyZXR1cm4gMD09PXR8fDA9PT1lfWZ1bmN0aW9uIFcodCxlLG4pe3ZhciByPU9iamVjdC5rZXlzKG4pO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCl7dmFyIGk9ZVswXSxvPVtdO2lmKHIuZm9yRWFjaChmdW5jdGlvbih0KXtpLmhhc093blByb3BlcnR5KHQpfHxvLnB1c2godCksaVt0XT1uW3RdfSksby5sZW5ndGgpZm9yKHZhciBhPWZ1bmN0aW9uKCl7dmFyIG49ZVtzXTtvLmZvckVhY2goZnVuY3Rpb24oZSl7bltlXT1ZKHQsZSl9KX0scz0xO3M8ZS5sZW5ndGg7cysrKWEoKX1yZXR1cm4gZX1mdW5jdGlvbiBRKHQsZSxuKXtzd2l0Y2goZS50eXBlKXtjYXNlIDc6cmV0dXJuIHQudmlzaXRUcmlnZ2VyKGUsbik7Y2FzZSAwOnJldHVybiB0LnZpc2l0U3RhdGUoZSxuKTtjYXNlIDE6cmV0dXJuIHQudmlzaXRUcmFuc2l0aW9uKGUsbik7Y2FzZSAyOnJldHVybiB0LnZpc2l0U2VxdWVuY2UoZSxuKTtjYXNlIDM6cmV0dXJuIHQudmlzaXRHcm91cChlLG4pO2Nhc2UgNDpyZXR1cm4gdC52aXNpdEFuaW1hdGUoZSxuKTtjYXNlIDU6cmV0dXJuIHQudmlzaXRLZXlmcmFtZXMoZSxuKTtjYXNlIDY6cmV0dXJuIHQudmlzaXRTdHlsZShlLG4pO2Nhc2UgODpyZXR1cm4gdC52aXNpdFJlZmVyZW5jZShlLG4pO2Nhc2UgOTpyZXR1cm4gdC52aXNpdEFuaW1hdGVDaGlsZChlLG4pO2Nhc2UgMTA6cmV0dXJuIHQudmlzaXRBbmltYXRlUmVmKGUsbik7Y2FzZSAxMTpyZXR1cm4gdC52aXNpdFF1ZXJ5KGUsbik7Y2FzZSAxMjpyZXR1cm4gdC52aXNpdFN0YWdnZXIoZSxuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHJlc29sdmUgYW5pbWF0aW9uIG1ldGFkYXRhIG5vZGUgIyIrZS50eXBlKX19ZnVuY3Rpb24gWSh0LGUpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX12YXIgSz0iKiIsWj1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksWD1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uICQodCxlKXt2YXIgbj1aLmhhcyh0KXx8WC5oYXModCkscj1aLmhhcyhlKXx8WC5oYXMoZSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7dmFyIGE9dD09S3x8dD09aSxzPWU9PUt8fGU9PW87cmV0dXJuIWEmJm4mJiJib29sZWFuIj09dHlwZW9mIGkmJihhPWk/Wi5oYXModCk6WC5oYXModCkpLCFzJiZyJiYiYm9vbGVhbiI9PXR5cGVvZiBvJiYocz1vP1ouaGFzKGUpOlguaGFzKGUpKSxhJiZzfX12YXIgSj1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiB0dCh0LGUsbil7cmV0dXJuIG5ldyBldCh0KS5idWlsZChlLG4pfXZhciBldD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZHJpdmVyPXR9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IG50KGUpO3JldHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKG4pLFEodGhpcyxMKHQpLG4pfSx0LnByb3RvdHlwZS5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZT1mdW5jdGlvbih0KXt0LmN1cnJlbnRRdWVyeVNlbGVjdG9yPSIiLHQuY29sbGVjdGVkU3R5bGVzPXt9LHQuY29sbGVjdGVkU3R5bGVzWyIiXT17fSx0LmN1cnJlbnRUaW1lPTB9LHQucHJvdG90eXBlLnZpc2l0VHJpZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLnF1ZXJ5Q291bnQ9MCxpPWUuZGVwQ291bnQ9MCxvPVtdLGE9W107cmV0dXJuIkAiPT10Lm5hbWUuY2hhckF0KDApJiZlLmVycm9ycy5wdXNoKCJhbmltYXRpb24gdHJpZ2dlcnMgY2Fubm90IGJlIHByZWZpeGVkIHdpdGggYW4gYEBgIHNpZ24gKGUuZy4gdHJpZ2dlcignQGZvbycsIFsuLi5dKSkiKSx0LmRlZmluaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7aWYobi5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShlKSwwPT10LnR5cGUpe3ZhciBzPXQsdT1zLm5hbWU7dS50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChmdW5jdGlvbih0KXtzLm5hbWU9dCxvLnB1c2gobi52aXNpdFN0YXRlKHMsZSkpfSkscy5uYW1lPXV9ZWxzZSBpZigxPT10LnR5cGUpe3ZhciBjPW4udmlzaXRUcmFuc2l0aW9uKHQsZSk7cis9Yy5xdWVyeUNvdW50LGkrPWMuZGVwQ291bnQsYS5wdXNoKGMpfWVsc2UgZS5lcnJvcnMucHVzaCgib25seSBzdGF0ZSgpIGFuZCB0cmFuc2l0aW9uKCkgZGVmaW5pdGlvbnMgY2FuIHNpdCBpbnNpZGUgb2YgYSB0cmlnZ2VyKCkiKX0pLHt0eXBlOjcsbmFtZTp0Lm5hbWUsc3RhdGVzOm8sdHJhbnNpdGlvbnM6YSxxdWVyeUNvdW50OnIsZGVwQ291bnQ6aSxvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy52aXNpdFN0eWxlKHQuc3R5bGVzLGUpLHI9dC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKG4uY29udGFpbnNEeW5hbWljU3R5bGVzKXt2YXIgaT1uZXcgU2V0LG89cnx8e307aWYobi5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZihydCh0KSl7dmFyIGU9dDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ooZVt0XSkuZm9yRWFjaChmdW5jdGlvbih0KXtvLmhhc093blByb3BlcnR5KHQpfHxpLmFkZCh0KX0pfSl9fSksaS5zaXplKXt2YXIgYT1VKGkudmFsdWVzKCkpO2UuZXJyb3JzLnB1c2goJ3N0YXRlKCInK3QubmFtZSsnIiwgLi4uKSBtdXN0IGRlZmluZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgc3R5bGUgc3Vic3RpdHV0aW9uczogJythLmpvaW4oIiwgIikpfX1yZXR1cm57dHlwZTowLG5hbWU6dC5uYW1lLHN0eWxlOm4sb3B0aW9uczpyP3twYXJhbXM6cn06bnVsbH19LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDt2YXIgbixyLGksbz1RKHRoaXMsTCh0LmFuaW1hdGlvbiksZSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczoobj10LmV4cHIscj1lLmVycm9ycyxpPVtdLCJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe2lmKCI6Ij09dFswXSl7dmFyIHI9ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPnBhcnNlRmxvYXQodCl9O2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHBhcnNlRmxvYXQoZSk8cGFyc2VGbG9hdCh0KX07ZGVmYXVsdDpyZXR1cm4gZS5wdXNoKCdUaGUgdHJhbnNpdGlvbiBhbGlhcyB2YWx1ZSAiJyt0KyciIGlzIG5vdCBzdXBwb3J0ZWQnKSwiKiA9PiAqIn19KHQsbik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHZvaWQgZS5wdXNoKHIpO3Q9cn12YXIgaT10Lm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBuLnB1c2goJ1RoZSBwcm92aWRlZCB0cmFuc2l0aW9uIGV4cHJlc3Npb24gIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksZTt2YXIgbz1pWzFdLGE9aVsyXSxzPWlbM107ZS5wdXNoKCQobyxzKSksIjwiIT1hWzBdfHxvPT1LJiZzPT1LfHxlLnB1c2goJChzLG8pKX0odCxpLHIpfSk6aS5wdXNoKG4pLGkpLGFuaW1hdGlvbjpvLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczppdCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gUShuLHQsZSl9KSxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEdyb3VwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuY3VycmVudFRpbWUsaT0wLG89dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7ZS5jdXJyZW50VGltZT1yO3ZhciBvPVEobix0LGUpO3JldHVybiBpPU1hdGgubWF4KGksZS5jdXJyZW50VGltZSksb30pO3JldHVybiBlLmN1cnJlbnRUaW1lPWkse3R5cGU6MyxzdGVwczpvLG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1udWxsO2lmKHQuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpbj10O2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiBvdChJKHQsZSkuZHVyYXRpb24sMCwiIik7dmFyIHI9dDtpZihyLnNwbGl0KC9ccysvKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJ7Ij09dC5jaGFyQXQoMCkmJiJ7Ij09dC5jaGFyQXQoMSl9KSl7dmFyIGk9b3QoMCwwLCIiKTtyZXR1cm4gaS5keW5hbWljPSEwLGkuc3RyVmFsdWU9cixpfXJldHVybiBvdCgobj1ufHxJKHIsZSkpLmR1cmF0aW9uLG4uZGVsYXksbi5lYXNpbmcpfSh0LnRpbWluZ3MsZS5lcnJvcnMpO2UuY3VycmVudEFuaW1hdGVUaW1pbmdzPXI7dmFyIG89dC5zdHlsZXM/dC5zdHlsZXM6T2JqZWN0KGkuaykoe30pO2lmKDU9PW8udHlwZSluPXRoaXMudmlzaXRLZXlmcmFtZXMobyxlKTtlbHNle3ZhciBhPXQuc3R5bGVzLHM9ITE7aWYoIWEpe3M9ITA7dmFyIHU9e307ci5lYXNpbmcmJih1LmVhc2luZz1yLmVhc2luZyksYT1PYmplY3QoaS5rKSh1KX1lLmN1cnJlbnRUaW1lKz1yLmR1cmF0aW9uK3IuZGVsYXk7dmFyIGM9dGhpcy52aXNpdFN0eWxlKGEsZSk7Yy5pc0VtcHR5U3RlcD1zLG49Y31yZXR1cm4gZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTo0LHRpbWluZ3M6cixzdHlsZTpuLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLnZpc2l0U3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9tYWtlU3R5bGVBc3QodCxlKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChuLGUpLG59LHQucHJvdG90eXBlLl9tYWtlU3R5bGVBc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXTtBcnJheS5pc0FycmF5KHQuc3R5bGVzKT90LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdD90PT1pLmE/bi5wdXNoKHQpOmUuZXJyb3JzLnB1c2goIlRoZSBwcm92aWRlZCBzdHlsZSBzdHJpbmcgdmFsdWUgIit0KyIgaXMgbm90IGFsbG93ZWQuIik6bi5wdXNoKHQpfSk6bi5wdXNoKHQuc3R5bGVzKTt2YXIgcj0hMSxvPW51bGw7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtpZihydCh0KSl7dmFyIGU9dCxuPWUuZWFzaW5nO2lmKG4mJihvPW4sZGVsZXRlIGUuZWFzaW5nKSwhcilmb3IodmFyIGkgaW4gZSlpZihlW2ldLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7cj0hMDticmVha319fSkse3R5cGU6NixzdHlsZXM6bixlYXNpbmc6byxvZmZzZXQ6dC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlU3R5bGVBc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtyJiZvPjAmJihvLT1yLmR1cmF0aW9uK3IuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2lmKG4uX2RyaXZlci52YWxpZGF0ZVN0eWxlUHJvcGVydHkocikpe3ZhciBhLHMsdSxjPWUuY29sbGVjdGVkU3R5bGVzW2UuY3VycmVudFF1ZXJ5U2VsZWN0b3JdLGw9Y1tyXSxmPSEwO2wmJihvIT1pJiZvPj1sLnN0YXJ0VGltZSYmaTw9bC5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaCgnVGhlIENTUyBwcm9wZXJ0eSAiJytyKyciIHRoYXQgZXhpc3RzIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK2wuc3RhcnRUaW1lKydtcyIgYW5kICInK2wuZW5kVGltZSsnbXMiIGlzIGFsc28gYmVpbmcgYW5pbWF0ZWQgaW4gYSBwYXJhbGxlbCBhbmltYXRpb24gYmV0d2VlbiB0aGUgdGltZXMgb2YgIicrbysnbXMiIGFuZCAiJytpKydtcyInKSxmPSExKSxvPWwuc3RhcnRUaW1lKSxmJiYoY1tyXT17c3RhcnRUaW1lOm8sZW5kVGltZTppfSksZS5vcHRpb25zJiYoYT1lLmVycm9ycyxzPWUub3B0aW9ucy5wYXJhbXN8fHt9LCh1PXoodFtyXSkpLmxlbmd0aCYmdS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3MuaGFzT3duUHJvcGVydHkodCl8fGEucHVzaCgiVW5hYmxlIHRvIHJlc29sdmUgdGhlIGxvY2FsIGFuaW1hdGlvbiBwYXJhbSAiK3QrIiBpbiB0aGUgZ2l2ZW4gbGlzdCBvZiB2YWx1ZXMiKX0pKX1lbHNlIGUuZXJyb3JzLnB1c2goJ1RoZSBwcm92aWRlZCBhbmltYXRpb24gcHJvcGVydHkgIicrcisnIiBpcyBub3QgYSBzdXBwb3J0ZWQgQ1NTIHByb3BlcnR5IGZvciBhbmltYXRpb25zJyl9KX0pfSx0LnByb3RvdHlwZS52aXNpdEtleWZyYW1lcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj17dHlwZTo1LHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFlLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gZS5lcnJvcnMucHVzaCgia2V5ZnJhbWVzKCkgbXVzdCBiZSBwbGFjZWQgaW5zaWRlIG9mIGEgY2FsbCB0byBhbmltYXRlKCkiKSxyO3ZhciBpPTAsbz1bXSxhPSExLHM9ITEsdT0wLGM9dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7dmFyIHI9bi5fbWFrZVN0eWxlQXN0KHQsZSksYz1udWxsIT1yLm9mZnNldD9yLm9mZnNldDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG51bGw7dmFyIGU9bnVsbDtpZihBcnJheS5pc0FycmF5KHQpKXQuZm9yRWFjaChmdW5jdGlvbih0KXtpZihydCh0KSYmdC5oYXNPd25Qcm9wZXJ0eSgib2Zmc2V0Iikpe3ZhciBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9fSk7ZWxzZSBpZihydCh0KSYmdC5oYXNPd25Qcm9wZXJ0eSgib2Zmc2V0Iikpe3ZhciBuPXQ7ZT1wYXJzZUZsb2F0KG4ub2Zmc2V0KSxkZWxldGUgbi5vZmZzZXR9cmV0dXJuIGV9KHIuc3R5bGVzKSxsPTA7cmV0dXJuIG51bGwhPWMmJihpKyssbD1yLm9mZnNldD1jKSxzPXN8fGw8MHx8bD4xLGE9YXx8bDx1LHU9bCxvLnB1c2gobCkscn0pO3MmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgYmV0d2VlbiAwIGFuZCAxIiksYSYmZS5lcnJvcnMucHVzaCgiUGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBrZXlmcmFtZSBvZmZzZXRzIGFyZSBpbiBvcmRlciIpO3ZhciBsPXQuc3RlcHMubGVuZ3RoLGY9MDtpPjAmJmk8bD9lLmVycm9ycy5wdXNoKCJOb3QgYWxsIHN0eWxlKCkgc3RlcHMgd2l0aGluIHRoZSBkZWNsYXJlZCBrZXlmcmFtZXMoKSBjb250YWluIG9mZnNldHMiKTowPT1pJiYoZj0xLyhsLTEpKTt2YXIgaD1sLTEsZD1lLmN1cnJlbnRUaW1lLHA9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsbT1wLmR1cmF0aW9uO3JldHVybiBjLmZvckVhY2goZnVuY3Rpb24odCxpKXt2YXIgYT1mPjA/aT09aD8xOmYqaTpvW2ldLHM9YSptO2UuY3VycmVudFRpbWU9ZCtwLmRlbGF5K3MscC5kdXJhdGlvbj1zLG4uX3ZhbGlkYXRlU3R5bGVBc3QodCxlKSx0Lm9mZnNldD1hLHIuc3R5bGVzLnB1c2godCl9KSxyfSx0LnByb3RvdHlwZS52aXNpdFJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOlEodGhpcyxMKHQuYW5pbWF0aW9uKSxlKSxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVDaGlsZD1mdW5jdGlvbih0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVSZWY9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOml0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFF1ZXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50UXVlcnlTZWxlY3RvcixpPXQub3B0aW9uc3x8e307ZS5xdWVyeUNvdW50KyssZS5jdXJyZW50UXVlcnk9dDt2YXIgbz1PYmplY3Qoci5jKShmdW5jdGlvbih0KXt2YXIgZT0hIXQuc3BsaXQoL1xzKixccyovKS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiI6c2VsZiI9PXR9KTtyZXR1cm4gZSYmKHQ9dC5yZXBsYWNlKEosIiIpKSxbdD10LnJlcGxhY2UoL0BcKi9nLCIubmctdHJpZ2dlciIpLnJlcGxhY2UoL0BcdysvZyxmdW5jdGlvbih0KXtyZXR1cm4iLm5nLXRyaWdnZXItIit0LnN1YnN0cigxKX0pLnJlcGxhY2UoLzphbmltYXRpbmcvZywiLm5nLWFuaW1hdGluZyIpLGVdfSh0LnNlbGVjdG9yKSwyKSxhPW9bMF0scz1vWzFdO2UuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bi5sZW5ndGg/bisiICIrYTphLGYoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3Rvcix7fSk7dmFyIHU9USh0aGlzLEwodC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bix7dHlwZToxMSxzZWxlY3RvcjphLGxpbWl0OmkubGltaXR8fDAsb3B0aW9uYWw6ISFpLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnMsYW5pbWF0aW9uOnUsb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6aXQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKCJzdGFnZ2VyKCkgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgcXVlcnkoKSIpO3ZhciBuPSJmdWxsIj09PXQudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OkkodC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246USh0aGlzLEwodC5hbmltYXRpb24pLGUpLHRpbWluZ3M6bixvcHRpb25zOm51bGx9fSx0fSgpLG50PWZ1bmN0aW9uKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz17fSx0aGlzLm9wdGlvbnM9bnVsbH07ZnVuY3Rpb24gcnQodCl7cmV0dXJuIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdH1mdW5jdGlvbiBpdCh0KXt2YXIgZTtyZXR1cm4gdD8odD1NKHQpKS5wYXJhbXMmJih0LnBhcmFtcz0oZT10LnBhcmFtcyk/TShlKTpudWxsKTp0PXt9LHR9ZnVuY3Rpb24gb3QodCxlLG4pe3JldHVybntkdXJhdGlvbjp0LGRlbGF5OmUsZWFzaW5nOm59fWZ1bmN0aW9uIGF0KHQsZSxuLHIsaSxvLGEscyl7cmV0dXJuIHZvaWQgMD09PWEmJihhPW51bGwpLHZvaWQgMD09PXMmJihzPSExKSx7dHlwZToxLGVsZW1lbnQ6dCxrZXlmcmFtZXM6ZSxwcmVTdHlsZVByb3BzOm4scG9zdFN0eWxlUHJvcHM6cixkdXJhdGlvbjppLGRlbGF5Om8sdG90YWxUaW1lOmkrbyxlYXNpbmc6YSxzdWJUaW1lbGluZTpzfX12YXIgc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmNvbnN1bWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldCh0KTtyZXR1cm4gZT90aGlzLl9tYXAuZGVsZXRlKHQpOmU9W10sZX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFwLmdldCh0KTtufHx0aGlzLl9tYXAuc2V0KHQsbj1bXSksbi5wdXNoLmFwcGx5KG4sT2JqZWN0KHIuZCkoZSkpfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fbWFwLmNsZWFyKCl9LHR9KCksdXQ9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLGN0PW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBsdCh0LGUsbixyLGksbyxhLHMsdSxjKXtyZXR1cm4gdm9pZCAwPT09byYmKG89e30pLHZvaWQgMD09PWEmJihhPXt9KSx2b2lkIDA9PT1jJiYoYz1bXSksKG5ldyBmdCkuYnVpbGRLZXlmcmFtZXModCxlLG4scixpLG8sYSxzLHUsYyl9dmFyIGZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlLG4scixpLG8sYSxzLHUsYyl7dm9pZCAwPT09YyYmKGM9W10pLHU9dXx8bmV3IHN0O3ZhciBsPW5ldyBkdCh0LGUsdSxyLGksYyxbXSk7bC5vcHRpb25zPXMsbC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtvXSxudWxsLGwuZXJyb3JzLHMpLFEodGhpcyxuLGwpO3ZhciBmPWwudGltZWxpbmVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5jb250YWluc0FuaW1hdGlvbigpfSk7aWYoZi5sZW5ndGgmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCl7dmFyIGg9ZltmLmxlbmd0aC0xXTtoLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl8fGguc2V0U3R5bGVzKFthXSxudWxsLGwuZXJyb3JzLHMpfXJldHVybiBmLmxlbmd0aD9mLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5idWlsZEtleWZyYW1lcygpfSk6W2F0KGUsW10sW10sW10sMCwwLCIiLCExKV19LHQucHJvdG90eXBlLnZpc2l0VHJpZ2dlcj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSl7fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGVDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPWUuc3ViSW5zdHJ1Y3Rpb25zLmNvbnN1bWUoZS5lbGVtZW50KTtpZihuKXt2YXIgcj1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKSxpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dGhpcy5fdmlzaXRTdWJJbnN0cnVjdGlvbnMobixyLHIub3B0aW9ucyk7aSE9byYmZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobyl9ZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7bi50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLG4pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG4uY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRTdWJJbnN0cnVjdGlvbnM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGk9bnVsbCE9bi5kdXJhdGlvbj9BKG4uZHVyYXRpb24pOm51bGwsbz1udWxsIT1uLmRlbGF5P0Eobi5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PWkmJnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZSh0LGksbyk7cj1NYXRoLm1heChyLG4uZHVyYXRpb24rbi5kZWxheSl9KSxyfSx0LnByb3RvdHlwZS52aXNpdFJlZmVyZW5jZT1mdW5jdGlvbih0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLFEodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFNlcXVlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuc3ViQ29udGV4dENvdW50LGk9ZSxvPXQub3B0aW9ucztpZihvJiYoby5wYXJhbXN8fG8uZGVsYXkpJiYoKGk9ZS5jcmVhdGVTdWJDb250ZXh0KG8pKS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1vLmRlbGF5KSl7Nj09aS5wcmV2aW91c05vZGUudHlwZSYmKGkuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGkucHJldmlvdXNOb2RlPWh0KTt2YXIgYT1BKG8uZGVsYXkpO2kuZGVsYXlOZXh0U3RlcChhKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gUShuLHQsaSl9KSxpLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxpLnN1YkNvbnRleHRDb3VudD5yJiZpLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdEdyb3VwPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPVtdLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9BKHQub3B0aW9ucy5kZWxheSk6MDt0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7byYmcy5kZWxheU5leHRTdGVwKG8pLFEobixhLHMpLGk9TWF0aC5tYXgoaSxzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksci5wdXNoKHMuY3VycmVudFRpbWVsaW5lKX0pLHIuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KX0pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLl92aXNpdFRpbWluZz1mdW5jdGlvbih0LGUpe2lmKHQuZHluYW1pYyl7dmFyIG49dC5zdHJWYWx1ZTtyZXR1cm4gSShlLnBhcmFtcz9CKG4sZS5wYXJhbXMsZS5lcnJvcnMpOm4sZS5lcnJvcnMpfXJldHVybntkdXJhdGlvbjp0LmR1cmF0aW9uLGRlbGF5OnQuZGVsYXksZWFzaW5nOnQuZWFzaW5nfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcodC50aW1pbmdzLGUpLHI9ZS5jdXJyZW50VGltZWxpbmU7bi5kZWxheSYmKGUuaW5jcmVtZW50VGltZShuLmRlbGF5KSxyLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTt2YXIgaT10LnN0eWxlOzU9PWkudHlwZT90aGlzLnZpc2l0S2V5ZnJhbWVzKGksZSk6KGUuaW5jcmVtZW50VGltZShuLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUoaSxlKSxyLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3R5bGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmN1cnJlbnRUaW1lbGluZSxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFyJiZuLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgmJm4uZm9yd2FyZEZyYW1lKCk7dmFyIGk9ciYmci5lYXNpbmd8fHQuZWFzaW5nO3QuaXNFbXB0eVN0ZXA/bi5hcHBseUVtcHR5U3RlcChpKTpuLnNldFN0eWxlcyh0LnN0eWxlcyxpLGUuZXJyb3JzLGUub3B0aW9ucyksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLGk9bi5kdXJhdGlvbixvPWUuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTtvLmVhc2luZz1uLmVhc2luZyx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe28uZm9yd2FyZFRpbWUoKHQub2Zmc2V0fHwwKSppKSxvLnNldFN0eWxlcyh0LnN0eWxlcyx0LmVhc2luZyxlLmVycm9ycyxlLm9wdGlvbnMpLG8uYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxlLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKG8pLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIraSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxpPXQub3B0aW9uc3x8e30sbz1pLmRlbGF5P0EoaS5kZWxheSk6MDtvJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PXImJmUuY3VycmVudFRpbWVsaW5lLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGgpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9aHQpO3ZhciBhPXIscz1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIWkub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9cy5sZW5ndGg7dmFyIHU9bnVsbDtzLmZvckVhY2goZnVuY3Rpb24ocixpKXtlLmN1cnJlbnRRdWVyeUluZGV4PWk7dmFyIHM9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxyKTtvJiZzLmRlbGF5TmV4dFN0ZXAobykscj09PWUuZWxlbWVudCYmKHU9cy5jdXJyZW50VGltZWxpbmUpLFEobix0LmFuaW1hdGlvbixzKSxzLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxhPU1hdGgubWF4KGEscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShhKSx1JiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh1KSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTdGFnZ2VyPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsaT10LnRpbWluZ3Msbz1NYXRoLmFicyhpLmR1cmF0aW9uKSxhPW8qKGUuY3VycmVudFF1ZXJ5VG90YWwtMSkscz1vKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGkuZHVyYXRpb248MD8icmV2ZXJzZSI6aS5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6cz1hLXM7YnJlYWs7Y2FzZSJmdWxsIjpzPW4uY3VycmVudFN0YWdnZXJUaW1lfXZhciB1PWUuY3VycmVudFRpbWVsaW5lO3MmJnUuZGVsYXlOZXh0U3RlcChzKTt2YXIgYz11LmN1cnJlbnRUaW1lO1EodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LG4uY3VycmVudFN0YWdnZXJUaW1lPXIuY3VycmVudFRpbWUtYysoci5zdGFydFRpbWUtbi5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX0sdH0oKSxodD17fSxkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN1Ykluc3RydWN0aW9ucz1uLHRoaXMuX2VudGVyQ2xhc3NOYW1lPXIsdGhpcy5fbGVhdmVDbGFzc05hbWU9aSx0aGlzLmVycm9ycz1vLHRoaXMudGltZWxpbmVzPWEsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1odCx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5jdXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9c3x8bmV3IHB0KHRoaXMuX2RyaXZlcixlLDApLGEucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudXBkYXRlT3B0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aWYodCl7dmFyIHI9dCxpPXRoaXMub3B0aW9ucztudWxsIT1yLmR1cmF0aW9uJiYoaS5kdXJhdGlvbj1BKHIuZHVyYXRpb24pKSxudWxsIT1yLmRlbGF5JiYoaS5kZWxheT1BKHIuZGVsYXkpKTt2YXIgbz1yLnBhcmFtcztpZihvKXt2YXIgYT1pLnBhcmFtczthfHwoYT10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UmJmEuaGFzT3duUHJvcGVydHkodCl8fChhW3RdPUIob1t0XSxhLG4uZXJyb3JzKSl9KX19fSx0LnByb3RvdHlwZS5fY29weU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD17fTtpZih0aGlzLm9wdGlvbnMpe3ZhciBlPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoZSl7dmFyIG49dC5wYXJhbXM9e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWVbdF19KX19cmV0dXJuIHR9LHQucHJvdG90eXBlLmNyZWF0ZVN1YkNvbnRleHQ9ZnVuY3Rpb24oZSxuLHIpe3ZvaWQgMD09PWUmJihlPW51bGwpO3ZhciBpPW58fHRoaXMuZWxlbWVudCxvPW5ldyB0KHRoaXMuX2RyaXZlcixpLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaSxyfHwwKSk7cmV0dXJuIG8ucHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLG8uY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLG8ub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLG8udXBkYXRlT3B0aW9ucyhlKSxvLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5kZXgsby5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLG8ucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50Kyssb30sdC5wcm90b3R5cGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1odCx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX0sdC5wcm90b3R5cGUuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17ZHVyYXRpb246bnVsbCE9ZT9lOnQuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKG51bGwhPW4/bjowKSt0LmRlbGF5LGVhc2luZzoiIn0saT1uZXcgbXQodGhpcy5fZHJpdmVyLHQuZWxlbWVudCx0LmtleWZyYW1lcyx0LnByZVN0eWxlUHJvcHMsdC5wb3N0U3R5bGVQcm9wcyxyLHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGkpLHJ9LHQucHJvdG90eXBlLmluY3JlbWVudFRpbWU9ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9LHQucHJvdG90eXBlLmRlbGF5TmV4dFN0ZXA9ZnVuY3Rpb24odCl7dD4wJiZ0aGlzLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKHQpfSx0LnByb3RvdHlwZS5pbnZva2VRdWVyeT1mdW5jdGlvbih0LGUsbixpLG8sYSl7dmFyIHM9W107aWYoaSYmcy5wdXNoKHRoaXMuZWxlbWVudCksdC5sZW5ndGg+MCl7dD0odD10LnJlcGxhY2UodXQsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShjdCwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO3ZhciB1PXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1uKTswIT09biYmKHU9bjwwP3Uuc2xpY2UodS5sZW5ndGgrbix1Lmxlbmd0aCk6dS5zbGljZSgwLG4pKSxzLnB1c2guYXBwbHkocyxPYmplY3Qoci5kKSh1KSl9cmV0dXJuIG98fDAhPXMubGVuZ3RofHxhLnB1c2goJ2BxdWVyeSgiJytlKyciKWAgcmV0dXJuZWQgemVybyBlbGVtZW50cy4gKFVzZSBgcXVlcnkoIicrZSsnIiwgeyBvcHRpb25hbDogdHJ1ZSB9KWAgaWYgeW91IHdpc2ggdG8gYWxsb3cgdGhpcy4pJyksc30sdH0oKSxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9bix0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9cix0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT17fSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9e30sdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PXt9LHRoaXMuX3BlbmRpbmdTdHlsZXM9e30sdGhpcy5fYmFja0ZpbGw9e30sdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPW5ldyBNYXApLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1yZXR1cm4gdC5wcm90b3R5cGUuY29udGFpbnNBbmltYXRpb249ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRoaXMuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcygpLmxlbmd0aD4wO2RlZmF1bHQ6cmV0dXJuITB9fSx0LnByb3RvdHlwZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY3VycmVudFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3ZhciBlPTE9PXRoaXMuX2tleWZyYW1lcy5zaXplJiZPYmplY3Qua2V5cyh0aGlzLl9wZW5kaW5nU3R5bGVzKS5sZW5ndGg7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fSx0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IHQodGhpcy5fZHJpdmVyLGUsbnx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfSx0LnByb3RvdHlwZS5fbG9hZEtleWZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1PYmplY3QuY3JlYXRlKHRoaXMuX2JhY2tGaWxsLHt9KSx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9LHQucHJvdG90eXBlLmZvcndhcmRGcmFtZT1mdW5jdGlvbigpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9LHQucHJvdG90eXBlLmZvcndhcmRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj10LHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF09ZSx0aGlzLl9zdHlsZVN1bW1hcnlbdF09e3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfX0sdC5wcm90b3R5cGUuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfSx0LnByb3RvdHlwZS5hcHBseUVtcHR5U3RlcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lLmVhc2luZz10KSxPYmplY3Qua2V5cyh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9iYWNrRmlsbFt0XT1lLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XXx8aS5hLGUuX2N1cnJlbnRLZXlmcmFtZVt0XT1pLmF9KSx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfSx0LnByb3RvdHlwZS5zZXRTdHlsZXM9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcztlJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9ZSk7dmFyIGE9ciYmci5wYXJhbXN8fHt9LHM9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7IioiPT09dD8obj1ufHxPYmplY3Qua2V5cyhlKSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWkuYX0pOlAodCwhMSxyKX0pLHJ9KHQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO09iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9QihzW3RdLGEsbik7by5fcGVuZGluZ1N0eWxlc1t0XT1lLG8uX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCl8fChvLl9iYWNrRmlsbFt0XT1vLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5oYXNPd25Qcm9wZXJ0eSh0KT9vLl9nbG9iYWxUaW1lbGluZVN0eWxlc1t0XTppLmEpLG8uX3VwZGF0ZVN0eWxlKHQsZSl9KX0sdC5wcm90b3R5cGUuYXBwbHlTdHlsZXNUb0tleWZyYW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX3BlbmRpbmdTdHlsZXMsbj1PYmplY3Qua2V5cyhlKTswIT1uLmxlbmd0aCYmKHRoaXMuX3BlbmRpbmdTdHlsZXM9e30sbi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuX2N1cnJlbnRLZXlmcmFtZVtuXT1lW25dfSksT2JqZWN0LmtleXModGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9jdXJyZW50S2V5ZnJhbWUuaGFzT3duUHJvcGVydHkoZSl8fCh0Ll9jdXJyZW50S2V5ZnJhbWVbZV09dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXSl9KSl9LHQucHJvdG90eXBlLnNuYXBzaG90Q3VycmVudFN0eWxlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7T2JqZWN0LmtleXModGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10Ll9sb2NhbFRpbWVsaW5lU3R5bGVzW2VdO3QuX3BlbmRpbmdTdHlsZXNbZV09bix0Ll91cGRhdGVTdHlsZShlLG4pfSl9LHQucHJvdG90eXBlLmdldEZpbmFsS2V5ZnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm9wZXJ0aWVzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO09iamVjdC5rZXlzKHQuX3N0eWxlU3VtbWFyeSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1lLl9zdHlsZVN1bW1hcnlbbl0saT10Ll9zdHlsZVN1bW1hcnlbbl07KCFyfHxpLnRpbWU+ci50aW1lKSYmZS5fdXBkYXRlU3R5bGUobixpLnZhbHVlKX0pfSx0LnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTt2YXIgZT1uZXcgU2V0LG49bmV3IFNldCxyPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24sbz1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaChmdW5jdGlvbihhLHMpe3ZhciB1PVAoYSwhMCk7T2JqZWN0LmtleXModSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj11W3RdO3I9PWkubz9lLmFkZCh0KTpyPT1pLmEmJm4uYWRkKHQpfSkscnx8KHUub2Zmc2V0PXMvdC5kdXJhdGlvbiksby5wdXNoKHUpfSk7dmFyIGE9ZS5zaXplP1UoZS52YWx1ZXMoKSk6W10scz1uLnNpemU/VShuLnZhbHVlcygpKTpbXTtpZihyKXt2YXIgdT1vWzBdLGM9TSh1KTt1Lm9mZnNldD0wLGMub2Zmc2V0PTEsbz1bdSxjXX1yZXR1cm4gYXQodGhpcy5lbGVtZW50LG8sYSxzLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfSx0fSgpLG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSxvLGEscyl7dm9pZCAwPT09cyYmKHM9ITEpO3ZhciB1PXQuY2FsbCh0aGlzLGUsbixhLmRlbGF5KXx8dGhpcztyZXR1cm4gdS5lbGVtZW50PW4sdS5rZXlmcmFtZXM9cix1LnByZVN0eWxlUHJvcHM9aSx1LnBvc3RTdHlsZVByb3BzPW8sdS5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9cyx1LnRpbWluZ3M9e2R1cmF0aW9uOmEuZHVyYXRpb24sZGVsYXk6YS5kZWxheSxlYXNpbmc6YS5lYXNpbmd9LHV9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuY29udGFpbnNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9LGUucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5rZXlmcmFtZXMsZT10aGlzLnRpbWluZ3Msbj1lLmRlbGF5LHI9ZS5kdXJhdGlvbixpPWUuZWFzaW5nO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZuKXt2YXIgbz1bXSxhPXIrbixzPW4vYSx1PVAodFswXSwhMSk7dS5vZmZzZXQ9MCxvLnB1c2godSk7dmFyIGM9UCh0WzBdLCExKTtjLm9mZnNldD15dChzKSxvLnB1c2goYyk7Zm9yKHZhciBsPXQubGVuZ3RoLTEsZj0xO2Y8PWw7ZisrKXt2YXIgaD1QKHRbZl0sITEpO2gub2Zmc2V0PXl0KChuK2gub2Zmc2V0KnIpL2EpLG8ucHVzaChoKX1yPWEsbj0wLGk9IiIsdD1vfXJldHVybiBhdCh0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxyLG4saSwhMCl9LGV9KHB0KTtmdW5jdGlvbiB5dCh0LGUpe3ZvaWQgMD09PWUmJihlPTMpO3ZhciBuPU1hdGgucG93KDEwLGUtMSk7cmV0dXJuIE1hdGgucm91bmQodCpuKS9ufXZhciB2dD1mdW5jdGlvbigpe30sZ3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUubm9ybWFsaXplUHJvcGVydHlOYW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHEodCl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZVN0eWxlVmFsdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9IiIsbz1uLnRvU3RyaW5nKCkudHJpbSgpO2lmKGJ0W2VdJiYwIT09biYmIjAiIT09bilpZigibnVtYmVyIj09dHlwZW9mIG4paT0icHgiO2Vsc2V7dmFyIGE9bi5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2goIlBsZWFzZSBwcm92aWRlIGEgQ1NTIHVuaXQgdmFsdWUgZm9yICIrdCsiOiIrbil9cmV0dXJuIG8raX0sZX0odnQpLGJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiJ3aWR0aCxoZWlnaHQsbWluV2lkdGgsbWluSGVpZ2h0LG1heFdpZHRoLG1heEhlaWdodCxsZWZ0LHRvcCxib3R0b20scmlnaHQsZm9udFNpemUsb3V0bGluZVdpZHRoLG91dGxpbmVPZmZzZXQscGFkZGluZ1RvcCxwYWRkaW5nTGVmdCxwYWRkaW5nQm90dG9tLHBhZGRpbmdSaWdodCxtYXJnaW5Ub3AsbWFyZ2luTGVmdCxtYXJnaW5Cb3R0b20sbWFyZ2luUmlnaHQsYm9yZGVyUmFkaXVzLGJvcmRlcldpZHRoLGJvcmRlclRvcFdpZHRoLGJvcmRlckxlZnRXaWR0aCxib3JkZXJSaWdodFdpZHRoLGJvcmRlckJvdHRvbVdpZHRoLHRleHRJbmRlbnQscGVyc3BlY3RpdmUiLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XT0hMH0pLGV9KCk7ZnVuY3Rpb24gX3QodCxlLG4scixpLG8sYSxzLHUsYyxsLGYsaCl7cmV0dXJue3R5cGU6MCxlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSxpc1JlbW92YWxUcmFuc2l0aW9uOmksZnJvbVN0YXRlOm4sZnJvbVN0eWxlczpvLHRvU3RhdGU6cix0b1N0eWxlczphLHRpbWVsaW5lczpzLHF1ZXJpZWRFbGVtZW50czp1LHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczpsLHRvdGFsVGltZTpmLGVycm9yczpofX12YXIgd3Q9e30seHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl90cmlnZ2VyTmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fc3RhdGVTdHlsZXM9bn1yZXR1cm4gdC5wcm90b3R5cGUubWF0Y2g9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIHQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdChlLG4scixpKX0pfSh0aGlzLmFzdC5tYXRjaGVycyx0LGUsbixyKX0sdC5wcm90b3R5cGUuYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3N0YXRlU3R5bGVzWyIqIl0saT10aGlzLl9zdGF0ZVN0eWxlc1t0XSxvPXI/ci5idWlsZFN0eWxlcyhlLG4pOnt9O3JldHVybiBpP2kuYnVpbGRTdHlsZXMoZSxuKTpvfSx0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUsbixpLG8sYSxzLHUsYyxsKXt2YXIgaD1bXSxkPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMucGFyYW1zfHx3dCxwPXRoaXMuYnVpbGRTdHlsZXMobixzJiZzLnBhcmFtc3x8d3QsaCksbT11JiZ1LnBhcmFtc3x8d3QseT10aGlzLmJ1aWxkU3R5bGVzKGksbSxoKSx2PW5ldyBTZXQsZz1uZXcgTWFwLGI9bmV3IE1hcCxfPSJ2b2lkIj09PWksdz17cGFyYW1zOk9iamVjdChyLmEpKHt9LGQsbSl9LHg9bD9bXTpsdCh0LGUsdGhpcy5hc3QuYW5pbWF0aW9uLG8sYSxwLHksdyxjLGgpLFM9MDtpZih4LmZvckVhY2goZnVuY3Rpb24odCl7Uz1NYXRoLm1heCh0LmR1cmF0aW9uK3QuZGVsYXksUyl9KSxoLmxlbmd0aClyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLGksXyxwLHksW10sW10sZyxiLFMsaCk7eC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZWxlbWVudCxyPWYoZyxuLHt9KTt0LnByZVN0eWxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gclt0XT0hMH0pO3ZhciBpPWYoYixuLHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGlbdF09ITB9KSxuIT09ZSYmdi5hZGQobil9KTt2YXIgRT1VKHYudmFsdWVzKCkpO3JldHVybiBfdChlLHRoaXMuX3RyaWdnZXJOYW1lLG4saSxfLHAseSx4LEUsZyxiLFMpfSx0fSgpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWV9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49e30scj1NKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtudWxsIT1uJiYocltlXT1uKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7dmFyIGk9dDtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBvPWlbdF07by5sZW5ndGg+MSYmKG89QihvLHIsZSkpLG5bdF09b30pfX0pLG59LHR9KCksRXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz17fSxlLnN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uc3RhdGVzW3QubmFtZV09bmV3IFN0KHQuc3R5bGUsdC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHx7fSl9KSxDdCh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxDdCh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksZS50cmFuc2l0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGUpe24udHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyB4dCh0LGUsbi5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPW5ldyB4dCh0LHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbZnVuY3Rpb24odCxlKXtyZXR1cm4hMH1dLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sdGhpcy5zdGF0ZXMpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRhaW5zUXVlcmllcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubWF0Y2hUcmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXRjaCh0LGUsbixyKX0pfHxudWxsfSx0LnByb3RvdHlwZS5tYXRjaFN0eWxlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxuKX0sdH0oKTtmdW5jdGlvbiBDdCh0LGUsbil7dC5oYXNPd25Qcm9wZXJ0eShlKT90Lmhhc093blByb3BlcnR5KG4pfHwodFtuXT10W2VdKTp0Lmhhc093blByb3BlcnR5KG4pJiYodFtlXT10W25dKX12YXIgT3Q9bmV3IHN0LFR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLl9hbmltYXRpb25zPXt9LHRoaXMuX3BsYXllcnNCeUlkPXt9LHRoaXMucGxheWVycz1bXX1yZXR1cm4gdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1bXSxyPXR0KHRoaXMuX2RyaXZlcixlLG4pO2lmKG4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGJ1aWxkIHRoZSBhbmltYXRpb24gZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3JzOiAiK24uam9pbigiXG4iKSk7dGhpcy5fYW5pbWF0aW9uc1t0XT1yfSx0LnByb3RvdHlwZS5fYnVpbGRQbGF5ZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuZWxlbWVudCxpPXMoMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxuKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixpLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9LHQucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj17fSk7dmFyIG8scz1bXSx1PXRoaXMuX2FuaW1hdGlvbnNbdF0sYz1uZXcgTWFwO2lmKHU/KG89bHQodGhpcy5fZHJpdmVyLGUsdSwibmctZW50ZXIiLCJuZy1sZWF2ZSIse30se30sbixPdCxzKSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1mKGMsdC5lbGVtZW50LHt9KTt0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09bnVsbH0pfSk6KHMucHVzaCgiVGhlIHJlcXVlc3RlZCBhbmltYXRpb24gZG9lc24ndCBleGlzdCBvciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCIpLG89W10pLHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGNyZWF0ZSB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIitzLmpvaW4oIlxuIikpO2MuZm9yRWFjaChmdW5jdGlvbih0LGUpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1yLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGUsbixpLmEpfSl9KTt2YXIgbD1hKG8ubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWMuZ2V0KHQuZWxlbWVudCk7cmV0dXJuIHIuX2J1aWxkUGxheWVyKHQse30sZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkW3RdPWwsbC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gci5kZXN0cm95KHQpfSksdGhpcy5wbGF5ZXJzLnB1c2gobCksbH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksZGVsZXRlIHRoaXMuX3BsYXllcnNCeUlkW3RdO3ZhciBuPXRoaXMucGxheWVycy5pbmRleE9mKGUpO24+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobiwxKX0sdC5wcm90b3R5cGUuX2dldFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wbGF5ZXJzQnlJZFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHRoZSB0aW1lbGluZSBwbGF5ZXIgcmVmZXJlbmNlZCBieSAiK3QpO3JldHVybiBlfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bChlLCIiLCIiLCIiKTtyZXR1cm4gdSh0aGlzLl9nZXRQbGF5ZXIodCksbixpLHIpLGZ1bmN0aW9uKCl7fX0sdC5wcm90b3R5cGUuY29tbWFuZD1mdW5jdGlvbih0LGUsbixyKXtpZigicmVnaXN0ZXIiIT1uKWlmKCJjcmVhdGUiIT1uKXt2YXIgaT10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKG4pe2Nhc2UicGxheSI6aS5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6aS5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmkucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmkucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjppLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6aS5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6aS5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KHJbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveSh0KX19ZWxzZSB0aGlzLmNyZWF0ZSh0LGUsclswXXx8e30pO2Vsc2UgdGhpcy5yZWdpc3Rlcih0LHJbMF0pfSx0fSgpLGt0PVtdLEF0PXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxqdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1vdmFsOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sSXQ9Il9fbmdfcmVtb3ZlZCIsTXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpLHRoaXMubmFtZXNwYWNlSWQ9ZTt2YXIgbj10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQ/dDpudWxsfShuP3QudmFsdWU6dCksbil7dmFyIHI9TSh0KTtkZWxldGUgci52YWx1ZSx0aGlzLm9wdGlvbnM9cn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYWJzb3JiT3B0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10LnBhcmFtcztpZihlKXt2YXIgbj10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7bnVsbD09blt0XSYmKG5bdF09ZVt0XSl9KX19LHR9KCksUHQ9bmV3IE10KCJ2b2lkIiksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1uLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz17fSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrdCxVdChlLHRoaXMuX2hvc3RDbGFzc05hbWUpfXJldHVybiB0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksbz10aGlzO2lmKCF0aGlzLl90cmlnZ2Vycy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgYmVjYXVzZSB0aGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrZSsiXCIgZG9lc24ndCBleGlzdCEiKTtpZihudWxsPT1ufHwwPT1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBsaXN0ZW4gb24gdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgYmVjYXVzZSB0aGUgcHJvdmlkZWQgZXZlbnQgaXMgdW5kZWZpbmVkIScpO2lmKCJzdGFydCIhPShpPW4pJiYiZG9uZSIhPWkpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgZXZlbnQgIicrbisnIiBmb3IgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCEnKTt2YXIgYT1mKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsdCxbXSkscz17bmFtZTplLHBoYXNlOm4sY2FsbGJhY2s6cn07YS5wdXNoKHMpO3ZhciB1PWYodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LHt9KTtyZXR1cm4gdS5oYXNPd25Qcm9wZXJ0eShlKXx8KFV0KHQsIm5nLXRyaWdnZXIiKSxVdCh0LCJuZy10cmlnZ2VyLSIrZSksdVtlXT1QdCksZnVuY3Rpb24oKXtvLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3ZhciB0PWEuaW5kZXhPZihzKTt0Pj0wJiZhLnNwbGljZSh0LDEpLG8uX3RyaWdnZXJzW2VdfHxkZWxldGUgdVtlXX0pfX0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnNbdF0mJih0aGlzLl90cmlnZ2Vyc1t0XT1lLCEwKX0sdC5wcm90b3R5cGUuX2dldFRyaWdnZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdHJpZ2dlcnNbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHRyaWdnZXIgIicrdCsnIiBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCEnKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzO3ZvaWQgMD09PXImJihyPSEwKTt2YXIgbz10aGlzLl9nZXRUcmlnZ2VyKGUpLGE9bmV3IER0KHRoaXMuaWQsZSx0KSxzPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO3N8fChVdCh0LCJuZy10cmlnZ2VyIiksVXQodCwibmctdHJpZ2dlci0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQscz17fSkpO3ZhciB1PXNbZV0sYz1uZXcgTXQobix0aGlzLmlkKTtpZighKG4mJm4uaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZ1JiZjLmFic29yYk9wdGlvbnModS5vcHRpb25zKSxzW2VdPWMsdXx8KHU9UHQpLCJ2b2lkIj09PWMudmFsdWV8fHUudmFsdWUhPT1jLnZhbHVlKXt2YXIgbD1mKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO2wuZm9yRWFjaChmdW5jdGlvbih0KXt0Lm5hbWVzcGFjZUlkPT1pLmlkJiZ0LnRyaWdnZXJOYW1lPT1lJiZ0LnF1ZXVlZCYmdC5kZXN0cm95KCl9KTt2YXIgaD1vLm1hdGNoVHJhbnNpdGlvbih1LnZhbHVlLGMudmFsdWUsdCxjLnBhcmFtcyksZD0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZD0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6dSx0b1N0YXRlOmMscGxheWVyOmEsaXNGYWxsYmFja1RyYW5zaXRpb246ZH0pLGR8fChVdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpLGEub25TdGFydChmdW5jdGlvbigpe0h0KHQsIm5nLWFuaW1hdGUtcXVldWVkIil9KSksYS5vbkRvbmUoZnVuY3Rpb24oKXt2YXIgZT1pLnBsYXllcnMuaW5kZXhPZihhKTtlPj0wJiZpLnBsYXllcnMuc3BsaWNlKGUsMSk7dmFyIG49aS5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKG4pe3ZhciByPW4uaW5kZXhPZihhKTtyPj0wJiZuLnNwbGljZShyLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKGEpLGwucHVzaChhKSxhfWlmKCFmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9T2JqZWN0LmtleXMoZSk7aWYobi5sZW5ndGghPXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKCFlLmhhc093blByb3BlcnR5KG8pfHx0W29dIT09ZVtvXSlyZXR1cm4hMX1yZXR1cm4hMH0odS5wYXJhbXMsYy5wYXJhbXMpKXt2YXIgcD1bXSxtPW8ubWF0Y2hTdHlsZXModS52YWx1ZSx1LnBhcmFtcyxwKSx5PW8ubWF0Y2hTdHlsZXMoYy52YWx1ZSxjLnBhcmFtcyxwKTtwLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocCk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtGKHQsbSksRCh0LHkpfSl9fSx0LnByb3RvdHlwZS5kZXJlZ2lzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7ZGVsZXRlIHRoaXMuX3RyaWdnZXJzW3RdLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChmdW5jdGlvbihlLG4pe2RlbGV0ZSBlW3RdfSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7ZS5fZWxlbWVudExpc3RlbmVycy5zZXQocixuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT10fSkpfSl9LHQucHJvdG90eXBlLmNsZWFyRWxlbWVudENhY2hlPWZ1bmN0aW9uKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO3ZhciBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpczt2b2lkIDA9PT1uJiYobj0hMSksdGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LCIubmctdHJpZ2dlciIsITApLmZvckVhY2goZnVuY3Rpb24odCl7aWYoIXRbSXRdKXt2YXIgbj1yLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHQpO24uc2l6ZT9uLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4udHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMSwhMCl9KTpyLmNsZWFyRWxlbWVudENhY2hlKHQpfX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyTGVhdmVBbmltYXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKG8pe3ZhciBzPVtdO2lmKE9iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoaS5fdHJpZ2dlcnNbZV0pe3ZhciBuPWkudHJpZ2dlcih0LGUsInZvaWQiLHIpO24mJnMucHVzaChuKX19KSxzLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMCxlKSxuJiZhKHMpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBpLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KX0pLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpO2lmKG4pe3ZhciByPW5ldyBTZXQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ubmFtZTtpZighci5oYXMoaSkpe3IuYWRkKGkpO3ZhciBvPWUuX3RyaWdnZXJzW2ldLmZhbGxiYWNrVHJhbnNpdGlvbixhPWUuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpW2ldfHxQdCxzPW5ldyBNdCgidm9pZCIpLHU9bmV3IER0KGUuaWQsaSx0KTtlLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssZS5fcXVldWUucHVzaCh7ZWxlbWVudDp0LHRyaWdnZXJOYW1lOmksdHJhbnNpdGlvbjpvLGZyb21TdGF0ZTphLHRvU3RhdGU6cyxwbGF5ZXI6dSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfX0pfX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj10aGlzLl9lbmdpbmU7aWYodC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModCxlLCEwKSwhdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSl7dmFyIGk9ITE7aWYoci50b3RhbEFuaW1hdGlvbnMpe3ZhciBvPXIucGxheWVycy5sZW5ndGg/ci5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpaT0hMDtlbHNlIGZvcih2YXIgYT10O2E9YS5wYXJlbnROb2RlOylpZihyLnN0YXRlc0J5RWxlbWVudC5nZXQoYSkpe2k9ITA7YnJlYWt9fXRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLGk/ci5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk6KHIuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3JldHVybiBuLmNsZWFyRWxlbWVudENhY2hlKHQpfSksci5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLHIuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUpe1V0KHQsdGhpcy5faG9zdENsYXNzTmFtZSl9LHQucHJvdG90eXBlLmRyYWluUXVldWVkVHJhbnNpdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXIucGxheWVyO2lmKCFpLmRlc3Ryb3llZCl7dmFyIG89ci5lbGVtZW50LGE9ZS5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7YSYmYS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUubmFtZT09ci50cmlnZ2VyTmFtZSl7dmFyIG49bChvLHIudHJpZ2dlck5hbWUsci5mcm9tU3RhdGUudmFsdWUsci50b1N0YXRlLnZhbHVlKTtuLl9kYXRhPXQsdShyLnBsYXllcixlLnBoYXNlLG4sZS5jYWxsYmFjayl9fSksaS5tYXJrZWRGb3JEZXN0cm95P2UuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7aS5kZXN0cm95KCl9KTpuLnB1c2gocil9fSksdGhpcy5fcXVldWU9W10sbi5zb3J0KGZ1bmN0aW9uKHQsbil7dmFyIHI9dC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxpPW4udHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PXJ8fDA9PWk/ci1pOmUuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KHQuZWxlbWVudCxuLmVsZW1lbnQpPzE6LTF9KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiB0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmhhcyh0KSYmKGU9ITApLCEhdGhpcy5fcXVldWUuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5lbGVtZW50PT09dH0pfHxlfSx0fSgpLFJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5ib2R5Tm9kZT10LHRoaXMuZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1uLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe319cmV0dXJuIHQucHJvdG90eXBlLl9vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3RoaXMub25SZW1vdmFsQ29tcGxldGUodCxlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWV1ZWRQbGF5ZXJzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChmdW5jdGlvbihlKXtlLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnF1ZXVlZCYmdC5wdXNoKGUpfSl9KSx0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNyZWF0ZU5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBOdCh0LGUsdGhpcyk7cmV0dXJuIGUucGFyZW50Tm9kZT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChuLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxuKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1ufSx0LnByb3RvdHlwZS5fYmFsYW5jZU5hbWVzcGFjZUxpc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO2lmKG4+PTApe2Zvcih2YXIgcj0hMSxpPW47aT49MDtpLS0paWYodGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuX25hbWVzcGFjZUxpc3RbaV0uaG9zdEVsZW1lbnQsZSkpe3RoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGkrMSwwLHQpLHI9ITA7YnJlYWt9cnx8dGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoMCwwLHQpfWVsc2UgdGhpcy5fbmFtZXNwYWNlTGlzdC5wdXNoKHQpO3JldHVybiB0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LnNldChlLHQpLHR9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBufHwobj10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxufSx0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyJiZyLnJlZ2lzdGVyKGUsbikmJnRoaXMudG90YWxBbmltYXRpb25zKyt9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciByPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe24ubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKHIuaG9zdEVsZW1lbnQpLGRlbGV0ZSBuLl9uYW1lc3BhY2VMb29rdXBbdF07dmFyIGU9bi5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKHIpO2U+PTAmJm4uX25hbWVzcGFjZUxpc3Quc3BsaWNlKGUsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShmdW5jdGlvbigpe3JldHVybiByLmRlc3Ryb3koZSl9KX19LHQucHJvdG90eXBlLl9mZXRjaE5hbWVzcGFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdfSx0LnByb3RvdHlwZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFNldCxuPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihuKWZvcih2YXIgcj1PYmplY3Qua2V5cyhuKSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPW5bcltpXV0ubmFtZXNwYWNlSWQ7aWYobyl7dmFyIGE9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uobyk7YSYmZS5hZGQoYSl9fXJldHVybiBlfSx0LnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKEZ0KGUpKXt2YXIgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtpZihpKXJldHVybiBpLnRyaWdnZXIoZSxuLHIpLCEwfXJldHVybiExfSx0LnByb3RvdHlwZS5pbnNlcnROb2RlPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKEZ0KGUpKXt2YXIgaT1lW0l0XTtpZihpJiZpLnNldEZvclJlbW92YWwpe2kuc2V0Rm9yUmVtb3ZhbD0hMSxpLnNldEZvck1vdmU9ITA7dmFyIG89dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoZSk7bz49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZShvLDEpfWlmKHQpe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2EmJmEuaW5zZXJ0Tm9kZShlLG4pfXImJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChlKX19LHQucHJvdG90eXBlLmNvbGxlY3RFbnRlckVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9LHQucHJvdG90eXBlLm1hcmtFbGVtZW50QXNEaXNhYmxlZD1mdW5jdGlvbih0LGUpe2U/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQodCksVXQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSxIdCh0LCJuZy1hbmltYXRlLWRpc2FibGVkIikpfSx0LnByb3RvdHlwZS5yZW1vdmVOb2RlPWZ1bmN0aW9uKHQsZSxuKXtpZihGdChlKSl7dmFyIHI9dD90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTpudWxsO3I/ci5yZW1vdmVOb2RlKGUsbik6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsITEsbil9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLG4pfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzUmVtb3ZlZD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChlKSxlW0l0XT17bmFtZXNwYWNlSWQ6dCxzZXRGb3JSZW1vdmFsOnIsaGFzQW5pbWF0aW9uOm4scmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9fSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gRnQoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsbixyLGkpOmZ1bmN0aW9uKCl7fX0sdC5wcm90b3R5cGUuX2J1aWxkSW5zdHJ1Y3Rpb249ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsbixyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxpKX0sdC5wcm90b3R5cGUuZGVzdHJveUlubmVyQW5pbWF0aW9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpfSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYobj10aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0aW5nIiwhMCkpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudCh0KX0pfSx0LnByb3RvdHlwZS5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWQ/dC5tYXJrZWRGb3JEZXN0cm95PSEwOnQuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7aWYodC5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gYSh0LnBsYXllcnMpLm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBlKCl9KTtlKCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc0xlYXZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dFtJdF07aWYobiYmbi5zZXRGb3JSZW1vdmFsKXtpZih0W0l0XT1BdCxuLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCk7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uobi5uYW1lc3BhY2VJZCk7ciYmci5jbGVhckVsZW1lbnRDYWNoZSh0KX10aGlzLl9vblJlbW92YWxDb21wbGV0ZSh0LG4uc2V0Rm9yUmVtb3ZhbCl9dGhpcy5kcml2ZXIubWF0Y2hlc0VsZW1lbnQodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiKSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCwhMSksdGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpfSl9LHQucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9LTEpO3ZhciBuPVtdO2lmKHRoaXMubmV3SG9zdEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KHQsbil9KSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHI9MDtyPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7cisrKVV0KHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tyXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXt2YXIgaT1bXTt0cnl7bj10aGlzLl9mbHVzaEFuaW1hdGlvbnMoaSx0KX1maW5hbGx5e2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihyPTA7cjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO3IrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW3JdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7dmFyIG89dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxuLmxlbmd0aD9hKG4pLm9uRG9uZShmdW5jdGlvbigpe28uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9KTpvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfX0sdC5wcm90b3R5cGUucmVwb3J0RXJyb3I9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcHJvY2VzcyBhbmltYXRpb25zIGR1ZSB0byB0aGUgZm9sbG93aW5nIGZhaWxlZCB0cmlnZ2VyIHRyYW5zaXRpb25zXG4gIit0LmpvaW4oIlxuIikpfSx0LnByb3RvdHlwZS5fZmx1c2hBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxvPW5ldyBzdCxzPVtdLHU9bmV3IE1hcCxjPVtdLGw9bmV3IE1hcCxoPW5ldyBNYXAsZD1uZXcgTWFwLHA9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtwLmFkZCh0KTtmb3IodmFyIGU9bi5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXAuYWRkKGVbcl0pfSk7dmFyIG09dGhpcy5ib2R5Tm9kZSx5PUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSx2PXp0KHksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxnPW5ldyBNYXAsYj0wO3YuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPSJuZy1lbnRlciIrYisrO2cuc2V0KGUsbiksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBVdCh0LG4pfSl9KTtmb3IodmFyIF89W10sdz1uZXcgU2V0LHg9bmV3IFNldCxTPTA7Uzx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO1MrKykoVT0oQj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbU10pW0l0XSkmJlUuc2V0Rm9yUmVtb3ZhbCYmKF8ucHVzaChCKSx3LmFkZChCKSxVLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShCLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHcuYWRkKHQpfSk6eC5hZGQoQikpO3ZhciBFPW5ldyBNYXAsQz16dCh5LEFycmF5LmZyb20odykpO0MuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPSJuZy1sZWF2ZSIrYisrO0Uuc2V0KGUsbiksdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBVdCh0LG4pfSl9KSx0LnB1c2goZnVuY3Rpb24oKXt2LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1nLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLEMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3ZhciBuPUUuZ2V0KGUpO3QuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHQodCxuKX0pfSksXy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvY2Vzc0xlYXZlTm9kZSh0KX0pfSk7Zm9yKHZhciBPPVtdLFQ9W10saz10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO2s+PTA7ay0tKXRoaXMuX25hbWVzcGFjZUxpc3Rba10uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGxheWVyLHI9dC5lbGVtZW50O2lmKE8ucHVzaChlKSxuLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXt2YXIgaT1yW0l0XTtpZihpJiZpLnNldEZvck1vdmUpcmV0dXJuIHZvaWQgZS5kZXN0cm95KCl9dmFyIGE9IW18fCFuLmRyaXZlci5jb250YWluc0VsZW1lbnQobSxyKSx1PUUuZ2V0KHIpLHA9Zy5nZXQocikseT1uLl9idWlsZEluc3RydWN0aW9uKHQsbyxwLHUsYSk7aWYoeS5lcnJvcnMmJnkuZXJyb3JzLmxlbmd0aClULnB1c2goeSk7ZWxzZXtpZihhKXJldHVybiBlLm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gRihyLHkuZnJvbVN0eWxlcyl9KSxlLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKHIseS50b1N0eWxlcyl9KSx2b2lkIHMucHVzaChlKTtpZih0LmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBlLm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gRihyLHkuZnJvbVN0eWxlcyl9KSxlLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKHIseS50b1N0eWxlcyl9KSx2b2lkIHMucHVzaChlKTt5LnRpbWVsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwfSksby5hcHBlbmQocix5LnRpbWVsaW5lcyksYy5wdXNoKHtpbnN0cnVjdGlvbjp5LHBsYXllcjplLGVsZW1lbnQ6cn0pLHkucXVlcmllZEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGYobCx0LFtdKS5wdXNoKGUpfSkseS5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihuLmxlbmd0aCl7dmFyIHI9aC5nZXQoZSk7cnx8aC5zZXQoZSxyPW5ldyBTZXQpLG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5hZGQodCl9KX19KSx5LnBvc3RTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxyPWQuZ2V0KGUpO3J8fGQuc2V0KGUscj1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSl9KX19KTtpZihULmxlbmd0aCl7dmFyIEE9W107VC5mb3JFYWNoKGZ1bmN0aW9uKHQpe0EucHVzaCgiQCIrdC50cmlnZ2VyTmFtZSsiIGhhcyBmYWlsZWQgZHVlIHRvOlxuIiksdC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gQS5wdXNoKCItICIrdCsiXG4iKX0pfSksTy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMucmVwb3J0RXJyb3IoQSl9dmFyIGo9bmV3IE1hcCxJPW5ldyBNYXA7Yy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtvLmhhcyhlKSYmKEkuc2V0KGUsZSksbi5fYmVmb3JlQW5pbWF0aW9uQnVpbGQodC5wbGF5ZXIubmFtZXNwYWNlSWQsdC5pbnN0cnVjdGlvbixqKSl9KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5lbGVtZW50O24uX2dldFByZXZpb3VzUGxheWVycyhlLCExLHQubmFtZXNwYWNlSWQsdC50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2YoaixlLFtdKS5wdXNoKHQpLHQuZGVzdHJveSgpfSl9KTt2YXIgTT1fLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gR3QodCxoLGQpfSksUD1uZXcgTWFwO1Z0KFAsdGhpcy5kcml2ZXIseCxkLGkuYSkuZm9yRWFjaChmdW5jdGlvbih0KXtHdCh0LGgsZCkmJk0ucHVzaCh0KX0pO3ZhciBOPW5ldyBNYXA7di5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7VnQoTixuLmRyaXZlcixuZXcgU2V0KHQpLGgsaS5vKX0pLE0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1QLmdldCh0KSxuPU4uZ2V0KHQpO1Auc2V0KHQsT2JqZWN0KHIuYSkoe30sZSxuKSl9KTt2YXIgUj1bXSxMPVtdLFY9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudCxyPXQucGxheWVyLGk9dC5pbnN0cnVjdGlvbjtpZihvLmhhcyhlKSl7aWYocC5oYXMoZSkpcmV0dXJuIHIub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEQoZSxpLnRvU3R5bGVzKX0pLHIuZGlzYWJsZWQ9ITAsci5vdmVycmlkZVRvdGFsVGltZShpLnRvdGFsVGltZSksdm9pZCBzLnB1c2gocik7dmFyIGM9VjtpZihJLnNpemU+MSl7Zm9yKHZhciBsPWUsZj1bXTtsPWwucGFyZW50Tm9kZTspe3ZhciBoPUkuZ2V0KGwpO2lmKGgpe2M9aDticmVha31mLnB1c2gobCl9Zi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBJLnNldCh0LGMpfSl9dmFyIGQ9bi5fYnVpbGRBbmltYXRpb24oci5uYW1lc3BhY2VJZCxpLGosdSxOLFApO2lmKHIuc2V0UmVhbFBsYXllcihkKSxjPT09VilSLnB1c2gocik7ZWxzZXt2YXIgbT1uLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGMpO20mJm0ubGVuZ3RoJiYoci5wYXJlbnRQbGF5ZXI9YShtKSkscy5wdXNoKHIpfX1lbHNlIEYoZSxpLmZyb21TdHlsZXMpLHIub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIEQoZSxpLnRvU3R5bGVzKX0pLEwucHVzaChyKSxwLmhhcyhlKSYmcy5wdXNoKHIpfSksTC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuZ2V0KHQuZWxlbWVudCk7aWYoZSYmZS5sZW5ndGgpe3ZhciBuPWEoZSk7dC5zZXRSZWFsUGxheWVyKG4pfX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnBhcmVudFBsYXllcj90LnN5bmNQbGF5ZXJFdmVudHModC5wYXJlbnRQbGF5ZXIpOnQuZGVzdHJveSgpfSk7Zm9yKHZhciB6PTA7ejxfLmxlbmd0aDt6Kyspe3ZhciBCLFU9KEI9X1t6XSlbSXRdO2lmKEh0KEIsIm5nLWxlYXZlIiksIVV8fCFVLmhhc0FuaW1hdGlvbil7dmFyIEg9W107aWYobC5zaXplKXt2YXIgcT1sLmdldChCKTtxJiZxLmxlbmd0aCYmSC5wdXNoLmFwcGx5KEgsT2JqZWN0KHIuZCkocSkpO2Zvcih2YXIgRz10aGlzLmRyaXZlci5xdWVyeShCLCIubmctYW5pbWF0aW5nIiwhMCksVz0wO1c8Ry5sZW5ndGg7VysrKXt2YXIgUT1sLmdldChHW1ddKTtRJiZRLmxlbmd0aCYmSC5wdXNoLmFwcGx5KEgsT2JqZWN0KHIuZCkoUSkpfX12YXIgWT1ILmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5kZXN0cm95ZWR9KTtZLmxlbmd0aD9xdCh0aGlzLEIsWSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEIpfX1yZXR1cm4gXy5sZW5ndGg9MCxSLmZvckVhY2goZnVuY3Rpb24odCl7bi5wbGF5ZXJzLnB1c2godCksdC5vbkRvbmUoZnVuY3Rpb24oKXt0LmRlc3Ryb3koKTt2YXIgZT1uLnBsYXllcnMuaW5kZXhPZih0KTtuLnBsYXllcnMuc3BsaWNlKGUsMSl9KSx0LnBsYXkoKX0pLFJ9LHQucHJvdG90eXBlLmVsZW1lbnRDb250YWluc0RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgbj0hMSxyPWVbSXRdO3JldHVybiByJiZyLnNldEZvclJlbW92YWwmJihuPSEwKSx0aGlzLnBsYXllcnNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLnN0YXRlc0J5RWxlbWVudC5oYXMoZSkmJihuPSEwKSx0aGlzLl9mZXRjaE5hbWVzcGFjZSh0KS5lbGVtZW50Q29udGFpbnNEYXRhKGUpfHxufSx0LnByb3RvdHlwZS5hZnRlckZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9LHQucHJvdG90eXBlLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZT1mdW5jdGlvbih0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuX2dldFByZXZpb3VzUGxheWVycz1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPVtdO2lmKGUpe3ZhciBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2EmJihvPWEpfWVsc2V7dmFyIHM9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihzKXt2YXIgdT0haXx8InZvaWQiPT1pO3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnF1ZXVlZHx8KHV8fHQudHJpZ2dlck5hbWU9PXIpJiZvLnB1c2godCl9KX19cmV0dXJuKG58fHIpJiYobz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKG4mJm4hPXQubmFtZXNwYWNlSWR8fHImJnIhPXQudHJpZ2dlck5hbWUpfSkpLG99LHQucHJvdG90eXBlLl9iZWZvcmVBbmltYXRpb25CdWlsZD1mdW5jdGlvbih0LGUsbil7dmFyIGksbyxhPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCx1PWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZSxjPWZ1bmN0aW9uKHQpe3ZhciByPXQuZWxlbWVudCxpPXIhPT1hLG89ZihuLHIsW10pO2wuX2dldFByZXZpb3VzUGxheWVycyhyLGkscyx1LGUudG9TdGF0ZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmdldFJlYWxQbGF5ZXIoKTtlLmJlZm9yZURlc3Ryb3kmJmUuYmVmb3JlRGVzdHJveSgpLHQuZGVzdHJveSgpLG8ucHVzaCh0KX0pfSxsPXRoaXM7dHJ5e2Zvcih2YXIgaD1PYmplY3Qoci5lKShlLnRpbWVsaW5lcyksZD1oLm5leHQoKTshZC5kb25lO2Q9aC5uZXh0KCkpYyhkLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYobz1oLnJldHVybikmJm8uY2FsbChoKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19RihhLGUuZnJvbVN0eWxlcyl9LHQucHJvdG90eXBlLl9idWlsZEFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbixyLG8sdSl7dmFyIGM9dGhpcyxsPWUudHJpZ2dlck5hbWUsaD1lLmVsZW1lbnQsZD1bXSxwPW5ldyBTZXQsbT1uZXcgU2V0LHk9ZS50aW1lbGluZXMubWFwKGZ1bmN0aW9uKGUpe3ZhciBhPWUuZWxlbWVudDtwLmFkZChhKTt2YXIgZj1hW0l0XTtpZihmJiZmLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgaS5kKGUuZHVyYXRpb24sZS5kZWxheSk7dmFyIHksdixnPWEhPT1oLGI9KHk9KG4uZ2V0KGEpfHxrdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFJlYWxQbGF5ZXIoKX0pLHY9W10sZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdO28gaW5zdGFuY2VvZiBpLm4/dChvLnBsYXllcnMsbik6bi5wdXNoKG8pfX0oeSx2KSx2KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISF0LmVsZW1lbnQmJnQuZWxlbWVudD09PWF9KSxfPW8uZ2V0KGEpLHc9dS5nZXQoYSkseD1zKDAsYy5fbm9ybWFsaXplciwwLGUua2V5ZnJhbWVzLF8sdyksUz1jLl9idWlsZFBsYXllcihlLHgsYik7aWYoZS5zdWJUaW1lbGluZSYmciYmbS5hZGQoYSksZyl7dmFyIEU9bmV3IER0KHQsbCxhKTtFLnNldFJlYWxQbGF5ZXIoUyksZC5wdXNoKEUpfXJldHVybiBTfSk7ZC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2YoYy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCx0LmVsZW1lbnQsW10pLnB1c2godCksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByO2lmKHQgaW5zdGFuY2VvZiBNYXApe2lmKHI9dC5nZXQoZSkpe2lmKHIubGVuZ3RoKXt2YXIgaT1yLmluZGV4T2Yobik7ci5zcGxpY2UoaSwxKX0wPT1yLmxlbmd0aCYmdC5kZWxldGUoZSl9fWVsc2Uocj10W2VdKSYmKHIubGVuZ3RoJiYoaT1yLmluZGV4T2Yobiksci5zcGxpY2UoaSwxKSksMD09ci5sZW5ndGgmJmRlbGV0ZSB0W2VdKTtyZXR1cm4gcn0oYy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCx0LmVsZW1lbnQsdCl9KX0pLHAuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCwibmctYW5pbWF0aW5nIil9KTt2YXIgdj1hKHkpO3JldHVybiB2Lm9uRGVzdHJveShmdW5jdGlvbigpe3AuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gSHQodCwibmctYW5pbWF0aW5nIil9KSxEKGgsZS50b1N0eWxlcyl9KSxtLmZvckVhY2goZnVuY3Rpb24odCl7ZihyLHQsW10pLnB1c2godil9KSx2fSx0LnByb3RvdHlwZS5fYnVpbGRQbGF5ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUodC5lbGVtZW50LGUsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLG4pOm5ldyBpLmQodC5kdXJhdGlvbix0LmRlbGF5KX0sdH0oKSxEdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLnRyaWdnZXJOYW1lPWUsdGhpcy5lbGVtZW50PW4sdGhpcy5fcGxheWVyPW5ldyBpLmQsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXJldHVybiB0LnByb3RvdHlwZS5zZXRSZWFsUGxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsT2JqZWN0LmtleXModGhpcy5fcXVldWVkQ2FsbGJhY2tzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2UuX3F1ZXVlZENhbGxiYWNrc1tuXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB1KHQsbix2b2lkIDAsZSl9KX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz17fSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfSx0LnByb3RvdHlwZS5nZXRSZWFsUGxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXllcn0sdC5wcm90b3R5cGUub3ZlcnJpZGVUb3RhbFRpbWU9ZnVuY3Rpb24odCl7dGhpcy50b3RhbFRpbWU9dH0sdC5wcm90b3R5cGUuc3luY1BsYXllckV2ZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fcGxheWVyO24udHJpZ2dlckNhbGxiYWNrJiZ0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gbi50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0Iil9KSx0Lm9uRG9uZShmdW5jdGlvbigpe3JldHVybiBlLmZpbmlzaCgpfSksdC5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KX0sdC5wcm90b3R5cGUuX3F1ZXVlRXZlbnQ9ZnVuY3Rpb24odCxlKXtmKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyx0LFtdKS5wdXNoKGUpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95Iix0KSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmluaXQoKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24odCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfSx0fSgpO2Z1bmN0aW9uIEZ0KHQpe3JldHVybiB0JiYxPT09dC5ub2RlVHlwZX1mdW5jdGlvbiBMdCh0LGUpe3ZhciBuPXQuc3R5bGUuZGlzcGxheTtyZXR1cm4gdC5zdHlsZS5kaXNwbGF5PW51bGwhPWU/ZToibm9uZSIsbn1mdW5jdGlvbiBWdCh0LGUsbixyLGkpe3ZhciBvPVtdO24uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gby5wdXNoKEx0KHQpKX0pO3ZhciBhPVtdO3IuZm9yRWFjaChmdW5jdGlvbihuLHIpe3ZhciBvPXt9O24uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1vW3RdPWUuY29tcHV0ZVN0eWxlKHIsdCxpKTtuJiYwIT1uLmxlbmd0aHx8KHJbSXRdPWp0LGEucHVzaChyKSl9KSx0LnNldChyLG8pfSk7dmFyIHM9MDtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBMdCh0LG9bcysrXSl9KSxhfWZ1bmN0aW9uIHp0KHQsZSl7dmFyIG49bmV3IE1hcDtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG4uc2V0KHQsW10pfSksMD09ZS5sZW5ndGgpcmV0dXJuIG47dmFyIHI9bmV3IFNldChlKSxpPW5ldyBNYXA7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbiB0KGUpe2lmKCFlKXJldHVybiAxO3ZhciBvPWkuZ2V0KGUpO2lmKG8pcmV0dXJuIG87dmFyIGE9ZS5wYXJlbnROb2RlO3JldHVybiBvPW4uaGFzKGEpP2E6ci5oYXMoYSk/MTp0KGEpLGkuc2V0KGUsbyksb30odCk7MSE9PWUmJm4uZ2V0KGUpLnB1c2godCl9KSxufXZhciBCdD0iJCRjbGFzc2VzIjtmdW5jdGlvbiBVdCh0LGUpe2lmKHQuY2xhc3NMaXN0KXQuY2xhc3NMaXN0LmFkZChlKTtlbHNle3ZhciBuPXRbQnRdO258fChuPXRbQnRdPXt9KSxuW2VdPSEwfX1mdW5jdGlvbiBIdCh0LGUpe2lmKHQuY2xhc3NMaXN0KXQuY2xhc3NMaXN0LnJlbW92ZShlKTtlbHNle3ZhciBuPXRbQnRdO24mJmRlbGV0ZSBuW2VdfX1mdW5jdGlvbiBxdCh0LGUsbil7YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm9jZXNzTGVhdmVOb2RlKGUpfSl9ZnVuY3Rpb24gR3QodCxlLG4pe3ZhciByPW4uZ2V0KHQpO2lmKCFyKXJldHVybiExO3ZhciBpPWUuZ2V0KHQpO3JldHVybiBpP3IuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaS5hZGQodCl9KTplLnNldCh0LHIpLG4uZGVsZXRlKHQpLCEwfXZhciBXdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBSdCh0LGUsbiksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IFR0KHQsZSxuKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLm9uUmVtb3ZhbENvbXBsZXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIub25SZW1vdmFsQ29tcGxldGUodCxlKX19cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyVHJpZ2dlcj1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPXQrIi0iK3IsYT10aGlzLl90cmlnZ2VyQ2FjaGVbb107aWYoIWEpe3ZhciBzPVtdLHU9dHQodGhpcy5fZHJpdmVyLGkscyk7aWYocy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdUaGUgYW5pbWF0aW9uIHRyaWdnZXIgIicrcisnIiBoYXMgZmFpbGVkIHRvIGJ1aWxkIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICcrcy5qb2luKCJcbiAtICIpKTthPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBFdCh0LGUpfShyLHUpLHRoaXMuX3RyaWdnZXJDYWNoZVtvXT1hfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixhKX0sdC5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kodCxlKX0sdC5wcm90b3R5cGUub25JbnNlcnQ9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxuLHIpfSx0LnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKHQsZSxuKX0sdC5wcm90b3R5cGUuZGlzYWJsZUFuaW1hdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfSx0LnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBvPU9iamVjdChyLmMpKGgobiksMik7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvWzBdLGUsb1sxXSxpKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsbixpKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGksbyl7aWYoIkAiPT1uLmNoYXJBdCgwKSl7dmFyIGE9T2JqZWN0KHIuYykoaChuKSwyKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKGFbMF0sZSxhWzFdLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsbixpLG8pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0tMSksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaCh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwbGF5ZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycy5jb25jYXQodGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVycyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUud2hlblJlbmRlcmluZ0RvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfSx0fSgpLFF0PSJhbmltYXRpb24iLFl0PSJhbmltYXRpb25lbmQiLEt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhKXt2YXIgcz10aGlzO3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9uYW1lPWUsdGhpcy5fZHVyYXRpb249bix0aGlzLl9kZWxheT1yLHRoaXMuX2Vhc2luZz1pLHRoaXMuX2ZpbGxNb2RlPW8sdGhpcy5fb25Eb25lRm49YSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fc3RhcnRUaW1lPTAsdGhpcy5fcG9zaXRpb249MCx0aGlzLl9ldmVudEZuPWZ1bmN0aW9uKHQpe3JldHVybiBzLl9oYW5kbGVDYWxsYmFjayh0KX19cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuO2U9dGhpcy5fZHVyYXRpb24rIm1zICIrdGhpcy5fZWFzaW5nKyIgIit0aGlzLl9kZWxheSsibXMgMSBub3JtYWwgIit0aGlzLl9maWxsTW9kZSsiICIrdGhpcy5fbmFtZSwobj1lZSh0PXRoaXMuX2VsZW1lbnQsIiIpLnRyaW0oKSkubGVuZ3RoJiYoZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKykiLCI9PT10LmNoYXJBdChuKSYmMH0obiksZT1uKyIsICIrZSksdGUodCwiIixlKSxKdCh0aGlzLl9lbGVtZW50LHRoaXMuX2V2ZW50Rm4sITEpLHRoaXMuX3N0YXJ0VGltZT1EYXRlLm5vdygpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe1p0KHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSwicGF1c2VkIil9LHQucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe1p0KHRoaXMuX2VsZW1lbnQsdGhpcy5fbmFtZSwicnVubmluZyIpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT1YdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUpO3RoaXMuX3Bvc2l0aW9uPXQqdGhpcy5fZHVyYXRpb24sdGUodGhpcy5fZWxlbWVudCwiRGVsYXkiLCItIit0aGlzLl9wb3NpdGlvbisibXMiLGUpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn0sdC5wcm90b3R5cGUuX2hhbmRsZUNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX25nVGVzdE1hbnVhbFRpbWVzdGFtcHx8RGF0ZS5ub3coKSxuPTFlMypwYXJzZUZsb2F0KHQuZWxhcHNlZFRpbWUudG9GaXhlZCgzKSk7dC5hbmltYXRpb25OYW1lPT10aGlzLl9uYW1lJiZNYXRoLm1heChlLXRoaXMuX3N0YXJ0VGltZSwwKT49dGhpcy5fZGVsYXkmJm4+PXRoaXMuX2R1cmF0aW9uJiZ0aGlzLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZuKCksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCEwKSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scjt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5maW5pc2goKSxlPXRoaXMuX25hbWUsKHI9JHQobj1lZSh0PXRoaXMuX2VsZW1lbnQsIiIpLnNwbGl0KCIsIiksZSkpPj0wJiYobi5zcGxpY2UociwxKSx0ZSh0LCIiLG4uam9pbigiLCIpKSkpfSx0fSgpO2Z1bmN0aW9uIFp0KHQsZSxuKXt0ZSh0LCJQbGF5U3RhdGUiLG4sWHQodCxlKSl9ZnVuY3Rpb24gWHQodCxlKXt2YXIgbj1lZSh0LCIiKTtyZXR1cm4gbi5pbmRleE9mKCIsIik+MD8kdChuLnNwbGl0KCIsIiksZSk6JHQoW25dLGUpfWZ1bmN0aW9uICR0KHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5pbmRleE9mKGUpPj0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEp0KHQsZSxuKXtuP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihZdCxlKTp0LmFkZEV2ZW50TGlzdGVuZXIoWXQsZSl9ZnVuY3Rpb24gdGUodCxlLG4scil7dmFyIGk9UXQrZTtpZihudWxsIT1yKXt2YXIgbz10LnN0eWxlW2ldO2lmKG8ubGVuZ3RoKXt2YXIgYT1vLnNwbGl0KCIsIik7YVtyXT1uLG49YS5qb2luKCIsIil9fXQuc3R5bGVbaV09bn1mdW5jdGlvbiBlZSh0LGUpe3JldHVybiB0LnN0eWxlW1F0K2VdfXZhciBuZT0ibGluZWFyIixyZT1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LklOSVRJQUxJWkVEPTFdPSJJTklUSUFMSVpFRCIsdFt0LlNUQVJURUQ9Ml09IlNUQVJURUQiLHRbdC5GSU5JU0hFRD0zXT0iRklOSVNIRUQiLHRbdC5ERVNUUk9ZRUQ9NF09IkRFU1RST1lFRCIsdH0oe30pLGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMuYW5pbWF0aW9uTmFtZT1uLHRoaXMuX2R1cmF0aW9uPXIsdGhpcy5fZGVsYXk9aSx0aGlzLl9maW5hbFN0eWxlcz1hLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuY3VycmVudFNuYXBzaG90PXt9LHRoaXMuc3RhdGU9MCx0aGlzLmVhc2luZz1vfHxuZSx0aGlzLnRvdGFsVGltZT1yK2ksdGhpcy5fYnVpbGRTdHlsZXIoKX1yZXR1cm4gdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5zdGF0ZT49cmUuREVTVFJPWUVEfHwodGhpcy5zdGF0ZT1yZS5ERVNUUk9ZRUQsdGhpcy5fc3R5bGVyLmRlc3Ryb3koKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fZmx1c2hEb25lRm5zKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLl9mbHVzaERvbmVGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdfSx0LnByb3RvdHlwZS5fZmx1c2hTdGFydEZucz1mdW5jdGlvbigpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5zdGF0ZT49cmUuRklOSVNIRUR8fCh0aGlzLnN0YXRlPXJlLkZJTklTSEVELHRoaXMuX3N0eWxlci5maW5pc2goKSx0aGlzLl9mbHVzaFN0YXJ0Rm5zKCksdGhpcy5fZmx1c2hEb25lRm5zKCkpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9zdHlsZXIuc2V0UG9zaXRpb24odCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0eWxlci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdGU+PXJlLlNUQVJURUR9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPj1yZS5JTklUSUFMSVpFRHx8KHRoaXMuc3RhdGU9cmUuSU5JVElBTElaRUQsdGhpcy5fc3R5bGVyLmFwcGx5KCksdGhpcy5fZGVsYXkmJnRoaXMuX3N0eWxlci5wYXVzZSgpKX0sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuc3RhdGU9cmUuU1RBUlRFRCksdGhpcy5fc3R5bGVyLnJlc3VtZSgpfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuX3N0eWxlci5wYXVzZSgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fYnVpbGRTdHlsZXIoKSx0aGlzLl9zdHlsZXIuYXBwbHkoKX0sdC5wcm90b3R5cGUuX2J1aWxkU3R5bGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdHlsZXI9bmV3IEt0KHRoaXMuZWxlbWVudCx0aGlzLmFuaW1hdGlvbk5hbWUsdGhpcy5fZHVyYXRpb24sdGhpcy5fZGVsYXksdGhpcy5lYXNpbmcsImZvcndhcmRzIixmdW5jdGlvbigpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLnRyaWdnZXJDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksZS5sZW5ndGg9MH0sdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5pbml0KCk7dmFyIGU9e307aWYodGhpcy5oYXNTdGFydGVkKCkpe3ZhciBuPXRoaXMuc3RhdGU+PXJlLkZJTklTSEVEO09iamVjdC5rZXlzKHRoaXMuX2ZpbmFsU3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyJvZmZzZXQiIT1yJiYoZVtyXT1uP3QuX2ZpbmFsU3R5bGVzW3JdOlkodC5lbGVtZW50LHIpKX0pfXRoaXMuY3VycmVudFNuYXBzaG90PWV9LHR9KCksb2U9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5lbGVtZW50PWUsci5fc3RhcnRpbmdTdHlsZXM9e30sci5fX2luaXRpYWxpemVkPSExLHIuX3N0eWxlcz1DKG4pLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7IXRoaXMuX19pbml0aWFsaXplZCYmdGhpcy5fc3RhcnRpbmdTdHlsZXMmJih0aGlzLl9faW5pdGlhbGl6ZWQ9ITAsT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0YXJ0aW5nU3R5bGVzW3RdPWUuZWxlbWVudC5zdHlsZVt0XX0pLHQucHJvdG90eXBlLmluaXQuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5pbml0KCksT2JqZWN0LmtleXModGhpcy5fc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxlLl9zdHlsZXNbdF0pfSksdC5wcm90b3R5cGUucGxheS5jYWxsKHRoaXMpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc3RhcnRpbmdTdHlsZXMmJihPYmplY3Qua2V5cyh0aGlzLl9zdGFydGluZ1N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLl9zdGFydGluZ1N0eWxlc1t0XTtuP2UuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4pOmUuZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX0pLHRoaXMuX3N0YXJ0aW5nU3R5bGVzPW51bGwsdC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpKX0sZX0oaS5kKSxhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9jb3VudD0wLHRoaXMuX2hlYWQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLHRoaXMuX3dhcm5pbmdJc3N1ZWQ9ITF9cmV0dXJuIHQucHJvdG90eXBlLnZhbGlkYXRlU3R5bGVQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0KX0sdC5wcm90b3R5cGUubWF0Y2hlc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geCh0LGUpfSx0LnByb3RvdHlwZS5jb250YWluc0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gUyh0LGUpfSx0LnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxlLG4pfSx0LnByb3RvdHlwZS5jb21wdXRlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtlXX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJAa2V5ZnJhbWVzICIrZSsiIHtcbiIsaT0iIjsobj1uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQyh0KX0pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2k9IiAiO3ZhciBlPXBhcnNlRmxvYXQodC5vZmZzZXQpO3IrPSIiK2krMTAwKmUrIiUge1xuIixpKz0iICIsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10W2VdO3N3aXRjaChlKXtjYXNlIm9mZnNldCI6cmV0dXJuO2Nhc2UiZWFzaW5nIjpyZXR1cm4gdm9pZChuJiYocis9aSsiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogIituKyI7XG4iKSk7ZGVmYXVsdDpyZXR1cm4gdm9pZChyKz0iIitpK2UrIjogIituKyI7XG4iKX19KSxyKz1pKyJ9XG4ifSkscis9In1cbiI7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gby5pbm5lckhUTUw9cixvfSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe3ZvaWQgMD09PW8mJihvPVtdKSxhJiZ0aGlzLl9ub3RpZnlGYXVsdHlTY3J1YmJlcigpO3ZhciBzPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaWV9KSx1PXt9O0cobixyKSYmcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHVbdF09ZVt0XX0pfSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQmJihBcnJheS5pc0FycmF5KHQpP3Q6W3RdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJiJlYXNpbmciIT1uJiYoZVtuXT10W25dKX0pfSksZX0oZT1XKHQsZSx1KSk7aWYoMD09bilyZXR1cm4gbmV3IG9lKHQsYyk7dmFyIGw9Imdlbl9jc3Nfa2ZfIit0aGlzLl9jb3VudCsrLGY9dGhpcy5idWlsZEtleWZyYW1lRWxlbWVudCh0LGwsZSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaGVhZCIpLmFwcGVuZENoaWxkKGYpO3ZhciBoPW5ldyBpZSh0LGUsbCxuLHIsaSxjKTtyZXR1cm4gaC5vbkRlc3Ryb3koZnVuY3Rpb24oKXt2YXIgdDsodD1mKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSksaH0sdC5wcm90b3R5cGUuX25vdGlmeUZhdWx0eVNjcnViYmVyPWZ1bmN0aW9uKCl7dGhpcy5fd2FybmluZ0lzc3VlZHx8KGNvbnNvbGUud2FybigiQGFuZ3VsYXIvYW5pbWF0aW9uczogcGxlYXNlIGxvYWQgdGhlIHdlYi1hbmltYXRpb25zLmpzIHBvbHlmaWxsIHRvIGFsbG93IHByb2dyYW1tYXRpYyBhY2Nlc3MuLi5cbiIsIiAgdmlzaXQgaHR0cDovL2JpdC5seS9JV3VrYW0gdG8gbGVhcm4gbW9yZSBhYm91dCB1c2luZyB0aGUgd2ViLWFuaW1hdGlvbi1qcyBwb2x5ZmlsbC4iKSx0aGlzLl93YXJuaW5nSXNzdWVkPSEwKX0sdH0oKSxzZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZWxlbWVudD10LHRoaXMua2V5ZnJhbWVzPWUsdGhpcy5vcHRpb25zPW4sdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9e30sdGhpcy5fZHVyYXRpb249bi5kdXJhdGlvbix0aGlzLl9kZWxheT1uLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1yZXR1cm4gdC5wcm90b3R5cGUuX29uRmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25Eb25lRm5zPVtdKX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5fcHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl9LHQucHJvdG90eXBlLl9idWlsZFBsYXllcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXRoaXMuX2luaXRpYWxpemVkKXt0aGlzLl9pbml0aWFsaXplZD0hMDt2YXIgZT10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxlLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1lLmxlbmd0aD9lW2UubGVuZ3RoLTFdOnt9LHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5fb25GaW5pc2goKX0pfX0sdC5wcm90b3R5cGUuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5fdHJpZ2dlcldlYkFuaW1hdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYW5pbWF0ZShlLG4pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITApLHRoaXMuZG9tUGxheWVyLnBsYXkoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuX3Jlc2V0RG9tUGxheWVyU3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9LHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5kb21QbGF5ZXIuY3VycmVudFRpbWU9dCp0aGlzLnRpbWV9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0b3RhbFRpbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYmVmb3JlRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT17fTt0aGlzLmhhc1N0YXJ0ZWQoKSYmT2JqZWN0LmtleXModGhpcy5fZmluYWxLZXlmcmFtZSkuZm9yRWFjaChmdW5jdGlvbihuKXsib2Zmc2V0IiE9biYmKGVbbl09dC5fZmluaXNoZWQ/dC5fZmluYWxLZXlmcmFtZVtuXTpZKHQuZWxlbWVudCxuKSl9KSx0aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksdWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNOYXRpdmVJbXBsPS9ce1xzKlxbbmF0aXZlXHMrY29kZVxdXHMqXH0vLnRlc3QobGUoKS50b1N0cmluZygpKSx0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXI9bmV3IGFlfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBFKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLm92ZXJyaWRlV2ViQW5pbWF0aW9uc1N1cHBvcnQ9ZnVuY3Rpb24odCl7dGhpcy5faXNOYXRpdmVJbXBsPXR9LHQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxlLG4scixpLG8sYSl7aWYodm9pZCAwPT09byYmKG89W10pLCFhJiYhdGhpcy5faXNOYXRpdmVJbXBsKXJldHVybiB0aGlzLl9jc3NLZXlmcmFtZXNEcml2ZXIuYW5pbWF0ZSh0LGUsbixyLGksbyk7dmFyIHM9e2R1cmF0aW9uOm4sZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O2kmJihzLmVhc2luZz1pKTt2YXIgdT17fSxjPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygc2V9KTtyZXR1cm4gRyhuLHIpJiZjLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5jdXJyZW50U25hcHNob3Q7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdVt0XT1lW3RdfSl9KSxlPVcodCxlPWUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBQKHQsITEpfSksdSksbmV3IHNlKHQsZSxzKX0sdH0oKTtmdW5jdGlvbiBjZSgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsZSgpfWZ1bmN0aW9uIGxlKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5kb2N1bWVudCYmRWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZXx8e319fSxOc2g1OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIEV9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGJ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4oImloWVkiKTt2YXIgcj1uKCJuNmdHIiksaT1uKCJZU2gyIiksbz1uKCJDY25HIiksYT1uKCJLOUlhIikscz1uKCJibmU1IiksdT1uKCJwMGliIiksYz1uKCJWbkQvIiksbD1uKCI2N1kvIiksZj1uKCJ0OWZaIiksaD1uKCJueTI0IiksZD1uKCJwMFNqIikscD1uKCJHaTNpIiksbT1uKCJtclNHIik7ZnVuY3Rpb24geSh0KXt0aHJvdyBFcnJvcigiQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiIrdCsiXCInIil9dmFyIHY9bmV3IG8ubygiTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9dCx0aGlzLl9jb250YWluZXI9ZX1yZXR1cm4gdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9LHR9KCksYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scix1LGwpe3ZhciBmPXRoaXM7dGhpcy5fZWxlbWVudFJlZj10LHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX25nWm9uZT11LHRoaXMuX2RvYz1sLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMSx0aGlzLl9wb3NpdGlvbj0ic3RhcnQiLHRoaXMuX21vZGU9Im92ZXIiLHRoaXMuX2Rpc2FibGVDbG9zZT0hMSx0aGlzLl9hdXRvRm9jdXM9ITAsdGhpcy5fYW5pbWF0aW9uU3RhcnRlZD1uZXcgby5tLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLm9wZW5lZENoYW5nZT1uZXcgby5tKCEwKSx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkPW5ldyBvLm0sdGhpcy5fbW9kZUNoYW5nZWQ9bmV3IGEuYSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3Q/KGYuX2RvYyYmKGYuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPWYuX2RvYy5hY3RpdmVFbGVtZW50KSxmLl9pc0ZvY3VzVHJhcEVuYWJsZWQmJmYuX2ZvY3VzVHJhcCYmZi5fdHJhcEZvY3VzKCkpOmYuX3Jlc3RvcmVGb2N1cygpfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7T2JqZWN0KHMuYSkoZi5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJrZXlkb3duIikucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXlDb2RlPT09aS5lJiYhZi5kaXNhYmxlQ2xvc2V9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBmLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7Zi5jbG9zZSgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KX0pfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHNldDpmdW5jdGlvbih0KXsodD0iZW5kIj09PXQ/ImVuZCI6InN0YXJ0IikhPXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249dCx0aGlzLm9uUG9zaXRpb25DaGFuZ2VkLmVtaXQoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtb2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tb2RlPXQsdGhpcy5fbW9kZUNoYW5nZWQubmV4dCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZUNsb3NlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbG9zZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVDbG9zZT1PYmplY3Qoci5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9Gb2N1cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRm9jdXN9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvRm9jdXM9T2JqZWN0KHIuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfb3BlbmVkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxPYmplY3QobC5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJjA9PT10LnRvU3RhdGUuaW5kZXhPZigib3BlbiIpfSksT2JqZWN0KGwuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfY2xvc2VkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIXR9KSxPYmplY3QobC5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNsb3NlZFN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGUmJiJ2b2lkIj09PXQudG9TdGF0ZX0pLE9iamVjdChsLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2lzRm9jdXNUcmFwRW5hYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZCYmInNpZGUiIT09dGhpcy5tb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl90cmFwRm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXV0b0ZvY3VzJiZ0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oZnVuY3Rpb24oZSl7ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1c3x8dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX0sdC5wcm90b3R5cGUuX3Jlc3RvcmVGb2N1cz1mdW5jdGlvbigpe2lmKHRoaXMuYXV0b0ZvY3VzKXt2YXIgdD10aGlzLl9kb2MmJnRoaXMuX2RvYy5hY3RpdmVFbGVtZW50O3QmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0KSYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkLHRoaXMuX29wZW5lZFZpYSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKSksdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ9bnVsbCx0aGlzLl9vcGVuZWRWaWE9bnVsbH19LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2ZvY3VzVHJhcC5lbmFibGVkPXRoaXMuX2lzRm9jdXNUcmFwRW5hYmxlZH0sdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRDaGVja2VkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fZW5hYmxlQW5pbWF0aW9ucz0hMCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9wZW5lZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcGVuZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLnRvZ2dsZShPYmplY3Qoci5iKSh0KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50b2dnbGUoITAsdCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9nZ2xlKCExKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IXRoaXMub3BlbmVkKSx2b2lkIDA9PT1lJiYoZT0icHJvZ3JhbSIpLHRoaXMuX29wZW5lZD10LHQ/KHRoaXMuX2FuaW1hdGlvblN0YXRlPXRoaXMuX2VuYWJsZUFuaW1hdGlvbnM/Im9wZW4iOiJvcGVuLWluc3RhbnQiLHRoaXMuX29wZW5lZFZpYT1lKToodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX3Jlc3RvcmVGb2N1cygpKSx0aGlzLl9mb2N1c1RyYXAmJih0aGlzLl9mb2N1c1RyYXAuZW5hYmxlZD10aGlzLl9pc0ZvY3VzVHJhcEVuYWJsZWQpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe24ub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGYuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXtyZXR1cm4gdChlPyJvcGVuIjoiY2xvc2UiKX0pfSl9LHQucHJvdG90eXBlLl9vbkFuaW1hdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGlvblN0YXJ0ZWQuZW1pdCh0KX0sdC5wcm90b3R5cGUuX29uQW5pbWF0aW9uRW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJvbVN0YXRlLG49dC50b1N0YXRlOygwPT09bi5pbmRleE9mKCJvcGVuIikmJiJ2b2lkIj09PWV8fCJ2b2lkIj09PW4mJjA9PT1lLmluZGV4T2YoIm9wZW4iKSkmJnRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodGhpcy5fb3BlbmVkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd2lkdGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkscyl7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciB1PXRoaXM7dGhpcy5fZGlyPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX25nWm9uZT1uLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMuYmFja2Ryb3BDbGljaz1uZXcgby5tLHRoaXMuX2Rlc3Ryb3llZD1uZXcgYS5hLHRoaXMuX2RvQ2hlY2tTdWJqZWN0PW5ldyBhLmEsdGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6bnVsbCxyaWdodDpudWxsfSx0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcz1uZXcgYS5hLHQmJnQuY2hhbmdlLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dS5fdmFsaWRhdGVEcmF3ZXJzKCksdS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKX0pLHRoaXMuX2F1dG9zaXplPWl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbmQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5kfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYXV0b3NpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b3NpemV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9hdXRvc2l6ZT1PYmplY3Qoci5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0JhY2tkcm9wIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGU/IXRoaXMuX3N0YXJ0fHwic2lkZSIhPT10aGlzLl9zdGFydC5tb2RlfHwhdGhpcy5fZW5kfHwic2lkZSIhPT10aGlzLl9lbmQubW9kZTp0aGlzLl9iYWNrZHJvcE92ZXJyaWRlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYmFja2Ryb3BPdmVycmlkZT1udWxsPT10P251bGw6T2JqZWN0KHIuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShPYmplY3QoZC5hKShudWxsKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fdmFsaWRhdGVEcmF3ZXJzKCksdC5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuX3dhdGNoRHJhd2VyVG9nZ2xlKGUpLHQuX3dhdGNoRHJhd2VyUG9zaXRpb24oZSksdC5fd2F0Y2hEcmF3ZXJNb2RlKGUpfSksKCF0Ll9kcmF3ZXJzLmxlbmd0aHx8dC5faXNEcmF3ZXJPcGVuKHQuX3N0YXJ0KXx8dC5faXNEcmF3ZXJPcGVuKHQuX2VuZCkpJiZ0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpLHQuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZG9DaGVja1N1YmplY3QucGlwZShPYmplY3QocC5hKSgxMCksT2JqZWN0KGguYSkodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kb0NoZWNrU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLl9kcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlbigpfSl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9hdXRvc2l6ZSYmdGhpcy5faXNQdXNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2RvQ2hlY2tTdWJqZWN0Lm5leHQoKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJUb2dnbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0Ll9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSxPYmplY3QoYy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdC5mcm9tU3RhdGUhPT10LnRvU3RhdGV9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpeyJvcGVuLWluc3RhbnQiIT09dC50b1N0YXRlJiYiTm9vcEFuaW1hdGlvbnMiIT09ZS5fYW5pbWF0aW9uTW9kZSYmZS5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItdHJhbnNpdGlvbiIpLGUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSwic2lkZSIhPT10Lm1vZGUmJnQub3BlbmVkQ2hhbmdlLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3NldENvbnRhaW5lckNsYXNzKHQub3BlbmVkKX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJQb3NpdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQub25Qb3NpdGlvbkNoYW5nZWQucGlwZShPYmplY3QoaC5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5hc09ic2VydmFibGUoKS5waXBlKE9iamVjdChmLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtlLl92YWxpZGF0ZURyYXdlcnMoKX0pfSl9LHQucHJvdG90eXBlLl93YXRjaERyYXdlck1vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Ll9tb2RlQ2hhbmdlZC5waXBlKE9iamVjdChoLmEpKE9iamVjdCh1LmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyx0aGlzLl9kZXN0cm95ZWQpKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSxlLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0LnByb3RvdHlwZS5fc2V0Q29udGFpbmVyQ2xhc3M9ZnVuY3Rpb24odCl7dD90aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWRyYXdlci1vcGVuZWQiKTp0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LWRyYXdlci1vcGVuZWQiKX0sdC5wcm90b3R5cGUuX3ZhbGlkYXRlRHJhd2Vycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3RhcnQ9dGhpcy5fZW5kPW51bGwsdGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJlbmQiPT1lLnBvc2l0aW9uPyhudWxsIT10Ll9lbmQmJnkoImVuZCIpLHQuX2VuZD1lKToobnVsbCE9dC5fc3RhcnQmJnkoInN0YXJ0IiksdC5fc3RhcnQ9ZSl9KSx0aGlzLl9yaWdodD10aGlzLl9sZWZ0PW51bGwsdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8odGhpcy5fbGVmdD10aGlzLl9lbmQsdGhpcy5fcmlnaHQ9dGhpcy5fc3RhcnQpOih0aGlzLl9sZWZ0PXRoaXMuX3N0YXJ0LHRoaXMuX3JpZ2h0PXRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9pc1B1c2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiYib3ZlciIhPXRoaXMuX3N0YXJ0Lm1vZGV8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiYib3ZlciIhPXRoaXMuX2VuZC5tb2RlfSx0LnByb3RvdHlwZS5fb25CYWNrZHJvcENsaWNrZWQ9ZnVuY3Rpb24oKXt0aGlzLmJhY2tkcm9wQ2xpY2suZW1pdCgpLHRoaXMuX2Nsb3NlTW9kYWxEcmF3ZXIoKX0sdC5wcm90b3R5cGUuX2Nsb3NlTW9kYWxEcmF3ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO1t0aGlzLl9zdGFydCx0aGlzLl9lbmRdLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWUuZGlzYWJsZUNsb3NlJiZ0Ll9jYW5IYXZlQmFja2Ryb3AoZSl9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCl9KX0sdC5wcm90b3R5cGUuX2lzU2hvd2luZ0JhY2tkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkmJnRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9zdGFydCl8fHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fZW5kKX0sdC5wcm90b3R5cGUuX2NhbkhhdmVCYWNrZHJvcD1mdW5jdGlvbih0KXtyZXR1cm4ic2lkZSIhPT10Lm1vZGV8fCEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sdC5wcm90b3R5cGUuX2lzRHJhd2VyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmdC5vcGVuZWR9LHQucHJvdG90eXBlLl91cGRhdGVDb250ZW50TWFyZ2lucz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLG49MDtpZih0aGlzLl9sZWZ0JiZ0aGlzLl9sZWZ0Lm9wZW5lZCYmKCJzaWRlIj09dGhpcy5fbGVmdC5tb2RlP2UrPXRoaXMuX2xlZnQuX3dpZHRoOiJwdXNoIj09dGhpcy5fbGVmdC5tb2RlJiYoZSs9cj10aGlzLl9sZWZ0Ll93aWR0aCxuLT1yKSksdGhpcy5fcmlnaHQmJnRoaXMuX3JpZ2h0Lm9wZW5lZClpZigic2lkZSI9PXRoaXMuX3JpZ2h0Lm1vZGUpbis9dGhpcy5fcmlnaHQuX3dpZHRoO2Vsc2UgaWYoInB1c2giPT10aGlzLl9yaWdodC5tb2RlKXt2YXIgcjtuKz1yPXRoaXMuX3JpZ2h0Ll93aWR0aCxlLT1yfWU9PT10aGlzLl9jb250ZW50TWFyZ2lucy5sZWZ0JiZuPT09dGhpcy5fY29udGVudE1hcmdpbnMucmlnaHR8fCh0aGlzLl9jb250ZW50TWFyZ2lucz17bGVmdDplLHJpZ2h0Om59LHRoaXMuX25nWm9uZS5ydW4oZnVuY3Rpb24oKXtyZXR1cm4gdC5fY29udGVudE1hcmdpbkNoYW5nZXMubmV4dCh0Ll9jb250ZW50TWFyZ2lucyl9KSl9LHR9KCksdz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLGUsbil8fHRoaXN9cmV0dXJuIE9iamVjdChtLmIpKGUsdCksZX0oZykseD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9maXhlZEluVmlld3BvcnQ9ITEsZS5fZml4ZWRUb3BHYXA9MCxlLl9maXhlZEJvdHRvbUdhcD0wLGV9cmV0dXJuIE9iamVjdChtLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZEluVmlld3BvcnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRJblZpZXdwb3J0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRJblZpZXdwb3J0PU9iamVjdChyLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRUb3BHYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRUb3BHYXB9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9maXhlZFRvcEdhcD1PYmplY3Qoci5kKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkQm90dG9tR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkQm90dG9tR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRCb3R0b21HYXA9T2JqZWN0KHIuZCkodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oYiksUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KG0uYikoZSx0KSxlfShfKSxFPWZ1bmN0aW9uKCl7fX0sT3pmQjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBTfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pO3ZhciByPW4oIkNjbkciKSxpPW4oIklwMFIiKSxvPW4oIjI2RlUiKSxhPW4oIlZuRC8iKSxzPW4oIjY3WS8iKSx1PW4oIm1yU0ciKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoT2JqZWN0KGkucSkoZSkpe3ZhciBuPS9cYmZsZXgtbGF5b3V0LS4rP1xiL2c7QXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoIltjbGFzcyo9IitsKyJdIikpLmZvckVhY2goZnVuY3Rpb24odCl7dC5jbGFzc0xpc3QuY29udGFpbnMobCsic3NyIikmJnQucGFyZW50Tm9kZT90LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCk6dC5jbGFzc05hbWUucmVwbGFjZShuLCIiKX0pfX19dmFyIGw9ImZsZXgtbGF5b3V0LSIsZj1uZXcgci5vKCJGbGV4IExheW91dCB0b2tlbiwgY29sbGVjdCBhbGwgYnJlYWtwb2ludHMgaW50byBvbmUgcHJvdmlkZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksaD1be2FsaWFzOiJ4cyIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMHB4KSBhbmQgKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJndC14cyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIn0se2FsaWFzOiJsdC1zbSIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogNTk5cHgpIn0se2FsaWFzOiJzbSIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Imd0LXNtIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkifSx7YWxpYXM6Imx0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWF4LXdpZHRoOiA5NTlweCkifSx7YWxpYXM6Im1kIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkifSx7YWxpYXM6Imd0LW1kIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxMjgwcHgpIn0se2FsaWFzOiJsdC1sZyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTI3OXB4KSJ9LHthbGlhczoibGciLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDEyODBweCkgYW5kIChtYXgtd2lkdGg6IDE5MTlweCkifSx7YWxpYXM6Imd0LWxnIixvdmVybGFwcGluZzohMCxtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxOTIwcHgpIn0se2FsaWFzOiJsdC14bCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogMTkyMHB4KSJ9LHthbGlhczoieGwiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDE5MjBweCkgYW5kIChtYXgtd2lkdGg6IDUwMDBweCkifV0sZD0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiA5NjBweCkgYW5kIChtYXgtd2lkdGg6IDEyNzlweCkiLHA9IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSIsbT0iKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtaW4td2lkdGg6IDg0MHB4KSIseT0iKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpIix2PXtIQU5EU0VUOiIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNTk5cHgpLCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkgYW5kIChtYXgtd2lkdGg6IDk1OXB4KSIsVEFCTEVUOnArIiAsICIrZCxXRUI6bSsiLCAiK3krIiAiLEhBTkRTRVRfUE9SVFJBSVQ6IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWF4LXdpZHRoOiA1OTlweCkiLFRBQkxFVF9QT1JUUkFJVDpwKyIgIixXRUJfUE9SVFJBSVQ6IiIrbSxIQU5EU0VUX0xBTkRTQ0FQRToiKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCldIixUQUJMRVRfTEFORFNDQVBFOiIiK2QsV0VCX0xBTkRTQ0FQRToiIit5fSxnPVt7YWxpYXM6ImhhbmRzZXQiLG1lZGlhUXVlcnk6di5IQU5EU0VUfSx7YWxpYXM6ImhhbmRzZXQubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OnYuSEFORFNFVF9MQU5EU0NBUEV9LHthbGlhczoiaGFuZHNldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTp2LkhBTkRTRVRfUE9SVFJBSVR9LHthbGlhczoidGFibGV0IixtZWRpYVF1ZXJ5OnYuVEFCTEVUfSx7YWxpYXM6InRhYmxldC5sYW5kc2NhcGUiLG1lZGlhUXVlcnk6di5UQUJMRVR9LHthbGlhczoidGFibGV0LnBvcnRyYWl0IixtZWRpYVF1ZXJ5OnYuVEFCTEVUX1BPUlRSQUlUfSx7YWxpYXM6IndlYiIsbWVkaWFRdWVyeTp2LldFQixvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OnYuV0VCX0xBTkRTQ0FQRSxvdmVybGFwcGluZzohMH0se2FsaWFzOiJ3ZWIucG9ydHJhaXQiLG1lZGlhUXVlcnk6di5XRUJfUE9SVFJBSVQsb3ZlcmxhcHBpbmc6ITB9XTtmdW5jdGlvbiBiKHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTtmb3IodmFyIHI9MCxpPWU7cjxpLmxlbmd0aDtyKyspe3ZhciBvPWlbcl07aWYobnVsbCE9bylmb3IodmFyIGEgaW4gbylvLmhhc093blByb3BlcnR5KGEpJiYodFthXT1vW2FdKX1yZXR1cm4gdH12YXIgXz0vKFwufC18XykvZztmdW5jdGlvbiB3KHQpe3ZhciBlPXQubGVuZ3RoPjA/dC5jaGFyQXQoMCk6IiIsbj10Lmxlbmd0aD4xP3Quc2xpY2UoMSk6IiI7cmV0dXJuIGUudG9VcHBlckNhc2UoKStufXZhciB4PXthZGRGbGV4VG9QYXJlbnQ6ITAsYWRkT3JpZW50YXRpb25CcHM6ITEsZGlzYWJsZURlZmF1bHRCcHM6ITEsZGlzYWJsZVZlbmRvclByZWZpeGVzOiExLHNlcnZlckxvYWRlZDohMSx1c2VDb2x1bW5CYXNpc1plcm86ITB9LFM9bmV3IHIubygiRmxleCBMYXlvdXQgdG9rZW4sIGNvbmZpZyBvcHRpb25zIGZvciB0aGUgbGlicmFyeSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4geH19KSxFPW5ldyByLm8oIlRva2VuIChAYW5ndWxhci9mbGV4LWxheW91dCkgQnJlYWtwb2ludHMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHIuVikoZiksZT1PYmplY3Qoci5WKShTKSxuPVtdLmNvbmNhdC5hcHBseShbXSwodHx8W10pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Olt0XX0pKTtyZXR1cm4gZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIG4scj17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JbdC5hbGlhc109dH0pLGUuZm9yRWFjaChmdW5jdGlvbih0KXtyW3QuYWxpYXNdP2Ioclt0LmFsaWFzXSx0KTpyW3QuYWxpYXNdPXR9KSwobj1PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN1ZmZpeHx8KHQuc3VmZml4PXQuYWxpYXMucmVwbGFjZShfLCJ8Iikuc3BsaXQoInwiKS5tYXAodykuam9pbigiIiksdC5vdmVybGFwcGluZz0hIXQub3ZlcmxhcHBpbmcpfSksbn0oKGUuZGlzYWJsZURlZmF1bHRCcHM/W106aCkuY29uY2F0KGUuYWRkT3JpZW50YXRpb25CcHM/ZzpbXSksbil9fSksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fcmVnaXN0cnk9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpdGVtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic29ydGVkSXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10Lm92ZXJsYXBwaW5nfSksZT10aGlzLl9yZWdpc3RyeS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuITAhPT10Lm92ZXJsYXBwaW5nfSk7cmV0dXJuIHQuY29uY2F0KGUpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFsaWFzPT10fSl8fG51bGx9LHQucHJvdG90eXBlLmZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1lZGlhUXVlcnk9PXR9KXx8bnVsbH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGFwcGluZ3MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAxPT10Lm92ZXJsYXBwaW5nfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhbGlhc2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlhc30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3VmZml4ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1ZmZpeD90LnN1ZmZpeDoiIn0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKEUpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dm9pZCAwPT09dCYmKHQ9ITEpLHZvaWQgMD09PWUmJihlPSJhbGwiKSx2b2lkIDA9PT1uJiYobj0iIiksdm9pZCAwPT09ciYmKHI9IiIpLHRoaXMubWF0Y2hlcz10LHRoaXMubWVkaWFRdWVyeT1lLHRoaXMubXFBbGlhcz1uLHRoaXMuc3VmZml4PXJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KHRoaXMubWF0Y2hlcyx0aGlzLm1lZGlhUXVlcnksdGhpcy5tcUFsaWFzLHRoaXMuc3VmZml4KX0sdH0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fem9uZT10LHRoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3JlZ2lzdHJ5PW5ldyBNYXAsdGhpcy5fc291cmNlPW5ldyBvLmEobmV3IE8oITApKSx0aGlzLl9vYnNlcnZhYmxlJD10aGlzLl9zb3VyY2UuYXNPYnNlcnZhYmxlKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlZ2lzdHJ5LmdldCh0KTtyZXR1cm4hIWUmJmUubWF0Y2hlc30sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZWdpc3RlclF1ZXJ5KHQpLHRoaXMuX29ic2VydmFibGUkLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIXR8fGUubWVkaWFRdWVyeT09PXR9KSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P1tdOiJzdHJpbmciPT10eXBlb2YgdD9bdF06KGU9e30sdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWUuaGFzT3duUHJvcGVydHkodCkmJihlW3RdPSEwKX0pKTt2YXIgZX0odCk7bi5sZW5ndGg+MCYmKHRoaXMuX3ByZXBhcmVRdWVyeUNTUyhuLHRoaXMuX2RvY3VtZW50KSxuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fcmVnaXN0cnkuZ2V0KHQpLHI9ZnVuY3Rpb24obil7ZS5fem9uZS5ydW4oZnVuY3Rpb24oKXt2YXIgcj1uZXcgTyhuLm1hdGNoZXMsdCk7ZS5fc291cmNlLm5leHQocil9KX07bnx8KChuPWUuX2J1aWxkTVFMKHQpKS5hZGRMaXN0ZW5lcihyKSxlLl9yZWdpc3RyeS5zZXQodCxuKSksbi5tYXRjaGVzJiZyKG4pfSkpfSx0LnByb3RvdHlwZS5fYnVpbGRNUUw9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLnEpKHRoaXMuX3BsYXRmb3JtSWQpJiZ3aW5kb3cubWF0Y2hNZWRpYSgiYWxsIikuYWRkTGlzdGVuZXI/d2luZG93Lm1hdGNoTWVkaWEodCk6e21hdGNoZXM6ImFsbCI9PT10fHwiIj09PXQsbWVkaWE6dCxhZGRMaXN0ZW5lcjpmdW5jdGlvbigpe30scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24oKXt9fX0sdC5wcm90b3R5cGUuX3ByZXBhcmVRdWVyeUNTUz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFrW3RdfSk7aWYobi5sZW5ndGg+MCl7dmFyIHI9bi5qb2luKCIsICIpO3RyeXt2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7aS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGkuc3R5bGVTaGVldHx8aS5hcHBlbmRDaGlsZChlLmNyZWF0ZVRleHROb2RlKCJcbi8qXG4gIEBhbmd1bGFyL2ZsZXgtbGF5b3V0IC0gd29ya2Fyb3VuZCBmb3IgcG9zc2libGUgYnJvd3NlciBxdWlyayB3aXRoIG1lZGlhUXVlcnkgbGlzdGVuZXJzXG4gIHNlZSBodHRwOi8vYml0Lmx5LzJzZDRITVBcbiovXG5AbWVkaWEgIityKyIgey5meC1xdWVyeS10ZXN0eyB9fVxuIikpLGUuaGVhZC5hcHBlbmRDaGlsZChpKSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGtbdF09aX0pfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IodCl9fX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoci54KSxPYmplY3Qoci5WKShyLnopLE9iamVjdChyLlYpKGkuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxrPXt9O2Z1bmN0aW9uIEEodCxlKXtyZXR1cm4gYih0LGU/e21xQWxpYXM6ZS5hbGlhcyxzdWZmaXg6ZS5zdWZmaXh9Ont9KX12YXIgaj1mdW5jdGlvbigpe30sST1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJyZWFrcG9pbnRzPXQsdGhpcy5tZWRpYVdhdGNoZXI9ZSx0aGlzLmZpbHRlck92ZXJsYXBzPSEwLHRoaXMuX3JlZ2lzdGVyQnJlYWtQb2ludHMoKSx0aGlzLm9ic2VydmFibGUkPXRoaXMuX2J1aWxkT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90b01lZGlhUXVlcnkodCk7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLmlzQWN0aXZlKGUpfSx0LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLm9ic2VydmFibGUkLnN1YnNjcmliZSh0LGUsbil9LHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9ic2VydmFibGUkfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha1BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLm1lZGlhV2F0Y2hlci5yZWdpc3RlclF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fYnVpbGRPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXM7cmV0dXJuIHRoaXMubWVkaWFXYXRjaGVyLm9ic2VydmUoKS5waXBlKE9iamVjdChhLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5tYXRjaGVzfSksT2JqZWN0KGEuYSkoZnVuY3Rpb24obil7dmFyIHI9dC5icmVha3BvaW50cy5maW5kQnlRdWVyeShuLm1lZGlhUXVlcnkpO3JldHVybiFyfHwhKGUuZmlsdGVyT3ZlcmxhcHMmJnIub3ZlcmxhcHBpbmcpfSksT2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIEEoZSx0Ll9maW5kQnlRdWVyeShlLm1lZGlhUXVlcnkpKX0pKX0sdC5wcm90b3R5cGUuX2ZpbmRCeUFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHQpfSx0LnByb3RvdHlwZS5fZmluZEJ5UXVlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCl9LHQucHJvdG90eXBlLl90b01lZGlhUXVlcnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZEJ5QWxpYXModCl8fHRoaXMuX2ZpbmRCeVF1ZXJ5KHQpO3JldHVybiBlP2UubWVkaWFRdWVyeTp0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShDKSxPYmplY3Qoci5WKShUKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLE09ZnVuY3Rpb24oKXt9LFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5zdHlsZXNoZWV0PW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLmFkZFN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpO3I/ci5zZXQoZSxuKTp0aGlzLnN0eWxlc2hlZXQuc2V0KHQsbmV3IE1hcChbW2Usbl1dKSl9LHQucHJvdG90eXBlLmNsZWFyU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5zdHlsZXNoZWV0LmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFN0eWxlRm9yRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuc3R5bGVzaGVldC5nZXQodCkscj0iIjtpZihuKXt2YXIgaT1uLmdldChlKTsibnVtYmVyIiE9dHlwZW9mIGkmJiJzdHJpbmciIT10eXBlb2YgaXx8KHI9aSsiIil9cmV0dXJuIHJ9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxOPW5ldyByLm8oIkZsZXhMYXlvdXRTZXJ2ZXJMb2FkZWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITF9fSksUj1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fb3B0aW9ucz10LHRoaXMuX21lZGlhTW9uaXRvcj1lLHRoaXMuX29uTWVkaWFDaGFuZ2VzPW4sdGhpcy5fc3Vic2NyaWJlcnM9W10sdGhpcy5fcmVnaXN0cnlNYXA9dGhpcy5fYnVpbGRSZWdpc3RyeU1hcCgpLHRoaXMuX3N1YnNjcmliZXJzPXRoaXMuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJlZ2lzdHJ5RnJvbUxhcmdlc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuc2xpY2UoKS5yZXZlcnNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJtZWRpYU1vbml0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFNb25pdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkSW5wdXRLZXkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkSW5wdXRLZXl8fHRoaXMuX29wdGlvbnMuYmFzZUtleX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3RpdmF0ZWRJbnB1dEtleTtyZXR1cm4gdGhpcy5oYXNLZXlWYWx1ZSh0KT90aGlzLl9sb29rdXBLZXlWYWx1ZSh0KTp0aGlzLl9vcHRpb25zLmRlZmF1bHRWYWx1ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fb3B0aW9ucy5pbnB1dEtleXNbdF19LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudW5zdWJzY3JpYmUoKX0pLHRoaXMuX3N1YnNjcmliZXJzPVtdfSx0LnByb3RvdHlwZS5fY29uZmlndXJlQ2hhbmdlT2JzZXJ2ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0aGlzLl9yZWdpc3RyeU1hcC5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuX2tleUluVXNlKG4ua2V5KSYmZS5wdXNoKHQubWVkaWFNb25pdG9yLm9ic2VydmUobi5hbGlhcykucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbihlKXtyZXR1cm4oZT1lLmNsb25lKCkpLnByb3BlcnR5PXQuX29wdGlvbnMuYmFzZUtleSxlfSkpLnN1YnNjcmliZShmdW5jdGlvbihlKXt0Ll9vbk1vbml0b3JFdmVudHMoZSl9KSl9KSxlfSx0LnByb3RvdHlwZS5fYnVpbGRSZWdpc3RyeU1hcD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMubWVkaWFNb25pdG9yLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYih7fSxlLHtiYXNlS2V5OnQuX29wdGlvbnMuYmFzZUtleSxrZXk6dC5fb3B0aW9ucy5iYXNlS2V5K2Uuc3VmZml4fSl9KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2tleUluVXNlKGUua2V5KX0pfSx0LnByb3RvdHlwZS5fb25Nb25pdG9yRXZlbnRzPWZ1bmN0aW9uKHQpe3QucHJvcGVydHk9PXRoaXMuX29wdGlvbnMuYmFzZUtleSYmKHQudmFsdWU9dGhpcy5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWUodCksdGhpcy5fb25NZWRpYUNoYW5nZXModCkpfSx0LnByb3RvdHlwZS5fa2V5SW5Vc2U9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX2xvb2t1cEtleVZhbHVlKHQpfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQWN0aXZhdGVkVmFsdWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fb3B0aW9ucy5iYXNlS2V5K3Quc3VmZml4LG49dGhpcy5fYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5PXRoaXMuX3ZhbGlkYXRlSW5wdXRLZXkobj10Lm1hdGNoZXM/ZTpuPT1lPyIiOm4pLHRoaXMuYWN0aXZhdGVkSW5wdXR9LHQucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4hZS5fa2V5SW5Vc2UodCl9O3JldHVybiBuKHQpJiZ0aGlzLm1lZGlhTW9uaXRvci5hY3RpdmVPdmVybGFwcy5zb21lKGZ1bmN0aW9uKHIpe3ZhciBpPWUuX29wdGlvbnMuYmFzZUtleStyLnN1ZmZpeDtyZXR1cm4hbihpKSYmKHQ9aSwhMCl9KSx0fSx0LnByb3RvdHlwZS5fbG9va3VwS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0fSgpLEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9tZWRpYU1vbml0b3I9dCx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fc3R5bGVyPW4sdGhpcy5faW5wdXRNYXA9e30sdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaGFzTWVkaWFRdWVyeUxpc3RlbmVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tcUFjdGl2YXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRWYWx1ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tcUFjdGl2YXRpb24/dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0OnZvaWQgMH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlLG49ImJhc2VLZXkiO3RoaXMuX21xQWN0aXZhdGlvbiYmKGU9dGhpcy5faW5wdXRNYXBbbj10aGlzLl9tcUFjdGl2YXRpb24uYWN0aXZhdGVkSW5wdXRLZXldLHRoaXMuX2lucHV0TWFwW25dPXQpO3ZhciBpLG89bmV3IHIuRyhlLHQsITEpO3RoaXMubmdPbkNoYW5nZXMoKChpPXt9KVtuXT1vLGkpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudEVsZW1lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuYXRpdmVFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fcXVlcnlJbnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5wdXRNYXBbdF19LHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5fZGlzcGxheT10aGlzLl9nZXREaXNwbGF5U3R5bGUoKSx0aGlzLl9oYXNJbml0aWFsaXplZD0hMH0sdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJCYXNlRGlyZWN0aXZlOjpuZ09uQ2hhbmdlcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzczogIit0KX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9tcUFjdGl2YXRpb24mJnRoaXMuX21xQWN0aXZhdGlvbi5kZXN0cm95KCksZGVsZXRlIHRoaXMuX21lZGlhTW9uaXRvcn0sdC5wcm90b3R5cGUuX2dldERlZmF1bHRWYWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9xdWVyeUlucHV0KHQpO3JldHVybiB2b2lkIDAhPT1uJiZudWxsIT09biYmIiIhPT1uP246ZX0sdC5wcm90b3R5cGUuX2dldERpc3BsYXlTdHlsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwU3R5bGUodCwiZGlzcGxheSIpfSx0LnByb3RvdHlwZS5fZ2V0QXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIubG9va3VwQXR0cmlidXRlVmFsdWUoZSx0KX0sdC5wcm90b3R5cGUuX2dldEZsZXhGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpO3ZhciBuLHI9InJvdyI7aWYodCYmKHI9KG49dGhpcy5fc3R5bGVyLmdldEZsb3dEaXJlY3Rpb24odCkpWzBdLCFuWzFdJiZlKSl7dmFyIGk9ZnVuY3Rpb24odCl7dmFyIGUsbixyPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxyPWVbMV0saT1lWzJdO3JldHVybiBSLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPVJbMF0pLCJpbmxpbmUiPT09ciYmKHI9ImlubGluZSIhPT1pP2k6IiIsaT0iaW5saW5lIiksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KHIpLCEhaV19KHQpO3JldHVybiBuPXJbMl0sdm9pZCAwPT09KGU9clsxXSkmJihlPW51bGwpLHZvaWQgMD09PW4mJihuPSExKSx7ZGlzcGxheTpuPyJpbmxpbmUtZmxleCI6ImZsZXgiLCJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsImZsZXgtZGlyZWN0aW9uIjpyWzBdLCJmbGV4LXdyYXAiOmV8fG51bGx9fShyKTt0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHMoaSxbdF0pfXJldHVybiByLnRyaW0oKXx8InJvdyJ9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj10aGlzLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50KG4sdCxlKX0sdC5wcm90b3R5cGUuX2FwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKHQsZSl9LHQucHJvdG90eXBlLl9jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbiBpbiBlKXRoaXMuX2lucHV0TWFwW25dPWVbbl07ZWxzZSB0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LHQucHJvdG90eXBlLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuX21xQWN0aXZhdGlvbil7dmFyIHI9bmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLmJhc2VLZXk9dCx0aGlzLmRlZmF1bHRWYWx1ZT1lLHRoaXMuaW5wdXRLZXlzPW59KHQsZSx0aGlzLl9pbnB1dE1hcCk7dGhpcy5fbXFBY3RpdmF0aW9uPW5ldyBEKHIsdGhpcy5fbWVkaWFNb25pdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSl9cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbk5vZGVzIix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbixlPVtdLG49dC5sZW5ndGg7bi0tOyllW25dPXRbbl07cmV0dXJuIGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQST1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5faW5wdXRNYXApLmxlbmd0aC0odGhpcy5faW5wdXRNYXBbdF0/MTowKT4wfSx0LnByb3RvdHlwZS5oYXNLZXlWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uLmhhc0tleVZhbHVlKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc0luaXRpYWxpemVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc0luaXRpYWxpemVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksTD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLG4scixpKXx8dGhpcztyZXR1cm4gby5fYmFzZUtleT1lLG8uX21lZGlhTW9uaXRvcj1uLG8uX2VsZW1lbnRSZWY9cixvLl9zdHlsZXI9aSxvfXJldHVybiBPYmplY3QodS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWN0aXZlS2V5Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbXFBY3RpdmF0aW9uLGU9dD90LmFjdGl2YXRlZElucHV0S2V5OnRoaXMuX2Jhc2VLZXk7cmV0dXJuImNsYXNzIj09PWU/ImtsYXp6IjplfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5wdXRNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW5wdXRNYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJtcUFjdGl2YXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcm90b3R5cGUuaGFzUmVzcG9uc2l2ZUFQSS5jYWxsKHRoaXMsdGhpcy5fYmFzZUtleSl9LGUucHJvdG90eXBlLnF1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5fcXVlcnlJbnB1dCh0KTp2b2lkIDB9LGUucHJvdG90eXBlLmNhY2hlSW5wdXQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPSExKSxuKXRoaXMuX2NhY2hlSW5wdXRSYXcodCxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpdGhpcy5fY2FjaGVJbnB1dEFycmF5KHQsZSk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpdGhpcy5fY2FjaGVJbnB1dE9iamVjdCh0LGUpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjbGFzcyB2YWx1ZSAnIit0KyInIHByb3ZpZGVkLiBEaWQgeW91IHdhbnQgdG8gY2FjaGUgdGhlIHJhdyB2YWx1ZT8iKTt0aGlzLl9jYWNoZUlucHV0U3RyaW5nKHQsZSl9fSxlLnByb3RvdHlwZS5saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKHQsZSxuKX0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRSYXc9ZnVuY3Rpb24odCxlKXt0JiYodGhpcy5faW5wdXRNYXBbdF09ZSl9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0QXJyYXk9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIiksdGhpcy5faW5wdXRNYXBbdF09ZT9lLmpvaW4oIiAiKToiIn0sZS5wcm90b3R5cGUuX2NhY2hlSW5wdXRPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT10JiYodD0iIik7dmFyIG49W107aWYoZSlmb3IodmFyIHIgaW4gZSllW3JdJiZuLnB1c2gocik7dGhpcy5faW5wdXRNYXBbdF09bi5qb2luKCIgIil9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0U3RyaW5nPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2lucHV0TWFwW3RdPWV9LGV9KEYpLFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fYnJlYWtwb2ludHM9dCx0aGlzLl9tYXRjaE1lZGlhPWUsdGhpcy5fcmVnaXN0ZXJCcmVha3BvaW50cygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImJyZWFrcG9pbnRzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLml0ZW1zLnNsaWNlKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVPdmVybGFwcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzLm92ZXJsYXBwaW5ncy5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXRjaE1lZGlhLmlzQWN0aXZlKGUubWVkaWFRdWVyeSl9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1udWxsO3RoaXMuYnJlYWtwb2ludHMucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7IiIhPT1uLmFsaWFzJiYhZSYmdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpJiYoZT1uKX0pO3ZhciBuPXRoaXMuYnJlYWtwb2ludHNbMF07cmV0dXJuIGV8fCh0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKG4ubWVkaWFRdWVyeSk/bjpudWxsKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodCk7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEuaXNBY3RpdmUoZT9lLm1lZGlhUXVlcnk6dCl9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModHx8IiIpfHx0aGlzLl9icmVha3BvaW50cy5maW5kQnlRdWVyeSh0fHwiIik7cmV0dXJuIHRoaXMuX21hdGNoTWVkaWEub2JzZXJ2ZShlP2UubWVkaWFRdWVyeTp0KS5waXBlKE9iamVjdChzLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBBKHQsZSl9KSxPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4hZXx8IiIhPT10Lm1xQWxpYXN9KSl9LHQucHJvdG90eXBlLl9yZWdpc3RlckJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYnJlYWtwb2ludHMuc29ydGVkSXRlbXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1lZGlhUXVlcnl9KTt0aGlzLl9tYXRjaE1lZGlhLnJlZ2lzdGVyUXVlcnkodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKEMpLE9iamVjdChyLlYpKFQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCk7ZnVuY3Rpb24geih0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXXx8IiI7c3dpdGNoKGUpe2Nhc2UiZGlzcGxheSI6dC5kaXNwbGF5PSJmbGV4Ij09PW4/WyItd2Via2l0LWZsZXgiLCJmbGV4Il06ImlubGluZS1mbGV4Ij09PW4/WyItd2Via2l0LWlubGluZS1mbGV4IiwiaW5saW5lLWZsZXgiXTpuO2JyZWFrO2Nhc2UiYWxpZ24taXRlbXMiOmNhc2UiYWxpZ24tc2VsZiI6Y2FzZSJhbGlnbi1jb250ZW50IjpjYXNlImZsZXgiOmNhc2UiZmxleC1iYXNpcyI6Y2FzZSJmbGV4LWZsb3ciOmNhc2UiZmxleC1ncm93IjpjYXNlImZsZXgtc2hyaW5rIjpjYXNlImZsZXgtd3JhcCI6Y2FzZSJqdXN0aWZ5LWNvbnRlbnQiOnRbIi13ZWJraXQtIitlXT1uO2JyZWFrO2Nhc2UiZmxleC1kaXJlY3Rpb24iOnRbIi13ZWJraXQtZmxleC1kaXJlY3Rpb24iXT1uPW58fCJyb3ciLHRbImZsZXgtZGlyZWN0aW9uIl09bjticmVhaztjYXNlIm9yZGVyIjp0Lm9yZGVyPXRbIi13ZWJraXQtIitlXT1pc05hTihuKT8iMCI6bn19cmV0dXJuIHR9dmFyIEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3NlcnZlclN0eWxlc2hlZXQ9dCx0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ9ZSx0aGlzLl9wbGF0Zm9ybUlkPW4sdGhpcy5sYXlvdXRDb25maWc9cn1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIHI9e307InN0cmluZyI9PXR5cGVvZiBlJiYocltlXT1uLGU9cikscj10aGlzLmxheW91dENvbmZpZy5kaXNhYmxlVmVuZG9yUHJlZml4ZXM/ZTp6KGUpLHRoaXMuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KHIsdCl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpczt2b2lkIDA9PT1lJiYoZT1bXSk7dmFyIHI9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP3Q6eih0KTtlLmZvckVhY2goZnVuY3Rpb24odCl7bi5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQocix0KX0pfSx0LnByb3RvdHlwZS5nZXRGbG93RGlyZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9va3VwU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKTtlPT09VSYmKGU9IiIpO3ZhciBuPXRoaXMubG9va3VwSW5saW5lU3R5bGUodCwiZmxleC1kaXJlY3Rpb24iKXx8T2JqZWN0KGkucikodGhpcy5fcGxhdGZvcm1JZCkmJnRoaXMuX3NlcnZlck1vZHVsZUxvYWRlZD9lOiIiO3JldHVybltlfHwicm93IixuXX0sdC5wcm90b3R5cGUubG9va3VwQXR0cmlidXRlVmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl8fCIifSx0LnByb3RvdHlwZS5sb29rdXBJbmxpbmVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QoaS5xKSh0aGlzLl9wbGF0Zm9ybUlkKT90LnN0eWxlW2VdOnRoaXMuX2dldFNlcnZlclN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmxvb2t1cFN0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1uJiYobj0hMSk7dmFyIHI9IiI7cmV0dXJuIHQmJigocj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsZSkpfHwoT2JqZWN0KGkucSkodGhpcy5fcGxhdGZvcm1JZCk/bnx8KHI9Z2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTp0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQmJihyPXRoaXMuX3NlcnZlclN0eWxlc2hlZXQuZ2V0U3R5bGVGb3JFbGVtZW50KHQsZSkpKSkscj9yLnRyaW0oKTpVfSx0LnByb3RvdHlwZS5fYXBwbHlNdWx0aVZhbHVlU3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO09iamVjdC5rZXlzKHQpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBvPUFycmF5LmlzQXJyYXkodFtyXSk/dFtyXTpbdFtyXV07by5zb3J0KCk7Zm9yKHZhciBhPTAscz1vO2E8cy5sZW5ndGg7YSsrKXt2YXIgdT1zW2FdO09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpfHwhbi5fc2VydmVyTW9kdWxlTG9hZGVkP09iamVjdChpLnEpKG4uX3BsYXRmb3JtSWQpP2Uuc3R5bGUuc2V0UHJvcGVydHkocix1KTpuLl9zZXRTZXJ2ZXJTdHlsZShlLHIsdSk6bi5fc2VydmVyU3R5bGVzaGVldC5hZGRTdHlsZVRvRWxlbWVudChlLHIsdSl9fSl9LHQucHJvdG90eXBlLl9zZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUsbil7ZT1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIiQxLSQyIikudG9Mb3dlckNhc2UoKTt2YXIgcj10aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodCk7cltlXT1ufHwiIix0aGlzLl93cml0ZVN0eWxlQXR0cmlidXRlKHQscil9LHQucHJvdG90eXBlLl9nZXRTZXJ2ZXJTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZWFkU3R5bGVBdHRyaWJ1dGUodClbZV18fCIifSx0LnByb3RvdHlwZS5fcmVhZFN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49dC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aWYobilmb3IodmFyIHI9bi5zcGxpdCgvOysvZyksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldLnRyaW0oKTtpZihvLmxlbmd0aD4wKXt2YXIgYT1vLmluZGV4T2YoIjoiKTtpZigtMT09PWEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIENTUyBzdHlsZTogIitvKTtlW28uc3Vic3RyKDAsYSkudHJpbSgpXT1vLnN1YnN0cihhKzEpLnRyaW0oKX19cmV0dXJuIGV9LHQucHJvdG90eXBlLl93cml0ZVN0eWxlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49IiI7Zm9yKHZhciByIGluIGUpZVtyXSYmKG4rPXIrIjoiK2Vbcl0rIjsiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLG4pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShQLDgpLE9iamVjdChyLlYpKE4sOCksT2JqZWN0KHIuVikoci56KSxPYmplY3Qoci5WKShTKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFU9ImJsb2NrIjtmdW5jdGlvbiBIKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iMSIpLHZvaWQgMD09PW4mJihuPSIxIik7dmFyIHI9W2Usbix0XSxpPXQuaW5kZXhPZigiY2FsYyIpO2lmKGk+MClyWzJdPXEodC5zdWJzdHJpbmcoaSkudHJpbSgpKSwyPT0obz10LnN1YnN0cigwLGkpLnRyaW0oKS5zcGxpdCgiICIpKS5sZW5ndGgmJihyWzBdPW9bMF0sclsxXT1vWzFdKTtlbHNlIGlmKDA9PWkpclsyXT1xKHQudHJpbSgpKTtlbHNle3ZhciBvO3I9Mz09PShvPXQuc3BsaXQoIiAiKSkubGVuZ3RoP286W2Usbix0XX1yZXR1cm4gcn1mdW5jdGlvbiBxKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcc10vZywiIikucmVwbGFjZSgvW1wvXCpcK1wtXS9nLCIgJCYgIil9fSxQVThMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCI2YmxGIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1uZXcgci5hKGZ1bmN0aW9uKGUpe2UubmV4dCh0KSxlLmNvbXBsZXRlKCl9KTtyZXR1cm4gZS5faXNTY2FsYXI9ITAsZS52YWx1ZT10LGV9fSxQaGpuOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJwc1cwIik7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBPYmplY3Qoci5hKSh0LGUsMSl9fSxTMW5YOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9bigiSzlJYSIpLG89bigiNmJsRiIpLGE9bigiRkZPbyIpLHM9bigicHVnVCIpO2Z1bmN0aW9uIHUoKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgYyh0KSl9fXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNvbm5lY3RhYmxlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNvbm5lY3RhYmxlO24uX3JlZkNvdW50Kys7dmFyIHI9bmV3IGwodCxuKSxpPWUuc3Vic2NyaWJlKHIpO3JldHVybiByLmNsb3NlZHx8KHIuY29ubmVjdGlvbj1uLmNvbm5lY3QoKSksaX0sdH0oKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5jb25uZWN0YWJsZT1uLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29ubmVjdGFibGU7aWYodCl7dGhpcy5jb25uZWN0YWJsZT1udWxsO3ZhciBlPXQuX3JlZkNvdW50O2lmKGU8PTApdGhpcy5jb25uZWN0aW9uPW51bGw7ZWxzZSBpZih0Ll9yZWZDb3VudD1lLTEsZT4xKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2V7dmFyIG49dGhpcy5jb25uZWN0aW9uLHI9dC5fY29ubmVjdGlvbjt0aGlzLmNvbm5lY3Rpb249bnVsbCwhcnx8biYmciE9PW58fHIudW5zdWJzY3JpYmUoKX19ZWxzZSB0aGlzLmNvbm5lY3Rpb249bnVsbH0sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuc291cmNlPWUsci5zdWJqZWN0RmFjdG9yeT1uLHIuX3JlZkNvdW50PTAsci5faXNDb21wbGV0ZT0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9LGUucHJvdG90eXBlLmdldFN1YmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdWJqZWN0O3JldHVybiB0JiYhdC5pc1N0b3BwZWR8fCh0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Nvbm5lY3Rpb247cmV0dXJuIHR8fCh0aGlzLl9pc0NvbXBsZXRlPSExLCh0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IHMuYSkuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShuZXcgZCh0aGlzLmdldFN1YmplY3QoKSx0aGlzKSkpLHQuY2xvc2VkPyh0aGlzLl9jb25uZWN0aW9uPW51bGwsdD1zLmEuRU1QVFkpOnRoaXMuX2Nvbm5lY3Rpb249dCksdH0sZS5wcm90b3R5cGUucmVmQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpKHRoaXMpfSxlfShvLmEpLnByb3RvdHlwZSxoPXtvcGVyYXRvcjp7dmFsdWU6bnVsbH0sX3JlZkNvdW50Ont2YWx1ZTowLHdyaXRhYmxlOiEwfSxfc3ViamVjdDp7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0sX2Nvbm5lY3Rpb246e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9zdWJzY3JpYmU6e3ZhbHVlOmYuX3N1YnNjcmliZX0sX2lzQ29tcGxldGU6e3ZhbHVlOmYuX2lzQ29tcGxldGUsd3JpdGFibGU6ITB9LGdldFN1YmplY3Q6e3ZhbHVlOmYuZ2V0U3ViamVjdH0sY29ubmVjdDp7dmFsdWU6Zi5jb25uZWN0fSxyZWZDb3VudDp7dmFsdWU6Zi5yZWZDb3VudH19LGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmNvbm5lY3RhYmxlPW4scn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKGUpe3RoaXMuX3Vuc3Vic2NyaWJlKCksdC5wcm90b3R5cGUuX2Vycm9yLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZT0hMCx0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9jb25uZWN0aW9uO3QuX3JlZkNvdW50PTAsdC5fc3ViamVjdD1udWxsLHQuX2Nvbm5lY3Rpb249bnVsbCxlJiZlLnVuc3Vic2NyaWJlKCl9fSxlfShpLmIpO2Z1bmN0aW9uIHAoKXtyZXR1cm4gbmV3IGkuYX1mdW5jdGlvbiBtKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB1KCkoKGU9cCxmdW5jdGlvbih0KXt2YXIgbjtuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHI9T2JqZWN0LmNyZWF0ZSh0LGgpO3JldHVybiByLnNvdXJjZT10LHIuc3ViamVjdEZhY3Rvcnk9bixyfSkodCkpO3ZhciBlfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pfSxTNVhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJES1RiIiksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQudGhlbihmdW5jdGlvbih0KXtlLmNsb3NlZHx8KGUubmV4dCh0KSxlLmNvbXBsZXRlKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lcnJvcih0KX0pLnRoZW4obnVsbCxyLmEpLGV9fX0sU01zbTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklwMFIiKSxpPW4oInQvTmEiKSxvPW4oIkNjbkciKSxhPW4oIlpZanQiKSxzPW4oIkYvWEwiKSx1PW4oIlZOcjQiKSxjPW4oIlhsUHciKSxsPW4oInhNeUUiKSxmPW4oIjY3WS8iKSxoPW4oIm1yU0ciKSxkPW4oIkZGT28iKSxwPW4oInB1Z1QiKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNhbGxiYWNrPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHkodCx0aGlzLmNhbGxiYWNrKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuYWRkKG5ldyBwLmEobikpLHJ9cmV0dXJuIGguYihlLHQpLGV9KGQuYSksdj1uKCJTMW5YIiksZz1uKCI5WjFGIiksYj1uKCJ0OWZaIiksXz1uKCJXZjRwIiksdz1uKCJuNmdHIik7ZnVuY3Rpb24geCh0KXtyZXR1cm4gRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGljb24gd2l0aCB0aGUgbmFtZSAiJyt0KyciJyl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gRXJyb3IoIlRoZSBVUkwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTCB2aWEgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIFVSTCB3YXMgXCIiK3QrJyIuJyl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gRXJyb3IoIlRoZSBsaXRlcmFsIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgc2FmZSBIVE1MIGJ5IEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBsaXRlcmFsIHdhcyBcIiIrdCsnIi4nKX1uLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KTt2YXIgQz1mdW5jdGlvbih0KXt0Lm5vZGVOYW1lP3RoaXMuc3ZnRWxlbWVudD10OnRoaXMudXJsPXR9LE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9odHRwQ2xpZW50PXQsdGhpcy5fc2FuaXRpemVyPWUsdGhpcy5fc3ZnSWNvbkNvbmZpZ3M9bmV3IE1hcCx0aGlzLl9pY29uU2V0Q29uZmlncz1uZXcgTWFwLHRoaXMuX2NhY2hlZEljb25zQnlVcmw9bmV3IE1hcCx0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcz1uZXcgTWFwLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcz1uZXcgTWFwLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9Im1hdGVyaWFsLWljb25zIix0aGlzLl9kb2N1bWVudD1ufXJldHVybiB0LnByb3RvdHlwZS5hZGRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkluTmFtZXNwYWNlKCIiLHQsZSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvbkxpdGVyYWxJbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgQyhuKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxuKTtpZighcil0aHJvdyBFKG4pO3ZhciBpPXRoaXMuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHIpO3JldHVybiB0aGlzLl9hZGRTdmdJY29uQ29uZmlnKHQsZSxuZXcgQyhpKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0TGl0ZXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLHQpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBDKGUpKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkYuSFRNTCxlKTtpZighbil0aHJvdyBFKGUpO3ZhciByPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKHQsbmV3IEMocikpfSx0LnByb3RvdHlwZS5yZWdpc3RlckZvbnRDbGFzc0FsaWFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQpLHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5zZXQodCxlKSx0aGlzfSx0LnByb3RvdHlwZS5jbGFzc05hbWVGb3JGb250QWxpYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQodCl8fHR9LHQucHJvdG90eXBlLnNldERlZmF1bHRGb250U2V0Q2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9dCx0aGlzfSx0LnByb3RvdHlwZS5nZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3N9LHQucHJvdG90eXBlLmdldFN2Z0ljb25Gcm9tVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0KTtpZighbil0aHJvdyBTKHQpO3ZhciByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KG4pO3JldHVybiByP09iamVjdChzLmEpKFQocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgQyh0KSkucGlwZShPYmplY3QobC5hKShmdW5jdGlvbih0KXtyZXR1cm4gZS5fY2FjaGVkSWNvbnNCeVVybC5zZXQobix0KX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBUKHQpfSkpfSx0LnByb3RvdHlwZS5nZXROYW1lZFN2Z0ljb249ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0iIik7dmFyIG49ayhlLHQpLHI9dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KG4pO2lmKHIpcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcocik7dmFyIGk9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGUpO3JldHVybiBpP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyh0LGkpOk9iamVjdChjLmEpKHgobikpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdFbGVtZW50P09iamVjdChzLmEpKFQodC5zdmdFbGVtZW50KSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc3ZnRWxlbWVudD1lfSksT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIFQodCl9KSl9LHQucHJvdG90eXBlLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZihyKXJldHVybiBPYmplY3Qocy5hKShyKTt2YXIgaT1lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hdC5zdmdFbGVtZW50fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcodCkucGlwZShPYmplY3QoZy5hKShmdW5jdGlvbihlKXt2YXIgcj1uLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5GLlJFU09VUkNFX1VSTCx0LnVybCk7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxvYWRpbmcgaWNvbiBzZXQgVVJMOiAiK3IrIiBmYWlsZWQ6ICIrZS5tZXNzYWdlKSxPYmplY3Qocy5hKShudWxsKX0pKX0pO3JldHVybiBPYmplY3QodS5hKShpKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7dmFyIHI9bi5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQodCxlKTtpZighcil0aHJvdyB4KHQpO3JldHVybiByfSkpfSx0LnByb3RvdHlwZS5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXTtpZihyLnN2Z0VsZW1lbnQpe3ZhciBpPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChyLnN2Z0VsZW1lbnQsdCk7aWYoaSlyZXR1cm4gaX19cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9sb2FkU3ZnSWNvbkZyb21Db25maWc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fZmV0Y2hVcmwodC51cmwpLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uKHQpfSkpfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3Qocy5hKSh0LnN2Z0VsZW1lbnQpOnRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKG4pe3JldHVybiB0LnN2Z0VsZW1lbnR8fCh0LnN2Z0VsZW1lbnQ9ZS5fc3ZnRWxlbWVudEZyb21TdHJpbmcobikpLHQuc3ZnRWxlbWVudH0pKX0sdC5wcm90b3R5cGUuX2NyZWF0ZVN2Z0VsZW1lbnRGb3JTaW5nbGVJY29uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHQpO3JldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGUpLGV9LHQucHJvdG90eXBlLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIiMiK2UpO2lmKCFuKXJldHVybiBudWxsO3ZhciByPW4uY2xvbmVOb2RlKCEwKTtpZihyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSwic3ZnIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhyKTtpZigic3ltYm9sIj09PXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocikpO3ZhciBpPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpO3JldHVybiBpLmFwcGVuZENoaWxkKHIpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSl9LHQucHJvdG90eXBlLl9zdmdFbGVtZW50RnJvbVN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtlLmlubmVySFRNTD10O3ZhciBuPWUucXVlcnlTZWxlY3Rvcigic3ZnIik7aWYoIW4pdGhyb3cgRXJyb3IoIjxzdmc+IHRhZyBub3QgZm91bmQiKTtyZXR1cm4gbn0sdC5wcm90b3R5cGUuX3RvU3ZnRWxlbWVudD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcoIjxzdmc+PC9zdmc+Iiksbj0wO248dC5jaGlsZE5vZGVzLmxlbmd0aDtuKyspdC5jaGlsZE5vZGVzW25dLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFJiZlLmFwcGVuZENoaWxkKHQuY2hpbGROb2Rlc1tuXS5jbG9uZU5vZGUoITApKTtyZXR1cm4gZX0sdC5wcm90b3R5cGUuX3NldFN2Z0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLHQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSx0LnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSx0fSx0LnByb3RvdHlwZS5fZmV0Y2hVcmw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoJ0Nhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICInK3QrJyIuJyk7dmFyIG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uRi5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgUyh0KTt2YXIgcj10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQobik7aWYocilyZXR1cm4gcjt2YXIgaSxhPXRoaXMuX2h0dHBDbGllbnQuZ2V0KG4se3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5waXBlKChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShuKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgbShpKSl9KSxPYmplY3Qodi5hKSgpKTtyZXR1cm4gdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuc2V0KG4sYSksYX0sdC5wcm90b3R5cGUuX2FkZFN2Z0ljb25Db25maWc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoayh0LGUpLG4pLHRoaXN9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uU2V0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KHQpO3JldHVybiBuP24ucHVzaChlKTp0aGlzLl9pY29uU2V0Q29uZmlncy5zZXQodCxbZV0pLHRoaXN9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChvLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChvLlYpKGkuYyw4KSxPYmplY3Qoby5WKShhLmMpLE9iamVjdChvLlYpKHIuZCw4KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIFQodCl7cmV0dXJuIHQuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIHQrIjoiK2V9dmFyIEE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2ljb25SZWdpc3RyeT1uLGkuX2lubGluZT0hMSxyfHxlLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpfXJldHVybiBPYmplY3QoaC5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiaW5saW5lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lubGluZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2lubGluZT1PYmplY3Qody5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRTZXQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9udFNldH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRTZXQ9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZvbnRJY29uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZm9udEljb249dGhpcy5fY2xlYW51cEZvbnRWYWx1ZSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fc3BsaXRJY29uTmFtZT1mdW5jdGlvbih0KXtpZighdClyZXR1cm5bIiIsIiJdO3ZhciBlPXQuc3BsaXQoIjoiKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm5bIiIsZVswXV07Y2FzZSAyOnJldHVybiBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IoJ0ludmFsaWQgaWNvbiBuYW1lOiAiJyt0KyciJyl9fSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQuc3ZnSWNvbilpZih0aGlzLnN2Z0ljb24pe3ZhciBuPXRoaXMuX3NwbGl0SWNvbk5hbWUodGhpcy5zdmdJY29uKTt0aGlzLl9pY29uUmVnaXN0cnkuZ2V0TmFtZWRTdmdJY29uKG5bMV0sblswXSkucGlwZShPYmplY3QoYi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdmdFbGVtZW50KHQpfSxmdW5jdGlvbih0KXtyZXR1cm4gY29uc29sZS5sb2coIkVycm9yIHJldHJpZXZpbmcgaWNvbjogIit0Lm1lc3NhZ2UpfSl9ZWxzZSB0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKTt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX3VzaW5nRm9udEljb24oKSYmdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCl9LGUucHJvdG90eXBlLl91c2luZ0ZvbnRJY29uPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc3ZnSWNvbn0sZS5wcm90b3R5cGUuX3NldFN2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHQpfSxlLnByb3RvdHlwZS5fY2xlYXJTdmdFbGVtZW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlPXQuY2hpbGROb2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspdC5yZW1vdmVDaGlsZCh0LmNoaWxkTm9kZXNbbl0pfSxlLnByb3RvdHlwZS5fdXBkYXRlRm9udEljb25DbGFzc2VzPWZ1bmN0aW9uKCl7aWYodGhpcy5fdXNpbmdGb250SWNvbigpKXt2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10aGlzLmZvbnRTZXQ/dGhpcy5faWNvblJlZ2lzdHJ5LmNsYXNzTmFtZUZvckZvbnRBbGlhcyh0aGlzLmZvbnRTZXQpOnRoaXMuX2ljb25SZWdpc3RyeS5nZXREZWZhdWx0Rm9udFNldENsYXNzKCk7ZSE9dGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJih0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzKSxlJiZ0LmNsYXNzTGlzdC5hZGQoZSksdGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3M9ZSksdGhpcy5mb250SWNvbiE9dGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZ0LmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfX0sZS5wcm90b3R5cGUuX2NsZWFudXBGb250VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QudHJpbSgpLnNwbGl0KCIgIilbMF06dH0sZX0oT2JqZWN0KF8udSkoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpLGo9ZnVuY3Rpb24oKXt9fSxUMURNOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCJoOURxIiksaT1uZXcobigiQ1M5USIpLmEpKHIuYSl9LFR4amc6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIlpuOEQiKTtmdW5jdGlvbiBpKCl7cmV0dXJuIE9iamVjdChyLmEpKDEpfX0sVW9kSDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIldmNHAiKSxvPSJhY2NlbnQiLGE9InByaW1hcnkiLHM9WyJtYXQtYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwibWF0LXJhaXNlZC1idXR0b24iLCJtYXQtc3Ryb2tlZC1idXR0b24iLCJtYXQtbWluaS1mYWIiLCJtYXQtZmFiIl0sdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciB1PXQuY2FsbCh0aGlzLGUpfHx0aGlzO3UuX3BsYXRmb3JtPW4sdS5fZm9jdXNNb25pdG9yPXIsdS5fYW5pbWF0aW9uTW9kZT1pLHUuaXNSb3VuZEJ1dHRvbj11Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHUuaXNJY29uQnV0dG9uPXUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IodmFyIGM9MCxsPXM7YzxsLmxlbmd0aDtjKyspe3ZhciBmPWxbY107dS5faGFzSG9zdEF0dHJpYnV0ZXMoZikmJmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGYpfXJldHVybiB1Ll9mb2N1c01vbml0b3IubW9uaXRvcih1Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApLHUuaXNSb3VuZEJ1dHRvbj91LmNvbG9yPW86dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mbGF0LWJ1dHRvbiIpJiYodS5jb2xvcj1hKSx1fXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpfSxlLnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9LGUucHJvdG90eXBlLl9oYXNIb3N0QXR0cmlidXRlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07cmV0dXJuIGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoZSl9KX0sZX0oT2JqZWN0KGkudSkoT2JqZWN0KGkudykoT2JqZWN0KGkudikoZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudFJlZj10fSkpKSksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3JldHVybiB0LmNhbGwodGhpcyxyLGUsbixpKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5faGFsdERpc2FibGVkRXZlbnRzPWZ1bmN0aW9uKHQpe3RoaXMuZGlzYWJsZWQmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9LGV9KHUpLGw9ZnVuY3Rpb24oKXt9fSwiVjlxKyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4oIkNjbkciKTt2YXIgcj1uKCJJcDBSIiksaT1uKCJPemZCIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtPYmplY3Qoci5yKShlKSYmIXQmJmNvbnNvbGUud2FybigiV2FybmluZzogRmxleCBMYXlvdXQgbG9hZGVkIG9uIHRoZSBzZXJ2ZXIgd2l0aG91dCBGbGV4TGF5b3V0U2VydmVyTW9kdWxlIil9cmV0dXJuIHQud2l0aENvbmZpZz1mdW5jdGlvbihlLG4pe3ZhciByPU9iamVjdC5hc3NpZ24oe30saS5mKSxvPVtdO2Zvcih2YXIgYSBpbiBlKWVbYV09PT1yW2FdfHwhMSE9PWVbYV0mJiEwIT09ZVthXXx8KHJbYV09ZVthXSk7cmV0dXJuIGUuc2VydmVyTG9hZGVkJiZvLnB1c2goe3Byb3ZpZGU6aS5sLHVzZVZhbHVlOiEwfSksQXJyYXkuaXNBcnJheShuKSYmby5wdXNoKHtwcm92aWRlOmkuYSx1c2VWYWx1ZTpuLG11bHRpOiEwfSksby5wdXNoKHtwcm92aWRlOmkuZyx1c2VWYWx1ZTpyfSkse25nTW9kdWxlOnQscHJvdmlkZXJzOm99fSx0fSgpfSxWTnI0OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KTt2YXIgcj1uKCJtclNHIiksaT1uKCI2YmxGIiksbz1uKCJpc2J5IiksYT1uKCJHNUoxIikscz1uKCJ6b3RtIiksdT1uKCJNR0JTIiksYz1uKCI2N1kvIik7ZnVuY3Rpb24gbCgpe2Zvcih2YXIgdCxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlW2UubGVuZ3RoLTFdJiYodD1lLnBvcCgpKSwxPT09ZS5sZW5ndGgmJk9iamVjdChvLmEpKGVbMF0pJiYoZT1lWzBdKSwwPT09ZS5sZW5ndGg/YS5hOnQ/bChlKS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pKTpuZXcgaS5hKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZih0LGUpfSl9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3Iuc291cmNlcz1uLHIuY29tcGxldGVkPTAsci5oYXZlVmFsdWVzPTA7dmFyIGk9bi5sZW5ndGg7ci52YWx1ZXM9bmV3IEFycmF5KGkpO2Zvcih2YXIgbz0wO288aTtvKyspe3ZhciBhPW5bb10sdT1PYmplY3Qocy5hKShyLGEsbnVsbCxvKTt1JiZyLmFkZCh1KX1yZXR1cm4gcn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMudmFsdWVzW25dPWUsaS5faGFzVmFsdWV8fChpLl9oYXNWYWx1ZT0hMCx0aGlzLmhhdmVWYWx1ZXMrKyl9LGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVzdGluYXRpb24sbj10aGlzLmhhdmVWYWx1ZXMscj10aGlzLnZhbHVlcyxpPXIubGVuZ3RoO3QuX2hhc1ZhbHVlPyh0aGlzLmNvbXBsZXRlZCsrLHRoaXMuY29tcGxldGVkPT09aSYmKG49PT1pJiZlLm5leHQociksZS5jb21wbGV0ZSgpKSk6ZS5jb21wbGV0ZSgpfSxlfSh1LmEpfSwiVm5ELyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKTtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IGEodCxlKSl9fXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByZWRpY2F0ZSx0aGlzLnRoaXNBcmcpKX0sdH0oKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnByZWRpY2F0ZT1uLGkudGhpc0FyZz1yLGkuY291bnQ9MCxpfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lJiZ0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGV9KGkuYSl9LFZwaFo6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0saT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcihlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QoZVtvXSxuKTwwP3I9bysxOmk9b31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QoZVtvXSxuKT4wP2k9bzpyPW8rMX1yZXR1cm4gcn19fSxvPWkociksYT1vLnJpZ2h0LHM9by5sZWZ0LHU9YSxjPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9bCk7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0xLGk9dFswXSxvPW5ldyBBcnJheShyPDA/MDpyKTtuPHI7KW9bbl09ZShpLGk9dFsrK25dKTtyZXR1cm4gb307ZnVuY3Rpb24gbCh0LGUpe3JldHVyblt0LGVdfXZhciBmPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzPXQubGVuZ3RoLHU9ZS5sZW5ndGgsYz1uZXcgQXJyYXkocyp1KTtmb3IobnVsbD09biYmKG49bCkscj1vPTA7cjxzOysrcilmb3IoYT10W3JdLGk9MDtpPHU7KytpLCsrbyljW29dPW4oYSxlW2ldKTtyZXR1cm4gY30saD1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fSxwPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLG89MCxhPS0xLHM9MCx1PTA7aWYobnVsbD09ZSlmb3IoOysrYTxpOylpc05hTihuPWQodFthXSkpfHwodSs9KHI9bi1zKSoobi0ocys9ci8rK28pKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPWQoZSh0W2FdLGEsdCkpKXx8KHUrPShyPW4tcykqKG4tKHMrPXIvKytvKSkpO2lmKG8+MSlyZXR1cm4gdS8oby0xKX0sbT1mdW5jdGlvbih0LGUpe3ZhciBuPXAodCxlKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9aT1uOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZSBmb3IoOysrYTxvOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9aT1uOysrYTxvOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpO3JldHVybltyLGldfSx2PUFycmF5LnByb3RvdHlwZSxnPXYuc2xpY2UsYj12Lm1hcCxfPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sdz1mdW5jdGlvbih0KXtyZXR1cm4gdH0seD1mdW5jdGlvbih0LGUsbil7dD0rdCxlPStlLG49KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8oZT10LHQ9MCwxKTppPDM/MTorbjtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChlLXQpL24pKSxvPW5ldyBBcnJheShpKTsrK3I8aTspb1tyXT10K3IqbjtyZXR1cm4gb30sUz1NYXRoLnNxcnQoNTApLEU9TWF0aC5zcXJ0KDEwKSxDPU1hdGguc3FydCgyKSxPPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzPS0xO2lmKG49K24sKHQ9K3QpPT0oZT0rZSkmJm4+MClyZXR1cm5bdF07aWYoKHI9ZTx0KSYmKGk9dCx0PWUsZT1pKSwwPT09KGE9VCh0LGUsbikpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcih0PU1hdGguY2VpbCh0L2EpLGU9TWF0aC5mbG9vcihlL2EpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKGUtdCsxKSk7KytzPGk7KW9bc109KHQrcykqYTtlbHNlIGZvcih0PU1hdGguZmxvb3IodCphKSxlPU1hdGguY2VpbChlKmEpLG89bmV3IEFycmF5KGk9TWF0aC5jZWlsKHQtZSsxKSk7KytzPGk7KW9bc109KHQtcykvYTtyZXR1cm4gciYmby5yZXZlcnNlKCksb307ZnVuY3Rpb24gVCh0LGUsbil7dmFyIHI9KGUtdCkvTWF0aC5tYXgoMCxuKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSxvPXIvTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PVM/MTA6bz49RT81Om8+PUM/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1TPzEwOm8+PUU/NTpvPj1DPzI6MSl9ZnVuY3Rpb24gayh0LGUsbil7dmFyIHI9TWF0aC5hYnMoZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxvPXIvaTtyZXR1cm4gbz49Uz9pKj0xMDpvPj1FP2kqPTU6bz49QyYmKGkqPTIpLGU8dD8taTppfXZhciBBPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfSxqPWZ1bmN0aW9uKCl7dmFyIHQ9dyxlPXksbj1BO2Z1bmN0aW9uIHIocil7dmFyIGksbyxhPXIubGVuZ3RoLHM9bmV3IEFycmF5KGEpO2ZvcihpPTA7aTxhOysraSlzW2ldPXQocltpXSxpLHIpO3ZhciBjPWUocyksbD1jWzBdLGY9Y1sxXSxoPW4ocyxsLGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPWsobCxmLGgpLGg9eChNYXRoLmNlaWwobC9oKSpoLE1hdGguZmxvb3IoZi9oKSpoLGgpKTtmb3IodmFyIGQ9aC5sZW5ndGg7aFswXTw9bDspaC5zaGlmdCgpLC0tZDtmb3IoO2hbZC0xXT5mOyloLnBvcCgpLC0tZDt2YXIgcCxtPW5ldyBBcnJheShkKzEpO2ZvcihpPTA7aTw9ZDsrK2kpKHA9bVtpXT1bXSkueDA9aT4wP2hbaS0xXTpsLHAueDE9aTxkP2hbaV06Zjtmb3IoaT0wO2k8YTsrK2kpbDw9KG89c1tpXSkmJm88PWYmJm1bdShoLG8sMCxkKV0ucHVzaChyW2ldKTtyZXR1cm4gbX1yZXR1cm4gci52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oZSkscik6dH0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfKFt0WzBdLHRbMV1dKSxyKTplfSxyLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP18oZy5jYWxsKHQpKTpfKHQpLHIpOm59LHJ9LEk9ZnVuY3Rpb24odCxlLG4pe2lmKG51bGw9PW4mJihuPWQpLHI9dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8cjwyKXJldHVybituKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybituKHRbci0xXSxyLTEsdCk7dmFyIHIsaT0oci0xKSplLG89TWF0aC5mbG9vcihpKSxhPStuKHRbb10sbyx0KTtyZXR1cm4gYSsoK24odFtvKzFdLG8rMSx0KS1hKSooaS1vKX19LE09ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PWIuY2FsbCh0LGQpLnNvcnQociksTWF0aC5jZWlsKChuLWUpLygyKihJKHQsLjc1KS1JKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sUD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguY2VpbCgobi1lKS8oMy41Km0odCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sTj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGk7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPW47KytvPGk7KW51bGwhPShuPXRbb10pJiZuPnImJihyPW4pfWVsc2UgZm9yKDsrK288aTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPW47KytvPGk7KW51bGwhPShuPWUodFtvXSxvLHQpKSYmbj5yJiYocj1uKTtyZXR1cm4gcn0sUj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dC5sZW5ndGgsaT1yLG89LTEsYT0wO2lmKG51bGw9PWUpZm9yKDsrK288cjspaXNOYU4obj1kKHRbb10pKT8tLWk6YSs9bjtlbHNlIGZvcig7KytvPHI7KWlzTmFOKG49ZChlKHRbb10sbyx0KSkpPy0taTphKz1uO2lmKGkpcmV0dXJuIGEvaX0sRD1mdW5jdGlvbih0LGUpe3ZhciBuLGk9dC5sZW5ndGgsbz0tMSxhPVtdO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1kKHRbb10pKXx8YS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSl8fGEucHVzaChuKTtyZXR1cm4gSShhLnNvcnQociksLjUpfSxGPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaT10Lmxlbmd0aCxvPS0xLGE9MDsrK288aTspYSs9dFtvXS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpOy0taT49MDspZm9yKGU9KHI9dFtpXSkubGVuZ3RoOy0tZT49MDspblstLWFdPXJbZV07cmV0dXJuIG59LEw9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxpOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3Iocj1uOysrbzxpOyludWxsIT0obj10W29dKSYmcj5uJiYocj1uKX1lbHNlIGZvcig7KytvPGk7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3Iocj1uOysrbzxpOyludWxsIT0obj1lKHRbb10sbyx0KSkmJnI+biYmKHI9bik7cmV0dXJuIHJ9LFY9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobik7bi0tOylyW25dPXRbZVtuXV07cmV0dXJuIHJ9LHo9ZnVuY3Rpb24odCxlKXtpZihuPXQubGVuZ3RoKXt2YXIgbixpLG89MCxhPTAscz10W2FdO2ZvcihudWxsPT1lJiYoZT1yKTsrK288bjspKGUoaT10W29dLHMpPDB8fDAhPT1lKHMscykpJiYocz1pLGE9byk7cmV0dXJuIDA9PT1lKHMscyk/YTp2b2lkIDB9fSxCPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsaSxvPShudWxsPT1uP3QubGVuZ3RoOm4pLShlPW51bGw9PWU/MDorZSk7bzspaT1NYXRoLnJhbmRvbSgpKm8tLXwwLHI9dFtvK2VdLHRbbytlXT10W2krZV0sdFtpK2VdPXI7cmV0dXJuIHR9LFU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9LTEsbz0wO2lmKG51bGw9PWUpZm9yKDsrK2k8cjspKG49K3RbaV0pJiYobys9bik7ZWxzZSBmb3IoOysraTxyOykobj0rZSh0W2ldLGksdCkpJiYobys9bik7cmV0dXJuIG99LEg9ZnVuY3Rpb24odCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEsbj1MKHQscSkscj1uZXcgQXJyYXkobik7KytlPG47KWZvcih2YXIgaSxvPS0xLGE9cltlXT1uZXcgQXJyYXkoaSk7KytvPGk7KWFbb109dFtvXVtlXTtyZXR1cm4gcn07ZnVuY3Rpb24gcSh0KXtyZXR1cm4gdC5sZW5ndGh9dmFyIEc9ZnVuY3Rpb24oKXtyZXR1cm4gSChhcmd1bWVudHMpfSxXPUFycmF5LnByb3RvdHlwZS5zbGljZSxRPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxZPTEsSz0yLFo9MyxYPTQsJD0xZS02O2Z1bmN0aW9uIEoodCl7cmV0dXJuInRyYW5zbGF0ZSgiKyh0Ky41KSsiLDApIn1mdW5jdGlvbiB0dCh0KXtyZXR1cm4idHJhbnNsYXRlKDAsIisodCsuNSkrIikifWZ1bmN0aW9uIGV0KCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIG50KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxvPTYsYT02LHM9Myx1PXQ9PT1ZfHx0PT09WD8tMToxLGM9dD09PVh8fHQ9PT1LPyJ4IjoieSIsbD10PT09WXx8dD09PVo/Sjp0dDtmdW5jdGlvbiBmKGYpe3ZhciBoPW51bGw9PXI/ZS50aWNrcz9lLnRpY2tzLmFwcGx5KGUsbik6ZS5kb21haW4oKTpyLGQ9bnVsbD09aT9lLnRpY2tGb3JtYXQ/ZS50aWNrRm9ybWF0LmFwcGx5KGUsbik6UTppLHA9TWF0aC5tYXgobywwKStzLG09ZS5yYW5nZSgpLHk9K21bMF0rLjUsdj0rbVttLmxlbmd0aC0xXSsuNSxnPShlLmJhbmR3aWR0aD9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybit0KGUpfX0pKGUuY29weSgpKSxiPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixfPWIuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLHc9Yi5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLGUpLm9yZGVyKCkseD13LmV4aXQoKSxTPXcuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxFPXcuc2VsZWN0KCJsaW5lIiksQz13LnNlbGVjdCgidGV4dCIpO189Xy5tZXJnZShfLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksdz13Lm1lcmdlKFMpLEU9RS5tZXJnZShTLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLHUqbykpLEM9Qy5tZXJnZShTLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLHUqcCkuYXR0cigiZHkiLHQ9PT1ZPyIwZW0iOnQ9PT1aPyIwLjcxZW0iOiIwLjMyZW0iKSksZiE9PWImJihfPV8udHJhbnNpdGlvbihmKSx3PXcudHJhbnNpdGlvbihmKSxFPUUudHJhbnNpdGlvbihmKSxDPUMudHJhbnNpdGlvbihmKSx4PXgudHJhbnNpdGlvbihmKS5hdHRyKCJvcGFjaXR5IiwkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PWcodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksUy5hdHRyKCJvcGFjaXR5IiwkKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIGwoZSYmaXNGaW5pdGUoZT1lKHQpKT9lOmcodCkpfSkpLHgucmVtb3ZlKCksXy5hdHRyKCJkIix0PT09WHx8dD09Sz8iTSIrdSphKyIsIit5KyJIMC41ViIrdisiSCIrdSphOiJNIit5KyIsIit1KmErIlYwLjVIIit2KyJWIit1KmEpLHcuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gbChnKHQpKX0pLEUuYXR0cihjKyIyIix1Km8pLEMuYXR0cihjLHUqcCkudGV4dChkKSxiLmZpbHRlcihldCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PUs/InN0YXJ0Ijp0PT09WD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9Z30pfXJldHVybiBmLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsZik6ZX0sZi50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPVcuY2FsbChhcmd1bWVudHMpLGZ9LGYudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOlcuY2FsbCh0KSxmKTpuLnNsaWNlKCl9LGYudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6Vy5jYWxsKHQpLGYpOnImJnIuc2xpY2UoKX0sZi50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPSt0LGYpOm99LGYudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxmKTpvfSxmLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZik6YX0sZi50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxmKTpzfSxmfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiBudChZLHQpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiBudChLLHQpfWZ1bmN0aW9uIG90KHQpe3JldHVybiBudChaLHQpfWZ1bmN0aW9uIGF0KHQpe3JldHVybiBudChYLHQpfXZhciBzdD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB1dCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcil0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgY3Qocil9ZnVuY3Rpb24gY3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gbHQodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBmdCh0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09c3QsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fWN0LnByb3RvdHlwZT11dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmN0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuXyxvPShyPWksKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtpZihuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHQmJiFyLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pKSxhPS0xLHM9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8czspaWYobj0odD1vW2FdKS50eXBlKWlbbl09ZnQoaVtuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIGkpaVtuXT1mdChpW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxzOylpZigobj0odD1vW2FdKS50eXBlKSYmKG49bHQoaVtuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgY3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksbz0wO288bjsrK28paVtvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihvPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDtvPG47KytvKXJbb10udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBodD11dCxkdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIscHQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmR0LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sbXQ9ZnVuY3Rpb24odCl7dmFyIGU9dCs9IiIsbj1lLmluZGV4T2YoIjoiKTtyZXR1cm4gbj49MCYmInhtbG5zIiE9PShlPXQuc2xpY2UoMCxuKSkmJih0PXQuc2xpY2UobisxKSkscHQuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOnB0W2VdLGxvY2FsOnR9OnR9LHl0PWZ1bmN0aW9uKHQpe3ZhciBlPW10KHQpO3JldHVybihlLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PWR0JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1kdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19KShlKX07ZnVuY3Rpb24gdnQoKXt9dmFyIGd0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3Z0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3Rvcih0KX19O2Z1bmN0aW9uIGJ0KCl7cmV0dXJuW119dmFyIF90PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2J0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbCh0KX19LHd0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgeHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCF4dC5tYXRjaGVzKXt2YXIgU3Q9eHQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHx4dC5tc01hdGNoZXNTZWxlY3Rvcnx8eHQubW96TWF0Y2hlc1NlbGVjdG9yfHx4dC5vTWF0Y2hlc1NlbGVjdG9yO3d0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdC5jYWxsKHRoaXMsdCl9fX19dmFyIEV0PXd0LEN0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiBPdCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX1PdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk90LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBUdD0iJCI7ZnVuY3Rpb24ga3QodCxlLG4scixpLG8pe2Zvcih2YXIgYSxzPTAsdT1lLmxlbmd0aCxjPW8ubGVuZ3RoO3M8YzsrK3MpKGE9ZVtzXSk/KGEuX19kYXRhX189b1tzXSxyW3NdPWEpOm5bc109bmV3IE90KHQsb1tzXSk7Zm9yKDtzPHU7KytzKShhPWVbc10pJiYoaVtzXT1hKX1mdW5jdGlvbiBBdCh0LGUsbixyLGksbyxhKXt2YXIgcyx1LGMsbD17fSxmPWUubGVuZ3RoLGg9by5sZW5ndGgsZD1uZXcgQXJyYXkoZik7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiYoZFtzXT1jPVR0K2EuY2FsbCh1LHUuX19kYXRhX18scyxlKSxjIGluIGw/aVtzXT11OmxbY109dSk7Zm9yKHM9MDtzPGg7KytzKSh1PWxbYz1UdCthLmNhbGwodCxvW3NdLHMsbyldKT8ocltzXT11LHUuX19kYXRhX189b1tzXSxsW2NdPW51bGwpOm5bc109bmV3IE90KHQsb1tzXSk7Zm9yKHM9MDtzPGY7KytzKSh1PWVbc10pJiZsW2Rbc11dPT09dSYmKGlbc109dSl9ZnVuY3Rpb24ganQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIEl0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGUpfHxJdCh0KS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShlKX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgUnQodCl9ZnVuY3Rpb24gUnQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPVB0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gRHQodCxlKXtmb3IodmFyIG49TnQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiBGdCh0LGUpe2Zvcih2YXIgbj1OdCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIEx0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBWdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHp0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEJ0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gVXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBIdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHF0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIEd0KCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfVJ0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3RoaXMuX25hbWVzLmluZGV4T2YodCk8MCYmKHRoaXMuX25hbWVzLnB1c2godCksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWVzLmluZGV4T2YodCk7ZT49MCYmKHRoaXMuX25hbWVzLnNwbGljZShlLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKHQpPj0wfX07dmFyIFd0PXt9LFF0PW51bGw7ZnVuY3Rpb24gWXQodCxlLG4pe3JldHVybiB0PUt0KHQsZSxuKSxmdW5jdGlvbihlKXt2YXIgbj1lLnJlbGF0ZWRUYXJnZXQ7biYmKG49PT10aGlzfHw4Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpfHx0LmNhbGwodGhpcyxlKX19ZnVuY3Rpb24gS3QodCxlLG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1RdDtRdD1yO3RyeXt0LmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLGUsbil9ZmluYWxseXtRdD1pfX19ZnVuY3Rpb24gWnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fX29uO2lmKGUpe2Zvcih2YXIgbixyPTAsaT0tMSxvPWUubGVuZ3RoO3I8bzsrK3Ipbj1lW3JdLHQudHlwZSYmbi50eXBlIT09dC50eXBlfHxuLm5hbWUhPT10Lm5hbWU/ZVsrK2ldPW46dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4udHlwZSxuLmxpc3RlbmVyLG4uY2FwdHVyZSk7KytpP2UubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFh0KHQsZSxuKXt2YXIgcj1XdC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1l0Okt0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHMsdT10aGlzLl9fb24sYz1yKGUsbyxhKTtpZih1KWZvcih2YXIgbD0wLGY9dS5sZW5ndGg7bDxmOysrbClpZigocz11W2xdKS50eXBlPT09dC50eXBlJiZzLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcixzLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihzLnR5cGUscy5saXN0ZW5lcj1jLHMuY2FwdHVyZT1uKSx2b2lkKHMudmFsdWU9ZSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxjLG4pLHM9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOmUsbGlzdGVuZXI6YyxjYXB0dXJlOm59LHU/dS5wdXNoKHMpOnRoaXMuX19vbj1bc119fWZ1bmN0aW9uICR0KHQsZSxuLHIpe3ZhciBpPVF0O3Quc291cmNlRXZlbnQ9UXQsUXQ9dDt0cnl7cmV0dXJuIGUuYXBwbHkobixyKX1maW5hbGx5e1F0PWl9fWZ1bmN0aW9uIEp0KHQsZSxuKXt2YXIgcj1JdCh0KSxpPXIuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGk/aT1uZXcgaShlLG4pOihpPXIuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iiksbj8oaS5pbml0RXZlbnQoZSxuLmJ1YmJsZXMsbi5jYW5jZWxhYmxlKSxpLmRldGFpbD1uLmRldGFpbCk6aS5pbml0RXZlbnQoZSwhMSwhMSkpLHQuZGlzcGF0Y2hFdmVudChpKX0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiYoIm9ubW91c2VlbnRlciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fChXdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRlPVtudWxsXTtmdW5jdGlvbiBlZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiBuZSgpe3JldHVybiBuZXcgZWUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx0ZSl9ZWUucHJvdG90eXBlPW5lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZWUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhLHM9ZVtpXSx1PXMubGVuZ3RoLGM9cltpXT1uZXcgQXJyYXkodSksbD0wO2w8dTsrK2wpKG89c1tsXSkmJihhPXQuY2FsbChvLG8uX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gbyYmKGEuX19kYXRhX189by5fX2RhdGFfXyksY1tsXT1hKTtyZXR1cm4gbmV3IGVlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9X3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sbz0wO288bjsrK28pZm9yKHZhciBhLHM9ZVtvXSx1PXMubGVuZ3RoLGM9MDtjPHU7KytjKShhPXNbY10pJiYoci5wdXNoKHQuY2FsbChhLGEuX19kYXRhX18sYyxzKSksaS5wdXNoKGEpKTtyZXR1cm4gbmV3IGVlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIG8sYT1lW2ldLHM9YS5sZW5ndGgsdT1yW2ldPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJnUucHVzaChvKTtyZXR1cm4gbmV3IGVlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3BbKytsXT10fSkscDt2YXIgbixyPWU/QXQ6a3QsaT10aGlzLl9wYXJlbnRzLG89dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYobj10LHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbn0pO2Zvcih2YXIgYT1vLmxlbmd0aCxzPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxjPW5ldyBBcnJheShhKSxsPTA7bDxhOysrbCl7dmFyIGY9aVtsXSxoPW9bbF0sZD1oLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18sbCxpKSxtPXAubGVuZ3RoLHk9dVtsXT1uZXcgQXJyYXkobSksdj1zW2xdPW5ldyBBcnJheShtKTtyKGYsaCx5LHYsY1tsXT1uZXcgQXJyYXkoZCkscCxlKTtmb3IodmFyIGcsYixfPTAsdz0wO188bTsrK18paWYoZz15W19dKXtmb3IoXz49dyYmKHc9XysxKTshKGI9dlt3XSkmJisrdzxtOyk7Zy5fbmV4dD1ifHxudWxsfX1yZXR1cm4ocz1uZXcgZWUocyxpKSkuX2VudGVyPXUscy5fZXhpdD1jLHN9LGVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlZSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChDdCksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGVlKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoQ3QpLHRoaXMuX3BhcmVudHMpfSxtZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGM9blthXSxsPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkobCksaD0wO2g8bDsrK2gpKHM9dVtoXXx8Y1toXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBlZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLG89aS5sZW5ndGgtMSxhPWlbb107LS1vPj0wOykocj1pW29dKSYmKGEmJmEhPT1yLm5leHRTaWJsaW5nJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsYSksYT1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PWp0KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgYSxzPW5bb10sdT1zLmxlbmd0aCxjPWlbb109bmV3IEFycmF5KHUpLGw9MDtsPHU7KytsKShhPXNbbF0pJiYoY1tsXT1hKTtjLnNvcnQoZSl9cmV0dXJuIG5ldyBlZShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0WysrZV09dGhpc30pLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIGE9cltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPTAscj1lLmxlbmd0aDtuPHI7KytuKWZvcih2YXIgaSxvPWVbbl0sYT0wLHM9by5sZW5ndGg7YTxzOysrYSkoaT1vW2FdKSYmdC5jYWxsKGksaS5fX2RhdGFfXyxhLG8pO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bXQodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gbi5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUobil9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9uLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsbil9fTpuLmxvY2FsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fSkobixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixuKX19OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxuKX19KSh0LGUsbnVsbD09bj8iIjpuKSk6TXQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fToiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPWV9fSkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1QdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1OdCh0aGlzLm5vZGUoKSksaT0tMSxvPW4ubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9EdDpGdCkodGhpcyx0KX19OmU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7RHQodGhpcyx0KX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0Z0KHRoaXMsdCl9fSkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/THQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0pKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9WdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH19KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goenQpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goQnQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5dCh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp5dCh0KSxyPW51bGw9PWU/VXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpndChlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSHQpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9HdDpxdCl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksbz0odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pLGE9by5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3Iocz1lP1h0Olp0LG51bGw9PW4mJihuPSExKSxyPTA7cjxhOysrcil0aGlzLmVhY2gocyhvW3JdLGUsbikpO3JldHVybiB0aGlzfXZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocylmb3IodmFyIHUsYz0wLGw9cy5sZW5ndGg7YzxsOysrYylmb3Iocj0wLHU9c1tjXTtyPGE7KytyKWlmKChpPW9bcl0pLnR5cGU9PT11LnR5cGUmJmkubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBKdCh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSnQodGhpcyx0LGUpfX0pKHQsZSkpfX07dmFyIHJlPW5lLGllPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgZWUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBlZShbW3RdXSx0ZSl9LG9lPWZ1bmN0aW9uKHQpe3JldHVybiBpZSh5dCh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxhZT0wO2Z1bmN0aW9uIHNlKCl7cmV0dXJuIG5ldyB1ZX1mdW5jdGlvbiB1ZSgpe3RoaXMuXz0iQCIrKCsrYWUpLnRvU3RyaW5nKDM2KX11ZS5wcm90b3R5cGU9c2UucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1ZSxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgY2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1RdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX0sbGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10Lm93bmVyU1ZHRWxlbWVudHx8dDtpZihuLmNyZWF0ZVNWR1BvaW50KXt2YXIgcj1uLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIHIueD1lLmNsaWVudFgsci55PWUuY2xpZW50WSxbKHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LHIueV19dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bZS5jbGllbnRYLWkubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLWkudG9wLXQuY2xpZW50VG9wXX0sZmU9ZnVuY3Rpb24odCl7dmFyIGU9Y2UoKTtyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSksbGUodCxlKX0saGU9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBlZShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBlZShbbnVsbD09dD9bXTp0XSx0ZSl9LGRlPWZ1bmN0aW9uKHQsZSxuKXthcmd1bWVudHMubGVuZ3RoPDMmJihuPWUsZT1jZSgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89ZT9lLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9ZVtpXSkuaWRlbnRpZmllcj09PW4pcmV0dXJuIGxlKHQscik7cmV0dXJuIG51bGx9LHBlPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9Y2UoKS50b3VjaGVzKTtmb3IodmFyIG49MCxyPWU/ZS5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtuPHI7KytuKWlbbl09bGUodCxlW25dKTtyZXR1cm4gaX07ZnVuY3Rpb24gbWUoKXtRdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgeWU9ZnVuY3Rpb24oKXtRdC5wcmV2ZW50RGVmYXVsdCgpLFF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSx2ZT1mdW5jdGlvbih0KXt2YXIgZT10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPWllKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIseWUsITApOyJvbnNlbGVjdHN0YXJ0ImluIGU/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIseWUsITApOihlLl9fbm9zZWxlY3Q9ZS5zdHlsZS5Nb3pVc2VyU2VsZWN0LGUuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfTtmdW5jdGlvbiBnZSh0LGUpe3ZhciBuPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9aWUodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtlJiYoci5vbigiY2xpY2suZHJhZyIseWUsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9dmFyIGJlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gX2UodCxlLG4scixpLG8sYSxzLHUsYyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1vLHRoaXMueT1hLHRoaXMuZHg9cyx0aGlzLmR5PXUsdGhpcy5fPWN9ZnVuY3Rpb24gd2UoKXtyZXR1cm4hUXQuYnV0dG9ufWZ1bmN0aW9uIHhlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gbnVsbD09dD97eDpRdC54LHk6UXQueX06dH1mdW5jdGlvbiBFZSgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31fZS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgQ2U9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPXdlLG89eGUsYT1TZSxzPUVlLHU9e30sYz1odCgic3RhcnQiLCJkcmFnIiwiZW5kIiksbD0wLGY9MDtmdW5jdGlvbiBoKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixkKS5maWx0ZXIocykub24oInRvdWNoc3RhcnQuZHJhZyIseSkub24oInRvdWNobW92ZS5kcmFnIix2KS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIixnKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZCgpe2lmKCFyJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGE9YigibW91c2UiLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpLGZlLHRoaXMsYXJndW1lbnRzKTthJiYoaWUoUXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIixwLCEwKS5vbigibW91c2V1cC5kcmFnIixtLCEwKSx2ZShRdC52aWV3KSxtZSgpLG49ITEsdD1RdC5jbGllbnRYLGU9UXQuY2xpZW50WSxhKCJzdGFydCIpKX19ZnVuY3Rpb24gcCgpe2lmKHllKCksIW4pe3ZhciByPVF0LmNsaWVudFgtdCxpPVF0LmNsaWVudFktZTtuPXIqcitpKmk+Zn11Lm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gbSgpe2llKFF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLGdlKFF0LnZpZXcsbikseWUoKSx1Lm1vdXNlKCJlbmQiKX1mdW5jdGlvbiB5KCl7aWYoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0LGUsbj1RdC5jaGFuZ2VkVG91Y2hlcyxyPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9bi5sZW5ndGg7Zm9yKHQ9MDt0PGE7Kyt0KShlPWIoblt0XS5pZGVudGlmaWVyLHIsZGUsdGhpcyxhcmd1bWVudHMpKSYmKG1lKCksZSgic3RhcnQiKSl9fWZ1bmN0aW9uIHYoKXt2YXIgdCxlLG49UXQuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IodD0wO3Q8cjsrK3QpKGU9dVtuW3RdLmlkZW50aWZpZXJdKSYmKHllKCksZSgiZHJhZyIpKX1mdW5jdGlvbiBnKCl7dmFyIHQsZSxuPVF0LmNoYW5nZWRUb3VjaGVzLGk9bi5sZW5ndGg7Zm9yKHImJmNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyPW51bGx9LDUwMCksdD0wO3Q8aTsrK3QpKGU9dVtuW3RdLmlkZW50aWZpZXJdKSYmKG1lKCksZSgiZW5kIikpfWZ1bmN0aW9uIGIodCxlLG4scixpKXt2YXIgbyxzLGYsZD1uKGUsdCkscD1jLmNvcHkoKTtpZigkdChuZXcgX2UoaCwiYmVmb3Jlc3RhcnQiLG8sdCxsLGRbMF0sZFsxXSwwLDAscCksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KFF0LnN1YmplY3Q9bz1hLmFwcGx5KHIsaSkpJiYocz1vLngtZFswXXx8MCxmPW8ueS1kWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiBhKGMpe3ZhciBtLHk9ZDtzd2l0Y2goYyl7Y2FzZSJzdGFydCI6dVt0XT1hLG09bCsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgdVt0XSwtLWw7Y2FzZSJkcmFnIjpkPW4oZSx0KSxtPWx9JHQobmV3IF9lKGgsYyxvLHQsbSxkWzBdK3MsZFsxXStmLGRbMF0teVswXSxkWzFdLXlbMV0scCkscC5hcHBseSxwLFtjLHIsaV0pfX1yZXR1cm4gaC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiZSghIXQpLGgpOml9LGguY29udGFpbmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmUodCksaCk6b30saC5zdWJqZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmUodCksaCk6YX0saC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpiZSghIXQpLGgpOnN9LGgub249ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/aDp0fSxoLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9KHQ9K3QpKnQsaCk6TWF0aC5zcXJ0KGYpfSxofSxPZT1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIFRlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIGtlKCl7fXZhciBBZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsamU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsSWU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLE1lPS9eIyhbMC05YS1mXXszfSkkLyxQZT0vXiMoWzAtOWEtZl17Nn0pJC8sTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0FlLEFlLEFlXSsiXFwpJCIpLFJlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tJZSxJZSxJZV0rIlxcKSQiKSxEZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW0FlLEFlLEFlLGplXSsiXFwpJCIpLEZlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbSWUsSWUsSWUsamVdKyJcXCkkIiksTGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2plLEllLEllXSsiXFwpJCIpLFZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbamUsSWUsSWUsamVdKyJcXCkkIiksemU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gQmUodCl7dmFyIGU7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPU1lLmV4ZWModCkpP25ldyBXZSgoZT1wYXJzZUludChlWzFdLDE2KSk+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTooZT1QZS5leGVjKHQpKT9VZShwYXJzZUludChlWzFdLDE2KSk6KGU9TmUuZXhlYyh0KSk/bmV3IFdlKGVbMV0sZVsyXSxlWzNdLDEpOihlPVJlLmV4ZWModCkpP25ldyBXZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCwxKTooZT1EZS5leGVjKHQpKT9IZShlWzFdLGVbMl0sZVszXSxlWzRdKTooZT1GZS5leGVjKHQpKT9IZSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1MZS5leGVjKHQpKT9ZZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLDEpOihlPVZlLmV4ZWModCkpP1llKGVbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XSk6emUuaGFzT3duUHJvcGVydHkodCk/VWUoemVbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBXZShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFVlKHQpe3JldHVybiBuZXcgV2UodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIEhlKHQsZSxuLHIpe3JldHVybiByPD0wJiYodD1lPW49TmFOKSxuZXcgV2UodCxlLG4scil9ZnVuY3Rpb24gcWUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBrZXx8KHQ9QmUodCkpLHQ/bmV3IFdlKCh0PXQucmdiKCkpLnIsdC5nLHQuYix0Lm9wYWNpdHkpOm5ldyBXZX1mdW5jdGlvbiBHZSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/cWUodCk6bmV3IFdlKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBXZSh0LGUsbixyKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gUWUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBZZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IFplKHQsZSxuLHIpfWZ1bmN0aW9uIEtlKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgWmUpcmV0dXJuIG5ldyBaZSh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBrZXx8KHQ9QmUodCkpLCF0KXJldHVybiBuZXcgWmU7aWYodCBpbnN0YW5jZW9mIFplKXJldHVybiB0O3ZhciBlPSh0PXQucmdiKCkpLnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihlLG4sciksbz1NYXRoLm1heChlLG4sciksYT1OYU4scz1vLWksdT0obytpKS8yO3JldHVybiBzPyhhPWU9PT1vPyhuLXIpL3MrNioobjxyKTpuPT09bz8oci1lKS9zKzI6KGUtbikvcys0LHMvPXU8LjU/bytpOjItby1pLGEqPTYwKTpzPXU+MCYmdTwxPzA6YSxuZXcgWmUoYSxzLHUsdC5vcGFjaXR5KX0odCk6bmV3IFplKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBaZSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiAyNTUqKHQ8NjA/ZSsobi1lKSp0LzYwOnQ8MTgwP246dDwyNDA/ZSsobi1lKSooMjQwLXQpLzYwOmUpfU9lKGtlLEJlLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmhleCgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLE9lKFdlLEdlLFRlKGtlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgV2UodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IFdlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiAwPD10aGlzLnImJnRoaXMucjw9MjU1JiYwPD10aGlzLmcmJnRoaXMuZzw9MjU1JiYwPD10aGlzLmImJnRoaXMuYjw9MjU1JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmZ1bmN0aW9uKCl7cmV0dXJuIiMiK1FlKHRoaXMucikrUWUodGhpcy5nKStRZSh0aGlzLmIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PSh0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxPZShaZSxLZSxUZShrZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IFplKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IFplKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxlPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLG49dGhpcy5sLHI9bisobjwuNT9uOjEtbikqZSxpPTIqbi1yO3JldHVybiBuZXcgV2UoWGUodD49MjQwP3QtMjQwOnQrMTIwLGksciksWGUodCxpLHIpLFhlKHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciAkZT1NYXRoLlBJLzE4MCxKZT0xODAvTWF0aC5QSSx0bj0uOTY0MjIsZW49MSxubj0uODI1MjEscm49NC8yOSxvbj02LzI5LGFuPTMqb24qb24sc249b24qb24qb247ZnVuY3Rpb24gdW4odCl7aWYodCBpbnN0YW5jZW9mIGZuKXJldHVybiBuZXcgZm4odC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgYm4pe2lmKGlzTmFOKHQuaCkpcmV0dXJuIG5ldyBmbih0LmwsMCwwLHQub3BhY2l0eSk7dmFyIGU9dC5oKiRlO3JldHVybiBuZXcgZm4odC5sLE1hdGguY29zKGUpKnQuYyxNYXRoLnNpbihlKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgV2V8fCh0PXFlKHQpKTt2YXIgbixyLGk9bW4odC5yKSxvPW1uKHQuZyksYT1tbih0LmIpLHM9aG4oKC4yMjI1MDQ1KmkrLjcxNjg3ODYqbysuMDYwNjE2OSphKS9lbik7cmV0dXJuIGk9PT1vJiZvPT09YT9uPXI9czoobj1obigoLjQzNjA3NDcqaSsuMzg1MDY0OSpvKy4xNDMwODA0KmEpL3RuKSxyPWhuKCguMDEzOTMyMippKy4wOTcxMDQ1Km8rLjcxNDE3MzMqYSkvbm4pKSxuZXcgZm4oMTE2KnMtMTYsNTAwKihuLXMpLDIwMCoocy1yKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGNuKHQsZSl7cmV0dXJuIG5ldyBmbih0LDAsMCxudWxsPT1lPzE6ZSl9ZnVuY3Rpb24gbG4odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3VuKHQpOm5ldyBmbih0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gZm4odCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGhuKHQpe3JldHVybiB0PnNuP01hdGgucG93KHQsMS8zKTp0L2FuK3JufWZ1bmN0aW9uIGRuKHQpe3JldHVybiB0Pm9uP3QqdCp0OmFuKih0LXJuKX1mdW5jdGlvbiBwbih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIG1uKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHluKHQpe2lmKHQgaW5zdGFuY2VvZiBibilyZXR1cm4gbmV3IGJuKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGZufHwodD11bih0KSksMD09PXQuYSYmMD09PXQuYilyZXR1cm4gbmV3IGJuKE5hTiwwLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqSmU7cmV0dXJuIG5ldyBibihlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiB2bih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eW4odCk6bmV3IGJuKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBnbih0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eW4odCk6bmV3IGJuKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBibih0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9T2UoZm4sbG4sVGUoa2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZm4odGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmbih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgV2UocG4oMy4xMzM4NTYxKihlPXRuKmRuKGUpKS0xLjYxNjg2NjcqKHQ9ZW4qZG4odCkpLS40OTA2MTQ2KihuPW5uKmRuKG4pKSkscG4oLS45Nzg3Njg0KmUrMS45MTYxNDE1KnQrLjAzMzQ1NCpuKSxwbiguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3Km4pLHRoaXMub3BhY2l0eSl9fSkpLE9lKGJuLGduLFRlKGtlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYm4odGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdW4odGhpcykucmdiKCl9fSkpO3ZhciBfbj0tLjI5MjI3LHduPS0uOTA2NDkseG49MS45NzI5NCxTbj14bip3bixFbj0xLjc4Mjc3KnhuLENuPTEuNzgyNzcqX24tIC0uMTQ4NjEqd247ZnVuY3Rpb24gT24odCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBUbilyZXR1cm4gbmV3IFRuKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIFdlfHwodD1xZSh0KSk7dmFyIGU9dC5nLzI1NSxuPXQuYi8yNTUscj0oQ24qbitTbioodC5yLzI1NSktRW4qZSkvKENuK1NuLUVuKSxpPW4tcixvPSh4biooZS1yKS1fbippKS93bixhPU1hdGguc3FydChvKm8raSppKS8oeG4qciooMS1yKSkscz1hP01hdGguYXRhbjIobyxpKSpKZS0xMjA6TmFOO3JldHVybiBuZXcgVG4oczwwP3MrMzYwOnMsYSxyLHQub3BhY2l0eSl9KHQpOm5ldyBUbih0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gVG4odCxlLG4scil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIGtuKHQsZSxuLHIsaSl7dmFyIG89dCp0LGE9byp0O3JldHVybigoMS0zKnQrMypvLWEpKmUrKDQtNipvKzMqYSkqbisoMSszKnQrMypvLTMqYSkqcithKmkpLzZ9T2UoVG4sT24sVGUoa2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBUbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBUbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqJGUsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IFdlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKF9uKnIrd24qaSkpLDI1NSooZStuKih4bipyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIEFuPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxpPXRbcl0sbz10W3IrMV07cmV0dXJuIGtuKChuLXIvZSkqZSxyPjA/dFtyLTFdOjIqaS1vLGksbyxyPGUtMT90W3IrMl06MipvLWkpfX0sam49ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKTtyZXR1cm4ga24oKG4tci9lKSplLHRbKHIrZS0xKSVlXSx0W3IlZV0sdFsocisxKSVlXSx0WyhyKzIpJWVdKX19LEluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gTW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQrbiplfX1mdW5jdGlvbiBQbih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9Nbih0LG4+MTgwfHxuPC0xODA/bi0zNjAqTWF0aC5yb3VuZChuLzM2MCk6bik6SW4oaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBObih0LGUpe3ZhciBuPWUtdDtyZXR1cm4gbj9Nbih0LG4pOkluKGlzTmFOKHQpP2U6dCl9dmFyIFJuPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PSh0PSt0KT9ObjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOkluKGlzTmFOKGUpP246ZSl9fShlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1HZSh0KSkuciwoZT1HZShlKSkuciksaT1uKHQuZyxlLmcpLG89bih0LmIsZS5iKSxhPU5uKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPW8oZSksdC5vcGFjaXR5PWEoZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBEbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUdlKGVbbl0pLG9bbl09ci5yfHwwLGFbbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBvPXQobyksYT10KGEpLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPWEodCksci5iPXModCkscisiIn19fXZhciBGbixMbixWbix6bixCbj1EbihBbiksVW49RG4oam4pLEhuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lP2UubGVuZ3RoOjAsaT10P01hdGgubWluKHIsdC5sZW5ndGgpOjAsbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkocik7Zm9yKG49MDtuPGk7KytuKW9bbl09Wm4odFtuXSxlW25dKTtmb3IoO248cjsrK24pYVtuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3Iobj0wO248aTsrK24pYVtuXT1vW25dKHQpO3JldHVybiBhfX0scW49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgRGF0ZTtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQrZSpyKSxufX0sR249ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gdCtlKm59fSxXbj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9e30saT17fTtmb3IobiBpbiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZXx8KGU9e30pLGUpbiBpbiB0P3Jbbl09Wm4odFtuXSxlW25dKTppW25dPWVbbl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihuIGluIHIpaVtuXT1yW25dKHQpO3JldHVybiBpfX0sUW49L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFluPW5ldyBSZWdFeHAoUW4uc291cmNlLCJnIiksS249ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbz1Rbi5sYXN0SW5kZXg9WW4ubGFzdEluZGV4PTAsYT0tMSxzPVtdLHU9W107Zm9yKHQrPSIiLGUrPSIiOyhuPVFuLmV4ZWModCkpJiYocj1Zbi5leGVjKGUpKTspKGk9ci5pbmRleCk+byYmKGk9ZS5zbGljZShvLGkpLHNbYV0/c1thXSs9aTpzWysrYV09aSksKG49blswXSk9PT0ocj1yWzBdKT9zW2FdP3NbYV0rPXI6c1srK2FdPXI6KHNbKythXT1udWxsLHUucHVzaCh7aTphLHg6R24obixyKX0pKSxvPVluLmxhc3RJbmRleDtyZXR1cm4gbzxlLmxlbmd0aCYmKGk9ZS5zbGljZShvKSxzW2FdP3NbYV0rPWk6c1srK2FdPWkpLHMubGVuZ3RoPDI/dVswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fSh1WzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9dS5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49dVtyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LFpuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9JbihlKTooIm51bWJlciI9PT1yP0duOiJzdHJpbmciPT09cj8obj1CZShlKSk/KGU9bixSbik6S246ZSBpbnN0YW5jZW9mIEJlP1JuOmUgaW5zdGFuY2VvZiBEYXRlP3FuOkFycmF5LmlzQXJyYXkoZSk/SG46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP1duOkduKSh0LGUpfSxYbj1mdW5jdGlvbih0LGUpe3JldHVybiBlLT10PSt0LGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQrZSpuKX19LCRuPTE4MC9NYXRoLlBJLEpuPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHRyPWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt2YXIgYSxzLHU7cmV0dXJuKGE9TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPWEsZS89YSksKHU9dCpuK2UqcikmJihuLT10KnUsci09ZSp1KSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLHUvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsdT0tdSxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKiRuLHNrZXdYOk1hdGguYXRhbih1KSokbixzY2FsZVg6YSxzY2FsZVk6c319O2Z1bmN0aW9uIGVyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihvLGEpe3ZhciBzPVtdLHU9W107cmV0dXJuIG89dChvKSxhPXQoYSksZnVuY3Rpb24odCxyLGksbyxhLHMpe2lmKHQhPT1pfHxyIT09byl7dmFyIHU9YS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6dS00LHg6R24odCxpKX0se2k6dS0yLHg6R24ocixvKX0pfWVsc2UoaXx8bykmJmEucHVzaCgidHJhbnNsYXRlKCIraStlK28rbil9KG8udHJhbnNsYXRlWCxvLnRyYW5zbGF0ZVksYS50cmFuc2xhdGVYLGEudHJhbnNsYXRlWSxzLHUpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxvLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OkduKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KG8ucm90YXRlLGEucm90YXRlLHMsdSksZnVuY3Rpb24odCxlLG4sbyl7dCE9PWU/by5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OkduKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShvLnNrZXdYLGEuc2tld1gscyx1KSxmdW5jdGlvbih0LGUsbixyLG8sYSl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1vLnB1c2goaShvKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7YS5wdXNoKHtpOnMtNCx4OkduKHQsbil9LHtpOnMtMix4OkduKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8by5wdXNoKGkobykrInNjYWxlKCIrbisiLCIrcisiKSIpfShvLnNjYWxlWCxvLnNjYWxlWSxhLnNjYWxlWCxhLnNjYWxlWSxzLHUpLG89YT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dS5sZW5ndGg7KytuPHI7KXNbKGU9dVtuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIG5yPWVyKGZ1bmN0aW9uKHQpe3JldHVybiJub25lIj09PXQ/Sm46KEZufHwoRm49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksTG49ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFZuPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxGbi5zdHlsZS50cmFuc2Zvcm09dCx0PVZuLmdldENvbXB1dGVkU3R5bGUoTG4uYXBwZW5kQ2hpbGQoRm4pLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLExuLnJlbW92ZUNoaWxkKEZuKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSx0cigrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfSwicHgsICIsInB4KSIsImRlZykiKSxycj1lcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9Kbjooem58fCh6bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx6bi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9em4udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/dHIoKHQ9dC5tYXRyaXgpLmEsdC5iLHQuYyx0LmQsdC5lLHQuZik6Sm4pfSwiLCAiLCIpIiwiKSIpLGlyPU1hdGguU1FSVDI7ZnVuY3Rpb24gb3IodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIGFyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRbMF0sbz10WzFdLGE9dFsyXSxzPWVbMl0sdT1lWzBdLWksYz1lWzFdLW8sbD11KnUrYypjO2lmKGw8MWUtMTIpcj1NYXRoLmxvZyhzL2EpL2lyLG49ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LG8rdCpjLGEqTWF0aC5leHAoaXIqdCpyKV19O2Vsc2V7dmFyIGY9TWF0aC5zcXJ0KGwpLGg9KHMqcy1hKmErNCpsKS8oMiphKjIqZiksZD0ocypzLWEqYS00KmwpLygyKnMqMipmKSxwPU1hdGgubG9nKE1hdGguc3FydChoKmgrMSktaCksbT1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpO3I9KG0tcCkvaXIsbj1mdW5jdGlvbih0KXt2YXIgZSxuPXQqcixzPW9yKHApLGw9YS8oMipmKSoocyooZT1pcipuK3AsKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0ocCkpO3JldHVybltpK2wqdSxvK2wqYyxhKnMvb3IoaXIqbitwKV19fXJldHVybiBuLmR1cmF0aW9uPTFlMypyLG59O2Z1bmN0aW9uIHNyKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9S2UoZSkpLmgsKG49S2UobikpLmgpLGk9Tm4oZS5zLG4ucyksbz1ObihlLmwsbi5sKSxhPU5uKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5zPWkodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciB1cj1zcihQbiksY3I9c3IoTm4pO2Z1bmN0aW9uIGxyKHQsZSl7dmFyIG49Tm4oKHQ9bG4odCkpLmwsKGU9bG4oZSkpLmwpLHI9Tm4odC5hLGUuYSksaT1Obih0LmIsZS5iKSxvPU5uKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPXIoZSksdC5iPWkoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19ZnVuY3Rpb24gZnIodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT1nbihlKSkuaCwobj1nbihuKSkuaCksaT1ObihlLmMsbi5jKSxvPU5uKGUubCxuLmwpLGE9Tm4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLmM9aSh0KSxlLmw9byh0KSxlLm9wYWNpdHk9YSh0KSxlKyIifX19dmFyIGhyPWZyKFBuKSxkcj1mcihObik7ZnVuY3Rpb24gcHIodCl7cmV0dXJuIGZ1bmN0aW9uIGUobil7ZnVuY3Rpb24gcihlLHIpe3ZhciBpPXQoKGU9T24oZSkpLmgsKHI9T24ocikpLmgpLG89Tm4oZS5zLHIucyksYT1ObihlLmwsci5sKSxzPU5uKGUub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5zPW8odCksZS5sPWEoTWF0aC5wb3codCxuKSksZS5vcGFjaXR5PXModCksZSsiIn19cmV0dXJuIG49K24sci5nYW1tYT1lLHJ9KDEpfXZhciBtcj1wcihQbikseXI9cHIoTm4pO2Z1bmN0aW9uIHZyKHQsZSl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aC0xLGk9ZVswXSxvPW5ldyBBcnJheShyPDA/MDpyKTtuPHI7KW9bbl09dChpLGk9ZVsrK25dKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihyLTEsTWF0aC5mbG9vcih0Kj1yKSkpO3JldHVybiBvW2VdKHQtZSl9fXZhciBncixicixfcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpbltyXT10KHIvKGUtMSkpO3JldHVybiBufSx3cj0wLHhyPTAsU3I9MCxFcj0xZTMsQ3I9MCxPcj0wLFRyPTAsa3I9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQXI9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24ganIoKXtyZXR1cm4gT3J8fChBcihJciksT3I9a3Iubm93KCkrVHIpfWZ1bmN0aW9uIElyKCl7T3I9MH1mdW5jdGlvbiBNcigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gUHIodCxlLG4pe3ZhciByPW5ldyBNcjtyZXR1cm4gci5yZXN0YXJ0KHQsZSxuKSxyfWZ1bmN0aW9uIE5yKCl7anIoKSwrK3dyO2Zvcih2YXIgdCxlPWdyO2U7KSh0PU9yLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS13cn1mdW5jdGlvbiBScigpe09yPShDcj1rci5ub3coKSkrVHIsd3I9eHI9MDt0cnl7TnIoKX1maW5hbGx5e3dyPTAsZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuPWdyLHI9MS8wO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpncj1lKTticj10LEZyKHIpfSgpLE9yPTB9fWZ1bmN0aW9uIERyKCl7dmFyIHQ9a3Iubm93KCksZT10LUNyO2U+RXImJihUci09ZSxDcj10KX1mdW5jdGlvbiBGcih0KXt3cnx8KHhyJiYoeHI9Y2xlYXJUaW1lb3V0KHhyKSksdC1Pcj4yND8odDwxLzAmJih4cj1zZXRUaW1lb3V0KFJyLHQta3Iubm93KCktVHIpKSxTciYmKFNyPWNsZWFySW50ZXJ2YWwoU3IpKSk6KFNyfHwoQ3I9a3Iubm93KCksU3I9c2V0SW50ZXJ2YWwoRHIsRXIpKSx3cj0xLEFyKFJyKSkpfU1yLnByb3RvdHlwZT1Qci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk1yLHJlc3RhcnQ6ZnVuY3Rpb24odCxlLG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7bj0obnVsbD09bj9qcigpOituKSsobnVsbD09ZT8wOitlKSx0aGlzLl9uZXh0fHxicj09PXRoaXN8fChicj9ici5fbmV4dD10aGlzOmdyPXRoaXMsYnI9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9bixGcigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxGcigpKX19O3ZhciBMcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1yO3JldHVybiByLnJlc3RhcnQoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSxlPW51bGw9PWU/MDorZSxuKSxyfSxWcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1yLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/anIoKTorbixyLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLHIucmVzdGFydChvLGkrPWUsbiksdChhKX0sZSxuKSxyKX0senI9aHQoInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IiksQnI9W10sVXI9MCxIcj0xLHFyPTIsR3I9MyxXcj00LFFyPTUsWXI9NixLcj1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dC5fX3RyYW5zaXRpb247aWYoYSl7aWYobiBpbiBhKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBvKHUpe3ZhciBjLGwsZixoO2lmKG4uc3RhdGUhPT1IcilyZXR1cm4gcygpO2ZvcihjIGluIGkpaWYoKGg9aVtjXSkubmFtZT09PW4ubmFtZSl7aWYoaC5zdGF0ZT09PUdyKXJldHVybiBMcihvKTtoLnN0YXRlPT09V3I/KGguc3RhdGU9WXIsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW2NdKTorYzxlJiYoaC5zdGF0ZT1ZcixoLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtjXSl9aWYoTHIoZnVuY3Rpb24oKXtuLnN0YXRlPT09R3ImJihuLnN0YXRlPVdyLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxhKHUpKX0pLG4uc3RhdGU9cXIsbi5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksbi5zdGF0ZT09PXFyKXtmb3Iobi5zdGF0ZT1HcixyPW5ldyBBcnJheShmPW4udHdlZW4ubGVuZ3RoKSxjPTAsbD0tMTtjPGY7KytjKShoPW4udHdlZW5bY10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSkmJihyWysrbF09aCk7ci5sZW5ndGg9bCsxfX1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgaT1lPG4uZHVyYXRpb24/bi5lYXNlLmNhbGwobnVsbCxlL24uZHVyYXRpb24pOihuLnRpbWVyLnJlc3RhcnQocyksbi5zdGF0ZT1RciwxKSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KXJbb10uY2FsbChudWxsLGkpO24uc3RhdGU9PT1RciYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT1ZcixuLnRpbWVyLnN0b3AoKSxkZWxldGUgaVtlXSxpKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259aVtlXT1uLG4udGltZXI9UHIoZnVuY3Rpb24odCl7bi5zdGF0ZT1IcixuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbi5kZWxheTw9dCYmbyh0LW4uZGVsYXkpfSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjp6cix0d2VlbjpCcix0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpVcn0pfTtmdW5jdGlvbiBacih0LGUpe3ZhciBuPSRyKHQsZSk7aWYobi5zdGF0ZT5Vcil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBufWZ1bmN0aW9uIFhyKHQsZSl7dmFyIG49JHIodCxlKTtpZihuLnN0YXRlPnFyKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiBufWZ1bmN0aW9uICRyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIEpyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG89dC5fX3RyYW5zaXRpb24sYT0hMDtpZihvKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLG8pKG49b1tpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT5xciYmbi5zdGF0ZTxRcixuLnN0YXRlPVlyLG4udGltZXIuc3RvcCgpLHImJm4ub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgb1tpXSk6YT0hMTthJiZkZWxldGUgdC5fX3RyYW5zaXRpb259fTtmdW5jdGlvbiB0aSh0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PVhyKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbZV09bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4gJHIodCxyKS52YWx1ZVtlXX19dmFyIGVpPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgZT9HbjplIGluc3RhbmNlb2YgQmU/Um46KG49QmUoZSkpPyhlPW4sUm4pOktuKSh0LGUpfSxuaT1yZS5wcm90b3R5cGUuY29uc3RydWN0b3Iscmk9MDtmdW5jdGlvbiBpaSh0LGUsbixyKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWUsdGhpcy5fbmFtZT1uLHRoaXMuX2lkPXJ9ZnVuY3Rpb24gb2kodCl7cmV0dXJuIHJlKCkudHJhbnNpdGlvbih0KX1mdW5jdGlvbiBhaSgpe3JldHVybisrcml9dmFyIHNpPXJlLnByb3RvdHlwZTtmdW5jdGlvbiB1aSh0KXtyZXR1cm4rdH1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIGxpKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIGZpKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIGhpKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBkaSh0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gcGkodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9aWkucHJvdG90eXBlPW9pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aWksc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdSxjPXJbYV0sbD1jLmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGwpLGg9MDtoPGw7KytoKShzPWNbaF0pJiYodT10LmNhbGwocyxzLl9fZGF0YV9fLGgsYykpJiYoIl9fZGF0YV9fImluIHMmJih1Ll9fZGF0YV9fPXMuX19kYXRhX18pLGZbaF09dSxLcihmW2hdLGUsbixoLGYsJHIocyxuKSkpO3JldHVybiBuZXcgaWkobyx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PV90KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgdSxjPXJbc10sbD1jLmxlbmd0aCxmPTA7ZjxsOysrZilpZih1PWNbZl0pe2Zvcih2YXIgaCxkPXQuY2FsbCh1LHUuX19kYXRhX18sZixjKSxwPSRyKHUsbiksbT0wLHk9ZC5sZW5ndGg7bTx5OysrbSkoaD1kW21dKSYmS3IoaCxlLG4sbSxkLHApO28ucHVzaChkKSxhLnB1c2godSl9cmV0dXJuIG5ldyBpaShvLGEsZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1FdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgbyxhPWVbaV0scz1hLmxlbmd0aCx1PXJbaV09W10sYz0wO2M8czsrK2MpKG89YVtjXSkmJnQuY2FsbChvLG8uX19kYXRhX18sYyxhKSYmdS5wdXNoKG8pO3JldHVybiBuZXcgaWkocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1NYXRoLm1pbihyLG4ubGVuZ3RoKSxvPW5ldyBBcnJheShyKSxhPTA7YTxpOysrYSlmb3IodmFyIHMsdT1lW2FdLGM9blthXSxsPXUubGVuZ3RoLGY9b1thXT1uZXcgQXJyYXkobCksaD0wO2g8bDsrK2gpKHM9dVtoXXx8Y1toXSkmJihmW2hdPXMpO2Zvcig7YTxyOysrYSlvW2FdPWVbYV07cmV0dXJuIG5ldyBpaShvLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgbmkodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZCxuPWFpKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsYz0wO2M8dTsrK2MpaWYoYT1zW2NdKXt2YXIgbD0kcihhLGUpO0tyKGEsdCxuLGMscyx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgaWkocix0aGlzLl9wYXJlbnRzLHQsbil9LGNhbGw6c2kuY2FsbCxub2RlczpzaS5ub2Rlcyxub2RlOnNpLm5vZGUsc2l6ZTpzaS5zaXplLGVtcHR5OnNpLmVtcHR5LGVhY2g6c2kuZWFjaCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/JHIodGhpcy5ub2RlKCksbikub24ub24odCk6dGhpcy5lYWNoKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG89ZnVuY3Rpb24odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0oZSk/WnI6WHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLHQpLHM9YS5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLGEub249aX19KG4sdCxlKSl9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj1tdCh0KSxyPSJ0cmFuc2Zvcm0iPT09bj9ycjplaTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT8obi5sb2NhbD9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKSk9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpO3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1uKHRoaXMpO2lmKG51bGwhPXMpcmV0dXJuKGE9dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09cz9udWxsOmE9PT1yJiZzPT09aT9vOm89ZShyPWEsaT1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19KShuLHIsdGkodGhpcywiYXR0ci4iK3QsZSkpOm51bGw9PWU/KG4ubG9jYWw/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobik6KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19OmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKHQpO3JldHVybiBvPT09bj9udWxsOm89PT1yP2k6aT1lKHI9byxuKX19KShuLHIsZSsiIikpfSxhdHRyVHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3ZhciByPW10KHQpO3JldHVybiB0aGlzLnR3ZWVuKG4sKHIubG9jYWw/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn06ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcyxyPWUuYXBwbHkobixhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtuLnNldEF0dHJpYnV0ZSh0LHIoZSkpfX1yZXR1cm4gbi5fdmFsdWU9ZSxufSkocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9ucjplaTtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1NdCh0aGlzLHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksTXQodGhpcyx0KSk7cmV0dXJuIG89PT1hP251bGw6bz09PW4mJmE9PT1yP2k6aT1lKG49byxyPWEpfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19KHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPU10KHRoaXMsdCkscz1uKHRoaXMpO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxzPU10KHRoaXMsdCkpLGE9PT1zP251bGw6YT09PXImJnM9PT1pP286bz1lKHI9YSxpPXMpfX0odCxyLHRpKHRoaXMsInN0eWxlLiIrdCxlKSk6ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89TXQodGhpcyx0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSsiIiksbil9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9ZS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKGUpe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKGUpLG4pfX1yZXR1cm4gci5fdmFsdWU9ZSxyfSh0LGUsbnVsbD09bj8iIjpuKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1lPyIiOmV9fSh0aSh0aGlzLCJ0ZXh0Iix0KSk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX0obnVsbD09dD8iIjp0KyIiKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIiwodD10aGlzLl9pZCxmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIG4gaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK24hPT10KXJldHVybjtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSkpO3ZhciB0fSx0d2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9JHIodGhpcy5ub2RlKCksbikudHdlZW4sbz0wLGE9aS5sZW5ndGg7bzxhOysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1Ycih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09bilmb3IodmFyIGE9MCxzPShyPW49bykubGVuZ3RoO2E8czsrK2EpaWYoclthXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UoYSwxKTticmVha31pLnR3ZWVuPXJ9fTpmdW5jdGlvbih0LGUsbil7dmFyIHIsaTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89WHIodGhpcyx0KSxhPW8udHdlZW47aWYoYSE9PXIpe2k9KHI9YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6ZSx2YWx1ZTpufSx1PTAsYz1pLmxlbmd0aDt1PGM7Kyt1KWlmKGlbdV0ubmFtZT09PWUpe2lbdV09czticmVha311PT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19KShuLHQsZSkpfSxkZWxheTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7WnIodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7WnIodGhpcyx0KS5kZWxheT1lfX0pKGUsdCkpOiRyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7WHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTpmdW5jdGlvbih0LGUpe3JldHVybiBlPStlLGZ1bmN0aW9uKCl7WHIodGhpcyx0KS5kdXJhdGlvbj1lfX0pKGUsdCkpOiRyKHRoaXMubm9kZSgpLGUpLmR1cmF0aW9ufSxlYXNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtYcih0aGlzLHQpLmVhc2U9ZX19KGUsdCkpOiRyKHRoaXMubm9kZSgpLGUpLmVhc2V9fTt2YXIgbWk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdyh0LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSx5aT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LGUpfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSx2aT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LGUpOjItTWF0aC5wb3coMi10LGUpKS8yfXJldHVybiBlPStlLG4uZXhwb25lbnQ9dCxufSgzKSxnaT1NYXRoLlBJLGJpPWdpLzI7ZnVuY3Rpb24gX2kodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpiaSl9ZnVuY3Rpb24gd2kodCl7cmV0dXJuIE1hdGguc2luKHQqYmkpfWZ1bmN0aW9uIHhpKHQpe3JldHVybigxLU1hdGguY29zKGdpKnQpKS8yfWZ1bmN0aW9uIFNpKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKnQtMTApfWZ1bmN0aW9uIEVpKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfWZ1bmN0aW9uIENpKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24gT2kodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBUaSh0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX1mdW5jdGlvbiBraSh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtdCp0KTpNYXRoLnNxcnQoMS0odC09MikqdCkrMSkvMn12YXIgQWk9NC8xMSxqaT02LzExLElpPTgvMTEsTWk9Ljc1LFBpPTkvMTEsTmk9MTAvMTEsUmk9LjkzNzUsRGk9MjEvMjIsRmk9NjMvNjQsTGk9MS9BaS9BaTtmdW5jdGlvbiBWaSh0KXtyZXR1cm4gMS16aSgxLXQpfWZ1bmN0aW9uIHppKHQpe3JldHVybih0PSt0KTxBaT9MaSp0KnQ6dDxJaT9MaSoodC09amkpKnQrTWk6dDxOaT9MaSoodC09UGkpKnQrUmk6TGkqKHQtPURpKSp0K0ZpfWZ1bmN0aW9uIEJpKHQpe3JldHVybigodCo9Mik8PTE/MS16aSgxLXQpOnppKHQtMSkrMSkvMn12YXIgVWk9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxIaT1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLHFpPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxHaT0yKk1hdGguUEksV2k9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89R2kpO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qR2kpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxRaT1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1HaSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipHaSl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLFlpPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPUdpKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qR2kpfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxLaT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6cGl9O2Z1bmN0aW9uIFppKHQsZSl7Zm9yKHZhciBuOyEobj10Ll9fdHJhbnNpdGlvbil8fCEobj1uW2VdKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIEtpLnRpbWU9anIoKSxLaTtyZXR1cm4gbn1yZS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtKcih0aGlzLHQpfSl9LHJlLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIGlpPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9YWkoKSwobj1LaSkudGltZT1qcigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGEscz1yW29dLHU9cy5sZW5ndGgsYz0wO2M8dTsrK2MpKGE9c1tjXSkmJktyKGEsdCxlLGMscyxufHxaaShhLGUpKTtyZXR1cm4gbmV3IGlpKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWGk9W251bGxdLCRpPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPkhyJiZuLm5hbWU9PT1lKXJldHVybiBuZXcgaWkoW1t0XV0sWGksZSwrcik7cmV0dXJuIG51bGx9LEppPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sdG89ZnVuY3Rpb24odCxlLG4pe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zZWxlY3Rpb249bn07ZnVuY3Rpb24gZW8oKXtRdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX12YXIgbm89ZnVuY3Rpb24oKXtRdC5wcmV2ZW50RGVmYXVsdCgpLFF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxybz17bmFtZToiZHJhZyJ9LGlvPXtuYW1lOiJzcGFjZSJ9LG9vPXtuYW1lOiJoYW5kbGUifSxhbz17bmFtZToiY2VudGVyIn0sc289e25hbWU6IngiLGhhbmRsZXM6WyJlIiwidyJdLm1hcCh5byksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmW1t0WzBdLGVbMF1bMV1dLFt0WzFdLGVbMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LHVvPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoeW8pLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJltbZVswXVswXSx0WzBdXSxbZVsxXVswXSx0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxjbz17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoeW8pLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxsbz17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sZm89e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LGhvPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxwbz17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxtbz17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiB5byh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiB2bygpe3JldHVybiFRdC5idXR0b259ZnVuY3Rpb24gZ28oKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gYm8odCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiBfbyh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIHdvKHQpe3ZhciBlPXQuX19icnVzaDtyZXR1cm4gZT9lLmRpbS5vdXRwdXQoZS5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24geG8oKXtyZXR1cm4gQ28oc28pfWZ1bmN0aW9uIFNvKCl7cmV0dXJuIENvKHVvKX12YXIgRW89ZnVuY3Rpb24oKXtyZXR1cm4gQ28oY28pfTtmdW5jdGlvbiBDbyh0KXt2YXIgZSxuPWdvLHI9dm8saT1odChhLCJzdGFydCIsImJydXNoIiwiZW5kIiksbz02O2Z1bmN0aW9uIGEoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIsZikuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW3lvKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGxvLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1ibyh0aGlzKS5leHRlbnQ7aWUodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSksZS5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFt5bygic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixsby5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgcj1lLnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEodC5oYW5kbGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KTtyLmV4aXQoKS5yZW1vdmUoKSxyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pLmF0dHIoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIGxvW3QudHlwZV19KSxlLmVhY2gocykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCB0b3VjaHN0YXJ0LmJydXNoIixsKX1mdW5jdGlvbiBzKCl7dmFyIHQ9aWUodGhpcyksZT1ibyh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP2VbMV1bMF0tby8yOmVbMF1bMF0tby8yfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tby8yOmVbMF1bMV0tby8yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP2VbMV1bMF0tZVswXVswXStvOm99KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP2VbMV1bMV0tZVswXVsxXStvOm99KSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdC5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKHQsZSl9ZnVuY3Rpb24gYyh0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTB9ZnVuY3Rpb24gbCgpe2lmKFF0LnRvdWNoZXMpe2lmKFF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDxRdC50b3VjaGVzLmxlbmd0aClyZXR1cm4gbm8oKX1lbHNlIGlmKGUpcmV0dXJuO2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixpLG8sYSxjLGwsZixoLGQscCxtLHksdixnPXRoaXMsYj1RdC50YXJnZXQuX19kYXRhX18udHlwZSxfPSJzZWxlY3Rpb24iPT09KFF0Lm1ldGFLZXk/Yj0ib3ZlcmxheSI6Yik/cm86UXQuYWx0S2V5P2FvOm9vLHc9dD09PXVvP251bGw6cG9bYl0seD10PT09c28/bnVsbDptb1tiXSxTPWJvKGcpLEU9Uy5leHRlbnQsQz1TLnNlbGVjdGlvbixPPUVbMF1bMF0sVD1FWzBdWzFdLGs9RVsxXVswXSxBPUVbMV1bMV0saj13JiZ4JiZRdC5zaGlmdEtleSxJPWZlKGcpLE09SSxQPXUoZyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09Yj9TLnNlbGVjdGlvbj1DPVtbbj10PT09dW8/TzpJWzBdLG89dD09PXNvP1Q6SVsxXV0sW2M9dD09PXVvP2s6bixmPXQ9PT1zbz9BOm9dXToobj1DWzBdWzBdLG89Q1swXVsxXSxjPUNbMV1bMF0sZj1DWzFdWzFdKSxpPW4sYT1vLGw9YyxoPWY7dmFyIE49aWUoZykuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksUj1OLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLGxvW2JdKTtpZihRdC50b3VjaGVzKU4ub24oInRvdWNobW92ZS5icnVzaCIsRiwhMCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixWLCEwKTtlbHNle3ZhciBEPWllKFF0LnZpZXcpLm9uKCJrZXlkb3duLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaChRdC5rZXlDb2RlKXtjYXNlIDE2Omo9dyYmeDticmVhaztjYXNlIDE4Ol89PT1vbyYmKHcmJihjPWwtZCp3LG49aStkKncpLHgmJihmPWgtcCp4LG89YStwKngpLF89YW8sTCgpKTticmVhaztjYXNlIDMyOl8hPT1vbyYmXyE9PWFvfHwodzwwP2M9bC1kOnc+MCYmKG49aS1kKSx4PDA/Zj1oLXA6eD4wJiYobz1hLXApLF89aW8sUi5hdHRyKCJjdXJzb3IiLGxvLnNlbGVjdGlvbiksTCgpKTticmVhaztkZWZhdWx0OnJldHVybn1ubygpfSwhMCkub24oImtleXVwLmJydXNoIixmdW5jdGlvbigpe3N3aXRjaChRdC5rZXlDb2RlKXtjYXNlIDE2OmomJih5PXY9aj0hMSxMKCkpO2JyZWFrO2Nhc2UgMTg6Xz09PWFvJiYodzwwP2M9bDp3PjAmJihuPWkpLHg8MD9mPWg6eD4wJiYobz1hKSxfPW9vLEwoKSk7YnJlYWs7Y2FzZSAzMjpfPT09aW8mJihRdC5hbHRLZXk/KHcmJihjPWwtZCp3LG49aStkKncpLHgmJihmPWgtcCp4LG89YStwKngpLF89YW8pOih3PDA/Yz1sOnc+MCYmKG49aSkseDwwP2Y9aDp4PjAmJihvPWEpLF89b28pLFIuYXR0cigiY3Vyc29yIixsb1tiXSksTCgpKTticmVhaztkZWZhdWx0OnJldHVybn1ubygpfSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsRiwhMCkub24oIm1vdXNldXAuYnJ1c2giLFYsITApO3ZlKFF0LnZpZXcpfWVvKCksSnIoZykscy5jYWxsKGcpLFAuc3RhcnQoKX1mdW5jdGlvbiBGKCl7dmFyIHQ9ZmUoZyk7IWp8fHl8fHZ8fChNYXRoLmFicyh0WzBdLU1bMF0pPk1hdGguYWJzKHRbMV0tTVsxXSk/dj0hMDp5PSEwKSxNPXQsbT0hMCxubygpLEwoKX1mdW5jdGlvbiBMKCl7dmFyIHQ7c3dpdGNoKGQ9TVswXS1JWzBdLHA9TVsxXS1JWzFdLF8pe2Nhc2UgaW86Y2FzZSBybzp3JiYoZD1NYXRoLm1heChPLW4sTWF0aC5taW4oay1jLGQpKSxpPW4rZCxsPWMrZCkseCYmKHA9TWF0aC5tYXgoVC1vLE1hdGgubWluKEEtZixwKSksYT1vK3AsaD1mK3ApO2JyZWFrO2Nhc2Ugb286dzwwPyhkPU1hdGgubWF4KE8tbixNYXRoLm1pbihrLW4sZCkpLGk9bitkLGw9Yyk6dz4wJiYoZD1NYXRoLm1heChPLWMsTWF0aC5taW4oay1jLGQpKSxpPW4sbD1jK2QpLHg8MD8ocD1NYXRoLm1heChULW8sTWF0aC5taW4oQS1vLHApKSxhPW8rcCxoPWYpOng+MCYmKHA9TWF0aC5tYXgoVC1mLE1hdGgubWluKEEtZixwKSksYT1vLGg9ZitwKTticmVhaztjYXNlIGFvOncmJihpPU1hdGgubWF4KE8sTWF0aC5taW4oayxuLWQqdykpLGw9TWF0aC5tYXgoTyxNYXRoLm1pbihrLGMrZCp3KSkpLHgmJihhPU1hdGgubWF4KFQsTWF0aC5taW4oQSxvLXAqeCkpLGg9TWF0aC5tYXgoVCxNYXRoLm1pbihBLGYrcCp4KSkpfWw8aSYmKHcqPS0xLHQ9bixuPWMsYz10LHQ9aSxpPWwsbD10LGIgaW4gZm8mJlIuYXR0cigiY3Vyc29yIixsb1tiPWZvW2JdXSkpLGg8YSYmKHgqPS0xLHQ9byxvPWYsZj10LHQ9YSxhPWgsaD10LGIgaW4gaG8mJlIuYXR0cigiY3Vyc29yIixsb1tiPWhvW2JdXSkpLFMuc2VsZWN0aW9uJiYoQz1TLnNlbGVjdGlvbikseSYmKGk9Q1swXVswXSxsPUNbMV1bMF0pLHYmJihhPUNbMF1bMV0saD1DWzFdWzFdKSxDWzBdWzBdPT09aSYmQ1swXVsxXT09PWEmJkNbMV1bMF09PT1sJiZDWzFdWzFdPT09aHx8KFMuc2VsZWN0aW9uPVtbaSxhXSxbbCxoXV0scy5jYWxsKGcpLFAuYnJ1c2goKSl9ZnVuY3Rpb24gVigpe2lmKGVvKCksUXQudG91Y2hlcyl7aWYoUXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2UmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGx9LDUwMCksTi5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIGdlKFF0LnZpZXcsbSksRC5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7Ti5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLFIuYXR0cigiY3Vyc29yIixsby5vdmVybGF5KSxTLnNlbGVjdGlvbiYmKEM9Uy5zZWxlY3Rpb24pLF9vKEMpJiYoUy5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZykpLFAuZW5kKCl9fWZ1bmN0aW9uIGYoKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuZGltPXQsZX1yZXR1cm4gYS5tb3ZlPWZ1bmN0aW9uKGUsbil7ZS5zZWxlY3Rpb24/ZS5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7dSh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWUuX19icnVzaCxpPXUoZSxhcmd1bWVudHMpLG89ci5zZWxlY3Rpb24sYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sci5leHRlbnQpLGM9Wm4obyxhKTtmdW5jdGlvbiBsKHQpe3Iuc2VsZWN0aW9uPTE9PT10JiZfbyhhKT9udWxsOmModCkscy5jYWxsKGUpLGkuYnJ1c2goKX1yZXR1cm4gbyYmYT9sOmwoMSl9KTplLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMscj10aGlzLl9fYnJ1c2gsaT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxlKTpuLHIuZXh0ZW50KSxvPXUodGhpcyxlKS5iZWZvcmVzdGFydCgpO0pyKHRoaXMpLHIuc2VsZWN0aW9uPW51bGw9PWl8fF9vKGkpP251bGw6aSxzLmNhbGwodGhpcyksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0sYy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXskdChuZXcgdG8oYSxlLHQub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksaS5hcHBseSxpLFtlLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGEuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmkoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGEpOm59LGEuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SmkoISF0KSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsYSk6b30sYS5vbj1mdW5jdGlvbigpe3ZhciB0PWkub24uYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiB0PT09aT9hOnR9LGF9dmFyIE9vPU1hdGguY29zLFRvPU1hdGguc2luLGtvPU1hdGguUEksQW89a28vMixqbz0yKmtvLElvPU1hdGgubWF4LE1vPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGwsbj1udWxsLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBvLGEscyx1LGMsbCxmPWkubGVuZ3RoLGg9W10sZD14KGYpLHA9W10sbT1bXSx5PW0uZ3JvdXBzPW5ldyBBcnJheShmKSx2PW5ldyBBcnJheShmKmYpO2ZvcihvPTAsYz0tMTsrK2M8Zjspe2ZvcihhPTAsbD0tMTsrK2w8ZjspYSs9aVtjXVtsXTtoLnB1c2goYSkscC5wdXNoKHgoZikpLG8rPWF9Zm9yKGUmJmQuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKGhbdF0saFtuXSl9KSxuJiZwLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSl9KSx1PShvPUlvKDAsam8tdCpmKS9vKT90OmpvL2YsYT0wLGM9LTE7KytjPGY7KXtmb3Iocz1hLGw9LTE7KytsPGY7KXt2YXIgZz1kW2NdLGI9cFtnXVtsXSxfPWlbZ11bYl0sdz1hLFM9YSs9XypvO3ZbYipmK2ddPXtpbmRleDpnLHN1YmluZGV4OmIsc3RhcnRBbmdsZTp3LGVuZEFuZ2xlOlMsdmFsdWU6X319eVtnXT17aW5kZXg6ZyxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6YSx2YWx1ZTpoW2ddfSxhKz11fWZvcihjPS0xOysrYzxmOylmb3IobD1jLTE7KytsPGY7KXt2YXIgRT12W2wqZitjXSxDPXZbYypmK2xdOyhFLnZhbHVlfHxDLnZhbHVlKSYmbS5wdXNoKEUudmFsdWU8Qy52YWx1ZT97c291cmNlOkMsdGFyZ2V0OkV9Ontzb3VyY2U6RSx0YXJnZXQ6Q30pfXJldHVybiByP20uc29ydChyKTptfXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUlvKDAsZSksaSk6dH0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSk6ZX0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bnVsbDooZT10LHI9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSl9KS5fPXQsaSk6ciYmci5fO3ZhciBlfSxpfSxQbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsTm89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxSbz1NYXRoLlBJLERvPTIqUm8sRm89RG8tMWUtNjtmdW5jdGlvbiBMbygpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFZvKCl7cmV0dXJuIG5ldyBMb31Mby5wcm90b3R5cGU9Vm8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbyxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLG8pe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9KG49K24pLSh0PSt0KSx1PShyPStyKS0oZT0rZSksYz1vLXQsbD1hLWUsZj1jKmMrbCpsO2lmKChpPStpKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGY+MWUtNilpZihNYXRoLmFicyhsKnMtdSpjKT4xZS02JiZpKXt2YXIgaD1uLW8sZD1yLWEscD1zKnMrdSp1LG09aCpoK2QqZCx5PU1hdGguc3FydChwKSx2PU1hdGguc3FydChmKSxnPWkqTWF0aC50YW4oKFJvLU1hdGguYWNvcygocCtmLW0pLygyKnkqdikpKS8yKSxiPWcvdixfPWcveTtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKmMpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpoPmMqZCkrIiwiKyh0aGlzLl94MT10K18qcykrIiwiKyh0aGlzLl95MT1lK18qdSl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKX0sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0PSt0LGU9K2U7dmFyIGE9KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSx1PXQrYSxjPWUrcyxsPTFebyxmPW8/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK3UrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLXUpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWMpPjFlLTYpJiYodGhpcy5fKz0iTCIrdSsiLCIrYyksbiYmKGY8MCYmKGY9ZiVEbytEbyksZj5Gbz90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHQtYSkrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHRoaXMuX3gxPXUpKyIsIisodGhpcy5feTE9Yyk6Zj4xZS02JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhmPj1SbykrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciB6bz1WbztmdW5jdGlvbiBCbyh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gVW8odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEhvKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBxbyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEdvKHQpe3JldHVybiB0LmVuZEFuZ2xlfXZhciBXbz1mdW5jdGlvbigpe3ZhciB0PUJvLGU9VW8sbj1IbyxyPXFvLGk9R28sbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgYSxzPVBvLmNhbGwoYXJndW1lbnRzKSx1PXQuYXBwbHkodGhpcyxzKSxjPWUuYXBwbHkodGhpcyxzKSxsPStuLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksZj1yLmFwcGx5KHRoaXMscyktQW8saD1pLmFwcGx5KHRoaXMscyktQW8sZD1sKk9vKGYpLHA9bCpUbyhmKSxtPStuLmFwcGx5KHRoaXMsKHNbMF09YyxzKSkseT1yLmFwcGx5KHRoaXMscyktQW8sdj1pLmFwcGx5KHRoaXMscyktQW87aWYob3x8KG89YT16bygpKSxvLm1vdmVUbyhkLHApLG8uYXJjKDAsMCxsLGYsaCksZj09PXkmJmg9PT12fHwoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxtKk9vKHkpLG0qVG8oeSkpLG8uYXJjKDAsMCxtLHksdikpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxwKSxvLmNsb3NlUGF0aCgpLGEpcmV0dXJuIG89bnVsbCxhKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5vKCt0KSxhKTpufSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpObygrdCksYSk6cn0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5vKCt0KSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PXQ/bnVsbDp0LGEpOm99LGF9O2Z1bmN0aW9uIFFvKCl7fWZ1bmN0aW9uIFlvKHQsZSl7dmFyIG49bmV3IFFvO2lmKHQgaW5zdGFuY2VvZiBRbyl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxvOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBhIGluIHQpbi5zZXQoYSx0W2FdKTtyZXR1cm4gbn1Rby5wcm90b3R5cGU9WW8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRbyxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgS289WW8sWm89ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1bXSxpPVtdO2Z1bmN0aW9uIG8obixpLGEscyl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIHUsYyxsLGY9LTEsaD1uLmxlbmd0aCxkPXJbaSsrXSxwPUtvKCksbT1hKCk7KytmPGg7KShsPXAuZ2V0KHU9ZChjPW5bZl0pKyIiKSk/bC5wdXNoKGMpOnAuc2V0KHUsW2NdKTtyZXR1cm4gcC5lYWNoKGZ1bmN0aW9uKHQsZSl7cyhtLGUsbyh0LGksYSxzKSl9KSxtfXJldHVybiBuPXtvYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLFhvLCRvKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCxKbyx0YSl9LGVudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQobixvKXtpZigrK28+ci5sZW5ndGgpcmV0dXJuIG47dmFyIGEscz1pW28tMV07cmV0dXJuIG51bGwhPWUmJm8+PXIubGVuZ3RoP2E9bi5lbnRyaWVzKCk6KGE9W10sbi5lYWNoKGZ1bmN0aW9uKGUsbil7YS5wdXNoKHtrZXk6bix2YWx1ZXM6dChlLG8pfSl9KSksbnVsbCE9cz9hLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcyh0LmtleSxlLmtleSl9KTphfShvKHQsMCxKbyx0YSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX07ZnVuY3Rpb24gWG8oKXtyZXR1cm57fX1mdW5jdGlvbiAkbyh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIEpvKCl7cmV0dXJuIEtvKCl9ZnVuY3Rpb24gdGEodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gZWEoKXt9dmFyIG5hPUtvLnByb3RvdHlwZTtmdW5jdGlvbiByYSh0LGUpe3ZhciBuPW5ldyBlYTtpZih0IGluc3RhbmNlb2YgZWEpdC5lYWNoKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8aTspbi5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyluLmFkZChlKHRbcl0scix0KSl9cmV0dXJuIG59ZWEucHJvdG90eXBlPXJhLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZWEsaGFzOm5hLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiKyh0Kz0iIildPXQsdGhpc30scmVtb3ZlOm5hLnJlbW92ZSxjbGVhcjpuYS5jbGVhcix2YWx1ZXM6bmEua2V5cyxzaXplOm5hLnNpemUsZW1wdHk6bmEuZW1wdHksZWFjaDpuYS5lYWNofTt2YXIgaWE9cmEsb2E9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKG4pO3JldHVybiBlfSxhYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2godFtuXSk7cmV0dXJuIGV9LHNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7a2V5Om4sdmFsdWU6dFtuXX0pO3JldHVybiBlfSx1YT1BcnJheS5wcm90b3R5cGUuc2xpY2UsY2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxsYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSxmYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGhhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobj1kYSh0LGVbcl0pKXJldHVybiBuO3JldHVybiAwfTtmdW5jdGlvbiBkYSh0LGUpe2Zvcih2YXIgbj1lWzBdLHI9ZVsxXSxpPS0xLG89MCxhPXQubGVuZ3RoLHM9YS0xO288YTtzPW8rKyl7dmFyIHU9dFtvXSxjPXVbMF0sbD11WzFdLGY9dFtzXSxoPWZbMF0sZD1mWzFdO2lmKHBhKHUsZixlKSlyZXR1cm4gMDtsPnIhPWQ+ciYmbjwoaC1jKSooci1sKS8oZC1sKStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gcGEodCxlLG4pe3ZhciByLGksbyxhO3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSh0LGUsbikmJihpPXRbcj0rKHRbMF09PT1lWzBdKV0sYT1lW3JdLGk8PShvPW5bcl0pJiZvPD1hfHxhPD1vJiZvPD1pKX12YXIgbWE9ZnVuY3Rpb24oKXt9LHlhPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV0sdmE9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPUEscj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoY2EpO2Vsc2V7dmFyIHI9eSh0KSxpPXJbMF0sYT1yWzFdO2U9ayhpLGEsZSksZT14KE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3IoYS9lKSplLGUpfXJldHVybiBlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbyh0LGUpfSl9ZnVuY3Rpb24gbyhuLGkpe3ZhciBvPVtdLHM9W107cmV0dXJuIGZ1bmN0aW9uKG4scixpKXt2YXIgbyxzLHUsYyxsLGY9bmV3IEFycmF5LGg9bmV3IEFycmF5O2ZvcihvPXM9LTEseWFbKHU9blswXT49cik8PDFdLmZvckVhY2goZCk7KytvPHQtMTspeWFbdXwodT1uW28rMV0+PXIpPDwxXS5mb3JFYWNoKGQpO2Zvcih5YVt1PDwwXS5mb3JFYWNoKGQpOysrczxlLTE7KXtmb3Iobz0tMSx5YVsodT1uW3MqdCt0XT49cik8PDF8KGM9bltzKnRdPj1yKTw8Ml0uZm9yRWFjaChkKTsrK288dC0xOylsPWMseWFbdXwodT1uW3MqdCt0K28rMV0+PXIpPDwxfChjPW5bcyp0K28rMV0+PXIpPDwyfGw8PDNdLmZvckVhY2goZCk7eWFbdXxjPDwzXS5mb3JFYWNoKGQpfWZvcihvPS0xLHlhWyhjPW5bcyp0XT49cik8PDJdLmZvckVhY2goZCk7KytvPHQtMTspbD1jLHlhWyhjPW5bcyp0K28rMV0+PXIpPDwyfGw8PDNdLmZvckVhY2goZCk7ZnVuY3Rpb24gZCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rbyx0WzBdWzFdK3NdLHU9W3RbMV1bMF0rbyx0WzFdWzFdK3NdLGM9YShyKSxsPWEodSk7KGU9aFtjXSk/KG49ZltsXSk/KGRlbGV0ZSBoW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2godSksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWhbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgaFtlLmVuZF0sZS5yaW5nLnB1c2godSksaFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1oW2NdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGhbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaCh1KSxpKGUucmluZykpOmZbbi5zdGFydF09aFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD1jXT1lKTpmW2NdPWhbbF09e3N0YXJ0OmMsZW5kOmwscmluZzpbcix1XX19eWFbYzw8M10uZm9yRWFjaChkKX0obixpLGZ1bmN0aW9uKHQpe3IodCxuLGkpLGxhKHQpPjA/by5wdXNoKFt0XSk6cy5wdXNoKHQpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1vLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09aGEoKGU9b1tuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6aSxjb29yZGluYXRlczpvfX1mdW5jdGlvbiBhKGUpe3JldHVybiAyKmVbMF0rZVsxXSoodCsxKSo0fWZ1bmN0aW9uIHMobixyLGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgbyxhPW5bMF0scz1uWzFdLHU9MHxhLGM9MHxzLGw9cltjKnQrdV07YT4wJiZhPHQmJnU9PT1hJiYoblswXT1hKyhpLShvPXJbYyp0K3UtMV0pKS8obC1vKS0uNSkscz4wJiZzPGUmJmM9PT1zJiYoblsxXT1zKyhpLShvPXJbKGMtMSkqdCt1XSkpLyhsLW8pLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLG89TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZvPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPW8saX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9mYSh1YS5jYWxsKHQpKTpmYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6bWEsaSk6cj09PXN9LGl9O2Z1bmN0aW9uIGdhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsdT0wO3M8cituOysrcylzPHImJih1Kz10LmRhdGFbcythKnJdKSxzPj1uJiYocz49byYmKHUtPXQuZGF0YVtzLW8rYSpyXSksZS5kYXRhW3MtbithKnJdPXUvTWF0aC5taW4ocysxLHItMStvLXMsbykpfWZ1bmN0aW9uIGJhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LG89MSsobjw8MSksYT0wO2E8cjsrK2EpZm9yKHZhciBzPTAsdT0wO3M8aStuOysrcylzPGkmJih1Kz10LmRhdGFbYStzKnJdKSxzPj1uJiYocz49byYmKHUtPXQuZGF0YVthKyhzLW8pKnJdKSxlLmRhdGFbYSsocy1uKSpyXT11L01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBfYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3YSh0KXtyZXR1cm4gdFsxXX12YXIgeGE9ZnVuY3Rpb24oKXt2YXIgdD1fYSxlPXdhLG49OTYwLHI9NTAwLGk9MjAsbz0yLGE9MyppLHM9bisyKmE+Pm8sdT1yKzIqYT4+byxjPWZhKDIwKTtmdW5jdGlvbiBsKG4pe3ZhciByPW5ldyBGbG9hdDMyQXJyYXkocyp1KSxsPW5ldyBGbG9hdDMyQXJyYXkocyp1KTtuLmZvckVhY2goZnVuY3Rpb24obixpLGMpe3ZhciBsPXQobixpLGMpK2E+Pm8sZj1lKG4saSxjKSthPj5vO2w+PTAmJmw8cyYmZj49MCYmZjx1JiYrK3JbbCtmKnNdfSksZ2Eoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpyfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmx9LGk+Pm8pLGJhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6bH0se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpyfSxpPj5vKSxnYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOnJ9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6bH0saT4+byksYmEoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpsfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOnJ9LGk+Pm8pLGdhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6cn0se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpsfSxpPj5vKSxiYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmx9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6cn0saT4+byk7dmFyIGg9YyhyKTtpZighQXJyYXkuaXNBcnJheShoKSl7dmFyIGQ9TihyKTtoPWsoMCxkLGgpLChoPXgoMCxNYXRoLmZsb29yKGQvaCkqaCxoKSkuc2hpZnQoKX1yZXR1cm4gdmEoKS50aHJlc2hvbGRzKGgpLnNpemUoW3MsdV0pKHIpLm1hcChmKX1mdW5jdGlvbiBmKHQpe3JldHVybiB0LnZhbHVlKj1NYXRoLnBvdygyLC0yKm8pLHQuY29vcmRpbmF0ZXMuZm9yRWFjaChoKSx0fWZ1bmN0aW9uIGgodCl7dC5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQodCl7dC5mb3JFYWNoKHApfWZ1bmN0aW9uIHAodCl7dFswXT10WzBdKk1hdGgucG93KDIsbyktYSx0WzFdPXRbMV0qTWF0aC5wb3coMixvKS1hfWZ1bmN0aW9uIG0oKXtyZXR1cm4gcz1uKzIqKGE9MyppKT4+byx1PXIrMiphPj5vLGx9cmV0dXJuIGwueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZhKCtlKSxsKTp0fSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmYSgrdCksbCk6ZX0sbC5zaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLHJdO3ZhciBlPU1hdGguY2VpbCh0WzBdKSxpPU1hdGguY2VpbCh0WzFdKTtpZighKGU+PTB8fGU+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49ZSxyPWksbSgpfSxsLmNlbGxTaXplPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxvO2lmKCEoKHQ9K3QpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksbSgpfSxsLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP2ZhKHVhLmNhbGwodCkpOmZhKHQpLGwpOmN9LGwuYmFuZHdpZHRoPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQoaSooaSsxKSk7aWYoISgodD0rdCk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gaT1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp0KnQrMSktMSkvMiksbSgpfSxsfSxTYT17fSxFYT17fSxDYT0zNCxPYT0xMCxUYT0xMztmdW5jdGlvbiBrYSh0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK3QubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyJdIn0pLmpvaW4oIiwiKSsifSIpfXZhciBBYT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxvPXQubGVuZ3RoLGE9MCxzPTAsdT1vPD0wLGM9ITE7ZnVuY3Rpb24gbCgpe2lmKHUpcmV0dXJuIEVhO2lmKGMpcmV0dXJuIGM9ITEsU2E7dmFyIGUscixpPWE7aWYodC5jaGFyQ29kZUF0KGkpPT09Q2Epe2Zvcig7YSsrPG8mJnQuY2hhckNvZGVBdChhKSE9PUNhfHx0LmNoYXJDb2RlQXQoKythKT09PUNhOyk7cmV0dXJuKGU9YSk+PW8/dT0hMDoocj10LmNoYXJDb2RlQXQoYSsrKSk9PT1PYT9jPSEwOnI9PT1UYSYmKGM9ITAsdC5jaGFyQ29kZUF0KGEpPT09T2EmJisrYSksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDthPG87KXtpZigocj10LmNoYXJDb2RlQXQoZT1hKyspKT09PU9hKWM9ITA7ZWxzZSBpZihyPT09VGEpYz0hMCx0LmNoYXJDb2RlQXQoYSk9PT1PYSYmKythO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gdT0hMCx0LnNsaWNlKGksbyl9Zm9yKHQuY2hhckNvZGVBdChvLTEpPT09T2EmJi0tbyx0LmNoYXJDb2RlQXQoby0xKT09PVRhJiYtLW87KHI9bCgpKSE9PUVhOyl7Zm9yKHZhciBmPVtdO3IhPT1TYSYmciE9PUVhOylmLnB1c2gocikscj1sKCk7ZSYmbnVsbD09KGY9ZShmLHMrKykpfHxpLnB1c2goZil9cmV0dXJuIGl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOmUudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LGUpe3ZhciBuLGksbz1yKHQsZnVuY3Rpb24odCxyKXtpZihuKXJldHVybiBuKHQsci0xKTtpPXQsbj1lP2Z1bmN0aW9uKHQsZSl7dmFyIG49a2EodCk7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIGUobihyKSxpLHQpfX0odCxlKTprYSh0KX0pO3JldHVybiBvLmNvbHVtbnM9aXx8W10sb30scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gZXx8bi5wdXNoKGVbcl09cil9KSxufShlKSksW24ubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGkpLmpvaW4oIlxuIil9fX0samE9QWEoIiwiKSxJYT1qYS5wYXJzZSxNYT1qYS5wYXJzZVJvd3MsUGE9amEuZm9ybWF0LE5hPWphLmZvcm1hdFJvd3MsUmE9QWEoIlx0IiksRGE9UmEucGFyc2UsRmE9UmEucGFyc2VSb3dzLExhPVJhLmZvcm1hdCxWYT1SYS5mb3JtYXRSb3dzO2Z1bmN0aW9uIHphKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5ibG9iKCl9dmFyIEJhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbih6YSl9O2Z1bmN0aW9uIFVhKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC5hcnJheUJ1ZmZlcigpfXZhciBIYT1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oVWEpfTtmdW5jdGlvbiBxYSh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQudGV4dCgpfXZhciBHYT1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4ocWEpfTtmdW5jdGlvbiBXYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApLEdhKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSl9fWZ1bmN0aW9uIFFhKHQsZSxuLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dmFyIGk9QWEodCk7cmV0dXJuIEdhKGUsbikudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gaS5wYXJzZSh0LHIpfSl9dmFyIFlhPVdhKElhKSxLYT1XYShEYSksWmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obixyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBvIGluIGUpaVtvXT1lW29dO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7bihpKX0saS5zcmM9dH0pfTtmdW5jdGlvbiBYYSh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuanNvbigpfXZhciAkYT1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oWGEpfTtmdW5jdGlvbiBKYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gR2EoZSxuKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybihuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSx0KX0pfX12YXIgdHM9SmEoImFwcGxpY2F0aW9uL3htbCIpLGVzPUphKCJ0ZXh0L2h0bWwiKSxucz1KYSgiaW1hZ2Uvc3ZnK3htbCIpLHJzPWZ1bmN0aW9uKHQsZSl7dmFyIG47ZnVuY3Rpb24gcigpe3ZhciByLGksbz1uLmxlbmd0aCxhPTAscz0wO2ZvcihyPTA7cjxvOysrcilhKz0oaT1uW3JdKS54LHMrPWkueTtmb3IoYT1hL28tdCxzPXMvby1lLHI9MDtyPG87KytyKShpPW5bcl0pLngtPWEsaS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LGlzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sb3M9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIGFzKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxvLGEscyx1LGMsbCxmLGgsZD10Ll9yb290LHA9e2RhdGE6cn0sbT10Ll94MCx5PXQuX3kwLHY9dC5feDEsZz10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKGM9ZT49KG89KG0rdikvMikpP209bzp2PW8sKGw9bj49KGE9KHkrZykvMikpP3k9YTpnPWEsaT1kLCEoZD1kW2Y9bDw8MXxjXSkpcmV0dXJuIGlbZl09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksdT0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PXUpcmV0dXJuIHAubmV4dD1kLGk/aVtmXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0obz0obSt2KS8yKSk/bT1vOnY9bywobD1uPj0oYT0oeStnKS8yKSk/eT1hOmc9YX13aGlsZSgoZj1sPDwxfGMpPT0oaD0odT49YSk8PDF8cz49bykpO3JldHVybiBpW2hdPWQsaVtmXT1wLHR9dmFyIHNzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiB1cyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBjcyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBscyh0LGUsbil7dmFyIHI9bmV3IGZzKG51bGw9PWU/dXM6ZSxudWxsPT1uP2NzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIGZzKHQsZSxuLHIsaSxvKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gaHModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBkcz1scy5wcm90b3R5cGU9ZnMucHJvdG90eXBlO2Z1bmN0aW9uIHBzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBtcyh0KXtyZXR1cm4gdC55K3Qudnl9ZHMuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgZnModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PWhzKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09aHMoZSkpO3JldHVybiBufSxkcy5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBhcyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxkcy5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbz10Lmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSx1PTEvMCxjPTEvMCxsPS0xLzAsZj0tMS8wO2ZvcihuPTA7bjxvOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwoYVtuXT1yLHNbbl09aSxyPHUmJih1PXIpLHI+bCYmKGw9ciksaTxjJiYoYz1pKSxpPmYmJihmPWkpKTtmb3IobDx1JiYodT10aGlzLl94MCxsPXRoaXMuX3gxKSxmPGMmJihjPXRoaXMuX3kwLGY9dGhpcy5feTEpLHRoaXMuY292ZXIodSxjKS5jb3ZlcihsLGYpLG49MDtuPG87KytuKWFzKHRoaXMsYVtuXSxzW25dLHRbbl0pO3JldHVybiB0aGlzfSxkcy5jb3Zlcj1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihuKSlpPShuPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShuPnR8fHQ+aXx8cj5lfHxlPm8pKXJldHVybiB0aGlzO3ZhciBhLHMsdT1pLW4sYz10aGlzLl9yb290O3N3aXRjaChzPShlPChyK28pLzIpPDwxfHQ8KG4raSkvMil7Y2FzZSAwOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUobz1yKyh1Kj0yKSx0PihpPW4rdSl8fGU+byk7YnJlYWs7Y2FzZSAxOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUobz1yKyh1Kj0yKSwobj1pLXUpPnR8fGU+byk7YnJlYWs7Y2FzZSAyOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUocj1vLSh1Kj0yKSx0PihpPW4rdSl8fHI+ZSk7YnJlYWs7Y2FzZSAzOmRveyhhPW5ldyBBcnJheSg0KSlbc109YyxjPWF9d2hpbGUocj1vLSh1Kj0yKSwobj1pLXUpPnR8fHI+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LGRzLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sZHMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxkcy5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLG8sYSxzLHUsYyxsPXRoaXMuX3gwLGY9dGhpcy5feTAsaD10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10sbT10aGlzLl9yb290O2ZvcihtJiZwLnB1c2gobmV3IHNzKG0sbCxmLGgsZCkpLG51bGw9PW4/bj0xLzA6KGw9dC1uLGY9ZS1uLGg9dCtuLGQ9ZStuLG4qPW4pO3U9cC5wb3AoKTspaWYoISghKG09dS5ub2RlKXx8KGk9dS54MCk+aHx8KG89dS55MCk+ZHx8KGE9dS54MSk8bHx8KHM9dS55MSk8ZikpaWYobS5sZW5ndGgpe3ZhciB5PShpK2EpLzIsdj0obytzKS8yO3AucHVzaChuZXcgc3MobVszXSx5LHYsYSxzKSxuZXcgc3MobVsyXSxpLHYseSxzKSxuZXcgc3MobVsxXSx5LG8sYSx2KSxuZXcgc3MobVswXSxpLG8seSx2KSksKGM9KGU+PXYpPDwxfHQ+PXkpJiYodT1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLWNdLHBbcC5sZW5ndGgtMS1jXT11KX1lbHNle3ZhciBnPXQtK3RoaXMuX3guY2FsbChudWxsLG0uZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxtLmRhdGEpLF89ZypnK2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2w9dC13LGY9ZS13LGg9dCt3LGQ9ZSt3LHI9bS5kYXRhfX1yZXR1cm4gcn0sZHMucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4oYT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLG8sYSxzLHUsYyxsLGYsaCxkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxtPXRoaXMuX3kwLHk9dGhpcy5feDEsdj10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKChjPW8+PShzPShwK3kpLzIpKT9wPXM6eT1zLChsPWE+PSh1PShtK3YpLzIpKT9tPXU6dj11LGU9ZCwhKGQ9ZFtmPWw8PDF8Y10pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtmKzEmM118fGVbZisyJjNdfHxlW2YrMyYzXSkmJihuPWUsaD1mKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbZl09aTpkZWxldGUgZVtmXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2hdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxkcy5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxkcy5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGRzLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0sZHMudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHM9W10sdT10aGlzLl9yb290O2Zvcih1JiZzLnB1c2gobmV3IHNzKHUsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPXMucG9wKCk7KWlmKCF0KHU9ZS5ub2RlLHI9ZS54MCxpPWUueTAsbz1lLngxLGE9ZS55MSkmJnUubGVuZ3RoKXt2YXIgYz0ocitvKS8yLGw9KGkrYSkvMjsobj11WzNdKSYmcy5wdXNoKG5ldyBzcyhuLGMsbCxvLGEpKSwobj11WzJdKSYmcy5wdXNoKG5ldyBzcyhuLHIsbCxjLGEpKSwobj11WzFdKSYmcy5wdXNoKG5ldyBzcyhuLGMsaSxvLGwpKSwobj11WzBdKSYmcy5wdXNoKG5ldyBzcyhuLHIsaSxjLGwpKX1yZXR1cm4gdGhpc30sZHMudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgc3ModGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bi5wb3AoKTspe3ZhciBpPWUubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1lLngwLHM9ZS55MCx1PWUueDEsYz1lLnkxLGw9KGErdSkvMixmPShzK2MpLzI7KG89aVswXSkmJm4ucHVzaChuZXcgc3MobyxhLHMsbCxmKSksKG89aVsxXSkmJm4ucHVzaChuZXcgc3MobyxsLHMsdSxmKSksKG89aVsyXSkmJm4ucHVzaChuZXcgc3MobyxhLGYsbCxjKSksKG89aVszXSkmJm4ucHVzaChuZXcgc3MobyxsLGYsdSxjKSl9ci5wdXNoKGUpfWZvcig7ZT1yLnBvcCgpOyl0KGUubm9kZSxlLngwLGUueTAsZS54MSxlLnkxKTtyZXR1cm4gdGhpc30sZHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGRzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fTt2YXIgeXM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPTEsaT0xO2Z1bmN0aW9uIG8oKXtmb3IodmFyIHQsbyxzLHUsYyxsLGYsaD1lLmxlbmd0aCxkPTA7ZDxpOysrZClmb3Iobz1scyhlLHBzLG1zKS52aXNpdEFmdGVyKGEpLHQ9MDt0PGg7Kyt0KWY9KGw9blsocz1lW3RdKS5pbmRleF0pKmwsdT1zLngrcy52eCxjPXMueStzLnZ5LG8udmlzaXQocCk7ZnVuY3Rpb24gcCh0LGUsbixpLG8pe3ZhciBhPXQuZGF0YSxoPXQucixkPWwraDtpZighYSlyZXR1cm4gZT51K2R8fGk8dS1kfHxuPmMrZHx8bzxjLWQ7aWYoYS5pbmRleD5zLmluZGV4KXt2YXIgcD11LWEueC1hLnZ4LG09Yy1hLnktYS52eSx5PXAqcCttKm07eTxkKmQmJigwPT09cCYmKHkrPShwPW9zKCkpKnApLDA9PT1tJiYoeSs9KG09b3MoKSkqbSkseT0oZC0oeT1NYXRoLnNxcnQoeSkpKS95KnIscy52eCs9KHAqPXkpKihkPShoKj1oKS8oZitoKSkscy52eSs9KG0qPXkpKmQsYS52eC09cCooZD0xLWQpLGEudnktPW0qZCl9fX1mdW5jdGlvbiBhKHQpe2lmKHQuZGF0YSlyZXR1cm4gdC5yPW5bdC5kYXRhLmluZGV4XTtmb3IodmFyIGU9dC5yPTA7ZTw0OysrZSl0W2VdJiZ0W2VdLnI+dC5yJiYodC5yPXRbZV0ucil9ZnVuY3Rpb24gcygpe2lmKGUpe3ZhciByLGksbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj0wO3I8bzsrK3IpblsoaT1lW3JdKS5pbmRleF09K3QoaSxyLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aXMobnVsbD09dD8xOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LG8pOnJ9LG8ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6aXMoK2UpLHMoKSxvKTp0fSxvfTtmdW5jdGlvbiB2cyh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBncyh0LGUpe3ZhciBuPXQuZ2V0KGUpO2lmKCFuKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gbn12YXIgYnM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhPXZzLHM9ZnVuY3Rpb24odCl7cmV0dXJuIDEvTWF0aC5taW4oaVt0LnNvdXJjZS5pbmRleF0saVt0LnRhcmdldC5pbmRleF0pfSx1PWlzKDMwKSxjPTE7ZnVuY3Rpb24gbChyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8YzsrK2kpZm9yKHZhciBzLHUsbCxmLGgsZCxwLG09MDttPGE7KyttKWY9KGw9KHM9dFttXSkudGFyZ2V0KS54K2wudngtKHU9cy5zb3VyY2UpLngtdS52eHx8b3MoKSxoPWwueStsLnZ5LXUueS11LnZ5fHxvcygpLGgqPWQ9KChkPU1hdGguc3FydChmKmYraCpoKSktblttXSkvZCpyKmVbbV0sbC52eC09KGYqPWQpKihwPW9bbV0pLGwudnktPWgqcCx1LnZ4Kz1mKihwPTEtcCksdS52eSs9aCpwfWZ1bmN0aW9uIGYoKXtpZihyKXt2YXIgcyx1LGM9ci5sZW5ndGgsbD10Lmxlbmd0aCxmPUtvKHIsYSk7Zm9yKHM9MCxpPW5ldyBBcnJheShjKTtzPGw7KytzKSh1PXRbc10pLmluZGV4PXMsIm9iamVjdCIhPXR5cGVvZiB1LnNvdXJjZSYmKHUuc291cmNlPWdzKGYsdS5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIHUudGFyZ2V0JiYodS50YXJnZXQ9Z3MoZix1LnRhcmdldCkpLGlbdS5zb3VyY2UuaW5kZXhdPShpW3Uuc291cmNlLmluZGV4XXx8MCkrMSxpW3UudGFyZ2V0LmluZGV4XT0oaVt1LnRhcmdldC5pbmRleF18fDApKzE7Zm9yKHM9MCxvPW5ldyBBcnJheShsKTtzPGw7KytzKW9bc109aVsodT10W3NdKS5zb3VyY2UuaW5kZXhdLyhpW3Uuc291cmNlLmluZGV4XStpW3UudGFyZ2V0LmluZGV4XSk7ZT1uZXcgQXJyYXkobCksaCgpLG49bmV3IEFycmF5KGwpLGQoKX19ZnVuY3Rpb24gaCgpe2lmKHIpZm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWVbbl09K3ModFtuXSxuLHQpfWZ1bmN0aW9uIGQoKXtpZihyKWZvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSluW2VdPSt1KHRbZV0sZSx0KX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGwuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZigpfSxsLmxpbmtzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsZigpLGwpOnR9LGwuaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxsKTphfSxsLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCk6Y30sbC5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlzKCt0KSxoKCksbCk6c30sbC5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlzKCt0KSxkKCksbCk6dX0sbH07ZnVuY3Rpb24gX3ModCl7cmV0dXJuIHQueH1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gdC55fXZhciB4cz0xMCxTcz1NYXRoLlBJKigzLU1hdGguc3FydCg1KSksRXM9ZnVuY3Rpb24odCl7dmFyIGUsbj0xLHI9LjAwMSxpPTEtTWF0aC5wb3cociwxLzMwMCksbz0wLGE9LjYscz1LbygpLHU9UHIobCksYz1odCgidGljayIsImVuZCIpO2Z1bmN0aW9uIGwoKXtmKCksYy5jYWxsKCJ0aWNrIixlKSxuPHImJih1LnN0b3AoKSxjLmNhbGwoImVuZCIsZSkpfWZ1bmN0aW9uIGYoKXt2YXIgZSxyLHU9dC5sZW5ndGg7Zm9yKG4rPShvLW4pKmkscy5lYWNoKGZ1bmN0aW9uKHQpe3Qobil9KSxlPTA7ZTx1OysrZSludWxsPT0ocj10W2VdKS5meD9yLngrPXIudngqPWE6KHIueD1yLmZ4LHIudng9MCksbnVsbD09ci5meT9yLnkrPXIudnkqPWE6KHIueT1yLmZ5LHIudnk9MCl9ZnVuY3Rpb24gaCgpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLGlzTmFOKGUueCl8fGlzTmFOKGUueSkpe3ZhciBpPXhzKk1hdGguc3FydChuKSxvPW4qU3M7ZS54PWkqTWF0aC5jb3MobyksZS55PWkqTWF0aC5zaW4obyl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxoKCksZT17dGljazpmLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5yZXN0YXJ0KGwpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdS5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixoKCkscy5lYWNoKGQpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUpOnJ9LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsZSk6K2l9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS10LGUpOjEtYX0sZm9yY2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1uP3MucmVtb3ZlKHQpOnMuc2V0KHQsZChuKSksZSk6cy5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYSxzLHUsYz0wLGw9dC5sZW5ndGg7Zm9yKG51bGw9PXI/cj0xLzA6cio9cixjPTA7YzxsOysrYykoYT0oaT1lLShzPXRbY10pLngpKmkrKG89bi1zLnkpKm8pPHImJih1PXMscj1hKTtyZXR1cm4gdX0sb246ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKHQsbiksZSk6Yy5vbih0KX19fSxDcz1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGk9aXMoLTMwKSxvPTEsYT0xLzAscz0uODE7ZnVuY3Rpb24gdShyKXt2YXIgaSxvPXQubGVuZ3RoLGE9bHModCxfcyx3cykudmlzaXRBZnRlcihsKTtmb3Iobj1yLGk9MDtpPG87KytpKWU9dFtpXSxhLnZpc2l0KGYpfWZ1bmN0aW9uIGMoKXtpZih0KXt2YXIgZSxuLG89dC5sZW5ndGg7Zm9yKHI9bmV3IEFycmF5KG8pLGU9MDtlPG87KytlKXJbKG49dFtlXSkuaW5kZXhdPStpKG4sZSx0KX19ZnVuY3Rpb24gbCh0KXt2YXIgZSxuLGksbyxhLHM9MCx1PTA7aWYodC5sZW5ndGgpe2ZvcihpPW89YT0wO2E8NDsrK2EpKGU9dFthXSkmJihuPU1hdGguYWJzKGUudmFsdWUpKSYmKHMrPWUudmFsdWUsdSs9bixpKz1uKmUueCxvKz1uKmUueSk7dC54PWkvdSx0Lnk9by91fWVsc2V7KGU9dCkueD1lLmRhdGEueCxlLnk9ZS5kYXRhLnk7ZG97cys9cltlLmRhdGEuaW5kZXhdfXdoaWxlKGU9ZS5uZXh0KX10LnZhbHVlPXN9ZnVuY3Rpb24gZih0LGksdSxjKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgbD10LngtZS54LGY9dC55LWUueSxoPWMtaSxkPWwqbCtmKmY7aWYoaCpoL3M8ZClyZXR1cm4gZDxhJiYoMD09PWwmJihkKz0obD1vcygpKSpsKSwwPT09ZiYmKGQrPShmPW9zKCkpKmYpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpLGUudngrPWwqdC52YWx1ZSpuL2QsZS52eSs9Zip0LnZhbHVlKm4vZCksITA7aWYoISh0Lmxlbmd0aHx8ZD49YSkpeyh0LmRhdGEhPT1lfHx0Lm5leHQpJiYoMD09PWwmJihkKz0obD1vcygpKSpsKSwwPT09ZiYmKGQrPShmPW9zKCkpKmYpLGQ8byYmKGQ9TWF0aC5zcXJ0KG8qZCkpKTtkb3t0LmRhdGEhPT1lJiYoZS52eCs9bCooaD1yW3QuZGF0YS5pbmRleF0qbi9kKSxlLnZ5Kz1mKmgpfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHUuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsYygpfSx1LnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aXMoK3QpLGMoKSx1KTppfSx1LmRpc3RhbmNlTWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCx1KTpNYXRoLnNxcnQobyl9LHUuZGlzdGFuY2VNYXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LHUpOk1hdGguc3FydChhKX0sdS50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10KnQsdSk6TWF0aC5zcXJ0KHMpfSx1fSxPcz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxvLGE9aXMoLjEpO2Z1bmN0aW9uIHModCl7Zm9yKHZhciBhPTAscz1yLmxlbmd0aDthPHM7KythKXt2YXIgdT1yW2FdLGM9dS54LWV8fDFlLTYsbD11Lnktbnx8MWUtNixmPU1hdGguc3FydChjKmMrbCpsKSxoPShvW2FdLWYpKmlbYV0qdC9mO3UudngrPWMqaCx1LnZ5Kz1sKmh9fWZ1bmN0aW9uIHUoKXtpZihyKXt2YXIgZSxuPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlvW2VdPSt0KHJbZV0sZSxyKSxpW2VdPWlzTmFOKG9bZV0pPzA6K2EocltlXSxlLHIpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9aXMoK3QpKSxudWxsPT1lJiYoZT0wKSxudWxsPT1uJiYobj0wKSxzLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LHUoKX0scy5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlzKCt0KSx1KCkscyk6YX0scy5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppcygrZSksdSgpLHMpOnR9LHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxzKTplfSxzLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qscyk6bn0sc30sVHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9aXMoLjEpO2Z1bmN0aW9uIG8odCl7Zm9yKHZhciBpLG89MCxhPWUubGVuZ3RoO288YTsrK28pKGk9ZVtvXSkudngrPShyW29dLWkueCkqbltvXSp0fWZ1bmN0aW9uIGEoKXtpZihlKXt2YXIgbyxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPW5ldyBBcnJheShhKSxvPTA7bzxhOysrbyluW29dPWlzTmFOKHJbb109K3QoZVtvXSxvLGUpKT8wOitpKGVbb10sbyxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWlzKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aXMoK3QpLGEoKSxvKTppfSxvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppcygrZSksYSgpLG8pOnR9LG99LGtzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpPWlzKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShpPWVbb10pLnZ5Kz0ocltvXS1pLnkpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSkscj1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihyW29dPSt0KGVbb10sbyxlKSk/MDoraShlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1pcyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlzKCt0KSxhKCksbyk6aX0sby55PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6aXMoK2UpLGEoKSxvKTp0fSxvfSxBcz1mdW5jdGlvbih0LGUpe2lmKChuPSh0PWU/dC50b0V4cG9uZW50aWFsKGUtMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgbixyPXQuc2xpY2UoMCxuKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShuKzEpXX0sanM9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9QXMoTWF0aC5hYnModCkpKT90WzFdOk5hTn0sSXM9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIE1zKHQpe3JldHVybiBuZXcgUHModCl9ZnVuY3Rpb24gUHModCl7aWYoIShlPUlzLmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIGU7dGhpcy5maWxsPWVbMV18fCIgIix0aGlzLmFsaWduPWVbMl18fCI+Iix0aGlzLnNpZ249ZVszXXx8Ii0iLHRoaXMuc3ltYm9sPWVbNF18fCIiLHRoaXMuemVybz0hIWVbNV0sdGhpcy53aWR0aD1lWzZdJiYrZVs2XSx0aGlzLmNvbW1hPSEhZVs3XSx0aGlzLnByZWNpc2lvbj1lWzhdJiYrZVs4XS5zbGljZSgxKSx0aGlzLnRyaW09ISFlWzldLHRoaXMudHlwZT1lWzEwXXx8IiJ9TXMucHJvdG90eXBlPVBzLnByb3RvdHlwZSxQcy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgTnMsUnMsRHMsRnMsTHM9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKGk+MCl7aWYoISt0W3JdKWJyZWFrIHQ7aT0wfX1yZXR1cm4gaT4wP3Quc2xpY2UoMCxpKSt0LnNsaWNlKGUrMSk6dH0sVnM9ZnVuY3Rpb24odCxlKXt2YXIgbj1Bcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSx6cz17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gVnMoMTAwKnQsZSl9LHI6VnMsczpmdW5jdGlvbih0LGUpe3ZhciBuPUFzKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sbz1pLShOcz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsYT1yLmxlbmd0aDtyZXR1cm4gbz09PWE/cjpvPmE/cituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK0FzKHQsTWF0aC5tYXgoMCxlK28tMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LEJzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxVcz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXSxIcz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/KGU9dC5ncm91cGluZyxuPXQudGhvdXNhbmRzLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBpPXQubGVuZ3RoLG89W10sYT0wLHM9ZVswXSx1PTA7aT4wJiZzPjAmJih1K3MrMT5yJiYocz1NYXRoLm1heCgxLHItdSkpLG8ucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKHUrPXMrMSk+cikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9KTpCcyxpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsYT10Lm51bWVyYWxzP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pfX0odC5udW1lcmFscyk6QnMscz10LnBlcmNlbnR8fCIlIjtmdW5jdGlvbiB1KHQpe3ZhciBlPSh0PU1zKHQpKS5maWxsLG49dC5hbGlnbix1PXQuc2lnbixjPXQuc3ltYm9sLGw9dC56ZXJvLGY9dC53aWR0aCxoPXQuY29tbWEsZD10LnByZWNpc2lvbixwPXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyhoPSEwLG09ImciKTp6c1ttXXx8KG51bGw9PWQmJihkPTEyKSxwPSEwLG09ImciKSwobHx8IjAiPT09ZSYmIj0iPT09bikmJihsPSEwLGU9IjAiLG49Ij0iKTt2YXIgeT0iJCI9PT1jP2lbMF06IiMiPT09YyYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLHY9IiQiPT09Yz9pWzFdOi9bJXBdLy50ZXN0KG0pP3M6IiIsZz16c1ttXSxiPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIF8odCl7dmFyIGkscyxjLF89eSx3PXY7aWYoImMiPT09bSl3PWcodCkrdyx0PSIiO2Vsc2V7dmFyIHg9KHQ9K3QpPDA7aWYodD1nKE1hdGguYWJzKHQpLGQpLHAmJih0PUxzKHQpKSx4JiYwPT0rdCYmKHg9ITEpLF89KHg/IigiPT09dT91OiItIjoiLSI9PT11fHwiKCI9PT11PyIiOnUpK18sdz0oInMiPT09bT9Vc1s4K05zLzNdOiIiKSt3Kyh4JiYiKCI9PT11PyIpIjoiIiksYilmb3IoaT0tMSxzPXQubGVuZ3RoOysraTxzOylpZig0OD4oYz10LmNoYXJDb2RlQXQoaSkpfHxjPjU3KXt3PSg0Nj09PWM/byt0LnNsaWNlKGkrMSk6dC5zbGljZShpKSkrdyx0PXQuc2xpY2UoMCxpKTticmVha319aCYmIWwmJih0PXIodCwxLzApKTt2YXIgUz1fLmxlbmd0aCt0Lmxlbmd0aCt3Lmxlbmd0aCxFPVM8Zj9uZXcgQXJyYXkoZi1TKzEpLmpvaW4oZSk6IiI7c3dpdGNoKGgmJmwmJih0PXIoRSt0LEUubGVuZ3RoP2Ytdy5sZW5ndGg6MS8wKSxFPSIiKSxuKXtjYXNlIjwiOnQ9Xyt0K3crRTticmVhaztjYXNlIj0iOnQ9XytFK3QrdzticmVhaztjYXNlIl4iOnQ9RS5zbGljZSgwLFM9RS5sZW5ndGg+PjEpK18rdCt3K0Uuc2xpY2UoUyk7YnJlYWs7ZGVmYXVsdDp0PUUrXyt0K3d9cmV0dXJuIGEodCl9cmV0dXJuIGQ9bnVsbD09ZD82Oi9bZ3Byc10vLnRlc3QobSk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxkKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxkKSksXy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxffXJldHVybntmb3JtYXQ6dSxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24odCxlKXt2YXIgbj11KCgodD1Ncyh0KSkudHlwZT0iZiIsdCkpLHI9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoanMoZSkvMykpKSxpPU1hdGgucG93KDEwLC1yKSxvPVVzWzgrci8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4oaSp0KStvfX19fTtmdW5jdGlvbiBxcyh0KXtyZXR1cm4gUnM9SHModCksRHM9UnMuZm9ybWF0LEZzPVJzLmZvcm1hdFByZWZpeCxSc31xcyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTt2YXIgR3M9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsLWpzKE1hdGguYWJzKHQpKSl9LFdzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoanMoZSkvMykpKS1qcyhNYXRoLmFicyh0KSkpfSxRcz1mdW5jdGlvbih0LGUpe3JldHVybiB0PU1hdGguYWJzKHQpLGU9TWF0aC5hYnMoZSktdCxNYXRoLm1heCgwLGpzKGUpLWpzKHQpKSsxfSxZcz1mdW5jdGlvbigpe3JldHVybiBuZXcgS3N9O2Z1bmN0aW9uIEtzKCl7dGhpcy5yZXNldCgpfUtzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S3MscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXtYcyhacyx0LHRoaXMudCksWHModGhpcyxacy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9WnMudDp0aGlzLnM9WnMudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgWnM9bmV3IEtzO2Z1bmN0aW9uIFhzKHQsZSxuKXt2YXIgcj10LnM9ZStuLGk9ci1lO3QudD1lLShyLWkpKyhuLWkpfXZhciAkcz0xZS02LEpzPU1hdGguUEksdHU9SnMvMixldT1Kcy80LG51PTIqSnMscnU9MTgwL0pzLGl1PUpzLzE4MCxvdT1NYXRoLmFicyxhdT1NYXRoLmF0YW4sc3U9TWF0aC5hdGFuMix1dT1NYXRoLmNvcyxjdT1NYXRoLmNlaWwsbHU9TWF0aC5leHAsZnU9KE1hdGgsTWF0aC5sb2cpLGh1PU1hdGgucG93LGR1PU1hdGguc2luLHB1PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxtdT1NYXRoLnNxcnQseXU9TWF0aC50YW47ZnVuY3Rpb24gdnUodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/SnM6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIGd1KHQpe3JldHVybiB0PjE/dHU6dDwtMT8tdHU6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGJ1KHQpe3JldHVybih0PWR1KHQvMikpKnR9ZnVuY3Rpb24gX3UoKXt9ZnVuY3Rpb24gd3UodCxlKXt0JiZTdS5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZTdVt0LnR5cGVdKHQsZSl9dmFyIHh1PXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7d3UodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KXd1KG5bcl0uZ2VvbWV0cnksZSl9fSxTdT17U3BoZXJlOmZ1bmN0aW9uKHQsZSl7ZS5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtlLnBvaW50KCh0PXQuY29vcmRpbmF0ZXMpWzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUucG9pbnQoKHQ9bltyXSlbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe0V1KHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylFdShuW3JdLGUsMCl9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtDdSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUN1KG5bcl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOyl3dShuW3JdLGUpfX07ZnVuY3Rpb24gRXUodCxlLG4pe3ZhciByLGk9LTEsbz10Lmxlbmd0aC1uO2ZvcihlLmxpbmVTdGFydCgpOysraTxvOyllLnBvaW50KChyPXRbaV0pWzBdLHJbMV0sclsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gQ3UodCxlKXt2YXIgbj0tMSxyPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrbjxyOylFdSh0W25dLGUsMSk7ZS5wb2x5Z29uRW5kKCl9dmFyIE91LFR1LGt1LEF1LGp1LEl1PWZ1bmN0aW9uKHQsZSl7dCYmeHUuaGFzT3duUHJvcGVydHkodC50eXBlKT94dVt0LnR5cGVdKHQsZSk6d3UodCxlKX0sTXU9WXMoKSxQdT1ZcygpLE51PXtwb2ludDpfdSxsaW5lU3RhcnQ6X3UsbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtNdS5yZXNldCgpLE51LmxpbmVTdGFydD1SdSxOdS5saW5lRW5kPUR1fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K011O1B1LmFkZCh0PDA/bnUrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1fdX0sc3BoZXJlOmZ1bmN0aW9uKCl7UHUuYWRkKG51KX19O2Z1bmN0aW9uIFJ1KCl7TnUucG9pbnQ9RnV9ZnVuY3Rpb24gRHUoKXtMdShPdSxUdSl9ZnVuY3Rpb24gRnUodCxlKXtOdS5wb2ludD1MdSxPdT10LFR1PWUsa3U9dCo9aXUsQXU9dXUoZT0oZSo9aXUpLzIrZXUpLGp1PWR1KGUpfWZ1bmN0aW9uIEx1KHQsZSl7ZT0oZSo9aXUpLzIrZXU7dmFyIG49KHQqPWl1KS1rdSxyPW4+PTA/MTotMSxpPXIqbixvPXV1KGUpLGE9ZHUoZSkscz1qdSphLHU9QXUqbytzKnV1KGkpLGM9cypyKmR1KGkpO011LmFkZChzdShjLHUpKSxrdT10LEF1PW8sanU9YX12YXIgVnU9ZnVuY3Rpb24odCl7cmV0dXJuIFB1LnJlc2V0KCksSXUodCxOdSksMipQdX07ZnVuY3Rpb24genUodCl7cmV0dXJuW3N1KHRbMV0sdFswXSksZ3UodFsyXSldfWZ1bmN0aW9uIEJ1KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9dXUobik7cmV0dXJuW3IqdXUoZSkscipkdShlKSxkdShuKV19ZnVuY3Rpb24gVXUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSHUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIHF1KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gR3UodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIFd1KHQpe3ZhciBlPW11KHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgUXUsWXUsS3UsWnUsWHUsJHUsSnUsdGMsZWMsbmMscmM9WXMoKSxpYz17cG9pbnQ6b2MsbGluZVN0YXJ0OnNjLGxpbmVFbmQ6dWMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7aWMucG9pbnQ9Y2MsaWMubGluZVN0YXJ0PWxjLGljLmxpbmVFbmQ9ZmMscmMucmVzZXQoKSxOdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe051LnBvbHlnb25FbmQoKSxpYy5wb2ludD1vYyxpYy5saW5lU3RhcnQ9c2MsaWMubGluZUVuZD11YyxNdTwwPyhRdT0tKEt1PTE4MCksWXU9LShadT05MCkpOnJjPiRzP1p1PTkwOnJjPC0kcyYmKFl1PS05MCksbmNbMF09UXUsbmNbMV09S3V9fTtmdW5jdGlvbiBvYyh0LGUpe2VjLnB1c2gobmM9W1F1PXQsS3U9dF0pLGU8WXUmJihZdT1lKSxlPlp1JiYoWnU9ZSl9ZnVuY3Rpb24gYWModCxlKXt2YXIgbj1CdShbdCppdSxlKml1XSk7aWYodGMpe3ZhciByPUh1KHRjLG4pLGk9SHUoW3JbMV0sLXJbMF0sMF0scik7V3UoaSksaT16dShpKTt2YXIgbyxhPXQtWHUscz1hPjA/MTotMSx1PWlbMF0qcnUqcyxjPW91KGEpPjE4MDtjXihzKlh1PHUmJnU8cyp0KT8obz1pWzFdKnJ1KT5adSYmKFp1PW8pOmNeKHMqWHU8KHU9KHUrMzYwKSUzNjAtMTgwKSYmdTxzKnQpPyhvPS1pWzFdKnJ1KTxZdSYmKFl1PW8pOihlPFl1JiYoWXU9ZSksZT5adSYmKFp1PWUpKSxjP3Q8WHU/aGMoUXUsdCk+aGMoUXUsS3UpJiYoS3U9dCk6aGModCxLdSk+aGMoUXUsS3UpJiYoUXU9dCk6S3U+PVF1Pyh0PFF1JiYoUXU9dCksdD5LdSYmKEt1PXQpKTp0Plh1P2hjKFF1LHQpPmhjKFF1LEt1KSYmKEt1PXQpOmhjKHQsS3UpPmhjKFF1LEt1KSYmKFF1PXQpfWVsc2UgZWMucHVzaChuYz1bUXU9dCxLdT10XSk7ZTxZdSYmKFl1PWUpLGU+WnUmJihadT1lKSx0Yz1uLFh1PXR9ZnVuY3Rpb24gc2MoKXtpYy5wb2ludD1hY31mdW5jdGlvbiB1Yygpe25jWzBdPVF1LG5jWzFdPUt1LGljLnBvaW50PW9jLHRjPW51bGx9ZnVuY3Rpb24gY2ModCxlKXtpZih0Yyl7dmFyIG49dC1YdTtyYy5hZGQob3Uobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSAkdT10LEp1PWU7TnUucG9pbnQodCxlKSxhYyh0LGUpfWZ1bmN0aW9uIGxjKCl7TnUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZmMoKXtjYygkdSxKdSksTnUubGluZUVuZCgpLG91KHJjKT4kcyYmKFF1PS0oS3U9MTgwKSksbmNbMF09UXUsbmNbMV09S3UsdGM9bnVsbH1mdW5jdGlvbiBoYyh0LGUpe3JldHVybihlLT10KTwwP2UrMzYwOmV9ZnVuY3Rpb24gZGModCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHBjKHQsZSl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9ZSYmZTw9dFsxXTplPHRbMF18fHRbMV08ZX12YXIgbWMseWMsdmMsZ2MsYmMsX2Msd2MseGMsU2MsRWMsQ2MsT2MsVGMsa2MsQWMsamMsSWM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHM7aWYoWnU9S3U9LShRdT1ZdT0xLzApLGVjPVtdLEl1KHQsaWMpLG49ZWMubGVuZ3RoKXtmb3IoZWMuc29ydChkYyksZT0xLG89W3I9ZWNbMF1dO2U8bjsrK2UpcGMociwoaT1lY1tlXSlbMF0pfHxwYyhyLGlbMV0pPyhoYyhyWzBdLGlbMV0pPmhjKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLGhjKGlbMF0sclsxXSk+aGMoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOm8ucHVzaChyPWkpO2ZvcihhPS0xLzAsZT0wLHI9b1tuPW8ubGVuZ3RoLTFdO2U8PW47cj1pLCsrZSkocz1oYyhyWzFdLChpPW9bZV0pWzBdKSk+YSYmKGE9cyxRdT1pWzBdLEt1PXJbMV0pfXJldHVybiBlYz1uYz1udWxsLFF1PT09MS8wfHxZdT09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tRdSxZdV0sW0t1LFp1XV19LE1jPXtzcGhlcmU6X3UscG9pbnQ6UGMsbGluZVN0YXJ0OlJjLGxpbmVFbmQ6TGMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TWMubGluZVN0YXJ0PVZjLE1jLmxpbmVFbmQ9emN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtNYy5saW5lU3RhcnQ9UmMsTWMubGluZUVuZD1MY319O2Z1bmN0aW9uIFBjKHQsZSl7dCo9aXU7dmFyIG49dXUoZSo9aXUpO05jKG4qdXUodCksbipkdSh0KSxkdShlKSl9ZnVuY3Rpb24gTmModCxlLG4pe3ZjKz0odC12YykvKyttYyxnYys9KGUtZ2MpL21jLGJjKz0obi1iYykvbWN9ZnVuY3Rpb24gUmMoKXtNYy5wb2ludD1EY31mdW5jdGlvbiBEYyh0LGUpe3QqPWl1O3ZhciBuPXV1KGUqPWl1KTtrYz1uKnV1KHQpLEFjPW4qZHUodCksamM9ZHUoZSksTWMucG9pbnQ9RmMsTmMoa2MsQWMsamMpfWZ1bmN0aW9uIEZjKHQsZSl7dCo9aXU7dmFyIG49dXUoZSo9aXUpLHI9bip1dSh0KSxpPW4qZHUodCksbz1kdShlKSxhPXN1KG11KChhPUFjKm8tamMqaSkqYSsoYT1qYypyLWtjKm8pKmErKGE9a2MqaS1BYypyKSphKSxrYypyK0FjKmkramMqbyk7eWMrPWEsX2MrPWEqKGtjKyhrYz1yKSksd2MrPWEqKEFjKyhBYz1pKSkseGMrPWEqKGpjKyhqYz1vKSksTmMoa2MsQWMsamMpfWZ1bmN0aW9uIExjKCl7TWMucG9pbnQ9UGN9ZnVuY3Rpb24gVmMoKXtNYy5wb2ludD1CY31mdW5jdGlvbiB6Yygpe1VjKE9jLFRjKSxNYy5wb2ludD1QY31mdW5jdGlvbiBCYyh0LGUpe09jPXQsVGM9ZSx0Kj1pdSxlKj1pdSxNYy5wb2ludD1VYzt2YXIgbj11dShlKTtrYz1uKnV1KHQpLEFjPW4qZHUodCksamM9ZHUoZSksTmMoa2MsQWMsamMpfWZ1bmN0aW9uIFVjKHQsZSl7dCo9aXU7dmFyIG49dXUoZSo9aXUpLHI9bip1dSh0KSxpPW4qZHUodCksbz1kdShlKSxhPUFjKm8tamMqaSxzPWpjKnIta2Mqbyx1PWtjKmktQWMqcixjPW11KGEqYStzKnMrdSp1KSxsPWd1KGMpLGY9YyYmLWwvYztTYys9ZiphLEVjKz1mKnMsQ2MrPWYqdSx5Yys9bCxfYys9bCooa2MrKGtjPXIpKSx3Yys9bCooQWMrKEFjPWkpKSx4Yys9bCooamMrKGpjPW8pKSxOYyhrYyxBYyxqYyl9dmFyIEhjPWZ1bmN0aW9uKHQpe21jPXljPXZjPWdjPWJjPV9jPXdjPXhjPVNjPUVjPUNjPTAsSXUodCxNYyk7dmFyIGU9U2Msbj1FYyxyPUNjLGk9ZSplK24qbityKnI7cmV0dXJuIGk8MWUtMTImJihlPV9jLG49d2Mscj14Yyx5YzwkcyYmKGU9dmMsbj1nYyxyPWJjKSwoaT1lKmUrbipuK3Iqcik8MWUtMTIpP1tOYU4sTmFOXTpbc3UobixlKSpydSxndShyL211KGkpKSpydV19LHFjPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sR2M9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuIG49dChuLHIpLGUoblswXSxuWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYobi5pbnZlcnQ9ZnVuY3Rpb24obixyKXtyZXR1cm4obj1lLmludmVydChuLHIpKSYmdC5pbnZlcnQoblswXSxuWzFdKX0pLG59O2Z1bmN0aW9uIFdjKHQsZSl7cmV0dXJuW3Q+SnM/dC1udTp0PC1Kcz90K251OnQsZV19ZnVuY3Rpb24gUWModCxlLG4pe3JldHVybih0JT1udSk/ZXx8bj9HYyhLYyh0KSxaYyhlLG4pKTpLYyh0KTplfHxuP1pjKGUsbik6V2N9ZnVuY3Rpb24gWWModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5Kcz9lLW51OmU8LUpzP2UrbnU6ZSxuXX19ZnVuY3Rpb24gS2ModCl7dmFyIGU9WWModCk7cmV0dXJuIGUuaW52ZXJ0PVljKC10KSxlfWZ1bmN0aW9uIFpjKHQsZSl7dmFyIG49dXUodCkscj1kdSh0KSxpPXV1KGUpLG89ZHUoZSk7ZnVuY3Rpb24gYSh0LGUpe3ZhciBhPXV1KGUpLHM9dXUodCkqYSx1PWR1KHQpKmEsYz1kdShlKSxsPWMqbitzKnI7cmV0dXJuW3N1KHUqaS1sKm8scypuLWMqciksZ3UobCppK3UqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBhPXV1KGUpLHM9dXUodCkqYSx1PWR1KHQpKmEsYz1kdShlKSxsPWMqaS11Km87cmV0dXJuW3N1KHUqaStjKm8scypuK2wqciksZ3UobCpuLXMqcildfSxhfVdjLmludmVydD1XYzt2YXIgWGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qaXUsZVsxXSppdSkpWzBdKj1ydSxlWzFdKj1ydSxlfXJldHVybiB0PVFjKHRbMF0qaXUsdFsxXSppdSx0Lmxlbmd0aD4yP3RbMl0qaXU6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSppdSxlWzFdKml1KSlbMF0qPXJ1LGVbMV0qPXJ1LGV9LGV9O2Z1bmN0aW9uICRjKHQsZSxuLHIsaSxvKXtpZihuKXt2YXIgYT11dShlKSxzPWR1KGUpLHU9cipuO251bGw9PWk/KGk9ZStyKm51LG89ZS11LzIpOihpPUpjKGEsaSksbz1KYyhhLG8pLChyPjA/aTxvOmk+bykmJihpKz1yKm51KSk7Zm9yKHZhciBjLGw9aTtyPjA/bD5vOmw8bztsLT11KWM9enUoW2EsLXMqdXUobCksLXMqZHUobCldKSx0LnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIEpjKHQsZSl7KGU9QnUoZSkpWzBdLT10LFd1KGUpO3ZhciBuPXZ1KC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrbnUtJHMpJW51fXZhciB0bD1mdW5jdGlvbigpe3ZhciB0LGUsbj1xYyhbMCwwXSkscj1xYyg5MCksaT1xYyg2KSxvPXtwb2ludDpmdW5jdGlvbihuLHIpe3QucHVzaChuPWUobixyKSksblswXSo9cnUsblsxXSo9cnV9fTtmdW5jdGlvbiBhKCl7dmFyIGE9bi5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSppdSx1PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpKml1O3JldHVybiB0PVtdLGU9UWMoLWFbMF0qaXUsLWFbMV0qaXUsMCkuaW52ZXJ0LCRjKG8scyx1LDEpLGE9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt0XX0sdD1lPW51bGwsYX1yZXR1cm4gYS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpxYyhbK3RbMF0sK3RbMV1dKSxhKTpufSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFjKCt0KSxhKTpyfSxhLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnFjKCt0KSxhKTppfSxhfSxlbD1mdW5jdGlvbigpe3ZhciB0LGU9W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUsbil7dC5wdXNoKFtlLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOl91LHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fSxubD1mdW5jdGlvbih0LGUpe3JldHVybiBvdSh0WzBdLWVbMF0pPCRzJiZvdSh0WzFdLWVbMV0pPCRzfTtmdW5jdGlvbiBybCh0LGUsbixyKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfXZhciBpbD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscz1bXSx1PVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChlPXQubGVuZ3RoLTEpPD0wKSl7dmFyIGUsbixyPXRbMF0sYT10W2VdO2lmKG5sKHIsYSkpe2ZvcihpLmxpbmVTdGFydCgpLG89MDtvPGU7KytvKWkucG9pbnQoKHI9dFtvXSlbMF0sclsxXSk7aS5saW5lRW5kKCl9ZWxzZSBzLnB1c2gobj1uZXcgcmwocix0LG51bGwsITApKSx1LnB1c2gobi5vPW5ldyBybChyLG51bGwsbiwhMSkpLHMucHVzaChuPW5ldyBybChhLHQsbnVsbCwhMSkpLHUucHVzaChuLm89bmV3IHJsKGEsbnVsbCxuLCEwKSl9fSkscy5sZW5ndGgpe2Zvcih1LnNvcnQoZSksb2wocyksb2wodSksbz0wLGE9dS5sZW5ndGg7bzxhOysrbyl1W29dLmU9bj0hbjtmb3IodmFyIGMsbCxmPXNbMF07Oyl7Zm9yKHZhciBoPWYsZD0hMDtoLnY7KWlmKChoPWgubik9PT1mKXJldHVybjtjPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKGQpZm9yKG89MCxhPWMubGVuZ3RoO288YTsrK28paS5wb2ludCgobD1jW29dKVswXSxsWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihkKWZvcihvPShjPWgucC56KS5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChsPWNbb10pWzBdLGxbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9Yz0oaD1oLm8pLnosZD0hZH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fTtmdW5jdGlvbiBvbCh0KXtpZihlPXQubGVuZ3RoKXtmb3IodmFyIGUsbixyPTAsaT10WzBdOysrcjxlOylpLm49bj10W3JdLG4ucD1pLGk9bjtpLm49bj10WzBdLG4ucD1pfX12YXIgYWw9WXMoKSxzbD1mdW5jdGlvbih0LGUpe3ZhciBuPWVbMF0scj1lWzFdLGk9ZHUociksbz1bZHUobiksLXV1KG4pLDBdLGE9MCxzPTA7YWwucmVzZXQoKSwxPT09aT9yPXR1KyRzOi0xPT09aSYmKHI9LXR1LSRzKTtmb3IodmFyIHU9MCxjPXQubGVuZ3RoO3U8YzsrK3UpaWYoZj0obD10W3VdKS5sZW5ndGgpZm9yKHZhciBsLGYsaD1sW2YtMV0sZD1oWzBdLHA9aFsxXS8yK2V1LG09ZHUocCkseT11dShwKSx2PTA7djxmOysrdixkPWIsbT13LHk9eCxoPWcpe3ZhciBnPWxbdl0sYj1nWzBdLF89Z1sxXS8yK2V1LHc9ZHUoXykseD11dShfKSxTPWItZCxFPVM+PTA/MTotMSxDPUUqUyxPPUM+SnMsVD1tKnc7aWYoYWwuYWRkKHN1KFQqRSpkdShDKSx5KngrVCp1dShDKSkpLGErPU8/UytFKm51OlMsT15kPj1uXmI+PW4pe3ZhciBrPUh1KEJ1KGgpLEJ1KGcpKTtXdShrKTt2YXIgQT1IdShvLGspO1d1KEEpO3ZhciBqPShPXlM+PTA/LTE6MSkqZ3UoQVsyXSk7KHI+anx8cj09PWomJihrWzBdfHxrWzFdKSkmJihzKz1PXlM+PTA/MTotMSl9fXJldHVybihhPC0kc3x8YTwkcyYmYWw8LSRzKV4xJnN9LHVsPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbyxhLHMsdT1lKGkpLGM9ZWwoKSxsPWUoYyksZj0hMSxoPXtwb2ludDpkLGxpbmVTdGFydDptLGxpbmVFbmQ6eSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoLnBvaW50PXYsaC5saW5lU3RhcnQ9ZyxoLmxpbmVFbmQ9YixhPVtdLG89W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtoLnBvaW50PWQsaC5saW5lU3RhcnQ9bSxoLmxpbmVFbmQ9eSxhPUYoYSk7dmFyIHQ9c2wobyxyKTthLmxlbmd0aD8oZnx8KGkucG9seWdvblN0YXJ0KCksZj0hMCksaWwoYSxsbCx0LG4saSkpOnQmJihmfHwoaS5wb2x5Z29uU3RhcnQoKSxmPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGYmJihpLnBvbHlnb25FbmQoKSxmPSExKSxhPW89bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe3UucG9pbnQodCxlKX1mdW5jdGlvbiBtKCl7aC5wb2ludD1wLHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24geSgpe2gucG9pbnQ9ZCx1LmxpbmVFbmQoKX1mdW5jdGlvbiB2KHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gZygpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7dihzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLHU9bC5jbGVhbigpLGg9Yy5yZXN1bHQoKSxkPWgubGVuZ3RoO2lmKHMucG9wKCksby5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmdSl7aWYoKGU9KG49aFswXSkubGVuZ3RoLTEpPjApe2ZvcihmfHwoaS5wb2x5Z29uU3RhcnQoKSxmPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJnUmJmgucHVzaChoLnBvcCgpLmNvbmNhdChoLnNoaWZ0KCkpKSxhLnB1c2goaC5maWx0ZXIoY2wpKX1yZXR1cm4gaH19O2Z1bmN0aW9uIGNsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIGxsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLXR1LSRzOnR1LXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS10dS0kczp0dS1lWzFdKX12YXIgZmw9dWwoZnVuY3Rpb24oKXtyZXR1cm4hMH0sZnVuY3Rpb24odCl7dmFyIGUsbj1OYU4scj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihvLGEpe3ZhciBzPW8+MD9KczotSnMsdT1vdShvLW4pO291KHUtSnMpPCRzPyh0LnBvaW50KG4scj0ocithKS8yPjA/dHU6LXR1KSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChvLHIpLGU9MCk6aSE9PXMmJnU+PUpzJiYob3Uobi1pKTwkcyYmKG4tPWkqJHMpLG91KG8tcyk8JHMmJihvLT1zKiRzKSxyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLG8sYT1kdSh0LW4pO3JldHVybiBvdShhKT4kcz9hdSgoZHUoZSkqKG89dXUocikpKmR1KG4pLWR1KHIpKihpPXV1KGUpKSpkdSh0KSkvKGkqbyphKSk6KGUrcikvMn0obixyLG8sYSksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLHIpLGU9MCksdC5wb2ludChuPW8scj1hKSxpPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxuPXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWV9fX0sZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClyLnBvaW50KC1KcyxpPW4qdHUpLHIucG9pbnQoMCxpKSxyLnBvaW50KEpzLGkpLHIucG9pbnQoSnMsMCksci5wb2ludChKcywtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1KcywtaSksci5wb2ludCgtSnMsMCksci5wb2ludCgtSnMsaSk7ZWxzZSBpZihvdSh0WzBdLWVbMF0pPiRzKXt2YXIgbz10WzBdPGVbMF0/SnM6LUpzO3IucG9pbnQoLW8saT1uKm8vMiksci5wb2ludCgwLGkpLHIucG9pbnQobyxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0sWy1KcywtdHVdKSxobD1mdW5jdGlvbih0KXt2YXIgZT11dSh0KSxuPTYqaXUscj1lPjAsaT1vdShlKT4kcztmdW5jdGlvbiBvKHQsbil7cmV0dXJuIHV1KHQpKnV1KG4pPmV9ZnVuY3Rpb24gYSh0LG4scil7dmFyIGk9WzEsMCwwXSxvPUh1KEJ1KHQpLEJ1KG4pKSxhPVV1KG8sbykscz1vWzBdLHU9YS1zKnM7aWYoIXUpcmV0dXJuIXImJnQ7dmFyIGM9ZSphL3UsbD0tZSpzL3UsZj1IdShpLG8pLGg9R3UoaSxjKTtxdShoLEd1KG8sbCkpO3ZhciBkPWYscD1VdShoLGQpLG09VXUoZCxkKSx5PXAqcC1tKihVdShoLGgpLTEpO2lmKCEoeTwwKSl7dmFyIHY9bXUoeSksZz1HdShkLCgtcC12KS9tKTtpZihxdShnLGgpLGc9enUoZyksIXIpcmV0dXJuIGc7dmFyIGIsXz10WzBdLHc9blswXSx4PXRbMV0sUz1uWzFdO3c8XyYmKGI9XyxfPXcsdz1iKTt2YXIgRT13LV8sQz1vdShFLUpzKTwkcztpZighQyYmUzx4JiYoYj14LHg9UyxTPWIpLEN8fEU8JHM/Qz94K1M+MF5nWzFdPChvdShnWzBdLV8pPCRzP3g6Uyk6eDw9Z1sxXSYmZ1sxXTw9UzpFPkpzXihfPD1nWzBdJiZnWzBdPD13KSl7dmFyIE89R3UoZCwoLXArdikvbSk7cmV0dXJuIHF1KE8saCksW2csenUoTyldfX19ZnVuY3Rpb24gcyhlLG4pe3ZhciBpPXI/dDpKcy10LG89MDtyZXR1cm4gZTwtaT9vfD0xOmU+aSYmKG98PTIpLG48LWk/b3w9NDpuPmkmJihvfD04KSxvfXJldHVybiB1bChvLGZ1bmN0aW9uKHQpe3ZhciBlLG4sdSxjLGw7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2M9dT0hMSxsPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGQscD1bZixoXSxtPW8oZixoKSx5PXI/bT8wOnMoZixoKTptP3MoZisoZjwwP0pzOi1KcyksaCk6MDtpZighZSYmKGM9dT1tKSYmdC5saW5lU3RhcnQoKSxtIT09dSYmKCEoZD1hKGUscCkpfHxubChlLGQpfHxubChwLGQpKSYmKHBbMF0rPSRzLHBbMV0rPSRzLG09byhwWzBdLHBbMV0pKSxtIT09dSlsPTAsbT8odC5saW5lU3RhcnQoKSxkPWEocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPWEoZSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJebSl7dmFyIHY7eSZufHwhKHY9YShwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSkpKX0hbXx8ZSYmbmwoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCx1PW0sbj15fSxsaW5lRW5kOmZ1bmN0aW9uKCl7dSYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfChjJiZ1KTw8MX19fSxmdW5jdGlvbihlLHIsaSxvKXskYyhvLHQsbixpLGUscil9LHI/WzAsLXRdOlstSnMsdC1Kc10pfSxkbD1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGEscz10WzBdLHU9dFsxXSxjPTAsbD0xLGY9ZVswXS1zLGg9ZVsxXS11O2lmKGE9bi1zLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8YylyZXR1cm47YTxsJiYobD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5sKXJldHVybjthPmMmJihjPWEpfWlmKGE9aS1zLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+bClyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGY+MCl7aWYoYTxjKXJldHVybjthPGwmJihsPWEpfWlmKGE9ci11LGh8fCEoYT4wKSl7aWYoYS89aCxoPDApe2lmKGE8YylyZXR1cm47YTxsJiYobD1hKX1lbHNlIGlmKGg+MCl7aWYoYT5sKXJldHVybjthPmMmJihjPWEpfWlmKGE9by11LGh8fCEoYTwwKSl7aWYoYS89aCxoPDApe2lmKGE+bClyZXR1cm47YT5jJiYoYz1hKX1lbHNlIGlmKGg+MCl7aWYoYTxjKXJldHVybjthPGwmJihsPWEpfXJldHVybiBjPjAmJih0WzBdPXMrYypmLHRbMV09dStjKmgpLGw8MSYmKGVbMF09cytsKmYsZVsxXT11K2wqaCksITB9fX19fSxwbD0xZTksbWw9LXBsO2Z1bmN0aW9uIHlsKHQsZSxuLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9biYmZTw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyxzLGMpe3ZhciBsPTAsZj0wO2lmKG51bGw9PWl8fChsPWEoaSxzKSkhPT0oZj1hKG8scykpfHx1KGksbyk8MF5zPjApZG97Yy5wb2ludCgwPT09bHx8Mz09PWw/dDpuLGw+MT9yOmUpfXdoaWxlKChsPShsK3MrNCklNCkhPT1mKTtlbHNlIGMucG9pbnQob1swXSxvWzFdKX1mdW5jdGlvbiBhKHIsaSl7cmV0dXJuIG91KHJbMF0tdCk8JHM/aT4wPzA6MzpvdShyWzBdLW4pPCRzP2k+MD8yOjE6b3UoclsxXS1lKTwkcz9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB1KHQueCxlLngpfWZ1bmN0aW9uIHUodCxlKXt2YXIgbj1hKHQsMSkscj1hKGUsMSk7cmV0dXJuIG4hPT1yP24tcjowPT09bj9lWzFdLXRbMV06MT09PW4/dFswXS1lWzBdOjI9PT1uP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciB1LGMsbCxmLGgsZCxwLG0seSx2LGcsYj1hLF89ZWwoKSx3PXtwb2ludDp4LGxpbmVTdGFydDpmdW5jdGlvbigpe3cucG9pbnQ9UyxjJiZjLnB1c2gobD1bXSksdj0hMCx5PSExLHA9bT1OYU59LGxpbmVFbmQ6ZnVuY3Rpb24oKXt1JiYoUyhmLGgpLGQmJnkmJl8ucmVqb2luKCksdS5wdXNoKF8ucmVzdWx0KCkpKSx3LnBvaW50PXgseSYmYi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2I9Xyx1PVtdLGM9W10sZz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsbj0wLGk9Yy5sZW5ndGg7bjxpOysrbilmb3IodmFyIG8sYSxzPWNbbl0sdT0xLGw9cy5sZW5ndGgsZj1zWzBdLGg9ZlswXSxkPWZbMV07dTxsOysrdSlvPWgsYT1kLGg9KGY9c1t1XSlbMF0sZD1mWzFdLGE8PXI/ZD5yJiYoaC1vKSooci1hKT4oZC1hKSoodC1vKSYmKytlOmQ8PXImJihoLW8pKihyLWEpPChkLWEpKih0LW8pJiYtLWU7cmV0dXJuIGV9KCksbj1nJiZlLGk9KHU9Rih1KSkubGVuZ3RoOyhufHxpKSYmKGEucG9seWdvblN0YXJ0KCksbiYmKGEubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmaWwodSxzLGUsbyxhKSxhLnBvbHlnb25FbmQoKSksYj1hLHU9Yz1sPW51bGx9fTtmdW5jdGlvbiB4KHQsZSl7aSh0LGUpJiZiLnBvaW50KHQsZSl9ZnVuY3Rpb24gUyhvLGEpe3ZhciBzPWkobyxhKTtpZihjJiZsLnB1c2goW28sYV0pLHYpZj1vLGg9YSxkPXMsdj0hMSxzJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSkpO2Vsc2UgaWYocyYmeSliLnBvaW50KG8sYSk7ZWxzZXt2YXIgdT1bcD1NYXRoLm1heChtbCxNYXRoLm1pbihwbCxwKSksbT1NYXRoLm1heChtbCxNYXRoLm1pbihwbCxtKSldLF89W289TWF0aC5tYXgobWwsTWF0aC5taW4ocGwsbykpLGE9TWF0aC5tYXgobWwsTWF0aC5taW4ocGwsYSkpXTtkbCh1LF8sdCxlLG4scik/KHl8fChiLmxpbmVTdGFydCgpLGIucG9pbnQodVswXSx1WzFdKSksYi5wb2ludChfWzBdLF9bMV0pLHN8fGIubGluZUVuZCgpLGc9ITEpOnMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQobyxhKSxnPSExKX1wPW8sbT1hLHk9c31yZXR1cm4gd319dmFyIHZsLGdsLGJsLF9sPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9MCxpPTAsbz05NjAsYT01MDA7cmV0dXJuIG49e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDp0PXlsKHIsaSxvLGEpKGU9bil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rc1swXVswXSxpPStzWzBdWzFdLG89K3NbMV1bMF0sYT0rc1sxXVsxXSx0PWU9bnVsbCxuKTpbW3IsaV0sW28sYV1dfX19LHdsPVlzKCkseGw9e3NwaGVyZTpfdSxwb2ludDpfdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt4bC5wb2ludD1FbCx4bC5saW5lRW5kPVNsfSxsaW5lRW5kOl91LHBvbHlnb25TdGFydDpfdSxwb2x5Z29uRW5kOl91fTtmdW5jdGlvbiBTbCgpe3hsLnBvaW50PXhsLmxpbmVFbmQ9X3V9ZnVuY3Rpb24gRWwodCxlKXt2bD10Kj1pdSxnbD1kdShlKj1pdSksYmw9dXUoZSkseGwucG9pbnQ9Q2x9ZnVuY3Rpb24gQ2wodCxlKXt0Kj1pdTt2YXIgbj1kdShlKj1pdSkscj11dShlKSxpPW91KHQtdmwpLG89dXUoaSksYT1yKmR1KGkpLHM9Ymwqbi1nbCpyKm8sdT1nbCpuK2JsKnIqbzt3bC5hZGQoc3UobXUoYSphK3MqcyksdSkpLHZsPXQsZ2w9bixibD1yfXZhciBPbD1mdW5jdGlvbih0KXtyZXR1cm4gd2wucmVzZXQoKSxJdSh0LHhsKSwrd2x9LFRsPVtudWxsLG51bGxdLGtsPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpUbH0sQWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVGxbMF09dCxUbFsxXT1lLE9sKGtsKX0samw9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWwodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKE1sKG5bcl0uZ2VvbWV0cnksZSkpcmV0dXJuITA7cmV0dXJuITF9fSxJbD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFBsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKFBsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gTmwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihObChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFJsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoUmwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKE1sKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBNbCh0LGUpe3JldHVybiEoIXR8fCFJbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmSWxbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIFBsKHQsZSl7cmV0dXJuIDA9PT1BbCh0LGUpfWZ1bmN0aW9uIE5sKHQsZSl7dmFyIG49QWwodFswXSx0WzFdKTtyZXR1cm4gQWwodFswXSxlKStBbChlLHRbMV0pPD1uKyRzfWZ1bmN0aW9uIFJsKHQsZSl7cmV0dXJuISFzbCh0Lm1hcChEbCksRmwoZSkpfWZ1bmN0aW9uIERsKHQpe3JldHVybih0PXQubWFwKEZsKSkucG9wKCksdH1mdW5jdGlvbiBGbCh0KXtyZXR1cm5bdFswXSppdSx0WzFdKml1XX12YXIgTGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4odCYmamwuaGFzT3duUHJvcGVydHkodC50eXBlKT9qbFt0LnR5cGVdOk1sKSh0LGUpfTtmdW5jdGlvbiBWbCh0LGUsbil7dmFyIHI9eCh0LGUtJHMsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuW3QsZV19KX19ZnVuY3Rpb24gemwodCxlLG4pe3ZhciByPXgodCxlLSRzLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIEJsKCl7dmFyIHQsZSxuLHIsaSxvLGEscyx1LGMsbCxmLGg9MTAsZD1oLHA9OTAsbT0zNjAseT0yLjU7ZnVuY3Rpb24gdigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmcoKX19ZnVuY3Rpb24gZygpe3JldHVybiB4KGN1KHIvcCkqcCxuLHApLm1hcChsKS5jb25jYXQoeChjdShzL20pKm0sYSxtKS5tYXAoZikpLmNvbmNhdCh4KGN1KGUvaCkqaCx0LGgpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gb3UodCVwKT4kc30pLm1hcCh1KSkuY29uY2F0KHgoY3Uoby9kKSpkLGksZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBvdSh0JW0pPiRzfSkubWFwKGMpKX1yZXR1cm4gdi5saW5lcz1mdW5jdGlvbigpe3JldHVybiBnKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pfSx2Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2wocikuY29uY2F0KGYoYSkuc2xpY2UoMSksbChuKS5yZXZlcnNlKCkuc2xpY2UoMSksZihzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHYuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3YuZXh0ZW50TWFqb3IodCkuZXh0ZW50TWlub3IodCk6di5leHRlbnRNaW5vcigpfSx2LmV4dGVudE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0WzBdWzFdLGE9K3RbMV1bMV0sKHI9K3RbMF1bMF0pPihuPSt0WzFdWzBdKSYmKHQ9cixyPW4sbj10KSxzPmEmJih0PXMscz1hLGE9dCksdi5wcmVjaXNpb24oeSkpOltbcixzXSxbbixhXV19LHYuZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMV0saT0rblsxXVsxXSwoZT0rblswXVswXSk+KHQ9K25bMV1bMF0pJiYobj1lLGU9dCx0PW4pLG8+aSYmKG49byxvPWksaT1uKSx2LnByZWNpc2lvbih5KSk6W1tlLG9dLFt0LGldXX0sdi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Yuc3RlcE1ham9yKHQpLnN0ZXBNaW5vcih0KTp2LnN0ZXBNaW5vcigpfSx2LnN0ZXBNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSxtPSt0WzFdLHYpOltwLG1dfSx2LnN0ZXBNaW5vcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLHYpOltoLGRdfSx2LnByZWNpc2lvbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0raCx1PVZsKG8saSw5MCksYz16bChlLHQseSksbD1WbChzLGEsOTApLGY9emwocixuLHkpLHYpOnl9LHYuZXh0ZW50TWFqb3IoW1stMTgwLC05MCskc10sWzE4MCw5MC0kc11dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLSRzXSxbMTgwLDgwKyRzXV0pfWZ1bmN0aW9uIFVsKCl7cmV0dXJuIEJsKCkoKX12YXIgSGwscWwsR2wsV2wsUWw9ZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdKml1LHI9dFsxXSppdSxpPWVbMF0qaXUsbz1lWzFdKml1LGE9dXUocikscz1kdShyKSx1PXV1KG8pLGM9ZHUobyksbD1hKnV1KG4pLGY9YSpkdShuKSxoPXUqdXUoaSksZD11KmR1KGkpLHA9MipndShtdShidShvLXIpK2EqdSpidShpLW4pKSksbT1kdShwKSx5PXA/ZnVuY3Rpb24odCl7dmFyIGU9ZHUodCo9cCkvbSxuPWR1KHAtdCkvbSxyPW4qbCtlKmgsaT1uKmYrZSpkLG89bipzK2UqYztyZXR1cm5bc3UoaSxyKSpydSxzdShvLG11KHIqcitpKmkpKSpydV19OmZ1bmN0aW9uKCl7cmV0dXJuW24qcnUscipydV19O3JldHVybiB5LmRpc3RhbmNlPXAseX0sWWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEtsPVlzKCksWmw9WXMoKSxYbD17cG9pbnQ6X3UsbGluZVN0YXJ0Ol91LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WGwubGluZVN0YXJ0PSRsLFhsLmxpbmVFbmQ9ZWZ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtYbC5saW5lU3RhcnQ9WGwubGluZUVuZD1YbC5wb2ludD1fdSxLbC5hZGQob3UoWmwpKSxabC5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1LbC8yO3JldHVybiBLbC5yZXNldCgpLHR9fTtmdW5jdGlvbiAkbCgpe1hsLnBvaW50PUpsfWZ1bmN0aW9uIEpsKHQsZSl7WGwucG9pbnQ9dGYsSGw9R2w9dCxxbD1XbD1lfWZ1bmN0aW9uIHRmKHQsZSl7WmwuYWRkKFdsKnQtR2wqZSksR2w9dCxXbD1lfWZ1bmN0aW9uIGVmKCl7dGYoSGwscWwpfXZhciBuZixyZixvZixhZixzZj1YbCx1Zj0xLzAsY2Y9dWYsbGY9LXVmLGZmPWxmLGhmPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8dWYmJih1Zj10KSx0PmxmJiYobGY9dCksZTxjZiYmKGNmPWUpLGU+ZmYmJihmZj1lKX0sbGluZVN0YXJ0Ol91LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0Ol91LHBvbHlnb25FbmQ6X3UscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1t1ZixjZl0sW2xmLGZmXV07cmV0dXJuIGxmPWZmPS0oY2Y9dWY9MS8wKSx0fX0sZGY9MCxwZj0wLG1mPTAseWY9MCx2Zj0wLGdmPTAsYmY9MCxfZj0wLHdmPTAseGY9e3BvaW50OlNmLGxpbmVTdGFydDpFZixsaW5lRW5kOlRmLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3hmLmxpbmVTdGFydD1rZix4Zi5saW5lRW5kPUFmfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eGYucG9pbnQ9U2YseGYubGluZVN0YXJ0PUVmLHhmLmxpbmVFbmQ9VGZ9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXdmP1tiZi93ZixfZi93Zl06Z2Y/W3lmL2dmLHZmL2dmXTptZj9bZGYvbWYscGYvbWZdOltOYU4sTmFOXTtyZXR1cm4gZGY9cGY9bWY9eWY9dmY9Z2Y9YmY9X2Y9d2Y9MCx0fX07ZnVuY3Rpb24gU2YodCxlKXtkZis9dCxwZis9ZSwrK21mfWZ1bmN0aW9uIEVmKCl7eGYucG9pbnQ9Q2Z9ZnVuY3Rpb24gQ2YodCxlKXt4Zi5wb2ludD1PZixTZihvZj10LGFmPWUpfWZ1bmN0aW9uIE9mKHQsZSl7dmFyIG49dC1vZixyPWUtYWYsaT1tdShuKm4rcipyKTt5Zis9aSoob2YrdCkvMix2Zis9aSooYWYrZSkvMixnZis9aSxTZihvZj10LGFmPWUpfWZ1bmN0aW9uIFRmKCl7eGYucG9pbnQ9U2Z9ZnVuY3Rpb24ga2YoKXt4Zi5wb2ludD1qZn1mdW5jdGlvbiBBZigpe0lmKG5mLHJmKX1mdW5jdGlvbiBqZih0LGUpe3hmLnBvaW50PUlmLFNmKG5mPW9mPXQscmY9YWY9ZSl9ZnVuY3Rpb24gSWYodCxlKXt2YXIgbj10LW9mLHI9ZS1hZixpPW11KG4qbityKnIpO3lmKz1pKihvZit0KS8yLHZmKz1pKihhZitlKS8yLGdmKz1pLGJmKz0oaT1hZip0LW9mKmUpKihvZit0KSxfZis9aSooYWYrZSksd2YrPTMqaSxTZihvZj10LGFmPWUpfXZhciBNZj14ZjtmdW5jdGlvbiBQZih0KXt0aGlzLl9jb250ZXh0PXR9UGYucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLG51KX19LHJlc3VsdDpfdX07dmFyIE5mLFJmLERmLEZmLExmLFZmPVlzKCksemY9e3BvaW50Ol91LGxpbmVTdGFydDpmdW5jdGlvbigpe3pmLnBvaW50PUJmfSxsaW5lRW5kOmZ1bmN0aW9uKCl7TmYmJlVmKFJmLERmKSx6Zi5wb2ludD1fdX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TmY9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtOZj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rVmY7cmV0dXJuIFZmLnJlc2V0KCksdH19O2Z1bmN0aW9uIEJmKHQsZSl7emYucG9pbnQ9VWYsUmY9RmY9dCxEZj1MZj1lfWZ1bmN0aW9uIFVmKHQsZSl7VmYuYWRkKG11KChGZi09dCkqRmYrKExmLT1lKSpMZikpLEZmPXQsTGY9ZX12YXIgSGY9emY7ZnVuY3Rpb24gcWYoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gR2YodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9cWYucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOkdmKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9R2YodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fTt2YXIgV2Y9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9NC41O2Z1bmN0aW9uIG8odCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmci5wb2ludFJhZGl1cygraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEl1KHQsbihyKSkpLHIucmVzdWx0KCl9cmV0dXJuIG8uYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gSXUodCxuKHNmKSksc2YucmVzdWx0KCl9LG8ubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gSXUodCxuKEhmKSksSGYucmVzdWx0KCl9LG8uYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBJdSh0LG4oaGYpKSxoZi5yZXN1bHQoKX0sby5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gSXUodCxuKE1mKSksTWYucmVzdWx0KCl9LG8ucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT1lPyh0PW51bGwsWWwpOih0PWUpLnN0cmVhbSxvKTp0fSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD8oZT1udWxsLG5ldyBxZik6bmV3IFBmKGU9dCksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoaSksbyk6ZX0sby5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihyLnBvaW50UmFkaXVzKCt0KSwrdCksbyk6aX0sby5wcm9qZWN0aW9uKHQpLmNvbnRleHQoZSl9LFFmPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06WWYodCl9fTtmdW5jdGlvbiBZZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IEtmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBLZigpe31mdW5jdGlvbiBaZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLEl1KG4sdC5zdHJlYW0oaGYpKSxlKGhmLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiBYZih0LGUsbil7cmV0dXJuIFpmKHQsZnVuY3Rpb24obil7dmFyIHI9ZVsxXVswXS1lWzBdWzBdLGk9ZVsxXVsxXS1lWzBdWzFdLG89TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxpLyhuWzFdWzFdLW5bMF1bMV0pKSxhPStlWzBdWzBdKyhyLW8qKG5bMV1bMF0rblswXVswXSkpLzIscz0rZVswXVsxXSsoaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LG4pfWZ1bmN0aW9uICRmKHQsZSxuKXtyZXR1cm4gWGYodCxbWzAsMF0sZV0sbil9ZnVuY3Rpb24gSmYodCxlLG4pe3JldHVybiBaZih0LGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxvPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsYT0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbbyxhXSl9LG4pfWZ1bmN0aW9uIHRoKHQsZSxuKXtyZXR1cm4gWmYodCxmdW5jdGlvbihuKXt2YXIgcj0rZSxpPXIvKG5bMV1bMV0tblswXVsxXSksbz0taSpuWzBdWzBdLGE9KHItaSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW28sYV0pfSxuKX1LZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktmLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBlaD0xNixuaD11dSgzMCppdSkscmg9ZnVuY3Rpb24odCxlKXtyZXR1cm4rZT9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4ocixpLG8sYSxzLHUsYyxsLGYsaCxkLHAsbSx5KXt2YXIgdj1jLXIsZz1sLWksYj12KnYrZypnO2lmKGI+NCplJiZtLS0pe3ZhciBfPWEraCx3PXMrZCx4PXUrcCxTPW11KF8qXyt3KncreCp4KSxFPWd1KHgvPVMpLEM9b3Uob3UoeCktMSk8JHN8fG91KG8tZik8JHM/KG8rZikvMjpzdSh3LF8pLE89dChDLEUpLFQ9T1swXSxrPU9bMV0sQT1ULXIsaj1rLWksST1nKkEtdipqOyhJKkkvYj5lfHxvdSgodipBK2cqaikvYi0uNSk+LjN8fGEqaCtzKmQrdSpwPG5oKSYmKG4ocixpLG8sYSxzLHUsVCxrLEMsXy89Uyx3Lz1TLHgsbSx5KSx5LnBvaW50KFQsayksbihULGssQyxfLHcseCxjLGwsZixoLGQscCxtLHkpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksbyxhLHMsdSxjLGwsZixoLGQscCxtPXtwb2ludDp5LGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLG0ubGluZVN0YXJ0PV99LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSxtLmxpbmVTdGFydD12fX07ZnVuY3Rpb24geShuLHIpe249dChuLHIpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiB2KCl7bD1OYU4sbS5wb2ludD1nLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZyhyLGkpe3ZhciBvPUJ1KFtyLGldKSxhPXQocixpKTtuKGwsZixjLGgsZCxwLGw9YVswXSxmPWFbMV0sYz1yLGg9b1swXSxkPW9bMV0scD1vWzJdLGVoLGUpLGUucG9pbnQobCxmKX1mdW5jdGlvbiBiKCl7bS5wb2ludD15LGUubGluZUVuZCgpfWZ1bmN0aW9uIF8oKXt2KCksbS5wb2ludD13LG0ubGluZUVuZD14fWZ1bmN0aW9uIHcodCxlKXtnKHI9dCxlKSxpPWwsbz1mLGE9aCxzPWQsdT1wLG0ucG9pbnQ9Z31mdW5jdGlvbiB4KCl7bihsLGYsYyxoLGQscCxpLG8scixhLHMsdSxlaCxlKSxtLmxpbmVFbmQ9YixiKCl9cmV0dXJuIG19fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiBZZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX0saWg9WWYoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCppdSxlKml1KX19KTtmdW5jdGlvbiBvaCh0LGUsbixyKXt2YXIgaT11dShyKSxvPWR1KHIpLGE9aSp0LHM9byp0LHU9aS90LGM9by90LGw9KG8qbi1pKmUpL3QsZj0obyplK2kqbikvdDtmdW5jdGlvbiBoKHQscil7cmV0dXJuW2EqdC1zKnIrZSxuLXMqdC1hKnJdfXJldHVybiBoLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt1KnQtYyplK2wsZi1jKnQtdSplXX0saH1mdW5jdGlvbiBhaCh0KXtyZXR1cm4gc2goZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gc2godCl7dmFyIGUsbixyLGksbyxhLHMsdSxjLGwsZj0xNTAsaD00ODAsZD0yNTAscD0wLG09MCx5PTAsdj0wLGc9MCxiPTAsXz1udWxsLHc9ZmwseD1udWxsLFM9WWwsRT0uNTtmdW5jdGlvbiBDKHQpe3JldHVybiB1KHRbMF0qaXUsdFsxXSppdSl9ZnVuY3Rpb24gTyh0KXtyZXR1cm4odD11LmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qcnUsdFsxXSpydV19ZnVuY3Rpb24gVCgpe3ZhciB0PW9oKGYsMCwwLGIpLmFwcGx5KG51bGwsZShwLG0pKSxyPShiP29oOmZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuW2UrdCpyLG4tdCppXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixpKXtyZXR1cm5bKHItZSkvdCwobi1pKS90XX0scn0pKGYsaC10WzBdLGQtdFsxXSxiKTtyZXR1cm4gbj1RYyh5LHYsZykscz1HYyhlLHIpLHU9R2MobixzKSxhPXJoKHMsRSksaygpfWZ1bmN0aW9uIGsoKXtyZXR1cm4gYz1sPW51bGwsQ31yZXR1cm4gQy5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGMmJmw9PT10P2M6Yz1paChmdW5jdGlvbih0KXtyZXR1cm4gWWYoe3BvaW50OmZ1bmN0aW9uKGUsbil7dmFyIHI9dChlLG4pO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChyWzBdLHJbMV0pfX0pfShuKSh3KGEoUyhsPXQpKSkpKX0sQy5wcmVjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsXz12b2lkIDAsaygpKTp3fSxDLnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXQseD1yPWk9bz1udWxsLGsoKSk6U30sQy5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9K3Q/aGwoXz10Kml1KTooXz1udWxsLGZsKSxrKCkpOl8qcnV9LEMuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10Pyh4PXI9aT1vPW51bGwsWWwpOnlsKHg9K3RbMF1bMF0scj0rdFswXVsxXSxpPSt0WzFdWzBdLG89K3RbMV1bMV0pLGsoKSk6bnVsbD09eD9udWxsOltbeCxyXSxbaSxvXV19LEMuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsVCgpKTpmfSxDLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdFswXSxkPSt0WzFdLFQoKSk6W2gsZF19LEMuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXRbMF0lMzYwKml1LG09dFsxXSUzNjAqaXUsVCgpKTpbcCpydSxtKnJ1XX0sQy5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dFswXSUzNjAqaXUsdj10WzFdJTM2MCppdSxnPXQubGVuZ3RoPjI/dFsyXSUzNjAqaXU6MCxUKCkpOlt5KnJ1LHYqcnUsZypydV19LEMuYW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dCUzNjAqaXUsVCgpKTpiKnJ1fSxDLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1yaChzLEU9dCp0KSxrKCkpOm11KEUpfSxDLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBYZihDLHQsZSl9LEMuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiAkZihDLHQsZSl9LEMuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSmYoQyx0LGUpfSxDLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB0aChDLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy5pbnZlcnQ9ZS5pbnZlcnQmJk8sVCgpfX1mdW5jdGlvbiB1aCh0KXt2YXIgZT0wLG49SnMvMyxyPXNoKHQpLGk9cihlLG4pO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKGU9dFswXSppdSxuPXRbMV0qaXUpOltlKnJ1LG4qcnVdfSxpfWZ1bmN0aW9uIGNoKHQsZSl7dmFyIG49ZHUodCkscj0obitkdShlKSkvMjtpZihvdShyKTwkcylyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dXUodCk7ZnVuY3Rpb24gcih0LGUpe3JldHVyblt0Km4sZHUoZSkvbl19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvbixndShlKm4pXX0scn0oKTt2YXIgaT0xK24qKDIqci1uKSxvPW11KGkpL3I7ZnVuY3Rpb24gYSh0LGUpe3ZhciBuPW11KGktMipyKmR1KGUpKS9yO3JldHVybltuKmR1KHQqPXIpLG8tbip1dSh0KV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49by1lO3JldHVybltzdSh0LG91KG4pKS9yKnB1KG4pLGd1KChpLSh0KnQrbipuKSpyKnIpLygyKnIpKV19LGF9dmFyIGxoPWZ1bmN0aW9uKCl7cmV0dXJuIHVoKGNoKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSxmaD1mdW5jdGlvbigpe3JldHVybiBsaCgpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfSxoaD1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksbyxhPWZoKCkscz1saCgpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksdT1saCgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbih0LGUpe289W3QsZV19fTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRbMF0sYT10WzFdO3JldHVybiBvPW51bGwsbi5wb2ludChlLGEpLG98fChyLnBvaW50KGUsYSksbyl8fChpLnBvaW50KGUsYSksbyl9ZnVuY3Rpb24gZigpe3JldHVybiB0PWU9bnVsbCxsfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCksbj1hLnRyYW5zbGF0ZSgpLHI9KHRbMF0tblswXSkvZSxpPSh0WzFdLW5bMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/dTphKS5pbnZlcnQodCl9LGwuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OihyPVthLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLHUuc3RyZWFtKG4pXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xOysrbjxpOylyW25dLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxsLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksdS5wcmVjaXNpb24odCksZigpKTphLnByZWNpc2lvbigpfSxsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLHUuc2NhbGUodCksbC50cmFuc2xhdGUoYS50cmFuc2xhdGUoKSkpOmEuc2NhbGUoKX0sbC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGEudHJhbnNsYXRlKCk7dmFyIGU9YS5zY2FsZSgpLG89K3RbMF0sbD0rdFsxXTtyZXR1cm4gbj1hLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbby0uNDU1KmUsbC0uMjM4KmVdLFtvKy40NTUqZSxsKy4yMzgqZV1dKS5zdHJlYW0oYykscj1zLnRyYW5zbGF0ZShbby0uMzA3KmUsbCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbby0uNDI1KmUrJHMsbCsuMTIqZSskc10sW28tLjIxNCplLSRzLGwrLjIzNCplLSRzXV0pLnN0cmVhbShjKSxpPXUudHJhbnNsYXRlKFtvLS4yMDUqZSxsKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1tvLS4yMTQqZSskcyxsKy4xNjYqZSskc10sW28tLjExNSplLSRzLGwrLjIzNCplLSRzXV0pLnN0cmVhbShjKSxmKCl9LGwuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFhmKGwsdCxlKX0sbC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuICRmKGwsdCxlKX0sbC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBKZihsLHQsZSl9LGwuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoKGwsdCxlKX0sbC5zY2FsZSgxMDcwKX07ZnVuY3Rpb24gZGgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dXUoZSksaT11dShuKSxvPXQocippKTtyZXR1cm5bbyppKmR1KGUpLG8qZHUobildfX1mdW5jdGlvbiBwaCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1tdShlKmUrbipuKSxpPXQociksbz1kdShpKSxhPXV1KGkpO3JldHVybltzdShlKm8sciphKSxndShyJiZuKm8vcildfX12YXIgbWg9ZGgoZnVuY3Rpb24odCl7cmV0dXJuIG11KDIvKDErdCkpfSk7bWguaW52ZXJ0PXBoKGZ1bmN0aW9uKHQpe3JldHVybiAyKmd1KHQvMil9KTt2YXIgeWg9ZnVuY3Rpb24oKXtyZXR1cm4gYWgobWgpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx2aD1kaChmdW5jdGlvbih0KXtyZXR1cm4odD12dSh0KSkmJnQvZHUodCl9KTt2aC5pbnZlcnQ9cGgoZnVuY3Rpb24odCl7cmV0dXJuIHR9KTt2YXIgZ2g9ZnVuY3Rpb24oKXtyZXR1cm4gYWgodmgpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX07ZnVuY3Rpb24gYmgodCxlKXtyZXR1cm5bdCxmdSh5dSgodHUrZSkvMikpXX1iaC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKmF1KGx1KGUpKS10dV19O3ZhciBfaD1mdW5jdGlvbigpe3JldHVybiB3aChiaCkuc2NhbGUoOTYxL251KX07ZnVuY3Rpb24gd2godCl7dmFyIGUsbixyLGk9YWgodCksbz1pLmNlbnRlcixhPWkuc2NhbGUscz1pLnRyYW5zbGF0ZSx1PWkuY2xpcEV4dGVudCxjPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBvPUpzKmEoKSxzPWkoWGMoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIHUobnVsbD09Yz9bW3NbMF0tbyxzWzFdLW9dLFtzWzBdK28sc1sxXStvXV06dD09PWJoP1tbTWF0aC5tYXgoc1swXS1vLGMpLGVdLFtNYXRoLm1pbihzWzBdK28sbikscl1dOltbYyxNYXRoLm1heChzWzFdLW8sZSldLFtuLE1hdGgubWluKHNbMV0rbyxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxsKCkpOmEoKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksbCgpKTpzKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGwoKSk6bygpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/Yz1lPW49cj1udWxsOihjPSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxyPSt0WzFdWzFdKSxsKCkpOm51bGw9PWM/bnVsbDpbW2MsZV0sW24scl1dfSxsKCl9ZnVuY3Rpb24geGgodCl7cmV0dXJuIHl1KCh0dSt0KS8yKX1mdW5jdGlvbiBTaCh0LGUpe3ZhciBuPXV1KHQpLHI9dD09PWU/ZHUodCk6ZnUobi91dShlKSkvZnUoeGgoZSkveGgodCkpLGk9bipodSh4aCh0KSxyKS9yO2lmKCFyKXJldHVybiBiaDtmdW5jdGlvbiBvKHQsZSl7aT4wP2U8LXR1KyRzJiYoZT0tdHUrJHMpOmU+dHUtJHMmJihlPXR1LSRzKTt2YXIgbj1pL2h1KHhoKGUpLHIpO3JldHVybltuKmR1KHIqdCksaS1uKnV1KHIqdCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWktZSxvPXB1KHIpKm11KHQqdCtuKm4pO3JldHVybltzdSh0LG91KG4pKS9yKnB1KG4pLDIqYXUoaHUoaS9vLDEvcikpLXR1XX0sb312YXIgRWg9ZnVuY3Rpb24oKXtyZXR1cm4gdWgoU2gpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIENoKHQsZSl7cmV0dXJuW3QsZV19Q2guaW52ZXJ0PUNoO3ZhciBPaD1mdW5jdGlvbigpe3JldHVybiBhaChDaCkuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gVGgodCxlKXt2YXIgbj11dSh0KSxyPXQ9PT1lP2R1KHQpOihuLXV1KGUpKS8oZS10KSxpPW4vcit0O2lmKG91KHIpPCRzKXJldHVybiBDaDtmdW5jdGlvbiBvKHQsZSl7dmFyIG49aS1lLG89cip0O3JldHVybltuKmR1KG8pLGktbip1dShvKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG49aS1lO3JldHVybltzdSh0LG91KG4pKS9yKnB1KG4pLGktcHUocikqbXUodCp0K24qbildfSxvfXZhciBraD1mdW5jdGlvbigpe3JldHVybiB1aChUaCkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX07ZnVuY3Rpb24gQWgodCxlKXt2YXIgbj11dShlKSxyPXV1KHQpKm47cmV0dXJuW24qZHUodCkvcixkdShlKS9yXX1BaC5pbnZlcnQ9cGgoYXUpO3ZhciBqaD1mdW5jdGlvbigpe3JldHVybiBhaChBaCkuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX07ZnVuY3Rpb24gSWgodCxlLG4scil7cmV0dXJuIDE9PT10JiYxPT09ZSYmMD09PW4mJjA9PT1yP1lsOllmKHtwb2ludDpmdW5jdGlvbihpLG8pe3RoaXMuc3RyZWFtLnBvaW50KGkqdCtuLG8qZStyKX19KX12YXIgTWg9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLG8sYT0xLHM9MCx1PTAsYz0xLGw9MSxmPVlsLGg9bnVsbCxkPVlsO2Z1bmN0aW9uIHAoKXtyZXR1cm4gcj1pPW51bGwsb31yZXR1cm4gbz17c3RyZWFtOmZ1bmN0aW9uKHQpe3JldHVybiByJiZpPT09dD9yOnI9ZihkKGk9dCkpfSxwb3N0Y2xpcDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1yLGg9dD1lPW49bnVsbCxwKCkpOmR9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09cj8oaD10PWU9bj1udWxsLFlsKTp5bChoPStyWzBdWzBdLHQ9K3JbMF1bMV0sZT0rclsxXVswXSxuPStyWzFdWzFdKSxwKCkpOm51bGw9PWg/bnVsbDpbW2gsdF0sW2Usbl1dfSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JaCgoYT0rdCkqYyxhKmwscyx1KSxwKCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JaChhKmMsYSpsLHM9K3RbMF0sdT0rdFsxXSkscCgpKTpbcyx1XX0scmVmbGVjdFg6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9SWgoYSooYz10Py0xOjEpLGEqbCxzLHUpLHAoKSk6YzwwfSxyZWZsZWN0WTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1JaChhKmMsYSoobD10Py0xOjEpLHMsdSkscCgpKTpsPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LGUpe3JldHVybiBYZihvLHQsZSl9LGZpdFNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGYobyx0LGUpfSxmaXRXaWR0aDpmdW5jdGlvbih0LGUpe3JldHVybiBKZihvLHQsZSl9LGZpdEhlaWdodDpmdW5jdGlvbih0LGUpe3JldHVybiB0aChvLHQsZSl9fX07ZnVuY3Rpb24gUGgodCxlKXt2YXIgbj1lKmUscj1uKm47cmV0dXJuW3QqKC44NzA3LS4xMzE5NzkqbityKihyKiguMDAzOTcxKm4tLjAwMTUyOSpyKS0uMDEzNzkxKSksZSooMS4wMDcyMjYrbiooLjAxNTA4NStyKiguMDI4ODc0Km4tLjA0NDQ3NS0uMDA1OTE2KnIpKSldfVBoLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZSxpPTI1O2Rve3ZhciBvPXIqcixhPW8qbztyLT1uPShyKigxLjAwNzIyNitvKiguMDE1MDg1K2EqKC4wMjg4NzQqby0uMDQ0NDc1LS4wMDU5MTYqYSkpKS1lKS8oMS4wMDcyMjYrbyooLjA0NTI1NSthKiguMjU5ODY2Km8tLjMxMTMyNS0uMDA1OTE2KjExKmEpKSl9d2hpbGUob3Uobik+JHMmJi0taT4wKTtyZXR1cm5bdC8oLjg3MDcrKG89cipyKSoobyoobypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKS0uMDEzNzkxKS0uMTMxOTc5KSkscl19O3ZhciBOaD1mdW5jdGlvbigpe3JldHVybiBhaChQaCkuc2NhbGUoMTc1LjI5NSl9O2Z1bmN0aW9uIFJoKHQsZSl7cmV0dXJuW3V1KGUpKmR1KHQpLGR1KGUpXX1SaC5pbnZlcnQ9cGgoZ3UpO3ZhciBEaD1mdW5jdGlvbigpe3JldHVybiBhaChSaCkuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MCskcyl9O2Z1bmN0aW9uIEZoKHQsZSl7dmFyIG49dXUoZSkscj0xK3V1KHQpKm47cmV0dXJuW24qZHUodCkvcixkdShlKS9yXX1GaC5pbnZlcnQ9cGgoZnVuY3Rpb24odCl7cmV0dXJuIDIqYXUodCl9KTt2YXIgTGg9ZnVuY3Rpb24oKXtyZXR1cm4gYWgoRmgpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9O2Z1bmN0aW9uIFZoKHQsZSl7cmV0dXJuW2Z1KHl1KCh0dStlKS8yKSksLXRdfVZoLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblstZSwyKmF1KGx1KHQpKS10dV19O3ZhciB6aD1mdW5jdGlvbigpe3ZhciB0PXdoKFZoKSxlPXQuY2VudGVyLG49dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9bigpKVswXSx0WzFdLHRbMl0tOTBdfSxuKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX07ZnVuY3Rpb24gQmgodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gVWgodCxlKXtyZXR1cm4gdCtlLnh9ZnVuY3Rpb24gSGgodCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnkpfXZhciBxaD1mdW5jdGlvbigpe3ZhciB0PUJoLGU9MSxuPTEscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBvLGE9MDtpLmVhY2hBZnRlcihmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoVWgsMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShIaCwwKX0obikpOihlLng9bz9hKz10KGUsbyk6MCxlLnk9MCxvPWUpfSk7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShpKSx1PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oaSksYz1zLngtdChzLHUpLzIsbD11LngrdCh1LHMpLzI7cmV0dXJuIGkuZWFjaEFmdGVyKHI/ZnVuY3Rpb24odCl7dC54PSh0LngtaS54KSplLHQueT0oaS55LXQueSkqbn06ZnVuY3Rpb24odCl7dC54PSh0LngtYykvKGwtYykqZSx0Lnk9KDEtKGkueT90LnkvaS55OjEpKSpufSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxlPSt0WzBdLG49K3RbMV0saSk6cj9udWxsOltlLG5dfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLGU9K3RbMF0sbj0rdFsxXSxpKTpyP1tlLG5dOm51bGx9LGl9O2Z1bmN0aW9uIEdoKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLHI9biYmbi5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspZSs9bltyXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gV2godCxlKXt2YXIgbixyLGksbyxhLHM9bmV3IFpoKHQpLHU9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLGM9W3NdO2ZvcihudWxsPT1lJiYoZT1RaCk7bj1jLnBvcCgpOylpZih1JiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwoaT1lKG4uZGF0YSkpJiYoYT1pLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KGEpLG89YS0xO28+PTA7LS1vKWMucHVzaChyPW4uY2hpbGRyZW5bb109bmV3IFpoKGlbb10pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoS2gpfWZ1bmN0aW9uIFFoKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIFloKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBLaCh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIFpoKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfVpoLnByb3RvdHlwZT1XaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpoLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKEdoKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvPXRoaXMsYT1bb107ZG97Zm9yKGU9YS5yZXZlcnNlKCksYT1bXTtvPWUucG9wKCk7KWlmKHQobyksbj1vLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKWEucHVzaChuW3JdKX13aGlsZShhLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dGhpcyxvPVtpXSxhPVtdO2k9by5wb3AoKTspaWYoYS5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilvLnB1c2goZVtuXSk7Zm9yKDtpPWEucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxlPXIuY2hpbGRyZW4pZm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpLnB1c2goZVtuXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7Zm9yKHZhciBuPSt0KGUuZGF0YSl8fDAscj1lLmNoaWxkcmVuLGk9ciYmci5sZW5ndGg7LS1pPj0wOyluKz1yW2ldLnZhbHVlO2UudmFsdWU9bn0pfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsbj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciBuPXQuYW5jZXN0b3JzKCkscj1lLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1uLnBvcCgpLGU9ci5wb3AoKTt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KXIucHVzaChlPWUucGFyZW50KTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PW47KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIFdoKHRoaXMpLmVhY2hCZWZvcmUoWWgpfX07dmFyIFhoPUFycmF5LnByb3RvdHlwZS5zbGljZSwkaD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5yYW5kb20oKSpyLS18MCxlPXRbcl0sdFtyXT10W25dLHRbbl09ZTtyZXR1cm4gdH0oWGguY2FsbCh0KSkpLmxlbmd0aCxvPVtdO3I8aTspZT10W3JdLG4mJmVkKG4sZSk/KytyOihuPXJkKG89SmgobyxlKSkscj0wKTtyZXR1cm4gbn07ZnVuY3Rpb24gSmgodCxlKXt2YXIgbixyO2lmKG5kKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYodGQoZSx0W25dKSYmbmQoaWQodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKHRkKGlkKHRbbl0sdFtyXSksZSkmJnRkKGlkKHRbbl0sZSksdFtyXSkmJnRkKGlkKHRbcl0sZSksdFtuXSkmJm5kKG9kKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiB0ZCh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBlZCh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIG5kKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIWVkKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gcmQodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiBpZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gb2QodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIGlkKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLG89ZS54LGE9ZS55LHM9ZS5yLHU9by1uLGM9YS1yLGw9cy1pLGY9TWF0aC5zcXJ0KHUqdStjKmMpO3JldHVybnt4OihuK28rdS9mKmwpLzIseToocithK2MvZipsKS8yLHI6KGYraStzKS8yfX1mdW5jdGlvbiBvZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LG89dC5yLGE9ZS54LHM9ZS55LHU9ZS5yLGM9bi54LGw9bi55LGY9bi5yLGg9ci1hLGQ9ci1jLHA9aS1zLG09aS1sLHk9dS1vLHY9Zi1vLGc9cipyK2kqaS1vKm8sYj1nLWEqYS1zKnMrdSp1LF89Zy1jKmMtbCpsK2YqZix3PWQqcC1oKm0seD0ocCpfLW0qYikvKDIqdyktcixTPShtKnktcCp2KS93LEU9KGQqYi1oKl8pLygyKncpLWksQz0oaCp2LWQqeSkvdyxPPVMqUytDKkMtMSxUPTIqKG8reCpTK0UqQyksaz14KngrRSpFLW8qbyxBPS0oTz8oVCtNYXRoLnNxcnQoVCpULTQqTyprKSkvKDIqTyk6ay9UKTtyZXR1cm57eDpyK3grUypBLHk6aStFK0MqQSxyOkF9fWZ1bmN0aW9uIGFkKHQsZSxuKXt2YXIgcixpLG8sYSxzPXQueC1lLngsdT10LnktZS55LGM9cypzK3UqdTtjPyhpPWUucituLnIsYT10LnIrbi5yLChpKj1pKT4oYSo9YSk/KHI9KGMrYS1pKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLGEvYy1yKnIpKSxuLng9dC54LXIqcy1vKnUsbi55PXQueS1yKnUrbypzKToocj0oYytpLWEpLygyKmMpLG89TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS9jLXIqcikpLG4ueD1lLngrcipzLW8qdSxuLnk9ZS55K3IqdStvKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gc2QodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiB1ZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLG89KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBjZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gbGQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxvLGEscyx1LGMsbCxmO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihlLng9LShuPXRbMV0pLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7YWQobixlLHI9dFsyXSksZT1uZXcgY2QoZSksbj1uZXcgY2Qobikscj1uZXcgY2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe2FkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBjZChyKSx1PW4ubmV4dCxjPWUucHJldmlvdXMsbD1uLl8ucixmPWUuXy5yO2Rve2lmKGw8PWYpe2lmKHNkKHUuXyxyLl8pKXtlLm5leHQ9bj11LG4ucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1sKz11Ll8ucix1PXUubmV4dH1lbHNle2lmKHNkKGMuXyxyLl8pKXsoZT1jKS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWYrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUodSE9PWMubmV4dCk7Zm9yKHIucHJldmlvdXM9ZSxyLm5leHQ9bixlLm5leHQ9bi5wcmV2aW91cz1uPXIsbz11ZChlKTsocj1yLm5leHQpIT09bjspKGE9dWQocikpPG8mJihlPXIsbz1hKTtuPWUubmV4dH1mb3IoZT1bbi5fXSxyPW47KHI9ci5uZXh0KSE9PW47KWUucHVzaChyLl8pO2ZvcihyPSRoKGUpLHM9MDtzPGk7KytzKShlPXRbc10pLngtPXIueCxlLnktPXIueTtyZXR1cm4gci5yfXZhciBmZD1mdW5jdGlvbih0KXtyZXR1cm4gbGQodCksdH07ZnVuY3Rpb24gaGQodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIGRkKCl7cmV0dXJuIDB9dmFyIHBkPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gbWQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX12YXIgeWQ9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9MSxuPTEscj1kZDtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9ZS8yLGkueT1uLzIsdD9pLmVhY2hCZWZvcmUodmQodCkpLmVhY2hBZnRlcihnZChyLC41KSkuZWFjaEJlZm9yZShiZCgxKSk6aS5lYWNoQmVmb3JlKHZkKG1kKSkuZWFjaEFmdGVyKGdkKGRkLDEpKS5lYWNoQWZ0ZXIoZ2QocixpLnIvTWF0aC5taW4oZSxuKSkpLmVhY2hCZWZvcmUoYmQoTWF0aC5taW4oZSxuKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09KG49ZSk/bnVsbDpoZChuKSxpKTp0O3ZhciBufSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxpKTpbZSxuXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGkpOnJ9LGl9O2Z1bmN0aW9uIHZkKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVufHwoZS5yPU1hdGgubWF4KDAsK3QoZSl8fDApKX19ZnVuY3Rpb24gZ2QodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYocj1uLmNoaWxkcmVuKXt2YXIgcixpLG8sYT1yLmxlbmd0aCxzPXQobikqZXx8MDtpZihzKWZvcihpPTA7aTxhOysraSlyW2ldLnIrPXM7aWYobz1sZChyKSxzKWZvcihpPTA7aTxhOysraSlyW2ldLnItPXM7bi5yPW8rc319fWZ1bmN0aW9uIGJkKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1lLnBhcmVudDtlLnIqPXQsbiYmKGUueD1uLngrdCplLngsZS55PW4ueSt0KmUueSl9fXZhciBfZD1mdW5jdGlvbih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9LHdkPWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLHU9YS5sZW5ndGgsYz10LnZhbHVlJiYoci1lKS90LnZhbHVlOysrczx1Oykobz1hW3NdKS55MD1uLG8ueTE9aSxvLngwPWUsby54MT1lKz1vLnZhbHVlKmN9LHhkPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEsbj0wLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgbz1pLmhlaWdodCsxO3JldHVybiBpLngwPWkueTA9bixpLngxPXQsaS55MT1lL28saS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3IuY2hpbGRyZW4mJndkKHIsci54MCx0KihyLmRlcHRoKzEpL2Usci54MSx0KihyLmRlcHRoKzIpL2UpO3ZhciBpPXIueDAsbz1yLnkwLGE9ci54MS1uLHM9ci55MS1uO2E8aSYmKGk9YT0oaSthKS8yKSxzPG8mJihvPXM9KG8rcykvMiksci54MD1pLHIueTA9byxyLngxPWEsci55MT1zfX0oZSxvKSksciYmaS5lYWNoQmVmb3JlKF9kKSxpfXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhdCxpKTpyfSxpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K25bMF0sZT0rblsxXSxpKTpbdCxlXX0saS5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGkpOm59LGl9LFNkPSIkIixFZD17ZGVwdGg6LTF9LENkPXt9O2Z1bmN0aW9uIE9kKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFRkKHQpe3JldHVybiB0LnBhcmVudElkfXZhciBrZD1mdW5jdGlvbigpe3ZhciB0PU9kLGU9VGQ7ZnVuY3Rpb24gbihuKXt2YXIgcixpLG8sYSxzLHUsYyxsPW4ubGVuZ3RoLGY9bmV3IEFycmF5KGwpLGg9e307Zm9yKGk9MDtpPGw7KytpKXM9ZltpXT1uZXcgWmgocj1uW2ldKSxudWxsIT0odT10KHIsaSxuKSkmJih1Kz0iIikmJihoW2M9U2QrKHMuaWQ9dSldPWMgaW4gaD9DZDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1mW2ldLG51bGwhPSh1PWUobltpXSxpLG4pKSYmKHUrPSIiKSl7aWYoIShhPWhbU2QrdV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihhPT09Q2QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrdSk7YS5jaGlsZHJlbj9hLmNoaWxkcmVuLnB1c2gocyk6YS5jaGlsZHJlbj1bc10scy5wYXJlbnQ9YX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO289c31pZighbyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihvLnBhcmVudD1FZCxvLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tbH0pLmVhY2hCZWZvcmUoS2gpLG8ucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gb31yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1oZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWhkKHQpLG4pOmV9LG59O2Z1bmN0aW9uIEFkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIGpkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVswXTp0LnR9ZnVuY3Rpb24gSWQodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBNZCh0LGUsbil7dmFyIHI9bi8oZS5pLXQuaSk7ZS5jLT1yLGUucys9bix0LmMrPXIsZS56Kz1uLGUubSs9bn1mdW5jdGlvbiBQZCh0LGUsbil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6bn1mdW5jdGlvbiBOZCh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfU5kLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFpoLnByb3RvdHlwZSk7dmFyIFJkPWZ1bmN0aW9uKCl7dmFyIHQ9QWQsZT0xLG49MSxyPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGksbyxhPW5ldyBOZCh0LDApLHM9W2FdO2U9cy5wb3AoKTspaWYocj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KG89ci5sZW5ndGgpLGk9by0xO2k+PTA7LS1pKXMucHVzaChuPWUuY2hpbGRyZW5baV09bmV3IE5kKHJbaV0saSkpLG4ucGFyZW50PWU7cmV0dXJuKGEucGFyZW50PW5ldyBOZChudWxsLDApKS5jaGlsZHJlbj1bYV0sYX0oaSk7aWYodS5lYWNoQWZ0ZXIobyksdS5wYXJlbnQubT0tdS56LHUuZWFjaEJlZm9yZShhKSxyKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksbD1pLGY9aTtpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PGMueCYmKGM9dCksdC54PmwueCYmKGw9dCksdC5kZXB0aD5mLmRlcHRoJiYoZj10KX0pO3ZhciBoPWM9PT1sPzE6dChjLGwpLzIsZD1oLWMueCxwPWUvKGwueCtoK2QpLG09bi8oZi5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueD0odC54K2QpKnAsdC55PXQuZGVwdGgqbX0pfXJldHVybiBpfWZ1bmN0aW9uIG8oZSl7dmFyIG49ZS5jaGlsZHJlbixyPWUucGFyZW50LmNoaWxkcmVuLGk9ZS5pP3JbZS5pLTFdOm51bGw7aWYobil7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspKGU9aVtvXSkueis9bixlLm0rPW4sbis9ZS5zKyhyKz1lLmMpfShlKTt2YXIgbz0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyhlLno9aS56K3QoZS5fLGkuXyksZS5tPWUuei1vKTplLno9b31lbHNlIGkmJihlLno9aS56K3QoZS5fLGkuXykpO2UucGFyZW50LkE9ZnVuY3Rpb24oZSxuLHIpe2lmKG4pe2Zvcih2YXIgaSxvPWUsYT1lLHM9bix1PW8ucGFyZW50LmNoaWxkcmVuWzBdLGM9by5tLGw9YS5tLGY9cy5tLGg9dS5tO3M9SWQocyksbz1qZChvKSxzJiZvOyl1PWpkKHUpLChhPUlkKGEpKS5hPWUsKGk9cy56K2Ytby56LWMrdChzLl8sby5fKSk+MCYmKE1kKFBkKHMsZSxyKSxlLGkpLGMrPWksbCs9aSksZis9cy5tLGMrPW8ubSxoKz11Lm0sbCs9YS5tO3MmJiFJZChhKSYmKGEudD1zLGEubSs9Zi1sKSxvJiYhamQodSkmJih1LnQ9byx1Lm0rPWMtaCxyPWUpfXJldHVybiByfShlLGksZS5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gYSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcyh0KXt0LngqPWUsdC55PXQuZGVwdGgqbn1yZXR1cm4gaS5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSExLGU9K3RbMF0sbj0rdFsxXSxpKTpyP251bGw6W2Usbl19LGkubm9kZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITAsZT0rdFswXSxuPSt0WzFdLGkpOnI/W2Usbl06bnVsbH0saX0sRGQ9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIG8sYT10LmNoaWxkcmVuLHM9LTEsdT1hLmxlbmd0aCxjPXQudmFsdWUmJihpLW4pL3QudmFsdWU7KytzPHU7KShvPWFbc10pLngwPWUsby54MT1yLG8ueTA9bixvLnkxPW4rPW8udmFsdWUqY30sRmQ9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIExkKHQsZSxuLHIsaSxvKXtmb3IodmFyIGEscyx1LGMsbCxmLGgsZCxwLG0seSx2PVtdLGc9ZS5jaGlsZHJlbixiPTAsXz0wLHc9Zy5sZW5ndGgseD1lLnZhbHVlO2I8dzspe3U9aS1uLGM9by1yO2Rve2w9Z1tfKytdLnZhbHVlfXdoaWxlKCFsJiZfPHcpO2ZvcihmPWg9bCx5PWwqbCoobT1NYXRoLm1heChjL3UsdS9jKS8oeCp0KSkscD1NYXRoLm1heChoL3kseS9mKTtfPHc7KytfKXtpZihsKz1zPWdbX10udmFsdWUsczxmJiYoZj1zKSxzPmgmJihoPXMpLHk9bCpsKm0sKGQ9TWF0aC5tYXgoaC95LHkvZikpPnApe2wtPXM7YnJlYWt9cD1kfXYucHVzaChhPXt2YWx1ZTpsLGRpY2U6dTxjLGNoaWxkcmVuOmcuc2xpY2UoYixfKX0pLGEuZGljZT93ZChhLG4scixpLHg/cis9YypsL3g6byk6RGQoYSxuLHIseD9uKz11KmwveDppLG8pLHgtPWwsYj1ffXJldHVybiB2fXZhciBWZD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXtMZChlLHQsbixyLGksbyl9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oRmQpLHpkPWZ1bmN0aW9uKCl7dmFyIHQ9VmQsZT0hMSxuPTEscj0xLGk9WzBdLG89ZGQsYT1kZCxzPWRkLHU9ZGQsYz1kZDtmdW5jdGlvbiBsKHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPW4sdC55MT1yLHQuZWFjaEJlZm9yZShmKSxpPVswXSxlJiZ0LmVhY2hCZWZvcmUoX2QpLHR9ZnVuY3Rpb24gZihlKXt2YXIgbj1pW2UuZGVwdGhdLHI9ZS54MCtuLGw9ZS55MCtuLGY9ZS54MS1uLGg9ZS55MS1uO2Y8ciYmKHI9Zj0ocitmKS8yKSxoPGwmJihsPWg9KGwraCkvMiksZS54MD1yLGUueTA9bCxlLngxPWYsZS55MT1oLGUuY2hpbGRyZW4mJihuPWlbZS5kZXB0aCsxXT1vKGUpLzIscis9YyhlKS1uLGwrPWEoZSktbixmLT1zKGUpLW4saC09dShlKS1uLGY8ciYmKHI9Zj0ocitmKS8yKSxoPGwmJihsPWg9KGwraCkvMiksdChlLHIsbCxmLGgpKX1yZXR1cm4gbC5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsbCk6ZX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0WzBdLHI9K3RbMV0sbCk6W24scl19LGwudGlsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1oZChlKSxsKTp0fSxsLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOmwucGFkZGluZ0lubmVyKCl9LGwucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGwpOm99LGwucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ1RvcCh0KS5wYWRkaW5nUmlnaHQodCkucGFkZGluZ0JvdHRvbSh0KS5wYWRkaW5nTGVmdCh0KTpsLnBhZGRpbmdUb3AoKX0sbC5wYWRkaW5nVG9wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGwpOmF9LGwucGFkZGluZ1JpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGwpOnN9LGwucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxsKTp1fSxsLnBhZGRpbmdMZWZ0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cGQoK3QpLGwpOmN9LGx9LEJkPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG8sYSxzPXQuY2hpbGRyZW4sdT1zLmxlbmd0aCxjPW5ldyBBcnJheSh1KzEpO2ZvcihjWzBdPWE9bz0wO288dTsrK28pY1tvKzFdPWErPXNbb10udmFsdWU7IWZ1bmN0aW9uIHQoZSxuLHIsaSxvLGEsdSl7aWYoZT49bi0xKXt2YXIgbD1zW2VdO3JldHVybiBsLngwPWksbC55MD1vLGwueDE9YSx2b2lkKGwueTE9dSl9Zm9yKHZhciBmPWNbZV0saD1yLzIrZixkPWUrMSxwPW4tMTtkPHA7KXt2YXIgbT1kK3A+Pj4xO2NbbV08aD9kPW0rMTpwPW19aC1jW2QtMV08Y1tkXS1oJiZlKzE8ZCYmLS1kO3ZhciB5PWNbZF0tZix2PXIteTtpZihhLWk+dS1vKXt2YXIgZz0oaSp2K2EqeSkvcjt0KGUsZCx5LGksbyxnLHUpLHQoZCxuLHYsZyxvLGEsdSl9ZWxzZXt2YXIgYj0obyp2K3UqeSkvcjt0KGUsZCx5LGksbyxhLGIpLHQoZCxuLHYsaSxiLGEsdSl9fSgwLHUsdC52YWx1ZSxlLG4scixpKX0sVWQ9ZnVuY3Rpb24odCxlLG4scixpKXsoMSZ0LmRlcHRoP0RkOndkKSh0LGUsbixyLGkpfSxIZD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxvKXtpZigoYT10Ll9zcXVhcmlmeSkmJmEucmF0aW89PT1lKWZvcih2YXIgYSxzLHUsYyxsLGY9LTEsaD1hLmxlbmd0aCxkPXQudmFsdWU7KytmPGg7KXtmb3IodT0ocz1hW2ZdKS5jaGlsZHJlbixjPXMudmFsdWU9MCxsPXUubGVuZ3RoO2M8bDsrK2Mpcy52YWx1ZSs9dVtjXS52YWx1ZTtzLmRpY2U/d2QocyxuLHIsaSxyKz0oby1yKSpzLnZhbHVlL2QpOkRkKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxvKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9YT1MZChlLHQsbixyLGksbyksYS5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KEZkKSxxZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxyPXQubGVuZ3RoLGk9dFtyLTFdLG89MDsrK248cjspbys9KGU9aSlbMV0qKGk9dFtuXSlbMF0tZVswXSppWzFdO3JldHVybiBvLzJ9LEdkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9LTEsaT10Lmxlbmd0aCxvPTAsYT0wLHM9dFtpLTFdLHU9MDsrK3I8aTspdSs9bj0oZT1zKVswXSoocz10W3JdKVsxXS1zWzBdKmVbMV0sbys9KGVbMF0rc1swXSkqbixhKz0oZVsxXStzWzFdKSpuO3JldHVybltvLyh1Kj0zKSxhL3VdfSxXZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSktKGVbMV0tdFsxXSkqKG5bMF0tdFswXSl9O2Z1bmN0aW9uIFFkKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIFlkKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPVswLDFdLHI9MixpPTI7aTxlOysraSl7Zm9yKDtyPjEmJldkKHRbbltyLTJdXSx0W25bci0xXV0sdFtpXSk8PTA7KS0tcjtuW3IrK109aX1yZXR1cm4gbi5zbGljZSgwLHIpfXZhciBLZD1mdW5jdGlvbih0KXtpZigobj10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgZSxuLHI9bmV3IEFycmF5KG4pLGk9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyW2VdPVsrdFtlXVswXSwrdFtlXVsxXSxlXTtmb3Ioci5zb3J0KFFkKSxlPTA7ZTxuOysrZSlpW2VdPVtyW2VdWzBdLC1yW2VdWzFdXTt2YXIgbz1ZZChyKSxhPVlkKGkpLHM9YVswXT09PW9bMF0sdT1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2ZvcihlPW8ubGVuZ3RoLTE7ZT49MDstLWUpYy5wdXNoKHRbcltvW2VdXVsyXV0pO2ZvcihlPStzO2U8YS5sZW5ndGgtdTsrK2UpYy5wdXNoKHRbclthW2VdXVsyXV0pO3JldHVybiBjfSxaZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsbz10W2ktMV0sYT1lWzBdLHM9ZVsxXSx1PW9bMF0sYz1vWzFdLGw9ITEsZj0wO2Y8aTsrK2Ypbj0obz10W2ZdKVswXSwocj1vWzFdKT5zIT1jPnMmJmE8KHUtbikqKHMtcikvKGMtcikrbiYmKGw9IWwpLHU9bixjPXI7cmV0dXJuIGx9LFhkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9LTEsaT10Lmxlbmd0aCxvPXRbaS0xXSxhPW9bMF0scz1vWzFdLHU9MDsrK3I8aTspZT1hLG49cyxlLT1hPShvPXRbcl0pWzBdLG4tPXM9b1sxXSx1Kz1NYXRoLnNxcnQoZSplK24qbik7cmV0dXJuIHV9LCRkPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LEpkPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCksdHA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgbztpZihudWxsIT1yKW89cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsbz0yKmUoKS0xLGk9cipyK28qb313aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKm8qTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCksZXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9dHAuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLG5wPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSxycD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49bnAuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLGlwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSxvcD1BcnJheS5wcm90b3R5cGUsYXA9b3AubWFwLHNwPW9wLnNsaWNlLHVwPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIGNwKHQpe3ZhciBlPUtvKCksbj1bXSxyPXVwO2Z1bmN0aW9uIGkoaSl7dmFyIG89aSsiIixhPWUuZ2V0KG8pO2lmKCFhKXtpZihyIT09dXApcmV0dXJuIHI7ZS5zZXQobyxhPW4ucHVzaChpKSl9cmV0dXJuIHRbKGEtMSkldC5sZW5ndGhdfXJldHVybiB0PW51bGw9PXQ/W106c3AuY2FsbCh0KSxpLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5zbGljZSgpO249W10sZT1LbygpO2Zvcih2YXIgcixvLGE9LTEscz10Lmxlbmd0aDsrK2E8czspZS5oYXMobz0ocj10W2FdKSsiIil8fGUuc2V0KG8sbi5wdXNoKHIpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zcC5jYWxsKGUpLGkpOnQuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNwKCkuZG9tYWluKG4pLnJhbmdlKHQpLnVua25vd24ocil9LGl9ZnVuY3Rpb24gbHAoKXt2YXIgdCxlLG49Y3AoKS51bmtub3duKHZvaWQgMCkscj1uLmRvbWFpbixpPW4ucmFuZ2Usbz1bMCwxXSxhPSExLHM9MCx1PTAsYz0uNTtmdW5jdGlvbiBsKCl7dmFyIG49cigpLmxlbmd0aCxsPW9bMV08b1swXSxmPW9bbC0wXSxoPW9bMS1sXTt0PShoLWYpL01hdGgubWF4KDEsbi1zKzIqdSksYSYmKHQ9TWF0aC5mbG9vcih0KSksZis9KGgtZi10KihuLXMpKSpjLGU9dCooMS1zKSxhJiYoZj1NYXRoLnJvdW5kKGYpLGU9TWF0aC5yb3VuZChlKSk7dmFyIGQ9eChuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGYrdCplfSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1bK3RbMF0sK3RbMV1dLGwoKSk6by5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG89Wyt0WzBdLCt0WzFdXSxhPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LGwoKSk6YX0sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxsKCkpOnN9LG4ucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTpzfSxuLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6dX0sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxwKCkuZG9tYWluKHIoKSkucmFuZ2Uobykucm91bmQoYSkucGFkZGluZ0lubmVyKHMpLnBhZGRpbmdPdXRlcih1KS5hbGlnbihjKX0sbCgpfWZ1bmN0aW9uIGZwKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIG49ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdChuKCkpfSxlfShscCgpLnBhZGRpbmdJbm5lcigxKSl9dmFyIGhwPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sZHA9ZnVuY3Rpb24odCl7cmV0dXJuK3R9LHBwPVswLDFdO2Z1bmN0aW9uIG1wKHQsZSl7cmV0dXJuKGUtPXQ9K3QpP2Z1bmN0aW9uKG4pe3JldHVybihuLXQpL2V9OmhwKGUpfWZ1bmN0aW9uIHlwKHQsZSxuLHIpe3ZhciBpPXRbMF0sbz10WzFdLGE9ZVswXSxzPWVbMV07cmV0dXJuIG88aT8oaT1uKG8saSksYT1yKHMsYSkpOihpPW4oaSxvKSxhPXIoYSxzKSksZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0KSl9fWZ1bmN0aW9uIHZwKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKHRbaV08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPW4odFtzXSx0W3MrMV0pLGFbc109cihlW3NdLGVbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXUodCxlLDEsaSktMTtyZXR1cm4gYVtuXShvW25dKGUpKX19ZnVuY3Rpb24gZ3AodCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkucmFuZ2UodC5yYW5nZSgpKS5pbnRlcnBvbGF0ZSh0LmludGVycG9sYXRlKCkpLmNsYW1wKHQuY2xhbXAoKSl9ZnVuY3Rpb24gYnAodCxlKXt2YXIgbixyLGksbz1wcCxhPXBwLHM9Wm4sdT0hMTtmdW5jdGlvbiBjKCl7cmV0dXJuIG49TWF0aC5taW4oby5sZW5ndGgsYS5sZW5ndGgpPjI/dnA6eXAscj1pPW51bGwsbH1mdW5jdGlvbiBsKGUpe3JldHVybihyfHwocj1uKG8sYSx1P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoZT0rZSxuPStuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ8PWU/MDp0Pj1uPzE6cih0KX19fSh0KTp0LHMpKSkoK2UpfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4oaXx8KGk9bihhLG8sbXAsdT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP2U6dD49MT9uOnIodCl9fX0oZSk6ZSkpKSgrdCl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWFwLmNhbGwodCxkcCksYygpKTpvLnNsaWNlKCl9LGwucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9c3AuY2FsbCh0KSxjKCkpOmEuc2xpY2UoKX0sbC5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPXNwLmNhbGwodCkscz1YbixjKCl9LGwuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ISF0LGMoKSk6dX0sbC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGMoKSk6c30sYygpfXZhciBfcD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT10WzBdLG89dFt0Lmxlbmd0aC0xXSxhPWsoaSxvLG51bGw9PWU/MTA6ZSk7c3dpdGNoKChuPU1zKG51bGw9PW4/IixmIjpuKSkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyhpKSxNYXRoLmFicyhvKSk7cmV0dXJuIG51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPVdzKGEscykpfHwobi5wcmVjaXNpb249ciksRnMobixzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4ocj1RcyhhLE1hdGgubWF4KE1hdGguYWJzKGkpLE1hdGguYWJzKG8pKSkpfHwobi5wcmVjaXNpb249ci0oImUiPT09bi50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPW4ucHJlY2lzaW9ufHxpc05hTihyPUdzKGEpKXx8KG4ucHJlY2lzaW9uPXItMiooIiUiPT09bi50eXBlKSl9cmV0dXJuIERzKG4pfTtmdW5jdGlvbiB3cCh0KXt2YXIgZT10LmRvbWFpbjtyZXR1cm4gdC50aWNrcz1mdW5jdGlvbih0KXt2YXIgbj1lKCk7cmV0dXJuIE8oblswXSxuW24ubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBfcChlKCksdCxuKX0sdC5uaWNlPWZ1bmN0aW9uKG4pe251bGw9PW4mJihuPTEwKTt2YXIgcixpPWUoKSxvPTAsYT1pLmxlbmd0aC0xLHM9aVtvXSx1PWlbYV07cmV0dXJuIHU8cyYmKHI9cyxzPXUsdT1yLHI9byxvPWEsYT1yKSwocj1UKHMsdSxuKSk+MD9yPVQocz1NYXRoLmZsb29yKHMvcikqcix1PU1hdGguY2VpbCh1L3IpKnIsbik6cjwwJiYocj1UKHM9TWF0aC5jZWlsKHMqcikvcix1PU1hdGguZmxvb3IodSpyKS9yLG4pKSxyPjA/KGlbb109TWF0aC5mbG9vcihzL3IpKnIsaVthXT1NYXRoLmNlaWwodS9yKSpyLGUoaSkpOnI8MCYmKGlbb109TWF0aC5jZWlsKHMqcikvcixpW2FdPU1hdGguZmxvb3IodSpyKS9yLGUoaSkpLHR9LHR9ZnVuY3Rpb24geHAoKXt2YXIgdD1icChtcCxHbik7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBncCh0LHhwKCkpfSx3cCh0KX1mdW5jdGlvbiBTcCgpe3ZhciB0PVswLDFdO2Z1bmN0aW9uIGUodCl7cmV0dXJuK3R9cmV0dXJuIGUuaW52ZXJ0PWUsZS5kb21haW49ZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hcC5jYWxsKG4sZHApLGUpOnQuc2xpY2UoKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFNwKCkuZG9tYWluKHQpfSx3cChlKX12YXIgRXA9ZnVuY3Rpb24odCxlKXt2YXIgbixyPTAsaT0odD10LnNsaWNlKCkpLmxlbmd0aC0xLG89dFtyXSxhPXRbaV07cmV0dXJuIGE8byYmKG49cixyPWksaT1uLG49byxvPWEsYT1uKSx0W3JdPWUuZmxvb3IobyksdFtpXT1lLmNlaWwoYSksdH07ZnVuY3Rpb24gQ3AodCxlKXtyZXR1cm4oZT1NYXRoLmxvZyhlL3QpKT9mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5sb2cobi90KS9lfTpocChlKX1mdW5jdGlvbiBPcCh0LGUpe3JldHVybiB0PDA/ZnVuY3Rpb24obil7cmV0dXJuLU1hdGgucG93KC1lLG4pKk1hdGgucG93KC10LDEtbil9OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlLG4pKk1hdGgucG93KHQsMS1uKX19ZnVuY3Rpb24gVHAodCl7cmV0dXJuIGlzRmluaXRlKHQpPysoIjFlIit0KTp0PDA/MDp0fWZ1bmN0aW9uIGtwKHQpe3JldHVybiAxMD09PXQ/VHA6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19ZnVuY3Rpb24gQXAodCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfWZ1bmN0aW9uIGpwKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tdCgtZSl9fWZ1bmN0aW9uIElwKCl7dmFyIHQ9YnAoQ3AsT3ApLmRvbWFpbihbMSwxMF0pLGU9dC5kb21haW4sbj0xMCxyPUFwKDEwKSxpPWtwKDEwKTtmdW5jdGlvbiBvKCl7cmV0dXJuIHI9QXAobiksaT1rcChuKSxlKClbMF08MCYmKHI9anAociksaT1qcChpKSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LG8oKSk6bn0sdC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUodCksbygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG8sYT1lKCkscz1hWzBdLHU9YVthLmxlbmd0aC0xXTsobz11PHMpJiYoaD1zLHM9dSx1PWgpO3ZhciBjLGwsZixoPXIocyksZD1yKHUpLHA9bnVsbD09dD8xMDordCxtPVtdO2lmKCEobiUxKSYmZC1oPHApe2lmKGg9TWF0aC5yb3VuZChoKS0xLGQ9TWF0aC5yb3VuZChkKSsxLHM+MCl7Zm9yKDtoPGQ7KytoKWZvcihsPTEsYz1pKGgpO2w8bjsrK2wpaWYoISgoZj1jKmwpPHMpKXtpZihmPnUpYnJlYWs7bS5wdXNoKGYpfX1lbHNlIGZvcig7aDxkOysraClmb3IobD1uLTEsYz1pKGgpO2w+PTE7LS1sKWlmKCEoKGY9YypsKTxzKSl7aWYoZj51KWJyZWFrO20ucHVzaChmKX19ZWxzZSBtPU8oaCxkLE1hdGgubWluKGQtaCxwKSkubWFwKGkpO3JldHVybiBvP20ucmV2ZXJzZSgpOm19LHQudGlja0Zvcm1hdD1mdW5jdGlvbihlLG8pe2lmKG51bGw9PW8mJihvPTEwPT09bj8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBvJiYobz1EcyhvKSksZT09PTEvMClyZXR1cm4gbztudWxsPT1lJiYoZT0xMCk7dmFyIGE9TWF0aC5tYXgoMSxuKmUvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQvaShNYXRoLnJvdW5kKHIodCkpKTtyZXR1cm4gZSpuPG4tLjUmJihlKj1uKSxlPD1hP28odCk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShFcChlKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBpKE1hdGguZmxvb3Iocih0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBpKE1hdGguY2VpbChyKHQpKSl9fSkpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3AodCxJcCgpLmJhc2UobikpfSx0fWZ1bmN0aW9uIE1wKHQsZSl7cmV0dXJuIHQ8MD8tTWF0aC5wb3coLXQsZSk6TWF0aC5wb3codCxlKX1mdW5jdGlvbiBQcCgpe3ZhciB0PTEsZT1icChmdW5jdGlvbihlLG4pe3JldHVybihuPU1wKG4sdCktKGU9TXAoZSx0KSkpP2Z1bmN0aW9uKHIpe3JldHVybihNcChyLHQpLWUpL259OmhwKG4pfSxmdW5jdGlvbihlLG4pe3JldHVybiBuPU1wKG4sdCktKGU9TXAoZSx0KSksZnVuY3Rpb24ocil7cmV0dXJuIE1wKGUrbipyLDEvdCl9fSksbj1lLmRvbWFpbjtyZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxuKG4oKSkpOnR9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBncChlLFBwKCkuZXhwb25lbnQodCkpfSx3cChlKX1mdW5jdGlvbiBOcCgpe3JldHVybiBQcCgpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBScCgpe3ZhciB0PVtdLGU9W10sbj1bXTtmdW5jdGlvbiBpKCl7dmFyIHI9MCxpPU1hdGgubWF4KDEsZS5sZW5ndGgpO2ZvcihuPW5ldyBBcnJheShpLTEpOysrcjxpOyluW3ItMV09SSh0LHIvaSk7cmV0dXJuIG99ZnVuY3Rpb24gbyh0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIGVbdShuLHQpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24ocil7dmFyIGk9ZS5pbmRleE9mKHIpO3JldHVybiBpPDA/W05hTixOYU5dOltpPjA/bltpLTFdOnRbMF0saTxuLmxlbmd0aD9uW2ldOnRbdC5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W107Zm9yKHZhciBuLG89MCxhPWUubGVuZ3RoO288YTsrK28pbnVsbD09KG49ZVtvXSl8fGlzTmFOKG49K24pfHx0LnB1c2gobik7cmV0dXJuIHQuc29ydChyKSxpKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9c3AuY2FsbCh0KSxpKCkpOmUuc2xpY2UoKX0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbi5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUnAoKS5kb21haW4odCkucmFuZ2UoZSl9LG99ZnVuY3Rpb24gRHAoKXt2YXIgdD0wLGU9MSxuPTEscj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyh0KXtpZih0PD10KXJldHVybiBpW3Uocix0LDAsbildfWZ1bmN0aW9uIGEoKXt2YXIgaT0tMTtmb3Iocj1uZXcgQXJyYXkobik7KytpPG47KXJbaV09KChpKzEpKmUtKGktbikqdCkvKG4rMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0sYSgpKTpbdCxlXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0oaT1zcC5jYWxsKHQpKS5sZW5ndGgtMSxhKCkpOmkuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9aS5pbmRleE9mKG8pO3JldHVybiBhPDA/W05hTixOYU5dOmE8MT9bdCxyWzBdXTphPj1uP1tyW24tMV0sZV06W3JbYS0xXSxyW2FdXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIERwKCkuZG9tYWluKFt0LGVdKS5yYW5nZShpKX0sd3Aobyl9ZnVuY3Rpb24gRnAoKXt2YXIgdD1bLjVdLGU9WzAsMV0sbj0xO2Z1bmN0aW9uIHIocil7aWYocjw9cilyZXR1cm4gZVt1KHQsciwwLG4pXX1yZXR1cm4gci5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9c3AuY2FsbChpKSxuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoLTEpLHIpOnQuc2xpY2UoKX0sci5yYW5nZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zcC5jYWxsKGkpLG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgtMSkscik6ZS5zbGljZSgpfSxyLmludmVydEV4dGVudD1mdW5jdGlvbihuKXt2YXIgcj1lLmluZGV4T2Yobik7cmV0dXJuW3Rbci0xXSx0W3JdXX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEZwKCkuZG9tYWluKHQpLnJhbmdlKGUpfSxyfXZhciBMcD1uZXcgRGF0ZSxWcD1uZXcgRGF0ZTtmdW5jdGlvbiB6cCh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKG4pe3JldHVybiB0KG49bmV3IERhdGUobi0xKSksZShuLDEpLHQobiksbn0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1pKHQpLG49aS5jZWlsKHQpO3JldHVybiB0LWU8bi10P2U6bn0saS5vZmZzZXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh0PW5ldyBEYXRlKCt0KSxudWxsPT1uPzE6TWF0aC5mbG9vcihuKSksdH0saS5yYW5nZT1mdW5jdGlvbihuLHIsbyl7dmFyIGEscz1bXTtpZihuPWkuY2VpbChuKSxvPW51bGw9PW8/MTpNYXRoLmZsb29yKG8pLCEobjxyJiZvPjApKXJldHVybiBzO2Rve3MucHVzaChhPW5ldyBEYXRlKCtuKSksZShuLG8pLHQobil9d2hpbGUoYTxuJiZuPHIpO3JldHVybiBzfSxpLmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4genAoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpaWYocjwwKWZvcig7KytyPD0wOylmb3IoO2UodCwtMSksIW4odCk7KTtlbHNlIGZvcig7LS1yPj0wOylmb3IoO2UodCwxKSwhbih0KTspO30pfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBMcC5zZXRUaW1lKCtlKSxWcC5zZXRUaW1lKCtyKSx0KExwKSx0KFZwKSxNYXRoLmZsb29yKG4oTHAsVnApKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgQnA9enAoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KTtCcC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3pwKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRUaW1lKCtlK24qdCl9LGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pOkJwOm51bGx9O3ZhciBVcD1CcCxIcD1CcC5yYW5nZSxxcD02ZTQsR3A9NjA0OGU1LFdwPXpwKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSgxZTMqTWF0aC5mbG9vcih0LzFlMykpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxRcD1XcCxZcD1XcC5yYW5nZSxLcD16cChmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L3FwKSpxcCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2UqcXApfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL3FwfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxacD1LcCxYcD1LcC5yYW5nZSwkcD16cChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkqcXAlMzZlNTtlPDAmJihlKz0zNmU1KSx0LnNldFRpbWUoMzZlNSpNYXRoLmZsb29yKCgrdC1lKS8zNmU1KStlKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksSnA9JHAsdG09JHAucmFuZ2UsZW09enAoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqcXApLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLG5tPWVtLHJtPWVtLnJhbmdlO2Z1bmN0aW9uIGltKHQpe3JldHVybiB6cChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnFwKS9HcH0pfXZhciBvbT1pbSgwKSxhbT1pbSgxKSxzbT1pbSgyKSx1bT1pbSgzKSxjbT1pbSg0KSxsbT1pbSg1KSxmbT1pbSg2KSxobT1vbS5yYW5nZSxkbT1hbS5yYW5nZSxwbT1zbS5yYW5nZSxtbT11bS5yYW5nZSx5bT1jbS5yYW5nZSx2bT1sbS5yYW5nZSxnbT1mbS5yYW5nZSxibT16cChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRNb250aCgpLXQuZ2V0TW9udGgoKSsxMiooZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxfbT1ibSx3bT1ibS5yYW5nZSx4bT16cChmdW5jdGlvbih0KXt0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0pO3htLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/enAoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSk6bnVsbH07dmFyIFNtPXhtLEVtPXhtLnJhbmdlLENtPXpwKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnFwKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9xcH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTWludXRlcygpfSksT209Q20sVG09Q20ucmFuZ2Usa209enAoZnVuY3Rpb24odCl7dC5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSksQW09a20sam09a20ucmFuZ2UsSW09enAoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSksTW09SW0sUG09SW0ucmFuZ2U7ZnVuY3Rpb24gTm0odCl7cmV0dXJuIHpwKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKS0oZS5nZXRVVENEYXkoKSs3LXQpJTcpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvR3B9KX12YXIgUm09Tm0oMCksRG09Tm0oMSksRm09Tm0oMiksTG09Tm0oMyksVm09Tm0oNCksem09Tm0oNSksQm09Tm0oNiksVW09Um0ucmFuZ2UsSG09RG0ucmFuZ2UscW09Rm0ucmFuZ2UsR209TG0ucmFuZ2UsV209Vm0ucmFuZ2UsUW09em0ucmFuZ2UsWW09Qm0ucmFuZ2UsS209enAoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksWm09S20sWG09S20ucmFuZ2UsJG09enAoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KTskbS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP3pwKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciBKbT0kbSx0eT0kbS5yYW5nZTtmdW5jdGlvbiBleSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gbnkodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gcnkodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gaXkodCl7dmFyIGU9dC5kYXRlVGltZSxuPXQuZGF0ZSxyPXQudGltZSxpPXQucGVyaW9kcyxvPXQuZGF5cyxhPXQuc2hvcnREYXlzLHM9dC5tb250aHMsdT10LnNob3J0TW9udGhzLGM9eXkoaSksbD12eShpKSxmPXl5KG8pLGg9dnkobyksZD15eShhKSxwPXZ5KGEpLG09eXkocykseT12eShzKSx2PXl5KHUpLGc9dnkodSksYj17YTpmdW5jdGlvbih0KXtyZXR1cm4gYVt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gb1t0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBzW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOkZ5LGU6RnksZjpVeSxIOkx5LEk6Vnksajp6eSxMOkJ5LG06SHksTTpxeSxwOmZ1bmN0aW9uKHQpe3JldHVybiBpWysodC5nZXRIb3VycygpPj0xMildfSxROmd2LHM6YnYsUzpHeSx1Old5LFU6UXksVjpZeSx3Okt5LFc6WnkseDpudWxsLFg6bnVsbCx5Olh5LFk6JHksWjpKeSwiJSI6dnZ9LF89e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDp0dixlOnR2LGY6b3YsSDpldixJOm52LGo6cnYsTDppdixtOmF2LE06c3YscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0sUTpndixzOmJ2LFM6dXYsdTpjdixVOmx2LFY6ZnYsdzpodixXOmR2LHg6bnVsbCxYOm51bGwseTpwdixZOm12LFo6eXYsIiUiOnZ2fSx3PXthOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1kLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1wW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEE6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PWhbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUsbil7dmFyIHI9di5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT15W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGM6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBFKHQsZSxuLHIpfSxkOlR5LGU6VHksZjpQeSxIOkF5LEk6QXksajpreSxMOk15LG06T3ksTTpqeSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1jLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LFE6UnksczpEeSxTOkl5LHU6YnksVTpfeSxWOnd5LHc6Z3ksVzp4eSx4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRSh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxyLGUsbil9LHk6RXksWTpTeSxaOkN5LCIlIjpOeX07ZnVuY3Rpb24geCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG8sYT1bXSxzPS0xLHU9MCxjPXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8YzspMzc9PT10LmNoYXJDb2RlQXQocykmJihhLnB1c2godC5zbGljZSh1LHMpKSxudWxsIT0oaT1seVtyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKG89ZVtyXSkmJihyPW8obixpKSksYS5wdXNoKHIpLHU9cysxKTtyZXR1cm4gYS5wdXNoKHQuc2xpY2UodSxzKSksYS5qb2luKCIiKX19ZnVuY3Rpb24gUyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLG89cnkoMTkwMCk7aWYoRShvLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIG8pcmV0dXJuIG5ldyBEYXRlKG8uUSk7aWYoInAiaW4gbyYmKG8uSD1vLkglMTIrMTIqby5wKSwiViJpbiBvKXtpZihvLlY8MXx8by5WPjUzKXJldHVybiBudWxsOyJ3ImluIG98fChvLnc9MSksIloiaW4gbz8ocj0oaT0ocj1ueShyeShvLnkpKSkuZ2V0VVRDRGF5KCkpPjR8fDA9PT1pP0RtLmNlaWwocik6RG0ocikscj1NbS5vZmZzZXQociw3KihvLlYtMSkpLG8ueT1yLmdldFVUQ0Z1bGxZZWFyKCksby5tPXIuZ2V0VVRDTW9udGgoKSxvLmQ9ci5nZXRVVENEYXRlKCkrKG8udys2KSU3KToocj0oaT0ocj1lKHJ5KG8ueSkpKS5nZXREYXkoKSk+NHx8MD09PWk/YW0uY2VpbChyKTphbShyKSxyPW5tLm9mZnNldChyLDcqKG8uVi0xKSksby55PXIuZ2V0RnVsbFllYXIoKSxvLm09ci5nZXRNb250aCgpLG8uZD1yLmdldERhdGUoKSsoby53KzYpJTcpfWVsc2UoIlciaW4gb3x8IlUiaW4gbykmJigidyJpbiBvfHwoby53PSJ1ImluIG8/by51JTc6IlciaW4gbz8xOjApLGk9IloiaW4gbz9ueShyeShvLnkpKS5nZXRVVENEYXkoKTplKHJ5KG8ueSkpLmdldERheSgpLG8ubT0wLG8uZD0iVyJpbiBvPyhvLncrNiklNys3Km8uVy0oaSs1KSU3Om8udys3Km8uVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBvPyhvLkgrPW8uWi8xMDB8MCxvLk0rPW8uWiUxMDAsbnkobykpOmUobyl9fWZ1bmN0aW9uIEUodCxlLG4scil7Zm9yKHZhciBpLG8sYT0wLHM9ZS5sZW5ndGgsdT1uLmxlbmd0aDthPHM7KXtpZihyPj11KXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KGErKykpKXtpZihpPWUuY2hhckF0KGErKyksIShvPXdbaSBpbiBseT9lLmNoYXJBdChhKyspOmldKXx8KHI9byh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4gYi54PXgobixiKSxiLlg9eChyLGIpLGIuYz14KGUsYiksXy54PXgobixfKSxfLlg9eChyLF8pLF8uYz14KGUsXykse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT14KHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVModCs9IiIsZXkpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT14KHQrPSIiLF8pO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPVModCxueSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX19fXZhciBveSxheSxzeSx1eSxjeSxseT17Ii0iOiIiLF86IiAiLDA6IjAifSxmeT0vXlxzKlxkKy8saHk9L14lLyxkeT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gcHkodCxlLG4pe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPG4/bmV3IEFycmF5KG4tbysxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gbXkodCl7cmV0dXJuIHQucmVwbGFjZShkeSwiXFwkJiIpfWZ1bmN0aW9uIHl5KHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChteSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHZ5KHQpe2Zvcih2YXIgZT17fSxuPS0xLHI9dC5sZW5ndGg7KytuPHI7KWVbdFtuXS50b0xvd2VyQ2FzZSgpXT1uO3JldHVybiBlfWZ1bmN0aW9uIGd5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC51PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF95KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5VPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5WPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHh5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5XPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzQpKTtyZXR1cm4gcj8odC55PStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV5KHQsZSxuKXt2YXIgcj1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC55PStyWzBdKygrclswXT42OD8xOTAwOjJlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ3kodCxlLG4pe3ZhciByPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPeSh0LGUsbil7dmFyIHI9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVHkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga3kodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQXkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lkg9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gankodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lk09K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSXkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rMykpO3JldHVybiByPyh0Lkw9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUHkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Lkw9TWF0aC5mbG9vcihyWzBdLzFlMyksbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTnkodCxlLG4pe3ZhciByPWh5LmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByP24rclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gUnkodCxlLG4pe3ZhciByPWZ5LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQuUT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEeSh0LGUsbil7dmFyIHI9ZnkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPTFlMyorclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGeSh0LGUpe3JldHVybiBweSh0LmdldERhdGUoKSxlLDIpfWZ1bmN0aW9uIEx5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIFZ5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0SG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiB6eSh0LGUpe3JldHVybiBweSgxK25tLmNvdW50KFNtKHQpLHQpLGUsMyl9ZnVuY3Rpb24gQnkodCxlKXtyZXR1cm4gcHkodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIFV5KHQsZSl7cmV0dXJuIEJ5KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gSHkodCxlKXtyZXR1cm4gcHkodC5nZXRNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBxeSh0LGUpe3JldHVybiBweSh0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIEd5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0U2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gV3kodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIFF5KHQsZSl7cmV0dXJuIHB5KG9tLmNvdW50KFNtKHQpLHQpLGUsMil9ZnVuY3Rpb24gWXkodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP2NtKHQpOmNtLmNlaWwodCkscHkoY20uY291bnQoU20odCksdCkrKDQ9PT1TbSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBLeSh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBaeSh0LGUpe3JldHVybiBweShhbS5jb3VudChTbSh0KSx0KSxlLDIpfWZ1bmN0aW9uIFh5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiAkeSh0LGUpe3JldHVybiBweSh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gSnkodCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybihlPjA/Ii0iOihlKj0tMSwiKyIpKStweShlLzYwfDAsIjAiLDIpK3B5KGUlNjAsIjAiLDIpfWZ1bmN0aW9uIHR2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDRGF0ZSgpLGUsMil9ZnVuY3Rpb24gZXYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gbnYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENIb3VycygpJTEyfHwxMixlLDIpfWZ1bmN0aW9uIHJ2KHQsZSl7cmV0dXJuIHB5KDErTW0uY291bnQoSm0odCksdCksZSwzKX1mdW5jdGlvbiBpdih0LGUpe3JldHVybiBweSh0LmdldFVUQ01pbGxpc2Vjb25kcygpLGUsMyl9ZnVuY3Rpb24gb3YodCxlKXtyZXR1cm4gaXYodCxlKSsiMDAwIn1mdW5jdGlvbiBhdih0LGUpe3JldHVybiBweSh0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIHN2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDTWludXRlcygpLGUsMil9ZnVuY3Rpb24gdXYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENTZWNvbmRzKCksZSwyKX1mdW5jdGlvbiBjdih0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiAwPT09ZT83OmV9ZnVuY3Rpb24gbHYodCxlKXtyZXR1cm4gcHkoUm0uY291bnQoSm0odCksdCksZSwyKX1mdW5jdGlvbiBmdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9bj49NHx8MD09PW4/Vm0odCk6Vm0uY2VpbCh0KSxweShWbS5jb3VudChKbSh0KSx0KSsoND09PUptKHQpLmdldFVUQ0RheSgpKSxlLDIpfWZ1bmN0aW9uIGh2KHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIGR2KHQsZSl7cmV0dXJuIHB5KERtLmNvdW50KEptKHQpLHQpLGUsMil9ZnVuY3Rpb24gcHYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIG12KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiB5digpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gdnYoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZ3YodCl7cmV0dXJuK3R9ZnVuY3Rpb24gYnYodCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBfdih0KXtyZXR1cm4gb3k9aXkodCksYXk9b3kuZm9ybWF0LHN5PW95LnBhcnNlLHV5PW95LnV0Y0Zvcm1hdCxjeT1veS51dGNQYXJzZSxveX1fdih7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO3ZhciB3dj1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTp1eSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIikseHY9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9mdW5jdGlvbih0KXt2YXIgZT1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4oZSk/bnVsbDplfTpjeSgiJVktJW0tJWRUJUg6JU06JVMuJUxaIiksU3Y9MWUzLEV2PTYwKlN2LEN2PTYwKkV2LE92PTI0KkN2LFR2PTcqT3Ysa3Y9MzAqT3YsQXY9MzY1Kk92O2Z1bmN0aW9uIGp2KHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBJdih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBNdih0LGUsbixyLG8sYSxzLHUsYyl7dmFyIGw9YnAobXAsR24pLGY9bC5pbnZlcnQsaD1sLmRvbWFpbixkPWMoIi4lTCIpLHA9YygiOiVTIiksbT1jKCIlSTolTSIpLHk9YygiJUkgJXAiKSx2PWMoIiVhICVkIiksZz1jKCIlYiAlZCIpLGI9YygiJUIiKSxfPWMoIiVZIiksdz1bW3MsMSxTdl0sW3MsNSw1KlN2XSxbcywxNSwxNSpTdl0sW3MsMzAsMzAqU3ZdLFthLDEsRXZdLFthLDUsNSpFdl0sW2EsMTUsMTUqRXZdLFthLDMwLDMwKkV2XSxbbywxLEN2XSxbbywzLDMqQ3ZdLFtvLDYsNipDdl0sW28sMTIsMTIqQ3ZdLFtyLDEsT3ZdLFtyLDIsMipPdl0sW24sMSxUdl0sW2UsMSxrdl0sW2UsMywzKmt2XSxbdCwxLEF2XV07ZnVuY3Rpb24geChpKXtyZXR1cm4ocyhpKTxpP2Q6YShpKTxpP3A6byhpKTxpP206cihpKTxpP3k6ZShpKTxpP24oaSk8aT92Omc6dChpKTxpP2I6XykoaSl9ZnVuY3Rpb24gUyhlLG4scixvKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgYT1NYXRoLmFicyhyLW4pL2Uscz1pKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkucmlnaHQodyxhKTtzPT09dy5sZW5ndGg/KG89ayhuL0F2LHIvQXYsZSksZT10KTpzPyhvPShzPXdbYS93W3MtMV1bMl08d1tzXVsyXS9hP3MtMTpzXSlbMV0sZT1zWzBdKToobz1NYXRoLm1heChrKG4scixlKSwxKSxlPXUpfXJldHVybiBudWxsPT1vP2U6ZS5ldmVyeShvKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGYodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKGFwLmNhbGwodCxJdikpOmgoKS5tYXAoanYpfSxsLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1oKCksaT1yWzBdLG89cltyLmxlbmd0aC0xXSxhPW88aTtyZXR1cm4gYSYmKG49aSxpPW8sbz1uKSxuPShuPVModCxpLG8sZSkpP24ucmFuZ2UoaSxvKzEpOltdLGE/bi5yZXZlcnNlKCk6bn0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/eDpjKGUpfSxsLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1oKCk7cmV0dXJuKHQ9Uyh0LG5bMF0sbltuLmxlbmd0aC0xXSxlKSk/aChFcChuLHQpKTpsfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3AobCxNdih0LGUsbixyLG8sYSxzLHUsYykpfSxsfXZhciBQdj1mdW5jdGlvbigpe3JldHVybiBNdihTbSxfbSxvbSxubSxKcCxacCxRcCxVcCxheSkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pfSxOdj1mdW5jdGlvbigpe3JldHVybiBNdihKbSxabSxSbSxNbSxBbSxPbSxRcCxVcCx1eSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfTtmdW5jdGlvbiBSdih0KXt2YXIgZT0wLG49MSxyPTEsaT0hMTtmdW5jdGlvbiBvKG4pe3ZhciBvPShuLWUpKnI7cmV0dXJuIHQoaT9NYXRoLm1heCgwLE1hdGgubWluKDEsbykpOm8pfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oZT0rdFswXSk9PShuPSt0WzFdKT8wOjEvKG4tZSksbyk6W2Usbl19LG8uY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ISF0LG8pOml9LG8uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFJ2KHQpLmRvbWFpbihbZSxuXSkuY2xhbXAoaSl9LHdwKG8pfWZ1bmN0aW9uIER2KHQpe3ZhciBlPTAsbj0uNSxyPTEsaT0xLG89MSxhPSExO2Z1bmN0aW9uIHMoZSl7dmFyIHI9LjUrKChlPStlKS1uKSooZTxuP2k6byk7cmV0dXJuIHQoYT9NYXRoLm1heCgwLE1hdGgubWluKDEscikpOnIpfXJldHVybiBzLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFsyXSxpPShlPSt0WzBdKT09KG49K3RbMV0pPzA6LjUvKG4tZSksbz1uPT09cj8wOi41LyhyLW4pLHMpOltlLG4scl19LHMuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISF0LHMpOmF9LHMuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUscyk6dH0scy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIER2KHQpLmRvbWFpbihbZSxuLHJdKS5jbGFtcChhKX0sd3Aocyl9dmFyIEZ2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufSxMdj1GdigiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksVnY9RnYoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLHp2PUZ2KCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSxCdj1GdigiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IiksVXY9RnYoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLEh2PUZ2KCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxxdj1GdigiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksR3Y9RnYoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLFd2PUZ2KCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxRdj1mdW5jdGlvbih0KXtyZXR1cm4gQm4odFt0Lmxlbmd0aC0xXSl9LFl2PW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChGdiksS3Y9UXYoWXYpLFp2PW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChGdiksWHY9UXYoWnYpLCR2PW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChGdiksSnY9UXYoJHYpLHRnPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChGdiksZWc9UXYodGcpLG5nPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChGdikscmc9UXYobmcpLGlnPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChGdiksb2c9UXYoaWcpLGFnPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChGdiksc2c9UXYoYWcpLHVnPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChGdiksY2c9UXYodWcpLGxnPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChGdiksZmc9UXYobGcpLGhnPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChGdiksZGc9UXYoaGcpLHBnPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChGdiksbWc9UXYocGcpLHlnPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChGdiksdmc9UXYoeWcpLGdnPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChGdiksYmc9UXYoZ2cpLF9nPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChGdiksd2c9UXYoX2cpLHhnPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChGdiksU2c9UXYoeGcpLEVnPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChGdiksQ2c9UXYoRWcpLE9nPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChGdiksVGc9UXYoT2cpLGtnPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChGdiksQWc9UXYoa2cpLGpnPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChGdiksSWc9UXYoamcpLE1nPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChGdiksUGc9UXYoTWcpLE5nPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChGdiksUmc9UXYoTmcpLERnPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChGdiksRmc9UXYoRGcpLExnPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChGdiksVmc9UXYoTGcpLHpnPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChGdiksQmc9UXYoemcpLFVnPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChGdiksSGc9UXYoVWcpLHFnPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChGdiksR2c9UXYocWcpLFdnPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChGdiksUWc9UXYoV2cpLFlnPXlyKE9uKDMwMCwuNSwwKSxPbigtMjQwLC41LDEpKSxLZz15cihPbigtMTAwLC43NSwuMzUpLE9uKDgwLDEuNSwuOCkpLFpnPXlyKE9uKDI2MCwuNzUsLjM1KSxPbig4MCwxLjUsLjgpKSxYZz1PbigpLCRnPWZ1bmN0aW9uKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgZT1NYXRoLmFicyh0LS41KTtyZXR1cm4gWGcuaD0zNjAqdC0xMDAsWGcucz0xLjUtMS41KmUsWGcubD0uOC0uOSplLFhnKyIifSxKZz1HZSgpLHRiPU1hdGguUEkvMyxlYj0yKk1hdGguUEkvMyxuYj1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdD0oLjUtdCkqTWF0aC5QSSxKZy5yPTI1NSooZT1NYXRoLnNpbih0KSkqZSxKZy5nPTI1NSooZT1NYXRoLnNpbih0K3RiKSkqZSxKZy5iPTI1NSooZT1NYXRoLnNpbih0K2ViKSkqZSxKZysiIn07ZnVuY3Rpb24gcmIodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IobiplKSkpXX19dmFyIGliPXJiKEZ2KCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksb2I9cmIoRnYoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxhYj1yYihGdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLHNiPXJiKEZ2KCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSksdWI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxjYj1NYXRoLmFicyxsYj1NYXRoLmF0YW4yLGZiPU1hdGguY29zLGhiPU1hdGgubWF4LGRiPU1hdGgubWluLHBiPU1hdGguc2luLG1iPU1hdGguc3FydCx5Yj0xZS0xMix2Yj1NYXRoLlBJLGdiPXZiLzIsYmI9Mip2YjtmdW5jdGlvbiBfYih0KXtyZXR1cm4gdD49MT9nYjp0PD0tMT8tZ2I6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHdiKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHhiKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIFNiKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gRWIodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gQ2IodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gT2IodCxlLG4scixpLG8sYSl7dmFyIHM9dC1uLHU9ZS1yLGM9KGE/bzotbykvbWIocypzK3UqdSksbD1jKnUsZj0tYypzLGg9dCtsLGQ9ZStmLHA9bitsLG09citmLHk9KGgrcCkvMix2PShkK20pLzIsZz1wLWgsYj1tLWQsXz1nKmcrYipiLHc9aS1vLHg9aCptLXAqZCxTPShiPDA/LTE6MSkqbWIoaGIoMCx3KncqXy14KngpKSxFPSh4KmItZypTKS9fLEM9KC14KmctYipTKS9fLE89KHgqYitnKlMpL18sVD0oLXgqZytiKlMpL18saz1FLXksQT1DLXYsaj1PLXksST1ULXY7cmV0dXJuIGsqaytBKkE+aipqK0kqSSYmKEU9TyxDPVQpLHtjeDpFLGN5OkMseDAxOi1sLHkwMTotZix4MTE6RSooaS93LTEpLHkxMTpDKihpL3ctMSl9fXZhciBUYj1mdW5jdGlvbigpe3ZhciB0PXdiLGU9eGIsbj11YigwKSxyPW51bGwsaT1TYixvPUViLGE9Q2Iscz1udWxsO2Z1bmN0aW9uIHUoKXt2YXIgdSxjLGwsZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nYixwPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLWdiLG09Y2IocC1kKSx5PXA+ZDtpZihzfHwocz11PXpvKCkpLGg8ZiYmKGM9aCxoPWYsZj1jKSxoPnliKWlmKG0+YmIteWIpcy5tb3ZlVG8oaCpmYihkKSxoKnBiKGQpKSxzLmFyYygwLDAsaCxkLHAsIXkpLGY+eWImJihzLm1vdmVUbyhmKmZiKHApLGYqcGIocCkpLHMuYXJjKDAsMCxmLHAsZCx5KSk7ZWxzZXt2YXIgdixnLGI9ZCxfPXAsdz1kLHg9cCxTPW0sRT1tLEM9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixPPUM+eWImJihyPytyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTptYihmKmYraCpoKSksVD1kYihjYihoLWYpLzIsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxrPVQsQT1UO2lmKE8+eWIpe3ZhciBqPV9iKE8vZipwYihDKSksST1fYihPL2gqcGIoQykpOyhTLT0yKmopPnliPyh3Kz1qKj15PzE6LTEseC09aik6KFM9MCx3PXg9KGQrcCkvMiksKEUtPTIqSSk+eWI/KGIrPUkqPXk/MTotMSxfLT1JKTooRT0wLGI9Xz0oZCtwKS8yKX12YXIgTT1oKmZiKGIpLFA9aCpwYihiKSxOPWYqZmIoeCksUj1mKnBiKHgpO2lmKFQ+eWIpe3ZhciBEPWgqZmIoXyksRj1oKnBiKF8pLEw9ZipmYih3KSxWPWYqcGIodyk7aWYobTx2Yil7dmFyIHo9Uz55Yj9mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciB1PUwtTSxjPVYtUCxsPWEtRCxmPXMtRixoPShsKihQLUYpLWYqKE0tRCkpLyhmKnUtbCpjKTtyZXR1cm5bTStoKnUsUCtoKmNdfSgwLDAsMCwwLDAsMCxOLFIpOltOLFJdLEI9TS16WzBdLFU9UC16WzFdLEg9RC16WzBdLHE9Ri16WzFdLEc9MS9wYigoKGw9KEIqSCtVKnEpLyhtYihCKkIrVSpVKSptYihIKkgrcSpxKSkpPjE/MDpsPC0xP3ZiOk1hdGguYWNvcyhsKSkvMiksVz1tYih6WzBdKnpbMF0relsxXSp6WzFdKTtrPWRiKFQsKGYtVykvKEctMSkpLEE9ZGIoVCwoaC1XKS8oRysxKSl9fUU+eWI/QT55Yj8odj1PYihMLFYsTSxQLGgsQSx5KSxnPU9iKEQsRixOLFIsaCxBLHkpLHMubW92ZVRvKHYuY3grdi54MDEsdi5jeSt2LnkwMSksQTxUP3MuYXJjKHYuY3gsdi5jeSxBLGxiKHYueTAxLHYueDAxKSxsYihnLnkwMSxnLngwMSksIXkpOihzLmFyYyh2LmN4LHYuY3ksQSxsYih2LnkwMSx2LngwMSksbGIodi55MTEsdi54MTEpLCF5KSxzLmFyYygwLDAsaCxsYih2LmN5K3YueTExLHYuY3grdi54MTEpLGxiKGcuY3krZy55MTEsZy5jeCtnLngxMSksIXkpLHMuYXJjKGcuY3gsZy5jeSxBLGxiKGcueTExLGcueDExKSxsYihnLnkwMSxnLngwMSksIXkpKSk6KHMubW92ZVRvKE0sUCkscy5hcmMoMCwwLGgsYixfLCF5KSk6cy5tb3ZlVG8oTSxQKSxmPnliJiZTPnliP2s+eWI/KHY9T2IoTixSLEQsRixmLC1rLHkpLGc9T2IoTSxQLEwsVixmLC1rLHkpLHMubGluZVRvKHYuY3grdi54MDEsdi5jeSt2LnkwMSksazxUP3MuYXJjKHYuY3gsdi5jeSxrLGxiKHYueTAxLHYueDAxKSxsYihnLnkwMSxnLngwMSksIXkpOihzLmFyYyh2LmN4LHYuY3ksayxsYih2LnkwMSx2LngwMSksbGIodi55MTEsdi54MTEpLCF5KSxzLmFyYygwLDAsZixsYih2LmN5K3YueTExLHYuY3grdi54MTEpLGxiKGcuY3krZy55MTEsZy5jeCtnLngxMSkseSkscy5hcmMoZy5jeCxnLmN5LGssbGIoZy55MTEsZy54MTEpLGxiKGcueTAxLGcueDAxKSwheSkpKTpzLmFyYygwLDAsZix4LHcseSk6cy5saW5lVG8oTixSKX1lbHNlIHMubW92ZVRvKDAsMCk7aWYocy5jbG9zZVBhdGgoKSx1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gdS5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrdC5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi12Yi8yO3JldHVybltmYihyKSpuLHBiKHIpKm5dfSx1LmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIoK2UpLHUpOnR9LHUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6ZX0sdS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6bn0sdS5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOnJ9LHUuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTppfSx1LmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOm99LHUucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6YX0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LHUpOnN9LHV9O2Z1bmN0aW9uIGtiKHQpe3RoaXMuX2NvbnRleHQ9dH1rYi5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX19fTt2YXIgQWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrYih0KX07ZnVuY3Rpb24gamIodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gSWIodCl7cmV0dXJuIHRbMV19dmFyIE1iPWZ1bmN0aW9uKCl7dmFyIHQ9amIsZT1JYixuPXViKCEwKSxyPW51bGwsaT1BYixvPW51bGw7ZnVuY3Rpb24gYShhKXt2YXIgcyx1LGMsbD1hLmxlbmd0aCxmPSExO2ZvcihudWxsPT1yJiYobz1pKGM9em8oKSkpLHM9MDtzPD1sOysrcykhKHM8bCYmbih1PWFbc10scyxhKSk9PT1mJiYoKGY9IWYpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGYmJm8ucG9pbnQoK3QodSxzLGEpLCtlKHUscyxhKSk7aWYoYylyZXR1cm4gbz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKCtlKSxhKTp0fSxhLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6ZX0sYS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoISF0KSxhKTpufSxhLmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbnVsbCE9ciYmKG89aShyKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bz1udWxsOm89aShyPXQpLGEpOnJ9LGF9LFBiPWZ1bmN0aW9uKCl7dmFyIHQ9amIsZT1udWxsLG49dWIoMCkscj1JYixpPXViKCEwKSxvPW51bGwsYT1BYixzPW51bGw7ZnVuY3Rpb24gdSh1KXt2YXIgYyxsLGYsaCxkLHA9dS5sZW5ndGgsbT0hMSx5PW5ldyBBcnJheShwKSx2PW5ldyBBcnJheShwKTtmb3IobnVsbD09byYmKHM9YShkPXpvKCkpKSxjPTA7Yzw9cDsrK2Mpe2lmKCEoYzxwJiZpKGg9dVtjXSxjLHUpKT09PW0paWYobT0hbSlsPWMscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCksZj1jLTE7Zj49bDstLWYpcy5wb2ludCh5W2ZdLHZbZl0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfW0mJih5W2NdPSt0KGgsYyx1KSx2W2NdPStuKGgsYyx1KSxzLnBvaW50KGU/K2UoaCxjLHUpOnlbY10scj8rcihoLGMsdSk6dltjXSkpfWlmKGQpcmV0dXJuIHM9bnVsbCxkKyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gTWIoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIHUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnViKCtuKSxlPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKCtlKSx1KTp0fSx1LngxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTplfSx1Lnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCkscj1udWxsLHUpOm59LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6bn0sdS55MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6cn0sdS5saW5lWDA9dS5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShuKX0sdS5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sdS5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sdS5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoISF0KSx1KTppfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbnVsbCE9byYmKHM9YShvKSksdSk6YX0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P289cz1udWxsOnM9YShvPXQpLHUpOm99LHV9LE5iPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxSYj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sRGI9ZnVuY3Rpb24oKXt2YXIgdD1SYixlPU5iLG49bnVsbCxyPXViKDApLGk9dWIoYmIpLG89dWIoMCk7ZnVuY3Rpb24gYShhKXt2YXIgcyx1LGMsbCxmLGg9YS5sZW5ndGgsZD0wLHA9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgpLHk9K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpLHY9TWF0aC5taW4oYmIsTWF0aC5tYXgoLWJiLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLXkpKSxnPU1hdGgubWluKE1hdGguYWJzKHYpL2gsby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9ZyoodjwwPy0xOjEpO2ZvcihzPTA7czxoOysrcykoZj1tW3Bbc109c109K3QoYVtzXSxzLGEpKT4wJiYoZCs9Zik7Zm9yKG51bGwhPWU/cC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUobVt0XSxtW25dKX0pOm51bGwhPW4mJnAuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuKGFbdF0sYVtlXSl9KSxzPTAsYz1kPyh2LWgqYikvZDowO3M8aDsrK3MseT1sKW1bdT1wW3NdXT17ZGF0YTphW3VdLGluZGV4OnMsdmFsdWU6Zj1tW3VdLHN0YXJ0QW5nbGU6eSxlbmRBbmdsZTpsPXkrKGY+MD9mKmM6MCkrYixwYWRBbmdsZTpnfTtyZXR1cm4gbX1yZXR1cm4gYS52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKCtlKSxhKTp0fSxhLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsYSk6ZX0sYS5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLGEpOm59LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTpyfSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOml9LGEucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6b30sYX0sRmI9VmIoQWIpO2Z1bmN0aW9uIExiKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gVmIodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IExiKHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gemIodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoVmIodCkpOmUoKS5fY3VydmV9LHR9TGIucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgQmI9ZnVuY3Rpb24oKXtyZXR1cm4gemIoTWIoKS5jdXJ2ZShGYikpfSxVYj1mdW5jdGlvbigpe3ZhciB0PVBiKCkuY3VydmUoRmIpLGU9dC5jdXJ2ZSxuPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxvPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gemIobigpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHpiKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB6YihpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gemIobygpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShWYih0KSk6ZSgpLl9jdXJ2ZX0sdH0sSGI9ZnVuY3Rpb24odCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19LHFiPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBHYih0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gV2IodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIFFiKHQpe3ZhciBlPUdiLG49V2Iscj1qYixpPUliLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1xYi5jYWxsKGFyZ3VtZW50cyksdT1lLmFwcGx5KHRoaXMscyksYz1uLmFwcGx5KHRoaXMscyk7aWYob3x8KG89YT16bygpKSx0KG8sK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpLCtyLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksK2kuYXBwbHkodGhpcyxzKSksYSlyZXR1cm4gbz1udWxsLGErIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsYSk6ZX0sYS50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxhKTpufSxhLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6cn0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfWZ1bmN0aW9uIFliKHQsZSxuLHIsaSl7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStyKS8yLG4sZSxpLHIsaSl9ZnVuY3Rpb24gS2IodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4raSkvMixyLG4scixpKX1mdW5jdGlvbiBaYih0LGUsbixyLGkpe3ZhciBvPUhiKGUsbiksYT1IYihlLG49KG4raSkvMikscz1IYihyLG4pLHU9SGIocixpKTt0Lm1vdmVUbyhvWzBdLG9bMV0pLHQuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLHVbMF0sdVsxXSl9ZnVuY3Rpb24gWGIoKXtyZXR1cm4gUWIoWWIpfWZ1bmN0aW9uICRiKCl7cmV0dXJuIFFiKEtiKX1mdW5jdGlvbiBKYigpe3ZhciB0PVFiKFpiKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fXZhciB0Xz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3ZiKTt0Lm1vdmVUbyhuLDApLHQuYXJjKDAsMCxuLDAsYmIpfX0sZV89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS81KS8yO3QubW92ZVRvKC0zKm4sLW4pLHQubGluZVRvKC1uLC1uKSx0LmxpbmVUbygtbiwtMypuKSx0LmxpbmVUbyhuLC0zKm4pLHQubGluZVRvKG4sLW4pLHQubGluZVRvKDMqbiwtbiksdC5saW5lVG8oMypuLG4pLHQubGluZVRvKG4sbiksdC5saW5lVG8obiwzKm4pLHQubGluZVRvKC1uLDMqbiksdC5saW5lVG8oLW4sbiksdC5saW5lVG8oLTMqbixuKSx0LmNsb3NlUGF0aCgpfX0sbl89TWF0aC5zcXJ0KDEvMykscl89MipuXyxpXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3JfKSxyPW4qbl87dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLG4pLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fSxvXz1NYXRoLnNpbih2Yi8xMCkvTWF0aC5zaW4oNyp2Yi8xMCksYV89TWF0aC5zaW4oYmIvMTApKm9fLHNfPS1NYXRoLmNvcyhiYi8xMCkqb18sdV89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj1hXypuLGk9c18qbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPWJiKm8vNSxzPU1hdGguY29zKGEpLHU9TWF0aC5zaW4oYSk7dC5saW5lVG8odSpuLC1zKm4pLHQubGluZVRvKHMqci11KmksdSpyK3MqaSl9dC5jbG9zZVBhdGgoKX19LGNfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fSxsXz1NYXRoLnNxcnQoMyksZl89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj0tTWF0aC5zcXJ0KGUvKDMqbF8pKTt0Lm1vdmVUbygwLDIqbiksdC5saW5lVG8oLWxfKm4sLW4pLHQubGluZVRvKGxfKm4sLW4pLHQuY2xvc2VQYXRoKCl9fSxoXz1NYXRoLnNxcnQoMykvMixkXz0xL01hdGguc3FydCgxMikscF89MyooZF8vMisxKSxtXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3BfKSxyPW4vMixpPW4qZF8sbz1yLGE9bipkXytuLHM9LW8sdT1hO3QubW92ZVRvKHIsaSksdC5saW5lVG8obyxhKSx0LmxpbmVUbyhzLHUpLHQubGluZVRvKC0uNSpyLWhfKmksaF8qcistLjUqaSksdC5saW5lVG8oLS41Km8taF8qYSxoXypvKy0uNSphKSx0LmxpbmVUbygtLjUqcy1oXyp1LGhfKnMrLS41KnUpLHQubGluZVRvKC0uNSpyK2hfKmksLS41KmktaF8qciksdC5saW5lVG8oLS41Km8raF8qYSwtLjUqYS1oXypvKSx0LmxpbmVUbygtLjUqcytoXyp1LC0uNSp1LWhfKnMpLHQuY2xvc2VQYXRoKCl9fSx5Xz1bdF8sZV8saV8sY18sdV8sZl8sbV9dLHZfPWZ1bmN0aW9uKCl7dmFyIHQ9dWIodF8pLGU9dWIoNjQpLG49bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYobnx8KG49cj16bygpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KG4sK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBuPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHIpOmV9LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6dCxyKTpufSxyfSxnXz1mdW5jdGlvbigpe307ZnVuY3Rpb24gYl8odCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIF9fKHQpe3RoaXMuX2NvbnRleHQ9dH1fXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOmJfKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgd189ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBfXyh0KX07ZnVuY3Rpb24geF8odCl7dGhpcy5fY29udGV4dD10fXhfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmdfLGFyZWFFbmQ6Z18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0OmJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgU189ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4Xyh0KX07ZnVuY3Rpb24gRV8odCl7dGhpcy5fY29udGV4dD10fUVfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6Yl8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVfKHQpfTtmdW5jdGlvbiBPXyh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBfXyh0KSx0aGlzLl9iZXRhPWV9T18ucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgcixpPXRbMF0sbz1lWzBdLGE9dFtuXS1pLHM9ZVtuXS1vLHU9LTE7Kyt1PD1uOyl0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbdV0rKDEtdGhpcy5fYmV0YSkqKGkrKHI9dS9uKSphKSx0aGlzLl9iZXRhKmVbdV0rKDEtdGhpcy5fYmV0YSkqKG8rcipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBUXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDE9PT1lP25ldyBfXyh0KTpuZXcgT18odCxlKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjg1KTtmdW5jdGlvbiBrXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIEFfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1BXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6a18odGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OmtfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgal89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgQV8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gSV8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUlfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmdfLGFyZWFFbmQ6Z18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDprXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIE1fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IElfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFBfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1QXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDprXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIE5fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IFBfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFJfKHQsZSxuKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsYT10Ll95MjtpZih0Ll9sMDFfYT55Yil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsdT0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL3UsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL3V9aWYodC5fbDIzX2E+eWIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2wsYT0oYSpjK3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvbH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sYSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gRF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1EXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlJfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEZfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgRF8odCxlKTpuZXcgQV8odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBMXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmdfLGFyZWFFbmQ6Z18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6Ul8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBMXyh0LGUpOm5ldyBJXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIHpfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9el8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlJfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEJfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgel8odCxlKTpuZXcgUF8odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBVXyh0KXt0aGlzLl9jb250ZXh0PXR9VV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6Z18sYXJlYUVuZDpnXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fTt2YXIgSF89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVXyh0KX07ZnVuY3Rpb24gcV8odCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIEdfKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsbz0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxhPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0obyppK2EqcikvKHIraSk7cmV0dXJuKHFfKG8pK3FfKGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gV18odCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIFFfKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3gxLG89dC5feTEsYT0oaS1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsdC5feTArYSplLGktYSxvLWEqbixpLG8pfWZ1bmN0aW9uIFlfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBLXyh0KXt0aGlzLl9jb250ZXh0PW5ldyBaXyh0KX1mdW5jdGlvbiBaXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWF8odCl7cmV0dXJuIG5ldyBZXyh0KX1mdW5jdGlvbiAkXyh0KXtyZXR1cm4gbmV3IEtfKHQpfWZ1bmN0aW9uIEpfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0dyh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLG9bZV09NCxhW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upb1tlXS09bj1pW2VdL29bZS0xXSxhW2VdLT1uKmFbZS0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0oYVtlXS1pW2UrMV0pL29bZV07Zm9yKG9bci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlvW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxvXX1ZXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6UV8odGhpcyx0aGlzLl90MCxXXyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsUV8odGhpcyxXXyh0aGlzLG49R18odGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OlFfKHRoaXMsdGhpcy5fdDAsbj1HXyh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LChLXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShZXy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe1lfLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sWl8ucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LHIsbixvLGkpfX0sSl8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIHI9dHcodCksaT10dyhlKSxvPTAsYT0xO2E8bjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbYV0sZVthXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGV3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSl8odCl9O2Z1bmN0aW9uIG53KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1udy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgcnc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBudyh0LC41KX07ZnVuY3Rpb24gaXcodCl7cmV0dXJuIG5ldyBudyh0LDApfWZ1bmN0aW9uIG93KHQpe3JldHVybiBuZXcgbncodCwxKX12YXIgYXc9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLG89MSxhPXRbZVswXV0scz1hLmxlbmd0aDtvPGk7KytvKWZvcihyPWEsYT10W2Vbb11dLG49MDtuPHM7KytuKWFbbl1bMV0rPWFbbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfSxzdz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59O2Z1bmN0aW9uIHV3KHQsZSl7cmV0dXJuIHRbZV19dmFyIGN3PWZ1bmN0aW9uKCl7dmFyIHQ9dWIoW10pLGU9c3csbj1hdyxyPXV3O2Z1bmN0aW9uIGkoaSl7dmFyIG8sYSxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHU9aS5sZW5ndGgsYz1zLmxlbmd0aCxsPW5ldyBBcnJheShjKTtmb3Iobz0wO288YzsrK28pe2Zvcih2YXIgZixoPXNbb10sZD1sW29dPW5ldyBBcnJheSh1KSxwPTA7cDx1OysrcClkW3BdPWY9WzAsK3IoaVtwXSxoLHAsaSldLGYuZGF0YT1pW3BdO2Qua2V5PWh9Zm9yKG89MCxhPWUobCk7bzxjOysrbylsW2Fbb11dLmluZGV4PW87cmV0dXJuIG4obCxhKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YihxYi5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9zdzoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKHFiLmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/YXc6dCxpKTpufSxpfSxsdz1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scixpLG89MCxhPXRbMF0ubGVuZ3RoO288YTsrK28pe2ZvcihpPW49MDtuPHI7KytuKWkrPXRbbl1bb11bMV18fDA7aWYoaSlmb3Iobj0wO248cjsrK24pdFtuXVtvXVsxXS89aX1hdyh0LGUpfX0sZnc9ZnVuY3Rpb24odCxlKXtpZigocz10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLG8sYSxzLHU9MCxjPXRbZVswXV0ubGVuZ3RoO3U8YzsrK3UpZm9yKG89YT0wLG49MDtuPHM7KytuKShpPShyPXRbZVtuXV1bdV0pWzFdLXJbMF0pPj0wPyhyWzBdPW8sclsxXT1vKz1pKTppPDA/KHJbMV09YSxyWzBdPWErPWkpOnJbMF09b30saHc9ZnVuY3Rpb24odCxlKXtpZigobj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLHI9MCxpPXRbZVswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCxzPTA7YTxuOysrYSlzKz10W2FdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LXMvMn1hdyh0LGUpfX0sZHc9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MCYmKHI9KG49dFtlWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIG4scixpLG89MCxhPTE7YTxyOysrYSl7Zm9yKHZhciBzPTAsdT0wLGM9MDtzPGk7KytzKXtmb3IodmFyIGw9dFtlW3NdXSxmPWxbYV1bMV18fDAsaD0oZi0obFthLTFdWzFdfHwwKSkvMixkPTA7ZDxzOysrZCl7dmFyIHA9dFtlW2RdXTtoKz0ocFthXVsxXXx8MCktKHBbYS0xXVsxXXx8MCl9dSs9ZixjKz1oKmZ9blthLTFdWzFdKz1uW2EtMV1bMF09byx1JiYoby09Yy91KX1uW2EtMV1bMV0rPW5bYS0xXVswXT1vLGF3KHQsZSl9fSxwdz1mdW5jdGlvbih0KXt2YXIgZT10Lm1hcChtdyk7cmV0dXJuIHN3KHQpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSl9O2Z1bmN0aW9uIG13KHQpe2Zvcih2YXIgZSxuPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykoZT0rdFtyXVsxXSkmJihuKz1lKTtyZXR1cm4gbn12YXIgeXc9ZnVuY3Rpb24odCl7cmV0dXJuIHB3KHQpLnJldmVyc2UoKX0sdnc9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAobXcpLG89c3codCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpW2VdLWlbdF19KSxhPTAscz0wLHU9W10sYz1bXTtmb3IoZT0wO2U8cjsrK2Upbj1vW2VdLGE8cz8oYSs9aVtuXSx1LnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdCh1KX0sZ3c9ZnVuY3Rpb24odCl7cmV0dXJuIHN3KHQpLnJldmVyc2UoKX0sYnc9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBfdyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3dyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB4dygpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIFN3KHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gRXcodCxlKXt2YXIgbj1lLHI9ZS5SLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLlI9ci5MLG4uUiYmKG4uUi5VPW4pLHIuTD1ufWZ1bmN0aW9uIEN3KHQsZSl7dmFyIG49ZSxyPWUuTCxpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5MPXIuUixuLkwmJihuLkwuVT1uKSxyLlI9bn1mdW5jdGlvbiBPdyh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9eHcucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4dyxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodCl7aWYoZS5QPXQsZS5OPXQuTix0Lk4mJih0Lk4uUD1lKSx0Lk49ZSx0LlIpe2Zvcih0PXQuUjt0Lkw7KXQ9dC5MO3QuTD1lfWVsc2UgdC5SPWU7bj10fWVsc2UgdGhpcy5fPyh0PU93KHRoaXMuXyksZS5QPW51bGwsZS5OPXQsdC5QPXQuTD1lLG49dCk6KGUuUD1lLk49bnVsbCx0aGlzLl89ZSxuPW51bGwpO2ZvcihlLkw9ZS5SPW51bGwsZS5VPW4sZS5DPSEwLHQ9ZTtuJiZuLkM7KW49PT0ocj1uLlUpLkw/KGk9ci5SKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5SJiYoRXcodGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsQ3codGhpcyxyKSk6KGk9ci5MKSYmaS5DPyhuLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09bi5MJiYoQ3codGhpcyxuKSxuPSh0PW4pLlUpLG4uQz0hMSxyLkM9ITAsRXcodGhpcyxyKSksbj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLG4scixpPXQuVSxvPXQuTCxhPXQuUjtpZihuPW8/YT9PdyhhKTpvOmEsaT9pLkw9PT10P2kuTD1uOmkuUj1uOnRoaXMuXz1uLG8mJmE/KHI9bi5DLG4uQz10LkMsbi5MPW8sby5VPW4sbiE9PWE/KGk9bi5VLG4uVT10LlUsaS5MPXQ9bi5SLG4uUj1hLGEuVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLEV3KHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsQ3codGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsRXcodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLEN3KHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsRXcodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsQ3codGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBUdz14dztmdW5jdGlvbiBrdyh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxvPVp3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJmp3KGksdCxlLG4pLHImJmp3KGksZSx0LHIpLFl3W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFl3W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gQXcodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIGp3KHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiBJdyh0LGUsbixyLGkpe3ZhciBvLGE9dFswXSxzPXRbMV0sdT1hWzBdLGM9YVsxXSxsPTAsZj0xLGg9c1swXS11LGQ9c1sxXS1jO2lmKG89ZS11LGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88bClyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKGg+MCl7aWYobz5mKXJldHVybjtvPmwmJihsPW8pfWlmKG89ci11LGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+ZilyZXR1cm47bz5sJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobzxsKXJldHVybjtvPGYmJihmPW8pfWlmKG89bi1jLGR8fCEobz4wKSl7aWYoby89ZCxkPDApe2lmKG88bClyZXR1cm47bzxmJiYoZj1vKX1lbHNlIGlmKGQ+MCl7aWYobz5mKXJldHVybjtvPmwmJihsPW8pfWlmKG89aS1jLGR8fCEobzwwKSl7aWYoby89ZCxkPDApe2lmKG8+ZilyZXR1cm47bz5sJiYobD1vKX1lbHNlIGlmKGQ+MCl7aWYobzxsKXJldHVybjtvPGYmJihmPW8pfXJldHVybiEobD4wfHxmPDEpfHwobD4wJiYodFswXT1bdStsKmgsYytsKmRdKSxmPDEmJih0WzFdPVt1K2YqaCxjK2YqZF0pLCEwKX19fX19ZnVuY3Rpb24gTXcodCxlLG4scixpKXt2YXIgbz10WzFdO2lmKG8pcmV0dXJuITA7dmFyIGEscyx1PXRbMF0sYz10LmxlZnQsbD10LnJpZ2h0LGY9Y1swXSxoPWNbMV0sZD1sWzBdLHA9bFsxXSxtPShmK2QpLzIseT0oaCtwKS8yO2lmKHA9PT1oKXtpZihtPGV8fG0+PXIpcmV0dXJuO2lmKGY+ZCl7aWYodSl7aWYodVsxXT49aSlyZXR1cm59ZWxzZSB1PVttLG5dO289W20saV19ZWxzZXtpZih1KXtpZih1WzFdPG4pcmV0dXJufWVsc2UgdT1bbSxpXTtvPVttLG5dfX1lbHNlIGlmKHM9eS0oYT0oZi1kKS8ocC1oKSkqbSxhPC0xfHxhPjEpaWYoZj5kKXtpZih1KXtpZih1WzFdPj1pKXJldHVybn1lbHNlIHU9WyhuLXMpL2Esbl07bz1bKGktcykvYSxpXX1lbHNle2lmKHUpe2lmKHVbMV08bilyZXR1cm59ZWxzZSB1PVsoaS1zKS9hLGldO289WyhuLXMpL2Esbl19ZWxzZSBpZihoPHApe2lmKHUpe2lmKHVbMF0+PXIpcmV0dXJufWVsc2UgdT1bZSxhKmUrc107bz1bcixhKnIrc119ZWxzZXtpZih1KXtpZih1WzBdPGUpcmV0dXJufWVsc2UgdT1bcixhKnIrc107bz1bZSxhKmUrc119cmV0dXJuIHRbMF09dSx0WzFdPW8sITB9ZnVuY3Rpb24gUHcodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBOdyh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gUncodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBEdyxGdz1bXTtmdW5jdGlvbiBMdyh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLG89bi5zaXRlO2lmKHIhPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSx1PXJbMF0tYSxjPXJbMV0tcyxsPW9bMF0tYSxmPW9bMV0tcyxoPTIqKHUqZi1jKmwpO2lmKCEoaD49LSR3KSl7dmFyIGQ9dSp1K2MqYyxwPWwqbCtmKmYsbT0oZipkLWMqcCkvaCx5PSh1KnAtbCpkKS9oLHY9RncucG9wKCl8fG5ldyBmdW5jdGlvbigpe1N3KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH07di5hcmM9dCx2LnNpdGU9aSx2Lng9bSthLHYueT0odi5jeT15K3MpK01hdGguc3FydChtKm0reSp5KSx0LmNpcmNsZT12O2Zvcih2YXIgZz1udWxsLGI9S3cuXztiOylpZih2Lnk8Yi55fHx2Lnk9PT1iLnkmJnYueDw9Yi54KXtpZighYi5MKXtnPWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe2c9YjticmVha31iPWIuUn1Ldy5pbnNlcnQoZyx2KSxnfHwoRHc9dil9fX19ZnVuY3Rpb24gVncodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KER3PWUuTiksS3cucmVtb3ZlKGUpLEZ3LnB1c2goZSksU3coZSksdC5jaXJjbGU9bnVsbCl9dmFyIHp3PVtdO2Z1bmN0aW9uIEJ3KHQpe3ZhciBlPXp3LnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtTdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9O3JldHVybiBlLnNpdGU9dCxlfWZ1bmN0aW9uIFV3KHQpe1Z3KHQpLFF3LnJlbW92ZSh0KSx6dy5wdXNoKHQpLFN3KHQpfWZ1bmN0aW9uIEh3KHQpe3ZhciBlPXQuY2lyY2xlLG49ZS54LHI9ZS5jeSxpPVtuLHJdLG89dC5QLGE9dC5OLHM9W3RdO1V3KHQpO2Zvcih2YXIgdT1vO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPFh3JiZNYXRoLmFicyhyLXUuY2lyY2xlLmN5KTxYdzspbz11LlAscy51bnNoaWZ0KHUpLFV3KHUpLHU9bztzLnVuc2hpZnQodSksVncodSk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8WHcmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPFh3OylhPWMuTixzLnB1c2goYyksVXcoYyksYz1hO3MucHVzaChjKSxWdyhjKTt2YXIgbCxmPXMubGVuZ3RoO2ZvcihsPTE7bDxmOysrbClqdygoYz1zW2xdKS5lZGdlLCh1PXNbbC0xXSkuc2l0ZSxjLnNpdGUsaSk7KGM9c1tmLTFdKS5lZGdlPWt3KCh1PXNbMF0pLnNpdGUsYy5zaXRlLG51bGwsaSksTHcodSksTHcoYyl9ZnVuY3Rpb24gcXcodCl7Zm9yKHZhciBlLG4scixpLG89dFswXSxhPXRbMV0scz1Rdy5fO3M7KWlmKChyPUd3KHMsYSktbyk+WHcpcz1zLkw7ZWxzZXtpZighKChpPW8tV3cocyxhKSk+WHcpKXtyPi1Ydz8oZT1zLlAsbj1zKTppPi1Ydz8oZT1zLG49cy5OKTplPW49czticmVha31pZighcy5SKXtlPXM7YnJlYWt9cz1zLlJ9IWZ1bmN0aW9uKHQpe1l3W3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX0odCk7dmFyIHU9QncodCk7aWYoUXcuaW5zZXJ0KGUsdSksZXx8bil7aWYoZT09PW4pcmV0dXJuIFZ3KGUpLG49QncoZS5zaXRlKSxRdy5pbnNlcnQodSxuKSx1LmVkZ2U9bi5lZGdlPWt3KGUuc2l0ZSx1LnNpdGUpLEx3KGUpLHZvaWQgTHcobik7aWYobil7VncoZSksVncobik7dmFyIGM9ZS5zaXRlLGw9Y1swXSxmPWNbMV0saD10WzBdLWwsZD10WzFdLWYscD1uLnNpdGUsbT1wWzBdLWwseT1wWzFdLWYsdj0yKihoKnktZCptKSxnPWgqaCtkKmQsYj1tKm0reSp5LF89Wyh5KmctZCpiKS92K2wsKGgqYi1tKmcpL3YrZl07ancobi5lZGdlLGMscCxfKSx1LmVkZ2U9a3coYyx0LG51bGwsXyksbi5lZGdlPWt3KHQscCxudWxsLF8pLEx3KGUpLEx3KG4pfWVsc2UgdS5lZGdlPWt3KGUuc2l0ZSx1LnNpdGUpfX1mdW5jdGlvbiBHdyh0LGUpe3ZhciBuPXQuc2l0ZSxyPW5bMF0saT1uWzFdLG89aS1lO2lmKCFvKXJldHVybiByO3ZhciBhPXQuUDtpZighYSlyZXR1cm4tMS8wO3ZhciBzPShuPWEuc2l0ZSlbMF0sdT1uWzFdLGM9dS1lO2lmKCFjKXJldHVybiBzO3ZhciBsPXMtcixmPTEvby0xL2MsaD1sL2M7cmV0dXJuIGY/KC1oK01hdGguc3FydChoKmgtMipmKihsKmwvKC0yKmMpLXUrYy8yK2ktby8yKSkpL2YrcjoocitzKS8yfWZ1bmN0aW9uIFd3KHQsZSl7dmFyIG49dC5OO2lmKG4pcmV0dXJuIEd3KG4sZSk7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09ZT9yWzBdOjEvMH12YXIgUXcsWXcsS3csWncsWHc9MWUtNiwkdz0xZS0xMjtmdW5jdGlvbiBKdyh0LGUpe3JldHVybiBlWzFdLXRbMV18fGVbMF0tdFswXX1mdW5jdGlvbiB0eCh0LGUpe3ZhciBuLHIsaSxvPXQuc29ydChKdykucG9wKCk7Zm9yKFp3PVtdLFl3PW5ldyBBcnJheSh0Lmxlbmd0aCksUXc9bmV3IFR3LEt3PW5ldyBUdzs7KWlmKGk9RHcsbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1uJiZvWzFdPT09cnx8KHF3KG8pLG49b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO0h3KGkuYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG4scixpPTAsbz1Zdy5sZW5ndGg7aTxvOysraSlpZigodD1Zd1tpXSkmJihyPShlPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgYT1uZXcgQXJyYXkocikscz1uZXcgQXJyYXkocik7Zm9yKG49MDtuPHI7KytuKWFbbl09bixzW25dPVB3KHQsWndbZVtuXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSksbj0wO248cjsrK24pc1tuXT1lW2Fbbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBhPStlWzBdWzBdLHM9K2VbMF1bMV0sdT0rZVsxXVswXSxjPStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksbz1ady5sZW5ndGg7by0tOylNdyhpPVp3W29dLHQsZSxuLHIpJiZJdyhpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT5Yd3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT5Ydyl8fGRlbGV0ZSBad1tvXX0oYSxzLHUsYyksZnVuY3Rpb24odCxlLG4scil7dmFyIGksbyxhLHMsdSxjLGwsZixoLGQscCxtLHk9WXcubGVuZ3RoLHY9ITA7Zm9yKGk9MDtpPHk7KytpKWlmKG89WXdbaV0pe2ZvcihhPW8uc2l0ZSxzPSh1PW8uaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOylad1t1W3NdXXx8dS5zcGxpY2UocywxKTtmb3Iocz0wLGM9dS5sZW5ndGg7czxjOylwPShkPVJ3KG8sWndbdVtzXV0pKVswXSxtPWRbMV0sZj0obD1OdyhvLFp3W3VbKytzJWNdXSkpWzBdLGg9bFsxXSwoTWF0aC5hYnMocC1mKT5Yd3x8TWF0aC5hYnMobS1oKT5YdykmJih1LnNwbGljZShzLDAsWncucHVzaChBdyhhLGQsTWF0aC5hYnMocC10KTxYdyYmci1tPlh3P1t0LE1hdGguYWJzKGYtdCk8WHc/aDpyXTpNYXRoLmFicyhtLXIpPFh3JiZuLXA+WHc/W01hdGguYWJzKGgtcik8WHc/ZjpuLHJdOk1hdGguYWJzKHAtbik8WHcmJm0tZT5Ydz9bbixNYXRoLmFicyhmLW4pPFh3P2g6ZV06TWF0aC5hYnMobS1lKTxYdyYmcC10Plh3P1tNYXRoLmFicyhoLWUpPFh3P2Y6dCxlXTpudWxsKSktMSksKytjKTtjJiYodj0hMSl9aWYodil7dmFyIGcsYixfLHc9MS8wO2ZvcihpPTAsdj1udWxsO2k8eTsrK2kpKG89WXdbaV0pJiYoXz0oZz0oYT1vLnNpdGUpWzBdLXQpKmcrKGI9YVsxXS1lKSpiKTx3JiYodz1fLHY9byk7aWYodil7dmFyIHg9W3QsZV0sUz1bdCxyXSxFPVtuLHJdLEM9W24sZV07di5oYWxmZWRnZXMucHVzaChady5wdXNoKEF3KGE9di5zaXRlLHgsUykpLTEsWncucHVzaChBdyhhLFMsRSkpLTEsWncucHVzaChBdyhhLEUsQykpLTEsWncucHVzaChBdyhhLEMseCkpLTEpfX1mb3IoaT0wO2k8eTsrK2kpKG89WXdbaV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWXdbaV0pfShhLHMsdSxjKX10aGlzLmVkZ2VzPVp3LHRoaXMuY2VsbHM9WXcsUXc9S3c9Wnc9WXc9bnVsbH10eC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnR4LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24oZSl7dmFyIG49ZS5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBOdyhlLHRbbl0pfSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKG4scil7aWYobz0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLGEscyx1LGMsbD1uLnNpdGUsZj0tMSxoPWVbaVtvLTFdXSxkPWgubGVmdD09PWw/aC5yaWdodDpoLmxlZnQ7KytmPG87KWE9ZCxkPShoPWVbaVtmXV0pLmxlZnQ9PT1sP2gucmlnaHQ6aC5sZWZ0LGEmJmQmJnI8YS5pbmRleCYmcjxkLmluZGV4JiYoKHM9bClbMF0tKGM9ZClbMF0pKigodT1hKVsxXS1zWzFdKS0oc1swXS11WzBdKSooY1sxXS1zWzFdKTwwJiZ0LnB1c2goW2wuZGF0YSxhLmRhdGEsZC5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLG89dGhpcyxhPW8uX2ZvdW5kfHwwLHM9by5jZWxscy5sZW5ndGg7IShpPW8uY2VsbHNbYV0pOylpZigrK2E+PXMpcmV0dXJuIG51bGw7dmFyIHU9dC1pLnNpdGVbMF0sYz1lLWkuc2l0ZVsxXSxsPXUqdStjKmM7ZG97aT1vLmNlbGxzW3I9YV0sYT1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9by5lZGdlc1tuXSxzPXIubGVmdDtpZihzIT09aS5zaXRlJiZzfHwocz1yLnJpZ2h0KSl7dmFyIHU9dC1zWzBdLGM9ZS1zWzFdLGY9dSp1K2MqYztmPGwmJihsPWYsYT1zLmluZGV4KX19KX13aGlsZShudWxsIT09YSk7cmV0dXJuIG8uX2ZvdW5kPXIsbnVsbD09bnx8bDw9bipuP2kuc2l0ZTpudWxsfX07dmFyIGV4PWZ1bmN0aW9uKCl7dmFyIHQ9X3csZT13dyxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IHR4KHIubWFwKGZ1bmN0aW9uKG4saSl7dmFyIG89W01hdGgucm91bmQodChuLGkscikvWHcpKlh3LE1hdGgucm91bmQoZShuLGkscikvWHcpKlh3XTtyZXR1cm4gby5pbmRleD1pLG8uZGF0YT1uLG99KSxuKX1yZXR1cm4gci5wb2x5Z29ucz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5wb2x5Z29ucygpfSxyLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLmxpbmtzKCl9LHIudHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnRyaWFuZ2xlcygpfSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpidygrZSkscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YncoK3QpLHIpOmV9LHIuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSxyKTpuJiZbW25bMF1bMF0sblswXVsxXV0sW25bMV1bMF0sblsxXVsxXV1dfSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbMCwwXSxbK3RbMF0sK3RbMV1dXSxyKTpuJiZbblsxXVswXS1uWzBdWzBdLG5bMV1bMV0tblswXVsxXV19LHJ9LG54PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gcngodCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufXJ4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6cngsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IHJ4KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgcngodGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgaXg9bmV3IHJ4KDEsMCwwKTtmdW5jdGlvbiBveCh0KXtyZXR1cm4gdC5fX3pvb218fGl4fWZ1bmN0aW9uIGF4KCl7UXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9b3gucHJvdG90eXBlPXJ4LnByb3RvdHlwZTt2YXIgc3g9ZnVuY3Rpb24oKXtRdC5wcmV2ZW50RGVmYXVsdCgpLFF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfTtmdW5jdGlvbiB1eCgpe3JldHVybiFRdC5idXR0b259ZnVuY3Rpb24gY3goKXt2YXIgdCxlLG49dGhpcztyZXR1cm4gbiBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KHQ9KG49bi5vd25lclNWR0VsZW1lbnR8fG4pLndpZHRoLmJhc2VWYWwudmFsdWUsZT1uLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1uLmNsaWVudFdpZHRoLGU9bi5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxlXV19ZnVuY3Rpb24gbHgoKXtyZXR1cm4gdGhpcy5fX3pvb218fGl4fWZ1bmN0aW9uIGZ4KCl7cmV0dXJuLVF0LmRlbHRhWSooUXQuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gaHgoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gZHgodCxlLG4pe3ZhciByPXQuaW52ZXJ0WChlWzBdWzBdKS1uWzBdWzBdLGk9dC5pbnZlcnRYKGVbMV1bMF0pLW5bMV1bMF0sbz10LmludmVydFkoZVswXVsxXSktblswXVsxXSxhPXQuaW52ZXJ0WShlWzFdWzFdKS1uWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfXZhciBweD1mdW5jdGlvbigpe3ZhciB0LGUsbj11eCxyPWN4LGk9ZHgsbz1meCxhPWh4LHM9WzAsMS8wXSx1PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLGM9MjUwLGw9YXIsZj1bXSxoPWh0KCJzdGFydCIsInpvb20iLCJlbmQiKSxkPTUwMCxwPTE1MCxtPTA7ZnVuY3Rpb24geSh0KXt0LnByb3BlcnR5KCJfX3pvb20iLGx4KS5vbigid2hlZWwuem9vbSIsUykub24oIm1vdXNlZG93bi56b29tIixFKS5vbigiZGJsY2xpY2suem9vbSIsQykuZmlsdGVyKGEpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLE8pLm9uKCJ0b3VjaG1vdmUuem9vbSIsVCkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsaykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyByeChlLHQueCx0LnkpfWZ1bmN0aW9uIGcodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IHJ4KHQuayxyLGkpfWZ1bmN0aW9uIGIodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gXyh0LGUsbil7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLGk9dyh0aGlzLHQpLG89ci5hcHBseSh0aGlzLHQpLGE9bnx8YihvKSxzPU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLHU9dGhpcy5fX3pvb20sYz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsdCk6ZSxmPWwodS5pbnZlcnQoYSkuY29uY2F0KHMvdS5rKSxjLmludmVydChhKS5jb25jYXQocy9jLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1jO2Vsc2V7dmFyIGU9Zih0KSxuPXMvZVsyXTt0PW5ldyByeChuLGFbMF0tZVswXSpuLGFbMV0tZVsxXSpuKX1pLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiB3KHQsZSl7Zm9yKHZhciBuLHI9MCxpPWYubGVuZ3RoO3I8aTsrK3IpaWYoKG49ZltyXSkudGhhdD09PXQpcmV0dXJuIG47cmV0dXJuIG5ldyB4KHQsZSl9ZnVuY3Rpb24geCh0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1yLmFwcGx5KHQsZSl9ZnVuY3Rpb24gUygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD13KHRoaXMsYXJndW1lbnRzKSxlPXRoaXMuX196b29tLHI9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUuaypNYXRoLnBvdygyLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLGE9ZmUodGhpcyk7aWYodC53aGVlbCl0Lm1vdXNlWzBdWzBdPT09YVswXSYmdC5tb3VzZVswXVsxXT09PWFbMV18fCh0Lm1vdXNlWzFdPWUuaW52ZXJ0KHQubW91c2VbMF09YSkpLGNsZWFyVGltZW91dCh0LndoZWVsKTtlbHNle2lmKGUuaz09PXIpcmV0dXJuO3QubW91c2U9W2EsZS5pbnZlcnQoYSldLEpyKHRoaXMpLHQuc3RhcnQoKX1zeCgpLHQud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbigpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfSxwKSx0Lnpvb20oIm1vdXNlIixpKGcodihlLHIpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsdSkpfX1mdW5jdGlvbiBFKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD13KHRoaXMsYXJndW1lbnRzKSxyPWllKFF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24oKXtpZihzeCgpLCF0Lm1vdmVkKXt2YXIgZT1RdC5jbGllbnRYLWEsbj1RdC5jbGllbnRZLXM7dC5tb3ZlZD1lKmUrbipuPm19dC56b29tKCJtb3VzZSIsaShnKHQudGhhdC5fX3pvb20sdC5tb3VzZVswXT1mZSh0LnRoYXQpLHQubW91c2VbMV0pLHQuZXh0ZW50LHUpKX0sITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uKCl7ci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxnZShRdC52aWV3LHQubW92ZWQpLHN4KCksdC5lbmQoKX0sITApLG89ZmUodGhpcyksYT1RdC5jbGllbnRYLHM9UXQuY2xpZW50WTt2ZShRdC52aWV3KSxheCgpLHQubW91c2U9W28sdGhpcy5fX3pvb20uaW52ZXJ0KG8pXSxKcih0aGlzKSx0LnN0YXJ0KCl9fWZ1bmN0aW9uIEMoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1mZSh0aGlzKSxvPXQuaW52ZXJ0KGUpLGE9aShnKHYodCx0LmsqKFF0LnNoaWZ0S2V5Py41OjIpKSxlLG8pLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHUpO3N4KCksYz4wP2llKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihjKS5jYWxsKF8sYSxlKTppZSh0aGlzKS5jYWxsKHkudHJhbnNmb3JtLGEpfX1mdW5jdGlvbiBPKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlLHIsaSxvLGE9dyh0aGlzLGFyZ3VtZW50cykscz1RdC5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2ZvcihheCgpLHI9MDtyPHU7KytyKW89W289ZGUodGhpcyxzLChpPXNbcl0pLmlkZW50aWZpZXIpLHRoaXMuX196b29tLmludmVydChvKSxpLmlkZW50aWZpZXJdLGEudG91Y2gwP2EudG91Y2gxfHwoYS50b3VjaDE9byk6KGEudG91Y2gwPW8sZT0hMCk7aWYodCYmKHQ9Y2xlYXJUaW1lb3V0KHQpLCFhLnRvdWNoMSkpcmV0dXJuIGEuZW5kKCksdm9pZCgobz1pZSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpKSYmby5hcHBseSh0aGlzLGFyZ3VtZW50cykpO2UmJih0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0PW51bGx9LGQpLEpyKHRoaXMpLGEuc3RhcnQoKSl9fWZ1bmN0aW9uIFQoKXt2YXIgZSxuLHIsbyxhPXcodGhpcyxhcmd1bWVudHMpLHM9UXQuY2hhbmdlZFRvdWNoZXMsYz1zLmxlbmd0aDtmb3Ioc3goKSx0JiYodD1jbGVhclRpbWVvdXQodCkpLGU9MDtlPGM7KytlKXI9ZGUodGhpcyxzLChuPXNbZV0pLmlkZW50aWZpZXIpLGEudG91Y2gwJiZhLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9hLnRvdWNoMFswXT1yOmEudG91Y2gxJiZhLnRvdWNoMVsyXT09PW4uaWRlbnRpZmllciYmKGEudG91Y2gxWzBdPXIpO2lmKG49YS50aGF0Ll9fem9vbSxhLnRvdWNoMSl7dmFyIGw9YS50b3VjaDBbMF0sZj1hLnRvdWNoMFsxXSxoPWEudG91Y2gxWzBdLGQ9YS50b3VjaDFbMV0scD0ocD1oWzBdLWxbMF0pKnArKHA9aFsxXS1sWzFdKSpwLG09KG09ZFswXS1mWzBdKSptKyhtPWRbMV0tZlsxXSkqbTtuPXYobixNYXRoLnNxcnQocC9tKSkscj1bKGxbMF0raFswXSkvMiwobFsxXStoWzFdKS8yXSxvPVsoZlswXStkWzBdKS8yLChmWzFdK2RbMV0pLzJdfWVsc2V7aWYoIWEudG91Y2gwKXJldHVybjtyPWEudG91Y2gwWzBdLG89YS50b3VjaDBbMV19YS56b29tKCJ0b3VjaCIsaShnKG4scixvKSxhLmV4dGVudCx1KSl9ZnVuY3Rpb24gaygpe3ZhciB0LG4scj13KHRoaXMsYXJndW1lbnRzKSxpPVF0LmNoYW5nZWRUb3VjaGVzLG89aS5sZW5ndGg7Zm9yKGF4KCksZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dChmdW5jdGlvbigpe2U9bnVsbH0sZCksdD0wO3Q8bzsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7ci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDA/ci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTpyLmVuZCgpfXJldHVybiB5LnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dDtuLnByb3BlcnR5KCJfX3pvb20iLGx4KSx0IT09bj9fKHQsZSk6bi5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7dyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSkuZW5kKCl9KX0seS5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSl7eS5zY2FsZVRvKHQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSl9KX0seS5zY2FsZVRvPWZ1bmN0aW9uKHQsZSl7eS50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20sbz1iKHQpLGE9bi5pbnZlcnQobykscz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiBpKGcodihuLHMpLG8sYSksdCx1KX0pfSx5LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsZSxuKXt5LnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdSl9KX0seS50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbil7eS50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89dGhpcy5fX3pvb20sYT1iKHQpO3JldHVybiBpKGl4LnRyYW5zbGF0ZShhWzBdLGFbMV0pLnNjYWxlKG8uaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlPy1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj8tbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LW4pLHQsdSl9KX0seC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLmluZGV4PWYucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihmLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXskdChuZXcgZnVuY3Rpb24odCxlLG4pe3RoaXMudGFyZ2V0PXksdGhpcy50eXBlPWUsdGhpcy50cmFuc2Zvcm09bn0oMCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSx5LndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpueCgrdCkseSk6b30seS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpueCghIXQpLHkpOm59LHkudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bngoISF0KSx5KTphfSx5LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om54KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSx5KTpyfSx5LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0seSk6W3NbMF0sc1sxXV19LHkudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1WzBdWzBdPSt0WzBdWzBdLHVbMV1bMF09K3RbMV1bMF0sdVswXVsxXT0rdFswXVsxXSx1WzFdWzFdPSt0WzFdWzFdLHkpOltbdVswXVswXSx1WzBdWzFdXSxbdVsxXVswXSx1WzFdWzFdXV19LHkuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQseSk6aX0seS5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx5KTpjfSx5LmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQseSk6bH0seS5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD95OnR9LHkuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0odD0rdCkqdCx5KTpNYXRoLnNxcnQobSl9LHl9O24uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIjUuNS4wIn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBqfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBJfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb3R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEVvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geG99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTW99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR2V9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2bn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2YX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ2V9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBBYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE5hfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVmF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4aX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9pfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd2l9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4aX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU2l9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6aX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEthfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWmF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdHN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBlc30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBuc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBic30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT3N9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga3N9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRnN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1zfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR3N9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBJY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhjfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdGx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmbH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX2x9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5bH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCbH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPbH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFdmfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBoaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBraH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGpofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBNaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGJofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gemh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhjfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSXV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRZn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5ZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJGh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4ZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6ZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd2R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIZH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBabn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQW59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gS259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBucn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVW59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBocn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGRyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6b30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR2R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWGR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEpkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBlcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTcH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB4cH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY3B9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1cH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFBwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBScH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE52fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEx2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6dn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJ2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVXZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHF2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR3Z9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEt2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFp2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGVnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG5nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHVnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGRnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHBnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGJnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBrZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gamd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9ifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYWJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEV0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZmV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHB0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbGV9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gaWV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBoZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE10fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZGV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEl0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkdH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBUYn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBQYn0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBNYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJGJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB0X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGVffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHVffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBtX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQ199KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gd199KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1ffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQl99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZXd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiByd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG93fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGx3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZnd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGh3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZHd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHl3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdnd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGd3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4genB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEhwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEpwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBubX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBobX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGRtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHVtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHltfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2bX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHdtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBBbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGptfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEZtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHptfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFltfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEptfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdHl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGF5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc3l9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1eX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGN5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3dn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHh2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ganJ9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gUHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBleH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHB4fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb3h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpeH0pfSxXZjRwOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwidiIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBxfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gSH0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJxIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pO3ZhciByPW4oIkNjbkciKSxpPW4oIm1yU0ciKSxvPW4oIm42Z0ciKSxhPW4oIks5SWEiKSxzPShuKCI2YmxGIiksbigiZFdaZyIpKSx1PShuKCJaWWp0IiksbigiWVNoMiIpKSxjPW5ldyByLm8oIm1hdC1zYW5pdHktY2hlY2tzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Nhbml0eUNoZWNrc0VuYWJsZWQ9dCx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLHRoaXMuX2hhc0NoZWNrZWRIYW1tZXI9ITEsdGhpcy5fZG9jdW1lbnQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQ/ZG9jdW1lbnQ6bnVsbCx0aGlzLl93aW5kb3c9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdz93aW5kb3c6bnVsbCx0aGlzLl9hcmVDaGVja3NFbmFibGVkKCkmJiF0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzJiYodGhpcy5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkKCksdGhpcy5fY2hlY2tUaGVtZUlzUHJlc2VudCgpLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITApfXJldHVybiB0LnByb3RvdHlwZS5fYXJlQ2hlY2tzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zYW5pdHlDaGVja3NFbmFibGVkJiZPYmplY3Qoci5XKSgpJiYhdGhpcy5faXNUZXN0RW52KCl9LHQucHJvdG90eXBlLl9pc1Rlc3RFbnY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2luZG93JiYodGhpcy5fd2luZG93Ll9fa2FybWFfX3x8dGhpcy5fd2luZG93Lmphc21pbmUpfSx0LnByb3RvdHlwZS5fY2hlY2tEb2N0eXBlSXNEZWZpbmVkPWZ1bmN0aW9uKCl7dGhpcy5fZG9jdW1lbnQmJiF0aGlzLl9kb2N1bWVudC5kb2N0eXBlJiZjb25zb2xlLndhcm4oIkN1cnJlbnQgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhIGRvY3R5cGUuIFRoaXMgbWF5IGNhdXNlIHNvbWUgQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG5vdCB0byBiZWhhdmUgYXMgZXhwZWN0ZWQuIil9LHQucHJvdG90eXBlLl9jaGVja1RoZW1lSXNQcmVzZW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fZG9jdW1lbnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBnZXRDb21wdXRlZFN0eWxlKXt2YXIgdD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTGlzdC5hZGQoIm1hdC10aGVtZS1sb2FkZWQtbWFya2VyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKHQpO2UmJiJub25lIiE9PWUuZGlzcGxheSYmY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBBbmd1bGFyIE1hdGVyaWFsIGNvcmUgdGhlbWUuIE1vc3QgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIEZvciBtb3JlIGluZm8gcmVmZXIgdG8gdGhlIHRoZW1pbmcgZ3VpZGU6IGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS90aGVtaW5nIiksdGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19LHQucHJvdG90eXBlLl9jaGVja0hhbW1lcklzQXZhaWxhYmxlPWZ1bmN0aW9uKCl7IXRoaXMuX2hhc0NoZWNrZWRIYW1tZXImJnRoaXMuX3dpbmRvdyYmKHRoaXMuX2FyZUNoZWNrc0VuYWJsZWQoKSYmIXRoaXMuX3dpbmRvdy5IYW1tZXImJmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgSGFtbWVySlMuIENlcnRhaW4gQW5ndWxhciBNYXRlcmlhbCBjb21wb25lbnRzIG1heSBub3Qgd29yayBjb3JyZWN0bHkuIiksdGhpcy5faGFzQ2hlY2tlZEhhbW1lcj0hMCl9LHR9KCk7ZnVuY3Rpb24gZih0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgcj10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuX2Rpc2FibGVkPSExLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChvLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KHQpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyluW3JdPWFyZ3VtZW50c1tyXTt2YXIgaT10LmFwcGx5KHRoaXMsbil8fHRoaXM7cmV0dXJuIGkuY29sb3I9ZSxpfXJldHVybiBPYmplY3QoaS5iKShuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwiY29sb3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3J9LHNldDpmdW5jdGlvbih0KXt2YXIgbj10fHxlO24hPT10aGlzLl9jb2xvciYmKHRoaXMuX2NvbG9yJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgibWF0LSIrdGhpcy5fY29sb3IpLG4mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtIituKSx0aGlzLl9jb2xvcj1uKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxufSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3ZhciByPXQuYXBwbHkodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fZGlzYWJsZVJpcHBsZT0hMSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZVJpcHBsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZVJpcHBsZT1PYmplY3Qoby5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSh0KX12YXIgcD1uZXcgci5vKCJNQVRfREFURV9MT0NBTEUiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyLlYpKHIucyl9fSksbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9sb2NhbGVDaGFuZ2VzPW5ldyBhLmF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibG9jYWxlQ2hhbmdlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2NhbGVDaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fHx0aGlzLmlzRGF0ZUluc3RhbmNlKHQpJiZ0aGlzLmlzVmFsaWQodCk/dDp0aGlzLmludmFsaWQoKX0sdC5wcm90b3R5cGUuc2V0TG9jYWxlPWZ1bmN0aW9uKHQpe3RoaXMubG9jYWxlPXQsdGhpcy5fbG9jYWxlQ2hhbmdlcy5uZXh0KCl9LHQucHJvdG90eXBlLmNvbXBhcmVEYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0WWVhcih0KS10aGlzLmdldFllYXIoZSl8fHRoaXMuZ2V0TW9udGgodCktdGhpcy5nZXRNb250aChlKXx8dGhpcy5nZXREYXRlKHQpLXRoaXMuZ2V0RGF0ZShlKX0sdC5wcm90b3R5cGUuc2FtZURhdGU9ZnVuY3Rpb24odCxlKXtpZih0JiZlKXt2YXIgbj10aGlzLmlzVmFsaWQodCkscj10aGlzLmlzVmFsaWQoZSk7cmV0dXJuIG4mJnI/IXRoaXMuY29tcGFyZURhdGUodCxlKTpuPT1yfXJldHVybiB0PT1lfSx0LnByb3RvdHlwZS5jbGFtcERhdGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlJiZ0aGlzLmNvbXBhcmVEYXRlKHQsZSk8MD9lOm4mJnRoaXMuY29tcGFyZURhdGUodCxuKT4wP246dH0sdH0oKSx5PW5ldyByLm8oIm1hdC1kYXRlLWZvcm1hdHMiKSx2PSJ1bmRlZmluZWQiIT10eXBlb2YgSW50bCxnPXtsb25nOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLG5hcnJvdzpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdfSxiPXgoMzEsZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KzEpfSksXz17bG9uZzpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxuYXJyb3c6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl19LHc9L15cZHs0fS1cZHsyfS1cZHsyfSg/OlRcZHsyfTpcZHsyfTpcZHsyfSg/OlwuXGQrKT8oPzpafCg/Oig/OlwrfC0pXGR7Mn06XGR7Mn0pKT8pPyQvO2Z1bmN0aW9uIHgodCxlKXtmb3IodmFyIG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1lKHIpO3JldHVybiBufXZhciBTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIudXNlVXRjRm9yRGlzcGxheT0hMCx0LnByb3RvdHlwZS5zZXRMb2NhbGUuY2FsbChyLGUpLHIudXNlVXRjRm9yRGlzcGxheT0hbi5UUklERU5ULHIuX2NsYW1wRGF0ZT1uLlRSSURFTlR8fG4uRURHRSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0sZS5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCl9LGUucHJvdG90eXBlLmdldERheU9mV2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sZS5wcm90b3R5cGUuZ2V0TW9udGhOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHYpe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHttb250aDp0LHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHgoMTIsZnVuY3Rpb24odCl7cmV0dXJuIGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKGUuX2Zvcm1hdChuLG5ldyBEYXRlKDIwMTcsdCwxKSkpfSl9cmV0dXJuIGdbdF19LGUucHJvdG90eXBlLmdldERhdGVOYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodil7dmFyIGU9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUse2RheToibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCgzMSxmdW5jdGlvbihuKXtyZXR1cm4gdC5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC5fZm9ybWF0KGUsbmV3IERhdGUoMjAxNywwLG4rMSkpKX0pfXJldHVybiBifSxlLnByb3RvdHlwZS5nZXREYXlPZldlZWtOYW1lcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHYpe3ZhciBuPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt3ZWVrZGF5OnQsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4geCg3LGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhlLl9mb3JtYXQobixuZXcgRGF0ZSgyMDE3LDAsdCsxKSkpfSl9cmV0dXJuIF9bdF19LGUucHJvdG90eXBlLmdldFllYXJOYW1lPWZ1bmN0aW9uKHQpe2lmKHYpe3ZhciBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHt5ZWFyOiJudW1lcmljIix0aW1lWm9uZToidXRjIn0pO3JldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0aGlzLl9mb3JtYXQoZSx0KSl9cmV0dXJuIFN0cmluZyh0aGlzLmdldFllYXIodCkpfSxlLnByb3RvdHlwZS5nZXRGaXJzdERheU9mV2Vlaz1mdW5jdGlvbigpe3JldHVybiAwfSxlLnByb3RvdHlwZS5nZXROdW1EYXlzSW5Nb250aD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXREYXRlKHRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCkrMSwwKSl9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNyZWF0ZURhdGUodGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCksdGhpcy5nZXREYXRlKHQpKX0sZS5wcm90b3R5cGUuY3JlYXRlRGF0ZT1mdW5jdGlvbih0LGUsbil7aWYoZTwwfHxlPjExKXRocm93IEVycm9yKCdJbnZhbGlkIG1vbnRoIGluZGV4ICInK2UrJyIuIE1vbnRoIGluZGV4IGhhcyB0byBiZSBiZXR3ZWVuIDAgYW5kIDExLicpO2lmKG48MSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIuIERhdGUgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLicpO3ZhciByPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codCxlLG4pO2lmKHIuZ2V0TW9udGgoKSE9ZSl0aHJvdyBFcnJvcignSW52YWxpZCBkYXRlICInK24rJyIgZm9yIG1vbnRoIHdpdGggaW5kZXggIicrZSsnIi4nKTtyZXR1cm4gcn0sZS5wcm90b3R5cGUudG9kYXk9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGV9LGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdD9uZXcgRGF0ZSh0KTp0P25ldyBEYXRlKERhdGUucGFyc2UodCkpOm51bGx9LGUucHJvdG90eXBlLmZvcm1hdD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLmlzVmFsaWQodCkpdGhyb3cgRXJyb3IoIk5hdGl2ZURhdGVBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4iKTtpZih2KXt0aGlzLl9jbGFtcERhdGUmJih0LmdldEZ1bGxZZWFyKCk8MXx8dC5nZXRGdWxsWWVhcigpPjk5OTkpJiYodD10aGlzLmNsb25lKHQpKS5zZXRGdWxsWWVhcihNYXRoLm1heCgxLE1hdGgubWluKDk5OTksdC5nZXRGdWxsWWVhcigpKSkpLGU9T2JqZWN0KGkuYSkoe30sZSx7dGltZVpvbmU6InV0YyJ9KTt2YXIgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSxlKTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KG4sdCkpfXJldHVybiB0aGlzLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyh0LnRvRGF0ZVN0cmluZygpKX0sZS5wcm90b3R5cGUuYWRkQ2FsZW5kYXJZZWFycz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZENhbGVuZGFyTW9udGhzKHQsMTIqZSl9LGUucHJvdG90eXBlLmFkZENhbGVuZGFyTW9udGhzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KStlLHRoaXMuZ2V0RGF0ZSh0KSk7cmV0dXJuIHRoaXMuZ2V0TW9udGgobikhPSgodGhpcy5nZXRNb250aCh0KStlKSUxMisxMiklMTImJihuPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKG4pLHRoaXMuZ2V0TW9udGgobiksMCkpLG59LGUucHJvdG90eXBlLmFkZENhbGVuZGFyRGF5cz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpLHRoaXMuZ2V0RGF0ZSh0KStlKX0sZS5wcm90b3R5cGUudG9Jc284NjAxPWZ1bmN0aW9uKHQpe3JldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDTW9udGgoKSsxKSx0aGlzLl8yZGlnaXQodC5nZXRVVENEYXRlKCkpXS5qb2luKCItIil9LGUucHJvdG90eXBlLmRlc2VyaWFsaXplPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYody50ZXN0KGUpKXt2YXIgbj1uZXcgRGF0ZShlKTtpZih0aGlzLmlzVmFsaWQobikpcmV0dXJuIG59fXJldHVybiB0LnByb3RvdHlwZS5kZXNlcmlhbGl6ZS5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLmlzRGF0ZUluc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZX0sZS5wcm90b3R5cGUuaXNWYWxpZD1mdW5jdGlvbih0KXtyZXR1cm4haXNOYU4odC5nZXRUaW1lKCkpfSxlLnByb3RvdHlwZS5pbnZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKE5hTil9LGUucHJvdG90eXBlLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgRGF0ZSh0LGUsbik7cmV0dXJuIHQ+PTAmJnQ8MTAwJiZyLnNldEZ1bGxZZWFyKHRoaXMuZ2V0WWVhcihyKS0xOTAwKSxyfSxlLnByb3RvdHlwZS5fMmRpZ2l0PWZ1bmN0aW9uKHQpe3JldHVybigiMDAiK3QpLnNsaWNlKC0yKX0sZS5wcm90b3R5cGUuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcdTIwMGVcdTIwMGZdL2csIiIpfSxlLnByb3RvdHlwZS5fZm9ybWF0PWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGUoRGF0ZS5VVEMoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCksZS5nZXRNaWxsaXNlY29uZHMoKSkpO3JldHVybiB0LmZvcm1hdChuKX0sZX0obSksRT17cGFyc2U6e2RhdGVJbnB1dDpudWxsfSxkaXNwbGF5OntkYXRlSW5wdXQ6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJudW1lcmljIixkYXk6Im51bWVyaWMifSxtb250aFllYXJMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0In0sZGF0ZUExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyJ9LG1vbnRoWWVhckExMXlMYWJlbDp7eWVhcjoibnVtZXJpYyIsbW9udGg6ImxvbmcifX19LEM9ZnVuY3Rpb24oKXt9LE89ZnVuY3Rpb24oKXt9LFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9saW5lcz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zZXRMaW5lQ2xhc3ModGhpcy5fbGluZXMubGVuZ3RoKSx0aGlzLl9saW5lcy5jaGFuZ2VzLnN1YnNjcmliZShmdW5jdGlvbigpe24uX3NldExpbmVDbGFzcyhuLl9saW5lcy5sZW5ndGgpfSl9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRMaW5lQ2xhc3M9ZnVuY3Rpb24odCl7dGhpcy5fcmVzZXRDbGFzc2VzKCksMj09PXR8fDM9PT10P3RoaXMuX3NldENsYXNzKCJtYXQtIit0KyItbGluZSIsITApOnQ+MyYmdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9yZXNldENsYXNzZXM9ZnVuY3Rpb24oKXt0aGlzLl9zZXRDbGFzcygibWF0LTItbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtMy1saW5lIiwhMSksdGhpcy5fc2V0Q2xhc3MoIm1hdC1tdWx0aS1saW5lIiwhMSl9LHQucHJvdG90eXBlLl9zZXRDbGFzcz1mdW5jdGlvbih0LGUpe2U/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQodCk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUodCl9LHR9KCksaz1mdW5jdGlvbigpe30sQT1mdW5jdGlvbigpe3ZhciB0PXtGQURJTkdfSU46MCxWSVNJQkxFOjEsRkFESU5HX09VVDoyLEhJRERFTjozfTtyZXR1cm4gdFt0LkZBRElOR19JTl09IkZBRElOR19JTiIsdFt0LlZJU0lCTEVdPSJWSVNJQkxFIix0W3QuRkFESU5HX09VVF09IkZBRElOR19PVVQiLHRbdC5ISURERU5dPSJISURERU4iLHR9KCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5jb25maWc9bix0aGlzLnN0YXRlPUEuSElEREVOfXJldHVybiB0LnByb3RvdHlwZS5mYWRlT3V0PWZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuZmFkZU91dFJpcHBsZSh0aGlzKX0sdH0oKSxJPXtlbnRlckR1cmF0aW9uOjQ1MCxleGl0RHVyYXRpb246NDAwfSxNPTgwMCxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3RhcmdldD10LHRoaXMuX25nWm9uZT1lLHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fdHJpZ2dlckV2ZW50cz1uZXcgTWFwLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IFNldCx0aGlzLl9ldmVudE9wdGlvbnM9ISFPYmplY3Qocy5jKSgpJiZ7cGFzc2l2ZTohMH0sdGhpcy5vbk1vdXNlZG93bj1mdW5jdGlvbih0KXt2YXIgZT1pLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPGkuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrTTtpLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fGV8fChpLl9pc1BvaW50ZXJEb3duPSEwLGkuZmFkZUluUmlwcGxlKHQuY2xpZW50WCx0LmNsaWVudFksaS5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uVG91Y2hTdGFydD1mdW5jdGlvbih0KXtpLl90YXJnZXQucmlwcGxlRGlzYWJsZWR8fChpLl9sYXN0VG91Y2hTdGFydEV2ZW50PURhdGUubm93KCksaS5faXNQb2ludGVyRG93bj0hMCxpLmZhZGVJblJpcHBsZSh0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WSxpLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9LHRoaXMub25Qb2ludGVyVXA9ZnVuY3Rpb24oKXtpLl9pc1BvaW50ZXJEb3duJiYoaS5faXNQb2ludGVyRG93bj0hMSxpLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7IXQuY29uZmlnLnBlcnNpc3RlbnQmJih0LnN0YXRlPT09QS5WSVNJQkxFfHx0LmNvbmZpZy50ZXJtaW5hdGVPblBvaW50ZXJVcCYmdC5zdGF0ZT09PUEuRkFESU5HX0lOKSYmdC5mYWRlT3V0KCl9KSl9LHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1uLm5hdGl2ZUVsZW1lbnQsdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNlZG93biIsdGhpcy5vbk1vdXNlZG93biksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoIm1vdXNldXAiLHRoaXMub25Qb2ludGVyVXApLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWxlYXZlIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hzdGFydCIsdGhpcy5vblRvdWNoU3RhcnQpLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJ0b3VjaGVuZCIsdGhpcy5vblBvaW50ZXJVcCkpfXJldHVybiB0LnByb3RvdHlwZS5mYWRlSW5SaXBwbGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvPXRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fY29udGFpbmVyUmVjdHx8dGhpcy5fY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPU9iamVjdChpLmEpKHt9LEksbi5hbmltYXRpb24pO24uY2VudGVyZWQmJih0PW8ubGVmdCtvLndpZHRoLzIsZT1vLnRvcCtvLmhlaWdodC8yKTt2YXIgcz1uLnJhZGl1c3x8ZnVuY3Rpb24odCxlLG4pe3ZhciByPU1hdGgubWF4KE1hdGguYWJzKHQtbi5sZWZ0KSxNYXRoLmFicyh0LW4ucmlnaHQpKSxpPU1hdGgubWF4KE1hdGguYWJzKGUtbi50b3ApLE1hdGguYWJzKGUtbi5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KHIqcitpKmkpfSh0LGUsbyksdT10LW8ubGVmdCxjPWUtby50b3AsbD1hLmVudGVyRHVyYXRpb24vKG4uc3BlZWRGYWN0b3J8fDEpLGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zi5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSxmLnN0eWxlLmxlZnQ9dS1zKyJweCIsZi5zdHlsZS50b3A9Yy1zKyJweCIsZi5zdHlsZS5oZWlnaHQ9MipzKyJweCIsZi5zdHlsZS53aWR0aD0yKnMrInB4IixmLnN0eWxlLmJhY2tncm91bmRDb2xvcj1uLmNvbG9yfHxudWxsLGYuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWwrIm1zIix0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGYpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGYpLmdldFByb3BlcnR5VmFsdWUoIm9wYWNpdHkiKSxmLnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUoMSkiO3ZhciBoPW5ldyBqKHRoaXMsZixuKTtyZXR1cm4gaC5zdGF0ZT1BLkZBRElOR19JTix0aGlzLl9hY3RpdmVSaXBwbGVzLmFkZChoKSxuLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPWgpLHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dmFyIHQ9aD09PXIuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU7aC5zdGF0ZT1BLlZJU0lCTEUsbi5wZXJzaXN0ZW50fHx0JiZyLl9pc1BvaW50ZXJEb3dufHxoLmZhZGVPdXQoKX0sbCksaH0sdC5wcm90b3R5cGUuZmFkZU91dFJpcHBsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KTtpZih0PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSYmKHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bnVsbCksdGhpcy5fYWN0aXZlUmlwcGxlcy5zaXplfHwodGhpcy5fY29udGFpbmVyUmVjdD1udWxsKSxlKXt2YXIgbj10LmVsZW1lbnQscj1PYmplY3QoaS5hKSh7fSxJLHQuY29uZmlnLmFuaW1hdGlvbik7bi5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249ci5leGl0RHVyYXRpb24rIm1zIixuLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9QS5GQURJTkdfT1VULHRoaXMucnVuVGltZW91dE91dHNpZGVab25lKGZ1bmN0aW9uKCl7dC5zdGF0ZT1BLkhJRERFTixuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9LHIuZXhpdER1cmF0aW9uKX19LHQucHJvdG90eXBlLmZhZGVPdXRBbGw9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmVSaXBwbGVzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZmFkZU91dCgpfSl9LHQucHJvdG90eXBlLnNldHVwVHJpZ2dlckV2ZW50cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJnQhPT10aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRoaXMuX3JlbW92ZVRyaWdnZXJFdmVudHMoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24obixyKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKHIsbixlLl9ldmVudE9wdGlvbnMpfSl9KSx0aGlzLl90cmlnZ2VyRWxlbWVudD10KX0sdC5wcm90b3R5cGUucnVuVGltZW91dE91dHNpZGVab25lPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQodCxlKX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlVHJpZ2dlckV2ZW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdHJpZ2dlckVsZW1lbnQmJnRoaXMuX3RyaWdnZXJFdmVudHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3QuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixlLHQuX2V2ZW50T3B0aW9ucyl9KX0sdH0oKSxOPW5ldyByLm8oIm1hdC1yaXBwbGUtZ2xvYmFsLW9wdGlvbnMiKSxSPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9hbmltYXRpb25Nb2RlPWksdGhpcy5yYWRpdXM9MCx0aGlzLnNwZWVkRmFjdG9yPTEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPXJ8fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBQKHRoaXMsZSx0LG4pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInRyaWdnZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcj10LHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZUNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybntjZW50ZXJlZDp0aGlzLmNlbnRlcmVkLHJhZGl1czp0aGlzLnJhZGl1cyxjb2xvcjp0aGlzLmNvbG9yLGFuaW1hdGlvbjoiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTpPYmplY3QoaS5hKSh7fSx0aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbix0aGlzLmFuaW1hdGlvbiksdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcCxzcGVlZEZhY3Rvcjp0aGlzLnNwZWVkRmFjdG9yKih0aGlzLl9nbG9iYWxPcHRpb25zLmJhc2VTcGVlZEZhY3Rvcnx8MSl9fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmlwcGxlRGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQ9ZnVuY3Rpb24oKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9LHQucHJvdG90eXBlLmxhdW5jaD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLCJudW1iZXIiPT10eXBlb2YgdD90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUodCxlLE9iamVjdChpLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLG4pKTp0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoMCwwLE9iamVjdChpLmEpKHt9LHRoaXMucmlwcGxlQ29uZmlnLHQpKX0sdH0oKSxEPWZ1bmN0aW9uKCl7fSxGPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT0idW5jaGVja2VkIix0aGlzLmRpc2FibGVkPSExfSxMPWZ1bmN0aW9uKCl7fSxWPTAsej1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9sYWJlbElkPSJtYXQtb3B0Z3JvdXAtbGFiZWwtIitWKyssZX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmKGZ1bmN0aW9uKCl7fSkpLEI9MCxVPW5ldyByLm8oIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX3BhcmVudD1uLHRoaXMuZ3JvdXA9aSx0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faWQ9Im1hdC1vcHRpb24tIitCKyssdGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZT0iIix0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPW5ldyByLm0sdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBhLmF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGlwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoby5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVSaXBwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2aWV3VmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiB0LmZvY3VzJiZ0LmZvY3VzKCl9LHQucHJvdG90eXBlLnNldEFjdGl2ZVN0eWxlcz1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LHQucHJvdG90eXBlLnNldEluYWN0aXZlU3R5bGVzPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX0sdC5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3VmFsdWV9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlkb3duPWZ1bmN0aW9uKHQpe3Qua2V5Q29kZSE9PXUuZCYmdC5rZXlDb2RlIT09dS5qfHwodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0LnByZXZlbnREZWZhdWx0KCkpfSx0LnByb3RvdHlwZS5fc2VsZWN0VmlhSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fc2VsZWN0ZWQ9IXRoaXMubXVsdGlwbGV8fCF0aGlzLl9zZWxlY3RlZCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoITApKX0sdC5wcm90b3R5cGUuX2dldFRhYkluZGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9LHQucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LHQucHJvdG90eXBlLm5nQWZ0ZXJWaWV3Q2hlY2tlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NlbGVjdGVkKXt2YXIgdD10aGlzLnZpZXdWYWx1ZTt0IT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9dCx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpLHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0hMSksdGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9KHRoaXMsdCkpfSx0fSgpLHE9ZnVuY3Rpb24oKXt9fSxYbFB3OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj1uKCI2YmxGIik7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBuZXcgci5hKGU/ZnVuY3Rpb24obil7cmV0dXJuIGUuc2NoZWR1bGUobywwLHtlcnJvcjp0LHN1YnNjcmliZXI6bn0pfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfWZ1bmN0aW9uIG8odCl7dC5zdWJzY3JpYmVyLmVycm9yKHQuZXJyb3IpfX0sWVNoMjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiaSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KTt2YXIgcj05LGk9MTMsbz0yNyxhPTMyLHM9MzUsdT0zNixjPTM3LGw9MzgsZj0zOSxoPTQwLGQ9NDgscD01NyxtPTY1LHk9OTB9LFloYk86ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgcj1uKCJDY25HIiksaT1uKCJuNmdHIiksbz1uKCJLOUlhIiksYT1uKCJwdWdUIikscz0wLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fb3BlbkNsb3NlQWxsQWN0aW9ucz1uZXcgby5hLHRoaXMuaWQ9ImNkay1hY2NvcmRpb24tIitzKyssdGhpcy5fbXVsdGk9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibXVsdGkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXVsdGl9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9tdWx0aT1PYmplY3QoaS5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5vcGVuQWxsPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbkNsb3NlQWxsKCEwKX0sdC5wcm90b3R5cGUuY2xvc2VBbGw9ZnVuY3Rpb24oKXt0aGlzLl9vcGVuQ2xvc2VBbGwoITEpfSx0LnByb3RvdHlwZS5fb3BlbkNsb3NlQWxsPWZ1bmN0aW9uKHQpe3RoaXMubXVsdGkmJnRoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnMubmV4dCh0KX0sdH0oKSxjPTAsbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciBpPXRoaXM7dGhpcy5hY2NvcmRpb249dCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2V4cGFuc2lvbkRpc3BhdGNoZXI9bix0aGlzLl9vcGVuQ2xvc2VBbGxTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuY2xvc2VkPW5ldyByLm0sdGhpcy5vcGVuZWQ9bmV3IHIubSx0aGlzLmRlc3Ryb3llZD1uZXcgci5tLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IHIubSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLWNoaWxkLSIrYysrLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyPWZ1bmN0aW9uKCl7fSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1uLmxpc3RlbihmdW5jdGlvbih0LGUpe2kuYWNjb3JkaW9uJiYhaS5hY2NvcmRpb24ubXVsdGkmJmkuYWNjb3JkaW9uLmlkPT09ZSYmaS5pZCE9PXQmJihpLmV4cGFuZGVkPSExKX0pLHRoaXMuYWNjb3JkaW9uJiYodGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPXRoaXMuX3N1YnNjcmliZVRvT3BlbkNsb3NlQWxsQWN0aW9ucygpKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJleHBhbmRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9leHBhbmRlZH0sc2V0OmZ1bmN0aW9uKHQpe3Q9T2JqZWN0KGkuYikodCksdGhpcy5fZXhwYW5kZWQhPT10JiYodGhpcy5fZXhwYW5kZWQ9dCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodCksdD8odGhpcy5vcGVuZWQuZW1pdCgpLHRoaXMuX2V4cGFuc2lvbkRpc3BhdGNoZXIubm90aWZ5KHRoaXMuaWQsdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaWQ6dGhpcy5pZCkpOnRoaXMuY2xvc2VkLmVtaXQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPU9iamVjdChpLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQuY29tcGxldGUoKSx0aGlzLmNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuZGVzdHJveWVkLmVtaXQoKSx0aGlzLmRlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3JlbW92ZVVuaXF1ZVNlbGVjdGlvbkxpc3RlbmVyKCksdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkKX0sdC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMSl9LHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hMCl9LHQucHJvdG90eXBlLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmFjY29yZGlvbi5fb3BlbkNsb3NlQWxsQWN0aW9ucy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5kaXNhYmxlZHx8KHQuZXhwYW5kZWQ9ZSl9KX0sdH0oKSxmPWZ1bmN0aW9uKCl7fX0sWWxiUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuKCJtclNHIiksbigiNmJsRiIpLG4oIkYvWEwiKTt2YXIgcj1uKCJLOUlhIiksaT1uKCJDY25HIiksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1uJiYobj0hMCk7dmFyIGk9dGhpczt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPW4sdGhpcy5fc2VsZWN0aW9uPW5ldyBTZXQsdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSx0aGlzLm9uQ2hhbmdlPXRoaXMuX2VtaXRDaGFuZ2VzP25ldyByLmE6bnVsbCxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLl9tYXJrU2VsZWN0ZWQodCl9KTp0aGlzLl9tYXJrU2VsZWN0ZWQoZVswXSksdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoPTApfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hcmtTZWxlY3RlZChlKX0pLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5kZXNlbGVjdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KGUpLGUuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX3VubWFya0FsbCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpfSx0LnByb3RvdHlwZS5pc1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfSx0LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9zZWxlY3Rpb24uc2l6ZX0sdC5wcm90b3R5cGUuaGFzVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9LHQucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuX3NlbGVjdGVkJiZ0aGlzLl9zZWxlY3RlZC5zb3J0KHQpfSx0LnByb3RvdHlwZS5fZW1pdENoYW5nZUV2ZW50PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLm9uQ2hhbmdlJiZ0aGlzLm9uQ2hhbmdlLm5leHQoe3NvdXJjZTp0aGlzLGFkZGVkOnRoaXMuX3NlbGVjdGVkVG9FbWl0LHJlbW92ZWQ6dGhpcy5fZGVzZWxlY3RlZFRvRW1pdH0pLHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10pfSx0LnByb3RvdHlwZS5fbWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX0sdC5wcm90b3R5cGUuX3VubWFya1NlbGVjdGVkPWZ1bmN0aW9uKHQpe3RoaXMuaXNTZWxlY3RlZCh0KSYmKHRoaXMuX3NlbGVjdGlvbi5kZWxldGUodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtBbGw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaXNFbXB0eSgpfHx0aGlzLl9zZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC5fdW5tYXJrU2VsZWN0ZWQoZSl9KX0sdC5wcm90b3R5cGUuX3ZlcmlmeVZhbHVlQXNzaWdubWVudD1mdW5jdGlvbih0KXtpZih0Lmxlbmd0aD4xJiYhdGhpcy5fbXVsdGlwbGUpdGhyb3cgRXJyb3IoIkNhbm5vdCBwYXNzIG11bHRpcGxlIHZhbHVlcyBpbnRvIFNlbGVjdGlvbk1vZGVsIHdpdGggc2luZ2xlLXZhbHVlIG1vZGUuIil9LHR9KCksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLl9saXN0ZW5lcnM9W119cmV0dXJuIHQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9dGhpcy5fbGlzdGVuZXJzO248ci5sZW5ndGg7bisrKSgwLHJbbl0pKHQsZSl9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9saXN0ZW5lcnMucHVzaCh0KSxmdW5jdGlvbigpe2UuX2xpc3RlbmVycz1lLl9saXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0IT09ZX0pfX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5lcnM9W119LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0fSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKX0sWllDaTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIjI2RlUiKSxhPW4oIjAvdVEiKSxzPW4oIkYvWEwiKSx1PW4oIks5SWEiKSxjPW4oIjZibEYiKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgbj10LmNhbGwodGhpcywibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJFbXB0eUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YobixlLnByb3RvdHlwZSksbn1yZXR1cm4gci5iKGUsdCksZX0oRXJyb3IpLGY9bigiVm5ELyIpLGg9bigidDlmWiIpLGQ9bigiRkZPbyIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmxpZnQobmV3IG0odCkpfX12YXIgbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWZhdWx0VmFsdWU9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgeSh0LHRoaXMuZGVmYXVsdFZhbHVlKSl9LHR9KCkseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIuZGVmYXVsdFZhbHVlPW4sci5pc0VtcHR5PSEwLHJ9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNFbXB0eT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuaXNFbXB0eSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KGQuYSksdj1uKCJ4TXlFIiksZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9YiksT2JqZWN0KHYuYSkoe2hhc1ZhbHVlOiExLG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmhhc1ZhbHVlPSEwfSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc1ZhbHVlKXRocm93IHQoKX19KX07ZnVuY3Rpb24gYigpe3JldHVybiBuZXcgbH12YXIgXz1uKCJtQ2hGIik7ZnVuY3Rpb24gdyh0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodD9PYmplY3QoZi5hKShmdW5jdGlvbihlLG4pe3JldHVybiB0KGUsbixyKX0pOl8uYSxPYmplY3QoaC5hKSgxKSxuP3AoZSk6ZyhmdW5jdGlvbigpe3JldHVybiBuZXcgbH0pKX19dmFyIHg9bigicHNXMCIpLFM9bigiNjdZLyIpLEU9bigiUGhqbiIpLEM9bigiYjdtVyIpLE89bigiRzVKMSIpO2Z1bmN0aW9uIFQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAwPT09dD9PYmplY3QoTy5iKSgpOmUubGlmdChuZXcgayh0KSl9fXZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0aGlzLnRvdGFsPXQsdGhpcy50b3RhbDwwKXRocm93IG5ldyBDLmF9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IEEodCx0aGlzLnRvdGFsKSl9LHR9KCksQT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIudG90YWw9bixyLnJpbmc9bmV3IEFycmF5LHIuY291bnQ9MCxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJpbmcsbj10aGlzLnRvdGFsLHI9dGhpcy5jb3VudCsrO2UubGVuZ3RoPG4/ZS5wdXNoKHQpOmVbciVuXT10fSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRlc3RpbmF0aW9uLGU9dGhpcy5jb3VudDtpZihlPjApZm9yKHZhciBuPXRoaXMuY291bnQ+PXRoaXMudG90YWw/dGhpcy50b3RhbDp0aGlzLmNvdW50LHI9dGhpcy5yaW5nLGk9MDtpPG47aSsrKXt2YXIgbz1lKyslbjt0Lm5leHQocltvXSl9dC5jb21wbGV0ZSgpfSxlfShkLmEpO2Z1bmN0aW9uIGoodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gci5waXBlKHQ/T2JqZWN0KGYuYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4scil9KTpfLmEsVCgxKSxuP3AoZSk6ZyhmdW5jdGlvbigpe3JldHVybiBuZXcgbH0pKX19ZnVuY3Rpb24gSSh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBNKHQsZSxuKSl9fXZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLnRoaXNBcmc9ZSx0aGlzLnNvdXJjZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBQKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnLHRoaXMuc291cmNlKSl9LHR9KCksUD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBvLnByZWRpY2F0ZT1uLG8udGhpc0FyZz1yLG8uc291cmNlPWksby5pbmRleD0wLG8udGhpc0FyZz1yfHxvLG99cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KSx0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPSExO3RyeXtlPXRoaXMucHJlZGljYXRlLmNhbGwodGhpcy50aGlzQXJnLHQsdGhpcy5pbmRleCsrLHRoaXMuc291cmNlKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWV8fHRoaXMubm90aWZ5Q29tcGxldGUoITEpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeUNvbXBsZXRlKCEwKX0sZX0oZC5hKSxOPW4oIjlaMUYiKSxSPW4oIlR4amciKSxEPW4oIlpuOEQiKTtmdW5jdGlvbiBGKHQsZSl7dmFyIG49ITE7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTImJihuPSEwKSxmdW5jdGlvbihyKXtyZXR1cm4gci5saWZ0KG5ldyBMKHQsZSxuKSl9fXZhciBMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuYWNjdW11bGF0b3I9dCx0aGlzLnNlZWQ9ZSx0aGlzLmhhc1NlZWQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgVih0LHRoaXMuYWNjdW11bGF0b3IsdGhpcy5zZWVkLHRoaXMuaGFzU2VlZCkpfSx0fSgpLFY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5hY2N1bXVsYXRvcj1uLG8uX3NlZWQ9cixvLmhhc1NlZWQ9aSxvLmluZGV4PTAsb31yZXR1cm4gci5iKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLmhhc1NlZWQ9ITAsdGhpcy5fc2VlZD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzU2VlZClyZXR1cm4gdGhpcy5fdHJ5TmV4dCh0KTt0aGlzLnNlZWQ9dCx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMuYWNjdW11bGF0b3IodGhpcy5zZWVkLHQsbil9Y2F0Y2godCl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLnNlZWQ9ZSx0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KGQuYSksej1uKCJ5M0J5IiksQj1uKCJJcDBSIiksVT1uKCJaWWp0Iik7bi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIGFufSksbi5kKGUsInkiLGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSksbi5kKGUsInoiLGZ1bmN0aW9uKCl7cmV0dXJuIHlufSksbi5kKGUsIkEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZufSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGZufSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGxufSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIHBufSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVufSksbi5kKGUsInciLGZ1bmN0aW9uKCl7cmV0dXJuIGRufSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIFllfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuICRlfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIERlfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIExlfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIG9ufSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhlfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGVufSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIHplfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSk7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX0scT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZvaWQgMD09PXImJihyPSJpbXBlcmF0aXZlIiksdm9pZCAwPT09aSYmKGk9bnVsbCk7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5uYXZpZ2F0aW9uVHJpZ2dlcj1yLG8ucmVzdG9yZWRTdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvblN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkudXJsQWZ0ZXJSZWRpcmVjdHM9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJykifSxlfShIKSxXPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkucmVhc29uPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuZXJyb3I9cixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FcnJvcihpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIGVycm9yOiAiK3RoaXMuZXJyb3IrIikifSxlfShIKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlc1JlY29nbml6ZWQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLEs9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scixpKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPXIsby5zdGF0ZT1pLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3VhcmRzQ2hlY2tTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksWj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGksbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gYS51cmxBZnRlclJlZGlyZWN0cz1yLGEuc3RhdGU9aSxhLnNob3VsZEFjdGl2YXRlPW8sYX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja0VuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIsIHNob3VsZEFjdGl2YXRlOiAiK3RoaXMuc2hvdWxkQWN0aXZhdGUrIikifSxlfShIKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1yLG8uc3RhdGU9aSxvfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksJD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9cixvLnN0YXRlPWksb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSx0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCksaXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxvdD1mdW5jdGlvbigpe30sYXQ9InByaW1hcnkiLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBhcmFtcz10fHx7fX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19cmV0dXJuW119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2V5cyIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4gbmV3IHN0KHQpfWZ1bmN0aW9uIGN0KHQsZSxuKXt2YXIgcj1uLnBhdGguc3BsaXQoIi8iKTtpZihyLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiZnVsbCI9PT1uLnBhdGhNYXRjaCYmKGUuaGFzQ2hpbGRyZW4oKXx8ci5sZW5ndGg8dC5sZW5ndGgpKXJldHVybiBudWxsO2Zvcih2YXIgaT17fSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBhPXJbb10scz10W29dO2lmKGEuc3RhcnRzV2l0aCgiOiIpKWlbYS5zdWJzdHJpbmcoMSldPXM7ZWxzZSBpZihhIT09cy5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDp0LnNsaWNlKDAsci5sZW5ndGgpLHBvc1BhcmFtczppfX12YXIgbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlcz10LHRoaXMubW9kdWxlPWV9O2Z1bmN0aW9uIGZ0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2h0KHIsZHQoZSxyKSl9fWZ1bmN0aW9uIGh0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBFbmNvdW50ZXJlZCB1bmRlZmluZWQgcm91dGUuXG4gICAgICBUaGUgcmVhc29uIG1pZ2h0IGJlIGFuIGV4dHJhIGNvbW1hLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gICAgICAgIHsgcGF0aDogJycsIHJlZGlyZWN0VG86ICcvZGFzaGJvYXJkJywgcGF0aE1hdGNoOiAnZnVsbCcgfSxcbiAgICAgICAgeyBwYXRoOiAnZGFzaGJvYXJkJywgIGNvbXBvbmVudDogRGFzaGJvYXJkQ29tcG9uZW50IH0sLCA8PCB0d28gY29tbWFzXG4gICAgICAgIHsgcGF0aDogJ2RldGFpbC86aWQnLCBjb21wb25lbnQ6IEhlcm9EZXRhaWxDb21wb25lbnQgfVxuICAgICAgXTtcbiAgICAiKTtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEFycmF5IGNhbm5vdCBiZSBzcGVjaWZpZWQiKTtpZighdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4mJnQub3V0bGV0JiZ0Lm91dGxldCE9PWF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXQiKTtpZih0LnJlZGlyZWN0VG8mJnQuY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQuY2hpbGRyZW4mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQuY29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucGF0aCYmdC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih2b2lkIDA9PT10LnJlZGlyZWN0VG8mJiF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInLiBPbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHByb3ZpZGVkOiBjb21wb25lbnQsIHJlZGlyZWN0VG8sIGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiIpO2lmKHZvaWQgMD09PXQucGF0aCYmdm9pZCAwPT09dC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkIik7aWYoInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiIvIj09PXQucGF0aC5jaGFyQXQoMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7aWYoIiI9PT10LnBhdGgmJnZvaWQgMCE9PXQucmVkaXJlY3RUbyYmdm9pZCAwPT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJ3twYXRoOiBcIiIrZSsnIiwgcmVkaXJlY3RUbzogIicrdC5yZWRpcmVjdFRvKyJcIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3BhdGhNYXRjaCcgaXMgJ3ByZWZpeCcsIGJ1dCBvZnRlbiB0aGUgaW50ZW50IGlzIHRvIHVzZSAnZnVsbCcuIik7aWYodm9pZCAwIT09dC5wYXRoTWF0Y2gmJiJmdWxsIiE9PXQucGF0aE1hdGNoJiYicHJlZml4IiE9PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGhNYXRjaCBjYW4gb25seSBiZSBzZXQgdG8gJ3ByZWZpeCcgb3IgJ2Z1bGwnIik7dC5jaGlsZHJlbiYmZnQodC5jaGlsZHJlbixlKX1mdW5jdGlvbiBkdCh0LGUpe3JldHVybiBlP3R8fGUucGF0aD90JiYhZS5wYXRoP3QrIi8iOiF0JiZlLnBhdGg/ZS5wYXRoOnQrIi8iK2UucGF0aDoiIjp0fWZ1bmN0aW9uIHB0KHQpe3ZhciBlPXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubWFwKHB0KSxuPWU/T2JqZWN0KHIuYSkoe30sdCx7Y2hpbGRyZW46ZX0pOk9iamVjdChyLmEpKHt9LHQpO3JldHVybiFuLmNvbXBvbmVudCYmKGV8fG4ubG9hZENoaWxkcmVuKSYmbi5vdXRsZXQmJm4ub3V0bGV0IT09YXQmJihuLmNvbXBvbmVudD1vdCksbn1mdW5jdGlvbiBtdCh0LGUpe3ZhciBuLHI9T2JqZWN0LmtleXModCksaT1PYmplY3Qua2V5cyhlKTtpZihyLmxlbmd0aCE9aS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspaWYodFtuPXJbb11dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZ3QodCxlKXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlKHRbbl0sbil9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHQucGlwZShPYmplY3QoRC5hKSgpLEkoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfWZ1bmN0aW9uIF90KHQpe3JldHVybiBPYmplY3QoaS5TYSkodCk/dDpPYmplY3QoaS5UYSkodCk/T2JqZWN0KGEuYSkoUHJvbWlzZS5yZXNvbHZlKHQpKTpPYmplY3Qocy5hKSh0KX1mdW5jdGlvbiB3dCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodCxlKX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe2lmKCFDdChlLnNlZ21lbnRzLG4uc2VnbWVudHMpKXJldHVybiExO2lmKGUubnVtYmVyT2ZDaGlsZHJlbiE9PW4ubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IodmFyIHIgaW4gbi5jaGlsZHJlbil7aWYoIWUuY2hpbGRyZW5bcl0pcmV0dXJuITE7aWYoIXQoZS5jaGlsZHJlbltyXSxuLmNoaWxkcmVuW3JdKSlyZXR1cm4hMX1yZXR1cm4hMH0odC5yb290LGUucm9vdCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPD1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5rZXlzKGUpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPT09dFtuXX0pfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7cmV0dXJuIGZ1bmN0aW9uIGUobixyLGkpe2lmKG4uc2VnbWVudHMubGVuZ3RoPmkubGVuZ3RoKXJldHVybiEhQ3QoYT1uLnNlZ21lbnRzLnNsaWNlKDAsaS5sZW5ndGgpLGkpJiYhci5oYXNDaGlsZHJlbigpO2lmKG4uc2VnbWVudHMubGVuZ3RoPT09aS5sZW5ndGgpe2lmKCFDdChuLnNlZ21lbnRzLGkpKXJldHVybiExO2Zvcih2YXIgbyBpbiByLmNoaWxkcmVuKXtpZighbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtpZighdChuLmNoaWxkcmVuW29dLHIuY2hpbGRyZW5bb10pKXJldHVybiExfXJldHVybiEwfXZhciBhPWkuc2xpY2UoMCxuLnNlZ21lbnRzLmxlbmd0aCkscz1pLnNsaWNlKG4uc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIUN0KG4uc2VnbWVudHMsYSkmJiEhbi5jaGlsZHJlblthdF0mJmUobi5jaGlsZHJlblthdF0scixzKX0oZSxuLG4uc2VnbWVudHMpfSh0LnJvb3QsZS5yb290KX12YXIgeHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvb3Q9dCx0aGlzLnF1ZXJ5UGFyYW1zPWUsdGhpcy5mcmFnbWVudD1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQXQuc2VyaWFsaXplKHRoaXMpfSx0fSgpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5zZWdtZW50cz10LHRoaXMuY2hpbGRyZW49ZSx0aGlzLnBhcmVudD1udWxsLGd0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9bn0pfXJldHVybiB0LnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJudW1iZXJPZkNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBqdCh0aGlzKX0sdH0oKSxFdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbWV0ZXJNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPXV0KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBEdCh0aGlzKX0sdH0oKTtmdW5jdGlvbiBDdCh0LGUpe3JldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQucGF0aD09PWVbbl0ucGF0aH0pfWZ1bmN0aW9uIE90KHQsZSl7dmFyIG49W107cmV0dXJuIGd0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxyKXtyPT09YXQmJihuPW4uY29uY2F0KGUodCxyKSkpfSksZ3QodC5jaGlsZHJlbixmdW5jdGlvbih0LHIpe3IhPT1hdCYmKG49bi5jb25jYXQoZSh0LHIpKSl9KSxufXZhciBUdD1mdW5jdGlvbigpe30sa3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQnQodCk7cmV0dXJuIG5ldyB4dChlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxlLnBhcnNlRnJhZ21lbnQoKSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiIvIitmdW5jdGlvbiB0KGUsbil7aWYoIWUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4ganQoZSk7aWYobil7dmFyIHI9ZS5jaGlsZHJlblthdF0/dChlLmNoaWxkcmVuW2F0XSwhMSk6IiIsaT1bXTtyZXR1cm4gZ3QoZS5jaGlsZHJlbixmdW5jdGlvbihlLG4pe24hPT1hdCYmaS5wdXNoKG4rIjoiK3QoZSwhMSkpfSksaS5sZW5ndGg+MD9yKyIoIitpLmpvaW4oIi8vIikrIikiOnJ9dmFyIG89T3QoZSxmdW5jdGlvbihuLHIpe3JldHVybiByPT09YXQ/W3QoZS5jaGlsZHJlblthdF0sITEpXTpbcisiOiIrdChuLCExKV19KTtyZXR1cm4ganQoZSkrIi8oIitvLmpvaW4oIi8vIikrIikifSh0LnJvb3QsITApKyhlPXQucXVlcnlQYXJhbXMsKG49T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIE10KHQpKyI9IitNdChlKX0pLmpvaW4oIiYiKTpNdCh0KSsiPSIrTXQobil9KSkubGVuZ3RoPyI/IituLmpvaW4oIiYiKToiIikrKCJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD8iIyIrZW5jb2RlVVJJKHQuZnJhZ21lbnQpOiIiKX0sdH0oKSxBdD1uZXcga3Q7ZnVuY3Rpb24ganQodCl7cmV0dXJuIHQuc2VnbWVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBEdCh0KX0pLmpvaW4oIi8iKX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4gSXQodCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIEl0KHQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIE50KHQucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIER0KHQpe3JldHVybiIiK1B0KHQucGF0aCkrKGU9dC5wYXJhbWV0ZXJzLE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iOyIrUHQodCkrIj0iK1B0KGVbdF0pfSkuam9pbigiIikpO3ZhciBlfXZhciBGdD0vXlteXC8oKT87PSNdKy87ZnVuY3Rpb24gTHQodCl7dmFyIGU9dC5tYXRjaChGdCk7cmV0dXJuIGU/ZVswXToiIn12YXIgVnQ9L15bXj0/JiNdKy8senQ9L15bXj8mI10rLyxCdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy51cmw9dCx0aGlzLnJlbWFpbmluZz10fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZVJvb3RTZWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IFN0KFtdLHt9KTpuZXcgU3QoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbSh0KX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH0sdC5wcm90b3R5cGUucGFyc2VDaGlsZHJlbj1mdW5jdGlvbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTt2YXIgdD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt2YXIgZT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksZT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7dmFyIG49e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKG49dGhpcy5wYXJzZVBhcmVucyghMSkpLCh0Lmxlbmd0aD4wfHxPYmplY3Qua2V5cyhlKS5sZW5ndGg+MCkmJihuW2F0XT1uZXcgU3QodCxlKSksbn0sdC5wcm90b3R5cGUucGFyc2VTZWdtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9THQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09dCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgcGF0aCB1cmwgc2VnbWVudCBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzOiAnIit0aGlzLnJlbWFpbmluZysiJy4iKTtyZXR1cm4gdGhpcy5jYXB0dXJlKHQpLG5ldyBFdChOdCh0KSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfSx0LnByb3RvdHlwZS5wYXJzZU1hdHJpeFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgdD17fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0odCk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlUGFyYW09ZnVuY3Rpb24odCl7dmFyIGU9THQodGhpcy5yZW1haW5pbmcpO2lmKGUpe3RoaXMuY2FwdHVyZShlKTt2YXIgbj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgcj1MdCh0aGlzLnJlbWFpbmluZyk7ciYmdGhpcy5jYXB0dXJlKG49cil9dFtOdChlKV09TnQobil9fSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW09ZnVuY3Rpb24odCl7dmFyIGUsbj0oZT10aGlzLnJlbWFpbmluZy5tYXRjaChWdCkpP2VbMF06IiI7aWYobil7dGhpcy5jYXB0dXJlKG4pO3ZhciByPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goenQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpJiZ0aGlzLmNhcHR1cmUocj1pKX12YXIgbz1SdChuKSxhPVJ0KHIpO2lmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXRbb107QXJyYXkuaXNBcnJheShzKXx8KHRbb109cz1bc10pLHMucHVzaChhKX1lbHNlIHRbb109YX19LHQucHJvdG90eXBlLnBhcnNlUGFyZW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXt2YXIgbj1MdCh0aGlzLnJlbWFpbmluZykscj10aGlzLnJlbWFpbmluZ1tuLmxlbmd0aF07aWYoIi8iIT09ciYmIikiIT09ciYmIjsiIT09cil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSB1cmwgJyIrdGhpcy51cmwrIiciKTt2YXIgaT12b2lkIDA7bi5pbmRleE9mKCI6Iik+LTE/KGk9bi5zdWJzdHIoMCxuLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGkpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYoaT1hdCk7dmFyIG89dGhpcy5wYXJzZUNoaWxkcmVuKCk7ZVtpXT0xPT09T2JqZWN0LmtleXMobykubGVuZ3RoP29bYXRdOm5ldyBTdChbXSxvKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGVla1N0YXJ0c1dpdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgodCl9LHQucHJvdG90eXBlLmNvbnN1bWVPcHRpb25hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX0sdC5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbih0KXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwodCkpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAiJyt0KyciLicpfSx0fSgpLFV0PWZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9LEh0PWZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fTtmdW5jdGlvbiBxdCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgVXQodCkpfSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEh0KHQpKX0pfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBFcnJvcigiT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyIrdCsiJyIpKX0pfXZhciBRdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1yLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KGkudil9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0aGlzLnVybFRyZWUucm9vdCxhdCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgSHQpcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBVdCl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxhdCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5jcmVhdGVVcmxUcmVlKG4sdC5xdWVyeVBhcmFtcyx0LmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChOLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVdCl0aHJvdyBlLm5vTWF0Y2hFcnJvcih0KTt0aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub01hdGNoRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFcnJvcigiQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnIit0LnNlZ21lbnRHcm91cCsiJyIpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPXQuc2VnbWVudHMubGVuZ3RoPjA/bmV3IFN0KFtdLCgocj17fSlbYXRdPXQscikpOnQ7cmV0dXJuIG5ldyB4dChpLGUsbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCk/dGhpcy5leHBhbmRDaGlsZHJlbih0LGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KFtdLHQpfSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLHIsITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gZnVuY3Rpb24obixpKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBPYmplY3Qocy5hKSh7fSk7dmFyIG89W10sYT1bXSx1PXt9O3JldHVybiBndChuLGZ1bmN0aW9uKG4saSl7dmFyIHMsYyxsPShzPWksYz1uLHIuZXhwYW5kU2VnbWVudEdyb3VwKHQsZSxjLHMpKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1W2ldPXR9KSk7aT09PWF0P28ucHVzaChsKTphLnB1c2gobCl9KSxzLmEuYXBwbHkobnVsbCxvLmNvbmNhdChhKSkucGlwZShPYmplY3QoUi5hKSgpLGooKSxPYmplY3QoUy5hKShmdW5jdGlvbigpe3JldHVybiB1fSkpfShuLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudD1mdW5jdGlvbih0LGUsbixpLG8sYSl7dmFyIHU9dGhpcztyZXR1cm4gcy5hLmFwcGx5KHZvaWQgMCxPYmplY3Qoci5kKShuKSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihyKXtyZXR1cm4gdS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxuLHIsaSxvLGEpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFV0KXJldHVybiBPYmplY3Qocy5hKShudWxsKTt0aHJvdyB0fSkpfSksT2JqZWN0KFIuYSkoKSx3KGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLE9iamVjdChOLmEpKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIGx8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUsaSxvKSlyZXR1cm4gT2JqZWN0KHMuYSkobmV3IFN0KFtdLHt9KSk7dGhyb3cgbmV3IFV0KGUpfXRocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEpe3JldHVybiBYdChyKSE9PW8/cXQoZSk6dm9pZCAwPT09ci5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxyLGkpOmEmJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyk6cXQoZSl9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsaSxvKXtyZXR1cm4iKioiPT09ci5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LG4scixvKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixyLGksbyl9LHQucHJvdG90eXBlLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLG4ucmVkaXJlY3RUbyx7fSk7cmV0dXJuIG4ucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/R3Qobyk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMobixvKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBTdChuLHt9KTtyZXR1cm4gaS5leHBhbmRTZWdtZW50KHQsbyxlLG4sciwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLGksbyl7dmFyIGE9dGhpcyxzPVl0KGUscixpKSx1PXMuY29uc3VtZWRTZWdtZW50cyxjPXMubGFzdENoaWxkLGw9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBxdChlKTt2YXIgZj10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyh1LHIucmVkaXJlY3RUbyxsKTtyZXR1cm4gci5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9HdChmKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhyLGYpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIGEuZXhwYW5kU2VnbWVudCh0LGUsbixyLmNvbmNhdChpLnNsaWNlKGMpKSxvLCExKX0pKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBTdChpLHt9KX0pKTpPYmplY3Qocy5hKShuZXcgU3QoaSx7fSkpO3ZhciBhPVl0KGUsbixpKSx1PWEuY29uc3VtZWRTZWdtZW50cyxjPWEubGFzdENoaWxkO2lmKCFhLm1hdGNoZWQpcmV0dXJuIHF0KGUpO3ZhciBsPWkuc2xpY2UoYyk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb25maWcodCxuKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLGk9dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIFp0KHQsZSxuKSYmWHQobikhPT1hdH0pfSh0LG4pP3tzZWdtZW50R3JvdXA6S3QobmV3IFN0KGUsZnVuY3Rpb24odCxlKXt2YXIgbixpLG89e307b1thdF09ZTt0cnl7Zm9yKHZhciBhPU9iamVjdChyLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlOyIiPT09dS5wYXRoJiZYdCh1KSE9PWF0JiYob1tYdCh1KV09bmV3IFN0KFtdLHt9KSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihpPWEucmV0dXJuKSYmaS5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb30oaSxuZXcgU3Qobix0LmNoaWxkcmVuKSkpKSxzbGljZWRTZWdtZW50czpbXX06MD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIGkuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gWnQodCxlLG4pfSl9KHQsbik/e3NlZ21lbnRHcm91cDpLdChuZXcgU3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxjPXUubmV4dCgpOyFjLmRvbmU7Yz11Lm5leHQoKSl7dmFyIGw9Yy52YWx1ZTtadCh0LGUsbCkmJiFpW1h0KGwpXSYmKHNbWHQobCldPW5ldyBTdChbXSx7fSkpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChyLmEpKHt9LGkscyl9KHQsbixpLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLHUsbCxpKSxjPWEuc2VnbWVudEdyb3VwLGY9YS5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWYubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCk/by5leHBhbmRDaGlsZHJlbihuLGksYykucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KHUsdCl9KSk6MD09PWkubGVuZ3RoJiYwPT09Zi5sZW5ndGg/T2JqZWN0KHMuYSkobmV3IFN0KHUse30pKTpvLmV4cGFuZFNlZ21lbnQobixjLGksZixhdCwhMCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpfSkpfSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGUuY2hpbGRyZW4/T2JqZWN0KHMuYSkobmV3IGx0KGUuY2hpbGRyZW4sdCkpOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZENvbmZpZz9PYmplY3Qocy5hKShlLl9sb2FkZWRDb25maWcpOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jYW5Mb2FkO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KGEuYSkobikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihuKXt2YXIgcj10LmdldChuKTtyZXR1cm4gX3Qoci5jYW5Mb2FkP3IuY2FuTG9hZChlKTpyKGUpKX0pKSk6T2JqZWN0KHMuYSkoITApfSh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIHI/bi5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoKChuPUVycm9yKCJOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6IENhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yPSEwLG4pKTt2YXIgbn0pfShlKX0pKTpPYmplY3Qocy5hKShuZXcgbHQoW10sdCkpfSx0LnByb3RvdHlwZS5saW5lcmFsaXplU2VnbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10scj1lLnJvb3Q7Oyl7aWYobj1uLmNvbmNhdChyLnNlZ21lbnRzKSwwPT09ci5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBPYmplY3Qocy5hKShuKTtpZihyLm51bWJlck9mQ2hpbGRyZW4+MXx8IXIuY2hpbGRyZW5bYXRdKXJldHVybiBXdCh0LnJlZGlyZWN0VG8pO3I9ci5jaGlsZHJlblthdF19fSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q29tbWFuZHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZShlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKSx0LG4pfSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAodCxlLnJvb3QsbixyKTtyZXR1cm4gbmV3IHh0KGksdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCl9LHQucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aCgiOiIpKXt2YXIgaT10LnN1YnN0cmluZygxKTtuW3JdPWVbaV19ZWxzZSBuW3JdPXR9KSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxvPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4sciksYT17fTtyZXR1cm4gZ3QoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2Fbb109aS5jcmVhdGVTZWdtZW50R3JvdXAodCxlLG4scil9KSxuZXcgU3QobyxhKX0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/aS5maW5kUG9zUGFyYW0odCxlLHIpOmkuZmluZE9yUmV0dXJuKGUsbil9KX0sdC5wcm90b3R5cGUuZmluZFBvc1BhcmFtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZGlyZWN0IHRvICciK3QrIicuIENhbm5vdCBmaW5kICciK2UucGF0aCsiJy4iKTtyZXR1cm4gcn0sdC5wcm90b3R5cGUuZmluZE9yUmV0dXJuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxvPTA7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtpZih1LnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKG8pLHU7bysrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYoaT1hLnJldHVybikmJmkuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gWXQodCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgcj0oZS5tYXRjaGVyfHxjdCkobix0LGUpO3JldHVybiByP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6ci5jb25zdW1lZCxsYXN0Q2hpbGQ6ci5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6ci5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIEt0KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5bYXRdKXt2YXIgZT10LmNoaWxkcmVuW2F0XTtyZXR1cm4gbmV3IFN0KHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIFp0KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gWHQodCl7cmV0dXJuIHQub3V0bGV0fHxhdH12YXIgJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPUp0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT10ZSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRlKHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gSnQodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBuPU9iamVjdChyLmUpKGUuY2hpbGRyZW4pLGk9bi5uZXh0KCk7IWkuZG9uZTtpPW4ubmV4dCgpKXt2YXIgbz1KdCh0LGkudmFsdWUpO2lmKG8pcmV0dXJuIG99fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2kmJiFpLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgYSxzfWZ1bmN0aW9uIHRlKHQsZSl7aWYodD09PWUudmFsdWUpcmV0dXJuW2VdO3RyeXtmb3IodmFyIG49T2JqZWN0KHIuZSkoZS5jaGlsZHJlbiksaT1uLm5leHQoKTshaS5kb25lO2k9bi5uZXh0KCkpe3ZhciBvPXRlKHQsaS52YWx1ZSk7aWYoby5sZW5ndGgpcmV0dXJuIG8udW5zaGlmdChlKSxvfX1jYXRjaCh0KXthPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYocz1uLnJldHVybikmJnMuY2FsbChuKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19cmV0dXJuW107dmFyIGEsc312YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iVHJlZU5vZGUoIit0aGlzLnZhbHVlKyIpIn0sdH0oKTtmdW5jdGlvbiBuZSh0KXt2YXIgZT17fTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3QudmFsdWUub3V0bGV0XT10fSksZX12YXIgcmU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnNuYXBzaG90PW4sY2UocixlKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0oJHQpO2Z1bmN0aW9uIGllKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgc2UoW10se30se30sIiIse30sYXQsZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyB1ZSgiIixuZXcgZWUobixbXSkpfSh0LGUpLHI9bmV3IG8uYShbbmV3IEV0KCIiLHt9KV0pLGk9bmV3IG8uYSh7fSksYT1uZXcgby5hKHt9KSxzPW5ldyBvLmEoe30pLHU9bmV3IG8uYSgiIiksYz1uZXcgb2UocixpLHMsdSxhLGF0LGUsbi5yb290KTtyZXR1cm4gYy5zbmFwc2hvdD1uLnJvb3QsbmV3IHJlKG5ldyBlZShjLFtdKSxuKX12YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEscyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PXIsdGhpcy5kYXRhPWksdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMuX2Z1dHVyZVNuYXBzaG90PXN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD10aGlzLnBhcmFtcy5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1dCh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdXQodCl9KSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6IkZ1dHVyZSgiK3RoaXMuX2Z1dHVyZVNuYXBzaG90KyIpIn0sdH0oKTtmdW5jdGlvbiBhZSh0LGUpe3ZvaWQgMD09PWUmJihlPSJlbXB0eU9ubHkiKTt2YXIgbj10LnBhdGhGcm9tUm9vdCxpPTA7aWYoImFsd2F5cyIhPT1lKWZvcihpPW4ubGVuZ3RoLTE7aT49MTspe3ZhciBvPW5baV0sYT1uW2ktMV07aWYoby5yb3V0ZUNvbmZpZyYmIiI9PT1vLnJvdXRlQ29uZmlnLnBhdGgpaS0tO2Vsc2V7aWYoYS5jb21wb25lbnQpYnJlYWs7aS0tfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3Qoci5hKSh7fSx0LnBhcmFtcyxlLnBhcmFtcyksZGF0YTpPYmplY3Qoci5hKSh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOk9iamVjdChyLmEpKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0se3BhcmFtczp7fSxkYXRhOnt9LHJlc29sdmU6e319KX0obi5zbGljZShpKSl9dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGksbyxhLHMsdSxjLGwpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1yLHRoaXMuZGF0YT1pLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLnJvdXRlQ29uZmlnPXMsdGhpcy5fdXJsU2VnbWVudD11LHRoaXMuX2xhc3RQYXRoSW5kZXg9Yyx0aGlzLl9yZXNvbHZlPWx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dXQodGhpcy5wYXJhbXMpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGUodXJsOiciK3RoaXMudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSx1ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIHIudXJsPWUsY2UocixuKSxyfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMuX3Jvb3QpfSxlfSgkdCk7ZnVuY3Rpb24gY2UodCxlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT10LGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gY2UodCxlKX0pfWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXQuY2hpbGRyZW4ubGVuZ3RoPjA/IiB7ICIrdC5jaGlsZHJlbi5tYXAobGUpLmpvaW4oIiwgIikrIiB9ICI6IiI7cmV0dXJuIiIrdC52YWx1ZStlfWZ1bmN0aW9uIGZlKHQpe2lmKHQuc25hcHNob3Qpe3ZhciBlPXQuc25hcHNob3Qsbj10Ll9mdXR1cmVTbmFwc2hvdDt0LnNuYXBzaG90PW4sbXQoZS5xdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKXx8dC5xdWVyeVBhcmFtcy5uZXh0KG4ucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQhPT1uLmZyYWdtZW50JiZ0LmZyYWdtZW50Lm5leHQobi5mcmFnbWVudCksbXQoZS5wYXJhbXMsbi5wYXJhbXMpfHx0LnBhcmFtcy5uZXh0KG4ucGFyYW1zKSxmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoIW10KHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9KGUudXJsLG4udXJsKXx8dC51cmwubmV4dChuLnVybCksbXQoZS5kYXRhLG4uZGF0YSl8fHQuZGF0YS5uZXh0KG4uZGF0YSl9ZWxzZSB0LnNuYXBzaG90PXQuX2Z1dHVyZVNuYXBzaG90LHQuZGF0YS5uZXh0KHQuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIGhlKHQsZSl7dmFyIG4scjtyZXR1cm4gbXQodC5wYXJhbXMsZS5wYXJhbXMpJiZDdChuPXQudXJsLHI9ZS51cmwpJiZuLmV2ZXJ5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG10KHQucGFyYW1ldGVycyxyW2VdLnBhcmFtZXRlcnMpfSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxoZSh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gcGUodCxlLG4scixpKXt2YXIgbz17fTtyZXR1cm4gciYmZ3QocixmdW5jdGlvbih0LGUpe29bZV09QXJyYXkuaXNBcnJheSh0KT90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIit0fSk6IiIrdH0pLG5ldyB4dChuLnJvb3Q9PT10P2U6ZnVuY3Rpb24gdChlLG4scil7dmFyIGk9e307cmV0dXJuIGd0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXtpW29dPWU9PT1uP3I6dChlLG4scil9KSxuZXcgU3QoZS5zZWdtZW50cyxpKX0obi5yb290LHQsZSksbyxpKX12YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZkZShuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciByPW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0c30pO2lmKHImJnIhPT12dChuKSl0aHJvdyBuZXcgRXJyb3IoIntvdXRsZXRzOnt9fSBoYXMgdG8gYmUgdGhlIGxhc3QgY29tbWFuZCIpfXJldHVybiB0LnByb3RvdHlwZS50b1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX0sdH0oKSx5ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZWdtZW50R3JvdXA9dCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1lLHRoaXMuaW5kZXg9bn07ZnVuY3Rpb24gdmUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHM/dC5vdXRsZXRzW2F0XToiIit0fWZ1bmN0aW9uIGdlKHQsZSxuKXtpZih0fHwodD1uZXcgU3QoW10se30pKSwwPT09dC5zZWdtZW50cy5sZW5ndGgmJnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYmUodCxlLG4pO3ZhciByPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9MCxpPWUsbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2k8dC5zZWdtZW50cy5sZW5ndGg7KXtpZihyPj1uLmxlbmd0aClyZXR1cm4gbzt2YXIgYT10LnNlZ21lbnRzW2ldLHM9dmUobltyXSksdT1yPG4ubGVuZ3RoLTE/bltyKzFdOm51bGw7aWYoaT4wJiZ2b2lkIDA9PT1zKWJyZWFrO2lmKHMmJnUmJiJvYmplY3QiPT10eXBlb2YgdSYmdm9pZCAwPT09dS5vdXRsZXRzKXtpZighU2Uocyx1LGEpKXJldHVybiBvO3IrPTJ9ZWxzZXtpZighU2Uocyx7fSxhKSlyZXR1cm4gbztyKyt9aSsrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6aSxjb21tYW5kSW5kZXg6cn19KHQsZSxuKSxpPW4uc2xpY2Uoci5jb21tYW5kSW5kZXgpO2lmKHIubWF0Y2gmJnIucGF0aEluZGV4PHQuc2VnbWVudHMubGVuZ3RoKXt2YXIgbz1uZXcgU3QodC5zZWdtZW50cy5zbGljZSgwLHIucGF0aEluZGV4KSx7fSk7cmV0dXJuIG8uY2hpbGRyZW5bYXRdPW5ldyBTdCh0LnNlZ21lbnRzLnNsaWNlKHIucGF0aEluZGV4KSx0LmNoaWxkcmVuKSxiZShvLDAsaSl9cmV0dXJuIHIubWF0Y2gmJjA9PT1pLmxlbmd0aD9uZXcgU3QodC5zZWdtZW50cyx7fSk6ci5tYXRjaCYmIXQuaGFzQ2hpbGRyZW4oKT9fZSh0LGUsbik6ci5tYXRjaD9iZSh0LDAsaSk6X2UodCxlLG4pfWZ1bmN0aW9uIGJlKHQsZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG5ldyBTdCh0LnNlZ21lbnRzLHt9KTt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHRbMF0/KChlPXt9KVthdF09dCxlKTp2b2lkIDA9PT10WzBdLm91dGxldHM/KChuPXt9KVthdF09dCxuKTp0WzBdLm91dGxldHM7dmFyIGUsbn0obiksaT17fTtyZXR1cm4gZ3QocixmdW5jdGlvbihuLHIpe251bGwhPT1uJiYoaVtyXT1nZSh0LmNoaWxkcmVuW3JdLGUsbikpfSksZ3QodC5jaGlsZHJlbixmdW5jdGlvbih0LGUpe3ZvaWQgMD09PXJbZV0mJihpW2VdPXQpfSksbmV3IFN0KHQuc2VnbWVudHMsaSl9ZnVuY3Rpb24gX2UodCxlLG4pe2Zvcih2YXIgcj10LnNlZ21lbnRzLnNsaWNlKDAsZSksaT0wO2k8bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5baV0mJnZvaWQgMCE9PW5baV0ub3V0bGV0cyl7dmFyIG89d2UobltpXS5vdXRsZXRzKTtyZXR1cm4gbmV3IFN0KHIsbyl9aWYoMD09PWkmJmRlKG5bMF0pKXIucHVzaChuZXcgRXQodC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxpKys7ZWxzZXt2YXIgYT12ZShuW2ldKSxzPWk8bi5sZW5ndGgtMT9uW2krMV06bnVsbDthJiZzJiZkZShzKT8oci5wdXNoKG5ldyBFdChhLHhlKHMpKSksaSs9Mik6KHIucHVzaChuZXcgRXQoYSx7fSkpLGkrKyl9fXJldHVybiBuZXcgU3Qocix7fSl9ZnVuY3Rpb24gd2UodCl7dmFyIGU9e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxuKXtudWxsIT09dCYmKGVbbl09X2UobmV3IFN0KFtdLHt9KSwwLHQpKX0pLGV9ZnVuY3Rpb24geGUodCl7dmFyIGU9e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSksZX1mdW5jdGlvbiBTZSh0LGUsbil7cmV0dXJuIHQ9PW4ucGF0aCYmbXQoZSxuLnBhcmFtZXRlcnMpfXZhciBFZT1mdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfSxDZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfSxPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5mdXR1cmU9dCx0aGlzLmN1cnI9ZSx0aGlzLm1vZHVsZUluamVjdG9yPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cix0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzPVtdLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZS5fcm9vdDt0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyhlLHRoaXMuY3Vycj90aGlzLmN1cnIuX3Jvb3Q6bnVsbCx0LFtlLnZhbHVlXSl9LHQucHJvdG90eXBlLmNoZWNrR3VhcmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0RlYWN0aXZhdGluZygpfHx0aGlzLmlzQWN0aXZhdGluZygpP3RoaXMucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcygpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOk9iamVjdChzLmEpKCExKX0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/T2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoRS5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5ydW5SZXNvbHZlKG4ucm91dGUsdCl9KSxmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3Qoei5hKShGKHQsZSksVCgxKSxwKGUpKShuKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdCh6LmEpKEYoZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0KGUsbixyKzEpfSksVCgxKSkoZSl9fShmdW5jdGlvbih0LGUpe3JldHVybiB0fSkpOk9iamVjdChzLmEpKG51bGwpfSx0LnByb3RvdHlwZS5pc0RlYWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuaXNBY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuc2V0dXBDaGlsZFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsbz1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXR1cFJvdXRlR3VhcmRzKHQsb1t0LnZhbHVlLm91dGxldF0sbixyLmNvbmNhdChbdC52YWx1ZV0pKSxkZWxldGUgb1t0LnZhbHVlLm91dGxldF19KSxndChvLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuLmdldENvbnRleHQoZSkpfSl9LHQucHJvdG90eXBlLnNldHVwUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsLGE9bj9uLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpOm51bGw7aWYobyYmaS5yb3V0ZUNvbmZpZz09PW8ucm91dGVDb25maWcpe3ZhciBzPXRoaXMuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzKG8saSxpLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7cz90aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEVlKHIpKTooaS5kYXRhPW8uZGF0YSxpLl9yZXNvbHZlZERhdGE9by5fcmVzb2x2ZWREYXRhKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LGUsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKSxzJiZ0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2UoYS5vdXRsZXQuY29tcG9uZW50LG8pKX1lbHNlIG8mJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxhKSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEVlKHIpKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LG51bGwsaS5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixyKX0sdC5wcm90b3R5cGUuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobil7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIWhlKHQsZSl8fCFtdCh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UicGFyYW1zQ2hhbmdlIjpkZWZhdWx0OnJldHVybiFoZSh0LGUpfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bmUodCksaT10LnZhbHVlO2d0KHIsZnVuY3Rpb24odCxyKXtuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsaS5jb21wb25lbnQ/ZT9lLmNoaWxkcmVuLmdldENvbnRleHQocik6bnVsbDplKX0pLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDZShpLmNvbXBvbmVudCYmZSYmZS5vdXRsZXQmJmUub3V0bGV0LmlzQWN0aXZhdGVkP2Uub3V0bGV0LmNvbXBvbmVudDpudWxsLGkpKX0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdChhLmEpKHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5ydW5DYW5EZWFjdGl2YXRlKGUuY29tcG9uZW50LGUucm91dGUpfSksSShmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoRS5hKShmdW5jdGlvbihlKXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkoW3QuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KGUucm91dGUucGFyZW50KSx0LmZpcmVBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZSksdC5ydW5DYW5BY3RpdmF0ZUNoaWxkKGUucGF0aCksdC5ydW5DYW5BY3RpdmF0ZShlLnJvdXRlKV0pKX0pLEkoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5maXJlQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBydCh0KSksT2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGV0KHQpKSxPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChhLmEpKG4pLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7dmFyIHI9ZS5nZXRUb2tlbihuLHQpO3JldHVybiBfdChyLmNhbkFjdGl2YXRlP3IuY2FuQWN0aXZhdGUodCxlLmZ1dHVyZSk6cih0LGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbdC5sZW5ndGgtMV0scj10LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KTtyZXR1cm4gYnQoT2JqZWN0KGEuYSkocikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkodC5ndWFyZHMpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24ocil7dmFyIGk9ZS5nZXRUb2tlbihyLHQubm9kZSk7cmV0dXJuIF90KGkuY2FuQWN0aXZhdGVDaGlsZD9pLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6aShuLGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKX0pKSl9LHQucHJvdG90eXBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTp0LGd1YXJkczplfTpudWxsfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIHImJjAhPT1yLmxlbmd0aD9PYmplY3QoYS5hKShyKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHIpe3ZhciBpPW4uZ2V0VG9rZW4ocixlKTtyZXR1cm4gX3QoaS5jYW5EZWFjdGl2YXRlP2kuY2FuRGVhY3RpdmF0ZSh0LGUsbi5jdXJyLG4uZnV0dXJlKTppKHQsZSxuLmN1cnIsbi5mdXR1cmUpKS5waXBlKHcoKSl9KSkucGlwZShJKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1blJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNvbHZlTm9kZSh0Ll9yZXNvbHZlLHQpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1PYmplY3Qoci5hKSh7fSx0LmRhdGEsYWUodCxlKS5yZXNvbHZlKSxudWxsfSkpfSx0LnByb3RvdHlwZS5yZXNvbHZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1PYmplY3Qua2V5cyh0KTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIE9iamVjdChzLmEpKHt9KTtpZigxPT09ci5sZW5ndGgpe3ZhciBpPXJbMF07cmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZXIodFtpXSxlKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybihlPXt9KVtpXT10LGU7dmFyIGV9KSl9dmFyIG89e307cmV0dXJuIE9iamVjdChhLmEpKHIpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24ocil7cmV0dXJuIG4uZ2V0UmVzb2x2ZXIodFtyXSxlKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvW3JdPXQsdH0pKX0pKS5waXBlKGooKSxPYmplY3QoUy5hKShmdW5jdGlvbigpe3JldHVybiBvfSkpfSx0LnByb3RvdHlwZS5nZXRSZXNvbHZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0VG9rZW4odCxlKTtyZXR1cm4gX3Qobi5yZXNvbHZlP24ucmVzb2x2ZShlLHRoaXMuZnV0dXJlKTpuKGUsdGhpcy5mdXR1cmUpKX0sdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnfXJldHVybiBudWxsfShlKTtyZXR1cm4obj9uLm1vZHVsZS5pbmplY3Rvcjp0aGlzLm1vZHVsZUluamVjdG9yKS5nZXQodCl9LHR9KCksVGU9ZnVuY3Rpb24oKXt9LGtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGkpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLmNvbmZpZz1lLHRoaXMudXJsVHJlZT1uLHRoaXMudXJsPXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PWl9cmV0dXJuIHQucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1JZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwLGU9dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuY29uZmlnLHQsYXQpLG49bmV3IHNlKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoT2JqZWN0KHIuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGF0LHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSksaT1uZXcgZWUobixlKSxvPW5ldyB1ZSh0aGlzLnVybCxpKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShvLl9yb290KSxPYmplY3Qocy5hKShvKX1jYXRjaCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfX0sdC5wcm90b3R5cGUuaW5oZXJpdFBhcmFtc0FuZERhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmFsdWUscj1hZShuLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7bi5wYXJhbXM9T2JqZWN0LmZyZWV6ZShyLnBhcmFtcyksbi5kYXRhPU9iamVjdC5mcmVlemUoci5kYXRhKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5oZXJpdFBhcmFtc0FuZERhdGEodCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLnNlZ21lbnRzLmxlbmd0aCYmZS5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKHQsZSk6dGhpcy5wcm9jZXNzU2VnbWVudCh0LGUsZS5zZWdtZW50cyxuKX0sdC5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLGk9T3QoZSxmdW5jdGlvbihlLG4pe3JldHVybiByLnByb2Nlc3NTZWdtZW50R3JvdXAodCxlLG4pfSk7cmV0dXJuIG49e30saS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52YWx1ZS5vdXRsZXRdO2lmKGUpe3ZhciByPWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpLGk9dC52YWx1ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIik7dGhyb3cgbmV3IEVycm9yKCJUd28gc2VnbWVudHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgb3V0bGV0IG5hbWU6ICciK3IrIicgYW5kICciK2krIicuIil9blt0LnZhbHVlLm91dGxldF09dC52YWx1ZX0pLGkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnZhbHVlLm91dGxldD09PWF0Py0xOmUudmFsdWUub3V0bGV0PT09YXQ/MTp0LnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGUudmFsdWUub3V0bGV0KX0pLGl9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLGkpe3RyeXtmb3IodmFyIG89T2JqZWN0KHIuZSkodCksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKHMsZSxuLGkpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIFRlKSl0aHJvdyB0fX19Y2F0Y2godCl7dT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKGM9by5yZXR1cm4pJiZjLmNhbGwobyl9ZmluYWxseXtpZih1KXRocm93IHUuZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4saSkpcmV0dXJuW107dGhyb3cgbmV3IFRlO3ZhciB1LGN9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixpKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IFRlO2lmKCh0Lm91dGxldHx8YXQpIT09aSl0aHJvdyBuZXcgVGU7dmFyIG8sYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciB1PW4ubGVuZ3RoPjA/dnQobikucGFyYW1ldGVyczp7fTtvPW5ldyBzZShuLHUsT2JqZWN0LmZyZWV6ZShPYmplY3Qoci5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsTmUodCksaSx0LmNvbXBvbmVudCx0LEFlKGUpLGplKGUpK24ubGVuZ3RoLFJlKHQpKX1lbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxuKXtpZigiIj09PWUucGF0aCl7aWYoImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApKXRocm93IG5ldyBUZTtyZXR1cm57Y29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwYXJhbWV0ZXJzOnt9fX12YXIgaT0oZS5tYXRjaGVyfHxjdCkobix0LGUpO2lmKCFpKXRocm93IG5ldyBUZTt2YXIgbz17fTtndChpLnBvc1BhcmFtcyxmdW5jdGlvbih0LGUpe29bZV09dC5wYXRofSk7dmFyIGE9aS5jb25zdW1lZC5sZW5ndGg+MD9PYmplY3Qoci5hKSh7fSxvLGkuY29uc3VtZWRbaS5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVycyk6bztyZXR1cm57Y29uc3VtZWRTZWdtZW50czppLmNvbnN1bWVkLGxhc3RDaGlsZDppLmNvbnN1bWVkLmxlbmd0aCxwYXJhbWV0ZXJzOmF9fShlLHQsbik7YT1jLmNvbnN1bWVkU2VnbWVudHMscz1uLnNsaWNlKGMubGFzdENoaWxkKSxvPW5ldyBzZShhLGMucGFyYW1ldGVycyxPYmplY3QuZnJlZXplKE9iamVjdChyLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxpLHQuY29tcG9uZW50LHQsQWUoZSksamUoZSkrYS5sZW5ndGgsUmUodCkpfXZhciBsPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksZj1JZShlLGEscyxsKSxoPWYuc2VnbWVudEdyb3VwLGQ9Zi5zbGljZWRTZWdtZW50cztpZigwPT09ZC5sZW5ndGgmJmguaGFzQ2hpbGRyZW4oKSl7dmFyIHA9dGhpcy5wcm9jZXNzQ2hpbGRyZW4obCxoKTtyZXR1cm5bbmV3IGVlKG8scCldfWlmKDA9PT1sLmxlbmd0aCYmMD09PWQubGVuZ3RoKXJldHVybltuZXcgZWUobyxbXSldO3ZhciBtPXRoaXMucHJvY2Vzc1NlZ21lbnQobCxoLGQsYXQpO3JldHVybltuZXcgZWUobyxtKV19LHR9KCk7ZnVuY3Rpb24gQWUodCl7Zm9yKHZhciBlPXQ7ZS5fc291cmNlU2VnbWVudDspZT1lLl9zb3VyY2VTZWdtZW50O3JldHVybiBlfWZ1bmN0aW9uIGplKHQpe2Zvcih2YXIgZT10LG49ZS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtlLl9zb3VyY2VTZWdtZW50OyluKz0oZT1lLl9zb3VyY2VTZWdtZW50KS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtyZXR1cm4gbi0xfWZ1bmN0aW9uIEllKHQsZSxuLGkpe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBNZSh0LGUsbikmJlBlKG4pIT09YXR9KX0odCxuKSl7dmFyIG89bmV3IFN0KGUsZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxzPXt9O3NbYXRdPWksaS5fc291cmNlU2VnbWVudD10LGkuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIHU9T2JqZWN0KHIuZSkobiksYz11Lm5leHQoKTshYy5kb25lO2M9dS5uZXh0KCkpe3ZhciBsPWMudmFsdWU7aWYoIiI9PT1sLnBhdGgmJlBlKGwpIT09YXQpe3ZhciBmPW5ldyBTdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHNbUGUobCldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHN9KHQsZSxpLG5ldyBTdChuLHQuY2hpbGRyZW4pKSk7cmV0dXJuIG8uX3NvdXJjZVNlZ21lbnQ9dCxvLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOm8sc2xpY2VkU2VnbWVudHM6W119fWlmKDA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBpLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIE1lKHQsZSxuKX0pfSh0LG4pKXt2YXIgYT1uZXcgU3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3Qoci5lKShuKSxjPXUubmV4dCgpOyFjLmRvbmU7Yz11Lm5leHQoKSl7dmFyIGw9Yy52YWx1ZTtpZihNZSh0LGUsbCkmJiFpW1BlKGwpXSl7dmFyIGY9bmV3IFN0KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9dC5zZWdtZW50cy5sZW5ndGgsc1tQZShsKV09Zn19fWNhdGNoKHQpe289e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2MmJiFjLmRvbmUmJihhPXUucmV0dXJuKSYmYS5jYWxsKHUpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gT2JqZWN0KHIuYSkoe30saSxzKX0odCxuLGksdC5jaGlsZHJlbikpO3JldHVybiBhLl9zb3VyY2VTZWdtZW50PXQsYS5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDphLHNsaWNlZFNlZ21lbnRzOm59fXZhciBzPW5ldyBTdCh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIE1lKHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gUGUodCl7cmV0dXJuIHQub3V0bGV0fHxhdH1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgRGU9ZnVuY3Rpb24oKXt9LEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxMZT1uZXcgaS5vKCJST1VURVMiKSxWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5sb2FkZXI9dCx0aGlzLmNvbXBpbGVyPWUsdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyPW4sdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcj1yfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZSksdGhpcy5sb2FkTW9kdWxlRmFjdG9yeShlLmxvYWRDaGlsZHJlbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihyKXtuLm9uTG9hZEVuZExpc3RlbmVyJiZuLm9uTG9hZEVuZExpc3RlbmVyKGUpO3ZhciBpPXIuY3JlYXRlKHQpO3JldHVybiBuZXcgbHQoeXQoaS5pbmplY3Rvci5nZXQoTGUpKS5tYXAocHQpLGkpfSkpfSx0LnByb3RvdHlwZS5sb2FkTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9PYmplY3QoYS5hKSh0aGlzLmxvYWRlci5sb2FkKHQpKTpfdCh0KCkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpLnQ/T2JqZWN0KHMuYSkodCk6T2JqZWN0KGEuYSkoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLHplPWZ1bmN0aW9uKCl7fSxCZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gVWUodCl7dGhyb3cgdH1mdW5jdGlvbiBIZSh0LGUsbil7cmV0dXJuIGUucGFyc2UoIi8iKX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9dmFyIEdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLGEscyxjLGwpe3ZhciBmPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1yLHRoaXMuY29uZmlnPWwsdGhpcy5uYXZpZ2F0aW9ucz1uZXcgby5hKG51bGwpLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5ldmVudHM9bmV3IHUuYSx0aGlzLmVycm9ySGFuZGxlcj1VZSx0aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj1IZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5ob29rcz17YmVmb3JlUHJlYWN0aXZhdGlvbjpxZSxhZnRlclByZWFjdGl2YXRpb246cWV9LHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1uZXcgQmUsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bmV3IEZlLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj0iaWdub3JlIix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9ImVtcHR5T25seSIsdGhpcy5uZ01vZHVsZT1hLmdldChpLnYpLHRoaXMucmVzZXRDb25maWcobCksdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgeHQobmV3IFN0KFtdLHt9KSx7fSxudWxsKSx0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmNvbmZpZ0xvYWRlcj1uZXcgVmUocyxjLGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgSih0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgdHQodCkpfSksdGhpcy5yb3V0ZXJTdGF0ZT1pZSh0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLHRoaXMucHJvY2Vzc05hdmlnYXRpb25zKCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0Um9vdENvbXBvbmVudFR5cGU9ZnVuY3Rpb24odCl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9dGhpcy5yb290Q29tcG9uZW50VHlwZX0sdC5wcm90b3R5cGUuaW5pdGlhbE5hdmlnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLDA9PT10aGlzLm5hdmlnYXRpb25JZCYmdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCghMCkse3JlcGxhY2VVcmw6ITB9KX0sdC5wcm90b3R5cGUuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNjcmliZShmdW5jdGlvbihlKXt2YXIgbj10LnBhcnNlVXJsKGUudXJsKSxyPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIsaT1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLHIsaSx7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2Z0KHQpLHRoaXMuY29uZmlnPXQubWFwKHB0KSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLG89ZS5xdWVyeVBhcmFtcyxhPWUuZnJhZ21lbnQscz1lLnByZXNlcnZlUXVlcnlQYXJhbXMsdT1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsYz1lLnByZXNlcnZlRnJhZ21lbnQ7T2JqZWN0KGkuVykoKSYmcyYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgbD1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsZj1jP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6YSxoPW51bGw7aWYodSlzd2l0Y2godSl7Y2FzZSJtZXJnZSI6aD1PYmplY3Qoci5hKSh7fSx0aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLG8pO2JyZWFrO2Nhc2UicHJlc2VydmUiOmg9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0Omg9b3x8bnVsbH1lbHNlIGg9cz90aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zOm98fG51bGw7cmV0dXJuIG51bGwhPT1oJiYoaD10aGlzLnJlbW92ZUVtcHR5UHJvcHMoaCkpLGZ1bmN0aW9uKHQsZSxuLGksbyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBwZShlLnJvb3QsZS5yb290LGUsaSxvKTt2YXIgYT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0mJjE9PT10Lmxlbmd0aCYmIi8iPT09dFswXSlyZXR1cm4gbmV3IG1lKCEwLDAsdCk7dmFyIGU9MCxuPSExLGk9dC5yZWR1Y2UoZnVuY3Rpb24odCxpLG8pe2lmKCJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9aSl7aWYoaS5vdXRsZXRzKXt2YXIgYT17fTtyZXR1cm4gZ3QoaS5vdXRsZXRzLGZ1bmN0aW9uKHQsZSl7YVtlXT0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLyIpOnR9KSxPYmplY3Qoci5kKSh0LFt7b3V0bGV0czphfV0pfWlmKGkuc2VnbWVudFBhdGgpcmV0dXJuIE9iamVjdChyLmQpKHQsW2kuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGk/T2JqZWN0KHIuZCkodCxbaV0pOjA9PT1vPyhpLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihyLGkpezA9PWkmJiIuIj09PXJ8fCgwPT1pJiYiIj09PXI/bj0hMDoiLi4iPT09cj9lKys6IiIhPXImJnQucHVzaChyKSl9KSx0KTpPYmplY3Qoci5kKSh0LFtpXSl9LFtdKTtyZXR1cm4gbmV3IG1lKG4sZSxpKX0obik7aWYoYS50b1Jvb3QoKSlyZXR1cm4gcGUoZS5yb290LG5ldyBTdChbXSx7fSksZSxpLG8pO3ZhciBzPWZ1bmN0aW9uKHQsbixyKXtpZih0LmlzQWJzb2x1dGUpcmV0dXJuIG5ldyB5ZShlLnJvb3QsITAsMCk7aWYoLTE9PT1yLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4KXJldHVybiBuZXcgeWUoci5zbmFwc2hvdC5fdXJsU2VnbWVudCwhMCwwKTt2YXIgaT1kZSh0LmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtmb3IodmFyIGE9ci5zbmFwc2hvdC5fdXJsU2VnbWVudCxzPXIuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgraSx1PXQubnVtYmVyT2ZEb3VibGVEb3RzO3U+czspe2lmKHUtPXMsIShhPWEucGFyZW50KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbnVtYmVyIG9mICcuLi8nIik7cz1hLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IHllKGEsITEscy11KX0oKX0oYSwwLHQpLHU9cy5wcm9jZXNzQ2hpbGRyZW4/YmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTpnZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBwZShzLnNlZ21lbnRHcm91cCx1LGUsaSxvKX0obCx0aGlzLmN1cnJlbnRVcmxUcmVlLHQsaCxmKX0sdC5wcm90b3R5cGUubmF2aWdhdGVCeVVybD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KTt2YXIgbj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLnBhcnNlVXJsKHQpLHI9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG4sdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24ociwiaW1wZXJhdGl2ZSIsbnVsbCxlKX0sdC5wcm90b3R5cGUubmF2aWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVxdWVzdGVkIHBhdGggY29udGFpbnMgIituKyIgc2VnbWVudCBhdCBpbmRleCAiK2UpfX0odCksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZSh0LGUpLGUpfSx0LnByb3RvdHlwZS5zZXJpYWxpemVVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9LHQucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KX1jYXRjaChuKXtlPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKG4sdGhpcy51cmxTZXJpYWxpemVyLHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMucGFyc2VVcmwodCk7cmV0dXJuIHd0KHRoaXMuY3VycmVudFVybFRyZWUsbixlKX0sdC5wcm90b3R5cGUucmVtb3ZlRW1wdHlQcm9wcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIHI9dFtuXTtyZXR1cm4gbnVsbCE9PXImJnZvaWQgMCE9PXImJihlW25dPXIpLGV9LHt9KX0sdC5wcm90b3R5cGUucHJvY2Vzc05hdmlnYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5hdmlnYXRpb25zLnBpcGUoT2JqZWN0KEUuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHQuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb24oZSksZS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSkpOk9iamVjdChzLmEpKG51bGwpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZU5hdmlnYXRpb249ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5uYXZpZ2F0aW9ucy52YWx1ZTtpZihpJiYiaW1wZXJhdGl2ZSIhPT1lJiYiaW1wZXJhdGl2ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYiaGFzaGNoYW5nZSI9PWUmJiJwb3BzdGF0ZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihpJiYicG9wc3RhdGUiPT1lJiYiaGFzaGNoYW5nZSI9PT1pLnNvdXJjZSYmaS5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTt2YXIgbz1udWxsLGE9bnVsbCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bz10LGE9ZX0pLHU9Kyt0aGlzLm5hdmlnYXRpb25JZDtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9ucy5uZXh0KHtpZDp1LHNvdXJjZTplLHN0YXRlOm4scmF3VXJsOnQsZXh0cmFzOnIscmVzb2x2ZTpvLHJlamVjdDphLHByb21pc2U6c30pLHMuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSl9LHQucHJvdG90eXBlLmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlkLHI9dC5yYXdVcmwsaT10LmV4dHJhcyxvPXQucmVzb2x2ZSxhPXQucmVqZWN0LHM9dC5zb3VyY2UsdT10LnN0YXRlLGM9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QociksbD0hdGhpcy5uYXZpZ2F0ZWR8fGMudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTsoInJlbG9hZCI9PT10aGlzLm9uU2FtZVVybE5hdmlnYXRpb258fGwpJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChyKT8odGhpcy5ldmVudHMubmV4dChuZXcgcShuLHRoaXMuc2VyaWFsaXplVXJsKGMpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUoYyxyLCEhaS5za2lwTG9jYXRpb25DaGFuZ2UsISFpLnJlcGxhY2VVcmwsbixudWxsKX0pLnRoZW4obyxhKSk6bCYmdGhpcy5yYXdVcmxUcmVlJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh0aGlzLnJhd1VybFRyZWUpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBxKG4sdGhpcy5zZXJpYWxpemVVcmwoYykscyx1KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZShjLHIsITEsITEsbixpZShjLGUucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90KX0pLnRoZW4obyxhKSk6KHRoaXMucmF3VXJsVHJlZT1yLG8obnVsbCkpfSx0LnByb3RvdHlwZS5ydW5OYXZpZ2F0ZT1mdW5jdGlvbih0LGUsbixpLGEsdSl7dmFyIGM9dGhpcztyZXR1cm4gYSE9PXRoaXMubmF2aWdhdGlvbklkPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBXKGEsdGhpcy5zZXJpYWxpemVVcmwodCksIk5hdmlnYXRpb24gSUQgIithKyIgaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWQgIit0aGlzLm5hdmlnYXRpb25JZCkpLFByb21pc2UucmVzb2x2ZSghMSkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsZil7dmFyIGgsZD0odT9PYmplY3Qocy5hKSh7YXBwbGllZFVybDp0LHNuYXBzaG90OnV9KTpuZXcgUXQoYy5uZ01vZHVsZS5pbmplY3RvcixjLmNvbmZpZ0xvYWRlcixjLnVybFNlcmlhbGl6ZXIsdCxjLmNvbmZpZykuYXBwbHkoKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUsbixyLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT0iZW1wdHlPbmx5IiksbmV3IGtlKHQsZSxuLHIsaSkucmVjb2duaXplKCl9KGMucm9vdENvbXBvbmVudFR5cGUsYy5jb25maWcsZSxjLnNlcmlhbGl6ZVVybChlKSxjLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7cmV0dXJuIGMuZXZlbnRzLm5leHQobmV3IFkoYSxjLnNlcmlhbGl6ZVVybCh0KSxjLnNlcmlhbGl6ZVVybChlKSxuKSkse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKX0pKSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0P09iamVjdChzLmEpKHQpOmMuaG9va3MuYmVmb3JlUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQuYXBwbGllZFVybCxuPXQuc25hcHNob3Q7cmV0dXJuKGg9bmV3IE9lKG4sYy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjLm5nTW9kdWxlLmluamVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBjLnRyaWdnZXJFdmVudCh0KX0pKS5pbml0aWFsaXplKGMucm9vdENvbnRleHRzKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iPT10eXBlb2YgZXx8Yy5uYXZpZ2F0aW9uSWQhPT1hKXJldHVybiBPYmplY3Qocy5hKSghMSk7dmFyIG49ZS5hcHBsaWVkVXJsLHI9ZS5zbmFwc2hvdDtyZXR1cm4gYy50cmlnZ2VyRXZlbnQobmV3IEsoYSxjLnNlcmlhbGl6ZVVybCh0KSxjLnNlcmlhbGl6ZVVybChuKSxyKSksaC5jaGVja0d1YXJkcygpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGMudHJpZ2dlckV2ZW50KG5ldyBaKGEsYy5zZXJpYWxpemVVcmwodCksYy5zZXJpYWxpemVVcmwobikscixlKSkse2FwcGxpZWRVcmw6bixzbmFwc2hvdDpyLHNob3VsZEFjdGl2YXRlOmV9fSkpfSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8Yy5uYXZpZ2F0aW9uSWQhPT1hP09iamVjdChzLmEpKCExKTplLnNob3VsZEFjdGl2YXRlJiZoLmlzQWN0aXZhdGluZygpPyhjLnRyaWdnZXJFdmVudChuZXcgWChhLGMuc2VyaWFsaXplVXJsKHQpLGMuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGgucmVzb2x2ZURhdGEoYy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGMudHJpZ2dlckV2ZW50KG5ldyAkKGEsYy5zZXJpYWxpemVVcmwodCksYy5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZX0pKSk6T2JqZWN0KHMuYSkoZSl9KSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fHxjLm5hdmlnYXRpb25JZCE9PWE/T2JqZWN0KHMuYSkoITEpOmMuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHR8fGMubmF2aWdhdGlvbklkIT09YSlyZXR1cm4hMTt2YXIgZSxuLGkscz10LmFwcGxpZWRVcmwsdT10LnNob3VsZEFjdGl2YXRlO3JldHVybiB1P3thcHBsaWVkVXJsOnMsc3RhdGU6KGk9ZnVuY3Rpb24gdChlLG4saSl7aWYoaSYmZS5zaG91bGRSZXVzZVJvdXRlKG4udmFsdWUsaS52YWx1ZS5zbmFwc2hvdCkpeyhsPWkudmFsdWUpLl9mdXR1cmVTbmFwc2hvdD1uLnZhbHVlO3ZhciBhPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gbi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7dHJ5e2Zvcih2YXIgbz1PYmplY3Qoci5lKShpLmNoaWxkcmVuKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9YS52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUocy52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4scyl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihjPW8ucmV0dXJuKSYmYy5jYWxsKG8pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gdChlLG4pO3ZhciB1LGN9KX0oZSxuLGkpO3JldHVybiBuZXcgZWUobCxhKX12YXIgcz1lLnJldHJpZXZlKG4udmFsdWUpO2lmKHMpe3ZhciB1PXMucm91dGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZihlLnZhbHVlLnJvdXRlQ29uZmlnIT09bi52YWx1ZS5yb3V0ZUNvbmZpZyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCByb3V0ZSIpO2lmKGUuY2hpbGRyZW4ubGVuZ3RoIT09bi5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBjaGlsZHJlbiIpO24udmFsdWUuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Zm9yKHZhciByPTA7cjxlLmNoaWxkcmVuLmxlbmd0aDsrK3IpdChlLmNoaWxkcmVuW3JdLG4uY2hpbGRyZW5bcl0pfShuLHUpLHV9dmFyIGMsbD1uZXcgb2UobmV3IG8uYSgoYz1uLnZhbHVlKS51cmwpLG5ldyBvLmEoYy5wYXJhbXMpLG5ldyBvLmEoYy5xdWVyeVBhcmFtcyksbmV3IG8uYShjLmZyYWdtZW50KSxuZXcgby5hKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyk7cmV0dXJuIGE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pLG5ldyBlZShsLGEpfShjLnJvdXRlUmV1c2VTdHJhdGVneSwoZT10LnNuYXBzaG90KS5fcm9vdCwobj1jLnJvdXRlclN0YXRlKT9uLl9yb290OnZvaWQgMCksbmV3IHJlKGksZSkpLHNob3VsZEFjdGl2YXRlOnV9OnthcHBsaWVkVXJsOnMsc3RhdGU6bnVsbCxzaG91bGRBY3RpdmF0ZTp1fX0pKTtjLmFjdGl2YXRlUm91dGVzKGQsYy5yb3V0ZXJTdGF0ZSxjLmN1cnJlbnRVcmxUcmVlLGEsdCxlLG4saSxsLGYpfSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyx1LGMpe3ZhciBsLGY9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iIT10eXBlb2YgdCYmdC5zaG91bGRBY3RpdmF0ZSYmcj09PWYubmF2aWdhdGlvbklkJiZ0LnN0YXRlKXt2YXIgbj10LnN0YXRlO2lmKGYuY3VycmVudFVybFRyZWU9dC5hcHBsaWVkVXJsLGYucmF3VXJsVHJlZT1mLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZi5jdXJyZW50VXJsVHJlZSxvKSxmLnJvdXRlclN0YXRlPW4sIWEpe3ZhciBpPWYudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5yYXdVcmxUcmVlKTtmLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGkpfHxzP2YubG9jYXRpb24ucmVwbGFjZVN0YXRlKGksIiIse25hdmlnYXRpb25JZDpyfSk6Zi5sb2NhdGlvbi5nbyhpLCIiLHtuYXZpZ2F0aW9uSWQ6cn0pfW5ldyBXZShmLnJvdXRlUmV1c2VTdHJhdGVneSxuLGUsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KHQpfSkuYWN0aXZhdGUoZi5yb290Q29udGV4dHMpLGw9ITB9ZWxzZSBsPSExfSkudGhlbihmdW5jdGlvbigpe2w/KGYubmF2aWdhdGVkPSEwLGYubGFzdFN1Y2Nlc3NmdWxJZD1yLGYuZXZlbnRzLm5leHQobmV3IEcocixmLnNlcmlhbGl6ZVVybChpKSxmLnNlcmlhbGl6ZVVybChmLmN1cnJlbnRVcmxUcmVlKSkpLHUoITApKTooZi5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSxmLmV2ZW50cy5uZXh0KG5ldyBXKHIsZi5zZXJpYWxpemVVcmwoaSksIiIpKSx1KCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWYubmF2aWdhdGVkPSEwLGYucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgVyhyLGYuc2VyaWFsaXplVXJsKGkpLHQubWVzc2FnZSkpLHUoITEpO2Vsc2V7Zi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBRKHIsZi5zZXJpYWxpemVVcmwoaSksdCkpO3RyeXt1KGYuZXJyb3JIYW5kbGVyKHQpKX1jYXRjaCh0KXtjKHQpfX12YXIgYX0pfSx0LnByb3RvdHlwZS5yZXNldFN0YXRlQW5kVXJsPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnJvdXRlclN0YXRlPXQsdGhpcy5jdXJyZW50VXJsVHJlZT1lLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxuKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpfSx0LnByb3RvdHlwZS5yZXNldFVybFRvQ3VycmVudFVybFRyZWU9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIse25hdmlnYXRpb25JZDp0aGlzLmxhc3RTdWNjZXNzZnVsSWR9KX0sdH0oKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9dCx0aGlzLmZ1dHVyZVN0YXRlPWUsdGhpcy5jdXJyU3RhdGU9bix0aGlzLmZvcndhcmRFdmVudD1yfXJldHVybiB0LnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LG49dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCksZmUodGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsaT1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZS5vdXRsZXQ7ci5kZWFjdGl2YXRlUm91dGVzKHQsaVtlXSxuKSxkZWxldGUgaVtlXX0pLGd0KGksZnVuY3Rpb24odCxlKXtyLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbil9KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldENvbnRleHQoci5vdXRsZXQpO28mJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIGkmJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxuKX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2godC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZSh0LGUpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KHQsZSl9LHQucHJvdG90eXBlLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihuJiZuLm91dGxldCl7dmFyIHI9bi5vdXRsZXQuZGV0YWNoKCksaT1uLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZSh0LnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6cixyb3V0ZTp0LGNvbnRleHRzOml9KX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKHIpe3ZhciBpPW5lKHQpLG89dC52YWx1ZS5jb21wb25lbnQ/ci5jaGlsZHJlbjplO2d0KGksZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG8pfSksci5vdXRsZXQmJihyLm91dGxldC5kZWFjdGl2YXRlKCksci5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtyLmFjdGl2YXRlUm91dGVzKHQsaVt0LnZhbHVlLm91dGxldF0sbiksci5mb3J3YXJkRXZlbnQobmV3IGl0KHQudmFsdWUuc25hcHNob3QpKX0pLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgbnQodC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxpPWU/ZS52YWx1ZTpudWxsO2lmKGZlKHIpLHI9PT1pKWlmKHIuY29tcG9uZW50KXt2YXIgbz1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihyLmNvbXBvbmVudClpZihvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goci5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKHIuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHIuc25hcHNob3QsbnVsbCksby5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksby5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsby5yb3V0ZT1hLnJvdXRlLnZhbHVlLG8ub3V0bGV0JiZvLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksUWUoYS5yb3V0ZSl9ZWxzZXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9ci5zbmFwc2hvdC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfSgpLHU9cz9zLm1vZHVsZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6bnVsbDtvLnJvdXRlPXIsby5yZXNvbHZlcj11LG8ub3V0bGV0JiZvLm91dGxldC5hY3RpdmF0ZVdpdGgocix1KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBRZSh0KXtmZSh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2goUWUpfXZhciBZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciByPXRoaXM7dGhpcy5yb3V0ZXI9dCx0aGlzLnJvdXRlPWUsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PW4sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbj10LmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIEcmJnIudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVyTGluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLmNvbW1hbmRzPW51bGwhPXQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByZXNlcnZlUXVlcnlQYXJhbXMiLHtzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KGkuVykoKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKSx0aGlzLnByZXNlcnZlPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbih0LGUsbixyKXtpZigwIT09dHx8ZXx8bnx8cilyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldClyZXR1cm4hMDt2YXIgaT17c2tpcExvY2F0aW9uQ2hhbmdlOktlKHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlKSxyZXBsYWNlVXJsOktlKHRoaXMucmVwbGFjZVVybCl9O3JldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudXJsVHJlZSxpKSwhMX0sdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZj1mdW5jdGlvbigpe3RoaXMuaHJlZj10aGlzLmxvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmxUcmVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxwcmVzZXJ2ZVF1ZXJ5UGFyYW1zOktlKHRoaXMucHJlc2VydmUpLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6S2UodGhpcy5wcmVzZXJ2ZUZyYWdtZW50KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gS2UodCl7cmV0dXJuIiI9PT10fHwhIXR9dmFyIFplPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5yZXNvbHZlcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3IFhlLHRoaXMuYXR0YWNoUmVmPW51bGx9fSgpLFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUub25DaGlsZE91dGxldENyZWF0ZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtuLm91dGxldD1lLHRoaXMuY29udGV4dHMuc2V0KHQsbil9LHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO2UmJihlLm91dGxldD1udWxsKX0sdC5wcm90b3R5cGUub25PdXRsZXREZWFjdGl2YXRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCx0fSx0LnByb3RvdHlwZS5vbk91dGxldFJlQXR0YWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0cz10fSx0LnByb3RvdHlwZS5nZXRPckNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO3JldHVybiBlfHwoZT1uZXcgWmUsdGhpcy5jb250ZXh0cy5zZXQodCxlKSksZX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsbyl7dGhpcy5wYXJlbnRDb250ZXh0cz10LHRoaXMubG9jYXRpb249ZSx0aGlzLnJlc29sdmVyPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvcj1vLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyBpLm0sdGhpcy5uYW1lPXJ8fGF0LHQub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlzLm5hbWUpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7dCYmdC5yb3V0ZSYmKHQuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKHQuYXR0YWNoUmVmLHQucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKHQucm91dGUsdC5yZXNvbHZlcnx8bnVsbCkpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0FjdGl2YXRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZURhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7dmFyIHQ9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0fSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2YXRlZD10LHRoaXMuX2FjdGl2YXRlZFJvdXRlPWUsdGhpcy5sb2NhdGlvbi5pbnNlcnQodC5ob3N0Vmlldyl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdCh0KX19LHQucHJvdG90eXBlLmFjdGl2YXRlV2l0aD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWN0aXZhdGUgYW4gYWxyZWFkeSBhY3RpdmF0ZWQgb3V0bGV0Iik7dGhpcy5fYWN0aXZhdGVkUm91dGU9dDt2YXIgbj0oZT1lfHx0aGlzLnJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0Ll9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZy5jb21wb25lbnQpLHI9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixpPW5ldyBKZSh0LHIsdGhpcy5sb2NhdGlvbi5pbmplY3Rvcik7dGhpcy5hY3RpdmF0ZWQ9dGhpcy5sb2NhdGlvbi5jcmVhdGVDb21wb25lbnQobix0aGlzLmxvY2F0aW9uLmxlbmd0aCxpKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9LHR9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvdXRlPXQsdGhpcy5jaGlsZENvbnRleHRzPWUsdGhpcy5wYXJlbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1vZT90aGlzLnJvdXRlOnQ9PT1YZT90aGlzLmNoaWxkQ29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KHQsZSl9LHR9KCksdG49ZnVuY3Rpb24oKXt9LGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBlKCkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy5hKShudWxsKX0pKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9LHR9KCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dGhpcy5yb3V0ZXI9dCx0aGlzLmluamVjdG9yPXIsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9aSx0aGlzLmxvYWRlcj1uZXcgVmUoZSxuLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgSihlKSl9LGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgdHQoZSkpfSl9cmV0dXJuIHQucHJvdG90eXBlLnNldFVwUHJlbG9hZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBHfSksT2JqZWN0KEUuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChpLnYpO3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModCx0aGlzLnJvdXRlci5jb25maWcpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnByb2Nlc3NSb3V0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbixpLG89W107dHJ5e2Zvcih2YXIgcz1PYmplY3Qoci5lKShlKSx1PXMubmV4dCgpOyF1LmRvbmU7dT1zLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtpZihjLmxvYWRDaGlsZHJlbiYmIWMuY2FuTG9hZCYmYy5fbG9hZGVkQ29uZmlnKXt2YXIgbD1jLl9sb2FkZWRDb25maWc7by5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhsLm1vZHVsZSxsLnJvdXRlcykpfWVsc2UgYy5sb2FkQ2hpbGRyZW4mJiFjLmNhbkxvYWQ/by5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh0LGMpKTpjLmNoaWxkcmVuJiZvLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKHQsYy5jaGlsZHJlbikpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYoaT1zLnJldHVybikmJmkuY2FsbChzKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIE9iamVjdChhLmEpKG8pLnBpcGUoT2JqZWN0KEQuYSkoKSxPYmplY3QoUy5hKShmdW5jdGlvbih0KXt9KSl9LHQucHJvdG90eXBlLnByZWxvYWRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGUsZnVuY3Rpb24oKXtyZXR1cm4gbi5sb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxvbj1uZXcgaS5vKCJST1VURVJfQ09ORklHVVJBVElPTiIpLGFuPW5ldyBpLm8oIlJPVVRFUl9GT1JST09UX0dVQVJEIiksc249W0IuZyx7cHJvdmlkZTpUdCx1c2VDbGFzczprdH0se3Byb3ZpZGU6R2UsdXNlRmFjdG9yeTpkbixkZXBzOltpLmcsVHQsWGUsQi5nLGkucCxpLnUsaS5pLExlLG9uLFt6ZSxuZXcgaS55XSxbRGUsbmV3IGkueV1dfSxYZSx7cHJvdmlkZTpvZSx1c2VGYWN0b3J5OnBuLGRlcHM6W0dlXX0se3Byb3ZpZGU6aS51LHVzZUNsYXNzOmkuSX0scm4sbm4sZW4se3Byb3ZpZGU6b24sdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gdW4oKXtyZXR1cm4gbmV3IGkudygiUm91dGVyIixHZSl9dmFyIGNuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe31yZXR1cm4gdC5mb3JSb290PWZ1bmN0aW9uKGUsbil7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltzbixobihlKSx7cHJvdmlkZTphbix1c2VGYWN0b3J5OmZuLGRlcHM6W1tHZSxuZXcgaS55LG5ldyBpLkhdXX0se3Byb3ZpZGU6b24sdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOkIuaCx1c2VGYWN0b3J5OmxuLGRlcHM6W0IucCxbbmV3IGkubihCLmEpLG5ldyBpLnldLG9uXX0se3Byb3ZpZGU6dG4sdXNlRXhpc3Rpbmc6biYmbi5wcmVsb2FkaW5nU3RyYXRlZ3k/bi5wcmVsb2FkaW5nU3RyYXRlZ3k6bm59LHtwcm92aWRlOmkudyxtdWx0aTohMCx1c2VGYWN0b3J5OnVufSxbbW4se3Byb3ZpZGU6aS5kLG11bHRpOiEwLHVzZUZhY3Rvcnk6eW4sZGVwczpbbW5dfSx7cHJvdmlkZTpnbix1c2VGYWN0b3J5OnZuLGRlcHM6W21uXX0se3Byb3ZpZGU6aS5iLG11bHRpOiEwLHVzZUV4aXN0aW5nOmdufV1dfX0sdC5mb3JDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2huKGUpXX19LHR9KCk7ZnVuY3Rpb24gbG4odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksbi51c2VIYXNoP25ldyBCLmUodCxlKTpuZXcgQi5vKHQsZSl9ZnVuY3Rpb24gZm4odCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIlJvdXRlck1vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBMYXp5IGxvYWRlZCBtb2R1bGVzIHNob3VsZCB1c2UgUm91dGVyTW9kdWxlLmZvckNoaWxkKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gaG4odCl7cmV0dXJuW3twcm92aWRlOmkuYSxtdWx0aTohMCx1c2VWYWx1ZTp0fSx7cHJvdmlkZTpMZSxtdWx0aTohMCx1c2VWYWx1ZTp0fV19ZnVuY3Rpb24gZG4odCxlLG4scixpLG8sYSxzLHUsYyxsKXt2b2lkIDA9PT11JiYodT17fSk7dmFyIGY9bmV3IEdlKG51bGwsZSxuLHIsaSxvLGEseXQocykpO2lmKGMmJihmLnVybEhhbmRsaW5nU3RyYXRlZ3k9YyksbCYmKGYucm91dGVSZXVzZVN0cmF0ZWd5PWwpLHUuZXJyb3JIYW5kbGVyJiYoZi5lcnJvckhhbmRsZXI9dS5lcnJvckhhbmRsZXIpLHUubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyJiYoZi5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9dS5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIpLHUuZW5hYmxlVHJhY2luZyl7dmFyIGg9T2JqZWN0KFUudCkoKTtmLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aC5sb2dHcm91cCgiUm91dGVyIEV2ZW50OiAiK3QuY29uc3RydWN0b3IubmFtZSksaC5sb2codC50b1N0cmluZygpKSxoLmxvZyh0KSxoLmxvZ0dyb3VwRW5kKCl9KX1yZXR1cm4gdS5vblNhbWVVcmxOYXZpZ2F0aW9uJiYoZi5vblNhbWVVcmxOYXZpZ2F0aW9uPXUub25TYW1lVXJsTmF2aWdhdGlvbiksdS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5JiYoZi5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksZn1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdC5yb3V0ZXJTdGF0ZS5yb290fXZhciBtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5pbmplY3Rvcj10LHRoaXMuaW5pdE5hdmlnYXRpb249ITEsdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lPW5ldyB1LmF9cmV0dXJuIHQucHJvdG90eXBlLmFwcEluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoQi5mLFByb21pc2UucmVzb2x2ZShudWxsKSkudGhlbihmdW5jdGlvbigpe3ZhciBlPW51bGwsbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gZT10fSkscj10LmluamVjdG9yLmdldChHZSksaT10LmluamVjdG9yLmdldChvbik7aWYodC5pc0xlZ2FjeURpc2FibGVkKGkpfHx0LmlzTGVnYWN5RW5hYmxlZChpKSllKCEwKTtlbHNlIGlmKCJkaXNhYmxlZCI9PT1pLmluaXRpYWxOYXZpZ2F0aW9uKXIuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksZSghMCk7ZWxzZXtpZigiZW5hYmxlZCIhPT1pLmluaXRpYWxOYXZpZ2F0aW9uKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbml0aWFsTmF2aWdhdGlvbiBvcHRpb25zOiAnIitpLmluaXRpYWxOYXZpZ2F0aW9uKyInIik7ci5ob29rcy5hZnRlclByZWFjdGl2YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbml0TmF2aWdhdGlvbj9PYmplY3Qocy5hKShudWxsKToodC5pbml0TmF2aWdhdGlvbj0hMCxlKCEwKSx0LnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUpfSxyLmluaXRpYWxOYXZpZ2F0aW9uKCl9cmV0dXJuIG59KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTGlzdGVuZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQob24pLG49dGhpcy5pbmplY3Rvci5nZXQocm4pLHI9dGhpcy5pbmplY3Rvci5nZXQoR2UpLG89dGhpcy5pbmplY3Rvci5nZXQoaS5nKTt0PT09by5jb21wb25lbnRzWzBdJiYodGhpcy5pc0xlZ2FjeUVuYWJsZWQoZSk/ci5pbml0aWFsTmF2aWdhdGlvbigpOnRoaXMuaXNMZWdhY3lEaXNhYmxlZChlKSYmci5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxuLnNldFVwUHJlbG9hZGluZygpLHIucmVzZXRSb290Q29tcG9uZW50VHlwZShvLmNvbXBvbmVudFR5cGVzWzBdKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUubmV4dChudWxsKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUuY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmlzTGVnYWN5RW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2VuYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHx2b2lkIDA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0LnByb3RvdHlwZS5pc0xlZ2FjeURpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZGlzYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITE9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0fSgpO2Z1bmN0aW9uIHluKHQpe3JldHVybiB0LmFwcEluaXRpYWxpemVyLmJpbmQodCl9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIHQuYm9vdHN0cmFwTGlzdGVuZXIuYmluZCh0KX12YXIgZ249bmV3IGkubygiUm91dGVyIEluaXRpYWxpemVyIil9LFpZanQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBjdH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGl0fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIklwMFIiKSxvPW4oIkNjbkciKSxhPW51bGw7ZnVuY3Rpb24gcygpe3JldHVybiBhfXZhciB1LGM9e2NsYXNzOiJjbGFzc05hbWUiLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9LGw9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGY9e0E6IjEiLEI6IjIiLEM6IjMiLEQ6IjQiLEU6IjUiLEY6IjYiLEc6IjciLEg6IjgiLEk6IjkiLEo6IioiLEs6IisiLE06Ii0iLE46Ii4iLE86Ii8iLCJgIjoiMCIsIlx4OTAiOiJOdW1Mb2NrIn07by5QYS5Ob2RlJiYodT1vLlBhLk5vZGUucHJvdG90eXBlLmNvbnRhaW5zfHxmdW5jdGlvbih0KXtyZXR1cm4hISgxNiZ0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKX0pO3ZhciBoLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwYXJzZSBub3QgaW1wbGVtZW50ZWQiKX0sZS5tYWtlQ3VycmVudD1mdW5jdGlvbigpe3ZhciB0O3Q9bmV3IGUsYXx8KGE9dCl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaTsoaT10KVtlXS5hcHBseShpLE9iamVjdChyLmQpKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5jYWxsKHQsZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpfSxlLnByb3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90LmNvbnRlbnQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dGVySFRNTH0sZS5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWV9LGUucHJvdG90eXBlLm5vZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVmFsdWV9LGUucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0LCJjb250ZW50Iik/dC5jb250ZW50OnR9LGUucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlyc3RDaGlsZH0sZS5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZE5vZGVzfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzQXNMaXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKyluW3JdPWVbcl07cmV0dXJuIG59LGUucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7dC5yZXBsYWNlQ2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0fSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZSl9LGUucHJvdG90eXBlLmluc2VydEFsbEJlZm9yZT1mdW5jdGlvbih0LGUsbil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0Lmluc2VydEJlZm9yZShuLGUpfSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUubmV4dFNpYmxpbmcpfSxlLnByb3RvdHlwZS5zZXRJbm5lckhUTUw9ZnVuY3Rpb24odCxlKXt0LmlubmVySFRNTD1lfSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50fSxlLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dC50ZXh0Q29udGVudD1lfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0LnZhbHVlPWV9LGUucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tlZH0sZS5wcm90b3R5cGUuc2V0Q2hlY2tlZD1mdW5jdGlvbih0LGUpe3QuY2hlY2tlZD1lfSxlLnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUNvbW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50TlModCxlKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUodCxlKSxyfSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0LGUpKSxufSxlLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNyZWF0ZVNoYWRvd1Jvb3QoKX0sZS5wcm90b3R5cGUuZ2V0U2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRIb3N0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3R9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfSxlLnByb3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY2xhc3NMaXN0LDApfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LGUucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpfSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbil7dC5zdHlsZVtlXT1ufSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbZV09IiJ9LGUucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3R5bGVbZV19LGUucHJvdG90eXBlLmhhc1N0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLmdldFN0eWxlKHQsZSl8fCIiO3JldHVybiBuP3I9PW46ci5sZW5ndGg+MH0sZS5wcm90b3R5cGUudGFnTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBNYXAsbj10LmF0dHJpYnV0ZXMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uLml0ZW0ocik7ZS5zZXQoaS5uYW1lLGkudmFsdWUpfXJldHVybiBlfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3Quc2V0QXR0cmlidXRlKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuLHIpe3Quc2V0QXR0cmlidXRlTlMoZSxuLHIpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3QucmVtb3ZlQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUudGVtcGxhdGVBd2FyZVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dGhpcy5jb250ZW50KHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGUucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGV9LGUucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQsZSl7dC50aXRsZT1lfHwiIn0sZS5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmKHQubWF0Y2hlcyYmdC5tYXRjaGVzKGUpfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yJiZ0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfHx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciYmdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IoZSkpfSxlLnByb3RvdHlwZS5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3RvdHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5DT01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9vdCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSxlLnByb3RvdHlwZS5nZXRFdmVudEtleT1mdW5jdGlvbih0KXt2YXIgZT10LmtleTtpZihudWxsPT1lKXtpZihudWxsPT0oZT10LmtleUlkZW50aWZpZXIpKXJldHVybiJVbmlkZW50aWZpZWQiO2Uuc3RhcnRzV2l0aCgiVSsiKSYmKGU9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpLDM9PT10LmxvY2F0aW9uJiZmLmhhc093blByb3BlcnR5KGUpJiYoZT1mW2VdKSl9cmV0dXJuIGxbZV18fGV9LGUucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9LGUucHJvdG90eXBlLmdldEhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lmhpc3Rvcnl9LGUucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24odCl7dmFyIGUsbj1wfHwocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3AuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbDtyZXR1cm4gbnVsbD09bj9udWxsOihlPW4saHx8KGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxoLnNldEF0dHJpYnV0ZSgiaHJlZiIsZSksIi8iPT09aC5wYXRobmFtZS5jaGFyQXQoMCk/aC5wYXRobmFtZToiLyIraC5wYXRobmFtZSl9LGUucHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXtwPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QoaS51KShkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciByPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0saT0wO2k8ci5sZW5ndGg7aSsrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixyW2ldKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIrcltpXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxlLnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFuaW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhpcy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0sZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc291cmNlTG9hZGVyVHlwZT1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKSkscD1udWxsLG09aS5kO2Z1bmN0aW9uIHkoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX12YXIgdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faW5pdCgpLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uPXMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9cygpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKX0sZS5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9LGUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOm8ubixhcmdzOlttXX1dfV19LGV9KGkucCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXQsdGhpcy5fZG9tPXMoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVGFnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9LHQucHJvdG90eXBlLmFkZFRhZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90LnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiByJiZ0LnB1c2gobi5fZ2V0T3JDcmVhdGVFbGVtZW50KHIsZSkpLHR9LFtdKTpbXX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9kb20ucXVlcnlTZWxlY3Rvcih0aGlzLl9kb2MsIm1ldGFbIit0KyJdIil8fG51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkpfSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5yZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCkscj10aGlzLmdldFRhZyhuKTtpZihyJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxyKSlyZXR1cm4gcn12YXIgaT10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LGkpO3ZhciBvPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKG8saSksaX0sdC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIG4uX2RvbS5zZXRBdHRyaWJ1dGUoZSxyLHRbcl0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihyKXtyZXR1cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLHIpPT09dFtyXX0pfSx0fSgpLGI9bmV3IG8ubygiVFJBTlNJVElPTl9JRCIpLF89W3twcm92aWRlOm8uZCx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldChvLmUpLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1zKCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4ucXVlcnlTZWxlY3RvckFsbChlLCJzdHlsZVtuZy10cmFuc2l0aW9uXSIpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUsIm5nLXRyYW5zaXRpb24iKT09PXR9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlbW92ZSh0KX0pfSl9fSxkZXBzOltiLG0sby5wXSxtdWx0aTohMH1dLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmluaXQ9ZnVuY3Rpb24oKXtPYmplY3Qoby5ZKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe28uUGEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciByPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09cil0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiByfSxvLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxvLlBhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0sby5QYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLG8uUGEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1vLlBhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxyPSExLGk9ZnVuY3Rpb24oZSl7cj1yfHxlLDA9PS0tbiYmdChyKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShpKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgcj10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1yP3I6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIFModCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChvLlBhLm5nPW8uUGEubmd8fHt9KVt0XT1lKX12YXIgRT17QXBwbGljYXRpb25SZWY6by5nLE5nWm9uZTpvLnh9LEM9InByb2JlIixPPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBUKHQpe3JldHVybiBPYmplY3Qoby5VKSh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiBTKEMsVCksUyhPLE9iamVjdChyLmEpKHt9LEUsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4gVH19dmFyIEE9bmV3IG8ubygiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKGkuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LGkpLGl9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK3IrIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxuKX0sdH0oKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksUD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgcj1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChyKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShNKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsRj0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEwodCxlLG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdO0FycmF5LmlzQXJyYXkoaSk/TCh0LGksbik6KGk9aS5yZXBsYWNlKFIsdCksbi5wdXNoKGkpKX1yZXR1cm4gbn1mdW5jdGlvbiBWKHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciB6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IEIodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIG8uTy5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgRyh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBvLk8uTmF0aXZlOmNhc2Ugby5PLlNoYWRvd0RvbTpyZXR1cm4gbmV3IFcodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7dmFyIHI9TChlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHIpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sdH0oKSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5bZV0sdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VsZWN0b3IgIicrdCsnIiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50cycpO3JldHVybiBlLnRleHRDb250ZW50PSIiLGV9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXtpZihyKXtlPXIrIjoiK2U7dmFyIGk9TltyXTtpP3Quc2V0QXR0cmlidXRlTlMoaSxlLG4pOnQuc2V0QXR0cmlidXRlKGUsbil9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe2lmKG4pe3ZhciByPU5bbl07cj90LnJlbW92ZUF0dHJpYnV0ZU5TKHIsZSk6dC5yZW1vdmVBdHRyaWJ1dGUobisiOiIrZSl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixyKXtyJm8uRC5EYXNoQ2FzZT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixyJm8uRC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09bn0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe24mby5ELkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe0goZSwicHJvcGVydHkiKSx0W2VdPW59LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC5ub2RlVmFsdWU9ZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gSChlLCJsaXN0ZW5lciIpLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSxWKG4pKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxWKG4pKX0sdH0oKSxVPSJAIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIEgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1VKXRocm93IG5ldyBFcnJvcigiRm91bmQgdGhlIHN5bnRoZXRpYyAiK2UrIiAiK3QrJy4gUGxlYXNlIGluY2x1ZGUgZWl0aGVyICJCcm93c2VyQW5pbWF0aW9uc01vZHVsZSIgb3IgIk5vb3BBbmltYXRpb25zTW9kdWxlIiBpbiB5b3VyIGFwcGxpY2F0aW9uLicpfXZhciBxLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7aS5jb21wb25lbnQ9cjt2YXIgbz1MKHIuaWQsci5zdHlsZXMsW10pO3JldHVybiBuLmFkZFN0eWxlcyhvKSxpLmNvbnRlbnRBdHRyPUYucmVwbGFjZShSLHIuaWQpLGkuaG9zdEF0dHI9RC5yZXBsYWNlKFIsci5pZCksaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5hcHBseVRvSG9zdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLGUsdGhpcy5ob3N0QXR0ciwiIil9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuKXt2YXIgcj10LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwodGhpcyxlLG4pO3JldHVybiB0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLHIsdGhpcy5jb250ZW50QXR0ciwiIikscn0sZX0oQiksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBhPXQuY2FsbCh0aGlzLGUpfHx0aGlzO2Euc2hhcmVkU3R5bGVzSG9zdD1uLGEuaG9zdEVsPXIsYS5jb21wb25lbnQ9aSxhLnNoYWRvd1Jvb3Q9aS5lbmNhcHN1bGF0aW9uPT09by5PLlNoYWRvd0RvbT9yLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KTpyLmNyZWF0ZVNoYWRvd1Jvb3QoKSxhLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChhLnNoYWRvd1Jvb3QpO2Zvcih2YXIgcz1MKGkuaWQsaS5zdHlsZXMsW10pLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtjLnRleHRDb250ZW50PXNbdV0sYS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGMpfXJldHVybiBhfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4scil9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oQiksUT0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sWT1RKCJhZGRFdmVudExpc3RlbmVyIiksSz1RKCJyZW1vdmVFdmVudExpc3RlbmVyIiksWj17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtRKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYocT17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFxJiZxLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPVpbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciByPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLHIpOmEuaGFuZGxlci5hcHBseSh0aGlzLHIpO2Zvcih2YXIgaT1uLnNsaWNlKCksbz0wO288aS5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPWlbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxyKTphLmhhbmRsZXIuYXBwbHkodGhpcyxyKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4sciYmT2JqZWN0KGkucikocil8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcyxpPW47aWYoIXRbWV18fG8ueC5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSk7ZWxzZXt2YXIgYT1aW2VdO2F8fChhPVpbZV09USgiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSx1PXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIGM9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6YyxoYW5kbGVyOml9KTtlbHNle2Zvcih2YXIgbD0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09aSl7bD0hMDticmVha31sfHxzLnB1c2goe3pvbmU6YyxoYW5kbGVyOml9KX11fHx0W1ldKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSl9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10W0tdO2lmKCFyKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIGk9WltlXSxvPWkmJnRbaV07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmci5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KEkpLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBvLm8oIkhhbW1lckdlc3R1cmVDb25maWciKSxydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxpdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5fY29uZmlnPW4saS5jb25zb2xlPXIsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLGk9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPXIuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe2kucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KEkpLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhpLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxpLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7dmFyIGk9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9aSwwIT1uLmxlbmd0aHx8MD09PWkubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1yLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IhPW4mJigwLGF0W3JdKSh0KSYmKGUrPXIrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe2UuZ2V0RXZlbnRGdWxsS2V5KGkpPT09dCYmci5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4oaSl9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShJKSx1dD1mdW5jdGlvbigpe30sY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIG8uRi5OT05FOnJldHVybiBlO2Nhc2Ugby5GLkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChvLkNhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBvLkYuU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3Qoby5EYSkoZSkpO2Nhc2Ugby5GLlNDUklQVDppZihlIGluc3RhbmNlb2YgZHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2Ugby5GLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgcHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChvLkVhKShTdHJpbmcoZSkpKTtjYXNlIG8uRi5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBsdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0odXQpLGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShsdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShsdCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0obHQpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGx0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGx0KSx5dD1be3Byb3ZpZGU6by56LHVzZVZhbHVlOmkuc30se3Byb3ZpZGU6by5BLHVzZVZhbHVlOmZ1bmN0aW9uKCl7ZC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6aS5wLHVzZUNsYXNzOnYsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLHZ0PU9iamVjdChvLlEpKG8uWCwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIGd0KCl7cmV0dXJuIG5ldyBvLmx9dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6by5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6by5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIHI9bigicHNXMCIpLGk9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KHIuYSkoaS5hLHQpfX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIHIuYihlLHQpLGV9KEVycm9yKX0sYm5lNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiNmJsRiIpLGk9bigiaXNieSIpLG89bigiMkJkaiIpLGE9bigiNjdZLyIpO2Z1bmN0aW9uIHModCxlLG4sdSl7cmV0dXJuIE9iamVjdChvLmEpKG4pJiYodT1uLG49dm9pZCAwKSx1P3ModCxlLG4pLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChpLmEpKHQpP3UuYXBwbHkodm9pZCAwLHQpOnUodCl9KSk6bmV3IHIuYShmdW5jdGlvbihyKXshZnVuY3Rpb24gdChlLG4scixpLG8pe3ZhciBhO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVFdmVudExpc3RlbmVyfShlKSl7dmFyIHM9ZTtlLmFkZEV2ZW50TGlzdGVuZXIobixyLG8pLGE9ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZW1vdmVFdmVudExpc3RlbmVyKG4scixvKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9mZn0oZSkpe3ZhciB1PWU7ZS5vbihuLHIpLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdS5vZmYobixyKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWRkTGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyfShlKSl7dmFyIGM9ZTtlLmFkZExpc3RlbmVyKG4sciksYT1mdW5jdGlvbigpe3JldHVybiBjLnJlbW92ZUxpc3RlbmVyKG4scil9fWVsc2V7aWYoIWV8fCFlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO2Zvcih2YXIgbD0wLGY9ZS5sZW5ndGg7bDxmO2wrKyl0KGVbbF0sbixyLGksbyl9aS5hZGQoYSl9KHQsZSxmdW5jdGlvbih0KXtyLm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6dCl9LHIsbil9KX1PYmplY3R9LGJ1anQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIlVvZEgiKSxuKCJJcDBSIiksbigiRnpxYyIpLG4oIldmNHAiKSksbz1uKCJkV1pnIiksYT1uKCJ3RncxIikscz0obigibExBUCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZTtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1pY29uLWJ1dHRvbiBpe2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9fS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24sLm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue291dGxpbmU6c29saWQgMXB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHIuaWIoMixbci5lYig0MDI2NTMxODQsMSx7cmlwcGxlOjB9KSwodCgpKCksci5PYSgxLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibWF0LWJ1dHRvbi13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuWGEobnVsbCwwKSwodCgpKCksci5PYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXJpcHBsZSBtYXQtcmlwcGxlIl0sWyJtYXRSaXBwbGUiLCIiXV0sW1syLCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuTmEoNCwyMTI5OTIsW1sxLDRdXSwwLGkucSxbci5rLHIueCxvLmEsWzIsaS5nXSxbMixhLmFdXSx7Y2VudGVyZWQ6WzAsImNlbnRlcmVkIl0sZGlzYWJsZWQ6WzEsImRpc2FibGVkIl0sdHJpZ2dlcjpbMiwidHJpZ2dlciJdfSxudWxsKSwodCgpKCksci5PYSg1LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDQsMCxuLmlzSWNvbkJ1dHRvbixuLl9pc1JpcHBsZURpc2FibGVkKCksbi5fZ2V0SG9zdEVsZW1lbnQoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDMsMCxuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uLHIuWWEoZSw0KS51bmJvdW5kZWQpfSl9fSxjNFdtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiTnNoNSIpLG89bigiSXAwUiIpLGE9KG4oIkZ6cWMiKSxuKCJXZjRwIiksbigiZFdaZyIpLG4oInFBbFMiKSk7bigibExBUCIpLG4oIndGdzEiKTt2YXIgcz1yLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiB1KHQpe3JldHVybiByLmliKDIsW3IuWGEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgYz1yLk1hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJ0cmFuc2Zvcm0iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6Im9wZW4sIG9wZW4taW5zdGFudCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsIDAsIDApIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6InZvaWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7ImJveC1zaGFkb3ciOiJub25lIix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoidm9pZCA9PiBvcGVuLWluc3RhbnQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjBtcyJ9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJ2b2lkIDw9PiBvcGVuLCBvcGVuLWluc3RhbnQgPT4gdm9pZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIGY9ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZHJhd2VyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl0ubWF0LWRyYXdlci1vcGVuZWR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lci5tYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCAubWF0LWRyYXdlci1zaWRle3otaW5kZXg6M30ubWF0LWRyYXdlci1iYWNrZHJvcHt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6Mzt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWJhY2tkcm9we3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcix2aXNpYmlsaXR5fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLWJhY2tkcm9we29wYWNpdHk6LjV9fS5tYXQtZHJhd2VyLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWNvbnRlbnR7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0sbWFyZ2luLWxlZnQsbWFyZ2luLXJpZ2h0fS5tYXQtZHJhd2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6NDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3otaW5kZXg6MztvdXRsaW5lOjA7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93LXk6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlcixbZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCBjdXJyZW50Q29sb3J9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5kLFtkaXI9cnRsXSAubWF0LWRyYXdlcntib3JkZXItbGVmdDpzb2xpZCAxcHggY3VycmVudENvbG9yO2JvcmRlci1yaWdodDpub25lfX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDoyfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7bGVmdDowO3JpZ2h0OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtc2lkZW5hdi1maXhlZHtwb3NpdGlvbjpmaXhlZH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gci5pYigwLFsodCgpKCksci5PYSgwLDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZHJhd2VyLWJhY2tkcm9wIl1dLFtbMiwibWF0LWRyYXdlci1zaG93biIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwO3JldHVybiJjbGljayI9PT1lJiYocj0hMSE9PXQuY29tcG9uZW50Ll9vbkJhY2tkcm9wQ2xpY2tlZCgpJiZyKSxyfSxudWxsLG51bGwpKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuX2lzU2hvd2luZ0JhY2tkcm9wKCkpfSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gci5pYigwLFsodCgpKCksci5PYSgwLDAsbnVsbCxudWxsLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNka1Njcm9sbGFibGUiLCIiXSxbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCx1LHMpKSxyLk5hKDEsMjEyOTkyLFtbMSw0XV0sMCxhLmEsW3IuayxhLmMsci54XSxudWxsLG51bGwpLHIuTmEoMiwxMDk3NzI4LG51bGwsMCxpLmcsW3IuaCxpLmZdLG51bGwsbnVsbCksci5YYSgwLDIpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsci5ZYShlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsci5ZYShlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHIuaWIoMixbci5lYig2NzEwODg2NDAsMSx7c2Nyb2xsYWJsZTowfSksKHQoKSgpLHIuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxoKSksci5OYSgyLDE2Mzg0LG51bGwsMCxvLmssW3IuTixyLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLHIuWGEobnVsbCwwKSxyLlhhKG51bGwsMSksKHQoKSgpLHIuRmEoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxkKSksci5OYSg2LDE2Mzg0LG51bGwsMCxvLmssW3IuTixyLktdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5oYXNCYWNrZHJvcCksdChlLDYsMCwhbi5fY29udGVudCl9LG51bGwpfX0sZFdaZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciByLGk9bigiQ2NuRyIpLG89bigiSXAwUiIpLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsJiZJbnRsLnY4QnJlYWtJdGVyYXRvcixzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9PYmplY3Qoby5xKSh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFhKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLnosOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB1KCl7aWYobnVsbD09ciYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiByPSEwfX0pKX1maW5hbGx5e3I9cnx8ITF9cmV0dXJuIHJ9dmFyIGM9ZnVuY3Rpb24oKXt9fSxlRGtQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBEfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigibjZnRyIpLG89bigicUFsUyIpLGE9bigiSXAwUiIpLHM9bigibXJTRyIpLHU9bigiSzlJYSIpLGM9bigicHVnVCIpLGw9bigiNmJsRiIpLGY9bigidDlmWiIpLGg9bigiZFdaZyIpLGQ9bigiNGMzNSIpLHA9KG4oIllTaDIiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0fSgpKSxtPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgcCx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHQmJk9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGVbbl09dFtuXX0pfX0oKTtmdW5jdGlvbiB5KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIHYodCxlKXtpZigic3RhcnQiIT09ZSYmImVuZCIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLicpfXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9T2JqZWN0KGkuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIscj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9cn19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBiKCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dmFyIGk9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD1mdW5jdGlvbigpe2kuZGlzYWJsZSgpLGkuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmaS5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiBpLl9vdmVybGF5UmVmLmRldGFjaCgpfSl9fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyBiKCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9wPGUudG9wfHx0LmJvdHRvbT5lLmJvdHRvbXx8dC5sZWZ0PGUubGVmdHx8dC5yaWdodD5lLnJpZ2h0fSl9dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IGIoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxyPW4ud2lkdGgsaT1uLmhlaWdodDt3KGUsW3t3aWR0aDpyLGhlaWdodDppLGJvdHRvbTppLHJpZ2h0OnIsdG9wOjAsbGVmdDowfV0pJiYodC5kaXNhYmxlKCksdC5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9vdmVybGF5UmVmLmRldGFjaCgpfSkpfX0pKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgXyhpLl9zY3JvbGxEaXNwYXRjaGVyLGkuX25nWm9uZSxpLl92aWV3cG9ydFJ1bGVyLHQpfSx0aGlzLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKGkuX3ZpZXdwb3J0UnVsZXIsaS5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTKGkuX3Njcm9sbERpc3BhdGNoZXIsaS5fdmlld3BvcnRSdWxlcixpLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PXJ9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uYyksT2JqZWN0KHIuVikoby5lKSxPYmplY3Qoci5WKShyLngpLE9iamVjdChyLlYpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5WKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvLGEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPW4sdGhpcy5fY29uZmlnPXIsdGhpcy5fbmdab25lPWksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPW8sdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyB1LmEsdGhpcy5fYXR0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9kZXRhY2htZW50cz1uZXcgdS5hLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IHUuYSxyLnNjcm9sbFN0cmF0ZWd5JiZyLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGF5RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYmFja2Ryb3BFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhvc3RFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5lbmFibGUoKSx0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLndpZHRoKSksKHRoaXMuX2NvbmZpZy5oZWlnaHR8fDA9PT10aGlzLl9jb25maWcuaGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUuaGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5oZWlnaHQpKSwodGhpcy5fY29uZmlnLm1pbldpZHRofHwwPT09dGhpcy5fY29uZmlnLm1pbldpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWluV2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpKSwodGhpcy5fY29uZmlnLm1heFdpZHRofHwwPT09dGhpcy5fY29uZmlnLm1heFdpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4V2lkdGg9T2JqZWN0KGkuYykodGhpcy5fY29uZmlnLm1heFdpZHRoKSksKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWF4SGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4SGVpZ2h0PU9iamVjdChpLmMpKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmNsYXNzTGlzdDtPYmplY3QoaS5hKShlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24/ci5hZGQodCk6ci5yZW1vdmUodCl9KX0sdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt2YXIgaT10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IHUuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249Yy5hLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPTAsdGhpcy5wb3NpdGlvbkNoYW5nZXM9bC5hLmNyZWF0ZShmdW5jdGlvbih0KXt2YXIgZT1pLl9wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHQpO3JldHVybiBpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMrKyxmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxpLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMtLX19KSx0aGlzLnNldE9yaWdpbih0KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX292ZXJsYXlSZWYmJnQhPT10aGlzLl9vdmVybGF5UmVmKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KCl9KX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZighKHRoaXMuX2lzRGlzcG9zZWR8fHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSlpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO2Vsc2V7dGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Zvcih2YXIgdCxlPXRoaXMuX29yaWdpblJlY3Qsbj10aGlzLl9vdmVybGF5UmVjdCxyPXRoaXMuX3ZpZXdwb3J0UmVjdCxpPVtdLG89MCxhPXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucztvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSx1PXRoaXMuX2dldE9yaWdpblBvaW50KGUscyksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQodSxuLHMpLGw9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLG4scixzKTtpZihsLmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocyx1KTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKGwsYyxyKT9pLnB1c2goe3Bvc2l0aW9uOnMsb3JpZ2luOnUsb3ZlcmxheVJlY3Q6bixib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHUscyl9KTooIXR8fHQub3ZlcmxheUZpdC52aXNpYmxlQXJlYTxsLnZpc2libGVBcmVhKSYmKHQ9e292ZXJsYXlGaXQ6bCxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDp1LHBvc2l0aW9uOnMsb3ZlcmxheVJlY3Q6bn0pfWlmKGkubGVuZ3RoKXtmb3IodmFyIGY9bnVsbCxoPS0xLGQ9MCxwPWk7ZDxwLmxlbmd0aDtkKyspe3ZhciBtPXBbZF0seT1tLmJvdW5kaW5nQm94UmVjdC53aWR0aCptLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKG0ucG9zaXRpb24ud2VpZ2h0fHwxKTt5PmgmJihoPXksZj1tKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGYucG9zaXRpb24sZi5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KX19LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuZGV0YWNoKCksdGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX0sdC5wcm90b3R5cGUucmVhcHBseUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9pc0Rpc3Bvc2VkJiYoIXRoaXMuX3BsYXRmb3JtfHx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpO3ZhciB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxhYmxlcz10fSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUud2l0aFZpZXdwb3J0TWFyZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoR3Jvd0FmdGVyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoUHVzaD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2NhblB1c2g9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQgaW5zdGFuY2VvZiByLms/dC5uYXRpdmVFbGVtZW50OnQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFRyYW5zZm9ybU9yaWdpbk9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9LHQucHJvdG90eXBlLl9nZXRPcmlnaW5Qb2ludD1mdW5jdGlvbih0LGUpe3ZhciBuO2lmKCJjZW50ZXIiPT1lLm9yaWdpblgpbj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7dmFyIHI9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxpPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7bj0ic3RhcnQiPT1lLm9yaWdpblg/cjppfXJldHVybnt4Om4seToiY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiByPSJjZW50ZXIiPT1uLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PW4ub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCx7eDp0Lngrcix5OnQueSsoImNlbnRlciI9PW4ub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PW4ub3ZlcmxheVk/MDotZS5oZWlnaHQpfX0sdC5wcm90b3R5cGUuX2dldE92ZXJsYXlGaXQ9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LG89dC55LGE9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxzPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7YSYmKGkrPWEpLHMmJihvKz1zKTt2YXIgdT0wLW8sYz1vK2UuaGVpZ2h0LW4uaGVpZ2h0LGw9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS53aWR0aCwwLWksaStlLndpZHRoLW4ud2lkdGgpLGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS5oZWlnaHQsdSxjKSxoPWwqZjtyZXR1cm57dmlzaWJsZUFyZWE6aCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDplLndpZHRoKmUuaGVpZ2h0PT09aCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6Zj09PWUuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5Omw9PWUud2lkdGh9fSx0LnByb3RvdHlwZS5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXt2YXIgcj1uLmJvdHRvbS1lLnksaT1uLnJpZ2h0LWUueCxvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aDtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPW8mJm88PXIpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9aSl9fSx0LnByb3RvdHlwZS5fcHVzaE92ZXJsYXlPblNjcmVlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPU1hdGgubWF4KHQueCtlLndpZHRoLW4ucmlnaHQsMCksaT1NYXRoLm1heCh0LnkrZS5oZWlnaHQtbi5ib3R0b20sMCksbz1NYXRoLm1heChuLnRvcC10LnksMCksYT1NYXRoLm1heChuLmxlZnQtdC54LDApO3JldHVybnt4OnQueCsoZS53aWR0aDw9bi53aWR0aD9hfHwtcjpuLmxlZnQtdC54KSx5OnQueSsoZS5oZWlnaHQ8PW4uaGVpZ2h0P298fC1pOm4udG9wLXQueSl9fSx0LnByb3RvdHlwZS5fYXBwbHlQb3NpdGlvbj1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPjApe3ZhciBuPW5ldyBmdW5jdGlvbih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfSh0LHRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSk7dGhpcy5fcG9zaXRpb25DaGFuZ2VzLm5leHQobil9dGhpcy5faXNJbml0aWFsUmVuZGVyPSExfSx0LnByb3RvdHlwZS5fc2V0VHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKXt2YXIgZSxuPXRoaXMuX2JvdW5kaW5nQm94LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpLHI9dC5vdmVybGF5WTtlPSJjZW50ZXIiPT09dC5vdmVybGF5WD8iY2VudGVyIjp0aGlzLl9pc1J0bCgpPyJzdGFydCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiOiJzdGFydCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV0uc3R5bGUudHJhbnNmb3JtT3JpZ2luPWUrIiAiK3J9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG8sYSxzLHU9dGhpcy5fdmlld3BvcnRSZWN0LGM9dGhpcy5faXNSdGwoKTtpZigidG9wIj09PWUub3ZlcmxheVkpcj10Lnksbj11LmJvdHRvbS10Lnk7ZWxzZSBpZigiYm90dG9tIj09PWUub3ZlcmxheVkpbj11LmhlaWdodC0oaT11LmhlaWdodC10LnkrMip0aGlzLl92aWV3cG9ydE1hcmdpbikrdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZXt2YXIgbD1NYXRoLm1pbih1LmJvdHRvbS10LnksdC55LXUubGVmdCksZj10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtyPXQueS1sLChuPTIqbCk+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihyPXQueS1mLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIWN8fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZjKXM9dS5yaWdodC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4sbz10LngtdS5sZWZ0O2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFjfHwiZW5kIj09PWUub3ZlcmxheVgmJmMpYT10Lngsbz11LnJpZ2h0LXQueDtlbHNle2w9TWF0aC5taW4odS5yaWdodC10LngsdC54LXUudG9wKTt2YXIgaD10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO2E9dC54LWwsKG89MipsKT5oJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGE9dC54LWgvMil9cmV0dXJue3RvcDpyLGxlZnQ6YSxib3R0b206aSxyaWdodDpzLHdpZHRoOm8saGVpZ2h0Om59fSx0LnByb3RvdHlwZS5fc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTt2YXIgcj17fTtpZih0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCkpci50b3A9ci5sZWZ0PSIwIixyLmJvdHRvbT1yLnJpZ2h0PSIiLHIud2lkdGg9ci5oZWlnaHQ9IjEwMCUiO2Vsc2V7dmFyIG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO3IuaGVpZ2h0PU9iamVjdChpLmMpKG4uaGVpZ2h0KSxyLnRvcD1PYmplY3QoaS5jKShuLnRvcCksci5ib3R0b209T2JqZWN0KGkuYykobi5ib3R0b20pLHIud2lkdGg9T2JqZWN0KGkuYykobi53aWR0aCksci5sZWZ0PU9iamVjdChpLmMpKG4ubGVmdCksci5yaWdodD1PYmplY3QoaS5jKShuLnJpZ2h0KSxyLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixyLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsbyYmKHIubWF4SGVpZ2h0PU9iamVjdChpLmMpKG8pKSxhJiYoci5tYXhXaWR0aD1PYmplY3QoaS5jKShhKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLEEodGhpcy5fYm91bmRpbmdCb3guc3R5bGUscil9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7QSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIwIixsZWZ0OiIwIixyaWdodDoiMCIsYm90dG9tOiIwIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pfSx0LnByb3RvdHlwZS5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbigpe0EodGhpcy5fcGFuZS5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIsYm90dG9tOiIiLHJpZ2h0OiIiLHBvc2l0aW9uOiIifSl9LHQucHJvdG90eXBlLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3RoaXMuX2hhc0V4YWN0UG9zaXRpb24oKT8oQShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksQShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0KSkpOm4ucG9zaXRpb249InN0YXRpYyI7dmFyIHI9IiIsaT10aGlzLl9nZXRPZmZzZXQoZSwieCIpLG89dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtpJiYocis9InRyYW5zbGF0ZVgoIitpKyJweCkgIiksbyYmKHIrPSJ0cmFuc2xhdGVZKCIrbysicHgpIiksbi50cmFuc2Zvcm09ci50cmltKCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCYmKG4ubWF4SGVpZ2h0PSIiKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGgmJihuLm1heFdpZHRoPSIiKSxBKHRoaXMuX3BhbmUuc3R5bGUsbil9LHQucHJvdG90eXBlLl9nZXRFeGFjdE92ZXJsYXlZPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3RvcDpudWxsLGJvdHRvbTpudWxsfSxyPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKHI9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihyLHRoaXMuX292ZXJsYXlSZWN0KSksImJvdHRvbSI9PT10Lm92ZXJsYXlZP24uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKHIueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6bi50b3A9T2JqZWN0KGkuYykoci55KSxufSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WD1mdW5jdGlvbih0LGUpe3ZhciBuPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0scj10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihyPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4ocix0aGlzLl9vdmVybGF5UmVjdCkpLCJyaWdodCI9PSh0aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIpP24ucmlnaHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLShyLngrdGhpcy5fb3ZlcmxheVJlY3Qud2lkdGgpKyJweCI6bi5sZWZ0PU9iamVjdChpLmMpKHIueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOngodCxuKSxpc09yaWdpbk91dHNpZGVWaWV3OncodCxuKSxpc092ZXJsYXlDbGlwcGVkOngoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp3KGUsbil9fSx0LnByb3RvdHlwZS5fc3VidHJhY3RPdmVyZmxvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtTWF0aC5tYXgoZSwwKX0sdCl9LHQucHJvdG90eXBlLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOm4udG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6bi5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0Om4ubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTpuLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX0sdC5wcm90b3R5cGUuX2lzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSx0LnByb3RvdHlwZS5faGFzRXhhY3RQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfSx0LnByb3RvdHlwZS5fZ2V0T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVQb3NpdGlvbnM9ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmxlbmd0aCl0aHJvdyBFcnJvcigiRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5OiBBdCBsZWFzdCBvbmUgcG9zaXRpb24gaXMgcmVxdWlyZWQuIik7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7digib3JpZ2luWCIsdC5vcmlnaW5YKSx5KCJvcmlnaW5ZIix0Lm9yaWdpblkpLHYoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSx5KCJvdmVybGF5WSIsdC5vdmVybGF5WSl9KX0sdH0oKTtmdW5jdGlvbiBBKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSxvKXt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25TdHJhdGVneT1uZXcgayhuLHIsaSxvKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSkud2l0aFZpZXdwb3J0TWFyZ2luKDApLHRoaXMud2l0aEZhbGxiYWNrUG9zaXRpb24odCxlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNSdGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvblBvc2l0aW9uQ2hhbmdlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpfSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9LHQucHJvdG90eXBlLndpdGhGYWxsYmFja1Bvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW5ldyBmdW5jdGlvbih0LGUsbixyKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9cix0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX0odCxlLG4scik7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLndpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRYKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LnNsaWNlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfSx0fSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wbGF0Zm9ybT1ufXJldHVybiB0LnByb3RvdHlwZS5nbG9iYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEl9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IGooZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKG8uZSksT2JqZWN0KHIuVikoYS5kKSxPYmplY3Qoci5WKShoLmEsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxQPTAsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixpLG8sYSxzLHUpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9cix0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9aSx0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9dX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxyPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxpPW5ldyBtKHQpO3JldHVybiBpLmRpcmVjdGlvbj1pLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IFQocixlLG4saSx0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrUCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoci5nKSksbmV3IGQuYih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpfSx0fSgpLFI9bmV3IHIubygiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIEQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBGPWZ1bmN0aW9uKCl7fX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIHI9e2U6e319fSxnSTNCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiNmJsRiIpLGk9bigiVDFETSIpLG89bigiaXNieSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIU9iamVjdChvLmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH12YXIgcz1uKCJua1k3Iik7ZnVuY3Rpb24gdSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG89LTE7cmV0dXJuIGEoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpPYmplY3Qocy5hKShlKSYmKG49ZSksT2JqZWN0KHMuYSkobil8fChuPWkuYSksbmV3IHIuYShmdW5jdGlvbihlKXt2YXIgcj1hKHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShjLHIse2luZGV4OjAscGVyaW9kOm8sc3Vic2NyaWJlcjplfSl9KX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxyPXQuc3Vic2NyaWJlcjtpZihyLm5leHQoZSksIXIuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIHIuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSl9LGdJY1k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4oIm1yU0ciKTt2YXIgcj1uKCJDY25HIik7bigiVk5yNCIpLG4oIjAvdVEiKSxuKCI2N1kvIiksbigiWllqdCIpO3ZhciBpPW5ldyByLm8oIk5nVmFsdWVBY2Nlc3NvciIpfSxoOURxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyl8fHRoaXN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KG4oInB1Z1QiKS5hKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1lLHIud29yaz1uLHIucGVuZGluZz0hMSxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLHI9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQocixuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChyLHRoaXMuaWQsZSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPTApLG51bGwhPT1uJiZ0aGlzLmRlbGF5PT09biYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7Y2xlYXJJbnRlcnZhbChlKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEscj12b2lkIDA7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtuPSEwLHI9ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLHJ9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaWQsZT10aGlzLnNjaGVkdWxlcixuPWUuYWN0aW9ucyxyPW4uaW5kZXhPZih0aGlzKTt0aGlzLndvcms9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5wZW5kaW5nPSExLHRoaXMuc2NoZWR1bGVyPW51bGwsLTEhPT1yJiZuLnNwbGljZShyLDEpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGx9LGV9KGkpfSxoVVdQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuKCJtclNHIiksbigiQ2NuRyIpLG4oIklwMFIiKSxuKCJPemZCIik7dmFyIHI9ZnVuY3Rpb24oKXt9fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KTt2YXIgcj0hMSxpPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtyPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIHJ9fX0saWhZWTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pO3ZhciByPWZ1bmN0aW9uKCl7fSxpPWZ1bmN0aW9uKCl7fSxvPSIqIjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjQsc3R5bGVzOmUsdGltaW5nczp0fX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjMsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gbCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBmKHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxLGV4cHI6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLHt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIG0odCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4odCl9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczttKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLHI9MCxpPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/bShmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysrcj09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK2k9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksZz0iISJ9LGlzYnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0samxabTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIm42Z0ciKSxvPW4oIlloYk8iKSxhPShuKCJpaFlZIiksbigiNGMzNSIpKSxzPW4oIks5SWEiKSx1PW4oInB1Z1QiKSxjPW4oInAwaWIiKSxsPW4oInAwU2oiKSxmPW4oIlZuRC8iKSxoPW4oInQ5ZloiKSxkPW4oIllTaDIiKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KGkuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oby5hKSxtPTAseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1pLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyBzLmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrbSsrLG8uYWNjb3JkaW9uPWUsb31yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KGkuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2dldEhpZGVUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaGlkZVRvZ2dsZTp0aGlzLmhpZGVUb2dnbGV9LGUucHJvdG90eXBlLl9oYXNTcGFjaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjY29yZGlvbiYmImRlZmF1bHQiPT09KHRoaXMuZXhwYW5kZWQ/dGhpcy5hY2NvcmRpb24uZGlzcGxheU1vZGU6dGhpcy5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0sZS5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2xhenlDb250ZW50JiZ0aGlzLm9wZW5lZC5waXBlKE9iamVjdChsLmEpKG51bGwpLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3QoaC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcG9ydGFsPW5ldyBhLmQodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxyPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09cj9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09ciYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfShvLmIpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj11LmEuRU1QVFksdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPU9iamVjdChjLmEpKHQub3BlbmVkLHQuY2xvc2VkLHQuX2lucHV0Q2hhbmdlcy5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEoIXQuaGlkZVRvZ2dsZSYmIXQuZGlzYWJsZWQpfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxuLm1vbml0b3IoZS5uYXRpdmVFbGVtZW50KX1yZXR1cm4gdC5wcm90b3R5cGUuX3RvZ2dsZT1mdW5jdGlvbigpe3RoaXMucGFuZWwudG9nZ2xlKCl9LHQucHJvdG90eXBlLl9pc0V4cGFuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuZXhwYW5kZWR9LHQucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuX2dldEV4cGFuZGVkU3RhdGUoKX0sdC5wcm90b3R5cGUuX2dldFBhbmVsSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5pZH0sdC5wcm90b3R5cGUuX3Nob3dUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wYW5lbC5oaWRlVG9nZ2xlJiYhdGhpcy5wYW5lbC5kaXNhYmxlZH0sdC5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBkLmo6Y2FzZSBkLmQ6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZSgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KX0sdH0oKSxnPWZ1bmN0aW9uKCl7fSxiPWZ1bmN0aW9uKCl7fSxfPWZ1bmN0aW9uKCl7fX0sbExBUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBTfSk7dmFyIHI9bigiSXAwUiIpLGk9bigiQ2NuRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9bigiRi9YTCIpLHU9bigiWVNoMiIpLGM9bigieE15RSIpLGw9bigiR2kzaSIpLGY9bigiVm5ELyIpLGg9bigiNjdZLyIpLGQ9bigidDlmWiIpLHA9bigibXJTRyIpLG09bigiZFdaZyIpO24oIm42Z0ciKTt2YXIgeT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9vcmlnaW49InByb2dyYW0iLGV9cmV0dXJuIE9iamVjdChwLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0Rm9jdXNPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9LGUucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbS5jYWxsKHRoaXMsZSksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uZm9jdXModGhpcy5fb3JpZ2luKX0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IG8uYSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX3NraXBQcmVkaWNhdGVGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlZH0sdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IG8uYSx0aGlzLmNoYW5nZT1uZXcgby5hLHQgaW5zdGFuY2VvZiBpLkImJnQuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aWYoZS5fYWN0aXZlSXRlbSl7dmFyIG49dC50b0FycmF5KCkuaW5kZXhPZihlLl9hY3RpdmVJdGVtKTtuPi0xJiZuIT09ZS5fYWN0aXZlSXRlbUluZGV4JiYoZS5fYWN0aXZlSXRlbUluZGV4PW4pfX0pfXJldHVybiB0LnByb3RvdHlwZS5za2lwUHJlZGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoV3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwPSEwLHRoaXN9LHQucHJvdG90eXBlLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fdmVydGljYWw9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFR5cGVBaGVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMD09PXQmJih0PTIwMCksdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsfSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpfSksT2JqZWN0KGwuYSkodCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9KSxPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2dldEl0ZW1zQXJyYXkoKSxyPTE7cjxuLmxlbmd0aCsxO3IrKyl7dmFyIGk9KGUuX2FjdGl2ZUl0ZW1JbmRleCtyKSVuLmxlbmd0aCxvPW5baV07aWYoIWUuX3NraXBQcmVkaWNhdGVGbihvKSYmMD09PW8uZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXtlLnNldEFjdGl2ZUl0ZW0oaSk7YnJlYWt9fWUuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc30sdC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVJdGVtSW5kZXg7dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX0sdC5wcm90b3R5cGUub25LZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTtzd2l0Y2goZSl7Y2FzZSB1Lms6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgdS5iOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5sOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuaTppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5nOmlmKCJsdHIiPT09dGhpcy5faG9yaXpvbnRhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCh0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49dS5hJiZlPD11Lm18fGU+PXUubiYmZTw9dS5oKSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVJdGVtSW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEZpcnN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9LHQucHJvdG90eXBlLnNldExhc3RJdGVtQWN0aXZlPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfSx0LnByb3RvdHlwZS5zZXROZXh0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9LHQucHJvdG90eXBlLnNldFByZXZpb3VzSXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW1JbmRleD1uLHRoaXMuX2FjdGl2ZUl0ZW09ZVtuXX0sdC5wcm90b3R5cGUudXBkYXRlQWN0aXZlSXRlbUluZGV4PWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeURlbHRhPWZ1bmN0aW9uKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5XcmFwTW9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49MTtuPD1lLmxlbmd0aDtuKyspe3ZhciByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlPWZ1bmN0aW9uKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSXRlbUJ5SW5kZXg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fSx0LnByb3RvdHlwZS5fZ2V0SXRlbXNBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIGkuQj90aGlzLl9pdGVtcy50b0FycmF5KCk6dGhpcy5faXRlbXN9LHR9KCkpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtPXR9cmV0dXJuIHQucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9LHQucHJvdG90eXBlLmlzVGFiYmFibGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTt2YXIgZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0odC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpO2lmKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PWIoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGk9Yih0KTtpZih0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuLTEhPT1pO2lmKCJpZnJhbWUiPT09cilyZXR1cm4hMTtpZigiYXVkaW8iPT09cil7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LKXJldHVybiEwfWlmKCJ2aWRlbyI9PT1yKXtpZighdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJnRoaXMuX3BsYXRmb3JtLlRSSURFTlQpcmV0dXJuITE7aWYodGhpcy5fcGxhdGZvcm0uQkxJTkt8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpcmV0dXJuITB9cmV0dXJuKCJvYmplY3QiIT09cnx8IXRoaXMuX3BsYXRmb3JtLkJMSU5LJiYhdGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmdC50YWJJbmRleD49MH0sdC5wcm90b3R5cGUuaXNGb2N1c2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSh0KSYmImhpZGRlbiI9PXQudHlwZX0odCkmJihmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0odCl8fGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJnQuaGFzQXR0cmlidXRlKCJocmVmIil9KHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGcodCkpfSh0KSYmIXRoaXMuaXNEaXNhYmxlZCh0KSYmdGhpcy5pc1Zpc2libGUodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBnKHQpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09dC50YWJJbmRleClyZXR1cm4hMTt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4iLTMyNzY4IiE9ZSYmISghZXx8aXNOYU4ocGFyc2VJbnQoZSwxMCkpKX1mdW5jdGlvbiBiKHQpe2lmKCFnKHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIsaSl7dm9pZCAwPT09aSYmKGk9ITEpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9lbmFibGVkPSEwLGl8fHRoaXMuYXR0YWNoQW5jaG9ycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fc3RhcnRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5kQW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl9lbmRBbmNob3ImJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbmRBbmNob3IpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsfSx0LnByb3RvdHlwZS5hdHRhY2hBbmNob3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7dC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUmJih0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX3N0YXJ0QW5jaG9yLHQuX2VsZW1lbnQpLHQuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodC5fZW5kQW5jaG9yLHQuX2VsZW1lbnQubmV4dFNpYmxpbmcpKX0pfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0luaXRpYWxFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuX2dldFJlZ2lvbkJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZm9jdXMtcmVnaW9uLSIrdCsiXSwgW2Nka0ZvY3VzUmVnaW9uIit0KyJdLCBbY2RrLWZvY3VzLSIrdCsiXSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLSIrdCk/Y29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pOmVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtcmVnaW9uLSIrdCkmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtyZXR1cm4gdD8odC5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1pbml0aWFsIikmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtaW5pdGlhbCcsIHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wIix0KSx0LmZvY3VzKCksITApOnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2NyZWF0ZUFuY2hvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHR9LHQucHJvdG90eXBlLl9leGVjdXRlT25TdGFibGU9ZnVuY3Rpb24odCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZC5hKSgxKSkuc3Vic2NyaWJlKHQpfSx0fSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgXyh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGUpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKSh2KSxPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKHIuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fb3JpZ2luPW51bGwsdGhpcy5fd2luZG93Rm9jdXNlZD0hMSx0aGlzLl9lbGVtZW50SW5mbz1uZXcgTWFwLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9LHRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMSksIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7aWYodGhpcy5fZWxlbWVudEluZm8uaGFzKHQpKXt2YXIgcj10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7cmV0dXJuIHIuY2hlY2tDaGlsZHJlbj1lLHIuc3ViamVjdC5hc09ic2VydmFibGUoKX12YXIgaT17dW5saXN0ZW46ZnVuY3Rpb24oKXt9LGNoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBvLmF9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LGkpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix1LCEwKX0pLGkudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHUsITApfSxpLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlKXt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0scj1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0saT1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsciwhT2JqZWN0KG0uYykoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsaSl9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixyLCFPYmplY3QobS5jKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixpKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciByPXRoaXMuX29yaWdpbjtyfHwocj10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxyKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxyKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49cn19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5SKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5WKShpLngpLE9iamVjdChpLlYpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBTKHQpe3JldHVybiAwPT09dC5idXR0b25zfX0sbHpsajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9KG4oIkZWU3kiKSxuKCJGenFjIiksbigiV2Y0cCIpLHIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWNhcmR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlfVtkaXI9cnRsXSAubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWx7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFsLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5pYigyLFtyLlhhKG51bGwsMCksci5YYShudWxsLDEpXSxudWxsLG51bGwpfXZhciBhPXIuTWEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHModCl7cmV0dXJuIHIuaWIoMixbci5YYShudWxsLDApLCh0KCkoKSxyLk9hKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHIuWGEobnVsbCwxKSxyLlhhKG51bGwsMildLG51bGwsbnVsbCl9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pfSxtVnNhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiQ2NuRyIpO24oIjRjMzUiKSxuKCJpaFlZIiksbigibXJTRyIpLG4oImxMQVAiKSxuKCJXZjRwIiksbigiSzlJYSIpLG4oInAwaWIiKSxuKCJGL1hMIiksbigiaDlEcSIpLG4oInB1Z1QiKSxuKCJuNmdHIiksbigiWVNoMiIpLG4oIlZuRC8iKSxuKCJ0OWZaIiksbigiTUdCUyIpLG4oInpvdG0iKSxuKCI2N1kvIiksbigiMC91USIpLG4oInAwU2oiKSxuKCJueTI0IiksbigiVDFETSIpLG4oIkZGT28iKSxuKCI2MGlVIiksbigiZURrUCIpLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW5ldyByLm8oIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBhPWZ1bmN0aW9uKCl7fX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgcj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9cih0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGEodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIHModCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIHIsaSxvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKHI9by5uZXh0KCkpLmRvbmU7KWEucHVzaChyLnZhbHVlKX1jYXRjaCh0KXtpPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKGkpdGhyb3cgaS5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHMoYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9fSxuNmdHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLGZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKSYmIWlzTmFOKE51bWJlcih0KSl9KHQpP051bWJlcih0KTplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX0sbmtZNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNjaGVkdWxlfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LG55MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBzKHQpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubm90aWZpZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB1KHQpLHI9T2JqZWN0KG8uYSkobix0aGlzLm5vdGlmaWVyKTtyZXR1cm4gciYmIXIuY2xvc2VkPyhuLmFkZChyKSxlLnN1YnNjcmliZShuKSk6bn0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oaS5hKX0scDBTajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIklVVGIiKSxpPW4oIlBVOEwiKSxvPW4oIkc1SjEiKSxhPW4oIm5rWTciKSxzPW4oIkYvWEwiKSx1PW4oIjAvdVEiKSxjPW4oIlR4amciKTtmdW5jdGlvbiBsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3QubGVuZ3RoLTFdO09iamVjdChhLmEpKG4pP3QucG9wKCk6bj1udWxsO3ZhciBsPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMT09PXQubGVuZ3RofHwyPT09dC5sZW5ndGgmJk9iamVjdChhLmEpKHRbMV0pP09iamVjdCh1LmEpKHRbMF0pOk9iamVjdChjLmEpKCkocy5hLmFwcGx5KHZvaWQgMCx0KSl9KDEhPT1sfHxuP2w+MD9PYmplY3Qoci5hKSh0LG4pOk9iamVjdChvLmIpKG4pOk9iamVjdChpLmEpKHRbMF0pLGUpfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCI2YmxGIiksaT1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLHU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KGkuYSkodSk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIHUmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIHIuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9bigiQ2NuRyIpLGk9bigiWllDaSIpLG89ci5NYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5pYigwLFsodCgpKCksci5PYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxyLk5hKDEsMjEyOTkyLG51bGwsMCxpLm4sW2kuYixyLk4sci5qLFs4LG51bGxdLHIuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9ci5LYSgibmctY29tcG9uZW50IixpLnIsZnVuY3Rpb24odCl7cmV0dXJuIHIuaWIoMCxbKHQoKSgpLHIuT2EoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLHIuTmEoMSw0OTE1MixudWxsLDAsaS5yLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scHNXMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIHI9bigibXJTRyIpLGk9bigiem90bSIpLG89bigiTUdCUyIpLGE9bigiNjdZLyIpLHM9bigiMC91USIpO2Z1bmN0aW9uIHUodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHIpe3JldHVybiByLnBpcGUodShmdW5jdGlvbihuLHIpe3JldHVybiBPYmplY3Qocy5hKSh0KG4scikpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCxpKXtyZXR1cm4gZShuLHQscixpKX0pKX0sbikpfTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBjKHQsbikpfSl9dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbCh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX0sdH0oKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZvaWQgMD09PXImJihyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucHJvamVjdD1uLGkuY29uY3VycmVudD1yLGkuaGFzQ29tcGxldGVkPSExLGkuYnVmZmVyPVtdLGkuYWN0aXZlPTAsaS5pbmRleD0wLGl9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5hY3RpdmUrKyx0aGlzLl9pbm5lclN1YihlLHQsbil9LGUucHJvdG90eXBlLl9pbm5lclN1Yj1mdW5jdGlvbih0LGUsbil7dGhpcy5hZGQoT2JqZWN0KGkuYSkodGhpcyx0LGUsbikpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhhc0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyLGkpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxlLmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG8uYSl9LHB1Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJpc2J5IiksaT1uKCJNY1NvIiksbz1uKCIyQmRqIiksYT1uKCJFaG1rIikscz1uKCJlaWhzIiksdT1uKCJtclNHIiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciByPXQuY2FsbCh0aGlzLG4/bi5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuICAiK24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIil8fHRoaXM7cmV0dXJuIHIuZXJyb3JzPW4sci5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YocixlLnByb3RvdHlwZSkscn1yZXR1cm4gdS5iKGUsdCksZX0oRXJyb3IpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXZhciBlO3JldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQsdT10aGlzLl9wYXJlbnRzLGw9dGhpcy5fdW5zdWJzY3JpYmUsaD10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBkPS0xLHA9dT91Lmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytkPHAmJnVbZF18fG51bGw7aWYoT2JqZWN0KG8uYSkobCkmJk9iamVjdChhLmEpKGwpLmNhbGwodGhpcyk9PT1zLmEmJihlPSEwLHQ9dHx8KHMuYS5lIGluc3RhbmNlb2YgYz9mKHMuYS5lLmVycm9ycyk6W3MuYS5lXSkpLE9iamVjdChyLmEpKGgpKWZvcihkPS0xLHA9aC5sZW5ndGg7KytkPHA7KXt2YXIgbT1oW2RdO2lmKE9iamVjdChpLmEpKG0pJiZPYmplY3QoYS5hKShtLnVuc3Vic2NyaWJlKS5jYWxsKG0pPT09cy5hKXtlPSEwLHQ9dHx8W107dmFyIHk9cy5hLmU7eSBpbnN0YW5jZW9mIGM/dD10LmNvbmNhdChmKHkuZXJyb3JzKSk6dC5wdXNoKHkpfX1pZihlKXRocm93IG5ldyBjKHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgcj1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1bcl19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgYz9lLmVycm9yczplKX0sW10pfX0scUFsUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImRXWmciKSxpPW4oIkNjbkciKSxvPW4oImJuZTUiKSxhPW4oIkYvWEwiKSxzPW4oIks5SWEiKSx1PW4oIjZibEYiKSxjPW4oInAwaWIiKSxsPW4oIlQxRE0iKSxmPW4oIm1yU0ciKSxoPW4oIkVobWsiKSxkPW4oImVpaHMiKSxwPW4oIk1HQlMiKSxtPW4oInpvdG0iKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmR1cmF0aW9uU2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdih0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmR1cmF0aW9uU2VsZWN0b3I9bixyLmhhc1ZhbHVlPSExLHJ9cmV0dXJuIGYuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLCF0aGlzLnRocm90dGxlZCl7dmFyIGU9T2JqZWN0KGguYSkodGhpcy5kdXJhdGlvblNlbGVjdG9yKSh0KTtpZihlPT09ZC5hKXRoaXMuZGVzdGluYXRpb24uZXJyb3IoZC5hLmUpO2Vsc2V7dmFyIG49T2JqZWN0KG0uYSkodGhpcyxlKTshbnx8bi5jbG9zZWQ/dGhpcy5jbGVhclRocm90dGxlKCk6dGhpcy5hZGQodGhpcy50aHJvdHRsZWQ9bil9fX0sZS5wcm90b3R5cGUuY2xlYXJUaHJvdHRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWUsZT10aGlzLmhhc1ZhbHVlLG49dGhpcy50aHJvdHRsZWQ7biYmKHRoaXMucmVtb3ZlKG4pLHRoaXMudGhyb3R0bGVkPW51bGwsbi51bnN1YnNjcmliZSgpKSxlJiYodGhpcy52YWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZX0ocC5hKSxnPW4oImdJM0IiKTtmdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWwuYSksbj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoZy5hKSh0LGUpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyB5KG4pKX07dmFyIG59dmFyIF89bigiVm5ELyIpO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KTt2YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBzLmEsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2Nyb2xsZWQubmV4dCh0KX0pO3RoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQodCxuKX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLnNjcm9sbGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIwKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/dS5hLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIHI9dD4wP2UuX3Njcm9sbGVkLnBpcGUoYih0KSkuc3Vic2NyaWJlKG4pOmUuX3Njcm9sbGVkLnN1YnNjcmliZShuKTtyZXR1cm4gZS5fc2Nyb2xsZWRDb3VudCsrLGZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZSgpLGUuX3Njcm9sbGVkQ291bnQtLSxlLl9zY3JvbGxlZENvdW50fHxlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOk9iamVjdChhLmEpKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuZGVyZWdpc3RlcihuKX0pLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmFuY2VzdG9yU2Nyb2xsZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0KTtyZXR1cm4gdGhpcy5zY3JvbGxlZChlKS5waXBlKE9iamVjdChfLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fHxuLmluZGV4T2YodCk+LTF9KSl9LHQucHJvdG90eXBlLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHIsaSl7ZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChpLHQpJiZuLnB1c2goaSl9KSxufSx0LnByb3RvdHlwZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPWUubmF0aXZlRWxlbWVudCxyPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09cilyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9LHQucHJvdG90eXBlLl9hZGRHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoby5hKSh3aW5kb3cuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9zY3JvbGxlZC5uZXh0KCl9KX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKGkueCksT2JqZWN0KGkuVikoci5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IHMuYSx0aGlzLl9zY3JvbGxMaXN0ZW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gci5fZWxlbWVudFNjcm9sbGVkLm5leHQodCl9fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHQuX3Njcm9sbExpc3RlbmVyKX0pLHRoaXMuX3Njcm9sbC5yZWdpc3Rlcih0aGlzKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9zY3JvbGxMaXN0ZW5lciYmdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX3Njcm9sbExpc3RlbmVyKX0sdC5wcm90b3R5cGUuZWxlbWVudFNjcm9sbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0RWxlbWVudFJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmfSx0fSgpLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChjLmEpKE9iamVjdChvLmEpKHdpbmRvdywicmVzaXplIiksT2JqZWN0KG8uYSkod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChhLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLHI9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3ArcixyaWdodDp0LmxlZnQrbixoZWlnaHQ6cix3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShiKHQpKTp0aGlzLl9jaGFuZ2V9LHQucHJvdG90eXBlLl91cGRhdGVWaWV3cG9ydFNpemU9ZnVuY3Rpb24oKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlYpKHIuYSksT2JqZWN0KGkuVikoaS54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEU9e3Byb3ZpZGU6UyxkZXBzOltbbmV3IGkueSxuZXcgaS5ILFNdLHIuYSxpLnhdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0fHxuZXcgUyhlLG4pfX0sQz1mdW5jdGlvbigpe319LCJ0L05hIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gen0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkNjbkciKSxvPW4oIkYvWEwiKSxhPW4oIjZibEYiKSxzPW4oIlBoam4iKSx1PW4oIlZuRC8iKSxjPW4oIjY3WS8iKSxsPW4oIklwMFIiKSxmPWZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7fSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIjoiKTtpZihuPjApe3ZhciByPXQuc2xpY2UoMCxuKSxpPXIudG9Mb3dlckNhc2UoKSxvPXQuc2xpY2UobisxKS50cmltKCk7ZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHIsaSksZS5oZWFkZXJzLmhhcyhpKT9lLmhlYWRlcnMuZ2V0KGkpLnB1c2gobyk6ZS5oZWFkZXJzLnNldChpLFtvXSl9fSl9OmZ1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9bi50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgciYmKHI9W3JdKSxyLmxlbmd0aD4wJiYoZS5oZWFkZXJzLnNldChpLHIpLGUubWF5YmVTZXROb3JtYWxpemVkTmFtZShuLGkpKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt0aGlzLmluaXQoKTt2YXIgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKXx8bnVsbH0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiZCJ9KX0sdC5wcm90b3R5cGUubWF5YmVTZXROb3JtYWxpemVkTmFtZT1mdW5jdGlvbih0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdD90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHlVcGRhdGUodCl9KSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfSx0LnByb3RvdHlwZS5jb3B5RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmhlYWRlcnMuc2V0KG4sdC5oZWFkZXJzLmdldChuKSksZS5ub3JtYWxpemVkTmFtZXMuc2V0KG4sdC5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pKX0pfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdDtyZXR1cm4gbi5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdD90aGlzLmxhenlJbml0OnRoaXMsbi5sYXp5VXBkYXRlPSh0aGlzLmxhenlVcGRhdGV8fFtdKS5jb25jYXQoW2VdKSxufSx0LnByb3RvdHlwZS5hcHBseVVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYobj1bbl0pLDA9PT1uLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTt2YXIgaT0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO2kucHVzaC5hcHBseShpLE9iamVjdChyLmQpKG4pKSx0aGlzLmhlYWRlcnMuc2V0KGUsaSk7YnJlYWs7Y2FzZSJkIjp2YXIgbz10LnZhbHVlO2lmKG8pe3ZhciBhPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIWEpcmV0dXJuOzA9PT0oYT1hLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4tMT09PW8uaW5kZXhPZih0KX0pKS5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUsYSl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdChlLm5vcm1hbGl6ZWROYW1lcy5nZXQobiksZS5oZWFkZXJzLmdldChuKSl9KX0sdH0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZW5jb2RlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfSx0LnByb3RvdHlwZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KX0sdC5wcm90b3R5cGUuZGVjb2RlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9LHQucHJvdG90eXBlLmRlY29kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9LHR9KCk7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9naSwiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9naSwiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUzQi9naSwiOyIpLnJlcGxhY2UoLyUyQi9naSwiKyIpLnJlcGxhY2UoLyUzRC9naSwiPSIpLnJlcGxhY2UoLyUzRi9naSwiPyIpLnJlcGxhY2UoLyUyRi9naSwiLyIpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGUsbixpLG89dGhpcztpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBwLHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPShlPXQuZnJvbVN0cmluZyxuPXRoaXMuZW5jb2RlcixpPW5ldyBNYXAsZS5sZW5ndGg+MCYmZS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI9Iiksbz1PYmplY3Qoci5jKSgtMT09ZT9bbi5kZWNvZGVLZXkodCksIiJdOltuLmRlY29kZUtleSh0LnNsaWNlKDAsZSkpLG4uZGVjb2RlVmFsdWUodC5zbGljZShlKzEpKV0sMiksYT1vWzBdLHM9b1sxXSx1PWkuZ2V0KGEpfHxbXTt1LnB1c2gocyksaS5zZXQoYSx1KX0pLGkpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZyb21PYmplY3RbZV07by5tYXAuc2V0KGUsQXJyYXkuaXNBcnJheShuKT9uOltuXSl9KSk6dGhpcy5tYXA9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt0aGlzLmluaXQoKTt2YXIgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZW5jb2Rlci5lbmNvZGVLZXkoZSk7cmV0dXJuIHQubWFwLmdldChlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4rIj0iK3QuZW5jb2Rlci5lbmNvZGVWYWx1ZShlKX0pLmpvaW4oIiYiKX0pLmpvaW4oIiYiKX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIG4uY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLG4udXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1hcC5zZXQoZSx0LmNsb25lRnJvbS5tYXAuZ2V0KGUpKX0pLHRoaXMudXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3N3aXRjaChlLm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49KCJhIj09PWUub3A/dC5tYXAuZ2V0KGUucGFyYW0pOnZvaWQgMCl8fFtdO24ucHVzaChlLnZhbHVlKSx0Lm1hcC5zZXQoZS5wYXJhbSxuKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PWUudmFsdWUpe3QubWFwLmRlbGV0ZShlLnBhcmFtKTticmVha312YXIgcj10Lm1hcC5nZXQoZS5wYXJhbSl8fFtdLGk9ci5pbmRleE9mKGUudmFsdWUpOy0xIT09aSYmci5zcGxpY2UoaSwxKSxyLmxlbmd0aD4wP3QubWFwLnNldChlLnBhcmFtLHIpOnQubWFwLmRlbGV0ZShlLnBhcmFtKX19KSx0aGlzLmNsb25lRnJvbT1udWxsKX0sdH0oKTtmdW5jdGlvbiB2KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBnKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gYih0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZ0IGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3ZhciBpO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09bj9uOm51bGwsaT1yKTppPW4saSYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFpLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhaS53aXRoQ3JlZGVudGlhbHMsaS5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1pLnJlc3BvbnNlVHlwZSksaS5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPWkuaGVhZGVycyksaS5wYXJhbXMmJih0aGlzLnBhcmFtcz1pLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZCksdGhpcy5wYXJhbXMpe3ZhciBvPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PW8ubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1lO2Vsc2V7dmFyIGE9ZS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWUrKC0xPT09YT8iPyI6YTxlLmxlbmd0aC0xPyImIjoiIikrb319ZWxzZSB0aGlzLnBhcmFtcz1uZXcgeSx0aGlzLnVybFdpdGhQYXJhbXM9ZX1yZXR1cm4gdC5wcm90b3R5cGUuc2VyaWFsaXplQm9keT1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6dih0aGlzLmJvZHkpfHxnKHRoaXMuYm9keSl8fGIodGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHk/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpiKHRoaXMuYm9keSk/bnVsbDpnKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6dih0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHk/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUubWV0aG9kfHx0aGlzLm1ldGhvZCxyPWUudXJsfHx0aGlzLnVybCxpPWUucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6dGhpcy5ib2R5LGE9dm9pZCAwIT09ZS53aXRoQ3JlZGVudGlhbHM/ZS53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT1lLnJlcG9ydFByb2dyZXNzP2UucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyx1PWUuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGM9ZS5wYXJhbXN8fHRoaXMucGFyYW1zO3JldHVybiB2b2lkIDAhPT1lLnNldEhlYWRlcnMmJih1PU9iamVjdC5rZXlzKGUuc2V0SGVhZGVycykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRIZWFkZXJzW25dKX0sdSkpLGUuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyhlLnNldFBhcmFtcykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRQYXJhbXNbbl0pfSxjKSksbmV3IHQobixyLG8se3BhcmFtczpjLGhlYWRlcnM6dSxyZXBvcnRQcm9ncmVzczpzLHJlc3BvbnNlVHlwZTppLHdpdGhDcmVkZW50aWFsczphfSl9LHR9KCksdz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LlNlbnQ9MF09IlNlbnQiLHRbdC5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLHRbdC5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2U9NF09IlJlc3BvbnNlIix0W3QuVXNlcj01XT0iVXNlciIsdH0oe30pLHg9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPTIwMCksdm9pZCAwPT09biYmKG49Ik9LIiksdGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IGQsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxuLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0oKSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9dy5SZXNwb25zZUhlYWRlcixufXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9LGV9KHgpLEU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4udHlwZT13LlJlc3BvbnNlLG4uYm9keT12b2lkIDAhPT1lLmJvZHk/ZS5ib2R5Om51bGwsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLG5ldyBlKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9LGV9KHgpLEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlLDAsIlVua25vd24gRXJyb3IiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsbi5vaz0hMSxuLm1lc3NhZ2U9bi5zdGF0dXM+PTIwMCYmbi5zdGF0dXM8MzAwPyJIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICIrKGUudXJsfHwiKHVua25vd24gdXJsKSIpOiJIdHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICIrKGUudXJsfHwiKHVua25vd24gdXJsKSIpKyI6ICIrZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCxuLmVycm9yPWUuZXJyb3J8fG51bGwsbn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlfSh4KTtmdW5jdGlvbiBPKHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5oYW5kbGVyPXR9cmV0dXJuIHQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdCBpbnN0YW5jZW9mIF8pcj10O2Vsc2V7dmFyIGE7YT1uLmhlYWRlcnMgaW5zdGFuY2VvZiBkP24uaGVhZGVyczpuZXcgZChuLmhlYWRlcnMpO3ZhciBsPXZvaWQgMDtuLnBhcmFtcyYmKGw9bi5wYXJhbXMgaW5zdGFuY2VvZiB5P24ucGFyYW1zOm5ldyB5KHtmcm9tT2JqZWN0Om4ucGFyYW1zfSkpLHI9bmV3IF8odCxlLHZvaWQgMCE9PW4uYm9keT9uLmJvZHk6bnVsbCx7aGVhZGVyczphLHBhcmFtczpsLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfSl9dmFyIGY9T2JqZWN0KG8uYSkocikucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbih0KXtyZXR1cm4gaS5oYW5kbGVyLmhhbmRsZSh0KX0pKTtpZih0IGluc3RhbmNlb2YgX3x8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIGY7dmFyIGg9Zi5waXBlKE9iamVjdCh1LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRX0pKTtzd2l0Y2gobi5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKHIucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiEodC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiEodC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiJzdHJpbmciIT10eXBlb2YgdC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJqc29uIjpkZWZhdWx0OnJldHVybiBoLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuYm9keX0pKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gaDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgIituLm9ic2VydmUrIn0iKX19LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJERUxFVEUiLHQsZSl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJHRVQiLHQsZSl9LHQucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiSEVBRCIsdCxlKX0sdC5wcm90b3R5cGUuanNvbnA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsdCx7cGFyYW1zOihuZXcgeSkuYXBwZW5kKGUsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfSx0LnByb3RvdHlwZS5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9LHQucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUEFUQ0giLHQsTyhuLGUpKX0sdC5wcm90b3R5cGUucG9zdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBPU1QiLHQsTyhuLGUpKX0sdC5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUFVUIix0LE8obixlKSl9LHR9KCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLm5leHQ9dCx0aGlzLmludGVyY2VwdG9yPWV9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfSx0fSgpLEE9bmV3IGkubygiSFRUUF9JTlRFUkNFUFRPUlMiKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfSx0fSgpLEk9L15cKVxdXH0nLD9cbi8sTT1mdW5jdGlvbigpe30sUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdH0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnhockZhY3Rvcnk9dH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIkpTT05QIj09PXQubWV0aG9kKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNvbnN0cnVjdCBKc29ucCByZXF1ZXN0IHdpdGhvdXQgSnNvbnBDbGllbnRNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgYS5hKGZ1bmN0aW9uKG4pe3ZhciByPWUueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3Blbih0Lm1ldGhvZCx0LnVybFdpdGhQYXJhbXMpLHQud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLHQuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuc2V0UmVxdWVzdEhlYWRlcih0LGUuam9pbigiLCIpKX0pLHQuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCF0LmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7dmFyIGk9dC5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1pJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaSl9aWYodC5yZXNwb25zZVR5cGUpe3ZhciBvPXQucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09bz9vOiJ0ZXh0In12YXIgYT10LnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsdT1mdW5jdGlvbigpe2lmKG51bGwhPT1zKXJldHVybiBzO3ZhciBlPTEyMjM9PT1yLnN0YXR1cz8yMDQ6ci5zdGF0dXMsbj1yLnN0YXR1c1RleHR8fCJPSyIsaT1uZXcgZChyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxvPWZ1bmN0aW9uKHQpe3JldHVybiJyZXNwb25zZVVSTCJpbiB0JiZ0LnJlc3BvbnNlVVJMP3QucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QodC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/dC5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHx0LnVybDtyZXR1cm4gcz1uZXcgUyh7aGVhZGVyczppLHN0YXR1czplLHN0YXR1c1RleHQ6bix1cmw6b30pfSxjPWZ1bmN0aW9uKCl7dmFyIGU9dSgpLGk9ZS5oZWFkZXJzLG89ZS5zdGF0dXMsYT1lLnN0YXR1c1RleHQscz1lLnVybCxjPW51bGw7MjA0IT09byYmKGM9dm9pZCAwPT09ci5yZXNwb25zZT9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09byYmKG89Yz8yMDA6MCk7dmFyIGw9bz49MjAwJiZvPDMwMDtpZigianNvbiI9PT10LnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBjKXt2YXIgZj1jO2M9Yy5yZXBsYWNlKEksIiIpO3RyeXtjPSIiIT09Yz9KU09OLnBhcnNlKGMpOm51bGx9Y2F0Y2godCl7Yz1mLGwmJihsPSExLGM9e2Vycm9yOnQsdGV4dDpjfSl9fWw/KG4ubmV4dChuZXcgRSh7Ym9keTpjLGhlYWRlcnM6aSxzdGF0dXM6byxzdGF0dXNUZXh0OmEsdXJsOnN8fHZvaWQgMH0pKSxuLmNvbXBsZXRlKCkpOm4uZXJyb3IobmV3IEMoe2Vycm9yOmMsaGVhZGVyczppLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpfSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBDKHtlcnJvcjp0LHN0YXR1czpyLnN0YXR1c3x8MCxzdGF0dXNUZXh0OnIuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IifSk7bi5lcnJvcihlKX0sZj0hMSxoPWZ1bmN0aW9uKGUpe2Z8fChuLm5leHQodSgpKSxmPSEwKTt2YXIgaT17dHlwZTp3LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmUubG9hZGVkfTtlLmxlbmd0aENvbXB1dGFibGUmJihpLnRvdGFsPWUudG90YWwpLCJ0ZXh0Ij09PXQucmVzcG9uc2VUeXBlJiZyLnJlc3BvbnNlVGV4dCYmKGkucGFydGlhbFRleHQ9ci5yZXNwb25zZVRleHQpLG4ubmV4dChpKX0scD1mdW5jdGlvbih0KXt2YXIgZT17dHlwZTp3LlVwbG9hZFByb2dyZXNzLGxvYWRlZDp0LmxvYWRlZH07dC5sZW5ndGhDb21wdXRhYmxlJiYoZS50b3RhbD10LnRvdGFsKSxuLm5leHQoZSl9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLHQucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKGEpLG4ubmV4dCh7dHlwZTp3LlNlbnR9KSxmdW5jdGlvbigpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGgpLG51bGwhPT1hJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLmFib3J0KCl9fSl9LHR9KCksUj1uZXcgaS5vKCJYU1JGX0NPT0tJRV9OQU1FIiksRD1uZXcgaS5vKCJYU1JGX0hFQURFUl9OQU1FIiksRj1mdW5jdGlvbigpe30sTD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZG9jPXQsdGhpcy5wbGF0Zm9ybT1lLHRoaXMuY29va2llTmFtZT1uLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5nZXRUb2tlbj1mdW5jdGlvbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiB0IT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49T2JqZWN0KGwudSkodCx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz10KSx0aGlzLmxhc3RUb2tlbn0sdH0oKSxWPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO3ZhciByPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1yfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUscil9KSksZS5oYW5kbGUodCl9LHR9KCksej1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJhY2tlbmQ9dCx0aGlzLmluamVjdG9yPWUsdGhpcy5jaGFpbj1udWxsfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7aWYobnVsbD09PXRoaXMuY2hhaW4pe3ZhciBlPXRoaXMuaW5qZWN0b3IuZ2V0KEEsW10pO3RoaXMuY2hhaW49ZS5yZWR1Y2VSaWdodChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgayh0LGUpfSx0aGlzLmJhY2tlbmQpfXJldHVybiB0aGlzLmNoYWluLmhhbmRsZSh0KX0sdH0oKSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5kaXNhYmxlPWZ1bmN0aW9uKCl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOlt7cHJvdmlkZTpWLHVzZUNsYXNzOmp9XX19LHQud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTpSLHVzZVZhbHVlOmUuY29va2llTmFtZX06W10sZS5oZWFkZXJOYW1lP3twcm92aWRlOkQsdXNlVmFsdWU6ZS5oZWFkZXJOYW1lfTpbXV19fSx0fSgpLFU9ZnVuY3Rpb24oKXt9fSx0OWZaOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgcj1uKCJtclNHIiksaT1uKCJGRk9vIiksbz1uKCJiN21XIiksYT1uKCJHNUoxIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P09iamVjdChhLmIpKCk6ZS5saWZ0KG5ldyB1KHQpKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IG8uYX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYyh0LHRoaXMudG90YWwpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci50b3RhbD1uLHIuY291bnQ9MCxyfXJldHVybiByLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRvdGFsLG49Kyt0aGlzLmNvdW50O248PWUmJih0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksbj09PWUmJih0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpKSl9LGV9KGkuYSl9LHU2N0Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciByPW4oIkVuOCsiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtyLmFdKCk7Oyl7dmFyIGk9bi5uZXh0KCk7aWYoaS5kb25lKXtlLmNvbXBsZXRlKCk7YnJlYWt9aWYoZS5uZXh0KGkudmFsdWUpLGUuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmZS5hZGQoZnVuY3Rpb24oKXtuLnJldHVybiYmbi5yZXR1cm4oKX0pLGV9fX0sdU1hTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIHI9bigibXJTRyIpLGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5zdWJqZWN0PWUsci5zdWJzY3JpYmVyPW4sci5jbG9zZWQ9ITEscn1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShuKCJwdWdUIikuYSl9LHZHWFk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJDY25HIiksaT1uKCJkV1pnIiksbz1uKCJtclNHIiksYT1uKCJua1k3Iikscz1uKCJpc2J5IiksdT1uKCJNR0JTIiksYz1uKCJ6b3RtIiksbD1uKCJJVVRiIiksZj17fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlc3VsdFNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGQodCx0aGlzLnJlc3VsdFNlbGVjdG9yKSl9LHR9KCksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucmVzdWx0U2VsZWN0b3I9bixyLmFjdGl2ZT0wLHIudmFsdWVzPVtdLHIub2JzZXJ2YWJsZXM9W10scn1yZXR1cm4gby5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy52YWx1ZXMucHVzaChmKSx0aGlzLm9ic2VydmFibGVzLnB1c2godCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMub2JzZXJ2YWJsZXMsZT10Lmxlbmd0aDtpZigwPT09ZSl0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7ZWxzZXt0aGlzLmFjdGl2ZT1lLHRoaXMudG9SZXNwb25kPWU7Zm9yKHZhciBuPTA7bjxlO24rKyl7dmFyIHI9dFtuXTt0aGlzLmFkZChPYmplY3QoYy5hKSh0aGlzLHIscixuKSl9fX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7MD09KHRoaXMuYWN0aXZlLT0xKSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89dGhpcy52YWx1ZXMsYT10aGlzLnRvUmVzcG9uZD9vW25dPT09Zj8tLXRoaXMudG9SZXNwb25kOnRoaXMudG9SZXNwb25kOjA7b1tuXT1lLDA9PT1hJiYodGhpcy5yZXN1bHRTZWxlY3Rvcj90aGlzLl90cnlSZXN1bHRTZWxlY3RvcihvKTp0aGlzLmRlc3RpbmF0aW9uLm5leHQoby5zbGljZSgpKSl9LGUucHJvdG90eXBlLl90cnlSZXN1bHRTZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KHUuYSkscD1uKCJLOUlhIiksbT1uKCI2YmxGIikseT1uKCIyQmRqIiksdj1uKCI2N1kvIiksZz1uKCJueTI0IiksYj1uKCJwMFNqIiksXz1uKCJuNmdHIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pO3ZhciB3LHg9bmV3IFNldCxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOkV9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZigheC5oYXModCkpdHJ5e3d8fCgodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodykpLHcuc2hlZXQmJih3LnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSx4LmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlIpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlYpKGkuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBFKHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IHAuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIE8oT2JqZWN0KF8uYSkodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLHI9bnVsbDtyZXR1cm4gT2JqZWN0KGEuYSkodFt0Lmxlbmd0aC0xXSkmJihyPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdChzLmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QobC5hKSh0LHIpLmxpZnQobmV3IGgobikpfShPKE9iamVjdChfLmEpKHQpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkub2JzZXJ2YWJsZX0pKS5waXBlKE9iamVjdCh2LmEpKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5tYXRjaGVzfSl9fSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLHI9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4scil7cmV0dXJuIHI/dChlLG4pLnBpcGUoT2JqZWN0KHYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChzLmEpKHQpP3IuYXBwbHkodm9pZCAwLHQpOnIodCl9KSk6bmV3IG0uYShmdW5jdGlvbih0KXt2YXIgcixpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtyPWUoaSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QoeS5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihpLHIpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoZy5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KGIuYSkobiksT2JqZWN0KHYuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQscikscn0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KHIuUikoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KHIuVikoUyksT2JqZWN0KHIuVikoci54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIE8odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIFQ9e1hTbWFsbDoiKG1heC13aWR0aDogNTk5cHgpIixTbWFsbDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLE1lZGl1bToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixMYXJnZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSIsWExhcmdlOiIobWluLXdpZHRoOiAxOTIwcHgpIixIYW5kc2V0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWI6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsSGFuZHNldFBvcnRyYWl0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixUYWJsZXRQb3J0cmFpdDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixXZWJQb3J0cmFpdDoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsSGFuZHNldExhbmRzY2FwZToiKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldExhbmRzY2FwZToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYkxhbmRzY2FwZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIn19LHdGdzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIm1yU0ciKSxpPW4oImloWVkiKSxvPW4oIkNjbkciKSxhPShuKCJaWWp0IiksbigiTlNZTCIpKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX25leHRBbmltYXRpb25JZD0wLHIuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIobi5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjpvLk8uTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pLHJ9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7dmFyIG49QXJyYXkuaXNBcnJheSh0KT9PYmplY3QoaS5pKSh0KTp0O3JldHVybiBsKHRoaXMuX3JlbmRlcmVyLG51bGwsZSwicmVnaXN0ZXIiLFtuXSksbmV3IHUoZSx0aGlzLl9yZW5kZXJlcil9LGV9KGkuYiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9pZD1lLHIuX3JlbmRlcmVyPW4scn1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGModGhpcy5faWQsdCxlfHx7fSx0aGlzLl9yZW5kZXJlcil9LGV9KGkuYyksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixuKX1yZXR1cm4gdC5wcm90b3R5cGUuX2xpc3Rlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCJAQCIrdGhpcy5pZCsiOiIrdCxlKX0sdC5wcm90b3R5cGUuX2NvbW1hbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGwodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsdCxlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHR9KCk7ZnVuY3Rpb24gbCh0LGUsbixyLGkpe3JldHVybiB0LnNldFByb3BlcnR5KGUsIkBAIituKyI6IityLGkpfXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7dmFyIGk9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQocik7cmV0dXJuIGl8fChpPW5ldyBoKCIiLHIsdGhpcy5lbmdpbmUpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KHIsaSkpLGl9dmFyIG89ZS5pZCxhPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDtyZXR1cm4gdGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSx0KSxlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4uZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGEsdCxlLm5hbWUsZSl9KSxuZXcgZCh0aGlzLGEscix0aGlzLmVuZ2luZSl9LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5fc2NoZWR1bGVDb3VudFRhc2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7dC5fbWljcm90YXNrSWQrK30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dD49MCYmdDx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bihmdW5jdGlvbigpe3JldHVybiBlKG4pfSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJlByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKGZ1bmN0aW9uKCl7aS5fem9uZS5ydW4oZnVuY3Rpb24oKXtpLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qoci5jKSh0LDIpOygwLGVbMF0pKGVbMV0pfSksaS5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbZSxuXSkpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3NjaGVkdWxlQ291bnRUYXNrKCksdC5lbmdpbmUuZmx1c2godC5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9LHR9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9bix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVzdHJveU5vZGUodCl9Om51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITApfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixyKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4scil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixyKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9LHR9KCksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixyLGkpe3ZhciBvPXQuY2FsbCh0aGlzLG4scixpKXx8dGhpcztyZXR1cm4gby5mYWN0b3J5PWUsby5uYW1lc3BhY2VJZD1uLG99cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4peyJAIj09ZS5jaGFyQXQoMCk/Ii4iPT1lLmNoYXJBdCgxKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxuPXZvaWQgMD09PW58fCEhbik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zdWJzdHIoMSksbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LGUucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7dmFyIGksbyxhLHM9dGhpcztpZigiQCI9PWUuY2hhckF0KDApKXt2YXIgdT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gdH19KHQpLGM9ZS5zdWJzdHIoMSksbD0iIjtyZXR1cm4iQCIhPWMuY2hhckF0KDApJiYoYz0oaT1PYmplY3Qoci5jKSgobz1jLGE9by5pbmRleE9mKCIuIiksW28uc3Vic3RyaW5nKDAsYSksby5zdWJzdHIoYSsxKV0pLDIpKVswXSxsPWlbMV0pLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLHUsYyxsLGZ1bmN0aW9uKHQpe3MuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sodC5fZGF0YXx8LTEsbix0KX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LGV9KGgpLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4scil7cmV0dXJuIHQuY2FsbCh0aGlzLGUuYm9keSxuLHIpfHx0aGlzfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGV9KGEuYik7ZnVuY3Rpb24gbSgpe3JldHVybiBPYmplY3QoYS5oKSgpP25ldyBhLmY6bmV3IGEuZH1mdW5jdGlvbiB5KCl7cmV0dXJuIG5ldyBhLmd9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIG5ldyBmKHQsZSxuKX12YXIgZz1uZXcgby5vKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksYj1mdW5jdGlvbigpe319LHhNeUU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciByPW4oIm1yU0ciKSxpPW4oIkZGT28iKSxvPW4oIit1bUsiKSxhPW4oIjJCZGoiKTtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHIubGlmdChuZXcgdSh0LGUsbikpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmV4dE9yT2JzZXJ2ZXI9dCx0aGlzLmVycm9yPWUsdGhpcy5jb21wbGV0ZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIsaSl7dmFyIHM9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHMuX3RhcE5leHQ9by5hLHMuX3RhcEVycm9yPW8uYSxzLl90YXBDb21wbGV0ZT1vLmEscy5fdGFwRXJyb3I9cnx8by5hLHMuX3RhcENvbXBsZXRlPWl8fG8uYSxPYmplY3QoYS5hKShuKT8ocy5fY29udGV4dD1zLHMuX3RhcE5leHQ9bik6biYmKHMuX2NvbnRleHQ9bixzLl90YXBOZXh0PW4ubmV4dHx8by5hLHMuX3RhcEVycm9yPW4uZXJyb3J8fG8uYSxzLl90YXBDb21wbGV0ZT1uLmNvbXBsZXRlfHxvLmEpLHN9cmV0dXJuIHIuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RyeXt0aGlzLl90YXBOZXh0LmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RyeXt0aGlzLl90YXBFcnJvci5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0cnl7dGhpcy5fdGFwQ29tcGxldGUuY2FsbCh0aGlzLl9jb250ZXh0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KGkuYSl9LHhUbGE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIn0seTNCeTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1uKCIrdW1LIik7ZnVuY3Rpb24gaSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbyh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PzE9PT10Lmxlbmd0aD90WzBdOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBlKHQpfSxlKX06ci5hfX0sem90bTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIm1yU0ciKSxpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLHIpe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5wYXJlbnQ9ZSxpLm91dGVyVmFsdWU9bixpLm91dGVySW5kZXg9cixpLmluZGV4PTAsaX1yZXR1cm4gci5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0obigiRkZPbyIpLmEpLG89bigiRnhiMSIpO2Z1bmN0aW9uIGEodCxlLG4scil7dmFyIGE9bmV3IGkodCxuLHIpO3JldHVybiBPYmplY3Qoby5hKShlKShhKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pfX1dKTsod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzddLHs0OmZ1bmN0aW9uKGwsbixhKXtsLmV4cG9ydHM9YSgielVuYiIpfSxBeXRSOmZ1bmN0aW9uKGwsbixhKXsidXNlIHN0cmljdCI7YS5kKG4sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHR9KTt2YXIgdD17cHJvZHVjdGlvbjohMH19LCJNaG0rIjpmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIENodW5rTG9hZGVyU2VydmljZX0pO3ZhciByeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiMC91USIpLF9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oInJmMzAiKSxfZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQXl0UiIpLF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJDY25HIiksX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJ0L05hIiksQ2h1bmtMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2h1bmtMb2FkZXJTZXJ2aWNlKGwpe3ZhciBuPXRoaXM7dGhpcy5odHRwPWwsdGhpcy5yZWNvcmRzPV9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fLmEsMCE9X2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLmEucHJvZHVjdGlvbiYmdGhpcy5yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24obCl7c2V0VGltZW91dChmdW5jdGlvbigpe24ubG9hZFBhZ2VDaHVuayhsLnBhZ2VOYW1lLGZ1bmN0aW9uKCl7fSl9KX0pfXJldHVybiBDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZFBhZ2VDaHVuaz1mdW5jdGlvbihsKXt2YXIgbj10aGlzLGE9bmV3IFByb21pc2UoZnVuY3Rpb24oYSx0KXt2YXIgZT1uLnJlY29yZHMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gbi5wYWdlTmFtZT09bH0pO3ZvaWQgMCE9ZT8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK2UucGFnZU5hbWUrIiAoIitlLmNodW5rVVJMKyIsICIrZS5jaHVua0xvYWRlZCsiKSBbQXN5bmNdIiksMD09ZS5jaHVua0xvYWRlZD9uLmh0dHAuZ2V0KGUuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24obCl7cmV0dXJuIG4uYXN5bmNMb2FkRGF0YUNodW5rKGwsZSxhKX0sZnVuY3Rpb24obCl7cmV0dXJuIGNvbnNvbGUubG9nKGwpfSk6YSghMCkpOmEoITApfSk7cmV0dXJuIE9iamVjdChyeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uYSkoYSl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZFBhZ2VDaHVuaz1mdW5jdGlvbihsLG4pe3ZhciBhPXRoaXMsdD10aGlzLnJlY29yZHMuZmluZChmdW5jdGlvbihuKXtyZXR1cm4gbi5wYWdlTmFtZT09bH0pO3ZvaWQgMCE9dD8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK3QucGFnZU5hbWUrIiAoIit0LmNodW5rVVJMKyIpIiksMD09dC5jaHVua0xvYWRlZD90aGlzLmh0dHAuZ2V0KHQuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24obCl7cmV0dXJuIGEubG9hZERhdGFDaHVuayhsLG4sdCl9LGZ1bmN0aW9uKGwpe3JldHVybiBjb25zb2xlLmxvZyhsKX0pOm4oKSk6bigpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWREYXRhQ2h1bms9ZnVuY3Rpb24oYmFzZTY0ZGF0YSxjYWxsYmFjayxyZWNvcmQpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSxjYWxsYmFjaygpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLHJlY29yZCxyZXNvbHZlKXt2YXIgZGVjb2RlZERhdGE9YXRvYihiYXNlNjRkYXRhKTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIkxvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIFtBc3luY10iKSxyZXNvbHZlKCEwKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uUih7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQ2h1bmtMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5WKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18uYykpfSx0b2tlbjpDaHVua0xvYWRlclNlcnZpY2UscHJvdmlkZWRJbjoicm9vdCJ9KSxDaHVua0xvYWRlclNlcnZpY2V9KCl9LGFlY2Q6ZnVuY3Rpb24obW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCJhIixmdW5jdGlvbigpe3JldHVybiBQcmVJbml0TG9hZGVyU2VydmljZX0pO3ZhciBfcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJyZjMwIiksX2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oIkF5dFIiKSxfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQ2NuRyIpLF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX189X193ZWJwYWNrX3JlcXVpcmVfXygidC9OYSIpLFByZUluaXRMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJlSW5pdExvYWRlclNlcnZpY2UobCl7dGhpcy5odHRwPWx9cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUF0SW5pdD1mdW5jdGlvbigpe2lmKDAhPV9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXy5hLnByb2R1Y3Rpb24pe2NvbnNvbGUubG9nKCJJUEwgOiBJbml0aWFsIHBhZ2UgbG9hZGVyIFtBUFBfSU5JVElBTElaRVJdIik7dmFyIGN1cnJVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYscmVnZXg9bmV3IFJlZ0V4cCgiI1xcLy4qIiksbWF0Y2hBcnJheT1jdXJyVXJsLm1hdGNoKHJlZ2V4KTtpZihBcnJheS5pc0FycmF5KG1hdGNoQXJyYXkpJiZtYXRjaEFycmF5Lmxlbmd0aCl7dmFyIGN1cnJQYXRoXzE9bWF0Y2hBcnJheVswXS5zbGljZSgxKTtjb25zb2xlLmxvZygiVVJMIDogIitjdXJyVXJsKSxjb25zb2xlLmxvZygiUGF0aCA6ICIrY3VyclBhdGhfMSk7dmFyIHJlY29yZD1fcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuIGwucGFnZU5hbWU9PWN1cnJQYXRoXzF9KTtpZih2b2lkIDA9PXJlY29yZClyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiSVBMIDogTm8gcmVjb3JkIGZvdW5kLCBwYWdlIGNhbid0IGJlIGxvYWRlZCBpbml0aWFsbHkuXG5JUEwgOiBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgcGF0aCBpcyBub3QgcGFydCBvZiB0aGUgbWFpbiBjaHVuayB0aGF0IGlzIGVtYmVkZGVkIGluIHRoZSBodG1sIHBhZ2UiKTtpZihjb25zb2xlLmxvZygiSVBMIDogQ29ycmVzcG9uZGluZyByZWNvcmQgZm91bmQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLDA9PXJlY29yZC5jaHVua0xvYWRlZCl7dmFyIHJlcT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYocmVxLm9wZW4oIkdFVCIscmVjb3JkLmNodW5rVVJMLCExKSxyZXEuc2VuZChudWxsKSwyMDA9PT1yZXEuc3RhdHVzKXt2YXIgZGVjb2RlZERhdGE9YXRvYihyZXEucmVzcG9uc2VUZXh0KTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIklQTCA6IExvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIil9ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogRXJyb3Igd2hpbGUgZ2V0dGluZyBkYXRhOiAlZCAoJXMpIixyZXEuc3RhdHVzLHJlcS5zdGF0dXNUZXh0KX19ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogTWFpbiBwYWdlLCBvciB1bmNhdWdodCBlcnJvci4iKX19LFByZUluaXRMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uUih7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUHJlSW5pdExvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlYoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5jKSl9LHRva2VuOlByZUluaXRMb2FkZXJTZXJ2aWNlLHByb3ZpZGVkSW46InJvb3QifSksUHJlSW5pdExvYWRlclNlcnZpY2V9KCl9LGNybmQ6ZnVuY3Rpb24obCxuLGEpe3ZhciB0PXsiLi9zdXBwb3J0LXNlY3Rpb24vc3VwcG9ydC1zZWN0aW9uLWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiTjRscCIsMF0sIi4vdGVhbS1yb3N0ZXIvdGVhbS1yb3N0ZXItbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJUa1lrIiwxXSwiLi93aWtpLWxpZ2h0cHJveHkvd2lraS1saWdodHByb3h5LWxheWVyLm1vZHVsZS5uZ2ZhY3RvcnkiOlsiZ0RqYyIsMl19O2Z1bmN0aW9uIGUobCl7dmFyIG49dFtsXTtyZXR1cm4gbj9hLmUoblsxXSkudGhlbihmdW5jdGlvbigpe3JldHVybiBhKG5bMF0pfSk6UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBuPW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlICInK2wrJyIuJyk7dGhyb3cgbi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixufSl9ZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpfSxlLmlkPSJjcm5kIixsLmV4cG9ydHM9ZX0scFpoTTpmdW5jdGlvbihsLG4sYSl7InVzZSBzdHJpY3QiO2EuZChuLCJhIixmdW5jdGlvbigpe3JldHVybiB0fSk7dmFyIHQ9ZnVuY3Rpb24oKXt9fSxyZjMwOmZ1bmN0aW9uKGwsbixhKXsidXNlIHN0cmljdCI7YS5kKG4sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGV9KTt2YXIgdD1mdW5jdGlvbihsLG4pe3RoaXMucGFnZU5hbWU9bCx0aGlzLmNodW5rVVJMPW4sdGhpcy5jaHVua0xvYWRlZD0hMX0sZT1bbmV3IHQoIi9zdXBwb3J0IiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvOS85MS9ULS1HT19QYXJpcy1TYWNsYXktLXN1cHBvcnRfY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyB0KCIvdGVhbSIsImh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzcvNzQvVC0tR09fUGFyaXMtU2FjbGF5LS10ZWFtX2NodW5rLmJhc2U2NC50eHQiKSxuZXcgdCgiL2xhYm5vdGVib29rIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wMi9ULS1HT19QYXJpcy1TYWNsYXktLWxhYm5vdGVib29rX2NodW5rLmJhc2U2NC50eHQiKV19LHpVbmI6ZnVuY3Rpb24obCxuLGEpeyJ1c2Ugc3RyaWN0IjthLnIobik7dmFyIHQ9YSgiQ2NuRyIpLGU9YSgiQXl0UiIpLHU9YSgiSXAwUiIpLHI9YSgiYWVjZCIpLG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obCxuKXt0aGlzLnBsYXRmb3JtSWQ9bCx0aGlzLmFwcElkPW47dmFyIGE9T2JqZWN0KHUucSkobCk/ImluIHRoZSBicm93c2VyIjoib24gdGhlIHNlcnZlciI7Y29uc29sZS5sb2coIlJ1bm5pbmcgIithKyIgd2l0aCBhcHBJZD0iK24pfX0oKSxpPWEoInZHWFkiKSxjPWEoIjY3WS8iKSxzPWEoIk1obSsiKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbChsLG4sYSl7dmFyIHQ9dGhpczt0aGlzLmJyZWFrcG9pbnRPYnNlcnZlcj1sLHRoaXMucm91dGVyPW4sdGhpcy5jaHVua0xvYWRlcj1hLHRoaXMuc2hvd1N1Ym1lbnU9ITEsdGhpcy5vcGVuZWRTaWRlTmF2PSEwLHRoaXMuaXNIYW5kc2V0JD10aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKGkuYi5IYW5kc2V0KS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKGwpe3JldHVybiBsLm1hdGNoZXN9KSksdGhpcy5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nPWZ1bmN0aW9uKGwpe3Qucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQobCx0KX19cmV0dXJuIGwucHJvdG90eXBlLnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmdVbmJvdW5kPWZ1bmN0aW9uKGwsbil7bi5jaHVua0xvYWRlci5sb2FkUGFnZUNodW5rKGwsZnVuY3Rpb24oKXtuLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGwpfSl9LGwucHJvdG90eXBlLm9wZW5TaWRlTmF2PWZ1bmN0aW9uKCl7dGhpcy5vcGVuZWRTaWRlTmF2PSEwIT09dGhpcy5vcGVuZWRTaWRlTmF2fSxsLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbH0oKSxwPWEoInBNblMiKSxtPWEoImx6bGoiKSxoPWEoIkZWU3kiKSxnPWEoImdJM0IiKSxfPWEoIlZwaFoiKTtmdW5jdGlvbiBmKGwsbixhKXt2YXIgdCxlPV8uayhsKSx1PU1hdGgubWluKHBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpLHBhcnNlSW50KGUuc3R5bGUoImhlaWdodCIpKSkvMixyPXBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpLzItdSxvPXBhcnNlSW50KGUuc3R5bGUoImhlaWdodCIpKS8yLXUsaT1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbikpL2EubWF4VmFsdWUsYz1NYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsxO3Q9YS53YXZlSGVpZ2h0U2NhbGluZz9fLmooKS5yYW5nZShbMCxhLndhdmVIZWlnaHQsMF0pLmRvbWFpbihbMCw1MCwxMDBdKTpfLmooKS5yYW5nZShbYS53YXZlSGVpZ2h0LGEud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgcz1hLnRleHRTaXplKnUvMixkPXBhcnNlRmxvYXQobikudG9GaXhlZCgyKSxwPWEudmFsdWVDb3VudFVwP2EubWluVmFsdWU6ZCxtPWEuZGlzcGxheVBlcmNlbnQ/YS5jdXN0b21QZXJjZW50OiIiLGg9YS5jaXJjbGVUaGlja25lc3MqdSxnPWgrYS5jaXJjbGVGaWxsR2FwKnUsZj11LWcsYj1mKnQoMTAwKmkpLHY9MSthLndhdmVDb3VudCxrPTIqZi9hLndhdmVDb3VudCp2LHg9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGgucm91bmQobCl9O3BhcnNlRmxvYXQoZCkhPXBhcnNlRmxvYXQoeChkKSkmJih4PWZ1bmN0aW9uKGwpe3JldHVybiBwYXJzZUZsb2F0KGwpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGQpIT1wYXJzZUZsb2F0KHgoZCkpJiYoeD1mdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLE89MDtPPD00MCp2O08rKyl3LnB1c2goe3g6Ty8oNDAqdikseTpPLzQwfSk7dmFyIHk9Xy5qKCkucmFuZ2UoWzAsMipNYXRoLlBJXSkuZG9tYWluKFswLDFdKSxQPV8uaigpLnJhbmdlKFswLHVdKS5kb21haW4oWzAsdV0pLEM9Xy5qKCkucmFuZ2UoWzAsa10pLmRvbWFpbihbMCwxXSksTT1fLmooKS5yYW5nZShbMCxiXSkuZG9tYWluKFswLDFdKSxXPV8uaigpLnJhbmdlKFtnKzIqZitiLGctYl0pLmRvbWFpbihbMCwxXSksWT1fLmooKS5yYW5nZShbMCxrLTIqZl0pLmRvbWFpbihbMCwxXSksTD1fLmooKS5yYW5nZShbZysyKmYsZysuNypzXSkuZG9tYWluKFswLDFdKSxBPWUuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCIrbysiKSIpLE49Xy5hKCkuc3RhcnRBbmdsZSh5KDApKS5lbmRBbmdsZSh5KDEpKS5vdXRlclJhZGl1cyhQKHUpKS5pbm5lclJhZGl1cyhQKHUtaCkpO0EuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsTikuc3R5bGUoImZpbGwiLGEuY2lyY2xlQ29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK3UrIikiKTt2YXIgST1BLmFwcGVuZCgidGV4dCIpLnRleHQoeChwKSttKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIscysicHgiKS5zdHlsZSgiZmlsbCIsYS50ZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK0woYS50ZXh0VmVydFBvc2l0aW9uKSsiKSIpLEU9Xy5iKCkueChmdW5jdGlvbihsKXtyZXR1cm4gQyhsLngpfSkueTAoZnVuY3Rpb24obCl7cmV0dXJuIE0oTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKGwpe3JldHVybiAyKmYrYn0pLFQ9QS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrYy50b1N0cmluZygpKSxSPVQuYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsRSkuYXR0cigiVCIsMCksUz1BLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK2MudG9TdHJpbmcoKSsiKSIpO1MuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsdSkuYXR0cigiY3kiLHUpLmF0dHIoInIiLGYpLnN0eWxlKCJmaWxsIixhLndhdmVDb2xvcik7dmFyIEQ9Uy5hcHBlbmQoInRleHQiKS50ZXh0KHgocCkrbSkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLHMrInB4Iikuc3R5bGUoImZpbGwiLGEud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCIrTChhLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYoYS52YWx1ZUNvdW50VXApe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIGw9Xy5mKHAsZCk7cmV0dXJuIGZ1bmN0aW9uKG4pe0kudGV4dCh4KGwobikpK20pLEQudGV4dCh4KGwobikpK20pfX07SS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixGKSxELnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLEYpfXZhciBqPWcrMipmLWs7ZnVuY3Rpb24gVSgpe1IuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrWShSLmF0dHIoIlQiKSkrIiwwKSIpLFIudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGVUaW1lKigxLVIuYXR0cigiVCIpKSkuZWFzZShfLmQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1koMSkrIiwwKSIpLmF0dHIoIlQiLDEpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJUIiwwKSxVKCl9KX1yZXR1cm4gYS53YXZlUmlzZT9ULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2orIiwiK1coMCkrIikiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2orIiwiK1coaSkrIikiKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Ui5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMSwwKSIpfSk6VC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitqKyIsIitXKGkpKyIpIiksYS53YXZlQW5pbWF0ZSYmVSgpLHt1cGRhdGUobCl7dmFyIG49cGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpLGU9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGgucm91bmQobCl9O3BhcnNlRmxvYXQobikhPXBhcnNlRmxvYXQoZShuKSkmJihlPWZ1bmN0aW9uKGwpe3JldHVybiBwYXJzZUZsb2F0KGwpLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KG4pIT1wYXJzZUZsb2F0KGUobikpJiYoZT1mdW5jdGlvbihsKXtyZXR1cm4gcGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpfSk7dmFyIHU9ZnVuY3Rpb24oKXt2YXIgbj1fLmYoSS50ZXh0KCkscGFyc2VGbG9hdChsKS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24obCl7SS50ZXh0KGUobihsKSkrbSksRC50ZXh0KGUobihsKSkrbSl9fTtJLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLHUpLEQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsdSk7dmFyIHIsbz1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbCkpL2EubWF4VmFsdWUsaT1mKnQoMTAwKm8pLGM9Xy5qKCkucmFuZ2UoW2crMipmK2ksZy1pXSkuZG9tYWluKFswLDFdKShvKSxzPV8uaigpLnJhbmdlKFswLGtdKS5kb21haW4oWzAsMV0pLGQ9Xy5qKCkucmFuZ2UoWzAsaV0pLmRvbWFpbihbMCwxXSk7cj1hLndhdmVIZWlnaHRTY2FsaW5nP18ubC5hcmVhKCkueChmdW5jdGlvbihsKXtyZXR1cm4gcyhsLngpfSkueTAoZnVuY3Rpb24obCl7cmV0dXJuIGQoTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbC55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKGwpe3JldHVybiAyKmYraX0pOkU7dmFyIHA9YS53YXZlQW5pbWF0ZT9ZKDEpOjA7Ui50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGU/YS53YXZlQW5pbWF0ZVRpbWUqKDEtUi5hdHRyKCJUIikpOmEud2F2ZVJpc2VUaW1lKS5lYXNlKF8uZCkuYXR0cigiZCIscikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcCsiLDApIikuYXR0cigiVCIsIjEiKS5vbigiZW5kIixmdW5jdGlvbigpe2Eud2F2ZUFuaW1hdGUmJihSLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1koMCkrIiwwKSIpLFUoKSl9KSxULnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraisiLCIrYysiKSIpfX19dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiBsLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgbCxuO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLGw9Xy5rKCIjZDN0YXJnZXQiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLCJhbmltYXRlLWdyYWRpZW50IikuYXR0cigieDEiLCIwJSIpLmF0dHIoInkxIiwiMCUiKS5hdHRyKCJ4MiIsIjEwMCUiKS5hdHRyKCJ5MiIsIjAiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJyZWZsZWN0Iiksbj1bIiMwMDFhZmQiLCIjNmI2N2ZjIiwiIzUzOTBlMyIsIiMzNTZjYzYiLCIjNTM5MGUzIiwiIzZiNjdmYyIsIiMwMDFhZmQiXSxsLnNlbGVjdEFsbCgiLnN0b3AiKS5kYXRhKG4pLmVudGVyKCkuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixmdW5jdGlvbihsLGEpe3JldHVybiBhLyhuLmxlbmd0aC0xKX0pLmF0dHIoInN0b3AtY29sb3IiLGZ1bmN0aW9uKGwpe3JldHVybiBsfSksbC5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDEiKS5hdHRyKCJ2YWx1ZXMiLCIwJTsxMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSxsLmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MiIpLmF0dHIoInZhbHVlcyIsIjEwMCU7MjAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIiksZnVuY3Rpb24obCl7dmFyIG49MTgwL01hdGguUEksYT1fLmkoNTApLm1hcChmdW5jdGlvbigpe3ZhciBsPTE1MCpNYXRoLnJhbmRvbSgpLG49MTUwKk1hdGgucmFuZG9tKCk7cmV0dXJue3Z4OjIqTWF0aC5yYW5kb20oKS0xLHZ5OjIqTWF0aC5yYW5kb20oKS0xLHBhdGg6Xy5pKDEyKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bbCxuXX0pLGNvdW50OjB9fSksdD1fLmsoIiNiYWN0ZXJpYWNvbnRhaW5lciIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoImciKSxlPXQuYXBwZW5kKCJlbGxpcHNlIikuYXR0cigicngiLDIpLmF0dHIoInJ5IiwzKTt0LmFwcGVuZCgicGF0aCIpLmRhdHVtKGZ1bmN0aW9uKGwpe3JldHVybiBsLnBhdGguc2xpY2UoMCwzKX0pLmF0dHIoImNsYXNzIiwibWlkIiksdC5hcHBlbmQoInBhdGgiKS5kYXR1bShmdW5jdGlvbihsKXtyZXR1cm4gbC5wYXRofSkuYXR0cigiY2xhc3MiLCJ0YWlsIik7dmFyIHU9dC5zZWxlY3RBbGwoInBhdGgiKTtmdW5jdGlvbiByKGwpe3JldHVybiJ0cmFuc2xhdGUoIitsLnBhdGhbMF0rIilyb3RhdGUoIitNYXRoLmF0YW4yKGwudnksbC52eCkqbisiKSJ9ZnVuY3Rpb24gbyhsKXtyZXR1cm4iTSIrbC5qb2luKCJMIil9Xy5tKGZ1bmN0aW9uKCl7Zm9yKHZhciBsPS0xOysrbDw1MDspe3ZhciBuPWFbbF0sdD1uLnBhdGgsaT1uLnZ4LGM9bi52eSxzPXRbMF1bMF0rPWksZD10WzBdWzFdKz1jO01hdGguc3FydChpKmkrYypjKSwoczwwfHxzPjE1MCkmJihuLnZ4Kj0tMSksKGQ8MHx8ZD4xNTApJiYobi52eSo9LTEpfWUuYXR0cigidHJhbnNmb3JtIixyKSx1LmF0dHIoImQiLG8pfSl9KCk7dmFyIGE9e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTthLnZhbHVlQ291bnRVcD0hMCxhLmNpcmNsZVRoaWNrbmVzcz0uMTUsYS5jaXJjbGVDb2xvcj0iIzgwODAxNSIsYS50ZXh0Q29sb3I9IiM1NTU1MDAiLGEud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsYS53YXZlQ29sb3I9IiNBQUFBMzkiLGEudGV4dFZlcnRQb3NpdGlvbj0uOCxhLndhdmVBbmltYXRlVGltZT0xZTMsYS53YXZlSGVpZ2h0PS4wNSxhLndhdmVBbmltYXRlPSEwLGEud2F2ZVJpc2U9ITEsYS53YXZlSGVpZ2h0U2NhbGluZz0hMSxhLndhdmVPZmZzZXQ9LjI1LGEudGV4dFNpemU9LjUsYS53YXZlQ291bnQ9MyxhLmRpc3BsYXlQZXJjZW50PSEwLGEubWluVmFsdWU9MCxhLm1heFZhbHVlPTYwMCxhLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciB0PWYoIiNkM2lucHV0Z2F1Z2UiLDIyMCxhKTtPYmplY3QoZy5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbihsKXtyZXR1cm4gdC51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciBlPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07ZS52YWx1ZUNvdW50VXA9ITAsZS5jaXJjbGVUaGlja25lc3M9LjE1LGUuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLGUudGV4dENvbG9yPSIjNTU1NTAwIixlLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLGUud2F2ZUNvbG9yPSIjQUFBQTM5IixlLnRleHRWZXJ0UG9zaXRpb249LjgsZS53YXZlQW5pbWF0ZVRpbWU9MWUzLGUud2F2ZUhlaWdodD0uMDUsZS53YXZlQW5pbWF0ZT0hMCxlLndhdmVSaXNlPSExLGUud2F2ZUhlaWdodFNjYWxpbmc9ITEsZS53YXZlT2Zmc2V0PS4yNSxlLnRleHRTaXplPS41LGUud2F2ZUNvdW50PTMsZS5kaXNwbGF5UGVyY2VudD0hMCxlLm1pblZhbHVlPTAsZS5tYXhWYWx1ZT02MDAsZS5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgdSxyLG8saSxjLHMsZCxwLG0saD1mKCIjZDNvdXRnYXVnZSIsNDUsZSk7T2JqZWN0KGcuYSkoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24obCl7cmV0dXJuIGgudXBkYXRlKE1hdGguZmxvb3IoNDAqTWF0aC5yYW5kb20oKSkrNTApfSksbz1fLmsoIiNkM2JpbW9kYWwiKSxpPV8uaigpLmRvbWFpbihbMzAsMTEwXSkucmFuZ2UoWzQwLDI3MF0pLGM9Xy5qKCkuZG9tYWluKFswLC4xXSkucmFuZ2UoWzE1MCwyMF0pLGQ9KHM9Wzc5LDU0LDc0LDYyLDg1LDU1LDg4LDg1LDUxLDg1LDU0LDg0LDc4LDQ3LDgzLDUyLDYyLDg0LDUyLDc5LDUxLDQ3LDc4LDY5LDc0LDgzLDU1LDc2LDc4LDc5LDczLDc3LDY2LDgwLDc0LDUyLDQ4LDgwLDU5LDkwLDgwLDU4LDg0LDU4LDczLDgzLDY0LDUzLDgyLDU5LDc1LDkwLDU0LDgwLDU0LDgzLDcxLDY0LDc3LDgxLDU5LDg0LDQ4LDgyLDYwLDkyLDc4LDc4LDY1LDczLDgyLDU2LDc5LDcxLDYyLDc2LDYwLDc4LDc2LDgzLDc1LDgyLDcwLDY1LDczLDg4LDc2LDgwLDQ4LDg2LDYwLDkwLDUwLDc4LDYzLDcyLDg0LDc1LDUxLDgyLDYyLDg4LDQ5LDgzLDgxLDQ3LDg0LDUyLDg2LDgxLDc1LDU5LDg5LDc5LDU5LDgxLDUwLDg1LDU5LDg3LDUzLDY5LDc3LDU2LDg4LDgxLDQ1LDgyLDU1LDkwLDQ1LDgzLDU2LDg5LDQ2LDgyLDUxLDg2LDUzLDc5LDgxLDYwLDgyLDc3LDc2LDU5LDgwLDQ5LDk2LDUzLDc3LDc3LDY1LDgxLDcxLDcwLDgxLDkzLDUzLDg5LDQ1LDg2LDU4LDc4LDY2LDc2LDYzLDg4LDUyLDkzLDQ5LDU3LDc3LDY4LDgxLDgxLDczLDUwLDg1LDc0LDU1LDc3LDgzLDgzLDUxLDc4LDg0LDQ2LDgzLDU1LDgxLDU3LDc2LDg0LDc3LDgxLDg3LDc3LDUxLDc4LDYwLDgyLDkxLDUzLDc4LDQ2LDc3LDg0LDQ5LDgzLDcxLDgwLDQ5LDc1LDY0LDc2LDUzLDk0LDU1LDc2LDUwLDgyLDU0LDc1LDc4LDc5LDc4LDc4LDcwLDc5LDcwLDU0LDg2LDUwLDkwLDU0LDU0LDc3LDc5LDY0LDc1LDQ3LDg2LDYzLDg1LDgyLDU3LDgyLDY3LDc0LDU0LDgzLDczLDczLDg4LDgwLDcxLDgzLDU2LDc5LDc4LDg0LDU4LDgzLDQzLDYwLDc1LDgxLDQ2LDkwLDQ2LDc0XSkubGVuZ3RoLHA9Xy5lKCkuZG9tYWluKGkuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKHMpLG09KHU9ZnVuY3Rpb24obCl7cmV0dXJuIE1hdGguYWJzKGwvPTcpPD0xPy43NSooMS1sKmwpLzc6MH0scj1pLnRpY2tzKDQwKSxmdW5jdGlvbihsKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW24sXy5oKGwsZnVuY3Rpb24obCl7cmV0dXJuIHUobi1sKX0pXX0pfSkocyksby5pbnNlcnQoImciLCIqIikuYXR0cigiZmlsbCIsIiNiYmIiKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHApLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24obCl7cmV0dXJuIGkobC54MCkrMX0pLmF0dHIoInkiLGZ1bmN0aW9uKGwpe3JldHVybiBjKGwubGVuZ3RoL2QpfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKGwpe3JldHVybiBpKGwueDEpLWkobC54MCktMX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24obCl7cmV0dXJuIGMoMCktYyhsLmxlbmd0aC9kKX0pLG8uYXBwZW5kKCJwYXRoIikuZGF0dW0obSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigiZCIsXy5nKCkuY3VydmUoXy5jKS54KGZ1bmN0aW9uKGwpe3JldHVybiBpKGxbMF0pfSkueShmdW5jdGlvbihsKXtyZXR1cm4gYyhsWzFdKX0pKX0sbH0oKSx2PXQuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siLmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gayhsKXtyZXR1cm4gdC5pYigwLFsobCgpKCksdC5PYSgwLDAsbnVsbCxudWxsLDUyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMSwwLG51bGwsbnVsbCw1LCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMiwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAjNjIwMDNjOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiTWV0aG90ciJdKSksKGwoKSgpLHQuT2EoNCwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAgcmVkOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiRXhpdCJdKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIiA6IENsZWFuaW5nIGhvc3BpdGFsIGVmZmx1ZW50IHNpbmNlIDIwMTgiXSkpLChsKCkoKSx0Lk9hKDcsMCxudWxsLG51bGwsNDUsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLG0uZCxtLmEpKSx0Lk5hKDgsNDkxNTIsbnVsbCwwLGguYSxbXSxudWxsLG51bGwpLChsKCkoKSx0Lk9hKDksMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxtLmMsbS5iKSksdC5OYSgxMCw0OTE1MixudWxsLDAsaC5jLFtdLG51bGwsbnVsbCksKGwoKSgpLHQuT2EoMTEsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSgxMiwxNjM4NCxudWxsLDAsaC5lLFtdLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIiBPdXIgUHJvamVjdCAiXSkpLChsKCkoKSx0Lk9hKDE0LDAsbnVsbCwwLDM4LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSx0Lk5hKDE1LDE2Mzg0LG51bGwsMCxoLmIsW10sbnVsbCxudWxsKSwobCgpKCksdC5PYSgxNiwwLG51bGwsbnVsbCwzNiwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgxNywwLG51bGwsbnVsbCwyMCwiZGl2IixbWyJpZCIsImQzY29udGFpbmVyIl0sWyJzdHlsZSIsIm1hcmdpbjogYXV0bzsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMTgsMCxudWxsLG51bGwsMTksIjpzdmc6c3ZnIixbWyJoZWlnaHQiLCI1MDAiXSxbImlkIiwiZDN0YXJnZXQiXSxbInN0eWxlIiwiZGlzcGxheTogYmxvY2s7bWFyZ2luOiBhdXRvOyJdLFsid2lkdGgiLCI2NzQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMTksMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgyMCwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC01KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiSG9zcGl0YWwgZWZmbHVlbnRzIl0pKSwobCgpKCksdC5PYSgyMiwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNpbnB1dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnBvbHlnb24iLFtbInBvaW50cyIsIjUsMjcwIDI1MCwyNzAgMjUwLDIwMCA0MDAsMjAwIDQwMCwyNzAgNjUwLDI3MCA2NTAsMzIwIDQwMCwzMjAgNDAwLDM1MCAyNTAsMzUwIDI1MCwzMjAgNSwzMjAiXSxbInN0eWxlIiwiZmlsbDogdXJsKCcjYW5pbWF0ZS1ncmFkaWVudCcpO3N0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgyNCwwLG51bGwsbnVsbCwxLCI6c3ZnOmciLFtbImlkIiwiYmFjdGVyaWFjb250YWluZXIiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyNTAsMjAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0Lk9hKDI2LDAsbnVsbCxudWxsLDAsIjpzdmc6bGluZSIsW1sic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjMDAwMDAwZmY7IHN0cm9rZS1kYXNoYXJyYXk6IDIsMjsgc3Ryb2tlLXdpZHRoOiAycHg7Il0sWyJ4MSIsIjI1MCJdLFsieDIiLCIyNTAiXSxbInkxIiwiMjcwIl0sWyJ5MiIsIjMyMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgyNywwLG51bGwsbnVsbCwwLCI6c3ZnOmxpbmUiLFtbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzAwMDAwMGZmOyBzdHJva2UtZGFzaGFycmF5OiAyLDI7IHN0cm9rZS13aWR0aDogMnB4OyJdLFsieDEiLCI0MDAiXSxbIngyIiwiNDAwIl0sWyJ5MSIsIjI3MCJdLFsieTIiLCIzMjAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMjgsMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNDcwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwobCgpKCksdC5PYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0LmdiKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKGwoKSgpLHQuT2EoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLChsKCkoKSx0Lk9hKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMzgsMCxudWxsLG51bGwsMTQsImRpdiIsW1sic3R5bGUiLCJwYWRkaW5nOiAxMHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiIE91ciBwcm9qZWN0IGlzIGEgZ2VuZXJhbC1wdXJwb3NlIGJhY3RlcmlhbCBwbGF0Zm9ybSBmb3IgZHJ1ZyBkZWdyYWRhdGlvbi4gQXMgYSBwcm9vZiBvZiBjb25jZXB0LCB3ZSBoYXZlIGNob3NlbiB0byBmb2N1cyBvbiB0aGUgY3l0b3RveGljIGRydWdzIHVzZWQgaW4gdGhlIHRyZWF0bWVudCBvZiBjYW5jZXIsIGFzIHRoZWlyIGNvbmNlbnRyYXRpb25zIGFyZSBhbGFybWluZ2x5IGhpZ2ggaW4gaG9zcGl0YWwgd2FzdGV3YXRlciBlZmZsdWVudHMuIFRocm91Z2ggYSB0b29sa2l0IG9mIGJyb2FkLSBhbmQgbmFycm93LXNwZWN0cnVtIGVuenltZXMsIHdlIGFpbSB0byBhY2hpZXZlIGNsZWFyYW5jZSBvZiB0aGUgbWFpbiBjaGVtb3RoZXJhcGV1dGljIGFnZW50cywgbGlrZSBtZXRob3RyZXhhdGUsIDUtZmx1b3JvdXJhY2lsIG9yIGRveG9ydWJpY2luLiAiXSkpLChsKCkoKSx0Lk9hKDQwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSg0MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbJyBXZSBhcmUgdGFraW5nIG9uIHRocmVlIG1haW4gY2hhbGxlbmdlcyA6IGVmZmljaWVudCBlbnRyeSBvZiB0aGVzZSBtb2xlY3VsZXMgaW4gdGhlIGJhY3RlcmlhbCBjZWxsLCB0aHJvdWdoIGNoYW5uZWxzIGFuZCB0cmFuc3BvcnRlcnMgKHVyYWNpbC1saWtlIHRyYW5zcG9ydGVyIHVyYUEsIGNyeXB0aWMgZm9sYXRlLWFuYWxvZ3VlIHRyYW5zcG9ydGVyIGFiZ1QgLi4uKSwgcHJvcGVyIGRlZ3JhZGF0aW9uIHRocm91Z2ggbWV0YWJvbGl6aW5nIGVuenltZXMgKGNhcmJveHlwZXB0aWRhc2UgRzIsIGN5dG9jaHJvbWUgUDQ1MCBcdTIwMjYpLCBhbmQgbG9uZyB0ZXJtIG9wZXJhdGlvbiBvZiB0aGUgYmlvcmVhY3RvciB0aG91Z2ggYSBiaXN0YWJsZSwgInN0ZW0tY2VsbCBsaWtlIiwgcG9wdWxhdGlvbiBvZiBiYWN0ZXJpYSwgYWxsZXZpYXRpbmcgdGhlIG5lZWQgZm9yIHJlZ3VsYXIgcmVzZWVkaW5nIHdpdGggZnJlc2ggY2xvbmVzLiAnXSkpLChsKCkoKSx0Lk9hKDQzLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSg0NCwwLG51bGwsbnVsbCwxLCJoMyIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIlByb2plY3Qgc2lnbmlmaWNhbmNlIl0pKSwobCgpKCksdC5nYigtMSxudWxsLFsiIFBoYXJtYWNldXRpY2FsIGRydWdzIGFyZSBhIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHNvdXJjZSBvZiBwb2xsdXRpb24gOiBzZWxlY3RlZCB0byBiZSBiaW9sb2dpY2FsbHkgYWN0aXZlIGF0IGxvdyBjb25jZW50cmF0aW9uICYgZGVzaWduZWQgdG8gcmVzaXN0IGJpb2RlZ3JhZGF0aW9uLCBkcnVncyBjb25zdGl0dXRlIGEgY2xhc3Mgb2YgaGlnaCByZW1hbmVuY2UgcG9sbHV0YW50cyByb3V0aW5lbHkgZm91bmQgaW4gdGhlIGVudmlyb25tZW50LCBldmVuIGluIG91ciBkcmlua2luZyB3YXRlci4gIl0pKSwobCgpKCksdC5PYSg0NywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoNDgsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0LmdiKC0xLG51bGwsWyIgVGhvdWdoIHBoeXNpY2FsICYgY2hlbWljYWwgc29sdXRpb25zIGV4aXN0LCBpbiB0aGUgZm9ybSBvZiBvem9uZSBhbmQgVVYgdHJlYXRtZW50LCBvdXIgc29sdXRpb24gY2FuIG9mZmVyIHRoZSBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeSBvZiBhIGJpb3JlYWN0b3ItYmFzZWQgYXBwcm9hY2guICJdKSksKGwoKSgpLHQuT2EoNTAsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0Lk9hKDUxLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsnIE91ciAic3RlbS1jZWxsIGxpa2UiIGFwcHJvYWNoIHRvIGJhY3RlcmlhbCBwb3B1bGF0aW9uIG1ha2VzIGl0IGFuIG9wdGlvbiB3aXRoIHBvdGVudGlhbGx5IGxvd2VyIG9uZ29pbmcgY29zdHMsIGFuZCBvdXIgZGVncmFkYXRpb24gZW56eW1lcyBhbGxvdyB0YXJnZXRlZCBkZWdyYWRhdGlvbiBvZiBwYXJ0aWN1bGFybHkgcmVzaWxpZW50IG1vbGVjdWxlcyA6IGJvdGggd2Vha25lc3NlcyBvZiBjb252ZW50aW9uYWwgbWV0aG9kcyBvZiB3YXN0ZXdhdGVyIHRyZWF0bWVudC4gJ10pKV0sbnVsbCxudWxsKX12YXIgeD10LkthKCJkYXNoYm9hcmQiLGIsZnVuY3Rpb24obCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCwxLCJkYXNoYm9hcmQiLFtdLG51bGwsbnVsbCxudWxsLGssdikpLHQuTmEoMSwxMDk3NzI4LG51bGwsMCxiLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKSx3PWEoImpsWm0iKSxPPWEoIkF5SnEiKSx5PWEoIllsYlEiKSxQPWEoImxMQVAiKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksTT10Lk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFcobCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCwzNSwiZGl2IixbWyJpZCIsImdjb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIlNpdGUgbWFwcyJdKSksKGwoKSgpLHQuT2EoMywwLG51bGwsbnVsbCwzMiwibWF0LWFjY29yZGlvbiIsW1siY2xhc3MiLCJtYXQtYWNjb3JkaW9uIl0sWyJtdWx0aSIsInRydWUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSg0LDE2Mzg0LG51bGwsMCx3LmEsW10se211bHRpOlswLCJtdWx0aSJdfSxudWxsKSwobCgpKCksdC5PYSg1LDE2Nzc3MjE2LG51bGwsbnVsbCwxNCwibWF0LWV4cGFuc2lvbi1wYW5lbCIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsIl1dLFtbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbMiwibWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nIixudWxsXV0sbnVsbCxudWxsLE8uZCxPLmEpKSx0Lk5hKDYsMTc1MzA4OCxudWxsLDEsdy5jLFtbMyx3LmFdLHQuaCx5LmIsdC5OXSxudWxsLG51bGwpLHQuZWIoMzM1NTQ0MzIwLDEse19sYXp5Q29udGVudDowfSksdC5kYigyNTYsbnVsbCx3LmEsdm9pZCAwLFtdKSwobCgpKCksdC5PYSg5LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgZT0hMDtyZXR1cm4iY2xpY2siPT09biYmKGU9ITEhPT10LllhKGwsMTApLl90b2dnbGUoKSYmZSksImtleWRvd24iPT09biYmKGU9ITEhPT10LllhKGwsMTApLl9rZXlkb3duKGEpJiZlKSxlfSxPLmMsTy5iKSksdC5OYSgxMCwxODAyMjQsbnVsbCwwLHcuZSxbdy5jLHQuayxQLmIsdC5oXSxudWxsLG51bGwpLHQuYmIoMTEse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSx0LmJiKDEyLHt2YWx1ZTowLHBhcmFtczoxfSksKGwoKSgpLHQuT2EoMTMsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHQuTmEoMTQsMTYzODQsbnVsbCwwLHcuZixbXSxudWxsLG51bGwpLChsKCkoKSx0LmdiKC0xLG51bGwsWyIgUHJvamVjdCBkZXNpZ24gIl0pKSwobCgpKCksdC5PYSgxNiwwLG51bGwsMSwyLCJtYXQtcGFuZWwtZGVzY3JpcHRpb24iLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSgxNywxNjM4NCxudWxsLDAsdy5kLFtdLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIiBUaGVvcmV0aWNhbCB1bmRlcnBpbm5pbmcgb2Ygb3VyIHByb2plY3QgIl0pKSwobCgpKCksdC5nYigtMSwxLFsiIEFBQUFBQUFBQUFBYSAiXSkpLChsKCkoKSx0Lk9hKDIwLDE2Nzc3MjE2LG51bGwsbnVsbCwxNSwibWF0LWV4cGFuc2lvbi1wYW5lbCIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsIl1dLFtbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbMiwibWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nIixudWxsXV0sbnVsbCxudWxsLE8uZCxPLmEpKSx0Lk5hKDIxLDE3NTMwODgsbnVsbCwxLHcuYyxbWzMsdy5hXSx0LmgseS5iLHQuTl0sbnVsbCxudWxsKSx0LmViKDMzNTU0NDMyMCwyLHtfbGF6eUNvbnRlbnQ6MH0pLHQuZGIoMjU2LG51bGwsdy5hLHZvaWQgMCxbXSksKGwoKSgpLHQuT2EoMjQsMCxudWxsLDAsOSwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiXSxbInJvbGUiLCJidXR0b24iXV0sW1sxLCJpZCIsMF0sWzEsInRhYmluZGV4IiwwXSxbMSwiYXJpYS1jb250cm9scyIsMF0sWzEsImFyaWEtZXhwYW5kZWQiLDBdLFsxLCJhcmlhLWRpc2FibGVkIiwwXSxbMiwibWF0LWV4cGFuZGVkIixudWxsXSxbNDAsIkBleHBhbnNpb25IZWlnaHQiLDBdXSxbW251bGwsImNsaWNrIl0sW251bGwsImtleWRvd24iXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJjbGljayI9PT1uJiYoZT0hMSE9PXQuWWEobCwyNSkuX3RvZ2dsZSgpJiZlKSwia2V5ZG93biI9PT1uJiYoZT0hMSE9PXQuWWEobCwyNSkuX2tleWRvd24oYSkmJmUpLGV9LE8uYyxPLmIpKSx0Lk5hKDI1LDE4MDIyNCxudWxsLDAsdy5lLFt3LmMsdC5rLFAuYix0LmhdLG51bGwsbnVsbCksdC5iYigyNix7Y29sbGFwc2VkSGVpZ2h0OjAsZXhwYW5kZWRIZWlnaHQ6MX0pLHQuYmIoMjcse3ZhbHVlOjAscGFyYW1zOjF9KSwobCgpKCksdC5PYSgyOCwwLG51bGwsMCwyLCJtYXQtcGFuZWwtdGl0bGUiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSgyOSwxNjM4NCxudWxsLDAsdy5mLFtdLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIiBNYXRlcmlhbCBhbmQgbWV0aG9kICJdKSksKGwoKSgpLHQuT2EoMzEsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHQuTmEoMzIsMTYzODQsbnVsbCwwLHcuZCxbXSxudWxsLG51bGwpLChsKCkoKSx0LmdiKC0xLG51bGwsWyIgT3VyIGV4cGVyaW1lbnRhbCBkZXNpZ25zICYgcmVzdWx0cyAiXSkpLChsKCkoKSx0Lk9hKDM0LDAsbnVsbCwxLDEsInAiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0LmdiKC0xLG51bGwsWyJJJ20gdmlzaWJsZSBiZWNhdXNlIEkgYW0gb3BlbiJdKSldLGZ1bmN0aW9uKGwsbil7bChuLDQsMCwidHJ1ZSIpfSxmdW5jdGlvbihsLG4pe2wobiw1LDAsdC5ZYShuLDYpLmV4cGFuZGVkLHQuWWEobiw2KS5faGFzU3BhY2luZygpKSxsKG4sOSwwLHQuWWEobiwxMCkucGFuZWwuX2hlYWRlcklkLHQuWWEobiwxMCkucGFuZWwuZGlzYWJsZWQ/LTE6MCx0LllhKG4sMTApLl9nZXRQYW5lbElkKCksdC5ZYShuLDEwKS5faXNFeHBhbmRlZCgpLHQuWWEobiwxMCkucGFuZWwuZGlzYWJsZWQsdC5ZYShuLDEwKS5faXNFeHBhbmRlZCgpLGwobiwxMiwwLHQuWWEobiwxMCkuX2dldEV4cGFuZGVkU3RhdGUoKSxsKG4sMTEsMCx0LllhKG4sMTApLmNvbGxhcHNlZEhlaWdodCx0LllhKG4sMTApLmV4cGFuZGVkSGVpZ2h0KSkpLGwobiwyMCwwLHQuWWEobiwyMSkuZXhwYW5kZWQsdC5ZYShuLDIxKS5faGFzU3BhY2luZygpKSxsKG4sMjQsMCx0LllhKG4sMjUpLnBhbmVsLl9oZWFkZXJJZCx0LllhKG4sMjUpLnBhbmVsLmRpc2FibGVkPy0xOjAsdC5ZYShuLDI1KS5fZ2V0UGFuZWxJZCgpLHQuWWEobiwyNSkuX2lzRXhwYW5kZWQoKSx0LllhKG4sMjUpLnBhbmVsLmRpc2FibGVkLHQuWWEobiwyNSkuX2lzRXhwYW5kZWQoKSxsKG4sMjcsMCx0LllhKG4sMjUpLl9nZXRFeHBhbmRlZFN0YXRlKCksbChuLDI2LDAsdC5ZYShuLDI1KS5jb2xsYXBzZWRIZWlnaHQsdC5ZYShuLDI1KS5leHBhbmRlZEhlaWdodCkpKX0pfXZhciBZPXQuS2EoImFwcC1zaXRlbWFwIixDLGZ1bmN0aW9uKGwpe3JldHVybiB0LmliKDAsWyhsKCkoKSx0Lk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLXNpdGVtYXAiLFtdLG51bGwsbnVsbCxudWxsLFcsTSkpLHQuTmEoMSwxMTQ2ODgsbnVsbCwwLEMsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obCxuKXtsKG4sMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksQT10Lk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gTihsKXtyZXR1cm4gdC5pYigwLFsobCgpKCksdC5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiUHJvamVjdCBkZXRhaWxzIl0pKSwobCgpKCksdC5PYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLG0uZCxtLmEpKSx0Lk5hKDQsNDkxNTIsbnVsbCwwLGguYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBJPXQuS2EoImFwcC1wcm9qZWN0LWRldGFpbHMiLEwsZnVuY3Rpb24obCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtcHJvamVjdC1kZXRhaWxzIixbXSxudWxsLG51bGwsbnVsbCxOLEEpKSx0Lk5hKDEsMTE0Njg4LG51bGwsMCxMLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGwoKXt9cmV0dXJuIGwucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxsfSgpLFQ9dC5NYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFIobCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIkJpb2xvZ3kiXSkpLChsKCkoKSx0Lk9hKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsbS5kLG0uYSkpLHQuTmEoNCw0OTE1MixudWxsLDAsaC5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIFM9dC5LYSgiYXBwLWJpb2xvZ3ktc2VjdGlvbiIsRSxmdW5jdGlvbihsKXtyZXR1cm4gdC5pYigwLFsobCgpKCksdC5PYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFIsVCkpLHQuTmEoMSwxMTQ2ODgsbnVsbCwwLEUsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obCxuKXtsKG4sMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksRj10Lk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gaihsKXtyZXR1cm4gdC5pYigwLFsobCgpKCksdC5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiTW9kZWxpbmcgJiBTb2Z0d2FyZSJdKSksKGwoKSgpLHQuT2EoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxtLmQsbS5hKSksdC5OYSg0LDQ5MTUyLG51bGwsMCxoLmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgVT10LkthKCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLEQsZnVuY3Rpb24obCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtY29tcHV0aW5nLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLGosRikpLHQuTmEoMSwxMTQ2ODgsbnVsbCwwLEQsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obCxuKXtsKG4sMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbCgpe31yZXR1cm4gbC5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LGx9KCksSz10Lk1hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gVihsKXtyZXR1cm4gdC5pYigwLFsobCgpKCksdC5PYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5PYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiSHVtYW4gUHJhY3RpY2VzIl0pKSwobCgpKCksdC5PYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLG0uZCxtLmEpKSx0Lk5hKDQsNDkxNTIsbnVsbCwwLGguYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBIPXQuS2EoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixCLGZ1bmN0aW9uKGwpe3JldHVybiB0LmliKDAsWyhsKCkoKSx0Lk9hKDAsMCxudWxsLG51bGwsMSwiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFYsSykpLHQuTmEoMSwxMTQ2ODgsbnVsbCwwLEIsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obCxuKXtsKG4sMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxxPWEoIkZiTjkiKSx6PWEoIjhtTXIiKSxHPWEoImRXWmciKSxaPWEoImJ1anQiKSxKPWEoIlVvZEgiKSxYPWEoIndGdzEiKSxRPWEoIk1yK1giKSwkPWEoIlNNc20iKSxsbD1hKCJjNFdtIiksbmw9YSgiTnNoNSIpLGFsPWEoIkZ6cWMiKSx0bD1hKCI2VU14IiksZWw9YSgiMC9RNiIpLHVsPWEoIlpZQ2kiKSxybD1hKCIyMUxiIiksb2w9YSgiT3pmQiIpLGlsPXQuTWEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siYm9keVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjJlbX0uZmlsbC10b29sYmFyLXNwYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSBhdXRvfS5zaWRlbmF2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnNpZGVuYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwMHB4O2JveC1zaGFkb3c6M3B4IDAgNnB4IHJnYmEoMCwwLDAsLjI0KX0jc2l0ZW1hcGJ1dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX1tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9I3NpZGVuYXZmbGV4Y29udGVudFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMDBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIGNsKGwpe3JldHVybiB0LmliKDAsWyhsKCkoKSx0Lk9hKDAsMCxudWxsLG51bGwsMTMyLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0Lk9hKDEsMCxudWxsLG51bGwsMTksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLHEuYixxLmEpKSx0Lk5hKDIsNDI0MzQ1NixudWxsLDEsei5hLFt0LmssRy5hLHUuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSx0LmViKDYwMzk3OTc3NiwxLHtfdG9vbGJhclJvd3M6MX0pLChsKCkoKSx0Lk9hKDQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIHQ9ITA7cmV0dXJuImNsaWNrIj09PW4mJih0PSExIT09bC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmdCksdH0sWi5iLFouYSkpLHQuTmEoNSwxODAyMjQsbnVsbCwwLEouYixbdC5rLEcuYSxQLmIsWzIsWC5hXV0sbnVsbCxudWxsKSwobCgpKCksdC5PYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLFEuYixRLmEpKSx0Lk5hKDcsNjM4OTc2LG51bGwsMCwkLmEsW3QuaywkLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsMCxbIm1lbnUiXSkpLChsKCkoKSx0Lk9hKDksMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMTAsMCxudWxsLDAsMSwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobCgpKCksdC5nYigtMSxudWxsLFsiTWV0aG90ciJdKSksKGwoKSgpLHQuT2EoMTIsMCxudWxsLDAsMSwiZGl2IixbWyJzdHlsZSIsImNvbG9yOiAgI2VjZTBlODsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIkV4aXQiXSkpLChsKCkoKSx0Lk9hKDE0LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMTUsMCxudWxsLDAsMCwiaW1nIixbWyJzcmMiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy9jL2MwL1QtLUdPX1BhcmlzLVNhY2xheS0tZ28tcHMtd2hpdGUucG5nIl0sWyJzdHlsZSIsIm1heC1oZWlnaHQ6MTAwJTsgd2lkdGg6YXV0bzsgcGFkZGluZzoxZW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0Lk9hKDE2LDAsbnVsbCwwLDAsInNwYW4iLFtbInN0eWxlIiwid2lkdGg6MC4yZW0iXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMTcsMCxudWxsLDAsMywic3BhbiIsW1sic3R5bGUiLCJ0ZXh0LWFsaWduOiBjZW50ZXI7bGluZS1oZWlnaHQ6IDg1JTsgZm9udC1zaXplOiBtZWRpdW07Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChsKCkoKSx0LmdiKC0xLG51bGwsWyJUZWFtIEdPIl0pKSwobCgpKCksdC5PYSgxOSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuZ2IoLTEsbnVsbCxbIlBhcmlzU2FjbGF5Il0pKSwobCgpKCksdC5PYSgyMSwwLG51bGwsbnVsbCwxMTEsIm1hdC1zaWRlbmF2LWNvbnRhaW5lciIsW1siY2xhc3MiLCJzaWRlbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLWNvbnRhaW5lciBtYXQtc2lkZW5hdi1jb250YWluZXIiXV0sW1syLCJtYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCIsbnVsbF1dLG51bGwsbnVsbCxsbC5kLGxsLmIpKSx0Lk5hKDIyLDE0OTA5NDQsbnVsbCwyLG5sLmYsW1syLGFsLmJdLHQuayx0LngsdC5oLG5sLmEsWzIsWC5hXV0sbnVsbCxudWxsKSx0LmViKDYwMzk3OTc3NiwyLHtfZHJhd2VyczoxfSksdC5lYigzMzU1NDQzMjAsMyx7X2NvbnRlbnQ6MH0pLChsKCkoKSx0Lk9hKDI1LDAsbnVsbCwwLDk5LCJtYXQtc2lkZW5hdiIsW1siY2xhc3MiLCJzaWRlbmF2IG1hdC1kcmF3ZXIgbWF0LXNpZGVuYXYiXSxbImZpeGVkSW5WaWV3cG9ydCIsInRydWUiXSxbInRhYkluZGV4IiwiLTEiXV0sW1sxLCJyb2xlIiwwXSxbNDAsIkB0cmFuc2Zvcm0iLDBdLFsxLCJhbGlnbiIsMF0sWzIsIm1hdC1kcmF3ZXItZW5kIixudWxsXSxbMiwibWF0LWRyYXdlci1vdmVyIixudWxsXSxbMiwibWF0LWRyYXdlci1wdXNoIixudWxsXSxbMiwibWF0LWRyYXdlci1zaWRlIixudWxsXSxbMiwibWF0LXNpZGVuYXYtZml4ZWQiLG51bGxdLFs0LCJ0b3AiLCJweCJdLFs0LCJib3R0b20iLCJweCJdXSxbWyJjb21wb25lbnQiLCJAdHJhbnNmb3JtLnN0YXJ0Il0sWyJjb21wb25lbnQiLCJAdHJhbnNmb3JtLmRvbmUiXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJjb21wb25lbnQ6QHRyYW5zZm9ybS5zdGFydCI9PT1uJiYoZT0hMSE9PXQuWWEobCwyNikuX29uQW5pbWF0aW9uU3RhcnQoYSkmJmUpLCJjb21wb25lbnQ6QHRyYW5zZm9ybS5kb25lIj09PW4mJihlPSExIT09dC5ZYShsLDI2KS5fb25BbmltYXRpb25FbmQoYSkmJmUpLGV9LGxsLmYsbGwuYSkpLHQuTmEoMjYsMzMyNTk1MixbWzIsNF0sWyJkcmF3ZXIiLDRdXSwwLG5sLmUsW3QuayxQLmMsUC5iLEcuYSx0LngsWzIsdS5kXV0se21vZGU6WzAsIm1vZGUiXSxvcGVuZWQ6WzEsIm9wZW5lZCJdLGZpeGVkSW5WaWV3cG9ydDpbMiwiZml4ZWRJblZpZXdwb3J0Il19LG51bGwpLHQuYWIoMTMxMDcyLHUuYixbdC5oXSksdC5hYigxMzEwNzIsdS5iLFt0LmhdKSwobCgpKCksdC5PYSgyOSwwLG51bGwsMCw5LCJtYXQtdG9vbGJhciIsW1siY2xhc3MiLCJtYXQtdG9vbGJhciJdLFsiY29sb3IiLCJwcmltYXJ5Il0sWyJzdHlsZSIsIm1hcmdpbi10b3A6IDE1cHg7Il1dLFtbMiwibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsbnVsbF0sWzIsIm1hdC10b29sYmFyLXNpbmdsZS1yb3ciLG51bGxdXSxudWxsLG51bGwscS5iLHEuYSkpLHQuTmEoMzAsNDI0MzQ1NixudWxsLDEsei5hLFt0LmssRy5hLHUuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSx0LmViKDYwMzk3OTc3Niw0LHtfdG9vbGJhclJvd3M6MX0pLChsKCkoKSx0LmdiKC0xLDAsWyJOYXZpZ2F0aW9uICJdKSksKGwoKSgpLHQuT2EoMzMsMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKGwoKSgpLHQuT2EoMzQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIHQ9ITA7cmV0dXJuImNsaWNrIj09PW4mJih0PSExIT09bC5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmdCksdH0sWi5iLFouYSkpLHQuTmEoMzUsMTgwMjI0LG51bGwsMCxKLmIsW3QuayxHLmEsUC5iLFsyLFguYV1dLG51bGwsbnVsbCksKGwoKSgpLHQuT2EoMzYsMCxudWxsLDAsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsUS5iLFEuYSkpLHQuTmEoMzcsNjM4OTc2LG51bGwsMCwkLmEsW3QuaywkLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsMCxbImtleWJvYXJkX2Fycm93X2xlZnQiXSkpLChsKCkoKSx0Lk9hKDM5LDAsbnVsbCwwLDg1LCJtYXQtbmF2LWxpc3QiLFtbImNsYXNzIiwibWF0LW5hdi1saXN0Il0sWyJyb2xlIiwibmF2aWdhdGlvbiJdXSxudWxsLG51bGwsbnVsbCx0bC5kLHRsLmIpKSx0Lk5hKDQwLDQ5MTUyLG51bGwsMCxlbC5lLFtdLG51bGwsbnVsbCksKGwoKSgpLHQuT2EoNDEsMCxudWxsLDAsNywiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgZT0hMCx1PWwuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1uJiYoZT0hMSE9PXQuWWEobCw0MikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDQyKS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09biYmKGU9ITEhPT11LnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcoIi9kYXNoYm9hcmQiKSYmZSksZX0sdGwuYyx0bC5hKSksdC5OYSg0MiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsNSx7X2xpbmVzOjF9KSx0LmViKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSwobCgpKCksdC5PYSg0NSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxRLmIsUS5hKSksdC5OYSg0Niw2Mzg5NzYsbnVsbCwwLCQuYSxbdC5rLCQuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksdC5nYigtMSwwLFsiZGFzaGJvYXJkIl0pKSwobCgpKCksdC5nYigtMSwyLFsiIE1haW4gcGFnZSJdKSksKGwoKSgpLHQuT2EoNDksMCxudWxsLDAsNywiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJmb2N1cyJdLFtudWxsLCJibHVyIl1dLGZ1bmN0aW9uKGwsbixhKXt2YXIgZT0hMCx1PWwuY29tcG9uZW50O3JldHVybiJmb2N1cyI9PT1uJiYoZT0hMSE9PXQuWWEobCw1MCkuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDUwKS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09biYmKGU9ITEhPT11LnJvdXRlckxpbmtDaHVua1Byb2Nlc3NpbmcoIi9wcm9qZWN0IikmJmUpLGV9LHRsLmMsdGwuYSkpLHQuTmEoNTAsMTA5NzcyOCxudWxsLDIsZWwuYixbdC5rLFsyLGVsLmVdXSxudWxsLG51bGwpLHQuZWIoNjAzOTc5Nzc2LDcse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsOCx7X2F2YXRhcjowfSksKGwoKSgpLHQuT2EoNTMsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsUS5iLFEuYSkpLHQuTmEoNTQsNjM4OTc2LG51bGwsMCwkLmEsW3QuaywkLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsMCxbImFzc2Vzc21lbnQiXSkpLChsKCkoKSx0LmdiKC0xLDIsWyIgUHJvamVjdCBkZXRhaWxzIl0pKSwobCgpKCksdC5PYSg1NywwLG51bGwsMCw3LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbIm1hdC1saXN0LWl0ZW0iLCIiXV0sW1syLCJtYXQtbGlzdC1pdGVtLWF2YXRhciIsbnVsbF0sWzIsIm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwLHU9bC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PW4mJihlPSExIT09dC5ZYShsLDU4KS5faGFuZGxlRm9jdXMoKSYmZSksImJsdXIiPT09biYmKGU9ITEhPT10LllhKGwsNTgpLl9oYW5kbGVCbHVyKCkmJmUpLCJjbGljayI9PT1uJiYoZT0hMSE9PXUucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZygiL2Jpb2xvZ3kiKSYmZSksZX0sdGwuYyx0bC5hKSksdC5OYSg1OCwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsOSx7X2xpbmVzOjF9KSx0LmViKDMzNTU0NDMyMCwxMCx7X2F2YXRhcjowfSksKGwoKSgpLHQuT2EoNjEsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsUS5iLFEuYSkpLHQuTmEoNjIsNjM4OTc2LG51bGwsMCwkLmEsW3QuaywkLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsMCxbImJsdXJfY2lyY3VsYXIiXSkpLChsKCkoKSx0LmdiKC0xLDIsWyIgQmlvbG9neSJdKSksKGwoKSgpLHQuT2EoNjUsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImZvY3VzIj09PW4mJihlPSExIT09dC5ZYShsLDY2KS5faGFuZGxlRm9jdXMoKSYmZSksImJsdXIiPT09biYmKGU9ITEhPT10LllhKGwsNjYpLl9oYW5kbGVCbHVyKCkmJmUpLCJjbGljayI9PT1uJiYoZT0hMSE9PXQuWWEobCw2OSkub25DbGljayhhLmJ1dHRvbixhLmN0cmxLZXksYS5tZXRhS2V5LGEuc2hpZnRLZXkpJiZlKSxlfSx0bC5jLHRsLmEpKSx0Lk5hKDY2LDEwOTc3MjgsbnVsbCwyLGVsLmIsW3QuayxbMixlbC5lXV0sbnVsbCxudWxsKSx0LmViKDYwMzk3OTc3NiwxMSx7X2xpbmVzOjF9KSx0LmViKDMzNTU0NDMyMCwxMix7X2F2YXRhcjowfSksdC5OYSg2OSw2NzE3NDQsbnVsbCwwLHVsLmwsW3VsLmssdWwuYSx1LmhdLHtyb3V0ZXJMaW5rOlswLCJyb3V0ZXJMaW5rIl19LG51bGwpLHQuWmEoNzAsMSksKGwoKSgpLHQuT2EoNzEsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsUS5iLFEuYSkpLHQuTmEoNzIsNjM4OTc2LG51bGwsMCwkLmEsW3QuaywkLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKGwoKSgpLHQuZ2IoLTEsMCxbIm1lbW9yeSJdKSksKGwoKSgpLHQuZ2IoLTEsMixbIiBDb21wdXRpbmciXSkpLChsKCkoKSx0Lk9hKDc1LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJmb2N1cyI9PT1uJiYoZT0hMSE9PXQuWWEobCw3NikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDc2KS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09biYmKGU9ITEhPT10LllhKGwsNzkpLm9uQ2xpY2soYS5idXR0b24sYS5jdHJsS2V5LGEubWV0YUtleSxhLnNoaWZ0S2V5KSYmZSksZX0sdGwuYyx0bC5hKSksdC5OYSg3NiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsMTMse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsMTQse19hdmF0YXI6MH0pLHQuTmEoNzksNjcxNzQ0LG51bGwsMCx1bC5sLFt1bC5rLHVsLmEsdS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSx0LlphKDgwLDEpLChsKCkoKSx0Lk9hKDgxLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLFEuYixRLmEpKSx0Lk5hKDgyLDYzODk3NixudWxsLDAsJC5hLFt0LmssJC5jLFs4LG51bGxdXSxudWxsLG51bGwpLChsKCkoKSx0LmdiKC0xLDAsWyJhY2Nlc3NpYmlsaXR5X25ldyJdKSksKGwoKSgpLHQuZ2IoLTEsMixbIiBIdW1hbiBQcmFjdGljZXMiXSkpLChsKCkoKSx0Lk9hKDg1LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJmb2N1cyI9PT1uJiYoZT0hMSE9PXQuWWEobCw4NikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDg2KS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09biYmKGU9ITEhPT10LllhKGwsODkpLm9uQ2xpY2soYS5idXR0b24sYS5jdHJsS2V5LGEubWV0YUtleSxhLnNoaWZ0S2V5KSYmZSksZX0sdGwuYyx0bC5hKSksdC5OYSg4NiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsMTUse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsMTYse19hdmF0YXI6MH0pLHQuTmEoODksNjcxNzQ0LG51bGwsMCx1bC5sLFt1bC5rLHVsLmEsdS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSx0LlphKDkwLDEpLChsKCkoKSx0Lk9hKDkxLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLFEuYixRLmEpKSx0Lk5hKDkyLDYzODk3NixudWxsLDAsJC5hLFt0LmssJC5jLFs4LG51bGxdXSxudWxsLG51bGwpLChsKCkoKSx0LmdiKC0xLDAsWyJwZW9wbGUiXSkpLChsKCkoKSx0LmdiKC0xLDIsWyIgT3VyIHRlYW0iXSkpLChsKCkoKSx0Lk9hKDk1LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obCxuLGEpe3ZhciBlPSEwO3JldHVybiJmb2N1cyI9PT1uJiYoZT0hMSE9PXQuWWEobCw5NikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDk2KS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09biYmKGU9ITEhPT10LllhKGwsOTkpLm9uQ2xpY2soYS5idXR0b24sYS5jdHJsS2V5LGEubWV0YUtleSxhLnNoaWZ0S2V5KSYmZSksZX0sdGwuYyx0bC5hKSksdC5OYSg5NiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsMTcse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsMTgse19hdmF0YXI6MH0pLHQuTmEoOTksNjcxNzQ0LG51bGwsMCx1bC5sLFt1bC5rLHVsLmEsdS5oXSx7cm91dGVyTGluazpbMCwicm91dGVyTGluayJdfSxudWxsKSx0LlphKDEwMCwxKSwobCgpKCksdC5PYSgxMDEsMCxudWxsLDIsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsUS5iLFEuYSkpLHQuTmEoMTAyLDYzODk3NixudWxsLDAsJC5hLFt0LmssJC5jLFs4LG51bGxdXSxudWxsLG51bGwpLChsKCkoKSx0LmdiKC0xLDAsWyJmb2xkZXJfc3BlY2lhbCJdKSksKGwoKSgpLHQuZ2IoLTEsMixbIiBTdXBwb3J0Il0pKSwobCgpKCksdC5PYSgxMDUsMCxudWxsLDAsOSwiYSIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtIl0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImZvY3VzIj09PW4mJihlPSExIT09dC5ZYShsLDEwNikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDEwNikuX2hhbmRsZUJsdXIoKSYmZSksImNsaWNrIj09PW4mJihlPSExIT09dC5ZYShsLDEwOSkub25DbGljayhhLmJ1dHRvbixhLmN0cmxLZXksYS5tZXRhS2V5LGEuc2hpZnRLZXkpJiZlKSxlfSx0bC5jLHRsLmEpKSx0Lk5hKDEwNiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsMTkse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsMjAse19hdmF0YXI6MH0pLHQuTmEoMTA5LDY3MTc0NCxudWxsLDAsdWwubCxbdWwuayx1bC5hLHUuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksdC5aYSgxMTAsMSksKGwoKSgpLHQuT2EoMTExLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLFEuYixRLmEpKSx0Lk5hKDExMiw2Mzg5NzYsbnVsbCwwLCQuYSxbdC5rLCQuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksdC5nYigtMSwwLFsiYm9vayJdKSksKGwoKSgpLHQuZ2IoLTEsMixbIkxhYiBOb3RlYm9vayJdKSksKGwoKSgpLHQuT2EoMTE1LDAsbnVsbCwwLDksImEiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbSJdLFsiaWQiLCJzaXRlbWFwYnV0Il0sWyJtYXQtbGlzdC1pdGVtIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMSwidGFyZ2V0IiwwXSxbOCwiaHJlZiIsNF1dLFtbbnVsbCwiZm9jdXMiXSxbbnVsbCwiYmx1ciJdLFtudWxsLCJjbGljayJdXSxmdW5jdGlvbihsLG4sYSl7dmFyIGU9ITA7cmV0dXJuImZvY3VzIj09PW4mJihlPSExIT09dC5ZYShsLDExNikuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PW4mJihlPSExIT09dC5ZYShsLDExNikuX2hhbmRsZUJsdXIoKSYmZSksImNsaWNrIj09PW4mJihlPSExIT09dC5ZYShsLDExOSkub25DbGljayhhLmJ1dHRvbixhLmN0cmxLZXksYS5tZXRhS2V5LGEuc2hpZnRLZXkpJiZlKSxlfSx0bC5jLHRsLmEpKSx0Lk5hKDExNiwxMDk3NzI4LG51bGwsMixlbC5iLFt0LmssWzIsZWwuZV1dLG51bGwsbnVsbCksdC5lYig2MDM5Nzk3NzYsMjEse19saW5lczoxfSksdC5lYigzMzU1NDQzMjAsMjIse19hdmF0YXI6MH0pLHQuTmEoMTE5LDY3MTc0NCxudWxsLDAsdWwubCxbdWwuayx1bC5hLHUuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksdC5aYSgxMjAsMSksKGwoKSgpLHQuT2EoMTIxLDAsbnVsbCwyLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLFEuYixRLmEpKSx0Lk5hKDEyMiw2Mzg5NzYsbnVsbCwwLCQuYSxbdC5rLCQuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwobCgpKCksdC5nYigtMSwwLFsiYXBwcyJdKSksKGwoKSgpLHQuZ2IoLTEsMixbIiBTaXRlIG1hcCJdKSksKGwoKSgpLHQuT2EoMTI1LDAsbnVsbCwxLDcsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXSxbImZ4TGF5b3V0Iiwicm93Il0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsbGwuZSxsbC5jKSksdC5OYSgxMjYsMTA5NzcyOCxbWzMsNF1dLDAsbmwuZyxbdC5oLG5sLmZdLG51bGwsbnVsbCksdC5OYSgxMjcsNzM3MjgwLG51bGwsMCxybC5lLFtvbC5pLHQuayxvbC5tXSx7bGF5b3V0OlswLCJsYXlvdXQiXX0sbnVsbCksdC5OYSgxMjgsNzM3MjgwLG51bGwsMCxybC5kLFtvbC5pLHQuayxbNixybC5lXSxvbC5tXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLChsKCkoKSx0Lk9hKDEyOSwwLG51bGwsMCwzLCJkaXYiLFtbImZ4RmxleCIsIjEgMCA1MDBweCJdLFsiaWQiLCJzaWRlbmF2ZmxleGNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSgxMzAsNzM3MjgwLG51bGwsMCxybC5hLFtvbC5pLHQuayxbMyxybC5lXSxvbC5tLG9sLmddLHtmbGV4OlswLCJmbGV4Il19LG51bGwpLChsKCkoKSx0Lk9hKDEzMSwxNjc3NzIxNixudWxsLG51bGwsMSwicm91dGVyLW91dGxldCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5OYSgxMzIsMjEyOTkyLG51bGwsMCx1bC5uLFt1bC5iLHQuTix0LmosWzgsbnVsbF0sdC5oXSxudWxsLG51bGwpXSxmdW5jdGlvbihsLG4pe3ZhciBhPW4uY29tcG9uZW50O2wobiwyLDAsImFjY2VudCIpLGwobiw3LDApLGwobiwyMiwwKSxsKG4sMjYsMCx0LmhiKG4sMjYsMCx0LllhKG4sMjcpLnRyYW5zZm9ybShhLmlzSGFuZHNldCQpKT8ib3ZlciI6InNpZGUiLGEub3BlbmVkU2lkZU5hdiwidHJ1ZSIpLGwobiwzMCwwLCJwcmltYXJ5IiksbChuLDM3LDApLGwobiw0NiwwKSxsKG4sNTQsMCksbChuLDYyLDApLGwobiw2OSwwLGwobiw3MCwwLCIuLi9jb21wdXRpbmciKSksbChuLDcyLDApLGwobiw3OSwwLGwobiw4MCwwLCIuLi9odW1hbi1wcmFjdGljZXMiKSksbChuLDgyLDApLGwobiw4OSwwLGwobiw5MCwwLCIuLi90ZWFtIikpLGwobiw5MiwwKSxsKG4sOTksMCxsKG4sMTAwLDAsIi4uL3N1cHBvcnQiKSksbChuLDEwMiwwKSxsKG4sMTA5LDAsbChuLDExMCwwLCIuLi9sYWJub3RlYm9vayIpKSxsKG4sMTEyLDApLGwobiwxMTksMCxsKG4sMTIwLDAsIi4uL3NpdGVtYXAiKSksbChuLDEyMiwwKSxsKG4sMTI3LDAsInJvdyIpLGwobiwxMjgsMCwiY2VudGVyIiksbChuLDEzMCwwLCIxIDAgNTAwcHgiKSxsKG4sMTMyLDApfSxmdW5jdGlvbihsLG4pe3ZhciBhPW4uY29tcG9uZW50O2wobiwxLDAsdC5ZYShuLDIpLl90b29sYmFyUm93cy5sZW5ndGgsIXQuWWEobiwyKS5fdG9vbGJhclJvd3MubGVuZ3RoKSxsKG4sNCwwLHQuWWEobiw1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09dC5ZYShuLDUpLl9hbmltYXRpb25Nb2RlKSxsKG4sNiwwLHQuWWEobiw3KS5pbmxpbmUpLGwobiwyMSwwLHQuWWEobiwyMikuX2JhY2tkcm9wT3ZlcnJpZGUpLGwobiwyNSwwLHQuaGIobiwyNSwwLHQuWWEobiwyOCkudHJhbnNmb3JtKGEuaXNIYW5kc2V0JCkpPyJkaWFsb2ciOiJuYXZpZ2F0aW9uIix0LllhKG4sMjYpLl9hbmltYXRpb25TdGF0ZSxudWxsLCJlbmQiPT09dC5ZYShuLDI2KS5wb3NpdGlvbiwib3ZlciI9PT10LllhKG4sMjYpLm1vZGUsInB1c2giPT09dC5ZYShuLDI2KS5tb2RlLCJzaWRlIj09PXQuWWEobiwyNikubW9kZSx0LllhKG4sMjYpLmZpeGVkSW5WaWV3cG9ydCx0LllhKG4sMjYpLmZpeGVkSW5WaWV3cG9ydD90LllhKG4sMjYpLmZpeGVkVG9wR2FwOm51bGwsdC5ZYShuLDI2KS5maXhlZEluVmlld3BvcnQ/dC5ZYShuLDI2KS5maXhlZEJvdHRvbUdhcDpudWxsKSxsKG4sMjksMCx0LllhKG4sMzApLl90b29sYmFyUm93cy5sZW5ndGgsIXQuWWEobiwzMCkuX3Rvb2xiYXJSb3dzLmxlbmd0aCksbChuLDM0LDAsdC5ZYShuLDM1KS5kaXNhYmxlZHx8bnVsbCwiTm9vcEFuaW1hdGlvbnMiPT09dC5ZYShuLDM1KS5fYW5pbWF0aW9uTW9kZSksbChuLDM2LDAsdC5ZYShuLDM3KS5pbmxpbmUpLGwobiw0MSwwLHQuWWEobiw0MikuX2F2YXRhcix0LllhKG4sNDIpLl9hdmF0YXIpLGwobiw0NSwwLHQuWWEobiw0NikuaW5saW5lKSxsKG4sNDksMCx0LllhKG4sNTApLl9hdmF0YXIsdC5ZYShuLDUwKS5fYXZhdGFyKSxsKG4sNTMsMCx0LllhKG4sNTQpLmlubGluZSksbChuLDU3LDAsdC5ZYShuLDU4KS5fYXZhdGFyLHQuWWEobiw1OCkuX2F2YXRhciksbChuLDYxLDAsdC5ZYShuLDYyKS5pbmxpbmUpLGwobiw2NSwwLHQuWWEobiw2NikuX2F2YXRhcix0LllhKG4sNjYpLl9hdmF0YXIsdC5ZYShuLDY5KS50YXJnZXQsdC5ZYShuLDY5KS5ocmVmKSxsKG4sNzEsMCx0LllhKG4sNzIpLmlubGluZSksbChuLDc1LDAsdC5ZYShuLDc2KS5fYXZhdGFyLHQuWWEobiw3NikuX2F2YXRhcix0LllhKG4sNzkpLnRhcmdldCx0LllhKG4sNzkpLmhyZWYpLGwobiw4MSwwLHQuWWEobiw4MikuaW5saW5lKSxsKG4sODUsMCx0LllhKG4sODYpLl9hdmF0YXIsdC5ZYShuLDg2KS5fYXZhdGFyLHQuWWEobiw4OSkudGFyZ2V0LHQuWWEobiw4OSkuaHJlZiksbChuLDkxLDAsdC5ZYShuLDkyKS5pbmxpbmUpLGwobiw5NSwwLHQuWWEobiw5NikuX2F2YXRhcix0LllhKG4sOTYpLl9hdmF0YXIsdC5ZYShuLDk5KS50YXJnZXQsdC5ZYShuLDk5KS5ocmVmKSxsKG4sMTAxLDAsdC5ZYShuLDEwMikuaW5saW5lKSxsKG4sMTA1LDAsdC5ZYShuLDEwNikuX2F2YXRhcix0LllhKG4sMTA2KS5fYXZhdGFyLHQuWWEobiwxMDkpLnRhcmdldCx0LllhKG4sMTA5KS5ocmVmKSxsKG4sMTExLDAsdC5ZYShuLDExMikuaW5saW5lKSxsKG4sMTE1LDAsdC5ZYShuLDExNikuX2F2YXRhcix0LllhKG4sMTE2KS5fYXZhdGFyLHQuWWEobiwxMTkpLnRhcmdldCx0LllhKG4sMTE5KS5ocmVmKSxsKG4sMTIxLDAsdC5ZYShuLDEyMikuaW5saW5lKSxsKG4sMTI1LDAsdC5ZYShuLDEyNikuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCx0LllhKG4sMTI2KS5fY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCl9KX12YXIgc2w9dC5LYSgiYXBwLXJvb3QiLGQsZnVuY3Rpb24obCl7cmV0dXJuIHQuaWIoMCxbKGwoKSgpLHQuT2EoMCwwLG51bGwsbnVsbCwxLCJhcHAtcm9vdCIsW10sbnVsbCxudWxsLG51bGwsY2wsaWwpKSx0Lk5hKDEsMTE0Njg4LG51bGwsMCxkLFtpLmEsdWwuayxzLmFdLG51bGwsbnVsbCldLGZ1bmN0aW9uKGwsbil7bChuLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksZGw9YSgiWllqdCIpLHBsPWEoIk5TWUwiKSxtbD1hKCJpaFlZIiksaGw9YSgiZURrUCIpLGdsPWEoIm1Wc2EiKSxfbD1hKCJ0L05hIiksZmw9YSgiV2Y0cCIpLGJsPWEoInFBbFMiKSx2bD1hKCJMQzVwIiksa2w9YSgiWWhiTyIpLHhsPWEoIjRjMzUiKSx3bD1hKCJoVVdQIiksT2w9YSgiM3BKUSIpLHlsPWEoIlY5cSsiKSxQbD1hKCIwL3VRIiksQ2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsKGwsbil7dGhpcy5yb3V0ZXI9bCx0aGlzLmNodW5rTG9hZGVyPW59cmV0dXJuIGwucHJvdG90eXBlLmNhbkFjdGl2YXRlPWZ1bmN0aW9uKGwsbil7aWYoMD09ZS5hLnByb2R1Y3Rpb24pcmV0dXJuIE9iamVjdChQbC5hKShuZXcgUHJvbWlzZShmdW5jdGlvbihsLG4pe2woITApfSkpO3ZhciBhPW4udXJsO3JldHVybiBjb25zb2xlLmxvZygiQ2h1bmtHdWFyZCA6ICIrYSksdGhpcy5jaHVua0xvYWRlci5hc3luY0xvYWRQYWdlQ2h1bmsoYSl9LGwubmdJbmplY3RhYmxlRGVmPXQuUih7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgbCh0LlYodWwuayksdC5WKHMuYSkpfSx0b2tlbjpsLHByb3ZpZGVkSW46InJvb3QifSksbH0oKSxNbD1mdW5jdGlvbigpe30sV2w9YSgicFpoTSIpLFlsPXQuTGEobyxbZF0sZnVuY3Rpb24obCl7cmV0dXJuIHQuVmEoW3QuV2EoNTEyLHQuaix0LkFhLFtbOCxbcC5hLHgsWSxJLFMsVSxILHNsXV0sWzMsdC5qXSx0LnZdKSx0LldhKDUxMjAsdC5zLHQuSmEsW1szLHQuc11dKSx0LldhKDQ2MDgsdS5tLHUubCxbdC5zLFsyLHUudF1dKSx0LldhKDUxMjAsdC5xLHQuSGEsW10pLHQuV2EoNTEyMCx0LnIsdC5JYSxbXSksdC5XYSg0NjA4LGRsLmMsZGwucixbdS5kXSksdC5XYSg2MTQ0LHQuRSxudWxsLFtkbC5jXSksdC5XYSg0NjA4LGRsLmYsZGwuZyxbXSksdC5XYSg1MTIwLGRsLmQsZnVuY3Rpb24obCxuLGEsdCxlLHUscil7cmV0dXJuW25ldyBkbC5rKGwsbixhKSxuZXcgZGwubyh0KSxuZXcgZGwubihlLHUscildfSxbdS5kLHQueCxbMix0LnpdLHUuZCx1LmQsZGwuZix0LkJhXSksdC5XYSg0NjA4LGRsLmUsZGwuZSxbZGwuZCx0LnhdKSx0LldhKDEzNTY4MCxkbC5tLGRsLm0sW3UuZF0pLHQuV2EoNDYwOCxkbC5sLGRsLmwsW2RsLmUsZGwubV0pLHQuV2EoNTEyMCxwbC5hLFguZSxbXSksdC5XYSg1MTIwLHBsLmMsWC5mLFtdKSx0LldhKDQ2MDgscGwuYixYLmQsW3UuZCxwbC5hLHBsLmNdKSx0LldhKDUxMjAsdC5DLFguZyxbZGwubCxwbC5iLHQueF0pLHQuV2EoNjE0NCxkbC5wLG51bGwsW2RsLm1dKSx0LldhKDQ2MDgsdC5MLHQuTCxbdC54XSksdC5XYSg0NjA4LGRsLmgsZGwuaCxbdS5kXSksdC5XYSg0NjA4LGRsLmksZGwuaSxbdS5kXSksdC5XYSg0NjA4LG1sLmIsWC5jLFt0LkMsZGwuYl0pLHQuV2EoNDYwOCxvbC5rLG9sLmosW29sLmQsb2wuaF0pLHQuV2EoNTEyMCx1bC5oLHVsLkEsW3VsLnldKSx0LldhKDUxMjAsdC5iLGZ1bmN0aW9uKGwsbixhKXtyZXR1cm5bb2wubihsLG4pLGFdfSxbdS5kLHQueix1bC5oXSksdC5XYSg1MTIwLHVsLmEsdWwueCxbdWwua10pLHQuV2EoNDYwOCx1bC5kLHVsLmQsW10pLHQuV2EoNjE0NCx1bC5mLG51bGwsW3VsLmRdKSx0LldhKDEzNTY4MCx1bC5vLHVsLm8sW3VsLmssdC51LHQuaSx0LnAsdWwuZl0pLHQuV2EoNDYwOCx1bC5lLHVsLmUsW10pLHQuV2EoNDYwOCxobC5hLGhsLmEsW2hsLmcsaGwuYyx0LmosaGwuZixobC5kLHQucCx0LngsdS5kLGFsLmJdKSx0LldhKDUxMjAsaGwuaCxobC5pLFtobC5hXSksdC5XYSg1MTIwLGdsLmEsZ2wuYyxbaGwuYV0pLHQuV2EoNDYwOCxfbC5oLF9sLm4sW3UuZCx0LnosX2wubF0pLHQuV2EoNDYwOCxfbC5vLF9sLm8sW19sLmgsX2wubV0pLHQuV2EoNTEyMCxfbC5hLGZ1bmN0aW9uKGwpe3JldHVybltsXX0sW19sLm9dKSx0LldhKDEwNzM3NDIzMzYsdS5jLHUuYyxbXSksdC5XYSgxMDI0LHQubCxkbC5xLFtdKSx0LldhKDEwMjQsdC53LGZ1bmN0aW9uKCl7cmV0dXJuW3VsLnQoKV19LFtdKSx0LldhKDUxMix1bC55LHVsLnksW3QucF0pLHQuV2EoNTEyLF9sLmssX2wuayxbXSksdC5XYSgyMDQ4LF9sLmksbnVsbCxbX2wua10pLHQuV2EoNTEyLF9sLmcsX2wuZyxbX2wuaV0pLHQuV2EoMjA0OCxfbC5iLG51bGwsW19sLmddKSx0LldhKDUxMixfbC5mLF9sLmosW19sLmIsdC5wXSksdC5XYSg1MTIsX2wuYyxfbC5jLFtfbC5mXSksdC5XYSg1MTIsci5hLHIuYSxbX2wuY10pLHQuV2EoMTAyNCx0LmQsZnVuY3Rpb24obCxuLGEpe3JldHVybltkbC5zKGwpLHVsLnoobiksKHQ9YSxmdW5jdGlvbigpe3JldHVybiB0LmxvYWRQYWdlQXRJbml0KCl9KV07dmFyIHR9LFtbMix0LnddLHVsLnksci5hXSksdC5XYSg1MTIsdC5lLHQuZSxbWzIsdC5kXV0pLHQuV2EoMTMxNTg0LHQuZyx0LmcsW3QueCx0LkJhLHQucCx0LmwsdC5qLHQuZV0pLHQuV2EoMTA3Mzc0MjMzNix0LmYsdC5mLFt0LmddKSx0LldhKDEwNzM3NDIzMzYsZGwuYSxkbC5hLFtbMyxkbC5hXV0pLHQuV2EoMTA3Mzc0MjMzNixYLmIsWC5iLFtdKSx0LldhKDEwNzM3NDIzMzYsYWwuYSxhbC5hLFtdKSx0LldhKDEwNzM3NDIzMzYsZmwuaCxmbC5oLFtbMixmbC5iXV0pLHQuV2EoMTA3Mzc0MjMzNix6LmIsei5iLFtdKSx0LldhKDEwNzM3NDIzMzYsRy5iLEcuYixbXSksdC5XYSgxMDczNzQyMzM2LGZsLnIsZmwucixbXSksdC5XYSgxMDczNzQyMzM2LEouYyxKLmMsW10pLHQuV2EoMTA3Mzc0MjMzNixibC5iLGJsLmIsW10pLHQuV2EoMTA3Mzc0MjMzNixubC5oLG5sLmgsW10pLHQuV2EoMTA3Mzc0MjMzNiwkLmIsJC5iLFtdKSx0LldhKDEwNzM3NDIzMzYsZmwuaSxmbC5pLFtdKSx0LldhKDEwNzM3NDIzMzYsZmwucCxmbC5wLFtdKSx0LldhKDEwNzM3NDIzMzYsdmwuYSx2bC5hLFtdKSx0LldhKDEwNzM3NDIzMzYsZWwuYyxlbC5jLFtdKSx0LldhKDEwNzM3NDIzMzYsa2wuYyxrbC5jLFtdKSx0LldhKDEwNzM3NDIzMzYseGwuYyx4bC5jLFtdKSx0LldhKDEwNzM3NDIzMzYsdy5iLHcuYixbXSksdC5XYSgxMDczNzQyMzM2LG9sLmUsb2wuZSxbXSksdC5XYSgxMDczNzQyMzM2LHJsLmMscmwuYyxbXSksdC5XYSgxMDczNzQyMzM2LHdsLmEsd2wuYSxbXSksdC5XYSgxMDczNzQyMzM2LE9sLmEsT2wuYSxbXSksdC5XYSgxMDczNzQyMzM2LHlsLmEseWwuYSxbWzIsb2wubF0sdC56XSksdC5XYSgxMDI0LHVsLnMsdWwudixbWzMsdWwua11dKSx0LldhKDUxMix1bC5xLHVsLmMsW10pLHQuV2EoNTEyLHVsLmIsdWwuYixbXSksdC5XYSgyNTYsdWwuZyx7dXNlSGFzaDohMH0sW10pLHQuV2EoMTAyNCx1LmgsdWwudSxbdS5wLFsyLHUuYV0sdWwuZ10pLHQuV2EoNTEyLHUuZyx1LmcsW3UuaF0pLHQuV2EoNTEyLHQuaSx0LmksW10pLHQuV2EoNTEyLHQudSx0LkksW3QuaSxbMix0LkpdXSksdC5XYSgxMDI0LHVsLmksZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDpiLGNhbkFjdGl2YXRlOltDbF19LHtwYXRoOiJzaXRlbWFwIixjb21wb25lbnQ6QyxjYW5BY3RpdmF0ZTpbQ2xdfSx7cGF0aDoibGFibm90ZWJvb2svOnBhZ2VwYXRoIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0NsXX0se3BhdGg6ImxhYm5vdGVib29rIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0NsXX0se3BhdGg6InRlYW0iLGxvYWRDaGlsZHJlbjoiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUjVGVhbVJvc3RlckxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbQ2xdfSx7cGF0aDoicHJvamVjdCIsY29tcG9uZW50OkwsY2FuQWN0aXZhdGU6W0NsXX0se3BhdGg6ImJpb2xvZ3kiLGNvbXBvbmVudDpFLGNhbkFjdGl2YXRlOltDbF19LHtwYXRoOiJjb21wdXRpbmciLGNvbXBvbmVudDpELGNhbkFjdGl2YXRlOltDbF19LHtwYXRoOiJodW1hbi1wcmFjdGljZXMiLGNvbXBvbmVudDpCLGNhbkFjdGl2YXRlOltDbF19LHtwYXRoOiJzdXBwb3J0Iixsb2FkQ2hpbGRyZW46Ii4vc3VwcG9ydC1zZWN0aW9uL3N1cHBvcnQtc2VjdGlvbi1sYXllci5tb2R1bGUjU3VwcG9ydFNlY3Rpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W0NsXX0se3BhdGg6IiIscmVkaXJlY3RUbzoiZGFzaGJvYXJkIixwYXRoTWF0Y2g6ImZ1bGwifV1dfSxbXSksdC5XYSgxMDI0LHVsLmssdWwudyxbdC5nLHVsLnEsdWwuYix1LmcsdC5wLHQudSx0LmksdWwuaSx1bC5nLFsyLHVsLnBdLFsyLHVsLmpdXSksdC5XYSgxMDczNzQyMzM2LHVsLm0sdWwubSxbWzIsdWwuc10sWzIsdWwua11dKSx0LldhKDEwNzM3NDIzMzYsTWwsTWwsW10pLHQuV2EoMTA3Mzc0MjMzNixoLmQsaC5kLFtdKSx0LldhKDEwNzM3NDIzMzYsaGwuZSxobC5lLFtdKSx0LldhKDEwNzM3NDIzMzYsZ2wuYixnbC5iLFtdKSx0LldhKDEwNzM3NDIzMzYsX2wuZSxfbC5lLFtdKSx0LldhKDEwNzM3NDIzMzYsX2wuZCxfbC5kLFtdKSx0LldhKDEwNzM3NDIzMzYsV2wuYSxXbC5hLFtdKSx0LldhKDEwMjQsdC5jLHQuR2EsW10pLHQuV2EoMTA3Mzc0MjMzNixvLG8sW3Queix0LmNdKSx0LldhKDI1Nix0LlosITAsW10pLHQuV2EoMjU2LFguYSwiQnJvd3NlckFuaW1hdGlvbnMiLFtdKSx0LldhKDI1NixfbC5sLCJYU1JGLVRPS0VOIixbXSksdC5XYSgyNTYsX2wubSwiWC1YU1JGLVRPS0VOIixbXSldKX0pO2UuYS5wcm9kdWN0aW9uJiZPYmplY3QodC5TKSgpLGRsLmooKS5ib290c3RyYXBNb2R1bGVGYWN0b3J5KFlsKS5jYXRjaChmdW5jdGlvbihsKXtyZXR1cm4gY29uc29sZS5sb2cobCl9KX19LFtbNCwzLDRdXV0pOw==");eval(base64script); </script>
 
  
 +
<link rel="stylesheet" href="data:text/css;base64,Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggcmdiYSgwLDAsMCwuODcpfS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojNjczYWI3O2NhcmV0LWNvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZmQ3NDB9Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2QxYzRlOX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNTdmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZjZGQyfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6IzY3M2FiNztzdHJva2U6IzYyMDAzY30ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmZkNzQwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5e21hcmdpbjowO2hlaWdodDoxMDB2aH0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowIDJweCAxcHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDFweCAxcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggM3B4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjAgM3B4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgM3B4IDRweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA4cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowIDJweCA0cHggLTFweCByZ2JhKDAsMCwwLC4yKSwwIDRweCA1cHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMTBweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNXB4IDhweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxNHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MCA0cHggNXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCA3cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDlweCAxMnB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTZweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjAgNnB4IDZweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTBweCAxNHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCA0cHggMjBweCAzcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTNweCAxOXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjZweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjAgOHB4IDlweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMjhweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowIDhweCAxMXB4IC01cHggcmdiYSgwLDAsMCwuMiksMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDZweCAzMnB4IDVweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMThweCAyOHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA3cHggMzRweCA2cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjAgOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDE5cHggMjlweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsLjIpLDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA4cHggMzhweCA3cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjAgMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwuMiksMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDhweCA0MHB4IDdweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MCAxMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLC4yKSwwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwuMTQpLDAgOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowIDExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsLjIpLDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLC4xNCksMCA5cHggNDRweCA4cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjAgMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwuMiksMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsLjE0KSwwIDlweCA0NnB4IDhweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo2cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgaDIsI0hRX3BhZ2UgaDMsLm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9I0hRX3BhZ2UgI3RvY3RpdGxlIGgyLCNIUV9wYWdlIGg0LC5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgMTEuNjJweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIDkuMzhweC8yMHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS0yLC5tYXQtYm9keS1zdHJvbmd7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9I0hRX3BhZ2UgcCwubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfSNIUV9wYWdlIHAgcCwubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LWNhcHRpb24sLm1hdC1zbWFsbHtmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDU2cHg7bGV0dGVyLXNwYWNpbmc6LS4wNWVtfS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMmVtfS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjttYXJnaW46MCAwIDY0cHg7bGV0dGVyLXNwYWNpbmc6LS4wMDVlbX0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1taW5pLWZhYiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGUsLm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZSwubWF0LWNhcmQtc3VidGl0bGV7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0ubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHRyYW5zcGFyZW50fS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooLjAwMXB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWiguMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSguNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzUlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye21hcmdpbi10b3A6LjU0MTY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzVlbSkgc2NhbGUoLjc1KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjU5Mzc1ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41OTM3NGVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNTkzNzRlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzQlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0uMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbHstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKC43NSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoLjc1KTt3aWR0aDoxMzMuMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3NGVtKSBzY2FsZSguNzUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKC43NSk7d2lkdGg6MTMzLjMzMzM0JX0ubWF0LWdyaWQtdGlsZS1mb290ZXIsLm1hdC1ncmlkLXRpbGUtaGVhZGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LS4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbiwubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OXB4O3BhZGRpbmctYm90dG9tOjlweH0ubWF0LWxpc3QtaXRlbSwubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWZ9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCJIZWx2ZXRpY2EgTmV1ZSIsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW59QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksLXdlYmtpdC10cmFuc2Zvcm0gMHMgY3ViaWMtYmV6aWVyKDAsMCwuMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwcyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpLC13ZWJraXQtdHJhbnNmb3JtIDBzIGN1YmljLWJlemllcigwLDAsLjIsMSk7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMCk7dHJhbnNmb3JtOnNjYWxlKDApfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIsLmNkay1vdmVybGF5LWNvbnRhaW5lcntwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5jZGstb3ZlcmxheS1jb250YWluZXJ7cG9zaXRpb246Zml4ZWQ7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1jb250YWluZXI6ZW1wdHl7ZGlzcGxheTpub25lfS5jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwfS5jZGstb3ZlcmxheS1wYW5le3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOmF1dG87Ym94LXNpemluZzpib3JkZXItYm94O3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jZGstb3ZlcmxheS1iYWNrZHJvcHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt6LWluZGV4OjEwMDA7cG9pbnRlci1ldmVudHM6YXV0bzstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjI1LC44LC4yNSwxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5jZGstb3ZlcmxheS1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6LjZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfX0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjI4OCl9LmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLC5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MH0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxsey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQ7YW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kO2FuaW1hdGlvbi1uYW1lOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjJweCAwIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94IWltcG9ydGFudH0ubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcmltYXJ5IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiM2MjAwM2N9Lm1hdC1hY2NlbnQgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6Izk2MWU2NH0ubWF0LXdhcm4gLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2ZmNmU0MH0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZhZmFmYX0ubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6Izk2MWU2NH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiM2MjAwM2N9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZmY2ZTQwfS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmZjZlNDB9Lm1hdC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzYyMDAzYztwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNik7dHJhbnNmb3JtOnNjYWxlKC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi04cHh9Lm1hdC1iYWRnZS1tZWRpdW0gLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjIycHg7aGVpZ2h0OjIycHg7bGluZS1oZWlnaHQ6MjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xMXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDowIDB9Lm1hdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiM2MjAwM2N9Lm1hdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50e2NvbG9yOiM5NjFlNjR9Lm1hdC1idXR0b24ubWF0LXdhcm4sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1idXR0b24ubWF0LXByaW1hcnlbZGlzYWJsZWRdLC5tYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRdLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudFtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF1bZGlzYWJsZWRde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjEyKX0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjEyKX0ubWF0LWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b25bZGlzYWJsZWRdIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjEpfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMSl9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4xKX0ubWF0LWZhYiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1mYWIubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn0ubWF0LWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZhYi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1mYWIubWF0LXdhcm5bZGlzYWJsZWRdLC5tYXQtZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LWZsYXQtYnV0dG9uW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5W2Rpc2FibGVkXSwubWF0LW1pbmktZmFiLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LW1pbmktZmFiW2Rpc2FibGVkXVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnRbZGlzYWJsZWRdLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeVtkaXNhYmxlZF0sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuW2Rpc2FibGVkXSwubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRdW2Rpc2FibGVkXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1mYWIubWF0LWFjY2VudCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZhYi5tYXQtd2FybiwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yKX0ubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMil9Lm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTEwLDY0LC4yKX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWNhcmR7YmFja2dyb3VuZDojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmYWZhZmF9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZhZmFmYSFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmJsYWNrLW9uLXdoaXRlKXsubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwIWltcG9ydGFudH19Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmNmU0MH0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojYjBiMGIwfUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kOjAgMH19Lm1hdC1jaGVja2JveDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDMwLDEwMCwuMjYpfS5tYXQtY2hlY2tib3g6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjI2KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle29wYWNpdHk6LjQ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtvcGFjaXR5Oi40O2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCwubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUtc3RpY2t5LFttYXQtZm9vdGVyLXJvd10sW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sbWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvd3tiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LWZvb3Rlci1yb3csbWF0LWhlYWRlci1yb3csbWF0LXJvdyx0ZC5tYXQtY2VsbCx0ZC5tYXQtZm9vdGVyLWNlbGwsdGgubWF0LWhlYWRlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWNhbGVuZGFyLWFycm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b24sLm1hdC1kYXRlcGlja2VyLXRvZ2dsZXtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpLC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKSwubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjQ7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTAsNjQsLjQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiM2MjAwM2N9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKS5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSk6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVyLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1oaW50e2NvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmZjZlNDB9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtZXJyb3J7Y29sb3I6I2ZmNmU0MH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW07YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNDIpIDAscmdiYSgwLDAsMCwuNDIpIDMzJSx0cmFuc3BhcmVudCAwKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMCwwLDAsLjQyKSAwLHJnYmEoMCwwLDAsLjQyKSAzMyUsdHJhbnNwYXJlbnQgMCk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM2MjAwM2N9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiM5NjFlNjR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY2ZTQwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6IzYyMDAzY30ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojOTYxZTY0fS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZmY2ZTQwfS5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1pbnB1dC1lbGVtZW50OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Izk2MWU2NH0ubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnQsLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZmY2ZTQwfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sIkhlbHZldGljYSBOZXVlIixzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS1mb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDowIDA7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb246bm90KFtjb2xvcl0pLC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNkMGIzYzV9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2QwYjNjNX0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2UwYmNkMX0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlMGJjZDF9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmNjYmN9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmY2NiY30ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6Izk2MWU2NH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmZjZlNDB9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjIwMDNjfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6IzYyMDAzY30ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSg5OCwwLDYwLC4yNil9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjI2KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmNmU0MH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDExMCw2NCwuMjYpfS5tYXQtc2VsZWN0LWNvbnRlbnQsLm1hdC1zZWxlY3QtcGFuZWwtZG9uZS1hbmltYXRpbmd7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYyMDAzY30ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojOTYxZTY0fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjZlNDB9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC41KX0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwzMCwxMDAsLjEyKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZDpub3QoLm1hdC1kaXNhYmxlZCkgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDk4LDAsNjAsLjUpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Om5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoOTgsMCw2MCwuMTIpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkOm5vdCgubWF0LWRpc2FibGVkKSAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjU3MjJ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQ6bm90KC5tYXQtZGlzYWJsZWQpIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDg3LDM0LC41KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybjpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSw4NywzNCwuMTIpfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfS5tYXQtZGlzYWJsZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMSl9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtiYWNrZ3JvdW5kLWNvbG9yOiM5NjFlNjR9Lm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7YmFja2dyb3VuZC1jb2xvcjojZmY2ZTQwfS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMzAsMTAwLC4yKX0uY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmdiYSgwLDAsMCwuNykscmdiYSgwLDAsMCwuNykgMnB4LHRyYW5zcGFyZW50IDAsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KC4wMDAxZGVnLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJnYmEoMCwwLDAsLjcpLHJnYmEoMCwwLDAsLjcpIDJweCx0cmFuc3BhcmVudCAwLHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYyMDAzYztjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tbm90LXRvdWNoZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCk7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM3NTc1NzV9Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXSAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA4LDE3OSwxOTcsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiM2MjAwM2N9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyNCwxODgsMjA5LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNCwxODgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjA4LDE3OSwxOTcsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGlua3N7YmFja2dyb3VuZC1jb2xvcjojNjIwMDNjfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1mb2N1c2VkOm5vdCguY2RrLW1vdXNlLWZvY3VzZWQpOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMjQsMTg4LDIwOSwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3MsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmtze2JhY2tncm91bmQtY29sb3I6Izk2MWU2NH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWZvY3VzZWQ6bm90KC5jZGstbW91c2UtZm9jdXNlZCk6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstZm9jdXNlZDpub3QoLmNkay1tb3VzZS1mb2N1c2VkKTpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA0LDE4OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rcywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rc3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjZlNDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5re2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjVmNWY1O2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojNjIwMDNjO2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojOTYxZTY0O2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2ZmNmU0MDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOmluaGVyaXR9Lm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sdGlwe2JhY2tncm91bmQ6cmdiYSg5Nyw5Nyw5NywuOSl9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywiSGVsdmV0aWNhIE5ldWUiLHNhbnMtc2VyaWY7YmFja2dyb3VuZDojZmZmfS5tYXQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweDtjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zbmFjay1iYXItY29udGFpbmVye2JhY2tncm91bmQ6IzMyMzIzMjtjb2xvcjojZmZmfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojOTYxZTY0fSNIUV9wYWdlIGgye2JhY2tncm91bmQtY29sb3I6IzdhMjY1OTtjb2xvcjojZmZmO2JhY2tncm91bmQtc2l6ZToxMDAlIGF1dG99I0hRX3BhZ2UgI3RvY3RpdGxlIGgye2JhY2tncm91bmQtY29sb3I6dW5zZXQ7Y29sb3I6dW5zZXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgYXV0b30uYXhpcy0teCAuZG9tYWluLC5heGlzLS15IC5kb21haW57ZGlzcGxheTpub25lfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleC1iYXNpczowfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6Um9ib3RvO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6dXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzIvMjYvVC0tR09fUGFyaXMtU2FjbGF5LS1yb2JvdG8tdjE4LWxhdGluLXJlZ3VsYXIuZW90KTtzcmM6bG9jYWwoIlJvYm90byIpLGxvY2FsKCJSb2JvdG8tUmVndWxhciIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8yLzI2L1QtLUdPX1BhcmlzLVNhY2xheS0tcm9ib3RvLXYxOC1sYXRpbi1yZWd1bGFyLmVvdD8jaWVmaXgpIGZvcm1hdCgiZW1iZWRkZWQtb3BlbnR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvMC8wYi9ULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci53b2ZmKSBmb3JtYXQoIndvZmYiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvRmlsZTpULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci50dGYpIGZvcm1hdCgidHJ1ZXR5cGUiKSx1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvRmlsZTpULS1HT19QYXJpcy1TYWNsYXktLXJvYm90by12MTgtbGF0aW4tcmVndWxhci5zdmcjUm9ib3RvKSBmb3JtYXQoInN2ZyIpfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWF0ZXJpYWxJY29ucy1SZWd1bGFyO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidNYXRlcmlhbCBJY29ucyc7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwO3NyYzp1cmwoaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNS81MS9ULS1HT19QYXJpcy1TYWNsYXktLU1hdGVyaWFsSWNvbnMtUmVndWxhci5lb3QpO3NyYzpsb2NhbCgiUm9ib3RvIiksbG9jYWwoIlJvYm90by1SZWd1bGFyIiksdXJsKGh0dHA6Ly8yMDE4LmlnZW0ub3JnL3dpa2kvaW1hZ2VzLzUvNTEvVC0tR09fUGFyaXMtU2FjbGF5LS1NYXRlcmlhbEljb25zLVJlZ3VsYXIuZW90PyNpZWZpeCkgZm9ybWF0KCJlbWJlZGRlZC1vcGVudHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8yLzI4L1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLndvZmYpIGZvcm1hdCgid29mZiIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8xLzFlL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnR0ZikgZm9ybWF0KCJ0cnVldHlwZSIpLHVybChodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8zLzNmL1QtLUdPX1BhcmlzLVNhY2xheS0tTWF0ZXJpYWxJY29ucy1SZWd1bGFyLnN2ZyNNYXRlcmlhbEljb25zLVJlZ3VsYXIpIGZvcm1hdCgic3ZnIil9Lm1hdGVyaWFsLWljb25ze2ZvbnQtZmFtaWx5OidNYXRlcmlhbCBJY29ucyc7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3dvcmQtd3JhcDpub3JtYWw7ZGlyZWN0aW9uOmx0cjstbW96LWZvbnQtZmVhdHVyZS1zZXR0aW5nczonbGlnYSc7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfWgxLGgyLGgzLGg0LGg1LGg2e2JvcmRlci1ib3R0b206MH0ubWF0LWxpc3R7cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9bmctbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpIWltcG9ydGFudH1uZy1saXN0LWl0ZW0gLm1hdC1kaXZpZGVye2JvcmRlcjowfQ==">
 +
 +
<script>var base64script = atob("IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7Zm9yKHZhciBuLGksYT1yWzBdLGM9clsxXSxsPXJbMl0scD0wLGY9W107cDxhLmxlbmd0aDtwKyspb1tpPWFbcF1dJiZmLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihuIGluIGMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsbikmJihlW25dPWNbbl0pO2ZvcihzJiZzKHIpO2YubGVuZ3RoOylmLnNoaWZ0KCkoKTtyZXR1cm4gdS5wdXNoLmFwcGx5KHUsbHx8W10pLHQoKX1mdW5jdGlvbiB0KCl7Zm9yKHZhciBlLHI9MDtyPHUubGVuZ3RoO3IrKyl7Zm9yKHZhciB0PXVbcl0sbj0hMCxhPTE7YTx0Lmxlbmd0aDthKyspMCE9PW9bdFthXV0mJihuPSExKTtuJiYodS5zcGxpY2Uoci0tLDEpLGU9aShpLnM9dFswXSkpfXJldHVybiBlfXZhciBuPXt9LG89ezQ6MH0sdT1bXTtmdW5jdGlvbiBpKHIpe2lmKG5bcl0pcmV0dXJuIG5bcl0uZXhwb3J0czt2YXIgdD1uW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxpKSx0Lmw9ITAsdC5leHBvcnRzfWkuZT1mdW5jdGlvbihlKXt2YXIgcj1bXSx0PW9bZV07aWYoMCE9PXQpaWYodClyLnB1c2godFsyXSk7ZWxzZXt2YXIgbj1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe3Q9b1tlXT1bcixuXX0pO3IucHVzaCh0WzJdPW4pO3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLmNoYXJzZXQ9InV0Zi04IixhLnRpbWVvdXQ9MTIwLGkubmMmJmEuc2V0QXR0cmlidXRlKCJub25jZSIsaS5uYyksYS5zcmM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkucCsiIisoe31bZV18fGUpKyIuanMifShlKTt2YXIgYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh7dHlwZToidGltZW91dCIsdGFyZ2V0OmF9KX0sMTJlNCk7ZnVuY3Rpb24gbChyKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQoYyk7dmFyIHQ9b1tlXTtpZigwIT09dCl7aWYodCl7dmFyIG49ciYmKCJsb2FkIj09PXIudHlwZT8ibWlzc2luZyI6ci50eXBlKSx1PXImJnIudGFyZ2V0JiZyLnRhcmdldC5zcmMsaT1uZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLlxuKCIrbisiOiAiK3UrIikiKTtpLnR5cGU9bixpLnJlcXVlc3Q9dSx0WzFdKGkpfW9bZV09dm9pZCAwfX1hLm9uZXJyb3I9YS5vbmxvYWQ9bCx1LmFwcGVuZENoaWxkKGEpfXJldHVybiBQcm9taXNlLmFsbChyKX0saS5tPWUsaS5jPW4saS5kPWZ1bmN0aW9uKGUscix0KXtpLm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OnR9KX0saS5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0saS5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiBpLmQociwiYSIscikscn0saS5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxpLnA9IiIsaS5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9O3ZhciBhPXdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10sYz1hLnB1c2guYmluZChhKTthLnB1c2g9cixhPWEuc2xpY2UoKTtmb3IodmFyIGw9MDtsPGEubGVuZ3RoO2wrKylyKGFbbF0pO3ZhciBzPWM7dCgpfShbXSk7KHdpbmRvdy53ZWJwYWNrSnNvbnA9d2luZG93LndlYnBhY2tKc29ucHx8W10pLnB1c2goW1s3XSx7IityTHYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIikuZG9jdW1lbnQ7ZS5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSwiMC9SNCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sIjBUV3AiOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKGUpe3ZhciB0PWUucGVyZm9ybWFuY2U7ZnVuY3Rpb24gbihlKXt0JiZ0Lm1hcmsmJnQubWFyayhlKX1mdW5jdGlvbiByKGUsbil7dCYmdC5tZWFzdXJlJiZ0Lm1lYXN1cmUoZSxuKX1pZihuKCJab25lIiksZS5ab25lKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTt2YXIgbyxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQpe3RoaXMuX3Byb3BlcnRpZXM9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9uYW1lPXQ/dC5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz10JiZ0LnByb3BlcnRpZXN8fHt9LHRoaXMuX3pvbmVEZWxlZ2F0ZT1uZXcgYyh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsdCl9cmV0dXJuIHQuYXNzZXJ0Wm9uZVBhdGNoZWQ9ZnVuY3Rpb24oKXtpZihlLlByb21pc2UhPT1PLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jdXJyZW50O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJjdXJyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEQuem9uZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gan0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbihvLGkpe2lmKE8uaGFzT3duUHJvcGVydHkobykpdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK28pO2lmKCFlWyJfX1pvbmVfZGlzYWJsZV8iK29dKXt2YXIgYT0iWm9uZToiK287bihhKSxPW29dPWkoZSx0LFMpLHIoYSxhKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRab25lV2l0aChlKTtpZih0KXJldHVybiB0Ll9wcm9wZXJ0aWVzW2VdfSx0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpczt0Oyl7aWYodC5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdDt0PXQuX3BhcmVudH1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLGUpfSx0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK2UpO3ZhciBuPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxlLHQpLHI9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5ydW5HdWFyZGVkKG4sdGhpcyxhcmd1bWVudHMsdCl9fSx0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9dm9pZCAwKSx2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1yJiYocj1udWxsKSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLGUsdCxuLHIpfWZpbmFsbHl7RD1ELnBhcmVudH19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oZSx0LG4scil7dm9pZCAwPT09dCYmKHQ9bnVsbCksdm9pZCAwPT09biYmKG49bnVsbCksdm9pZCAwPT09ciYmKHI9bnVsbCksRD17cGFyZW50OkQsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsZSx0LG4scil9Y2F0Y2goZSl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsZSkpdGhyb3cgZX19ZmluYWxseXtEPUQucGFyZW50fX0sdC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihlLHQsbil7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKGUuc3RhdGUhPT15fHxlLnR5cGUhPT14KXt2YXIgcj1lLnN0YXRlIT1rO3ImJmUuX3RyYW5zaXRpb25UbyhrLG0pLGUucnVuQ291bnQrKzt2YXIgbz1qO2o9ZSxEPXtwYXJlbnQ6RCx6b25lOnRoaXN9O3RyeXtlLnR5cGU9PUUmJmUuZGF0YSYmIWUuZGF0YS5pc1BlcmlvZGljJiYoZS5jYW5jZWxGbj1udWxsKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsZSx0LG4pfWNhdGNoKGUpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGUpKXRocm93IGV9fWZpbmFsbHl7ZS5zdGF0ZSE9PXkmJmUuc3RhdGUhPT1UJiYoZS50eXBlPT14fHxlLmRhdGEmJmUuZGF0YS5pc1BlcmlvZGljP3ImJmUuX3RyYW5zaXRpb25UbyhtLGspOihlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLHImJmUuX3RyYW5zaXRpb25Ubyh5LGsseSkpKSxEPUQucGFyZW50LGo9b319fSx0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lJiZlLnpvbmUhPT10aGlzKWZvcih2YXIgdD10aGlzO3Q7KXtpZih0PT09ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiK3RoaXMubmFtZSsiIHdoaWNoIGlzIGRlc2NlbmRhbnRzIG9mIHRoZSBvcmlnaW5hbCB6b25lICIrZS56b25lLm5hbWUpO3Q9dC5wYXJlbnR9ZS5fdHJhbnNpdGlvblRvKF8seSk7dmFyIG49W107ZS5fem9uZURlbGVnYXRlcz1uLGUuX3pvbmU9dGhpczt0cnl7ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsXyx5KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyx0KSx0fXJldHVybiBlLl96b25lRGVsZWdhdGVzPT09biYmdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsMSksZS5zdGF0ZT09XyYmZS5fdHJhbnNpdGlvblRvKG0sXyksZX0sdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHcsZSx0LG4scixudWxsKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlTWFjcm9UYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KEUsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyB1KHgsZSx0LG4scixvKSl9LHQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oZSl7aWYoZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhlLnpvbmV8fGcpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2UuX3RyYW5zaXRpb25UbyhiLG0sayk7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsZSl9Y2F0Y2godCl7dGhyb3cgZS5fdHJhbnNpdGlvblRvKFQsYiksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsdCksdH1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KGUsLTEpLGUuX3RyYW5zaXRpb25Ubyh5LGIpLGUucnVuQ291bnQ9MCxlfSx0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fem9uZURlbGVnYXRlczstMT09dCYmKGUuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspbltyXS5fdXBkYXRlVGFza0NvdW50KGUudHlwZSx0KX0sdC5fX3N5bWJvbF9fPXosdH0oKSxhPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5oYXNUYXNrKG4scil9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnNjaGVkdWxlVGFzayhuLHIpfSxvbkludm9rZVRhc2s6ZnVuY3Rpb24oZSx0LG4scixvLGkpe3JldHVybiBlLmludm9rZVRhc2sobixyLG8saSl9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5jYW5jZWxUYXNrKG4scil9fSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1lLHRoaXMuX3BhcmVudERlbGVnYXRlPXQsdGhpcy5fZm9ya1pTPW4mJihuJiZuLm9uRm9yaz9uOnQuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9biYmKG4ub25Gb3JrP3Q6dC5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1uJiYobi5vbkZvcms/dGhpcy56b25lOnQuem9uZSksdGhpcy5faW50ZXJjZXB0WlM9biYmKG4ub25JbnRlcmNlcHQ/bjp0Ll9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1uJiYobi5vbkludGVyY2VwdD90OnQuX2ludGVyY2VwdERsZ3QpLHRoaXMuX2ludGVyY2VwdEN1cnJab25lPW4mJihuLm9uSW50ZXJjZXB0P3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX2ludm9rZVpTPW4mJihuLm9uSW52b2tlP246dC5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9biYmKG4ub25JbnZva2U/dDp0Ll9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1uJiYobi5vbkludm9rZT90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYW5kbGVFcnJvclpTPW4mJihuLm9uSGFuZGxlRXJyb3I/bjp0Ll9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9biYmKG4ub25IYW5kbGVFcnJvcj90OnQuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1uJiYobi5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTp0LnpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPW4mJihuLm9uU2NoZWR1bGVUYXNrP246dC5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9biYmKG4ub25TY2hlZHVsZVRhc2s/dDp0Ll9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1uJiYobi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9pbnZva2VUYXNrWlM9biYmKG4ub25JbnZva2VUYXNrP246dC5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1uJiYobi5vbkludm9rZVRhc2s/dDp0Ll9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPW4mJihuLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9jYW5jZWxUYXNrWlM9biYmKG4ub25DYW5jZWxUYXNrP246dC5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1uJiYobi5vbkNhbmNlbFRhc2s/dDp0Ll9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPW4mJihuLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6dC56b25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIgcj1uJiZuLm9uSGFzVGFzazsocnx8dCYmdC5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1yP246YSx0aGlzLl9oYXNUYXNrRGxndD10LHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9dGhpcyx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9ZSxuLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9YSx0aGlzLl9zY2hlZHVsZVRhc2tEbGd0PXQsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxuLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1hLHRoaXMuX2ludm9rZVRhc2tEbGd0PXQsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksbi5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9YSx0aGlzLl9jYW5jZWxUYXNrRGxndD10LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gZS5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsZSx0KTpuZXcgaShlLHQpfSxlLnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGUsdCxuKTp0fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0LG4scixvKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSxlLHQsbixyLG8pOnQuYXBwbHkobixyKX0sZS5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGUsdCl9LGUucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuPXQ7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZuLl96b25lRGVsZWdhdGVzLnB1c2godGhpcy5faGFzVGFza0RsZ3RPd25lciksKG49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxlLHQpKXx8KG49dCk7ZWxzZSBpZih0LnNjaGVkdWxlRm4pdC5zY2hlZHVsZUZuKHQpO2Vsc2V7aWYodC50eXBlIT13KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7dih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGUsdCxuLHIpOnQuY2FsbGJhY2suYXBwbHkobixyKX0sZS5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbihlLHQpe3ZhciBuO2lmKHRoaXMuX2NhbmNlbFRhc2taUyluPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGUsdCk7ZWxzZXtpZighdC5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO249dC5jYW5jZWxGbih0KX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gdGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJyWm9uZSxlLHQpfWNhdGNoKHQpe3RoaXMuaGFuZGxlRXJyb3IoZSx0KX19LGUucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90YXNrQ291bnRzLHI9bltlXSxvPW5bZV09cit0O2lmKG88MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1yJiYwIT1vfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6bi5taWNyb1Rhc2s+MCxtYWNyb1Rhc2s6bi5tYWNyb1Rhc2s+MCxldmVudFRhc2s6bi5ldmVudFRhc2s+MCxjaGFuZ2U6ZX0pfSxlfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4scixvLGksYSxjKXt0aGlzLl96b25lPW51bGwsdGhpcy5ydW5Db3VudD0wLHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCx0aGlzLl9zdGF0ZT0ibm90U2NoZWR1bGVkIix0aGlzLnR5cGU9bix0aGlzLnNvdXJjZT1yLHRoaXMuZGF0YT1pLHRoaXMuc2NoZWR1bGVGbj1hLHRoaXMuY2FuY2VsRm49Yyx0aGlzLmNhbGxiYWNrPW87dmFyIHU9dGhpczt0aGlzLmludm9rZT1uPT09eCYmaSYmaS51c2VHP3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiB0Lmludm9rZVRhc2suY2FsbChlLHUsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gdC5pbnZva2VUYXNrPWZ1bmN0aW9uKGUsdCxuKXtlfHwoZT10aGlzKSxQKys7dHJ5e3JldHVybiBlLnJ1bkNvdW50KyssZS56b25lLnJ1blRhc2soZSx0LG4pfWZpbmFsbHl7MT09UCYmZCgpLFAtLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwic3RhdGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKHksXyl9LHQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX3N0YXRlIT09dCYmdGhpcy5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrIiAnIit0aGlzLnNvdXJjZSsiJzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICciK2UrIicsIGV4cGVjdGluZyBzdGF0ZSAnIit0KyInIisobj8iIG9yICciK24rIiciOiIiKSsiLCB3YXMgJyIrdGhpcy5fc3RhdGUrIicuIik7dGhpcy5fc3RhdGU9ZSxlPT15JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhJiZ2b2lkIDAhPT10aGlzLmRhdGEuaGFuZGxlSWQ/dGhpcy5kYXRhLmhhbmRsZUlkOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LHR9KCkscz16KCJzZXRUaW1lb3V0IiksbD16KCJQcm9taXNlIiksZj16KCJ0aGVuIikscD1bXSxoPSExO2Z1bmN0aW9uIHYodCl7MD09PVAmJjA9PT1wLmxlbmd0aCYmKG98fGVbbF0mJihvPWVbbF0ucmVzb2x2ZSgwKSksbz9vW2ZdKGQpOmVbc10oZCwwKSksdCYmcC5wdXNoKHQpfWZ1bmN0aW9uIGQoKXtpZighaCl7Zm9yKGg9ITA7cC5sZW5ndGg7KXt2YXIgZT1wO3A9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07dHJ5e24uem9uZS5ydW5UYXNrKG4sbnVsbCxudWxsKX1jYXRjaChlKXtTLm9uVW5oYW5kbGVkRXJyb3IoZSl9fX1TLm1pY3JvdGFza0RyYWluRG9uZSgpLGg9ITF9fXZhciBnPXtuYW1lOiJOTyBaT05FIn0seT0ibm90U2NoZWR1bGVkIixfPSJzY2hlZHVsaW5nIixtPSJzY2hlZHVsZWQiLGs9InJ1bm5pbmciLGI9ImNhbmNlbGluZyIsVD0idW5rbm93biIsdz0ibWljcm9UYXNrIixFPSJtYWNyb1Rhc2siLHg9ImV2ZW50VGFzayIsTz17fSxTPXtzeW1ib2w6eixjdXJyZW50Wm9uZUZyYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIER9LG9uVW5oYW5kbGVkRXJyb3I6WixtaWNyb3Rhc2tEcmFpbkRvbmU6WixzY2hlZHVsZU1pY3JvVGFzazp2LHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWlbeigiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpaLHBhdGNoTWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuIFp9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sc2V0TmF0aXZlUHJvbWlzZTpmdW5jdGlvbihlKXtlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5yZXNvbHZlJiYobz1lLnJlc29sdmUoMCkpfX0sRD17cGFyZW50Om51bGwsem9uZTpuZXcgaShudWxsLG51bGwpfSxqPW51bGwsUD0wO2Z1bmN0aW9uIFooKXt9ZnVuY3Rpb24geihlKXtyZXR1cm4iX196b25lX3N5bWJvbF9fIitlfXIoIlpvbmUiLCJab25lIiksZS5ab25lPWl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3d8fCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsKSxab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oZSx0LG4pe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1PYmplY3QuZGVmaW5lUHJvcGVydHksaT1uLnN5bWJvbCxhPVtdLGM9aSgiUHJvbWlzZSIpLHU9aSgidGhlbiIpLHM9Il9fY3JlYXRpb25UcmFjZV9fIjtuLm9uVW5oYW5kbGVkRXJyb3I9ZnVuY3Rpb24oZSl7aWYobi5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgdD1lJiZlLnJlamVjdGlvbjt0P2NvbnNvbGUuZXJyb3IoIlVuaGFuZGxlZCBQcm9taXNlIHJlamVjdGlvbjoiLHQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6dCwiOyBab25lOiIsZS56b25lLm5hbWUsIjsgVGFzazoiLGUudGFzayYmZS50YXNrLnNvdXJjZSwiOyBWYWx1ZToiLHQsdCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6dm9pZCAwKTpjb25zb2xlLmVycm9yKGUpfX0sbi5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IoO2EubGVuZ3RoOylmb3IodmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT1hLnNoaWZ0KCk7dHJ5e2Uuem9uZS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfWNhdGNoKGUpe2YoZSl9fTthLmxlbmd0aDspZSgpfTt2YXIgbD1pKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIGYoZSl7bi5vblVuaGFuZGxlZEVycm9yKGUpO3RyeXt2YXIgcj10W2xdO3ImJiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyLmNhbGwodGhpcyxlKX1jYXRjaChlKXt9fWZ1bmN0aW9uIHAoZSl7cmV0dXJuIGUmJmUudGhlbn1mdW5jdGlvbiBoKGUpe3JldHVybiBlfWZ1bmN0aW9uIHYoZSl7cmV0dXJuIE0ucmVqZWN0KGUpfXZhciBkPWkoInN0YXRlIiksZz1pKCJ2YWx1ZSIpLHk9aSgiZmluYWxseSIpLF89aSgicGFyZW50UHJvbWlzZVZhbHVlIiksbT1pKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxrPSJQcm9taXNlLnRoZW4iLGI9bnVsbCxUPSEwLHc9ITEsRT0wO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dHJ5e2ooZSx0LG4pfWNhdGNoKHQpe2ooZSwhMSx0KX19fXZhciBPPWZ1bmN0aW9uKCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxTPSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixEPWkoImN1cnJlbnRUYXNrVHJhY2UiKTtmdW5jdGlvbiBqKGUscixpKXt2YXIgYyx1PU8oKTtpZihlPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFMpO2lmKGVbZF09PT1iKXt2YXIgbD1udWxsO3RyeXsib2JqZWN0IiE9dHlwZW9mIGkmJiJmdW5jdGlvbiIhPXR5cGVvZiBpfHwobD1pJiZpLnRoZW4pfWNhdGNoKHQpe3JldHVybiB1KGZ1bmN0aW9uKCl7aihlLCExLHQpfSkoKSxlfWlmKHIhPT13JiZpIGluc3RhbmNlb2YgTSYmaS5oYXNPd25Qcm9wZXJ0eShkKSYmaS5oYXNPd25Qcm9wZXJ0eShnKSYmaVtkXSE9PWIpWihpKSxqKGUsaVtkXSxpW2ddKTtlbHNlIGlmKHIhPT13JiYiZnVuY3Rpb24iPT10eXBlb2YgbCl0cnl7bC5jYWxsKGksdSh4KGUscikpLHUoeChlLCExKSkpfWNhdGNoKHQpe3UoZnVuY3Rpb24oKXtqKGUsITEsdCl9KSgpfWVsc2V7ZVtkXT1yO3ZhciBmPWVbZ107aWYoZVtnXT1pLGVbeV09PT15JiZyPT09VCYmKGVbZF09ZVttXSxlW2ddPWVbX10pLHI9PT13JiZpIGluc3RhbmNlb2YgRXJyb3Ipe3ZhciBwPXQuY3VycmVudFRhc2smJnQuY3VycmVudFRhc2suZGF0YSYmdC5jdXJyZW50VGFzay5kYXRhW3NdO3AmJm8oaSxELHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTpwfSl9Zm9yKHZhciBoPTA7aDxmLmxlbmd0aDspeihlLGZbaCsrXSxmW2grK10sZltoKytdLGZbaCsrXSk7aWYoMD09Zi5sZW5ndGgmJnI9PXcpe2VbZF09RTt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlzZSk6ICIrKChjPWkpJiZjLnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oYy5jb25zdHJ1Y3RvciYmYy5jb25zdHJ1Y3Rvci5uYW1lfHwiIikrIjogIitKU09OLnN0cmluZ2lmeShjKTpjP2MudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYykpKyhpJiZpLnN0YWNrPyJcbiIraS5zdGFjazoiIikpfWNhdGNoKHIpe3ZhciB2PXI7di5yZWplY3Rpb249aSx2LnByb21pc2U9ZSx2LnpvbmU9dC5jdXJyZW50LHYudGFzaz10LmN1cnJlbnRUYXNrLGEucHVzaCh2KSxuLnNjaGVkdWxlTWljcm9UYXNrKCl9fX19cmV0dXJuIGV9dmFyIFA9aSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBaKGUpe2lmKGVbZF09PT1FKXt0cnl7dmFyIG49dFtQXTtuJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmbi5jYWxsKHRoaXMse3JlamVjdGlvbjplW2ddLHByb21pc2U6ZX0pfWNhdGNoKGUpe31lW2RdPXc7Zm9yKHZhciByPTA7cjxhLmxlbmd0aDtyKyspZT09PWFbcl0ucHJvbWlzZSYmYS5zcGxpY2UociwxKX19ZnVuY3Rpb24geihlLHQsbixyLG8pe1ooZSk7dmFyIGk9ZVtkXSxhPWk/ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpoOiJmdW5jdGlvbiI9PXR5cGVvZiBvP286djt0LnNjaGVkdWxlTWljcm9UYXNrKGssZnVuY3Rpb24oKXt0cnl7dmFyIHI9ZVtnXSxvPW4mJnk9PT1uW3ldO28mJihuW19dPXIsblttXT1pKTt2YXIgYz10LnJ1bihhLHZvaWQgMCxvJiZhIT09diYmYSE9PWg/W106W3JdKTtqKG4sITAsYyl9Y2F0Y2goZSl7aihuLCExLGUpfX0sbil9dmFyIE09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7dGhpc1tkXT1iLHRoaXNbZ109W107dHJ5e3QmJnQoeCh0aGlzLFQpLHgodGhpcyx3KSl9Y2F0Y2goZSl7aih0aGlzLCExLGUpfX1yZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxlLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksVCxlKX0sZS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGoobmV3IHRoaXMobnVsbCksdyxlKX0sZS5yYWNlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1uZXcgdGhpcyhmdW5jdGlvbihlLHIpe3Q9ZSxuPXJ9KTtmdW5jdGlvbiBvKGUpe3ImJihyPXQoZSkpfWZ1bmN0aW9uIGkoZSl7ciYmKHI9bihlKSl9Zm9yKHZhciBhPTAsYz1lO2E8Yy5sZW5ndGg7YSsrKXt2YXIgdT1jW2FdO3AodSl8fCh1PXRoaXMucmVzb2x2ZSh1KSksdS50aGVuKG8saSl9cmV0dXJuIHJ9LGUuYWxsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9bmV3IHRoaXMoZnVuY3Rpb24oZSxyKXt0PWUsbj1yfSksbz0wLGk9W10sYT0wLGM9ZTthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtwKHUpfHwodT10aGlzLnJlc29sdmUodSkpLHUudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7aVtlXT1uLC0tb3x8dChpKX19KG8pLG4pLG8rK31yZXR1cm4gb3x8dChpKSxyfSxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsbil7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCksbz10LmN1cnJlbnQ7cmV0dXJuIHRoaXNbZF09PWI/dGhpc1tnXS5wdXNoKG8scixlLG4pOnoodGhpcyxvLHIsZSxuKSxyfSxlLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50aGVuKG51bGwsZSl9LGUucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHRoaXMuY29uc3RydWN0b3IobnVsbCk7blt5XT15O3ZhciByPXQuY3VycmVudDtyZXR1cm4gdGhpc1tkXT09Yj90aGlzW2ddLnB1c2gocixuLGUsZSk6eih0aGlzLHIsbixlLGUpLG59LGV9KCk7TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO3ZhciBDPWVbY109ZS5Qcm9taXNlLFI9dC5fX3N5bWJvbF9fKCJab25lQXdhcmVQcm9taXNlIiksST1yKGUsIlByb21pc2UiKTtJJiYhSS5jb25maWd1cmFibGV8fChJJiZkZWxldGUgSS53cml0YWJsZSxJJiZkZWxldGUgSS52YWx1ZSxJfHwoST17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KSxJLmdldD1mdW5jdGlvbigpe3JldHVybiBlW1JdP2VbUl06ZVtjXX0sSS5zZXQ9ZnVuY3Rpb24odCl7dD09PU0/ZVtSXT10OihlW2NdPXQsdC5wcm90b3R5cGVbdV18fHEodCksbi5zZXROYXRpdmVQcm9taXNlKHQpKX0sbyhlLCJQcm9taXNlIixJKSksZS5Qcm9taXNlPU07dmFyIEYsTD1pKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHEoZSl7dmFyIHQ9ZS5wcm90b3R5cGUsbj1yKHQsInRoZW4iKTtpZighbnx8ITEhPT1uLndyaXRhYmxlJiZuLmNvbmZpZ3VyYWJsZSl7dmFyIG89dC50aGVuO3RbdV09byxlLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IE0oZnVuY3Rpb24oZSx0KXtvLmNhbGwobixlLHQpfSkudGhlbihlLHQpfSxlW0xdPSEwfX1pZihDKXtxKEMpO3ZhciBBPWUuZmV0Y2g7ImZ1bmN0aW9uIj09dHlwZW9mIEEmJihlLmZldGNoPShGPUEsZnVuY3Rpb24oKXt2YXIgZT1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihlIGluc3RhbmNlb2YgTSlyZXR1cm4gZTt2YXIgdD1lLmNvbnN0cnVjdG9yO3JldHVybiB0W0xdfHxxKHQpLGV9KSl9cmV0dXJuIFByb21pc2VbdC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09YSxNfSk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixyPU9iamVjdC5jcmVhdGUsbz1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRMaXN0ZW5lciIsYT0icmVtb3ZlRXZlbnRMaXN0ZW5lciIsYz1ab25lLl9fc3ltYm9sX18oaSksdT1ab25lLl9fc3ltYm9sX18oYSkscz0idHJ1ZSIsbD0iZmFsc2UiLGY9Il9fem9uZV9zeW1ib2xfXyI7ZnVuY3Rpb24gcChlLHQpe3JldHVybiBab25lLmN1cnJlbnQud3JhcChlLHQpfWZ1bmN0aW9uIGgoZSx0LG4scixvKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGUsdCxuLHIsbyl9dmFyIHY9Wm9uZS5fX3N5bWJvbF9fLGQ9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3csZz1kP3dpbmRvdzp2b2lkIDAseT1kJiZnfHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbCxfPSJyZW1vdmVBdHRyaWJ1dGUiLG09W251bGxdO2Z1bmN0aW9uIGsoZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wO24tLSkiZnVuY3Rpb24iPT10eXBlb2YgZVtuXSYmKGVbbl09cChlW25dLHQrIl8iK24pKTtyZXR1cm4gZX1mdW5jdGlvbiBiKGUpe3JldHVybiFlfHwhMSE9PWUud3JpdGFibGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0JiZ2b2lkIDA9PT1lLnNldCl9dmFyIFQ9InVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHc9ISgibnciaW4geSkmJnZvaWQgMCE9PXkucHJvY2VzcyYmIltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbCh5LnByb2Nlc3MpLEU9IXcmJiFUJiYhKCFkfHwhZy5IVE1MRWxlbWVudCkseD12b2lkIDAhPT15LnByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoeS5wcm9jZXNzKSYmIVQmJiEoIWR8fCFnLkhUTUxFbGVtZW50KSxPPXt9LFM9ZnVuY3Rpb24oZSl7aWYoZT1lfHx5LmV2ZW50KXt2YXIgdD1PW2UudHlwZV07dHx8KHQ9T1tlLnR5cGVdPXYoIk9OX1BST1BFUlRZIitlLnR5cGUpKTt2YXIgbj0odGhpc3x8ZS50YXJnZXR8fHkpW3RdLHI9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHZvaWQgMD09cnx8cnx8ZS5wcmV2ZW50RGVmYXVsdCgpLHJ9fTtmdW5jdGlvbiBEKG4scixvKXt2YXIgaT1lKG4scik7aWYoIWkmJm8mJmUobyxyKSYmKGk9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksaSYmaS5jb25maWd1cmFibGUpe2RlbGV0ZSBpLndyaXRhYmxlLGRlbGV0ZSBpLnZhbHVlO3ZhciBhPWkuZ2V0LGM9aS5zZXQsdT1yLnN1YnN0cigyKSxzPU9bdV07c3x8KHM9T1t1XT12KCJPTl9QUk9QRVJUWSIrdSkpLGkuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dHx8biE9PXl8fCh0PXkpLHQmJih0W3NdJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIodSxTKSxjJiZjLmFwcGx5KHQsbSksImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRbc109ZSx0LmFkZEV2ZW50TGlzdGVuZXIodSxTLCExKSk6dFtzXT1udWxsKX0saS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKGV8fG4hPT15fHwoZT15KSwhZSlyZXR1cm4gbnVsbDt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQ7aWYoYSl7dmFyIG89YSYmYS5jYWxsKHRoaXMpO2lmKG8pcmV0dXJuIGkuc2V0LmNhbGwodGhpcyxvKSwiZnVuY3Rpb24iPT10eXBlb2YgZVtfXSYmZS5yZW1vdmVBdHRyaWJ1dGUociksb31yZXR1cm4gbnVsbH0sdChuLHIsaSl9fWZ1bmN0aW9uIGooZSx0LG4pe2lmKHQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspRChlLCJvbiIrdFtyXSxuKTtlbHNle3ZhciBvPVtdO2Zvcih2YXIgaSBpbiBlKSJvbiI9PWkuc3Vic3RyKDAsMikmJm8ucHVzaChpKTtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKylEKGUsb1thXSxuKX19dmFyIFA9digib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIFooZSl7dmFyIG49eVtlXTtpZihuKXt5W3YoZSldPW4seVtlXT1mdW5jdGlvbigpe3ZhciB0PWsoYXJndW1lbnRzLGUpO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnRoaXNbUF09bmV3IG47YnJlYWs7Y2FzZSAxOnRoaXNbUF09bmV3IG4odFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbUF09bmV3IG4odFswXSx0WzFdKTticmVhaztjYXNlIDM6dGhpc1tQXT1uZXcgbih0WzBdLHRbMV0sdFsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbUF09bmV3IG4odFswXSx0WzFdLHRbMl0sdFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sTSh5W2VdLG4pO3ZhciByLG89bmV3IG4oZnVuY3Rpb24oKXt9KTtmb3IociBpbiBvKSJYTUxIdHRwUmVxdWVzdCI9PT1lJiYicmVzcG9uc2VCbG9iIj09PXJ8fGZ1bmN0aW9uKG4peyJmdW5jdGlvbiI9PXR5cGVvZiBvW25dP3lbZV0ucHJvdG90eXBlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbUF1bbl0uYXBwbHkodGhpc1tQXSxhcmd1bWVudHMpfTp0KHlbZV0ucHJvdG90eXBlLG4se3NldDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdD8odGhpc1tQXVtuXT1wKHQsZSsiLiIrbiksTSh0aGlzW1BdW25dLHQpKTp0aGlzW1BdW25dPXR9LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1BdW25dfX0pfShyKTtmb3IociBpbiBuKSJwcm90b3R5cGUiIT09ciYmbi5oYXNPd25Qcm9wZXJ0eShyKSYmKHlbZV1bcl09bltyXSl9fWZ1bmN0aW9uIHoodCxyLG8pe2Zvcih2YXIgaT10O2kmJiFpLmhhc093blByb3BlcnR5KHIpOylpPW4oaSk7IWkmJnRbcl0mJihpPXQpO3ZhciBhLGM9dihyKTtpZihpJiYhKGE9aVtjXSkmJihhPWlbY109aVtyXSxiKGkmJmUoaSxyKSkpKXt2YXIgdT1vKGEsYyxyKTtpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcyxhcmd1bWVudHMpfSxNKGlbcl0sYSl9cmV0dXJuIGF9ZnVuY3Rpb24gTShlLHQpe2VbdigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT10fXZhciBDPSExLFI9ITE7ZnVuY3Rpb24gSSgpe2lmKEMpcmV0dXJuIFI7Qz0hMDt0cnl7dmFyIGU9Zy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybi0xPT09ZS5pbmRleE9mKCJNU0lFICIpJiYtMT09PWUuaW5kZXhPZigiVHJpZGVudC8iKSYmLTE9PT1lLmluZGV4T2YoIkVkZ2UvIil8fChSPSEwKSxSfWNhdGNoKGUpe319Wm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixmdW5jdGlvbihlKXt2YXIgdD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsbj12KCJPcmlnaW5hbERlbGVnYXRlIikscj12KCJQcm9taXNlIiksbz12KCJFcnJvciIpLGk9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGk9dGhpc1tuXTtpZihpKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3QuYXBwbHkodGhpc1tuXSxhcmd1bWVudHMpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIGE9ZVtyXTtpZihhKXJldHVybiB0LmFwcGx5KGEsYXJndW1lbnRzKX1pZih0aGlzPT09RXJyb3Ipe3ZhciBjPWVbb107aWYoYylyZXR1cm4gdC5hcHBseShjLGFyZ3VtZW50cyl9fXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aVtuXT10LEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1pO3ZhciBhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZT8iW29iamVjdCBQcm9taXNlXSI6YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIEY9e3VzZUc6ITB9LEw9e30scT17fSxBPS9eX196b25lX3N5bWJvbF9fKFx3KykodHJ1ZXxmYWxzZSkkLyxIPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiO2Z1bmN0aW9uIE4oZSx0LHIpe3ZhciBvPXImJnIuYWRkfHxpLGM9ciYmci5ybXx8YSx1PXImJnIubGlzdGVuZXJzfHwiZXZlbnRMaXN0ZW5lcnMiLHA9ciYmci5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsaD12KG8pLGQ9Ii4iK28rIjoiLGc9InByZXBlbmRMaXN0ZW5lciIseT0iLiIrZysiOiIsXz1mdW5jdGlvbihlLHQsbil7aWYoIWUuaXNSZW1vdmVkKXt2YXIgcj1lLmNhbGxiYWNrOyJvYmplY3QiPT10eXBlb2YgciYmci5oYW5kbGVFdmVudCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuaGFuZGxlRXZlbnQoZSl9LGUub3JpZ2luYWxEZWxlZ2F0ZT1yKSxlLmludm9rZShlLHQsW25dKTt2YXIgbz1lLm9wdGlvbnM7byYmIm9iamVjdCI9PXR5cGVvZiBvJiZvLm9uY2UmJnRbY10uY2FsbCh0LG4udHlwZSxlLm9yaWdpbmFsRGVsZWdhdGU/ZS5vcmlnaW5hbERlbGVnYXRlOmUuY2FsbGJhY2ssbyl9fSxtPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8ZS5ldmVudCl7dmFyIG49dGhpc3x8dC50YXJnZXR8fGUscj1uW0xbdC50eXBlXVtsXV07aWYocilpZigxPT09ci5sZW5ndGgpXyhyWzBdLG4sdCk7ZWxzZSBmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoJiYoIXR8fCEwIT09dFtIXSk7aSsrKV8ob1tpXSxuLHQpfX0saz1mdW5jdGlvbih0KXtpZih0PXR8fGUuZXZlbnQpe3ZhciBuPXRoaXN8fHQudGFyZ2V0fHxlLHI9bltMW3QudHlwZV1bc11dO2lmKHIpaWYoMT09PXIubGVuZ3RoKV8oclswXSxuLHQpO2Vsc2UgZm9yKHZhciBvPXIuc2xpY2UoKSxpPTA7aTxvLmxlbmd0aCYmKCF0fHwhMCE9PXRbSF0pO2krKylfKG9baV0sbix0KX19O2Z1bmN0aW9uIGIodCxyKXtpZighdClyZXR1cm4hMTt2YXIgaT0hMDtyJiZ2b2lkIDAhPT1yLnVzZUcmJihpPXIudXNlRyk7dmFyIGE9ciYmci52aCxfPSEwO3ImJnZvaWQgMCE9PXIuY2hrRHVwJiYoXz1yLmNoa0R1cCk7dmFyIGI9ITE7ciYmdm9pZCAwIT09ci5ydCYmKGI9ci5ydCk7Zm9yKHZhciBUPXQ7VCYmIVQuaGFzT3duUHJvcGVydHkobyk7KVQ9bihUKTtpZighVCYmdFtvXSYmKFQ9dCksIVQpcmV0dXJuITE7aWYoVFtoXSlyZXR1cm4hMTt2YXIgdyxFPXt9LHg9VFtoXT1UW29dLE89VFt2KGMpXT1UW2NdLFM9VFt2KHUpXT1UW3VdLEQ9VFt2KHApXT1UW3BdO3ImJnIucHJlcGVuZCYmKHc9VFt2KHIucHJlcGVuZCldPVRbci5wcmVwZW5kXSk7dmFyIGo9aT9mdW5jdGlvbigpe2lmKCFFLmlzRXhpc3RpbmcpcmV0dXJuIHguY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxFLmNhcHR1cmU/azptLEUub3B0aW9ucyl9OmZ1bmN0aW9uKGUpe3JldHVybiB4LmNhbGwoRS50YXJnZXQsRS5ldmVudE5hbWUsZS5pbnZva2UsRS5vcHRpb25zKX0sUD1pP2Z1bmN0aW9uKGUpe2lmKCFlLmlzUmVtb3ZlZCl7dmFyIHQ9TFtlLmV2ZW50TmFtZV0sbj12b2lkIDA7dCYmKG49dFtlLmNhcHR1cmU/czpsXSk7dmFyIHI9biYmZS50YXJnZXRbbl07aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylpZihyW29dPT09ZSl7ci5zcGxpY2UobywxKSxlLmlzUmVtb3ZlZD0hMCwwPT09ci5sZW5ndGgmJihlLmFsbFJlbW92ZWQ9ITAsZS50YXJnZXRbbl09bnVsbCk7YnJlYWt9fWlmKGUuYWxsUmVtb3ZlZClyZXR1cm4gTy5jYWxsKGUudGFyZ2V0LGUuZXZlbnROYW1lLGUuY2FwdHVyZT9rOm0sZS5vcHRpb25zKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE8uY2FsbChlLnRhcmdldCxlLmV2ZW50TmFtZSxlLmludm9rZSxlLm9wdGlvbnMpfSxaPXImJnIuZGlmZj9yLmRpZmY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgdDtyZXR1cm4iZnVuY3Rpb24iPT09biYmZS5jYWxsYmFjaz09PXR8fCJvYmplY3QiPT09biYmZS5vcmlnaW5hbERlbGVnYXRlPT09dH0sej1ab25lW1pvbmUuX19zeW1ib2xfXygiQkxBQ0tfTElTVEVEX0VWRU5UUyIpXSxDPWZ1bmN0aW9uKHQsbixyLG8sYyx1KXtyZXR1cm4gdm9pZCAwPT09YyYmKGM9ITEpLHZvaWQgMD09PXUmJih1PSExKSxmdW5jdGlvbigpe3ZhciBwPXRoaXN8fGUsaD1hcmd1bWVudHNbMV07aWYoIWgpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB2PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBoKXtpZighaC5oYW5kbGVFdmVudClyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dj0hMH1pZighYXx8YSh0LGgscCxhcmd1bWVudHMpKXt2YXIgZCxnPWFyZ3VtZW50c1swXSx5PWFyZ3VtZW50c1syXTtpZih6KWZvcih2YXIgbT0wO208ei5sZW5ndGg7bSsrKWlmKGc9PT16W21dKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaz0hMTt2b2lkIDA9PT15P2Q9ITE6ITA9PT15P2Q9ITA6ITE9PT15P2Q9ITE6KGQ9ISF5JiYhIXkuY2FwdHVyZSxrPSEheSYmISF5Lm9uY2UpO3ZhciBiLFQ9Wm9uZS5jdXJyZW50LHc9TFtnXTtpZih3KWI9d1tkP3M6bF07ZWxzZXt2YXIgeD1mKyhnK2wpLE89ZisoZytzKTtMW2ddPXt9LExbZ11bbF09eCxMW2ddW3NdPU8sYj1kP086eH12YXIgUyxEPXBbYl0saj0hMTtpZihEKXtpZihqPSEwLF8pZm9yKG09MDttPEQubGVuZ3RoO20rKylpZihaKERbbV0saCkpcmV0dXJufWVsc2UgRD1wW2JdPVtdO3ZhciBQPXAuY29uc3RydWN0b3IubmFtZSxNPXFbUF07TSYmKFM9TVtnXSksU3x8KFM9UCtuK2cpLEUub3B0aW9ucz15LGsmJihFLm9wdGlvbnMub25jZT0hMSksRS50YXJnZXQ9cCxFLmNhcHR1cmU9ZCxFLmV2ZW50TmFtZT1nLEUuaXNFeGlzdGluZz1qO3ZhciBDPWk/RjpudWxsO0MmJihDLnRhc2tEYXRhPUUpO3ZhciBSPVQuc2NoZWR1bGVFdmVudFRhc2soUyxoLEMscixvKTtyZXR1cm4gRS50YXJnZXQ9bnVsbCxDJiYoQy50YXNrRGF0YT1udWxsKSxrJiYoeS5vbmNlPSEwKSxSLm9wdGlvbnM9eSxSLnRhcmdldD1wLFIuY2FwdHVyZT1kLFIuZXZlbnROYW1lPWcsdiYmKFIub3JpZ2luYWxEZWxlZ2F0ZT1oKSx1P0QudW5zaGlmdChSKTpELnB1c2goUiksYz9wOnZvaWQgMH19fTtyZXR1cm4gVFtvXT1DKHgsZCxqLFAsYiksdyYmKFRbZ109Qyh3LHksZnVuY3Rpb24oZSl7cmV0dXJuIHcuY2FsbChFLnRhcmdldCxFLmV2ZW50TmFtZSxlLmludm9rZSxFLm9wdGlvbnMpfSxQLGIsITApKSxUW2NdPWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzfHxlLHI9YXJndW1lbnRzWzBdLG89YXJndW1lbnRzWzJdO3Q9dm9pZCAwIT09byYmKCEwPT09b3x8ITEhPT1vJiYhIW8mJiEhby5jYXB0dXJlKTt2YXIgaT1hcmd1bWVudHNbMV07aWYoIWkpcmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhfHxhKE8saSxuLGFyZ3VtZW50cykpe3ZhciBjLHU9TFtyXTt1JiYoYz11W3Q/czpsXSk7dmFyIGY9YyYmbltjXTtpZihmKWZvcih2YXIgcD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgaD1mW3BdO2lmKFooaCxpKSlyZXR1cm4gZi5zcGxpY2UocCwxKSxoLmlzUmVtb3ZlZD0hMCwwPT09Zi5sZW5ndGgmJihoLmFsbFJlbW92ZWQ9ITAsbltjXT1udWxsKSxoLnpvbmUuY2FuY2VsVGFzayhoKSxiP246dm9pZCAwfXJldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFRbdV09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sbj1XKHRoaXN8fGUsYXJndW1lbnRzWzBdKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07dC5wdXNoKG8ub3JpZ2luYWxEZWxlZ2F0ZT9vLm9yaWdpbmFsRGVsZWdhdGU6by5jYWxsYmFjayl9cmV0dXJuIHR9LFRbcF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzfHxlLG49YXJndW1lbnRzWzBdO2lmKG4pe3ZhciByPUxbbl07aWYocil7dmFyIG89dFtyW2xdXSxpPXRbcltzXV07aWYobyl7dmFyIGE9by5zbGljZSgpO2ZvcihoPTA7aDxhLmxlbmd0aDtoKyspdGhpc1tjXS5jYWxsKHRoaXMsbiwodT1hW2hdKS5vcmlnaW5hbERlbGVnYXRlP3Uub3JpZ2luYWxEZWxlZ2F0ZTp1LmNhbGxiYWNrLHUub3B0aW9ucyl9aWYoaSlmb3IoYT1pLnNsaWNlKCksaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgdTt0aGlzW2NdLmNhbGwodGhpcyxuLCh1PWFbaF0pLm9yaWdpbmFsRGVsZWdhdGU/dS5vcmlnaW5hbERlbGVnYXRlOnUuY2FsbGJhY2ssdS5vcHRpb25zKX19fWVsc2V7Zm9yKHZhciBmPU9iamVjdC5rZXlzKHQpLGg9MDtoPGYubGVuZ3RoO2grKyl7dmFyIHY9QS5leGVjKGZbaF0pLGQ9diYmdlsxXTtkJiYicmVtb3ZlTGlzdGVuZXIiIT09ZCYmdGhpc1twXS5jYWxsKHRoaXMsZCl9dGhpc1twXS5jYWxsKHRoaXMsInJlbW92ZUxpc3RlbmVyIil9aWYoYilyZXR1cm4gdGhpc30sTShUW29dLHgpLE0oVFtjXSxPKSxEJiZNKFRbcF0sRCksUyYmTShUW3VdLFMpLCEwfWZvcih2YXIgVD1bXSx3PTA7dzx0Lmxlbmd0aDt3KyspVFt3XT1iKHRbd10scik7cmV0dXJuIFR9ZnVuY3Rpb24gVyhlLHQpe3ZhciBuPVtdO2Zvcih2YXIgciBpbiBlKXt2YXIgbz1BLmV4ZWMociksaT1vJiZvWzFdO2lmKGkmJighdHx8aT09PXQpKXt2YXIgYT1lW3JdO2lmKGEpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspbi5wdXNoKGFbY10pfX1yZXR1cm4gbn12YXIgWD12KCJ6b25lVGFzayIpO2Z1bmN0aW9uIEsoZSx0LG4scil7dmFyIG89bnVsbCxpPW51bGw7bis9cjt2YXIgYT17fTtmdW5jdGlvbiBjKHQpe3ZhciBuPXQuZGF0YTtyZXR1cm4gbi5hcmdzWzBdPWZ1bmN0aW9uKCl7dHJ5e3QuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e3QuZGF0YSYmdC5kYXRhLmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIG4uaGFuZGxlSWQ/ZGVsZXRlIGFbbi5oYW5kbGVJZF06bi5oYW5kbGVJZCYmKG4uaGFuZGxlSWRbWF09bnVsbCkpfX0sbi5oYW5kbGVJZD1vLmFwcGx5KGUsbi5hcmdzKSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGkoZS5kYXRhLmhhbmRsZUlkKX1vPXooZSx0Kz1yLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihvLGkpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpWzBdKXt2YXIgcz1oKHQsaVswXSx7aGFuZGxlSWQ6bnVsbCxpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1yLGRlbGF5OiJUaW1lb3V0Ij09PXJ8fCJJbnRlcnZhbCI9PT1yP2lbMV18fDA6bnVsbCxhcmdzOml9LGMsdSk7aWYoIXMpcmV0dXJuIHM7dmFyIGw9cy5kYXRhLmhhbmRsZUlkO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9hW2xdPXM6bCYmKGxbWF09cyksbCYmbC5yZWYmJmwudW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIGwudW5yZWYmJihzLnJlZj1sLnJlZi5iaW5kKGwpLHMudW5yZWY9bC51bnJlZi5iaW5kKGwpKSwibnVtYmVyIj09dHlwZW9mIGx8fGw/bDpzfXJldHVybiBuLmFwcGx5KGUsaSl9fSksaT16KGUsbixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgbyxpPXJbMF07Im51bWJlciI9PXR5cGVvZiBpP289YVtpXToobz1pJiZpW1hdKXx8KG89aSksbyYmInN0cmluZyI9PXR5cGVvZiBvLnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1vLnN0YXRlJiYoby5jYW5jZWxGbiYmby5kYXRhLmlzUGVyaW9kaWN8fDA9PT1vLnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgaT9kZWxldGUgYVtpXTppJiYoaVtYXT1udWxsKSxvLnpvbmUuY2FuY2VsVGFzayhvKSk6dC5hcHBseShlLHIpfX0pfXZhciBVPU9iamVjdFt2KCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksQj1PYmplY3RbdigiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsWT1PYmplY3QuY3JlYXRlLEo9digidW5jb25maWd1cmFibGVzIik7ZnVuY3Rpb24gVihlLHQpe3JldHVybiBlJiZlW0pdJiZlW0pdW3RdfWZ1bmN0aW9uIEcoZSx0LG4pe3JldHVybiBPYmplY3QuaXNGcm96ZW4obil8fChuLmNvbmZpZ3VyYWJsZT0hMCksbi5jb25maWd1cmFibGV8fChlW0pdfHxPYmplY3QuaXNGcm96ZW4oZSl8fFUoZSxKLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLGVbSl0mJihlW0pdW3RdPSEwKSksbn1mdW5jdGlvbiBRKGUsdCxuLHIpe3RyeXtyZXR1cm4gVShlLHQsbil9Y2F0Y2goaSl7aWYoIW4uY29uZmlndXJhYmxlKXRocm93IGk7dm9pZCAwPT09cj9kZWxldGUgbi5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGU9cjt0cnl7cmV0dXJuIFUoZSx0LG4pfWNhdGNoKHIpe3ZhciBvPW51bGw7dHJ5e289SlNPTi5zdHJpbmdpZnkobil9Y2F0Y2goZSl7bz1uLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciK3QrIicgd2l0aCBkZXNjcmlwdG9yICciK28rIicgb24gb2JqZWN0ICciK2UrIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiK3IpfX19dmFyICQ9WyJhYnNvbHV0ZWRldmljZW9yaWVudGF0aW9uIiwiYWZ0ZXJpbnB1dCIsImFmdGVycHJpbnQiLCJhcHBpbnN0YWxsZWQiLCJiZWZvcmVpbnN0YWxscHJvbXB0IiwiYmVmb3JlcHJpbnQiLCJiZWZvcmV1bmxvYWQiLCJkZXZpY2VsaWdodCIsImRldmljZW1vdGlvbiIsImRldmljZW9yaWVudGF0aW9uIiwiZGV2aWNlb3JpZW50YXRpb25hYnNvbHV0ZSIsImRldmljZXByb3hpbWl0eSIsImhhc2hjaGFuZ2UiLCJsYW5ndWFnZWNoYW5nZSIsIm1lc3NhZ2UiLCJtb3piZWZvcmVwYWludCIsIm9mZmxpbmUiLCJvbmxpbmUiLCJwYWludCIsInBhZ2VzaG93IiwicGFnZWhpZGUiLCJwb3BzdGF0ZSIsInJlamVjdGlvbmhhbmRsZWQiLCJzdG9yYWdlIiwidW5oYW5kbGVkcmVqZWN0aW9uIiwidW5sb2FkIiwidXNlcnByb3hpbWl0eSIsInZyZGlzcGx5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLGVlPVsiZW5jcnlwdGVkIiwid2FpdGluZ2ZvcmtleSIsIm1zbmVlZGtleSIsIm1vemludGVycnVwdGJlZ2luIiwibW96aW50ZXJydXB0ZW5kIl0sdGU9WyJsb2FkIl0sbmU9WyJibHVyIiwiZXJyb3IiLCJmb2N1cyIsImxvYWQiLCJyZXNpemUiLCJzY3JvbGwiLCJtZXNzYWdlZXJyb3IiXSxyZT1bImJvdW5jZSIsImZpbmlzaCIsInN0YXJ0Il0sb2U9WyJsb2Fkc3RhcnQiLCJwcm9ncmVzcyIsImFib3J0IiwiZXJyb3IiLCJsb2FkIiwicHJvZ3Jlc3MiLCJ0aW1lb3V0IiwibG9hZGVuZCIsInJlYWR5c3RhdGVjaGFuZ2UiXSxpZT1bInVwZ3JhZGVuZWVkZWQiLCJjb21wbGV0ZSIsImFib3J0Iiwic3VjY2VzcyIsImVycm9yIiwiYmxvY2tlZCIsInZlcnNpb25jaGFuZ2UiLCJjbG9zZSJdLGFlPVsiY2xvc2UiLCJlcnJvciIsIm9wZW4iLCJtZXNzYWdlIl0sY2U9WyJlcnJvciIsIm1lc3NhZ2UiXSx1ZT1bImFib3J0IiwiYW5pbWF0aW9uY2FuY2VsIiwiYW5pbWF0aW9uZW5kIiwiYW5pbWF0aW9uaXRlcmF0aW9uIiwiYXV4Y2xpY2siLCJiZWZvcmVpbnB1dCIsImJsdXIiLCJjYW5jZWwiLCJjYW5wbGF5IiwiY2FucGxheXRocm91Z2giLCJjaGFuZ2UiLCJjb21wb3NpdGlvbnN0YXJ0IiwiY29tcG9zaXRpb251cGRhdGUiLCJjb21wb3NpdGlvbmVuZCIsImN1ZWNoYW5nZSIsImNsaWNrIiwiY2xvc2UiLCJjb250ZXh0bWVudSIsImN1cmVjaGFuZ2UiLCJkYmxjbGljayIsImRyYWciLCJkcmFnZW5kIiwiZHJhZ2VudGVyIiwiZHJhZ2V4aXQiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkdXJhdGlvbmNoYW5nZSIsImVtcHRpZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJmb2N1c2luIiwiZm9jdXNvdXQiLCJnb3Rwb2ludGVyY2FwdHVyZSIsImlucHV0IiwiaW52YWxpZCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwibG9hZCIsImxvYWRzdGFydCIsImxvYWRlZGRhdGEiLCJsb2FkZWRtZXRhZGF0YSIsImxvc3Rwb2ludGVyY2FwdHVyZSIsIm1vdXNlZG93biIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwibW91c2V3aGVlbCIsIm9yaWVudGF0aW9uY2hhbmdlIiwicGF1c2UiLCJwbGF5IiwicGxheWluZyIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyZG93biIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsInBvaW50ZXJsb2NrY2hhbmdlIiwibW96cG9pbnRlcmxvY2tjaGFuZ2UiLCJ3ZWJraXRwb2ludGVybG9ja2VyY2hhbmdlIiwicG9pbnRlcmxvY2tlcnJvciIsIm1venBvaW50ZXJsb2NrZXJyb3IiLCJ3ZWJraXRwb2ludGVybG9ja2Vycm9yIiwicG9pbnRlcm1vdmUiLCJwb2ludG91dCIsInBvaW50ZXJvdmVyIiwicG9pbnRlcnVwIiwicHJvZ3Jlc3MiLCJyYXRlY2hhbmdlIiwicmVzZXQiLCJyZXNpemUiLCJzY3JvbGwiLCJzZWVrZWQiLCJzZWVraW5nIiwic2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIiwic2VsZWN0c3RhcnQiLCJzaG93Iiwic29ydCIsInN0YWxsZWQiLCJzdWJtaXQiLCJzdXNwZW5kIiwidGltZXVwZGF0ZSIsInZvbHVtZWNoYW5nZSIsInRvdWNoY2FuY2VsIiwidG91Y2htb3ZlIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIiwidHJhbnNpdGlvbmNhbmNlbCIsInRyYW5zaXRpb25lbmQiLCJ3YWl0aW5nIiwid2hlZWwiXS5jb25jYXQoWyJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIndlYmdsY29udGV4dGxvc3QiLCJ3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yIl0sWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLFsidG9nZ2xlIl0sWyJhZnRlcnNjcmlwdGV4ZWN1dGUiLCJiZWZvcmVzY3JpcHRleGVjdXRlIiwiRE9NQ29udGVudExvYWRlZCIsImZ1bGxzY3JlZW5jaGFuZ2UiLCJtb3pmdWxsc2NyZWVuY2hhbmdlIiwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsIm1zZnVsbHNjcmVlbmNoYW5nZSIsImZ1bGxzY3JlZW5lcnJvciIsIm1vemZ1bGxzY3JlZW5lcnJvciIsIndlYmtpdGZ1bGxzY3JlZW5lcnJvciIsIm1zZnVsbHNjcmVlbmVycm9yIiwicmVhZHlzdGF0ZWNoYW5nZSIsInZpc2liaWxpdHljaGFuZ2UiXSwkLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLFsiYWN0aXZhdGUiLCJhZnRlcnVwZGF0ZSIsImFyaWFyZXF1ZXN0IiwiYmVmb3JlYWN0aXZhdGUiLCJiZWZvcmVkZWFjdGl2YXRlIiwiYmVmb3JlZWRpdGZvY3VzIiwiYmVmb3JldXBkYXRlIiwiY2VsbGNoYW5nZSIsImNvbnRyb2xzZWxlY3QiLCJkYXRhYXZhaWxhYmxlIiwiZGF0YXNldGNoYW5nZWQiLCJkYXRhc2V0Y29tcGxldGUiLCJlcnJvcnVwZGF0ZSIsImZpbHRlcmNoYW5nZSIsImxheW91dGNvbXBsZXRlIiwibG9zZWNhcHR1cmUiLCJtb3ZlIiwibW92ZWVuZCIsIm1vdmVzdGFydCIsInByb3BlcnR5Y2hhbmdlIiwicmVzaXplZW5kIiwicmVzaXplc3RhcnQiLCJyb3dlbnRlciIsInJvd2V4aXQiLCJyb3dzZGVsZXRlIiwicm93c2luc2VydGVkIiwiY29tbWFuZCIsImNvbXBhc3NuZWVkc2NhbGlicmF0aW9uIiwiZGVhY3RpdmF0ZSIsImhlbHAiLCJtc2NvbnRlbnR6b29tIiwibXNtYW5pcHVsYXRpb25zdGF0ZWNoYW5nZWQiLCJtc2dlc3R1cmVjaGFuZ2UiLCJtc2dlc3R1cmVkb3VibGV0YXAiLCJtc2dlc3R1cmVlbmQiLCJtc2dlc3R1cmVob2xkIiwibXNnZXN0dXJlc3RhcnQiLCJtc2dlc3R1cmV0YXAiLCJtc2dvdHBvaW50ZXJjYXB0dXJlIiwibXNpbmVydGlhc3RhcnQiLCJtc2xvc3Rwb2ludGVyY2FwdHVyZSIsIm1zcG9pbnRlcmNhbmNlbCIsIm1zcG9pbnRlcmRvd24iLCJtc3BvaW50ZXJlbnRlciIsIm1zcG9pbnRlcmhvdmVyIiwibXNwb2ludGVybGVhdmUiLCJtc3BvaW50ZXJtb3ZlIiwibXNwb2ludGVyb3V0IiwibXNwb2ludGVyb3ZlciIsIm1zcG9pbnRlcnVwIiwicG9pbnRlcm91dCIsIm1zc2l0ZW1vZGVqdW1wbGlzdGl0ZW1yZW1vdmVkIiwibXN0aHVtYm5haWxjbGljayIsInN0b3AiLCJzdG9yYWdlY29tbWl0Il0pO2Z1bmN0aW9uIHNlKGUsdCxuLHIpe2UmJmooZSxmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIHQ7dmFyIHI9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFyZ2V0PT09ZX0pO2lmKCFyfHwwPT09ci5sZW5ndGgpcmV0dXJuIHQ7dmFyIG89clswXS5pZ25vcmVQcm9wZXJ0aWVzO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4tMT09PW8uaW5kZXhPZihlKX0pfShlLHQsbikscil9ZnVuY3Rpb24gbGUoYyx1KXtpZighd3x8eCl7dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQ7aWYoZnVuY3Rpb24oKXtpZigoRXx8eCkmJiFlKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiYidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe3ZhciBuPWUoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihuJiYhbi5jb25maWd1cmFibGUpcmV0dXJuITF9dmFyIHI9WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLG89ZShyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiKTtpZihvKXt0KHIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBpPSEhKGM9bmV3IFhNTEh0dHBSZXF1ZXN0KS5vbnJlYWR5c3RhdGVjaGFuZ2U7cmV0dXJuIHQociwib25yZWFkeXN0YXRlY2hhbmdlIixvfHx7fSksaX12YXIgYT12KCJmYWtlIik7dChyLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1thXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbYV09ZX19KTt2YXIgYyx1PWZ1bmN0aW9uKCl7fTtyZXR1cm4oYz1uZXcgWE1MSHR0cFJlcXVlc3QpLm9ucmVhZHlzdGF0ZWNoYW5nZT11LGk9Y1thXT09PXUsYy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpfSgpKXt2YXIgbD11Ll9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztpZihFKXt2YXIgZj13aW5kb3c7c2UoZix1ZS5jb25jYXQoWyJtZXNzYWdlZXJyb3IiXSksbCxuKGYpKSxzZShEb2N1bWVudC5wcm90b3R5cGUsdWUsbCksdm9pZCAwIT09Zi5TVkdFbGVtZW50JiZzZShmLlNWR0VsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEVsZW1lbnQucHJvdG90eXBlLHVlLGwpLHNlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx1ZSxsKSxzZShIVE1MTWVkaWFFbGVtZW50LnByb3RvdHlwZSxlZSxsKSxzZShIVE1MRnJhbWVTZXRFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEJvZHlFbGVtZW50LnByb3RvdHlwZSwkLmNvbmNhdChuZSksbCksc2UoSFRNTEZyYW1lRWxlbWVudC5wcm90b3R5cGUsdGUsbCksc2UoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLHRlLGwpO3ZhciBoPWYuSFRNTE1hcnF1ZWVFbGVtZW50O2gmJnNlKGgucHJvdG90eXBlLHJlLGwpO3ZhciBkPWYuV29ya2VyO2QmJnNlKGQucHJvdG90eXBlLGNlLGwpfXNlKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxvZSxsKTt2YXIgZz11LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7ZyYmc2UoZyYmZy5wcm90b3R5cGUsb2UsbCksInVuZGVmaW5lZCIhPXR5cGVvZiBJREJJbmRleCYmKHNlKElEQkluZGV4LnByb3RvdHlwZSxpZSxsKSxzZShJREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJPcGVuREJSZXF1ZXN0LnByb3RvdHlwZSxpZSxsKSxzZShJREJEYXRhYmFzZS5wcm90b3R5cGUsaWUsbCksc2UoSURCVHJhbnNhY3Rpb24ucHJvdG90eXBlLGllLGwpLHNlKElEQkN1cnNvci5wcm90b3R5cGUsaWUsbCkpLHMmJnNlKFdlYlNvY2tldC5wcm90b3R5cGUsYWUsbCl9ZWxzZSFmdW5jdGlvbigpe2Zvcih2YXIgZT1mdW5jdGlvbihlKXt2YXIgdD11ZVtlXSxuPSJvbiIrdDtzZWxmLmFkZEV2ZW50TGlzdGVuZXIodCxmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS50YXJnZXQ7Zm9yKHI9bz9vLmNvbnN0cnVjdG9yLm5hbWUrIi4iK246InVua25vd24uIituO287KW9bbl0mJiFvW25dW2ZlXSYmKCh0PXAob1tuXSxyKSlbZmVdPW9bbl0sb1tuXT10KSxvPW8ucGFyZW50RWxlbWVudH0sITApfSx0PTA7dDx1ZS5sZW5ndGg7dCsrKWUodCl9KCksWigiWE1MSHR0cFJlcXVlc3QiKSxzJiZmdW5jdGlvbih0LG4pe3ZhciBjPW4uV2ViU29ja2V0O24uRXZlbnRUYXJnZXR8fE4obixbYy5wcm90b3R5cGVdKSxuLldlYlNvY2tldD1mdW5jdGlvbih0LG4pe3ZhciB1LHMsbD1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IGModCxuKTpuZXcgYyh0KSxmPWUobCwib25tZXNzYWdlIik7cmV0dXJuIGYmJiExPT09Zi5jb25maWd1cmFibGU/KHU9cihsKSxzPWwsW2ksYSwic2VuZCIsImNsb3NlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt1W2VdPWZ1bmN0aW9uKCl7dmFyIHQ9by5jYWxsKGFyZ3VtZW50cyk7aWYoZT09PWl8fGU9PT1hKXt2YXIgbj10Lmxlbmd0aD4wP3RbMF06dm9pZCAwO2lmKG4pe3ZhciByPVpvbmUuX19zeW1ib2xfXygiT05fUFJPUEVSVFkiK24pO2xbcl09dVtyXX19cmV0dXJuIGxbZV0uYXBwbHkobCx0KX19KSk6dT1sLGoodSxbImNsb3NlIiwiZXJyb3IiLCJtZXNzYWdlIiwib3BlbiJdLHMpLHV9O3ZhciB1PW4uV2ViU29ja2V0O2Zvcih2YXIgcyBpbiBjKXVbc109Y1tzXX0oMCx1KX19dmFyIGZlPXYoInVuYm91bmQiKTtab25lLl9fbG9hZF9wYXRjaCgidXRpbCIsZnVuY3Rpb24oZSx0LG4pe24ucGF0Y2hPblByb3BlcnRpZXM9aixuLnBhdGNoTWV0aG9kPXosbi5iaW5kQXJndW1lbnRzPWt9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihlKXtLKGUsInNldCIsImNsZWFyIiwiVGltZW91dCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbnRlcnZhbCIpLEsoZSwic2V0IiwiY2xlYXIiLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKGUpe0soZSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksSyhlLCJtb3pSZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxLKGUsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bImFsZXJ0IiwicHJvbXB0IiwiY29uZmlybSJdLHI9MDtyPG4ubGVuZ3RoO3IrKyl6KGUsbltyXSxmdW5jdGlvbihuLHIsbyl7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7cmV0dXJuIHQuY3VycmVudC5ydW4obixlLGksbyl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10Ll9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKTtlW3JdJiYodFtyXT1lW3JdKSxmdW5jdGlvbihlLHQpeyFmdW5jdGlvbihlLHQpe3ZhciBuPWUuRXZlbnQ7biYmbi5wcm90b3R5cGUmJnQucGF0Y2hNZXRob2Qobi5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dFtIXT0hMCxlJiZlLmFwcGx5KHQsbil9fSl9KGUsdCl9KGUsbiksZnVuY3Rpb24oZSx0KXt2YXIgbj0iQW5jaG9yLEFyZWEsQXVkaW8sQlIsQmFzZSxCYXNlRm9udCxCb2R5LEJ1dHRvbixDYW52YXMsQ29udGVudCxETGlzdCxEaXJlY3RvcnksRGl2LEVtYmVkLEZpZWxkU2V0LEZvbnQsRm9ybSxGcmFtZSxGcmFtZVNldCxIUixIZWFkLEhlYWRpbmcsSHRtbCxJRnJhbWUsSW1hZ2UsSW5wdXQsS2V5Z2VuLExJLExhYmVsLExlZ2VuZCxMaW5rLE1hcCxNYXJxdWVlLE1lZGlhLE1lbnUsTWV0YSxNZXRlcixNb2QsT0xpc3QsT2JqZWN0LE9wdEdyb3VwLE9wdGlvbixPdXRwdXQsUGFyYWdyYXBoLFByZSxQcm9ncmVzcyxRdW90ZSxTY3JpcHQsU2VsZWN0LFNvdXJjZSxTcGFuLFN0eWxlLFRhYmxlQ2FwdGlvbixUYWJsZUNlbGwsVGFibGVDb2wsVGFibGUsVGFibGVSb3csVGFibGVTZWN0aW9uLFRleHRBcmVhLFRpdGxlLFRyYWNrLFVMaXN0LFVua25vd24sVmlkZW8iLHI9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLG89W10saT1lLnd0ZixhPW4uc3BsaXQoIiwiKTtpP289YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIkhUTUwiK2UrIkVsZW1lbnQifSkuY29uY2F0KHIpOmUuRXZlbnRUYXJnZXQ/by5wdXNoKCJFdmVudFRhcmdldCIpOm89cjtmb3IodmFyIGM9ZS5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEsdT1lLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEscD1JKCksaD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix2PTA7djx1ZS5sZW5ndGg7disrKXt2YXIgZD1mKygoaz11ZVt2XSkrbCksZz1mKyhrK3MpO0xba109e30sTFtrXVtsXT1kLExba11bc109Z31mb3Iodj0wO3Y8bi5sZW5ndGg7disrKWZvcih2YXIgeT1hW3ZdLF89cVt5XT17fSxtPTA7bTx1ZS5sZW5ndGg7bSsrKXt2YXIgaztfW2s9dWVbbV1dPXkrIi5hZGRFdmVudExpc3RlbmVyOiIra312YXIgYj1bXTtmb3Iodj0wO3Y8by5sZW5ndGg7disrKXt2YXIgVD1lW29bdl1dO2IucHVzaChUJiZULnByb3RvdHlwZSl9TihlLGIse3ZoOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFjJiZwKXtpZih1KXRyeXt2YXIgbztpZigiW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIj09PShvPXQudG9TdHJpbmcoKSl8fG89PWgpcmV0dXJuIGUuYXBwbHkobixyKSwhMX1jYXRjaCh0KXtyZXR1cm4gZS5hcHBseShuLHIpLCExfWVsc2UgaWYoIltvYmplY3QgRnVuY3Rpb25XcmFwcGVyXSI9PT0obz10LnRvU3RyaW5nKCkpfHxvPT1oKXJldHVybiBlLmFwcGx5KG4sciksITF9ZWxzZSBpZih1KXRyeXt0LnRvU3RyaW5nKCl9Y2F0Y2godCl7cmV0dXJuIGUuYXBwbHkobixyKSwhMX1yZXR1cm4hMH19KSx0LnBhdGNoRXZlbnRUYXJnZXQ9Tn0oZSxuKTt2YXIgbz1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7byYmby5wcm90b3R5cGUmJm4ucGF0Y2hFdmVudFRhcmdldChlLFtvLnByb3RvdHlwZV0pLFooIk11dGF0aW9uT2JzZXJ2ZXIiKSxaKCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiksWigiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKSxaKCJGaWxlUmVhZGVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgib25fcHJvcGVydHkiLGZ1bmN0aW9uKHQsbixyKXtsZSgwLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbil7aWYoVihlLHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3QrIicgb2YgIitlKTt2YXIgcj1uLmNvbmZpZ3VyYWJsZTtyZXR1cm4icHJvdG90eXBlIiE9PXQmJihuPUcoZSx0LG4pKSxRKGUsdCxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sdFtuXSl9KSxlfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0fHxPYmplY3QuaXNGcm96ZW4odCl8fE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1HKGUsbix0W25dKX0pLFkoZSx0KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcj1mdW5jdGlvbihlLHQpe3ZhciBuPUIoZSx0KTtyZXR1cm4gVihlLHQpJiYobi5jb25maWd1cmFibGU9ITEpLG59LGZ1bmN0aW9uKG4pe2lmKChFfHx4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiB0LmRvY3VtZW50KXt2YXIgcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQsbz1bImNyZWF0ZWRDYWxsYmFjayIsImF0dGFjaGVkQ2FsbGJhY2siLCJkZXRhY2hlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl07ZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG4mJm4ucHJvdG90eXBlJiZvLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIHIsbyxpLGEsYz0iRG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50OjoiK3QsdT1uLnByb3RvdHlwZTtpZih1Lmhhc093blByb3BlcnR5KHQpKXt2YXIgcz1lKHUsdCk7cyYmcy52YWx1ZT8ocy52YWx1ZT1wKHMudmFsdWUsYyksYT0oaT1zKS5jb25maWd1cmFibGUsUShyPW4ucHJvdG90eXBlLG89dCxpPUcocixvLGkpLGEpKTp1W3RdPXAodVt0XSxjKX1lbHNlIHVbdF0mJih1W3RdPXAodVt0XSxjKSl9KSxyLmNhbGwoZG9jdW1lbnQsdCxuKX0sTShkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQscil9fSgpfSksWm9uZS5fX2xvYWRfcGF0Y2goImNhbnZhcyIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5IVE1MQ2FudmFzRWxlbWVudDt2b2lkIDAhPT10JiZ0LnByb3RvdHlwZSYmdC5wcm90b3R5cGUudG9CbG9iJiZmdW5jdGlvbihlLG4scil7dmFyIG89bnVsbDtmdW5jdGlvbiBpKGUpe3ZhciB0PWUuZGF0YTtyZXR1cm4gdC5hcmdzW3QuY2JJZHhdPWZ1bmN0aW9uKCl7ZS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvLmFwcGx5KHQudGFyZ2V0LHQuYXJncyksZX1vPXoodC5wcm90b3R5cGUsInRvQmxvYiIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm57bmFtZToiSFRNTENhbnZhc0VsZW1lbnQudG9CbG9iIix0YXJnZXQ6ZSxjYklkeDowLGFyZ3M6dH19KHQsbik7cmV0dXJuIHIuY2JJZHg+PTAmJiJmdW5jdGlvbiI9PXR5cGVvZiBuW3IuY2JJZHhdP2goci5uYW1lLG5bci5jYklkeF0scixpLG51bGwpOmUuYXBwbHkodCxuKX19KX0oKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJYSFIiLGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uKHQpe3ZhciBzPVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxsPXNbY10sZj1zW3VdO2lmKCFsKXt2YXIgcD1lLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYocCl7dmFyIHY9cC5wcm90b3R5cGU7bD12W2NdLGY9dlt1XX19dmFyIGQ9InJlYWR5c3RhdGVjaGFuZ2UiLGc9InNjaGVkdWxlZCI7ZnVuY3Rpb24geShlKXtYTUxIdHRwUmVxdWVzdFtpXT0hMTt2YXIgdD1lLmRhdGEscj10LnRhcmdldCxhPXJbb107bHx8KGw9cltjXSxmPXJbdV0pLGEmJmYuY2FsbChyLGQsYSk7dmFyIHM9cltvXT1mdW5jdGlvbigpe3IucmVhZHlTdGF0ZT09PXIuRE9ORSYmIXQuYWJvcnRlZCYmWE1MSHR0cFJlcXVlc3RbaV0mJmUuc3RhdGU9PT1nJiZlLmludm9rZSgpfTtyZXR1cm4gbC5jYWxsKHIsZCxzKSxyW25dfHwocltuXT1lKSxiLmFwcGx5KHIsdC5hcmdzKSxYTUxIdHRwUmVxdWVzdFtpXT0hMCxlfWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gbShlKXt2YXIgdD1lLmRhdGE7cmV0dXJuIHQuYWJvcnRlZD0hMCxULmFwcGx5KHQudGFyZ2V0LHQuYXJncyl9dmFyIGs9eihzLCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBlW3JdPTA9PXRbMl0sZVthXT10WzFdLGsuYXBwbHkoZSx0KX19KSxiPXoocywic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtyXT9iLmFwcGx5KGUsdCk6aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsXyx7dGFyZ2V0OmUsdXJsOmVbYV0saXNQZXJpb2RpYzohMSxkZWxheTpudWxsLGFyZ3M6dCxhYm9ydGVkOiExfSx5LG0pfX0pLFQ9eihzLCJhYm9ydCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVtuXTtpZih0JiYic3RyaW5nIj09dHlwZW9mIHQudHlwZSl7aWYobnVsbD09dC5jYW5jZWxGbnx8dC5kYXRhJiZ0LmRhdGEuYWJvcnRlZClyZXR1cm47dC56b25lLmNhbmNlbFRhc2sodCl9fX0pfSgpO3ZhciBuPXYoInhoclRhc2siKSxyPXYoInhoclN5bmMiKSxvPXYoInhockxpc3RlbmVyIiksaT12KCJ4aHJTY2hlZHVsZWQiKSxhPXYoInhoclVSTCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbih0KXt0Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKHQsbil7Zm9yKHZhciByPXQuY29uc3RydWN0b3IubmFtZSxvPWZ1bmN0aW9uKG8pe3ZhciBpPW5bb10sYT10W2ldO2lmKGEpe2lmKCFiKGUodCxpKSkpcmV0dXJuImNvbnRpbnVlIjt0W2ldPWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodGhpcyxrKGFyZ3VtZW50cyxyKyIuIitpKSl9O3JldHVybiBNKHQsZSksdH0oYSl9fSxpPTA7aTxuLmxlbmd0aDtpKyspbyhpKX0odC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24sWyJnZXRDdXJyZW50UG9zaXRpb24iLCJ3YXRjaFBvc2l0aW9uIl0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIlByb21pc2VSZWplY3Rpb25FdmVudCIsZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihuKXtXKGUsdCkuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbz1lLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihvKXt2YXIgaT1uZXcgbyh0LHtwcm9taXNlOm4ucHJvbWlzZSxyZWFzb246bi5yZWplY3Rpb259KTtyLmludm9rZShpKX19KX19ZS5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJih0W3YoInVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25IYW5kbGVyIildPW4oInVuaGFuZGxlZHJlamVjdGlvbiIpLHRbdigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09bigicmVqZWN0aW9uaGFuZGxlZCIpKX0pfSgpfSwiMVRzQSI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSwiMk9pRiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LDM6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKCJoTi9nIil9LCIzTHlqIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiS3JvSiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LCI0NVR2IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9bigiT1AzWSIpLGE9ci5oYXMsYz1yLmdldCx1PXIua2V5LHM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiBjKGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9zKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBzKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnUoYXJndW1lbnRzWzJdKSl9fSl9LCI0OUQ0IjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5rZXksYT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZSx0LG4scil7YShlLHQsbyhuKSxpKHIpKX19KX0sIjRMaUQiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiZHlaWCIpLG89bigiWEtGVSIpLGk9bigiS3JvSiIpLGE9bigiM0x5aiIpLGM9bigiWjZ2RiIpLHU9bigiU2xrWSIpLHM9bigiOWdYNyIpLGw9bigiMC9SNCIpLGY9bigiZWVWcSIpLHA9bigiWE1WaCIpLGg9bigiZnlEcSIpLHY9bigiWGJ6aSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixkLGcseSl7dmFyIF89cltlXSxtPV8saz1nPyJzZXQiOiJhZGQiLGI9bSYmbS5wcm90b3R5cGUsVD17fSx3PWZ1bmN0aW9uKGUpe3ZhciB0PWJbZV07aShiLGUsImRlbGV0ZSI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh5JiYhbChlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEoeSYmIWwoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiZ2V0Ij09ZT9mdW5jdGlvbihlKXtyZXR1cm4geSYmIWwoZSk/dm9pZCAwOnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUpLHRoaXN9OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSxuKSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoeXx8Yi5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbSkuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IG0seD1FW2tdKHk/e306LTAsMSkhPUUsTz1mKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSxTPXAoZnVuY3Rpb24oZSl7bmV3IG0oZSl9KSxEPSF5JiZmKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBtLHQ9NTt0LS07KWVba10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSk7U3x8KChtPXQoZnVuY3Rpb24odCxuKXtzKHQsbSxlKTt2YXIgcj12KG5ldyBfLHQsbSk7cmV0dXJuIHZvaWQgMCE9biYmdShuLGcscltrXSxyKSxyfSkpLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9bSksKE98fEQpJiYodygiZGVsZXRlIiksdygiaGFzIiksZyYmdygiZ2V0IikpLChEfHx4KSYmdyhrKSx5JiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIG09ZC5nZXRDb25zdHJ1Y3Rvcih0LGUsZyxrKSxhKG0ucHJvdG90eXBlLG4pLGMuTkVFRD0hMDtyZXR1cm4gaChtLGUpLFRbZV09bSxvKG8uRytvLlcrby5GKihtIT1fKSxUKSx5fHxkLnNldFN0cm9uZyhtLGUsZyksbX19LCI0UjR1IjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSwiNkZNTyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjAvUjQiKSxvPW4oIkVXbUMiKSxpPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbyhlKSYmKCJmdW5jdGlvbiIhPXR5cGVvZih0PWUuY29uc3RydWN0b3IpfHx0IT09QXJyYXkmJiFvKHQucHJvdG90eXBlKXx8KHQ9dm9pZCAwKSxyKHQpJiZudWxsPT09KHQ9dFtpXSkmJih0PXZvaWQgMCkpLHZvaWQgMD09PXQ/QXJyYXk6dH19LCI3RGxoIjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5oYXMsYT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSwiOUFBbiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSwiOWdYNyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scil7aWYoIShlIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PXImJnIgaW4gZSl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gZX19LEFmbno6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJMUUFjIiksbz1uKCJYS0ZVIiksaT1uKCJLcm9KIiksYT1uKCJNdWtiIiksYz1uKCJoUElRIiksdT1uKCJRYURiIikscz1uKCJmeURxIiksbD1uKCJPUDNZIiksZj1uKCJLMHhVIikoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LGQsZyx5KXt1KG4sdCx2KTt2YXIgXyxtLGssYj1mdW5jdGlvbihlKXtpZighcCYmZSBpbiB4KXJldHVybiB4W2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxUPXQrIiBJdGVyYXRvciIsdz0idmFsdWVzIj09ZCxFPSExLHg9ZS5wcm90b3R5cGUsTz14W2ZdfHx4WyJAQGl0ZXJhdG9yIl18fGQmJnhbZF0sUz1PfHxiKGQpLEQ9ZD93P2IoImVudHJpZXMiKTpTOnZvaWQgMCxqPSJBcnJheSI9PXQmJnguZW50cmllc3x8TztpZihqJiYoaz1sKGouY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmsubmV4dCYmKHMoayxULCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2Yga1tmXXx8YShrLGYsaCkpLHcmJk8mJiJ2YWx1ZXMiIT09Ty5uYW1lJiYoRT0hMCxTPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLHImJiF5fHwhcCYmIUUmJnhbZl18fGEoeCxmLFMpLGNbdF09UyxjW1RdPWgsZClpZihfPXt2YWx1ZXM6dz9TOmIoInZhbHVlcyIpLGtleXM6Zz9TOmIoImtleXMiKSxlbnRyaWVzOkR9LHkpZm9yKG0gaW4gXyltIGluIHh8fGkoeCxtLF9bbV0pO2Vsc2UgbyhvLlArby5GKihwfHxFKSx0LF8pO3JldHVybiBffX0sQnFmVjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTjZjSiIpLG89bigieTN3OSIpLGk9ci5nZXQsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxDa2tUOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJZbXF2IiksaT1uKCJTL2ovIiksYT1uKCJuZThpIiksYz1uKCJ6UndvIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MT09ZSx1PTI9PWUscz0zPT1lLGw9ND09ZSxmPTY9PWUscD01PT1lfHxmLGg9dHx8YztyZXR1cm4gZnVuY3Rpb24odCxjLHYpe2Zvcih2YXIgZCxnLHk9aSh0KSxfPW8oeSksbT1yKGMsdiwzKSxrPWEoXy5sZW5ndGgpLGI9MCxUPW4/aCh0LGspOnU/aCh0LDApOnZvaWQgMDtrPmI7YisrKWlmKChwfHxiIGluIF8pJiYoZz1tKGQ9X1tiXSxiLHkpLGUpKWlmKG4pVFtiXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOlQucHVzaChkKX1lbHNlIGlmKGwpcmV0dXJuITE7cmV0dXJuIGY/LTE6c3x8bD9sOlR9fX0sRFZnQTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiemhBYiIpLG89bigiNFI0dSIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSxvKX19LEVLMEU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcixvPW4oIkNra1QiKSgwKSxpPW4oIktyb0oiKSxhPW4oIlo2dkYiKSxjPW4oImN6TksiKSx1PW4oIlpENjciKSxzPW4oIjAvUjQiKSxsPW4oImVlVnEiKSxmPW4oInM1cVkiKSxwPWEuZ2V0V2VhayxoPU9iamVjdC5pc0V4dGVuc2libGUsdj11LnVmc3RvcmUsZD17fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0seT17Z2V0OmZ1bmN0aW9uKGUpe2lmKHMoZSkpe3ZhciB0PXAoZSk7cmV0dXJuITA9PT10P3YoZih0aGlzLCJXZWFrTWFwIikpLmdldChlKTp0P3RbdGhpcy5faV06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHUuZGVmKGYodGhpcywiV2Vha01hcCIpLGUsdCl9fSxfPWUuZXhwb3J0cz1uKCI0TGlEIikoIldlYWtNYXAiLGcseSx1LCEwLCEwKTtsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgXykuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGQpLDcpLmdldChkKX0pJiYoYygocj11LmdldENvbnN0cnVjdG9yKGcsIldlYWtNYXAiKSkucHJvdG90eXBlLHkpLGEuTkVFRD0hMCxvKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwic2V0Il0sZnVuY3Rpb24oZSl7dmFyIHQ9Xy5wcm90b3R5cGUsbj10W2VdO2kodCxlLGZ1bmN0aW9uKHQsbyl7aWYocyh0KSYmIWgodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyByKTt2YXIgaT10aGlzLl9mW2VdKHQsbyk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiBuLmNhbGwodGhpcyx0LG8pfSl9KSl9LEVXbUM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09cihlKX19LEVlbUg6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlVxY0YiKSxvPW4oIlJqRC8iKSxpPW4oImFDRmoiKSxhPW4oImFwbVQiKSxjPW4oImFhZ3giKSx1PW4oInhwcWwiKSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4oIm5oNGciKT9zOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSx1KXRyeXtyZXR1cm4gcyhlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxGSlc1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJ5M3c5IiksaT1uKCJEVmdBIik7ZS5leHBvcnRzPW4oIm5oNGciKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciBuLGE9aSh0KSxjPWEubGVuZ3RoLHU9MDtjPnU7KXIuZihlLG49YVt1KytdLHRbbl0pO3JldHVybiBlfX0sRlpjcTpmdW5jdGlvbihlLHQsbil7bigiNDlENCIpLG4oInpxK0MiKSxuKCI0NVR2IiksbigidUF0ZCIpLG4oIkJxZlYiKSxuKCJmTi8zIiksbigiaVcrUyIpLG4oIjdEbGgiKSxuKCJPcHhiIiksZS5leHBvcnRzPW4oImczZzUiKS5SZWZsZWN0fSxINmhmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSwiSThhKyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkxaV3QiKSxvPW4oIksweFUiKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sSXc3MTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiZHlaWCIpLmRvY3VtZW50LGk9cihvKSYmcihvLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9vLmNyZWF0ZUVsZW1lbnQoZSk6e319fSwiSis2ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIkk4YSsiKSxvPW4oIksweFUiKSgiaXRlcmF0b3IiKSxpPW4oImhQSVEiKTtlLmV4cG9ydHM9bigiZzNnNSIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9ZSlyZXR1cm4gZVtvXXx8ZVsiQEBpdGVyYXRvciJdfHxpW3IoZSldfX0sSmlFYTpmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxLMHhVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoIndrcyIpLG89bigieWxxcyIpLGk9bigiZHlaWCIpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LEtyb0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImR5WlgiKSxvPW4oIk11a2IiKSxpPW4oImFhZ3giKSxhPW4oInlscXMiKSgic3JjIiksYz1GdW5jdGlvbi50b1N0cmluZyx1PSgiIitjKS5zcGxpdCgidG9TdHJpbmciKTtuKCJnM2c1IikuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5jYWxsKGUpfSwoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGMpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiBuO3MmJihpKG4sIm5hbWUiKXx8byhuLCJuYW1lIix0KSksZVt0XSE9PW4mJihzJiYoaShuLGEpfHxvKG4sYSxlW3RdPyIiK2VbdF06dS5qb2luKFN0cmluZyh0KSkpKSxlPT09cj9lW3RdPW46Yz9lW3RdP2VbdF09bjpvKGUsdCxuKTooZGVsZXRlIGVbdF0sbyhlLHQsbikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fGMuY2FsbCh0aGlzKX0pfSxLdXRoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ5M3c5Iiksbz1uKCJGSlc1IiksaT1uKCI0UjR1IiksYT1uKCJZVHZBIikoIklFX1BST1RPIiksYz1mdW5jdGlvbigpe30sdT1mdW5jdGlvbigpe3ZhciBlLHQ9bigiSXc3MSIpKCJpZnJhbWUiKSxyPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLG4oIityTHYiKS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLHU9ZS5GO3ItLTspZGVsZXRlIHUucHJvdG90eXBlW2lbcl1dO3JldHVybiB1KCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oYy5wcm90b3R5cGU9cihlKSxuPW5ldyBjLGMucHJvdG90eXBlPW51bGwsblthXT1lKTpuPXUoKSx2b2lkIDA9PT10P246byhuLHQpfX0sTFFBYzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMX0sTFpXdDpmdW5jdGlvbihlLHQpe3ZhciBuPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbi5jYWxsKGUpLnNsaWNlKDgsLTEpfX0sTTZRajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiaFBJUSIpLG89bigiSzB4VSIpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxNdWtiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJoc3dhIiksbz1uKCJSakQvIik7ZS5leHBvcnRzPW4oIm5oNGciKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuZihlLHQsbygxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LE42Y0o6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIjlBQW4iKSxvPW4oIlhLRlUiKSxpPW4oIlZUZXIiKSgibWV0YWRhdGEiKSxhPWkuc3RvcmV8fChpLnN0b3JlPW5ldyhuKCJFSzBFIikpKSxjPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1hLmdldChlKTtpZighbyl7aWYoIW4pcmV0dXJuO2Euc2V0KGUsbz1uZXcgcil9dmFyIGk9by5nZXQodCk7aWYoIWkpe2lmKCFuKXJldHVybjtvLnNldCh0LGk9bmV3IHIpfXJldHVybiBpfTtlLmV4cG9ydHM9e3N0b3JlOmEsbWFwOmMsaGFzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1jKHQsbiwhMSk7cmV0dXJuIHZvaWQgMCE9PXImJnIuaGFzKGUpfSxnZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWModCxuLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQoZSl9LHNldDpmdW5jdGlvbihlLHQsbixyKXtjKG4sciwhMCkuc2V0KGUsdCl9LGtleXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCwhMSkscj1bXTtyZXR1cm4gbiYmbi5mb3JFYWNoKGZ1bmN0aW9uKGUsdCl7ci5wdXNoKHQpfSkscn0sa2V5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lfHwic3ltYm9sIj09dHlwZW9mIGU/ZTpTdHJpbmcoZSl9LGV4cDpmdW5jdGlvbihlKXtvKG8uUywiUmVmbGVjdCIsZSl9fX0sT1AzWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiYWFneCIpLG89bigiUy9qLyIpLGk9bigiWVR2QSIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LE9weGI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIjJPaUYiKSxhPXIua2V5LGM9ci5zZXQ7ci5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7YyhlLHQsKHZvaWQgMCE9PXI/bzppKShuKSxhKHIpKX19fSl9LFEzbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIlNsa1kiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gcihlLCExLG4ucHVzaCxuLHQpLG59fSxRYURiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiS3V0aCIpLG89bigiUmpELyIpLGk9bigiZnlEcSIpLGE9e307bigiTXVrYiIpKGEsbigiSzB4VSIpKCJpdGVyYXRvciIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPXIoYSx7bmV4dDpvKDEsbil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxSWWk3OmZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlzTmFOKGU9K2UpPzA6KGU+MD9yOm4pKGUpfX0sIlJqRC8iOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sIlMvai8iOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJ2aFBVIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxTbGtZOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJtMFBwIiksbz1uKCJINmhmIiksaT1uKCJNNlFqIiksYT1uKCJ5M3c5IiksYz1uKCJuZThpIiksdT1uKCJKKzZlIikscz17fSxsPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBoLHYsZCxnLHk9cD9mdW5jdGlvbigpe3JldHVybiBlfTp1KGUpLF89cihuLGYsdD8yOjEpLG09MDtpZigiZnVuY3Rpb24iIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHkpKXtmb3IoaD1jKGUubGVuZ3RoKTtoPm07bSsrKWlmKChnPXQ/XyhhKHY9ZVttXSlbMF0sdlsxXSk6XyhlW21dKSk9PT1zfHxnPT09bClyZXR1cm4gZ31lbHNlIGZvcihkPXkuY2FsbChlKTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKChnPW8oZCxfLHYudmFsdWUsdCkpPT09c3x8Zz09PWwpcmV0dXJuIGd9KS5CUkVBSz1zLHQuUkVUVVJOPWx9LFQzOWI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKCJ3bXZHIiksbz1uKCJzNXFZIik7ZS5leHBvcnRzPW4oIjRMaUQiKSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sVXFjRjpmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sVlRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiZzNnNSIpLG89bigiZHlaWCIpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKCJMUUFjIik/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE4IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSxYS0ZVOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJkeVpYIiksbz1uKCJnM2c1IiksaT1uKCJNdWtiIiksYT1uKCJLcm9KIiksYz1uKCJtMFBwIiksdT1mdW5jdGlvbihlLHQsbil7dmFyIHMsbCxmLHAsaD1lJnUuRix2PWUmdS5HLGQ9ZSZ1LlAsZz1lJnUuQix5PXY/cjplJnUuUz9yW3RdfHwoclt0XT17fSk6KHJbdF18fHt9KS5wcm90b3R5cGUsXz12P286b1t0XXx8KG9bdF09e30pLG09Xy5wcm90b3R5cGV8fChfLnByb3RvdHlwZT17fSk7Zm9yKHMgaW4gdiYmKG49dCksbilmPSgobD0haCYmeSYmdm9pZCAwIT09eVtzXSk/eTpuKVtzXSxwPWcmJmw/YyhmLHIpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBmP2MoRnVuY3Rpb24uY2FsbCxmKTpmLHkmJmEoeSxzLGYsZSZ1LlUpLF9bc10hPWYmJmkoXyxzLHApLGQmJm1bc10hPWYmJihtW3NdPWYpfTtyLmNvcmU9byx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LGUuZXhwb3J0cz11fSxYTVZoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJLMHhVIikoIml0ZXJhdG9yIiksbz0hMTt0cnl7dmFyIGk9WzddW3JdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtvPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLGE9aVtyXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sWGJ6aTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpLG89bigiaTVkYyIpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLGE9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoaT1hLnByb3RvdHlwZSkhPT1uLnByb3RvdHlwZSYmcihpKSYmbyYmbyhlLGkpLGV9fSxZVHZBOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJWVGVyIikoImtleXMiKSxvPW4oInlscXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sWW1xdjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiTFpXdCIpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sWjZ2RjpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigieWxxcyIpKCJtZXRhIiksbz1uKCIwL1I0IiksaT1uKCJhYWd4IiksYT1uKCJoc3dhIikuZixjPTAsdT1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFuKCJlZVZxIikoZnVuY3Rpb24oKXtyZXR1cm4gdShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGw9ZnVuY3Rpb24oZSl7YShlLHIse3ZhbHVlOntpOiJPIisgKytjLHc6e319fSl9LGY9ZS5leHBvcnRzPXtLRVk6cixORUVEOiExLGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighbyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIWkoZSxyKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtsKGUpfXJldHVybiBlW3JdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighaShlLHIpKXtpZighdShlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtsKGUpfXJldHVybiBlW3JdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBzJiZmLk5FRUQmJnUoZSkmJiFpKGUscikmJmwoZSksZX19fSxaRDY3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiM0x5aiIpLG89bigiWjZ2RiIpLmdldFdlYWssaT1uKCJ5M3c5IiksYT1uKCIwL1I0IiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJDa2tUIiksbD1uKCJhYWd4IiksZj1uKCJzNXFZIikscD1zKDUpLGg9cyg2KSx2PTAsZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fbHx8KGUuX2w9bmV3IGcpfSxnPWZ1bmN0aW9uKCl7dGhpcy5hPVtdfSx5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHAoZS5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXkodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF5KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXkodGhpcyxlKTtuP25bMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzPWUoZnVuY3Rpb24oZSxyKXtjKGUscyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXYrKyxlLl9sPXZvaWQgMCx2b2lkIDAhPXImJnUocixuLGVbaV0sZSl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5kZWxldGUoZSk6biYmbChuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP2QoZih0aGlzLHQpKS5oYXMoZSk6biYmbChuLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/ZChlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTpkfX0sYUNGajpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiWW1xdiIpLG89bigidmhQVSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihvKGUpKX19LGFhZ3g6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxhcG1UOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuIGU7dmFyIG4sbztpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihuPWUudmFsdWVPZikmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbztpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKG89bi5jYWxsKGUpKSlyZXR1cm4gbzt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sY3pOSzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oIkRWZ0EiKSxvPW4oIkppRWEiKSxpPW4oIlVxY0YiKSxhPW4oIlMvai8iKSxjPW4oIlltcXYiKSx1PU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSF1fHxuKCJlZVZxIikoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT11KHt9LGUpW25dfHxPYmplY3Qua2V5cyh1KHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksdT1hcmd1bWVudHMubGVuZ3RoLHM9MSxsPW8uZixmPWkuZjt1PnM7KWZvcih2YXIgcCxoPWMoYXJndW1lbnRzW3MrK10pLHY9bD9yKGgpLmNvbmNhdChsKGgpKTpyKGgpLGQ9di5sZW5ndGgsZz0wO2Q+ZzspZi5jYWxsKGgscD12W2crK10pJiYobltwXT1oW3BdKTtyZXR1cm4gbn06dX0sImQvR2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZHlaWDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTsibnVtYmVyIj09dHlwZW9mIF9fZyYmKF9fZz1uKX0sZWVWcTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZWxacTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oImR5WlgiKSxvPW4oImhzd2EiKSxpPW4oIm5oNGciKSxhPW4oIksweFUiKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yW2VdO2kmJnQmJiF0W2FdJiZvLmYodCxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwiZk4vMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5cyxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkobyhlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ5RHE6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oImhzd2EiKS5mLG89bigiYWFneCIpLGk9bigiSzB4VSIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIW8oZT1uP2U6ZS5wcm90b3R5cGUsaSkmJnIoZSxpLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZzNnNTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi41LjcifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sImhOL2ciOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpLG4oIkZaY3EiKSxuKCIwVFdwIil9LGhQSVE6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGhzd2E6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oInkzdzkiKSxvPW4oInhwcWwiKSxpPW4oImFwbVQiKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigibmg0ZyIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYocihlKSx0PWkodCwhMCkscihuKSxvKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxpNWRjOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIwL1I0Iiksbz1uKCJ5M3c5IiksaT1mdW5jdGlvbihlLHQpe2lmKG8oZSksIXIodCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQscil7dHJ5eyhyPW4oIm0wUHAiKShGdW5jdGlvbi5jYWxsLG4oIkVlbUgiKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwyKSkoZSxbXSksdD0hKGUgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2goZSl7dD0hMH1yZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShlLG4pLHQ/ZS5fX3Byb3RvX189bjpyKGUsbiksZX19KHt9LCExKTp2b2lkIDApLGNoZWNrOml9fSwiaVcrUyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPW4oIk9QM1kiKSxhPXIuaGFzLGM9ci5rZXksdT1mdW5jdGlvbihlLHQsbil7aWYoYShlLHQsbikpcmV0dXJuITA7dmFyIHI9aSh0KTtyZXR1cm4gbnVsbCE9PXImJnUoZSxyLG4pfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShlLG8odCksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpjKGFyZ3VtZW50c1syXSkpfX0pfSxtMFBwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCIyT2lGIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixyLG8pe3JldHVybiBlLmNhbGwodCxuLHIsbyl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxuZThpOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJSWWk3Iiksbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9vKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LG5oNGc6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigiZWVWcSIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sczVxWTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSx1QXRkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJUMzliIiksbz1uKCJRM25lIiksaT1uKCJONmNKIiksYT1uKCJ5M3c5IiksYz1uKCJPUDNZIiksdT1pLmtleXMscz1pLmtleSxsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dShlLHQpLGk9YyhlKTtpZihudWxsPT09aSlyZXR1cm4gbjt2YXIgYT1sKGksdCk7cmV0dXJuIGEubGVuZ3RoP24ubGVuZ3RoP28obmV3IHIobi5jb25jYXQoYSkpKTphOm59O2kuZXhwKHtnZXRNZXRhZGF0YUtleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoYShlKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnMoYXJndW1lbnRzWzFdKSl9fSl9LHZoUFU6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSx3MmE1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhQ0ZqIiksbz1uKCJuZThpIiksaT1uKCJkL0djIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIGMsdT1yKHQpLHM9byh1Lmxlbmd0aCksbD1pKGEscyk7aWYoZSYmbiE9bil7Zm9yKDtzPmw7KWlmKChjPXVbbCsrXSkhPWMpcmV0dXJuITB9ZWxzZSBmb3IoO3M+bDtsKyspaWYoKGV8fGwgaW4gdSkmJnVbbF09PT1uKXJldHVybiBlfHxsfHwwO3JldHVybiFlJiYtMX19fSx3bXZHOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigiaHN3YSIpLmYsbz1uKCJLdXRoIiksaT1uKCIzTHlqIiksYT1uKCJtMFBwIiksYz1uKCI5Z1g3IiksdT1uKCJTbGtZIikscz1uKCJBZm56IiksbD1uKCIxVHNBIiksZj1uKCJlbFpxIikscD1uKCJuaDRnIiksaD1uKCJaNnZGIikuZmFzdEtleSx2PW4oInM1cVkiKSxkPXA/Il9zIjoic2l6ZSIsZz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9aCh0KTtpZigiRiIhPT1yKXJldHVybiBlLl9pW3JdO2ZvcihuPWUuX2Y7bjtuPW4ubilpZihuLms9PXQpcmV0dXJuIG59O2UuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4scyl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe2MoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9byhudWxsKSxlLl9mPXZvaWQgMCxlLl9sPXZvaWQgMCxlW2RdPTAsdm9pZCAwIT1yJiZ1KHIsbixlW3NdLGUpfSk7cmV0dXJuIGkobC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXYodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW2RdPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj12KHRoaXMsdCkscj1nKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3YodGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIWcodih0aGlzLHQpLGUpfX0pLHAmJnIobC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLHQpW2RdfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPWcoZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89aCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVtkXSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpnLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7cyhlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PXYoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/bCgwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLGwoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSx4cHFsOmZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oIm5oNGciKSYmIW4oImVlVnEiKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobigiSXc3MSIpKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0seTN3OTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiMC9SNCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSx5bHFzOmZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPU1hdGgucmFuZG9tKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09ZT8iIjplLCIpXyIsKCsrbityKS50b1N0cmluZygzNikpfX0selJ3bzpmdW5jdGlvbihlLHQsbil7dmFyIHI9bigiNkZNTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcocihlKSkodCl9fSx6aEFiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKCJhYWd4Iiksbz1uKCJhQ0ZqIiksaT1uKCJ3MmE1IikoITEpLGE9bigiWVR2QSIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGM9byhlKSx1PTAscz1bXTtmb3IobiBpbiBjKW4hPWEmJnIoYyxuKSYmcy5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+dTspcihjLG49dFt1KytdKSYmKH5pKHMsbil8fHMucHVzaChuKSk7cmV0dXJuIHN9fSwienErQyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oIk42Y0oiKSxvPW4oInkzdzkiKSxpPXIua2V5LGE9ci5tYXAsYz1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIHU9Yy5nZXQodCk7cmV0dXJuIHUuZGVsZXRlKG4pLCEhdS5zaXplfHxjLmRlbGV0ZSh0KX19KX19LFtbMyw0XV1dKTshZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIG49ZS5kb2N1bWVudCxyPWUuT2JqZWN0LG89ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGwsYT0vXltBLVpdK1thLXpdLyxpPWZ1bmN0aW9uKGUsdCl7KHQ9dC50b0xvd2VyQ2FzZSgpKWluIHV8fCh1W2VdPSh1W2VdfHxbXSkuY29uY2F0KHQpLHVbdF09dVt0LnRvVXBwZXJDYXNlKCldPWUpfSx1PShyLmNyZWF0ZXx8cikobnVsbCksYz17fTtmb3IobiBpbiBlKWZvcihsIGluIGVbbl0pZm9yKHVbbF09bz1lW25dW2xdLHQ9MDt0PG8ubGVuZ3RoO3QrKyl1W29bdF0udG9Mb3dlckNhc2UoKV09dVtvW3RdLnRvVXBwZXJDYXNlKCldPWw7cmV0dXJuIGMuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT91W2VdfHwoYS50ZXN0KGUpP1tdOiIiKTpmdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIHUpZS50ZXN0KHQpJiZuLnB1c2godCk7cmV0dXJuIG59KGUpfSxjLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBhLnRlc3QoZSk/aShlLHQpOmkodCxlKSxjfSxjfSh7Y29sbGVjdGlvbnM6e0hUTUxBbGxDb2xsZWN0aW9uOlsiYWxsIl0sSFRNTENvbGxlY3Rpb246WyJmb3JtcyJdLEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOlsiZWxlbWVudHMiXSxIVE1MT3B0aW9uc0NvbGxlY3Rpb246WyJvcHRpb25zIl19LGVsZW1lbnRzOntFbGVtZW50OlsiZWxlbWVudCJdLEhUTUxBbmNob3JFbGVtZW50OlsiYSJdLEhUTUxBcHBsZXRFbGVtZW50OlsiYXBwbGV0Il0sSFRNTEFyZWFFbGVtZW50OlsiYXJlYSJdLEhUTUxBdHRhY2htZW50RWxlbWVudDpbImF0dGFjaG1lbnQiXSxIVE1MQXVkaW9FbGVtZW50OlsiYXVkaW8iXSxIVE1MQlJFbGVtZW50OlsiYnIiXSxIVE1MQmFzZUVsZW1lbnQ6WyJiYXNlIl0sSFRNTEJvZHlFbGVtZW50OlsiYm9keSJdLEhUTUxCdXR0b25FbGVtZW50OlsiYnV0dG9uIl0sSFRNTENhbnZhc0VsZW1lbnQ6WyJjYW52YXMiXSxIVE1MQ29udGVudEVsZW1lbnQ6WyJjb250ZW50Il0sSFRNTERMaXN0RWxlbWVudDpbImRsIl0sSFRNTERhdGFFbGVtZW50OlsiZGF0YSJdLEhUTUxEYXRhTGlzdEVsZW1lbnQ6WyJkYXRhbGlzdCJdLEhUTUxEZXRhaWxzRWxlbWVudDpbImRldGFpbHMiXSxIVE1MRGlhbG9nRWxlbWVudDpbImRpYWxvZyJdLEhUTUxEaXJlY3RvcnlFbGVtZW50OlsiZGlyIl0sSFRNTERpdkVsZW1lbnQ6WyJkaXYiXSxIVE1MRG9jdW1lbnQ6WyJkb2N1bWVudCJdLEhUTUxFbGVtZW50OlsiZWxlbWVudCIsImFiYnIiLCJhZGRyZXNzIiwiYXJ0aWNsZSIsImFzaWRlIiwiYiIsImJkaSIsImJkbyIsImNpdGUiLCJjb2RlIiwiY29tbWFuZCIsImRkIiwiZGZuIiwiZHQiLCJlbSIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb290ZXIiLCJoZWFkZXIiLCJpIiwia2JkIiwibWFyayIsIm5hdiIsIm5vc2NyaXB0IiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzbWFsbCIsInN0cm9uZyIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ1IiwidmFyIiwid2JyIl0sSFRNTEVtYmVkRWxlbWVudDpbImVtYmVkIl0sSFRNTEZpZWxkU2V0RWxlbWVudDpbImZpZWxkc2V0Il0sSFRNTEZvbnRFbGVtZW50OlsiZm9udCJdLEhUTUxGb3JtRWxlbWVudDpbImZvcm0iXSxIVE1MRnJhbWVFbGVtZW50OlsiZnJhbWUiXSxIVE1MRnJhbWVTZXRFbGVtZW50OlsiZnJhbWVzZXQiXSxIVE1MSFJFbGVtZW50OlsiaHIiXSxIVE1MSGVhZEVsZW1lbnQ6WyJoZWFkIl0sSFRNTEhlYWRpbmdFbGVtZW50OlsiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Il0sSFRNTEh0bWxFbGVtZW50OlsiaHRtbCJdLEhUTUxJRnJhbWVFbGVtZW50OlsiaWZyYW1lIl0sSFRNTEltYWdlRWxlbWVudDpbImltZyJdLEhUTUxJbnB1dEVsZW1lbnQ6WyJpbnB1dCJdLEhUTUxLZXlnZW5FbGVtZW50Olsia2V5Z2VuIl0sSFRNTExJRWxlbWVudDpbImxpIl0sSFRNTExhYmVsRWxlbWVudDpbImxhYmVsIl0sSFRNTExlZ2VuZEVsZW1lbnQ6WyJsZWdlbmQiXSxIVE1MTGlua0VsZW1lbnQ6WyJsaW5rIl0sSFRNTE1hcEVsZW1lbnQ6WyJtYXAiXSxIVE1MTWFycXVlZUVsZW1lbnQ6WyJtYXJxdWVlIl0sSFRNTE1lZGlhRWxlbWVudDpbIm1lZGlhIl0sSFRNTE1lbnVFbGVtZW50OlsibWVudSJdLEhUTUxNZW51SXRlbUVsZW1lbnQ6WyJtZW51aXRlbSJdLEhUTUxNZXRhRWxlbWVudDpbIm1ldGEiXSxIVE1MTWV0ZXJFbGVtZW50OlsibWV0ZXIiXSxIVE1MTW9kRWxlbWVudDpbImRlbCIsImlucyJdLEhUTUxPTGlzdEVsZW1lbnQ6WyJvbCJdLEhUTUxPYmplY3RFbGVtZW50Olsib2JqZWN0Il0sSFRNTE9wdEdyb3VwRWxlbWVudDpbIm9wdGdyb3VwIl0sSFRNTE9wdGlvbkVsZW1lbnQ6WyJvcHRpb24iXSxIVE1MT3V0cHV0RWxlbWVudDpbIm91dHB1dCJdLEhUTUxQYXJhZ3JhcGhFbGVtZW50OlsicCJdLEhUTUxQYXJhbUVsZW1lbnQ6WyJwYXJhbSJdLEhUTUxQaWN0dXJlRWxlbWVudDpbInBpY3R1cmUiXSxIVE1MUHJlRWxlbWVudDpbInByZSJdLEhUTUxQcm9ncmVzc0VsZW1lbnQ6WyJwcm9ncmVzcyJdLEhUTUxRdW90ZUVsZW1lbnQ6WyJibG9ja3F1b3RlIiwicSIsInF1b3RlIl0sSFRNTFNjcmlwdEVsZW1lbnQ6WyJzY3JpcHQiXSxIVE1MU2VsZWN0RWxlbWVudDpbInNlbGVjdCJdLEhUTUxTaGFkb3dFbGVtZW50Olsic2hhZG93Il0sSFRNTFNsb3RFbGVtZW50Olsic2xvdCJdLEhUTUxTb3VyY2VFbGVtZW50Olsic291cmNlIl0sSFRNTFNwYW5FbGVtZW50Olsic3BhbiJdLEhUTUxTdHlsZUVsZW1lbnQ6WyJzdHlsZSJdLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OlsiY2FwdGlvbiJdLEhUTUxUYWJsZUNlbGxFbGVtZW50OlsidGQiLCJ0aCJdLEhUTUxUYWJsZUNvbEVsZW1lbnQ6WyJjb2wiLCJjb2xncm91cCJdLEhUTUxUYWJsZUVsZW1lbnQ6WyJ0YWJsZSJdLEhUTUxUYWJsZVJvd0VsZW1lbnQ6WyJ0ciJdLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OlsidGhlYWQiLCJ0Ym9keSIsInRmb290Il0sSFRNTFRlbXBsYXRlRWxlbWVudDpbInRlbXBsYXRlIl0sSFRNTFRleHRBcmVhRWxlbWVudDpbInRleHRhcmVhIl0sSFRNTFRpbWVFbGVtZW50OlsidGltZSJdLEhUTUxUaXRsZUVsZW1lbnQ6WyJ0aXRsZSJdLEhUTUxUcmFja0VsZW1lbnQ6WyJ0cmFjayJdLEhUTUxVTGlzdEVsZW1lbnQ6WyJ1bCJdLEhUTUxVbmtub3duRWxlbWVudDpbInVua25vd24iLCJ2aGdyb3VwdiIsInZrZXlnZW4iXSxIVE1MVmlkZW9FbGVtZW50OlsidmlkZW8iXX0sbm9kZXM6e0F0dHI6WyJub2RlIl0sQXVkaW86WyJhdWRpbyJdLENEQVRBU2VjdGlvbjpbIm5vZGUiXSxDaGFyYWN0ZXJEYXRhOlsibm9kZSJdLENvbW1lbnQ6WyIjY29tbWVudCJdLERvY3VtZW50OlsiI2RvY3VtZW50Il0sRG9jdW1lbnRGcmFnbWVudDpbIiNkb2N1bWVudC1mcmFnbWVudCJdLERvY3VtZW50VHlwZTpbIm5vZGUiXSxIVE1MRG9jdW1lbnQ6WyIjZG9jdW1lbnQiXSxJbWFnZTpbImltZyJdLE9wdGlvbjpbIm9wdGlvbiJdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbIm5vZGUiXSxTaGFkb3dSb290OlsiI3NoYWRvdy1yb290Il0sVGV4dDpbIiN0ZXh0Il0sWE1MRG9jdW1lbnQ6WyJ4bWwiXX19KTsib2JqZWN0IiE9dHlwZW9mIHQmJih0PXt0eXBlOnR8fCJhdXRvIn0pO3ZhciBsLGEsaSx1LGMscyxtLGYscCxkPSJyZWdpc3RlckVsZW1lbnQiLGg9Il9fIitkKygxZTUqZS5NYXRoLnJhbmRvbSgpPj4wKSxUPSJhZGRFdmVudExpc3RlbmVyIixMPSJhdHRhY2hlZCIsTT0iQ2FsbGJhY2siLEU9ImRldGFjaGVkIix2PSJleHRlbmRzIixIPSJhdHRyaWJ1dGVDaGFuZ2VkIitNLGc9TCtNLGI9ImNvbm5lY3RlZCIrTSx5PSJkaXNjb25uZWN0ZWQiK00sQz0iY3JlYXRlZCIrTSx3PUUrTSxBPSJBRERJVElPTiIsTz0iUkVNT1ZBTCIsTj0iRE9NQXR0ck1vZGlmaWVkIixEPSJET01Db250ZW50TG9hZGVkIixJPSJET01TdWJ0cmVlTW9kaWZpZWQiLEY9IjwiLFM9Ij0iLFY9L15bQS1aXVtBLVowLTldKig/Oi1bQS1aMC05XSspKyQvLFA9WyJBTk5PVEFUSU9OLVhNTCIsIkNPTE9SLVBST0ZJTEUiLCJGT05ULUZBQ0UiLCJGT05ULUZBQ0UtU1JDIiwiRk9OVC1GQUNFLVVSSSIsIkZPTlQtRkFDRS1GT1JNQVQiLCJGT05ULUZBQ0UtTkFNRSIsIk1JU1NJTkctR0xZUEgiXSxSPVtdLFU9W10saz0iIixfPW4uZG9jdW1lbnRFbGVtZW50LHE9Ui5pbmRleE9mfHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5sZW5ndGg7dC0tJiZ0aGlzW3RdIT09ZTspO3JldHVybiB0fSx4PXIucHJvdG90eXBlLEI9eC5oYXNPd25Qcm9wZXJ0eSxaPXguaXNQcm90b3R5cGVPZixqPXIuZGVmaW5lUHJvcGVydHksRz1bXSx6PXIuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEs9ci5nZXRPd25Qcm9wZXJ0eU5hbWVzLFg9ci5nZXRQcm90b3R5cGVPZiwkPXIuc2V0UHJvdG90eXBlT2YsUT0hIXIuX19wcm90b19fLFc9Il9fZHJlQ0V2MSIsWT1lLmN1c3RvbUVsZW1lbnRzLEo9IS9eZm9yY2UvLnRlc3QodC50eXBlKSYmISEoWSYmWS5kZWZpbmUmJlkuZ2V0JiZZLndoZW5EZWZpbmVkKSxlZT1yLmNyZWF0ZXx8cix0ZT1lLk1hcHx8ZnVuY3Rpb24oKXt2YXIgZSx0PVtdLG49W107cmV0dXJue2dldDpmdW5jdGlvbihlKXtyZXR1cm4gbltxLmNhbGwodCxlKV19LHNldDpmdW5jdGlvbihyLG8peyhlPXEuY2FsbCh0LHIpKTwwP25bdC5wdXNoKHIpLTFdPW86bltlXT1vfX19LG5lPWUuUHJvbWlzZXx8ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj0hMSxyPXtjYXRjaDpmdW5jdGlvbigpe3JldHVybiByfSx0aGVuOmZ1bmN0aW9uKGUpe3JldHVybiB0LnB1c2goZSksbiYmc2V0VGltZW91dChvLDEpLHJ9fTtmdW5jdGlvbiBvKGUpe2ZvcihuPSEwO3QubGVuZ3RoOyl0LnNoaWZ0KCkoZSl9cmV0dXJuIGUobykscn0scmU9ITEsb2U9ZWUobnVsbCksbGU9ZWUobnVsbCksYWU9bmV3IHRlLGllPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCl9LHVlPXIuY3JlYXRlfHxmdW5jdGlvbiBlKHQpe3JldHVybiB0PyhlLnByb3RvdHlwZT10LG5ldyBlKTp0aGlzfSxjZT0kfHwoUT9mdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9OksmJno/ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuLHI9Syh0KSxvPTAsbD1yLmxlbmd0aDtvPGw7bysrKUIuY2FsbChlLG49cltvXSl8fGooZSxuLHoodCxuKSl9cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZG97ZSh0LG4pfXdoaWxlKChuPVgobikpJiYhWi5jYWxsKG4sdCkpO3JldHVybiB0fX0oKTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX0pLHNlPWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG1lPShlLkhUTUxFbGVtZW50fHxlLkVsZW1lbnR8fGUuTm9kZSkucHJvdG90eXBlLGZlPSFaLmNhbGwobWUsXykscGU9ZmU/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4udmFsdWUsZX06aixkZT1mZT9mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9OmZ1bmN0aW9uKGUpe3JldHVybiBaLmNhbGwobWUsZSl9LGhlPWZlJiZbXSxUZT1tZS5hdHRhY2hTaGFkb3csTGU9bWUuY2xvbmVOb2RlLE1lPW1lLmRpc3BhdGNoRXZlbnQsRWU9bWUuZ2V0QXR0cmlidXRlLHZlPW1lLmhhc0F0dHJpYnV0ZSxIZT1tZS5yZW1vdmVBdHRyaWJ1dGUsZ2U9bWUuc2V0QXR0cmlidXRlLGJlPW4uY3JlYXRlRWxlbWVudCx5ZT1iZSxDZT1zZSYme2F0dHJpYnV0ZXM6ITAsY2hhcmFjdGVyRGF0YTohMCxhdHRyaWJ1dGVPbGRWYWx1ZTohMH0sd2U9c2V8fGZ1bmN0aW9uKGUpe0llPSExLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihOLHdlKX0sQWU9MCxPZT1kIGluIG4mJiEvXmZvcmNlLWFsbC8udGVzdCh0LnR5cGUpLE5lPSEwLERlPSExLEllPSEwLEZlPSEwLFNlPSEwO2Z1bmN0aW9uIFZlKCl7dmFyIGU9bC5zcGxpY2UoMCxsLmxlbmd0aCk7Zm9yKEFlPTA7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jYWxsKG51bGwsZS5zaGlmdCgpKX1mdW5jdGlvbiBQZShlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylHZShlW25dLHQpfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtkZSh0KSYmKEdlKHQsZSksay5sZW5ndGgmJlBlKHQucXVlcnlTZWxlY3RvckFsbChrKSxlKSl9fWZ1bmN0aW9uIFVlKGUpe3ZhciB0PUVlLmNhbGwoZSwiaXMiKSxuPWUubm9kZU5hbWUudG9VcHBlckNhc2UoKSxyPXEuY2FsbChSLHQ/Uyt0LnRvVXBwZXJDYXNlKCk6RituKTtyZXR1cm4gdCYmLTE8ciYmIWtlKG4sdCk/LTE6cn1mdW5jdGlvbiBrZShlLHQpe3JldHVybi0xPGsuaW5kZXhPZihlKydbaXM9IicrdCsnIl0nKX1mdW5jdGlvbiBfZShlKXt2YXIgdD1lLmN1cnJlbnRUYXJnZXQsbj1lLmF0dHJDaGFuZ2Uscj1lLmF0dHJOYW1lLG89ZS50YXJnZXQsbD1lW0FdfHwyLGE9ZVtPXXx8MzshU2V8fG8mJm8hPT10fHwhdFtIXXx8InN0eWxlIj09PXJ8fGUucHJldlZhbHVlPT09ZS5uZXdWYWx1ZSYmKCIiIT09ZS5uZXdWYWx1ZXx8biE9PWwmJm4hPT1hKXx8dFtIXShyLG49PT1sP251bGw6ZS5wcmV2VmFsdWUsbj09PWE/bnVsbDplLm5ld1ZhbHVlKX1mdW5jdGlvbiBxZShlKXt2YXIgdD1SZShlKTtyZXR1cm4gZnVuY3Rpb24oZSl7bC5wdXNoKHQsZS50YXJnZXQpLEFlJiZjbGVhclRpbWVvdXQoQWUpLEFlPXNldFRpbWVvdXQoVmUsMSl9fWZ1bmN0aW9uIHhlKGUpe0ZlJiYoRmU9ITEsZS5jdXJyZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoRCx4ZSkpLGsubGVuZ3RoJiZQZSgoZS50YXJnZXR8fG4pLnF1ZXJ5U2VsZWN0b3JBbGwoayksZS5kZXRhaWw9PT1FP0U6TCksZmUmJmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MCxuPWhlLmxlbmd0aDt0PG47dCsrKV8uY29udGFpbnMoZT1oZVt0XSl8fChuLS0saGUuc3BsaWNlKHQtLSwxKSxHZShlLEUpKX0oKX1mdW5jdGlvbiBCZShlLHQpe2dlLmNhbGwodGhpcyxlLHQpLGEuY2FsbCh0aGlzLHt0YXJnZXQ6dGhpc30pfWZ1bmN0aW9uIFplKGUsdCl7Y2UoZSx0KSxjP2Mub2JzZXJ2ZShlLENlKTooSWUmJihlLnNldEF0dHJpYnV0ZT1CZSxlW2hdPXUoZSksZVtUXShJLGEpKSxlW1RdKE4sX2UpKSxlW0NdJiZTZSYmKGUuY3JlYXRlZD0hMCxlW0NdKCksZS5jcmVhdGVkPSExKX1mdW5jdGlvbiBqZShlKXt0aHJvdyBuZXcgRXJyb3IoIkEgIitlKyIgdHlwZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiKX1mdW5jdGlvbiBHZShlLHQpe3ZhciBuLHIsbz1VZShlKTstMTxvJiYobShlLFVbb10pLG89MCx0IT09THx8ZVtMXT90IT09RXx8ZVtFXXx8KGVbTF09ITEsZVtFXT0hMCxyPSJkaXNjb25uZWN0ZWQiLG89MSk6KGVbRV09ITEsZVtMXT0hMCxyPSJjb25uZWN0ZWQiLG89MSxmZSYmcS5jYWxsKGhlLGUpPDAmJmhlLnB1c2goZSkpLG8mJihuPWVbdCtNXXx8ZVtyK01dKSYmbi5jYWxsKGUpKX1mdW5jdGlvbiB6ZSgpe31mdW5jdGlvbiBLZShlLHQscil7dmFyIG89ciYmclt2XXx8IiIsbD10LnByb3RvdHlwZSxhPXVlKGwpLGk9dC5vYnNlcnZlZEF0dHJpYnV0ZXN8fEcsdT17cHJvdG90eXBlOmF9O3BlKGEsQyx7dmFsdWU6ZnVuY3Rpb24oKXtpZihyZSlyZT0hMTtlbHNlIGlmKCF0aGlzW1ddKXt0aGlzW1ddPSEwLG5ldyB0KHRoaXMpLGxbQ10mJmxbQ10uY2FsbCh0aGlzKTt2YXIgZT1vZVthZS5nZXQodCldOyghSnx8ZS5jcmVhdGUubGVuZ3RoPjEpJiZRZSh0aGlzKX19fSkscGUoYSxILHt2YWx1ZTpmdW5jdGlvbihlKXstMTxxLmNhbGwoaSxlKSYmbFtIXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSksbFtiXSYmcGUoYSxnLHt2YWx1ZTpsW2JdfSksbFt5XSYmcGUoYSx3LHt2YWx1ZTpsW3ldfSksbyYmKHVbdl09byksZT1lLnRvVXBwZXJDYXNlKCksb2VbZV09e2NvbnN0cnVjdG9yOnQsY3JlYXRlOm8/W28saWUoZSldOltlXX0sYWUuc2V0KHQsZSksbltkXShlLnRvTG93ZXJDYXNlKCksdSksV2UoZSksbGVbZV0ucigpfWZ1bmN0aW9uIFhlKGUpe3ZhciB0PW9lW2UudG9VcHBlckNhc2UoKV07cmV0dXJuIHQmJnQuY29uc3RydWN0b3J9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSYmZS5pc3x8IiJ9ZnVuY3Rpb24gUWUoZSl7Zm9yKHZhciB0LG49ZVtIXSxyPW4/ZS5hdHRyaWJ1dGVzOkcsbz1yLmxlbmd0aDtvLS07KW4uY2FsbChlLCh0PXJbb10pLm5hbWV8fHQubm9kZU5hbWUsbnVsbCx0LnZhbHVlfHx0Lm5vZGVWYWx1ZSl9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuKGU9ZS50b1VwcGVyQ2FzZSgpKWluIGxlfHwobGVbZV09e30sbGVbZV0ucD1uZXcgbmUoZnVuY3Rpb24odCl7bGVbZV0ucj10fSkpLGxlW2VdLnB9ZnVuY3Rpb24gWWUoKXtZJiZkZWxldGUgZS5jdXN0b21FbGVtZW50cyxqKGUsImN1c3RvbUVsZW1lbnRzIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm5ldyB6ZX0pLGooZSwiQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnplfSk7Zm9yKHZhciB0PWZ1bmN0aW9uKHQpe3ZhciByPWVbdF07aWYocil7ZVt0XT1mdW5jdGlvbihlKXt2YXIgdCxvO3JldHVybiBlfHwoZT10aGlzKSxlW1ddfHwocmU9ITAsdD1vZVthZS5nZXQoZS5jb25zdHJ1Y3RvcildLChlPShvPUomJjE9PT10LmNyZWF0ZS5sZW5ndGgpP1JlZmxlY3QuY29uc3RydWN0KHIsRyx0LmNvbnN0cnVjdG9yKTpuLmNyZWF0ZUVsZW1lbnQuYXBwbHkobix0LmNyZWF0ZSkpW1ddPSEwLHJlPSExLG98fFFlKGUpKSxlfSxlW3RdLnByb3RvdHlwZT1yLnByb3RvdHlwZTt0cnl7ci5wcm90b3R5cGUuY29uc3RydWN0b3I9ZVt0XX1jYXRjaChuKXtqKHIsVyx7dmFsdWU6ZVt0XX0pfX19LHI9by5nZXQoL15IVE1MW0EtWl0qW2Etel0vKSxsPXIubGVuZ3RoO2wtLTt0KHJbbF0pKTtuLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj0kZSh0KTtyZXR1cm4gbj95ZS5jYWxsKHRoaXMsZSxpZShuKSk6eWUuY2FsbCh0aGlzLGUpfSxPZXx8KERlPSEwLG5bZF0oIiIpKX1pZihzZSYmKChwPW4uY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPGRpdj48ZGl2PjwvZGl2PjwvZGl2PiIsbmV3IHNlKGZ1bmN0aW9uKGUsdCl7aWYoZVswXSYmImNoaWxkTGlzdCI9PWVbMF0udHlwZSYmIWVbMF0ucmVtb3ZlZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgbj0ocD16KG1lLCJpbm5lckhUTUwiKSkmJnAuc2V0O24mJmoobWUsImlubmVySFRNTCIse3NldDpmdW5jdGlvbihlKXtmb3IoO3RoaXMubGFzdENoaWxkOyl0aGlzLnJlbW92ZUNoaWxkKHRoaXMubGFzdENoaWxkKTtuLmNhbGwodGhpcyxlKX19KX10LmRpc2Nvbm5lY3QoKSxwPW51bGx9KS5vYnNlcnZlKHAse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSkscC5pbm5lckhUTUw9IiIpLE9lfHwoJHx8UT8obT1mdW5jdGlvbihlLHQpe1ouY2FsbCh0LGUpfHxaZShlLHQpfSxmPVplKTpmPW09ZnVuY3Rpb24oZSx0KXtlW2hdfHwoZVtoXT1yKCEwKSxaZShlLHQpKX0sZmU/KEllPSExLGZ1bmN0aW9uKCl7dmFyIGU9eihtZSxUKSx0PWUudmFsdWUsbj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQ3VzdG9tRXZlbnQoTix7YnViYmxlczohMH0pO3QuYXR0ck5hbWU9ZSx0LnByZXZWYWx1ZT1FZS5jYWxsKHRoaXMsZSksdC5uZXdWYWx1ZT1udWxsLHRbT109dC5hdHRyQ2hhbmdlPTIsSGUuY2FsbCh0aGlzLGUpLE1lLmNhbGwodGhpcyx0KX0scj1mdW5jdGlvbihlLHQpe3ZhciBuPXZlLmNhbGwodGhpcyxlKSxyPW4mJkVlLmNhbGwodGhpcyxlKSxvPW5ldyBDdXN0b21FdmVudChOLHtidWJibGVzOiEwfSk7Z2UuY2FsbCh0aGlzLGUsdCksby5hdHRyTmFtZT1lLG8ucHJldlZhbHVlPW4/cjpudWxsLG8ubmV3VmFsdWU9dCxuP28uTU9ESUZJQ0FUSU9OPW8uYXR0ckNoYW5nZT0xOm9bQV09by5hdHRyQ2hhbmdlPTAsTWUuY2FsbCh0aGlzLG8pfSxvPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5jdXJyZW50VGFyZ2V0LHI9bltoXSxvPWUucHJvcGVydHlOYW1lO3IuaGFzT3duUHJvcGVydHkobykmJihyPXJbb10sKHQ9bmV3IEN1c3RvbUV2ZW50KE4se2J1YmJsZXM6ITB9KSkuYXR0ck5hbWU9ci5uYW1lLHQucHJldlZhbHVlPXIudmFsdWV8fG51bGwsdC5uZXdWYWx1ZT1yLnZhbHVlPW5bb118fG51bGwsbnVsbD09dC5wcmV2VmFsdWU/dFtBXT10LmF0dHJDaGFuZ2U9MDp0Lk1PRElGSUNBVElPTj10LmF0dHJDaGFuZ2U9MSxNZS5jYWxsKG4sdCkpfTtlLnZhbHVlPWZ1bmN0aW9uKGUsbCxhKXtlPT09TiYmdGhpc1tIXSYmdGhpcy5zZXRBdHRyaWJ1dGUhPT1yJiYodGhpc1toXT17Y2xhc3NOYW1lOntuYW1lOiJjbGFzcyIsdmFsdWU6dGhpcy5jbGFzc05hbWV9fSx0aGlzLnNldEF0dHJpYnV0ZT1yLHRoaXMucmVtb3ZlQXR0cmlidXRlPW4sdC5jYWxsKHRoaXMsInByb3BlcnR5Y2hhbmdlIixvKSksdC5jYWxsKHRoaXMsZSxsLGEpfSxqKG1lLFQsZSl9KCkpOnNlfHwoX1tUXShOLHdlKSxfLnNldEF0dHJpYnV0ZShoLDEpLF8ucmVtb3ZlQXR0cmlidXRlKGgpLEllJiYoYT1mdW5jdGlvbihlKXt2YXIgdCxuLHI7aWYodGhpcz09PWUudGFyZ2V0KXtmb3IociBpbiB0PXRoaXNbaF0sdGhpc1toXT1uPXUodGhpcyksbil7aWYoIShyIGluIHQpKXJldHVybiBpKDAsdGhpcyxyLHRbcl0sbltyXSxBKTtpZihuW3JdIT09dFtyXSlyZXR1cm4gaSgxLHRoaXMscix0W3JdLG5bcl0sIk1PRElGSUNBVElPTiIpfWZvcihyIGluIHQpaWYoIShyIGluIG4pKXJldHVybiBpKDIsdGhpcyxyLHRbcl0sbltyXSxPKX19LGk9ZnVuY3Rpb24oZSx0LG4scixvLGwpe3ZhciBhPXthdHRyQ2hhbmdlOmUsY3VycmVudFRhcmdldDp0LGF0dHJOYW1lOm4scHJldlZhbHVlOnIsbmV3VmFsdWU6b307YVtsXT1lLF9lKGEpfSx1PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9e30sbz1lLmF0dHJpYnV0ZXMsbD0wLGE9by5sZW5ndGg7bDxhO2wrKykic2V0QXR0cmlidXRlIiE9PShuPSh0PW9bbF0pLm5hbWUpJiYocltuXT10LnZhbHVlKTtyZXR1cm4gcn0pKSxuW2RdPWZ1bmN0aW9uKGUsdCl7aWYocj1lLnRvVXBwZXJDYXNlKCksTmUmJihOZT0hMSxzZT8oYz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjt0KGVbbisrXSkpO31yZXR1cm4gbmV3IHNlKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbyxsLGEsaT0wLHU9ci5sZW5ndGg7aTx1O2krKykiY2hpbGRMaXN0Ij09PShvPXJbaV0pLnR5cGU/KG4oby5hZGRlZE5vZGVzLGUpLG4oby5yZW1vdmVkTm9kZXMsdCkpOihsPW8udGFyZ2V0LFNlJiZsW0hdJiYic3R5bGUiIT09by5hdHRyaWJ1dGVOYW1lJiYoYT1FZS5jYWxsKGwsby5hdHRyaWJ1dGVOYW1lKSkhPT1vLm9sZFZhbHVlJiZsW0hdKG8uYXR0cmlidXRlTmFtZSxvLm9sZFZhbHVlLGEpKX0pfShSZShMKSxSZShFKSksKHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGMub2JzZXJ2ZShlLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLGV9KShuKSxUZSYmKG1lLmF0dGFjaFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBzKFRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSk6KGw9W10sbltUXSgiRE9NTm9kZUluc2VydGVkIixxZShMKSksbltUXSgiRE9NTm9kZVJlbW92ZWQiLHFlKEUpKSksbltUXShELHhlKSxuW1RdKCJyZWFkeXN0YXRlY2hhbmdlIix4ZSksbWUuY2xvbmVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PUxlLmNhbGwodGhpcywhIWUpLG49VWUodCk7cmV0dXJuLTE8biYmZih0LFVbbl0pLGUmJmsubGVuZ3RoJiZmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylmKHQ9ZVtuXSxVW1VlKHQpXSl9KHQucXVlcnlTZWxlY3RvckFsbChrKSksdH0pLERlKXJldHVybiBEZT0hMTtpZigtMjxxLmNhbGwoUixTK3IpK3EuY2FsbChSLEYrcikmJmplKGUpLCFWLnRlc3Qocil8fC0xPHEuY2FsbChQLHIpKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgIitlKyIgaXMgaW52YWxpZCIpO3ZhciByLG8sYT1mdW5jdGlvbigpe3JldHVybiB1P24uY3JlYXRlRWxlbWVudChtLHIpOm4uY3JlYXRlRWxlbWVudChtKX0saT10fHx4LHU9Qi5jYWxsKGksdiksbT11P3Rbdl0udG9VcHBlckNhc2UoKTpyO3JldHVybiB1JiYtMTxxLmNhbGwoUixGK20pJiZqZShtKSxvPVIucHVzaCgodT9TOkYpK3IpLTEsaz1rLmNvbmNhdChrLmxlbmd0aD8iLCI6IiIsdT9tKydbaXM9IicrZS50b0xvd2VyQ2FzZSgpKyciXSc6bSksYS5wcm90b3R5cGU9VVtvXT1CLmNhbGwoaSwicHJvdG90eXBlIik/aS5wcm90b3R5cGU6dWUobWUpLGsubGVuZ3RoJiZQZShuLnF1ZXJ5U2VsZWN0b3JBbGwoayksTCksYX0sbi5jcmVhdGVFbGVtZW50PXllPWZ1bmN0aW9uKGUsdCl7dmFyIHI9JGUodCksbz1yP2JlLmNhbGwobixlLGllKHIpKTpiZS5jYWxsKG4sZSksbD0iIitlLGE9cS5jYWxsKFIsKHI/UzpGKSsocnx8bCkudG9VcHBlckNhc2UoKSksaT0tMTxhO3JldHVybiByJiYoby5zZXRBdHRyaWJ1dGUoImlzIixyPXIudG9Mb3dlckNhc2UoKSksaSYmKGk9a2UobC50b1VwcGVyQ2FzZSgpLHIpKSksU2U9IW4uY3JlYXRlRWxlbWVudC5pbm5lckhUTUxIZWxwZXIsaSYmZihvLFVbYV0pLG99KSx6ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnplLGRlZmluZTpKP2Z1bmN0aW9uKGUsdCxuKXtpZihuKUtlKGUsdCxuKTtlbHNle3ZhciByPWUudG9VcHBlckNhc2UoKTtvZVtyXT17Y29uc3RydWN0b3I6dCxjcmVhdGU6W3JdfSxhZS5zZXQodCxyKSxZLmRlZmluZShlLHQpfX06S2UsZ2V0Oko/ZnVuY3Rpb24oZSl7cmV0dXJuIFkuZ2V0KGUpfHxYZShlKX06WGUsd2hlbkRlZmluZWQ6Sj9mdW5jdGlvbihlKXtyZXR1cm4gbmUucmFjZShbWS53aGVuRGVmaW5lZChlKSxXZShlKV0pfTpXZX0sIVl8fC9eZm9yY2UvLnRlc3QodC50eXBlKSlZZSgpO2Vsc2UgaWYoIXQubm9CdWlsdEluKXRyeXshZnVuY3Rpb24odCxyLG8pe3ZhciBsPW5ldyBSZWdFeHAoIl48YVxccytpcz0oJ3xcIikiK28rIlxcMT48L2E+JCIpO2lmKHJbdl09ImEiLCh0LnByb3RvdHlwZT11ZShIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj10LGUuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG8sdCxyKSwhbC50ZXN0KG4uY3JlYXRlRWxlbWVudCgiYSIse2lzOm99KS5vdXRlckhUTUwpfHwhbC50ZXN0KChuZXcgdCkub3V0ZXJIVE1MKSl0aHJvdyByfShmdW5jdGlvbiBlKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxBbmNob3JFbGVtZW50LFtdLGUpfSx7fSwiZG9jdW1lbnQtcmVnaXN0ZXItZWxlbWVudC1hIil9Y2F0Y2goZSl7WWUoKX1pZighdC5ub0J1aWx0SW4pdHJ5e2JlLmNhbGwobiwiYSIsImEiKX1jYXRjaChlKXtpZT1mdW5jdGlvbihlKXtyZXR1cm57aXM6ZS50b0xvd2VyQ2FzZSgpfX19fSh3aW5kb3cpOyh3aW5kb3cud2VicGFja0pzb25wPXdpbmRvdy53ZWJwYWNrSnNvbnB8fFtdKS5wdXNoKFtbNV0seyIrdEo0IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpJiYhZS5jbG9zZWQ7bisrKWUubmV4dCh0W25dKTtlLmNsb3NlZHx8ZS5jb21wbGV0ZSgpfX19LCIrdW1LIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoKXt9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIi9XWXYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3Vic2NyaWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LCIwL1E2IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkNjbkciKSxvPW4oIldmNHAiKSxhPW4oImxMQVAiKSxzPW4oIm42Z0ciKSx1PW4oIllsYlEiKSxjPW4oIllTaDIiKSxsPShuKCJnSWNZIiksbigicHVnVCIpKSxmPU9iamVjdChvLnYpKGZ1bmN0aW9uKCl7fSksaD1PYmplY3Qoby52KShmdW5jdGlvbigpe30pLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oZikscD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfShmKSxtPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLl9uYXZMaXN0PW4saS5faXNOYXZMaXN0PSExLGkuX2lzTmF2TGlzdD0hIW4saX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5faXNSaXBwbGVEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9pc05hdkxpc3R8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fbmF2TGlzdC5kaXNhYmxlUmlwcGxlfSxlLnByb3RvdHlwZS5faGFuZGxlRm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LWxpc3QtaXRlbS1mb2N1cyIpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCJtYXQtbGlzdC1pdGVtLWZvY3VzIil9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGV9KGgpLHk9T2JqZWN0KG8udikoT2JqZWN0KG8udykoZnVuY3Rpb24oKXt9KSksdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2VsZW1lbnQ9ZSxyLl9jaGFuZ2VEZXRlY3Rvcj1uLHIuc2VsZWN0aW9uTGlzdD1pLHIuX3NlbGVjdGVkPSExLHIuX2Rpc2FibGVkPSExLHIuX2hhc0ZvY3VzPSExLHIuY2hlY2tib3hQb3NpdGlvbj0iYWZ0ZXIiLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5zZWxlY3Rpb25MaXN0JiZ0aGlzLnNlbGVjdGlvbkxpc3QuZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt2YXIgZT1PYmplY3Qocy5iKSh0KTtlIT09dGhpcy5fZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInNlbGVjdGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuaXNTZWxlY3RlZCh0aGlzKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChzLmIpKHQpO2UhPT10aGlzLl9zZWxlY3RlZCYmKHRoaXMuX3NldFNlbGVjdGVkKGUpLHRoaXMuc2VsZWN0aW9uTGlzdC5fcmVwb3J0VmFsdWVDaGFuZ2UoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5fc2VsZWN0ZWQ7UHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpeyh0Ll9zZWxlY3RlZHx8ZSkmJih0LnNlbGVjdGVkPSEwLHQuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pfSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXtuZXcgby5qKHRoaXMuX2xpbmVzLHRoaXMuX2VsZW1lbnQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zZWxlY3RlZCYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LnNlbGVjdGVkPSExfSksdGhpcy5zZWxlY3Rpb25MaXN0Ll9yZW1vdmVPcHRpb25Gcm9tTGlzdCh0aGlzKX0sZS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD0hdGhpcy5zZWxlY3RlZH0sZS5wcm90b3R5cGUuZm9jdXM9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0sZS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGV4dD90aGlzLl90ZXh0Lm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ6IiJ9LGUucHJvdG90eXBlLl9pc1JpcHBsZURpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5zZWxlY3Rpb25MaXN0LmRpc2FibGVSaXBwbGV9LGUucHJvdG90eXBlLl9oYW5kbGVDbGljaz1mdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnRvZ2dsZSgpLHRoaXMuc2VsZWN0aW9uTGlzdC5fZW1pdENoYW5nZUV2ZW50KHRoaXMpKX0sZS5wcm90b3R5cGUuX2hhbmRsZUZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5faGFzRm9jdXM9ITAsdGhpcy5zZWxlY3Rpb25MaXN0Ll9zZXRGb2N1c2VkT3B0aW9uKHRoaXMpfSxlLnByb3RvdHlwZS5faGFuZGxlQmx1cj1mdW5jdGlvbigpe3RoaXMuX2hhc0ZvY3VzPSExLHRoaXMuc2VsZWN0aW9uTGlzdC5fb25Ub3VjaGVkKCl9LGUucHJvdG90eXBlLl9nZXRIb3N0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnR9LGUucHJvdG90eXBlLl9zZXRTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9dCx0P3RoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0KHRoaXMpOnRoaXMuc2VsZWN0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuZGVzZWxlY3QodGhpcyksdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksITApfSxlfShPYmplY3Qoby52KShmdW5jdGlvbigpe30pKSxnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX2VsZW1lbnQ9ZSxpLnNlbGVjdGlvbkNoYW5nZT1uZXcgci5tLGkudGFiSW5kZXg9MCxpLnNlbGVjdGVkT3B0aW9ucz1uZXcgdS5hKCEwKSxpLl9vbkNoYW5nZT1mdW5jdGlvbih0KXt9LGkuX21vZGVsQ2hhbmdlcz1sLmEuRU1QVFksaS5fb25Ub3VjaGVkPWZ1bmN0aW9uKCl7fSxpLnRhYkluZGV4PXBhcnNlSW50KG4pfHwwLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlckNvbnRlbnRJbml0PWZ1bmN0aW9uKCl7dGhpcy5fa2V5TWFuYWdlcj1uZXcgYS5hKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKCkuc2tpcFByZWRpY2F0ZShmdW5jdGlvbigpe3JldHVybiExfSksdGhpcy5fdGVtcFZhbHVlcyYmKHRoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHRoaXMuX3RlbXBWYWx1ZXMpLHRoaXMuX3RlbXBWYWx1ZXM9bnVsbCksdGhpcy5fbW9kZWxDaGFuZ2VzPXRoaXMuc2VsZWN0ZWRPcHRpb25zLm9uQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXtpZih0LmFkZGVkKWZvcih2YXIgZT0wLG49dC5hZGRlZDtlPG4ubGVuZ3RoO2UrKyluW2VdLnNlbGVjdGVkPSEwO2lmKHQucmVtb3ZlZClmb3IodmFyIGk9MCxyPXQucmVtb3ZlZDtpPHIubGVuZ3RoO2krKylyW2ldLnNlbGVjdGVkPSExfSl9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbW9kZWxDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9LGUucHJvdG90eXBlLnNlbGVjdEFsbD1mdW5jdGlvbigpe3RoaXMuX3NldEFsbE9wdGlvbnNTZWxlY3RlZCghMCl9LGUucHJvdG90eXBlLmRlc2VsZWN0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWxsT3B0aW9uc1NlbGVjdGVkKCExKX0sZS5wcm90b3R5cGUuX3NldEZvY3VzZWRPcHRpb249ZnVuY3Rpb24odCl7dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtSW5kZXgodGhpcy5fZ2V0T3B0aW9uSW5kZXgodCkpfSxlLnByb3RvdHlwZS5fcmVtb3ZlT3B0aW9uRnJvbUxpc3Q9ZnVuY3Rpb24odCl7aWYodC5faGFzRm9jdXMpe3ZhciBlPXRoaXMuX2dldE9wdGlvbkluZGV4KHQpO2U+MD90aGlzLl9rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOjA9PT1lJiZ0aGlzLm9wdGlvbnMubGVuZ3RoPjEmJnRoaXMuX2tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKX19LGUucHJvdG90eXBlLl9rZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxuPXRoaXMuX2tleU1hbmFnZXIsaT1uLmFjdGl2ZUl0ZW1JbmRleDtzd2l0Y2goZSl7Y2FzZSBjLmo6Y2FzZSBjLmQ6dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3RvZ2dsZVNlbGVjdE9uRm9jdXNlZE9wdGlvbigpLHQucHJldmVudERlZmF1bHQoKSk7YnJlYWs7Y2FzZSBjLmY6Y2FzZSBjLmM6ZT09PWMuZj9uLnNldEZpcnN0SXRlbUFjdGl2ZSgpOm4uc2V0TGFzdEl0ZW1BY3RpdmUoKSx0LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDpuLm9uS2V5ZG93bih0KX1lIT09Yy5sJiZlIT09Yy5ifHwhdC5zaGlmdEtleXx8bi5hY3RpdmVJdGVtSW5kZXg9PT1pfHx0aGlzLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb24oKX0sZS5wcm90b3R5cGUuX3JlcG9ydFZhbHVlQ2hhbmdlPWZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiZ0aGlzLl9vbkNoYW5nZSh0aGlzLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcygpKX0sZS5wcm90b3R5cGUuX2VtaXRDaGFuZ2VFdmVudD1mdW5jdGlvbih0KXt0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5ldyBmdW5jdGlvbih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy5vcHRpb249ZX0odGhpcyx0KSl9LGUucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zP3RoaXMuX3NldE9wdGlvbnNGcm9tVmFsdWVzKHR8fFtdKTp0aGlzLl90ZW1wVmFsdWVzPXR9LGUucHJvdG90eXBlLnNldERpc2FibGVkU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD10fSl9LGUucHJvdG90eXBlLnJlZ2lzdGVyT25DaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fb25DaGFuZ2U9dH0sZS5wcm90b3R5cGUucmVnaXN0ZXJPblRvdWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5fb25Ub3VjaGVkPXR9LGUucHJvdG90eXBlLl9zZXRPcHRpb25zRnJvbVZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9zZXRTZWxlY3RlZCghMSl9KSx0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5vcHRpb25zLmZpbmQoZnVuY3Rpb24obil7cmV0dXJuIGUuY29tcGFyZVdpdGg/ZS5jb21wYXJlV2l0aChuLnZhbHVlLHQpOm4udmFsdWU9PT10fSl9KS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5fc2V0U2VsZWN0ZWQoITApfSl9LGUucHJvdG90eXBlLl9nZXRTZWxlY3RlZE9wdGlvblZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LGUucHJvdG90eXBlLl90b2dnbGVTZWxlY3RPbkZvY3VzZWRPcHRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtpZihudWxsIT10JiZ0aGlzLl9pc1ZhbGlkSW5kZXgodCkpe3ZhciBlPXRoaXMub3B0aW9ucy50b0FycmF5KClbdF07ZSYmKGUudG9nZ2xlKCksdGhpcy5fZW1pdENoYW5nZUV2ZW50KGUpKX19LGUucHJvdG90eXBlLl9zZXRBbGxPcHRpb25zU2VsZWN0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9ITE7dGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24obil7bi5fc2V0U2VsZWN0ZWQodCkmJihlPSEwKX0pLGUmJnRoaXMuX3JlcG9ydFZhbHVlQ2hhbmdlKCl9LGUucHJvdG90eXBlLl9pc1ZhbGlkSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTAmJnQ8dGhpcy5vcHRpb25zLmxlbmd0aH0sZS5wcm90b3R5cGUuX2dldE9wdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMudG9BcnJheSgpLmluZGV4T2YodCl9LGV9KHkpLGI9ZnVuY3Rpb24oKXt9fSwiMC91USI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCI2YmxGIikscj1uKCIvV1l2Iiksbz1uKCIyZVBsIiksYT1uKCJ4VGxhIikscz1uKCJFbjgrIiksdT1uKCJJVVRiIiksYz1uKCJwdWdUIiksbD1uKCJTNVhRIiksZj1uKCJ1NjdEIiksaD1uKCJKY1J2IiksZD1uKCJGeGIxIik7ZnVuY3Rpb24gcCh0LGUpe2lmKCFlKXJldHVybiB0IGluc3RhbmNlb2YgaS5hP3Q6bmV3IGkuYShPYmplY3QoZC5hKSh0KSk7aWYobnVsbCE9dCl7aWYoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2EuYV19KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaS5hKGU/ZnVuY3Rpb24obil7dmFyIGk9bmV3IGMuYTtyZXR1cm4gaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3ZhciByPXRbYS5hXSgpO2kuYWRkKHIuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKHQpe2kuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5uZXh0KHQpfSkpfSxlcnJvcjpmdW5jdGlvbih0KXtpLmFkZChlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZXJyb3IodCl9KSl9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9fSkpfSkpLGl9Ok9iamVjdChoLmEpKHQpKX0odCxlKTtpZihPYmplY3Qoci5hKSh0KSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3ZhciBpPW5ldyBjLmE7cmV0dXJuIGkuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gdC50aGVuKGZ1bmN0aW9uKHQpe2kuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtuLm5leHQodCksaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe3JldHVybiBuLmNvbXBsZXRlKCl9KSl9KSl9LGZ1bmN0aW9uKHQpe2kuYWRkKGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyZXR1cm4gbi5lcnJvcih0KX0pKX0pfSkpLGl9Ok9iamVjdChsLmEpKHQpKX0odCxlKTtpZihPYmplY3Qoby5hKSh0KSlyZXR1cm4gT2JqZWN0KHUuYSkodCxlKTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbcy5hXX0odCl8fCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBpLmEoZT9mdW5jdGlvbihuKXt2YXIgaSxyPW5ldyBjLmE7cmV0dXJuIHIuYWRkKGZ1bmN0aW9uKCl7aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkucmV0dXJuJiZpLnJldHVybigpfSksci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe2k9dFtzLmFdKCksci5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe2lmKCFuLmNsb3NlZCl7dmFyIHQsZTt0cnl7dmFyIHI9aS5uZXh0KCk7dD1yLnZhbHVlLGU9ci5kb25lfWNhdGNoKHQpe3JldHVybiB2b2lkIG4uZXJyb3IodCl9ZT9uLmNvbXBsZXRlKCk6KG4ubmV4dCh0KSx0aGlzLnNjaGVkdWxlKCkpfX0pKX0pKSxyfTpPYmplY3QoZi5hKSh0KSl9KHQsZSl9dGhyb3cgbmV3IFR5cGVFcnJvcigobnVsbCE9PXQmJnR5cGVvZiB0fHx0KSsiIGlzIG5vdCBvYnNlcnZhYmxlIil9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KX0sIjIxTGIiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9bigiT3pmQiIpLG89bigiSzlJYSIpLGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIGkuc2NoZWR1bGVyPWUsaS53b3JrPW4saX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuc2NoZWR1bGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49MCksbj4wP3QucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxlLG4pOih0aGlzLmRlbGF5PW4sdGhpcy5zdGF0ZT1lLHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfSxlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4+MHx8dGhpcy5jbG9zZWQ/dC5wcm90b3R5cGUuZXhlY3V0ZS5jYWxsKHRoaXMsZSxuKTp0aGlzLl9leGVjdXRlKGUsbil9LGUucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkPWZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9MCksbnVsbCE9PWkmJmk+MHx8bnVsbD09PWkmJnRoaXMuZGVsYXk+MD90LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsZSxuLGkpOmUuZmx1c2godGhpcyl9LGV9KG4oImg5RHEiKS5hKSxzPW5ldyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gaS5iKGUsdCksZX0obigiQ1M5USIpLmEpKShhKSx1PW4oInB1Z1QiKSxjPW4oIkZGT28iKSxsPW4oIjYwaVUiKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZvaWQgMD09PWkmJihpPTApO3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1uLHIuZGVsYXk9aSxyfXJldHVybiBpLmIoZSx0KSxlLmRpc3BhdGNoPWZ1bmN0aW9uKHQpe3Qubm90aWZpY2F0aW9uLm9ic2VydmUodC5kZXN0aW5hdGlvbiksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5zY2hlZHVsZU1lc3NhZ2U9ZnVuY3Rpb24odCl7dGhpcy5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZS5kaXNwYXRjaCx0aGlzLmRlbGF5LG5ldyBoKHQsdGhpcy5kZXN0aW5hdGlvbikpKX0sZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZU5leHQodCkpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZUVycm9yKHQpKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5zY2hlZHVsZU1lc3NhZ2UobC5hLmNyZWF0ZUNvbXBsZXRlKCkpfSxlfShjLmEpLGg9ZnVuY3Rpb24odCxlKXt0aGlzLm5vdGlmaWNhdGlvbj10LHRoaXMuZGVzdGluYXRpb249ZX0sZD1uKCI4ZzhBIikscD1uKCJ1TWFPIiksbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2b2lkIDA9PT1lJiYoZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHZvaWQgMD09PW4mJihuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnNjaGVkdWxlcj1pLHIuX2V2ZW50cz1bXSxyLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITEsci5fYnVmZmVyU2l6ZT1lPDE/MTplLHIuX3dpbmRvd1RpbWU9bjwxPzE6bixuPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZPyhyLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsci5uZXh0PXIubmV4dEluZmluaXRlVGltZVdpbmRvdyk6ci5uZXh0PXIubmV4dFRpbWVXaW5kb3cscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubmV4dEluZmluaXRlVGltZVdpbmRvdz1mdW5jdGlvbihlKXt2YXIgbj10aGlzLl9ldmVudHM7bi5wdXNoKGUpLG4ubGVuZ3RoPnRoaXMuX2J1ZmZlclNpemUmJm4uc2hpZnQoKSx0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUubmV4dFRpbWVXaW5kb3c9ZnVuY3Rpb24oZSl7dGhpcy5fZXZlbnRzLnB1c2gobmV3IHkodGhpcy5fZ2V0Tm93KCksZSkpLHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCksdC5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3csaT1uP3RoaXMuX2V2ZW50czp0aGlzLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cygpLHI9dGhpcy5zY2hlZHVsZXIsbz1pLmxlbmd0aDtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgZC5hO2lmKHRoaXMuaXNTdG9wcGVkfHx0aGlzLmhhc0Vycm9yP2U9dS5hLkVNUFRZOih0aGlzLm9ic2VydmVycy5wdXNoKHQpLGU9bmV3IHAuYSh0aGlzLHQpKSxyJiZ0LmFkZCh0PW5ldyBmKHQscikpLG4pZm9yKHZhciBhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChpW2FdKTtlbHNlIGZvcihhPTA7YTxvJiYhdC5jbG9zZWQ7YSsrKXQubmV4dChpW2FdLnZhbHVlKTtyZXR1cm4gdGhpcy5oYXNFcnJvcj90LmVycm9yKHRoaXMudGhyb3duRXJyb3IpOnRoaXMuaXNTdG9wcGVkJiZ0LmNvbXBsZXRlKCksZX0sZS5wcm90b3R5cGUuX2dldE5vdz1mdW5jdGlvbigpe3JldHVybih0aGlzLnNjaGVkdWxlcnx8cykubm93KCl9LGUucHJvdG90eXBlLl90cmltQnVmZmVyVGhlbkdldEV2ZW50cz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9nZXROb3coKSxlPXRoaXMuX2J1ZmZlclNpemUsbj10aGlzLl93aW5kb3dUaW1lLGk9dGhpcy5fZXZlbnRzLHI9aS5sZW5ndGgsbz0wO288ciYmISh0LWlbb10udGltZTxuKTspbysrO3JldHVybiByPmUmJihvPU1hdGgubWF4KG8sci1lKSksbz4wJiZpLnNwbGljZSgwLG8pLGl9LGV9KG8uYSkseT1mdW5jdGlvbih0LGUpe3RoaXMudGltZT10LHRoaXMudmFsdWU9ZX07bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB4fSk7dmFyIHY9ImlubGluZSIsZz1bInJvdyIsImNvbHVtbiIsInJvdy1yZXZlcnNlIiwiY29sdW1uLXJldmVyc2UiXTtmdW5jdGlvbiBiKHQpe3ZhciBlPSh0PXQ/dC50b0xvd2VyQ2FzZSgpOiIiKS5zcGxpdCgiICIpLG49ZVswXSxpPWVbMV0scj1lWzJdO3JldHVybiBnLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1ufSl8fChuPWdbMF0pLGk9PT12JiYoaT1yIT09dj9yOiIiLHI9diksW24sZnVuY3Rpb24odCl7aWYodClzd2l0Y2godC50b0xvd2VyQ2FzZSgpKXtjYXNlInJldmVyc2UiOmNhc2Uid3JhcC1yZXZlcnNlIjpjYXNlInJldmVyc2Utd3JhcCI6dD0id3JhcC1yZXZlcnNlIjticmVhaztjYXNlIm5vIjpjYXNlIm5vbmUiOmNhc2Uibm93cmFwIjp0PSJub3dyYXAiO2JyZWFrO2RlZmF1bHQ6dD0id3JhcCJ9cmV0dXJuIHR9KGkpLCEhcl19ZnVuY3Rpb24gXyh0KXtyZXR1cm4gYih0KVswXS5pbmRleE9mKCJyb3ciKT4tMX12YXIgdz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIHIuX2Fubm91bmNlcj1uZXcgbSgxKSxyLmxheW91dCQ9ci5fYW5ub3VuY2VyLmFzT2JzZXJ2YWJsZSgpLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXQiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0Iix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0R3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0R3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibGF5b3V0THRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJsYXlvdXRMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImxheW91dEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgibGF5b3V0THRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJsYXlvdXRMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImxheW91dEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmxheW91dHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygibGF5b3V0Iiwicm93IixmdW5jdGlvbih0KXtlLl91cGRhdGVXaXRoRGlyZWN0aW9uKHQudmFsdWUpfSksdGhpcy5fdXBkYXRlV2l0aERpcmVjdGlvbigpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aERpcmVjdGlvbj1mdW5jdGlvbih0KXt0PXR8fHRoaXMuX3F1ZXJ5SW5wdXQoImxheW91dCIpfHwicm93Iix0aGlzLl9tcUFjdGl2YXRpb24mJih0PXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9Yih0KTtyZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx2b2lkIDA9PT1pJiYoaT0hMSkse2Rpc3BsYXk6aT8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6ZVswXSwiZmxleC13cmFwIjpufHxudWxsfX0oMCxlWzFdLGVbMl0pfSh0fHwiIik7dGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudChlKSx0aGlzLl9hbm5vdW5jZXIubmV4dCh7ZGlyZWN0aW9uOmVbImZsZXgtZGlyZWN0aW9uIl0sd3JhcDohIWVbImZsZXgtd3JhcCJdJiYibm93cmFwIiE9PWVbImZsZXgtd3JhcCJdfSl9LGV9KHIuYikseD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhKXt2YXIgcz10LmNhbGwodGhpcyxlLG4sYSl8fHRoaXM7cmV0dXJuIHMuX3pvbmU9cixzLl9kaXJlY3Rpb25hbGl0eT1vLHMuX2xheW91dD0icm93IixpJiYocy5fbGF5b3V0V2F0Y2hlcj1pLmxheW91dCQuc3Vic2NyaWJlKHMuX29uTGF5b3V0Q2hhbmdlLmJpbmQocykpKSxzLl9kaXJlY3Rpb25XYXRjaGVyPXMuX2RpcmVjdGlvbmFsaXR5LmNoYW5nZS5zdWJzY3JpYmUocy5fdXBkYXRlV2l0aFZhbHVlLmJpbmQocykpLHN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXAiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0WHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEd0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEd0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0U20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZ2FwTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJnYXBMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdhcEx0TGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ2FwTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJnYXBMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImdhcEx0WGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpeyhudWxsIT10LmdhcHx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fd2F0Y2hDb250ZW50Q2hhbmdlcygpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJnYXAiLCIwIixmdW5jdGlvbihlKXt0Ll91cGRhdGVXaXRoVmFsdWUoZS52YWx1ZSl9KSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5uZ09uRGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2xheW91dFdhdGNoZXImJnRoaXMuX2xheW91dFdhdGNoZXIudW5zdWJzY3JpYmUoKSx0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX2RpcmVjdGlvbldhdGNoZXImJnRoaXMuX2RpcmVjdGlvbldhdGNoZXIudW5zdWJzY3JpYmUoKX0sZS5wcm90b3R5cGUuX3dhdGNoQ29udGVudENoYW5nZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXsidW5kZWZpbmVkIiE9dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXImJih0Ll9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkZWROb2RlcyYmdC5hZGRlZE5vZGVzLmxlbmd0aD4wfHx0LnJlbW92ZWROb2RlcyYmdC5yZW1vdmVkTm9kZXMubGVuZ3RoPjB9KSYmdC5fdXBkYXRlV2l0aFZhbHVlKCl9KSx0Ll9vYnNlcnZlci5vYnNlcnZlKHQubmF0aXZlRWxlbWVudCx7Y2hpbGRMaXN0OiEwfSkpfSl9LGUucHJvdG90eXBlLl9vbkxheW91dENoYW5nZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2xheW91dD0odC5kaXJlY3Rpb258fCIiKS50b0xvd2VyQ2FzZSgpLGcuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUuX2xheW91dH0pfHwodGhpcy5fbGF5b3V0PSJyb3ciKSx0aGlzLl91cGRhdGVXaXRoVmFsdWUoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZVdpdGhWYWx1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dHx8dGhpcy5fcXVlcnlJbnB1dCgiZ2FwIil8fCIwIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIGk9dGhpcy5jaGlsZHJlbk5vZGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubm9kZVR5cGUmJiJub25lIiE9ZS5fZ2V0RGlzcGxheVN0eWxlKHQpfSkuc29ydChmdW5jdGlvbih0LG4pe3ZhciBpPStlLl9zdHlsZXIubG9va3VwU3R5bGUodCwib3JkZXIiKSxyPStlLl9zdHlsZXIubG9va3VwU3R5bGUobiwib3JkZXIiKTtyZXR1cm4gaXNOYU4oaSl8fGlzTmFOKHIpfHxpPT09cj8wOmk+cj8xOi0xfSk7aWYoaS5sZW5ndGg+MClpZihuLmVuZHNXaXRoKFMpKW49bi5zdWJzdHJpbmcoMCxuLmluZGV4T2YoUykpLHRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnRzKHRoaXMuX2J1aWxkR3JpZFBhZGRpbmcobiksaSksdGhpcy5fYXBwbHlTdHlsZVRvRWxlbWVudCh0aGlzLl9idWlsZEdyaWRNYXJnaW4obikpO2Vsc2V7dmFyIHI9aS5wb3AoKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUyhuKSxpKSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50cyh0aGlzLl9idWlsZENTUygpLFtyXSl9fSxlLnByb3RvdHlwZS5fYnVpbGRHcmlkUGFkZGluZz1mdW5jdGlvbih0KXt2YXIgZT0iMHB4IixuPSIwcHgiO3JldHVybiJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/bj10OmU9dCx7cGFkZGluZzoiMHB4ICIrZSsiICIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZEdyaWRNYXJnaW49ZnVuY3Rpb24odCl7dmFyIGU9IjBweCIsbj0iMHB4IjtyZXR1cm4icnRsIj09PXRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlP249Ii0iK3Q6ZT0iLSIrdCx7bWFyZ2luOiIwcHggIitlKyIgLSIrdCsiICIrbn19LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1udWxsKTt2YXIgZSxuPXsibWFyZ2luLWxlZnQiOm51bGwsIm1hcmdpbi1yaWdodCI6bnVsbCwibWFyZ2luLXRvcCI6bnVsbCwibWFyZ2luLWJvdHRvbSI6bnVsbH07c3dpdGNoKHRoaXMuX2xheW91dCl7Y2FzZSJjb2x1bW4iOmU9Im1hcmdpbi1ib3R0b20iO2JyZWFrO2Nhc2UiY29sdW1uLXJldmVyc2UiOmU9Im1hcmdpbi10b3AiO2JyZWFrO2Nhc2Uicm93IjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1sZWZ0IjoibWFyZ2luLXJpZ2h0IjticmVhaztjYXNlInJvdy1yZXZlcnNlIjplPSJydGwiPT09dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWU/Im1hcmdpbi1yaWdodCI6Im1hcmdpbi1sZWZ0IjticmVhaztkZWZhdWx0OmU9InJ0bCI9PT10aGlzLl9kaXJlY3Rpb25hbGl0eS52YWx1ZT8ibWFyZ2luLWxlZnQiOiJtYXJnaW4tcmlnaHQifXJldHVybiBuW2VdPXQsbn0sZX0oci5iKSxTPSIgZ3JpZCI7ZnVuY3Rpb24gRSh0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBpPTAscj1lO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyLG8pe3ZhciBhPXQuY2FsbCh0aGlzLGUsbixyKXx8dGhpcztyZXR1cm4gYS5fY29udGFpbmVyPWksYS5zdHlsZVV0aWxzPXIsYS5sYXlvdXRDb25maWc9byxhLl9jYWNoZUlucHV0KCJmbGV4IiwiIiksYS5fY2FjaGVJbnB1dCgic2hyaW5rIiwxKSxhLl9jYWNoZUlucHV0KCJncm93IiwxKSxpJiYoYS5fbGF5b3V0V2F0Y2hlcj1pLmxheW91dCQuc3Vic2NyaWJlKGZ1bmN0aW9uKHQpe2EuX29uTGF5b3V0Q2hhbmdlKHQpfSkpLGF9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzaHJpbmsiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgic2hyaW5rIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImdyb3ciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZ3JvdyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4Iix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXgiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJmbGV4TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZmxleExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmbGV4WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiZmxleFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFhzIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhHdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhHdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdE1kIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdE1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdExnIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZsZXhMdFhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImZsZXhMdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5mbGV4fHx0aGlzLl9tcUFjdGl2YXRpb24pJiZ0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5wcm90b3R5cGUubmdPbkluaXQuY2FsbCh0aGlzKSx0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcygiZmxleCIsIiIsZnVuY3Rpb24odCl7ZS5fdXBkYXRlU3R5bGUodC52YWx1ZSl9KSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fb25MYXlvdXRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy5fbGF5b3V0PXR8fHRoaXMuX2xheW91dHx8e2RpcmVjdGlvbjoicm93Iix3cmFwOiExfSx0aGlzLl91cGRhdGVTdHlsZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9dHx8dGhpcy5fcXVlcnlJbnB1dCgiZmxleCIpfHwiIjt0aGlzLl9tcUFjdGl2YXRpb24mJihlPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCk7dmFyIG49U3RyaW5nKGUpLnJlcGxhY2UoIjsiLCIiKSxpPU9iamVjdChyLm8pKG4sdGhpcy5fcXVlcnlJbnB1dCgiZ3JvdyIpLHRoaXMuX3F1ZXJ5SW5wdXQoInNocmluayIpKTt0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX3ZhbGlkYXRlVmFsdWUuYXBwbHkodGhpcyxpKSl9LGUucHJvdG90eXBlLl92YWxpZGF0ZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbih0aGlzLnBhcmVudEVsZW1lbnQsdGhpcy5sYXlvdXRDb25maWcuYWRkRmxleFRvUGFyZW50KS5pbmRleE9mKCJjb2x1bW4iKT4tMT8iY29sdW1uIjoicm93IixyPV8oaSk/Im1heC13aWR0aCI6Im1heC1oZWlnaHQiLG89XyhpKT8ibWluLXdpZHRoIjoibWluLWhlaWdodCIsYT1TdHJpbmcobikuaW5kZXhPZigiY2FsYyIpPi0xLHM9YXx8ImF1dG8iPT1uLHU9U3RyaW5nKG4pLmluZGV4T2YoIiUiKT4tMSYmIWEsYz1TdHJpbmcobikuaW5kZXhPZigicHgiKT4tMXx8U3RyaW5nKG4pLmluZGV4T2YoImVtIik+LTF8fFN0cmluZyhuKS5pbmRleE9mKCJ2dyIpPi0xfHxTdHJpbmcobikuaW5kZXhPZigidmgiKT4tMSxsPVN0cmluZyhuKS5pbmRleE9mKCJweCIpPi0xfHxzLGY9YXx8Yzt0PSIwIj09dD8wOnQsZT0iMCI9PWU/MDplO3ZhciBoPSF0JiYhZSxkPXt9LHA9eyJtYXgtd2lkdGgiOm51bGwsIm1heC1oZWlnaHQiOm51bGwsIm1pbi13aWR0aCI6bnVsbCwibWluLWhlaWdodCI6bnVsbH07c3dpdGNoKG58fCIiKXtjYXNlIiI6bj0icm93Ij09PWk/IjAlIjp0aGlzLmxheW91dENvbmZpZy51c2VDb2x1bW5CYXNpc1plcm8/IjAuMDAwMDAwMDAxcHgiOiJhdXRvIjticmVhaztjYXNlImluaXRpYWwiOmNhc2Uibm9ncm93Ijp0PTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJncm93IjpuPSIxMDAlIjticmVhaztjYXNlIm5vc2hyaW5rIjplPTAsbj0iYXV0byI7YnJlYWs7Y2FzZSJhdXRvIjpicmVhaztjYXNlIm5vbmUiOnQ9MCxlPTAsbj0iYXV0byI7YnJlYWs7ZGVmYXVsdDpmfHx1fHxpc05hTihuKXx8KG4rPSIlIiksIjAlIj09PW4mJihmPSEwKSwiMHB4Ij09PW4mJihuPSIwJSIpLGQ9RShwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpmP246IjEwMCUifTp7ZmxleDp0KyIgIitlKyIgIisoZj9uOiIxMDAlIil9KX1yZXR1cm4gZC5mbGV4fHxkWyJmbGV4LWdyb3ciXXx8KGQ9RShwLGE/eyJmbGV4LWdyb3ciOnQsImZsZXgtc2hyaW5rIjplLCJmbGV4LWJhc2lzIjpufTp7ZmxleDp0KyIgIitlKyIgIitufSkpLCIwJSIhPT1uJiYiMHB4IiE9PW4mJiIwLjAwMDAwMDAwMXB4IiE9PW4mJiJhdXRvIiE9PW4mJihkW29dPWh8fGwmJnQ/bjpudWxsLGRbcl09aHx8IXMmJmU/bjpudWxsKSxkW29dfHxkW3JdP3RoaXMuX2xheW91dCYmdGhpcy5fbGF5b3V0LndyYXAmJihkW2E/ImZsZXgtYmFzaXMiOiJmbGV4Il09ZFtyXT9hP2Rbcl06dCsiICIrZSsiICIrZFtyXTphP2Rbb106dCsiICIrZSsiICIrZFtvXSk6ZD1FKHAsYT97ImZsZXgtZ3JvdyI6dCwiZmxleC1zaHJpbmsiOmUsImZsZXgtYmFzaXMiOm59OntmbGV4OnQrIiAiK2UrIiAiK259KSxFKGQseyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9KX0sZX0oci5iKSxPPXttYXJnaW46MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIiwibWluLXdpZHRoIjoiMTAwJSIsIm1pbi1oZWlnaHQiOiIxMDAlIn0sVD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlLG4saSl8fHRoaXM7cmV0dXJuIHIuZWxSZWY9bixyLl9hcHBseVN0eWxlVG9FbGVtZW50KE8pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZX0oci5iKSxrPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuLHIpfHx0aGlzO3JldHVybiBvLl9sYXlvdXQ9InJvdyIsaSYmKG8uX2xheW91dFdhdGNoZXI9aS5sYXlvdXQkLnN1YnNjcmliZShvLl9vbkxheW91dENoYW5nZS5iaW5kKG8pKSksb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduWHMiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25YcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblNtIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduU20iLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25NZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbk1kIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTGciLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnblhsIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduWGwiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdFhzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RYcyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkd0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25HdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduR3RNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkd0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25HdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduR3RMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0U20iLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFNtIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFsaWduTHRNZCIse3NldDpmdW5jdGlvbih0KXt0aGlzLl9jYWNoZUlucHV0KCJhbGlnbkx0TWQiLHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYWxpZ25MdExnIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NhY2hlSW5wdXQoImFsaWduTHRMZyIsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhbGlnbkx0WGwiLHtzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fY2FjaGVJbnB1dCgiYWxpZ25MdFhsIix0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXsobnVsbCE9dC5hbGlnbnx8dGhpcy5fbXFBY3RpdmF0aW9uKSYmdGhpcy5fdXBkYXRlV2l0aFZhbHVlKCl9LGUucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LnByb3RvdHlwZS5uZ09uSW5pdC5jYWxsKHRoaXMpLHRoaXMuX2xpc3RlbkZvck1lZGlhUXVlcnlDaGFuZ2VzKCJhbGlnbiIsInN0YXJ0IHN0cmV0Y2giLGZ1bmN0aW9uKHQpe2UuX3VwZGF0ZVdpdGhWYWx1ZSh0LnZhbHVlKX0pLHRoaXMuX3VwZGF0ZVdpdGhWYWx1ZSgpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5fbGF5b3V0V2F0Y2hlciYmdGhpcy5fbGF5b3V0V2F0Y2hlci51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdXBkYXRlV2l0aFZhbHVlPWZ1bmN0aW9uKHQpe3Q9dHx8dGhpcy5fcXVlcnlJbnB1dCgiYWxpZ24iKXx8InN0YXJ0IHN0cmV0Y2giLHRoaXMuX21xQWN0aXZhdGlvbiYmKHQ9dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0KSx0aGlzLl9hcHBseVN0eWxlVG9FbGVtZW50KHRoaXMuX2J1aWxkQ1NTKHQpKSx0aGlzLl9hbGxvd1N0cmV0Y2hpbmcodCx0aGlzLl9sYXlvdXQ/dGhpcy5fbGF5b3V0OiJyb3ciKX0sZS5wcm90b3R5cGUuX29uTGF5b3V0Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fbGF5b3V0PSh0LmRpcmVjdGlvbnx8IiIpLnRvTG93ZXJDYXNlKCksZy5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZS5fbGF5b3V0fSl8fCh0aGlzLl9sYXlvdXQ9InJvdyIpO3ZhciBuPXRoaXMuX3F1ZXJ5SW5wdXQoImFsaWduIil8fCJzdGFydCBzdHJldGNoIjt0aGlzLl9tcUFjdGl2YXRpb24mJihuPXRoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dCksdGhpcy5fYWxsb3dTdHJldGNoaW5nKG4sdGhpcy5fbGF5b3V0fHwicm93Iil9LGUucHJvdG90eXBlLl9idWlsZENTUz1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuc3BsaXQoIiAiKSxpPW5bMV07c3dpdGNoKG5bMF0pe2Nhc2UiY2VudGVyIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iY2VudGVyIjticmVhaztjYXNlInNwYWNlLWFyb3VuZCI6ZVsianVzdGlmeS1jb250ZW50Il09InNwYWNlLWFyb3VuZCI7YnJlYWs7Y2FzZSJzcGFjZS1iZXR3ZWVuIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0ic3BhY2UtYmV0d2VlbiI7YnJlYWs7Y2FzZSJzcGFjZS1ldmVubHkiOmVbImp1c3RpZnktY29udGVudCJdPSJzcGFjZS1ldmVubHkiO2JyZWFrO2Nhc2UiZW5kIjpjYXNlImZsZXgtZW5kIjplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1lbmQiO2JyZWFrO2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZGVmYXVsdDplWyJqdXN0aWZ5LWNvbnRlbnQiXT0iZmxleC1zdGFydCJ9c3dpdGNoKGkpe2Nhc2Uic3RhcnQiOmNhc2UiZmxleC1zdGFydCI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImZsZXgtc3RhcnQiO2JyZWFrO2Nhc2UiYmFzZWxpbmUiOmVbImFsaWduLWl0ZW1zIl09ImJhc2VsaW5lIjticmVhaztjYXNlImNlbnRlciI6ZVsiYWxpZ24taXRlbXMiXT1lWyJhbGlnbi1jb250ZW50Il09ImNlbnRlciI7YnJlYWs7Y2FzZSJlbmQiOmNhc2UiZmxleC1lbmQiOmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJmbGV4LWVuZCI7YnJlYWs7Y2FzZSJzdHJldGNoIjpkZWZhdWx0OmVbImFsaWduLWl0ZW1zIl09ZVsiYWxpZ24tY29udGVudCJdPSJzdHJldGNoIn1yZXR1cm4gRShlLHtkaXNwbGF5OiJmbGV4IiwiZmxleC1kaXJlY3Rpb24iOnRoaXMuX2xheW91dHx8InJvdyIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pfSxlLnByb3RvdHlwZS5fYWxsb3dTdHJldGNoaW5nPWZ1bmN0aW9uKHQsZSl7InN0cmV0Y2giPT10LnNwbGl0KCIgIilbMV0mJnRoaXMuX2FwcGx5U3R5bGVUb0VsZW1lbnQoeyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCIsIm1heC13aWR0aCI6XyhlKT9udWxsOiIxMDAlIiwibWF4LWhlaWdodCI6XyhlKT8iMTAwJSI6bnVsbH0pfSxlfShyLmIpLEE9ZnVuY3Rpb24oKXt9fSwiMjZGVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIks5SWEiKSxvPW4oIjhnOEEiKSxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl92YWx1ZT1lLG59cmV0dXJuIGkuYihlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwidmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsZSk7cmV0dXJuIG4mJiFuLmNsb3NlZCYmZS5uZXh0KHRoaXMuX3ZhbHVlKSxufSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe2lmKHRoaXMuaGFzRXJyb3IpdGhyb3cgdGhpcy50aHJvd25FcnJvcjtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgby5hO3JldHVybiB0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyx0aGlzLl92YWx1ZT1lKX0sZX0oci5hKX0sIjJCZGoiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSwiMmVQbCI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgdH19LCIzcEpRIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSksbigibXJTRyIpLG4oIk96ZkIiKSxuKCJuNmdHIik7dmFyIGk9ZnVuY3Rpb24oKXt9fSwiNGMzNSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkNjbkciKTtmdW5jdGlvbiBvKCl7dGhyb3cgRXJyb3IoIkhvc3QgYWxyZWFkeSBoYXMgYSBwb3J0YWwgYXR0YWNoZWQiKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dCYmZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYSBwb3J0YWwgdG8gYSBudWxsIFBvcnRhbE91dGxldCIpfSgpLHQuaGFzQXR0YWNoZWQoKSYmbygpLHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hdHRhY2hlZEhvc3Q7bnVsbD09dD9mdW5jdGlvbigpe3Rocm93IEVycm9yKCJBdHRlbXB0aW5nIHRvIGRldGFjaCBhIHBvcnRhbCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhIGhvc3QiKX0oKToodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXNBdHRhY2hlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2V0QXR0YWNoZWRIb3N0PWZ1bmN0aW9uKHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fSx0fSgpLHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmNvbXBvbmVudD1lLHIudmlld0NvbnRhaW5lclJlZj1uLHIuaW5qZWN0b3I9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGEpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLnRlbXBsYXRlUmVmPWUsci52aWV3Q29udGFpbmVyUmVmPW4sci5jb250ZXh0PWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIm9yaWdpbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXRoaXMuY29udGV4dCksdGhpcy5jb250ZXh0PW4sdC5wcm90b3R5cGUuYXR0YWNoLmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsdC5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyl9LGV9KGEpLGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faXNEaXNwb3NlZD0hMX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzQXR0YWNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHR8fGZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoIk11c3QgcHJvdmlkZSBhIHBvcnRhbCB0byBhdHRhY2giKX0oKSx0aGlzLmhhc0F0dGFjaGVkKCkmJm8oKSx0aGlzLl9pc0Rpc3Bvc2VkJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJUaGlzIFBvcnRhbE91dGxldCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIil9KCksdCBpbnN0YW5jZW9mIHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hDb21wb25lbnRQb3J0YWwodCkpOnQgaW5zdGFuY2VvZiB1Pyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnZvaWQgZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiQXR0ZW1wdGluZyB0byBhdHRhY2ggYW4gdW5rbm93biBQb3J0YWwgdHlwZS4gQmFzZVBvcnRhbE91dGxldCBhY2NlcHRzIGVpdGhlciBhIENvbXBvbmVudFBvcnRhbCBvciBhIFRlbXBsYXRlUG9ydGFsLiIpfSgpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGFzQXR0YWNoZWQoKSYmdGhpcy5kZXRhY2goKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwfSx0LnByb3RvdHlwZS5zZXREaXNwb3NlRm49ZnVuY3Rpb24odCl7dGhpcy5fZGlzcG9zZUZuPXR9LHQucHJvdG90eXBlLl9pbnZva2VEaXNwb3NlRm49ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gby5vdXRsZXRFbGVtZW50PWUsby5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW4sby5fYXBwUmVmPWksby5fZGVmYXVsdEluamVjdG9yPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5hdHRhY2hDb21wb25lbnRQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGUsbj10aGlzLGk9dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhlPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoaSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5wYXJlbnRJbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXN0cm95KCl9KSk6KGU9aS5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhlLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbihmdW5jdGlvbigpe24uX2FwcFJlZi5kZXRhY2hWaWV3KGUuaG9zdFZpZXcpLGUuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShlKSksZX0sZS5wcm90b3R5cGUuYXR0YWNoVGVtcGxhdGVQb3J0YWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmlld0NvbnRhaW5lclJlZixpPW4uY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0KTtyZXR1cm4gaS5kZXRlY3RDaGFuZ2VzKCksaS5yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHQpfSksdGhpcy5zZXREaXNwb3NlRm4oZnVuY3Rpb24oKXt2YXIgdD1uLmluZGV4T2YoaSk7LTEhPT10JiZuLnJlbW92ZSh0KX0pLGl9LGUucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5kaXNwb3NlLmNhbGwodGhpcyksbnVsbCE9dGhpcy5vdXRsZXRFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMub3V0bGV0RWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMub3V0bGV0RWxlbWVudCl9LGUucHJvdG90eXBlLl9nZXRDb21wb25lbnRSb290Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19LGV9KGMpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPWUsaS5fdmlld0NvbnRhaW5lclJlZj1uLGkuX2lzSW5pdGlhbGl6ZWQ9ITEsaS5hdHRhY2hlZD1uZXcgci5tLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwb3J0YWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9LHNldDpmdW5jdGlvbihlKXsoIXRoaXMuaGFzQXR0YWNoZWQoKXx8ZXx8dGhpcy5faXNJbml0aWFsaXplZCkmJih0aGlzLmhhc0F0dGFjaGVkKCkmJnQucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLGUmJnQucHJvdG90eXBlLmF0dGFjaC5jYWxsKHRoaXMsZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRhY2hlZFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9LGUucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUuZGlzcG9zZS5jYWxsKHRoaXMpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwsdGhpcy5fYXR0YWNoZWRSZWY9bnVsbH0sZS5wcm90b3R5cGUuYXR0YWNoQ29tcG9uZW50UG9ydGFsPWZ1bmN0aW9uKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciBuPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixpPXRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCkscj1uLmNyZWF0ZUNvbXBvbmVudChpLG4ubGVuZ3RoLGUuaW5qZWN0b3J8fG4ucGFyZW50SW5qZWN0b3IpO3JldHVybiB0LnByb3RvdHlwZS5zZXREaXNwb3NlRm4uY2FsbCh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVzdHJveSgpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1yLHRoaXMuYXR0YWNoZWQuZW1pdChyKSxyfSxlLnByb3RvdHlwZS5hdHRhY2hUZW1wbGF0ZVBvcnRhbD1mdW5jdGlvbihlKXt2YXIgbj10aGlzO2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO3ZhciBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0KTtyZXR1cm4gdC5wcm90b3R5cGUuc2V0RGlzcG9zZUZuLmNhbGwodGhpcyxmdW5jdGlvbigpe3JldHVybiBuLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9LGV9KGMpLGg9ZnVuY3Rpb24oKXt9fSwiNjBpVSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIkc1SjEiKSxyPW4oIkYvWEwiKSxvPW4oIlhsUHciKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5raW5kPXQsdGhpcy52YWx1ZT1lLHRoaXMuZXJyb3I9bix0aGlzLmhhc1ZhbHVlPSJOIj09PXR9cmV0dXJuIHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdC5uZXh0JiZ0Lm5leHQodGhpcy52YWx1ZSk7Y2FzZSJFIjpyZXR1cm4gdC5lcnJvciYmdC5lcnJvcih0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiB0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlKCl9fSx0LnByb3RvdHlwZS5kbz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKHRoaXMua2luZCl7Y2FzZSJOIjpyZXR1cm4gdCYmdCh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBlJiZlKHRoaXMuZXJyb3IpO2Nhc2UiQyI6cmV0dXJuIG4mJm4oKX19LHQucHJvdG90eXBlLmFjY2VwdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm5leHQ/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLG4pfSx0LnByb3RvdHlwZS50b09ic2VydmFibGU9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5raW5kKXtjYXNlIk4iOnJldHVybiBPYmplY3Qoci5hKSh0aGlzLnZhbHVlKTtjYXNlIkUiOnJldHVybiBPYmplY3Qoby5hKSh0aGlzLmVycm9yKTtjYXNlIkMiOnJldHVybiBPYmplY3QoaS5iKSgpfXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCB2YWx1ZSIpfSx0LmNyZWF0ZU5leHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWU/bmV3IHQoIk4iLGUpOnQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb259LHQuY3JlYXRlRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KCJFIix2b2lkIDAsZSl9LHQuY3JlYXRlQ29tcGxldGU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5jb21wbGV0ZU5vdGlmaWNhdGlvbn0sdC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgdCgiQyIpLHQudW5kZWZpbmVkVmFsdWVOb3RpZmljYXRpb249bmV3IHQoIk4iLHZvaWQgMCksdH0oKX0sIjY3WS8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJtclNHIikscj1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbi4gQXJlIHlvdSBsb29raW5nIGZvciBgbWFwVG8oKWA/Iik7cmV0dXJuIG4ubGlmdChuZXcgYSh0LGUpKX19dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5wcm9qZWN0PXQsdGhpcy50aGlzQXJnPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHModCx0aGlzLnByb2plY3QsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5wcm9qZWN0PW4sci5jb3VudD0wLHIudGhpc0FyZz1pfHxyLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMucHJvamVjdC5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuY291bnQrKyl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KHIuYSl9LCI2VU14IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIkNjbkciKSxyPShuKCIwL1E2IiksbigiSXAwUiIpLG4oIkZ6cWMiKSxuKCJXZjRwIikpLG89bigiZFdaZyIpLGE9KG4oIkxDNXAiKSxuKCJ3RncxIikpO24oImdJY1kiKSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KTt2YXIgcz1pLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1kaXZpZGVye2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXRvcDowO2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo4MHB4fVtkaXI9cnRsXSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6ODBweH0ubWF0LXN1YmhlYWRlcntkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTZweDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcnttYXJnaW46MH0ubWF0LWxpc3QsLm1hdC1uYXYtbGlzdCwubWF0LXNlbGVjdGlvbi1saXN0e3BhZGRpbmctdG9wOjhweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6MTZweH0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb257ZGlzcGxheTpibG9jaztoZWlnaHQ6NDhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxNnB4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFye2hlaWdodDo1NnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZXtoZWlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmV7aGVpZ2h0Ojg4cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5le2hlaWdodDphdXRvfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudHtwYWRkaW5nLXRvcDoxNnB4O3BhZGRpbmctYm90dG9tOjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0Pip7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6aW5oZXJpdH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHl7ZGlzcGxheTpub25lfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjE2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFye2ZsZXgtc2hyaW5rOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NzJweDt3aWR0aDpjYWxjKDEwMCUgLSA3MnB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NzJweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb257ZmxleC1zaHJpbms6MDt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzo0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY0cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjRweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY0cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO21hcmdpbjowfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWxpc3RbZGVuc2VdLC5tYXQtbmF2LWxpc3RbZGVuc2VdLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2Vde3BhZGRpbmctdG9wOjRweDtkaXNwbGF5OmJsb2NrfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotNHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6NzZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2OHB4O3dpZHRoOmNhbGMoMTAwJSAtIDY4cHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2OHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHg7Zm9udC1zaXplOjIwcHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjBweDt3aWR0aDpjYWxjKDEwMCUgLSA2MHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjBweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbmF2LWxpc3QgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0fS5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW17Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5tYXQtbGlzdC1vcHRpb246bm90KC5tYXQtbGlzdC1pdGVtLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIHUodCl7cmV0dXJuIGkuamIoMixbaS5ZYShudWxsLDApXSxudWxsLG51bGwpfXZhciBjPWkuTmEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWRpdmlkZXJ7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItdG9wLXN0eWxlOnNvbGlkfS5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItdG9wOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItcmlnaHQtc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjgwcHh9W2Rpcj1ydGxdIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4MHB4fS5tYXQtc3ViaGVhZGVye2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1uYXYtbGlzdCAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtc3ViaGVhZGVye21hcmdpbjowfS5tYXQtbGlzdCwubWF0LW5hdi1saXN0LC5tYXQtc2VsZWN0aW9uLWxpc3R7cGFkZGluZy10b3A6OHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0IC5tYXQtc3ViaGVhZGVyLC5tYXQtbmF2LWxpc3QgLm1hdC1zdWJoZWFkZXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtbGlzdCAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0IC5tYXQtc3ViaGVhZGVyOmZpcnN0LWNoaWxkLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1zdWJoZWFkZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDotOHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbntkaXNwbGF5OmJsb2NrO2hlaWdodDo0OHB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OmluaGVyaXR9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNle2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDE2cHg7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1saXN0LWl0ZW0td2l0aC1hdmF0YXJ7aGVpZ2h0OjU2cHh9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTItbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMi1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMi1saW5le2hlaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LTMtbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LTMtbGluZXtoZWlnaHQ6ODhweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmV7aGVpZ2h0OmF1dG99Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbS5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZSAubWF0LWxpc3QtaXRlbS1jb250ZW50e3BhZGRpbmctdG9wOjE2cHg7cGFkZGluZy1ib3R0b206MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ+KiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ+KnttYXJnaW46MDtwYWRkaW5nOjA7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTppbmhlcml0fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0OmVtcHR5LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eXtkaXNwbGF5Om5vbmV9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDoxNnB4O3BhZGRpbmctbGVmdDowfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MTZweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXIsLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ7ZmxleC1zaHJpbms6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo3MnB4O3dpZHRoOmNhbGMoMTAwJSAtIDcycHgpfVtkaXI9cnRsXSAubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo3MnB4fS5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29uLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbntmbGV4LXNocmluazowO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjI0cHg7Ym94LXNpemluZzpjb250ZW50LWJveDtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6NjRweDt3aWR0aDpjYWxjKDEwMCUgLSA2NHB4KX1bZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6NjRweH0ubWF0LWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7bWFyZ2luOjB9W2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjB9Lm1hdC1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3QgLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0IC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOmFic29sdXRlfS5tYXQtbGlzdFtkZW5zZV0sLm1hdC1uYXYtbGlzdFtkZW5zZV0sLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV17cGFkZGluZy10b3A6NHB4O2Rpc3BsYXk6YmxvY2t9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LXN1YmhlYWRlcjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOi00cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjQwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6aW5oZXJpdH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTZweDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1yaXBwbGUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tcmlwcGxlLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLXJpcHBsZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhcntoZWlnaHQ6NDhweH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0yLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LTItbGluZSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC0yLWxpbmV7aGVpZ2h0OjYwcHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbS5tYXQtMy1saW5lLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5lLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC0zLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtMy1saW5le2hlaWdodDo3NnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbi5tYXQtbXVsdGktbGluZXtoZWlnaHQ6YXV0b30ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0ubWF0LW11bHRpLWxpbmUgLm1hdC1saXN0LWl0ZW0tY29udGVudCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uLm1hdC1tdWx0aS1saW5lIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnR7cGFkZGluZy10b3A6MTZweDtwYWRkaW5nLWJvdHRvbToxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC10ZXh0PiosLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dD4qe21hcmdpbjowO3BhZGRpbmc6MDtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOmluaGVyaXR9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LXRleHQ6ZW1wdHksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtdGV4dDplbXB0eSwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC10ZXh0OmVtcHR5e2Rpc3BsYXk6bm9uZX0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudCAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50IC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKXtwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjB9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSksLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MTZweH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWl0ZW0tY29udGVudC1yZXZlcnNlIC5tYXQtbGlzdC10ZXh0Om5vdCg6bnRoLWNoaWxkKDIpKSxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaXRlbS1jb250ZW50LXJldmVyc2UgLm1hdC1saXN0LXRleHQ6bm90KDpudGgtY2hpbGQoMikpLFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pdGVtLWNvbnRlbnQtcmV2ZXJzZSAubWF0LWxpc3QtdGV4dDpub3QoOm50aC1jaGlsZCgyKSl7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNnB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhciwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcntmbGV4LXNocmluazowO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OjY4cHg7d2lkdGg6Y2FsYygxMDAlIC0gNjhweCl9W2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtYXZhdGFyfi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWF2YXRhcn4ubWF0LWRpdmlkZXItaW5zZXQsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1hdmF0YXJ+Lm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjY4cHh9Lm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb24sLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpc3QtaWNvbiwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ue2ZsZXgtc2hyaW5rOjA7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtmb250LXNpemU6MjBweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlci1yYWRpdXM6NTAlO3BhZGRpbmc6NHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpc3QtaWNvbn4ubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDo2MHB4O3dpZHRoOmNhbGMoMTAwJSAtIDYwcHgpfVtkaXI9cnRsXSAubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldCxbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saXN0LWljb25+Lm1hdC1kaXZpZGVyLWluc2V0LFtkaXI9cnRsXSAubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGlzdC1pY29ufi5tYXQtZGl2aWRlci1pbnNldHttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo2MHB4fS5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1kaXZpZGVyLC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlciwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTttYXJnaW46MH1bZGlyPXJ0bF0gLm1hdC1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1uYXYtbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIsW2Rpcj1ydGxdIC5tYXQtc2VsZWN0aW9uLWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlcixbZGlyPXJ0bF0gLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6MH0ubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0LC5tYXQtbmF2LWxpc3RbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LW5hdi1saXN0W2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtZGl2aWRlci5tYXQtZGl2aWRlci1pbnNldCwubWF0LXNlbGVjdGlvbi1saXN0W2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXQsLm1hdC1zZWxlY3Rpb24tbGlzdFtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1uYXYtbGlzdCBhe3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOmluaGVyaXR9Lm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbXtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9Lm1hdC1saXN0LW9wdGlvbjpub3QoLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gaS5qYigyLFtpLllhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIGY9aS5OYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gaS5qYigyLFsodCgpKCksaS5QYSgwLDAsbnVsbCxudWxsLDYsImRpdiIsW1siY2xhc3MiLCJtYXQtbGlzdC1pdGVtLWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuUGEoMSwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtaXRlbS1yaXBwbGUgbWF0LXJpcHBsZSJdLFsibWF0LXJpcHBsZSIsIiJdXSxbWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuT2EoMiwyMTI5OTIsbnVsbCwwLHIucSxbaS5rLGkueCxvLmEsWzIsci5nXSxbMixhLmFdXSx7ZGlzYWJsZWQ6WzAsImRpc2FibGVkIl0sdHJpZ2dlcjpbMSwidHJpZ2dlciJdfSxudWxsKSxpLllhKG51bGwsMCksKHQoKSgpLGkuUGEoNCwwLG51bGwsbnVsbCwxLCJkaXYiLFtbImNsYXNzIiwibWF0LWxpc3QtdGV4dCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLllhKG51bGwsMSksaS5ZYShudWxsLDIpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5faXNSaXBwbGVEaXNhYmxlZCgpLG4uX2dldEhvc3RFbGVtZW50KCkpfSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsaS5aYShlLDIpLnVuYm91bmRlZCl9KX19LCI2YWh3IjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigiaUx4USIpLHI9bigiREtUYiIpLG89e2Nsb3NlZDohMCxuZXh0OmZ1bmN0aW9uKHQpe30sZXJyb3I6ZnVuY3Rpb24odCl7aWYoaS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgdDtPYmplY3Qoci5hKSh0KX0sY29tcGxldGU6ZnVuY3Rpb24oKXt9fX0sIjZibEYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiRkZPbyIpLHI9bigiTC9WOSIpLG89bigiNmFodyIpLGE9bigieFRsYSIpLHM9bigieTNCeSIpLHU9bigiaUx4USIpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2lzU2NhbGFyPSExLHQmJih0aGlzLl9zdWJzY3JpYmU9dCl9cmV0dXJuIHQucHJvdG90eXBlLmxpZnQ9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc291cmNlPXRoaXMsbi5vcGVyYXRvcj1lLG59LHQucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0LGUsbil7dmFyIGE9dGhpcy5vcGVyYXRvcixzPWZ1bmN0aW9uKHQsZSxuKXtpZih0KXtpZih0IGluc3RhbmNlb2YgaS5hKXJldHVybiB0O2lmKHRbci5hXSlyZXR1cm4gdFtyLmFdKCl9cmV0dXJuIHR8fGV8fG4/bmV3IGkuYSh0LGUsbik6bmV3IGkuYShvLmEpfSh0LGUsbik7aWYoYT9hLmNhbGwocyx0aGlzLnNvdXJjZSk6cy5hZGQodGhpcy5zb3VyY2V8fHUuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiYhcy5zeW5jRXJyb3JUaHJvd2FibGU/dGhpcy5fc3Vic2NyaWJlKHMpOnRoaXMuX3RyeVN1YnNjcmliZShzKSksdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnMuc3luY0Vycm9yVGhyb3dhYmxlJiYocy5zeW5jRXJyb3JUaHJvd2FibGU9ITEscy5zeW5jRXJyb3JUaHJvd24pKXRocm93IHMuc3luY0Vycm9yVmFsdWU7cmV0dXJuIHN9LHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmU9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUodCl9Y2F0Y2goZSl7dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJih0LnN5bmNFcnJvclRocm93bj0hMCx0LnN5bmNFcnJvclZhbHVlPWUpLHQuZXJyb3IoZSl9fSx0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gbmV3KGU9bChlKSkoZnVuY3Rpb24oZSxpKXt2YXIgcjtyPW4uc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3RyeXt0KGUpfWNhdGNoKHQpe2kodCksciYmci51bnN1YnNjcmliZSgpfX0saSxlKX0pfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc291cmNlO3JldHVybiBlJiZlLnN1YnNjcmliZSh0KX0sdC5wcm90b3R5cGVbYS5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiAwPT09dC5sZW5ndGg/dGhpczpPYmplY3Qocy5iKSh0KSh0aGlzKX0sdC5wcm90b3R5cGUudG9Qcm9taXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyh0PWwodCkpKGZ1bmN0aW9uKHQsbil7dmFyIGk7ZS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7cmV0dXJuIGk9dH0sZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHQoaSl9KX0pfSx0LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHQoZSl9LHR9KCk7ZnVuY3Rpb24gbCh0KXtpZih0fHwodD11LmEuUHJvbWlzZXx8UHJvbWlzZSksIXQpdGhyb3cgbmV3IEVycm9yKCJubyBQcm9taXNlIGltcGwgZm91bmQiKTtyZXR1cm4gdH19LCI4ZzhBIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJvYmplY3QgdW5zdWJzY3JpYmVkIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihuLGUucHJvdG90eXBlKSxufXJldHVybiBpLmIoZSx0KSxlfShFcnJvcil9LCI4bU1yIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIiksbz1uKCJXZjRwIiksYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fcGxhdGZvcm09bixyLl9kb2N1bWVudD1pLHJ9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUubmdBZnRlclZpZXdJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztPYmplY3Qoci5YKSgpJiZ0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCksdGhpcy5fdG9vbGJhclJvd3MuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gdC5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpfSkpfSxlLnByb3RvdHlwZS5fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdG9vbGJhclJvd3MubGVuZ3RoJiZbXS5zbGljZS5jYWxsKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNsYXNzTGlzdCYmdC5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC10b29sYmFyLXJvdyIpKX0pLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZSE9PSh0Ll9kb2N1bWVudD90Ll9kb2N1bWVudC5DT01NRU5UX05PREU6OCl9KS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50LnRyaW0oKX0pJiZmdW5jdGlvbigpe3Rocm93IEVycm9yKCJNYXRUb29sYmFyOiBBdHRlbXB0aW5nIHRvIGNvbWJpbmUgZGlmZmVyZW50IHRvb2xiYXIgbW9kZXMuIEVpdGhlciBzcGVjaWZ5IG11bHRpcGxlIGA8bWF0LXRvb2xiYXItcm93PmAgZWxlbWVudHMgZXhwbGljaXRseSBvciBqdXN0IHBsYWNlIGNvbnRlbnQgaW5zaWRlIG9mIGEgYDxtYXQtdG9vbGJhcj5gIGZvciBhIHNpbmdsZSByb3cuIil9KCl9LGV9KE9iamVjdChvLnUpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxzPWZ1bmN0aW9uKCl7fX0sIjlaMUYiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJNR0JTIiksbz1uKCJ6b3RtIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHModCksaT1lLmxpZnQobik7cmV0dXJuIG4uY2F1Z2h0PWl9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLnNlbGVjdG9yLHRoaXMuY2F1Z2h0KSl9LHR9KCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5zZWxlY3Rvcj1uLHIuY2F1Z2h0PWkscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNTdG9wcGVkKXt2YXIgbj12b2lkIDA7dHJ5e249dGhpcy5zZWxlY3RvcihlLHRoaXMuY2F1Z2h0KX1jYXRjaChlKXtyZXR1cm4gdm9pZCB0LnByb3RvdHlwZS5lcnJvci5jYWxsKHRoaXMsZSl9dGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCksdGhpcy5hZGQoT2JqZWN0KG8uYSkodGhpcyxuKSl9fSxlfShyLmEpfSxBeUpxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgaT1uKCJDY25HIikscj0obigiamxabSIpLG4oIklwMFIiKSksbz0obigiWWhiTyIpLG4oIjRjMzUiKSksYT0obigiWWxiUSIpLG4oImxMQVAiKSxpLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1leHBhbnNpb24tcGFuZWx7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDt0cmFuc2l0aW9uOm1hcmdpbiAyMjVtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1leHBhbnNpb24tcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnQubWF0LWV4cGFuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1leHBhbnNpb24tcGFuZWwtYm9keXtwYWRkaW5nOjAgMjRweCAxNnB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luOjE2cHggMH0ubWF0LWFjY29yZGlvbj4ubWF0LWV4cGFuc2lvbi1wYW5lbC1zcGFjaW5nOmZpcnN0LWNoaWxkLC5tYXQtYWNjb3JkaW9uPjpmaXJzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLXRvcDowfS5tYXQtYWNjb3JkaW9uPi5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmc6bGFzdC1jaGlsZCwubWF0LWFjY29yZGlvbj46bGFzdC1jaGlsZDpub3QoLm1hdC1leHBhbnNpb24tcGFuZWwpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLXNwYWNpbmd7bWFyZ2luLWJvdHRvbTowfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6MXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MTZweCA4cHggMTZweCAyNHB4fS5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9W2Rpcj1ydGxdIC5tYXQtYWN0aW9uLXJvdyBidXR0b24ubWF0LWJ1dHRvbnttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6ImJvZHlFeHBhbnNpb24iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImNvbGxhcHNlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IjBweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6ImV4cGFuZGVkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsdmlzaWJpbGl0eToidmlzaWJsZSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSkpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuR2EoMCxudWxsLG51bGwsMCkpXSxudWxsLG51bGwpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGkuamIoMixbaS5ZYShudWxsLDApLCh0KCkoKSxpLlBhKDEsMCxbWyJib2R5IiwxXV0sbnVsbCw1LCJkaXYiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50Il0sWyJyb2xlIiwicmVnaW9uIl1dLFtbMjQsIkBib2R5RXhwYW5zaW9uIiwwXSxbMSwiYXJpYS1sYWJlbGxlZGJ5IiwwXSxbOCwiaWQiLDBdXSxbW251bGwsIkBib2R5RXhwYW5zaW9uLmRvbmUiXSxbbnVsbCwiQGJvZHlFeHBhbnNpb24uc3RhcnQiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwLHI9dC5jb21wb25lbnQ7cmV0dXJuIkBib2R5RXhwYW5zaW9uLmRvbmUiPT09ZSYmKGk9ITEhPT1yLl9ib2R5QW5pbWF0aW9uKG4pJiZpKSwiQGJvZHlFeHBhbnNpb24uc3RhcnQiPT09ZSYmKGk9ITEhPT1yLl9ib2R5QW5pbWF0aW9uKG4pJiZpKSxpfSxudWxsLG51bGwpKSwodCgpKCksaS5QYSgyLDAsbnVsbCxudWxsLDMsImRpdiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5ZYShudWxsLDEpLCh0KCkoKSxpLkdhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwscykpLGkuT2EoNSwyMTI5OTIsbnVsbCwwLG8uYSxbaS5qLGkuT10se3BvcnRhbDpbMCwicG9ydGFsIl19LG51bGwpLGkuWWEobnVsbCwyKV0sZnVuY3Rpb24odCxlKXt0KGUsNSwwLGUuY29tcG9uZW50Ll9wb3J0YWwpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5fZ2V0RXhwYW5kZWRTdGF0ZSgpLG4uX2hlYWRlcklkLG4uaWQpfSl9dmFyIGM9aS5OYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjRweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6Zm9jdXMsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye291dGxpbmU6MH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVkOmZvY3VzLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQ6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2N1cnNvcjpwb2ludGVyfS5tYXQtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleDoxO2ZsZXgtZGlyZWN0aW9uOnJvdztvdmVyZmxvdzpoaWRkZW59Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7bWFyZ2luLXJpZ2h0OjE2cHh9W2Rpcj1ydGxdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbixbZGlyPXJ0bF0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjE2cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZ3JvdzoyfS5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDJweCAycHggMDtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6M3B4O3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0iXSxkYXRhOnthbmltYXRpb246W3t0eXBlOjcsbmFtZToiaW5kaWNhdG9yUm90YXRlIixkZWZpbml0aW9uczpbe3R5cGU6MCxuYW1lOiJjb2xsYXBzZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjAsbmFtZToiZXhwYW5kZWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMTgwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MSxleHByOiJleHBhbmRlZCA8PT4gY29sbGFwc2VkIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOiIyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fSx7dHlwZTo3LG5hbWU6ImV4cGFuc2lvbkhlaWdodCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToiY29sbGFwc2VkIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoie3tjb2xsYXBzZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2NvbGxhcHNlZEhlaWdodDoiNDhweCJ9fX0se3R5cGU6MCxuYW1lOiJleHBhbmRlZCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOntoZWlnaHQ6Int7ZXhwYW5kZWRIZWlnaHR9fSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOntwYXJhbXM6e2V4cGFuZGVkSGVpZ2h0OiI2NHB4In19fSx7dHlwZToxLGV4cHI6ImV4cGFuZGVkIDw9PiBjb2xsYXBzZWQiLGFuaW1hdGlvbjp7dHlwZTozLHN0ZXBzOlt7dHlwZToxMSxzZWxlY3RvcjoiQGluZGljYXRvclJvdGF0ZSIsYW5pbWF0aW9uOnt0eXBlOjksb3B0aW9uczpudWxsfSxvcHRpb25zOntvcHRpb25hbDohMH19LHt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIn1dLG9wdGlvbnM6bnVsbH0sb3B0aW9uczpudWxsfV0sb3B0aW9uczp7fX1dfX0pO2Z1bmN0aW9uIGwodCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCwwLCJzcGFuIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24taW5kaWNhdG9yIl1dLFtbMjQsIkBpbmRpY2F0b3JSb3RhdGUiLDBdXSxudWxsLG51bGwsbnVsbCxudWxsKSldLG51bGwsZnVuY3Rpb24odCxlKXt0KGUsMCwwLGUuY29tcG9uZW50Ll9nZXRFeHBhbmRlZFN0YXRlKCkpfSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gaS5qYigyLFsodCgpKCksaS5QYSgwLDAsbnVsbCxudWxsLDMsInNwYW4iLFtbImNsYXNzIiwibWF0LWNvbnRlbnQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5ZYShudWxsLDApLGkuWWEobnVsbCwxKSxpLllhKG51bGwsMiksKHQoKSgpLGkuR2EoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxsKSksaS5PYSg1LDE2Mzg0LG51bGwsMCxyLmssW2kuTyxpLkxdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSw1LDAsZS5jb21wb25lbnQuX3Nob3dUb2dnbGUoKSl9LG51bGwpfX0sQ1M5UTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4pe3ZvaWQgMD09PW4mJihuPXQubm93KSx0aGlzLlNjaGVkdWxlckFjdGlvbj1lLHRoaXMubm93PW59cmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9MCksbmV3IHRoaXMuU2NoZWR1bGVyQWN0aW9uKHRoaXMsdCkuc2NoZWR1bGUobixlKX0sdC5ub3c9RGF0ZS5ub3c/RGF0ZS5ub3c6ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LHR9KCk7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4saSl7dm9pZCAwPT09aSYmKGk9ci5ub3cpO3ZhciBvPXQuY2FsbCh0aGlzLG4sZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWxlZ2F0ZSYmZS5kZWxlZ2F0ZSE9PW8/ZS5kZWxlZ2F0ZS5ub3coKTppKCl9KXx8dGhpcztyZXR1cm4gby5hY3Rpb25zPVtdLG8uYWN0aXZlPSExLG8uc2NoZWR1bGVkPXZvaWQgMCxvfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbihuLGkscil7cmV0dXJuIHZvaWQgMD09PWkmJihpPTApLGUuZGVsZWdhdGUmJmUuZGVsZWdhdGUhPT10aGlzP2UuZGVsZWdhdGUuc2NoZWR1bGUobixpLHIpOnQucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcyxuLGkscil9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aW9ucztpZih0aGlzLmFjdGl2ZSllLnB1c2godCk7ZWxzZXt2YXIgbjt0aGlzLmFjdGl2ZT0hMDtkb3tpZihuPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKHQ9ZS5zaGlmdCgpKTtpZih0aGlzLmFjdGl2ZT0hMSxuKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgbn19fSxlfShyKX0sQ2NuRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJJYSIsZnVuY3Rpb24oKXtyZXR1cm4gS2V9KSxuLmQoZSwiSmEiLGZ1bmN0aW9uKCl7cmV0dXJuIFhlfSksbi5kKGUsIkthIixmdW5jdGlvbigpe3JldHVybiAkZX0pLG4uZChlLCJIYSIsZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gYWV9KSxuLmQoZSwiVCIsZnVuY3Rpb24oKXtyZXR1cm4gSnR9KSxuLmQoZSwiWCIsZnVuY3Rpb24oKXtyZXR1cm4gdGV9KSxuLmQoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gbmV9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gaHR9KSxuLmQoZSwiQSIsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwieiIsZnVuY3Rpb24oKXtyZXR1cm4geXR9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gZnR9KSxuLmQoZSwiViIsZnVuY3Rpb24oKXtyZXR1cm4gT2V9KSxuLmQoZSwiTSIsZnVuY3Rpb24oKXtyZXR1cm4gR3R9KSxuLmQoZSwiWiIsZnVuY3Rpb24oKXtyZXR1cm4gWXR9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4gWmV9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gSmV9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gTHR9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwiRiIsZnVuY3Rpb24oKXtyZXR1cm4gT259KSxuLmQoZSwiRyIsZnVuY3Rpb24oKXtyZXR1cm4gQ259KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLG4uZChlLCJQIixmdW5jdGlvbigpe3JldHVybiBYfSksbi5kKGUsIk4iLGZ1bmN0aW9uKCl7cmV0dXJuICR9KSxuLmQoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJVIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsIlciLGZ1bmN0aW9uKCl7cmV0dXJuIEt9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTn0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIE99KSxuLmQoZSwieSIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJJIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsIngiLGZ1bmN0aW9uKCl7cmV0dXJuIEZ0fSksbi5kKGUsIkMiLGZ1bmN0aW9uKCl7cmV0dXJuIGxlfSksbi5kKGUsIkQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVlfSksbi5kKGUsIkUiLGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIF90fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIE10fSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGp0fSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIGhlfSksbi5kKGUsIkIiLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsIkoiLGZ1bmN0aW9uKCl7cmV0dXJuIHllfSksbi5kKGUsIksiLGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSksbi5kKGUsIkwiLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsIk8iLGZ1bmN0aW9uKCl7cmV0dXJuIGJlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEhlfSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIHFlfSksbi5kKGUsIkgiLGZ1bmN0aW9uKCl7cmV0dXJuIEllfSksbi5kKGUsIlEiLGZ1bmN0aW9uKCl7cmV0dXJuIEFlfSksbi5kKGUsIlkiLGZ1bmN0aW9uKCl7cmV0dXJuIFFlfSksbi5kKGUsIlNhIixmdW5jdGlvbigpe3JldHVybiBqZX0pLG4uZChlLCJDYSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiQWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIkJhIixmdW5jdGlvbigpe3JldHVybiBBdH0pLG4uZChlLCJEYSIsZnVuY3Rpb24oKXtyZXR1cm4gX259KSxuLmQoZSwiRWEiLGZ1bmN0aW9uKCl7cmV0dXJuIEVufSksbi5kKGUsIkZhIixmdW5jdGlvbigpe3JldHVybiBybn0pLG4uZChlLCJRYSIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pLG4uZChlLCJWYSIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJnYiIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJUYSIsZnVuY3Rpb24oKXtyZXR1cm4gY3R9KSxuLmQoZSwiVWEiLGZ1bmN0aW9uKCl7cmV0dXJuIHV0fSksbi5kKGUsIkdhIixmdW5jdGlvbigpe3JldHVybiBiaX0pLG4uZChlLCJMYSIsZnVuY3Rpb24oKXtyZXR1cm4geml9KSxuLmQoZSwiTWEiLGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSksbi5kKGUsIk5hIixmdW5jdGlvbigpe3JldHVybiBxbn0pLG4uZChlLCJPYSIsZnVuY3Rpb24oKXtyZXR1cm4gY3J9KSxuLmQoZSwiUGEiLGZ1bmN0aW9uKCl7cmV0dXJuIF9pfSksbi5kKGUsIlJhIixmdW5jdGlvbigpe3JldHVybiB2aX0pLG4uZChlLCJXYSIsZnVuY3Rpb24oKXtyZXR1cm4gSWl9KSxuLmQoZSwiWGEiLGZ1bmN0aW9uKCl7cmV0dXJuIEFpfSksbi5kKGUsIllhIixmdW5jdGlvbigpe3JldHVybiBqcn0pLG4uZChlLCJaYSIsZnVuY3Rpb24oKXtyZXR1cm4gS2l9KSxuLmQoZSwiYmIiLGZ1bmN0aW9uKCl7cmV0dXJuIGxyfSksbi5kKGUsImViIixmdW5jdGlvbigpe3JldHVybiBmcn0pLG4uZChlLCJhYiIsZnVuY3Rpb24oKXtyZXR1cm4gTnJ9KSxuLmQoZSwiY2IiLGZ1bmN0aW9uKCl7cmV0dXJuIFJyfSksbi5kKGUsImRiIixmdW5jdGlvbigpe3JldHVybiBQcn0pLG4uZChlLCJmYiIsZnVuY3Rpb24oKXtyZXR1cm4gT3J9KSxuLmQoZSwiaGIiLGZ1bmN0aW9uKCl7cmV0dXJuIExyfSksbi5kKGUsImliIixmdW5jdGlvbigpe3JldHVybiBCbn0pLG4uZChlLCJqYiIsZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KTt2YXIgaT1uKCJtclNHIikscj1uKCJwdWdUIiksbz1uKCJLOUlhIiksYT1uKCI2YmxGIikscz1uKCJwMGliIiksdT1uKCJTMW5YIik7ZnVuY3Rpb24gYyh0KXtyZXR1cm57cHJvdmlkZWRJbjp0LnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTp0LmZhY3RvcnksdmFsdWU6dm9pZCAwfX12YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMubmdJbmplY3RhYmxlRGVmPXZvaWQgMCE9PWU/Yyh7cHJvdmlkZWRJbjplLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmUuZmFjdG9yeX0pOnZvaWQgMH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iSW5qZWN0aW9uVG9rZW4gIit0aGlzLl9kZXNjfSx0fSgpLGY9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiBoKHQsZSxuKXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07aWYodCl7dmFyIHI9dC5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkoZSkpO2Zvcih2YXIgbyBpbiByKXRoaXNbb109cltvXX19fShlKTtmdW5jdGlvbiBvKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO2lmKHRoaXMgaW5zdGFuY2VvZiBvKXJldHVybiByLmFwcGx5KHRoaXMsdCksdGhpczt2YXIgbixhPW5ldygobj1vKS5iaW5kLmFwcGx5KG4sT2JqZWN0KGkuZCkoW3ZvaWQgMF0sdCkpKTtyZXR1cm4gcy5hbm5vdGF0aW9uPWEscztmdW5jdGlvbiBzKHQsZSxuKXtmb3IodmFyIGk9dC5oYXNPd25Qcm9wZXJ0eShmKT90W2ZdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGYse3ZhbHVlOltdfSlbZl07aS5sZW5ndGg8PW47KWkucHVzaChudWxsKTtyZXR1cm4oaVtuXT1pW25dfHxbXSkucHVzaChhKSx0fX1yZXR1cm4gbiYmKG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpKSxvLnByb3RvdHlwZS5uZ01ldGFkYXRhTmFtZT10LG8uYW5ub3RhdGlvbkNscz1vLG99dmFyIGQ9bmV3IGwoIkFuYWx5emVGb3JFbnRyeUNvbXBvbmVudHMiKTtGdW5jdGlvbjt2YXIgcD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LG09InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYseT0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCYmZ2xvYmFsLHY9cHx8eXx8bSxnPVByb21pc2UucmVzb2x2ZSgwKSxiPW51bGw7ZnVuY3Rpb24gXygpe2lmKCFiKXt2YXIgdD12LlN5bWJvbDtpZih0JiZ0Lml0ZXJhdG9yKWI9dC5pdGVyYXRvcjtlbHNlIGZvcih2YXIgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKSxuPTA7bjxlLmxlbmd0aDsrK24pe3ZhciBpPWVbbl07ImVudHJpZXMiIT09aSYmInNpemUiIT09aSYmTWFwLnByb3RvdHlwZVtpXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKGI9aSl9fXJldHVybiBifWZ1bmN0aW9uIHcodCl7InVuZGVmaW5lZCI9PXR5cGVvZiBab25lP2cudGhlbihmdW5jdGlvbigpe3QmJnQuYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLHQpfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gdD09PWV8fCJudW1iZXIiPT10eXBlb2YgdCYmIm51bWJlciI9PXR5cGVvZiBlJiZpc05hTih0KSYmaXNOYU4oZSl9ZnVuY3Rpb24gUyh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodCBpbnN0YW5jZW9mIEFycmF5KXJldHVybiJbIit0Lm1hcChTKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT10KXJldHVybiIiK3Q7aWYodC5vdmVycmlkZGVuTmFtZSlyZXR1cm4iIit0Lm92ZXJyaWRkZW5OYW1lO2lmKHQubmFtZSlyZXR1cm4iIit0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpO2lmKG51bGw9PWUpcmV0dXJuIiIrZTt2YXIgbj1lLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1uP2U6ZS5zdWJzdHJpbmcoMCxuKX1mdW5jdGlvbiBFKHQpe3JldHVybiB0Ll9fZm9yd2FyZF9yZWZfXz1FLHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUyh0aGlzKCkpfSx0fWZ1bmN0aW9uIEModCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuaGFzT3duUHJvcGVydHkoIl9fZm9yd2FyZF9yZWZfXyIpJiZ0Ll9fZm9yd2FyZF9yZWZfXz09PUU/dCgpOnR9dmFyIE89aCgiSW5qZWN0IixmdW5jdGlvbih0KXtyZXR1cm57dG9rZW46dH19KSxUPWgoIk9wdGlvbmFsIiksaz1oKCJTZWxmIiksQT1oKCJTa2lwU2VsZiIpLEk9Il9fc291cmNlIixqPW5ldyBPYmplY3QsTT1uZXcgbCgiSU5KRUNUT1IiKSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9aiksZT09PWopdGhyb3cgbmV3IEVycm9yKCJOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICIrUyh0KSsiISIpO3JldHVybiBlfSx0fSgpLE49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP25ldyBxKHQsZSk6bmV3IHEodC5wcm92aWRlcnMsdC5wYXJlbnQsdC5uYW1lfHxudWxsKX0sdC5USFJPV19JRl9OT1RfRk9VTkQ9aix0Lk5VTEw9bmV3IFAsdC5uZ0luamVjdGFibGVEZWY9Yyh7cHJvdmlkZWRJbjoiYW55IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEsoTSl9fSksdH0oKSxSPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxEPVtdLEw9UixGPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyl9LHo9e30sVj1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClpZih0W2VdPT09eilyZXR1cm4gZTt0aHJvdyBFcnJvcigiIXByb3AiKX0oe3Byb3ZpZGU6U3RyaW5nLHVzZVZhbHVlOnp9KSxCPU4uTlVMTCxVPS9cbi9nbSxIPSJcdTAyNzUiLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1CKSx2b2lkIDA9PT1uJiYobj1udWxsKSx0aGlzLnBhcmVudD1lLHRoaXMuc291cmNlPW47dmFyIGk9dGhpcy5fcmVjb3Jkcz1uZXcgTWFwO2kuc2V0KE4se3Rva2VuOk4sZm46UixkZXBzOkQsdmFsdWU6dGhpcyx1c2VOZXc6ITF9KSxpLnNldChNLHt0b2tlbjpNLGZuOlIsZGVwczpELHZhbHVlOnRoaXMsdXNlTmV3OiExfSksZnVuY3Rpb24gdChlLG4pe2lmKG4paWYoKG49QyhuKSlpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXQoZSxuW2ldKTtlbHNle2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXRocm93IFkoIkZ1bmN0aW9uL0NsYXNzIG5vdCBzdXBwb3J0ZWQiLG4pO2lmKCFufHwib2JqZWN0IiE9dHlwZW9mIG58fCFuLnByb3ZpZGUpdGhyb3cgWSgiVW5leHBlY3RlZCBwcm92aWRlciIsbik7dmFyIHI9QyhuLnByb3ZpZGUpLG89ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9RCxuPXQuZGVwcztpZihuJiZuLmxlbmd0aCl7ZT1bXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHI9NjtpZigodT1DKG5baV0pKWluc3RhbmNlb2YgQXJyYXkpZm9yKHZhciBvPTAsYT11O288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3MgaW5zdGFuY2VvZiBUfHxzPT1UP3J8PTE6cyBpbnN0YW5jZW9mIEF8fHM9PUE/ciY9LTM6cyBpbnN0YW5jZW9mIGt8fHM9PWs/ciY9LTU6dT1zIGluc3RhbmNlb2YgTz9zLnRva2VuOkMocyl9ZS5wdXNoKHt0b2tlbjp1LG9wdGlvbnM6cn0pfX1lbHNlIGlmKHQudXNlRXhpc3Rpbmcpe3ZhciB1O2U9W3t0b2tlbjp1PUModC51c2VFeGlzdGluZyksb3B0aW9uczo2fV19ZWxzZSBpZighKG58fFYgaW4gdCkpdGhyb3cgWSgiJ2RlcHMnIHJlcXVpcmVkIix0KTtyZXR1cm4gZX0odCksbj1SLGk9RCxyPSExLG89Qyh0LnByb3ZpZGUpO2lmKFYgaW4gdClpPXQudXNlVmFsdWU7ZWxzZSBpZih0LnVzZUZhY3Rvcnkpbj10LnVzZUZhY3Rvcnk7ZWxzZSBpZih0LnVzZUV4aXN0aW5nKTtlbHNlIGlmKHQudXNlQ2xhc3Mpcj0hMCxuPUModC51c2VDbGFzcyk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbyl0aHJvdyBZKCJTdGF0aWNQcm92aWRlciBkb2VzIG5vdCBoYXZlIFt1c2VWYWx1ZXx1c2VGYWN0b3J5fHVzZUV4aXN0aW5nfHVzZUNsYXNzXSBvciBbcHJvdmlkZV0gaXMgbm90IG5ld2FibGUiLHQpO3I9ITAsbj1vfXJldHVybntkZXBzOmUsZm46bix1c2VOZXc6cix2YWx1ZTppfX0obik7aWYoITA9PT1uLm11bHRpKXt2YXIgYT1lLmdldChyKTtpZihhKXtpZihhLmZuIT09Ril0aHJvdyBHKHIpfWVsc2UgZS5zZXQocixhPXt0b2tlbjpuLnByb3ZpZGUsZGVwczpbXSx1c2VOZXc6ITEsZm46Rix2YWx1ZTpEfSk7YS5kZXBzLnB1c2goe3Rva2VuOnI9bixvcHRpb25zOjZ9KX12YXIgcz1lLmdldChyKTtpZihzJiZzLmZuPT1GKXRocm93IEcocik7ZS5zZXQocixvKX19KGksdCl9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49MCk7dmFyIHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dHJ5e3JldHVybiBmdW5jdGlvbiB0KGUsbixyLG8sYSxzKXt0cnl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyLG8sYSxzKXt2YXIgdSxjO2lmKCFufHw0JnMpMiZzfHwodT1vLmdldChlLGEsMCkpO2Vsc2V7aWYoKHU9bi52YWx1ZSk9PUwpdGhyb3cgRXJyb3IoSCsiQ2lyY3VsYXIgZGVwZW5kZW5jeSIpO2lmKHU9PT1EKXtuLnZhbHVlPUw7dmFyIGw9bi51c2VOZXcsZj1uLmZuLGg9bi5kZXBzLGQ9RDtpZihoLmxlbmd0aCl7ZD1bXTtmb3IodmFyIHA9MDtwPGgubGVuZ3RoO3ArKyl7dmFyIG09aFtwXSx5PW0ub3B0aW9ucyx2PTImeT9yLmdldChtLnRva2VuKTp2b2lkIDA7ZC5wdXNoKHQobS50b2tlbix2LHIsdnx8NCZ5P286QiwxJnk/bnVsbDpOLlRIUk9XX0lGX05PVF9GT1VORCwwKSl9fW4udmFsdWU9dT1sP25ldygoYz1mKS5iaW5kLmFwcGx5KGMsT2JqZWN0KGkuZCkoW3ZvaWQgMF0sZCkpKTpmLmFwcGx5KHZvaWQgMCxkKX19cmV0dXJuIHV9KGUsbixyLG8sYSxzKX1jYXRjaCh0KXt0aHJvdyB0IGluc3RhbmNlb2YgRXJyb3J8fCh0PW5ldyBFcnJvcih0KSksKHQubmdUZW1wVG9rZW5QYXRoPXQubmdUZW1wVG9rZW5QYXRofHxbXSkudW5zaGlmdChlKSxuJiZuLnZhbHVlPT1MJiYobi52YWx1ZT1EKSx0fX0odCxyLHRoaXMuX3JlY29yZHMsdGhpcy5wYXJlbnQsZSxuKX1jYXRjaChlKXt2YXIgbz1lLm5nVGVtcFRva2VuUGF0aDt0aHJvdyB0W0ldJiZvLnVuc2hpZnQodFtJXSksZS5tZXNzYWdlPVcoIlxuIitlLm1lc3NhZ2Usbyx0aGlzLnNvdXJjZSksZS5uZ1Rva2VuUGF0aD1vLGUubmdUZW1wVG9rZW5QYXRoPW51bGwsZX19LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuX3JlY29yZHMuZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnB1c2goUyhuKSl9KSwiU3RhdGljSW5qZWN0b3JbIit0LmpvaW4oIiwgIikrIl0ifSx0fSgpO2Z1bmN0aW9uIEcodCl7cmV0dXJuIFkoIkNhbm5vdCBtaXggbXVsdGkgcHJvdmlkZXJzIGFuZCByZWd1bGFyIHByb3ZpZGVycyIsdCl9ZnVuY3Rpb24gVyh0LGUsbil7dm9pZCAwPT09biYmKG49bnVsbCksdD10JiYiXG4iPT09dC5jaGFyQXQoMCkmJnQuY2hhckF0KDEpPT1IP3Quc3Vic3RyKDIpOnQ7dmFyIGk9UyhlKTtpZihlIGluc3RhbmNlb2YgQXJyYXkpaT1lLm1hcChTKS5qb2luKCIgLT4gIik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGUpe3ZhciByPVtdO2Zvcih2YXIgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykpe3ZhciBhPWVbb107ci5wdXNoKG8rIjoiKygic3RyaW5nIj09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6UyhhKSkpfWk9InsiK3Iuam9pbigiLCAiKSsifSJ9cmV0dXJuIlN0YXRpY0luamVjdG9yRXJyb3IiKyhuPyIoIituKyIpIjoiIikrIlsiK2krIl06ICIrdC5yZXBsYWNlKFUsIlxuICAiKX1mdW5jdGlvbiBZKHQsZSl7cmV0dXJuIG5ldyBFcnJvcihXKHQsZSkpfXZhciBRPXZvaWQgMDtmdW5jdGlvbiBaKHQpe3ZhciBlPVE7cmV0dXJuIFE9dCxlfWZ1bmN0aW9uIEsodCxlKXtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1RKXRocm93IG5ldyBFcnJvcigiaW5qZWN0KCkgbXVzdCBiZSBjYWxsZWQgZnJvbSBhbiBpbmplY3Rpb24gY29udGV4dCIpO2lmKG51bGw9PT1RKXt2YXIgbj10Lm5nSW5qZWN0YWJsZURlZjtpZihuJiYicm9vdCI9PW4ucHJvdmlkZWRJbilyZXR1cm4gdm9pZCAwPT09bi52YWx1ZT9uLnZhbHVlPW4uZmFjdG9yeSgpOm4udmFsdWU7dGhyb3cgbmV3IEVycm9yKCJJbmplY3RvcjogTk9UX0ZPVU5EIFsiK1ModCkrIl0iKX1yZXR1cm4gUS5nZXQodCw4JmU/bnVsbDp2b2lkIDAsZSl9U3RyaW5nO3ZhciBYPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIix0W3QuTmF0aXZlPTFdPSJOYXRpdmUiLHRbdC5Ob25lPTJdPSJOb25lIix0W3QuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLHR9KHt9KSwkPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX0sSj1uZXcgJCgiNi4wLjkiKSx0dD0ibmdEZWJ1Z0NvbnRleHQiLGV0PSJuZ09yaWdpbmFsRXJyb3IiLG50PSJuZ0Vycm9yTG9nZ2VyIjtmdW5jdGlvbiBpdCh0KXtyZXR1cm4gdFt0dF19ZnVuY3Rpb24gcnQodCl7cmV0dXJuIHRbZXRdfWZ1bmN0aW9uIG90KHQpe2Zvcih2YXIgZT1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3QuZXJyb3IuYXBwbHkodCxPYmplY3QoaS5kKShlKSl9dmFyIGF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IodCksbj10aGlzLl9maW5kQ29udGV4dCh0KSxpPWZ1bmN0aW9uKHQpe3JldHVybiB0W250XXx8b3R9KHQpO2kodGhpcy5fY29uc29sZSwiRVJST1IiLHQpLGUmJmkodGhpcy5fY29uc29sZSwiT1JJR0lOQUwgRVJST1IiLGUpLG4mJmkodGhpcy5fY29uc29sZSwiRVJST1IgQ09OVEVYVCIsbil9LHQucHJvdG90eXBlLl9maW5kQ29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD9pdCh0KT9pdCh0KTp0aGlzLl9maW5kQ29udGV4dChydCh0KSk6bnVsbH0sdC5wcm90b3R5cGUuX2ZpbmRPcmlnaW5hbEVycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1ydCh0KTtlJiZydChlKTspZT1ydChlKTtyZXR1cm4gZX0sdH0oKSxzdD1uZXcgbCgiVGhlIHByZXNlbmNlIG9mIHRoaXMgdG9rZW4gbWFya3MgYW4gaW5qZWN0b3IgYXMgYmVpbmcgdGhlIHJvb3QgaW5qZWN0b3IuIik7ZnVuY3Rpb24gdXQodCl7cmV0dXJuISF0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC50aGVufWZ1bmN0aW9uIGN0KHQpe3JldHVybiEhdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuc3Vic2NyaWJlfXZhciBsdD1uZXcgbCgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGU9dGhpczt0aGlzLmFwcEluaXRzPXQsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbih0LG4pe2UucmVzb2x2ZT10LGUucmVqZWN0PW59KX1yZXR1cm4gdC5wcm90b3R5cGUucnVuSW5pdGlhbGl6ZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pbml0aWFsaXplZCl7dmFyIGU9W10sbj1mdW5jdGlvbigpe3QuZG9uZT0hMCx0LnJlc29sdmUoKX07aWYodGhpcy5hcHBJbml0cylmb3IodmFyIGk9MDtpPHRoaXMuYXBwSW5pdHMubGVuZ3RoO2krKyl7dmFyIHI9dGhpcy5hcHBJbml0c1tpXSgpO3V0KHIpJiZlLnB1c2gocil9UHJvbWlzZS5hbGwoZSkudGhlbihmdW5jdGlvbigpe24oKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3QucmVqZWN0KGUpfSksMD09PWUubGVuZ3RoJiZuKCksdGhpcy5pbml0aWFsaXplZD0hMH19LHR9KCksaHQ9bmV3IGwoIkFwcElkIik7ZnVuY3Rpb24gZHQoKXtyZXR1cm4iIitwdCgpK3B0KCkrcHQoKX1mdW5jdGlvbiBwdCgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBtdD1uZXcgbCgiUGxhdGZvcm0gSW5pdGlhbGl6ZXIiKSx5dD1uZXcgbCgiUGxhdGZvcm0gSUQiKSx2dD1uZXcgbCgiYXBwQm9vdHN0cmFwTGlzdGVuZXIiKSxndD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmxvZz1mdW5jdGlvbih0KXtjb25zb2xlLmxvZyh0KX0sdC5wcm90b3R5cGUud2Fybj1mdW5jdGlvbih0KXtjb25zb2xlLndhcm4odCl9LHR9KCk7ZnVuY3Rpb24gYnQoKXt0aHJvdyBuZXcgRXJyb3IoIlJ1bnRpbWUgY29tcGlsZXIgaXMgbm90IGxvYWRlZCIpfXZhciBfdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVTeW5jPWZ1bmN0aW9uKHQpe3Rocm93IGJ0KCl9LHQucHJvdG90eXBlLmNvbXBpbGVNb2R1bGVBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmM9ZnVuY3Rpb24odCl7dGhyb3cgYnQoKX0sdC5wcm90b3R5cGUuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNBc3luYz1mdW5jdGlvbih0KXt0aHJvdyBidCgpfSx0LnByb3RvdHlwZS5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jbGVhckNhY2hlRm9yPWZ1bmN0aW9uKHQpe30sdH0oKSx3dD1mdW5jdGlvbigpe30seHQ9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIFN0KHQpe3ZhciBlPUVycm9yKCJObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgIitTKHQpKyIuIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/Iik7cmV0dXJuIGVbT3RdPXQsZX12YXIgRXQsQ3QsT3Q9Im5nQ29tcG9uZW50IixUdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3Rocm93IFN0KHQpfSx0fSgpLGt0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5OVUxMPW5ldyBUdCx0fSgpLEF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fcGFyZW50PWUsdGhpcy5fbmdNb2R1bGU9bix0aGlzLl9mYWN0b3JpZXM9bmV3IE1hcDtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFtpXTt0aGlzLl9mYWN0b3JpZXMuc2V0KHIuY29tcG9uZW50VHlwZSxyKX19cmV0dXJuIHQucHJvdG90eXBlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7aWYoIWUmJnRoaXMuX3BhcmVudCYmKGU9dGhpcy5fcGFyZW50LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpKSwhZSl0aHJvdyBTdCh0KTtyZXR1cm4gbmV3IEl0KGUsdGhpcy5fbmdNb2R1bGUpfSx0fSgpLEl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuZmFjdG9yeT1lLGkubmdNb2R1bGU9bixpLnNlbGVjdG9yPWUuc2VsZWN0b3IsaS5jb21wb25lbnRUeXBlPWUuY29tcG9uZW50VHlwZSxpLm5nQ29udGVudFNlbGVjdG9ycz1lLm5nQ29udGVudFNlbGVjdG9ycyxpLmlucHV0cz1lLmlucHV0cyxpLm91dHB1dHM9ZS5vdXRwdXRzLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiB0aGlzLmZhY3RvcnkuY3JlYXRlKHQsZSxuLGl8fHRoaXMubmdNb2R1bGUpfSxlfSh4dCksanQ9ZnVuY3Rpb24oKXt9LE10PWZ1bmN0aW9uKCl7fSxQdD1mdW5jdGlvbigpe3ZhciB0PXYud3RmO3JldHVybiEoIXR8fCEoRXQ9dC50cmFjZSl8fChDdD1FdC5ldmVudHMsMCkpfSgpO2Z1bmN0aW9uIE50KHQsZSl7cmV0dXJuIG51bGx9dmFyIFJ0PVB0P2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLEN0LmNyZWF0ZVNjb3BlKHQsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE50fSxEdD1QdD9mdW5jdGlvbih0LGUpe3JldHVybiBFdC5sZWF2ZVNjb3BlKHQsZSksZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sTHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIG49dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9faXNBc3luYz1lLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcyxlKX0sZS5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGUsbixpKXt2YXIgbyxhPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxzPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2UmJiJvYmplY3QiPT10eXBlb2YgZT8obz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUubmV4dCh0KX0pfTpmdW5jdGlvbih0KXtlLm5leHQodCl9LGUuZXJyb3ImJihhPXRoaXMuX19pc0FzeW5jP2Z1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gZS5lcnJvcih0KX0pfTpmdW5jdGlvbih0KXtlLmVycm9yKHQpfSksZS5jb21wbGV0ZSYmKHM9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfTpmdW5jdGlvbigpe2UuY29tcGxldGUoKX0pKToobz10aGlzLl9faXNBc3luYz9mdW5jdGlvbih0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGUodCl9KX06ZnVuY3Rpb24odCl7ZSh0KX0sbiYmKGE9dGhpcy5fX2lzQXN5bmM/ZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuKHQpfSl9OmZ1bmN0aW9uKHQpe24odCl9KSxpJiYocz10aGlzLl9faXNBc3luYz9mdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gaSgpfSl9OmZ1bmN0aW9uKCl7aSgpfSkpO3ZhciB1PXQucHJvdG90eXBlLnN1YnNjcmliZS5jYWxsKHRoaXMsbyxhLHMpO3JldHVybiBlIGluc3RhbmNlb2Ygci5hJiZlLmFkZCh1KSx1fSxlfShvLmEpLEZ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZSxuPXQuZW5hYmxlTG9uZ1N0YWNrVHJhY2UsaT12b2lkIDAhPT1uJiZuO2lmKHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgTHQoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgTHQoITEpLHRoaXMub25TdGFibGU9bmV3IEx0KCExKSx0aGlzLm9uRXJyb3I9bmV3IEx0KCExKSwidW5kZWZpbmVkIj09dHlwZW9mIFpvbmUpdGhyb3cgbmV3IEVycm9yKCJJbiB0aGlzIGNvbmZpZ3VyYXRpb24gQW5ndWxhciByZXF1aXJlcyBab25lLmpzIik7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpLHRoaXMuX25lc3Rpbmc9MCx0aGlzLl9vdXRlcj10aGlzLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS53dGZab25lU3BlYyYmKHRoaXMuX2lubmVyPXRoaXMuX2lubmVyLmZvcmsoWm9uZS53dGZab25lU3BlYykpLFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMmJih0aGlzLl9pbm5lcj10aGlzLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksaSYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYodGhpcy5faW5uZXI9dGhpcy5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSwoZT10aGlzKS5faW5uZXI9ZS5faW5uZXIuZm9yayh7bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKHQsbixpLHIsbyxhKXt0cnl7cmV0dXJuIFV0KGUpLHQuaW52b2tlVGFzayhpLHIsbyxhKX1maW5hbGx5e0h0KGUpfX0sb25JbnZva2U6ZnVuY3Rpb24odCxuLGkscixvLGEscyl7dHJ5e3JldHVybiBVdChlKSx0Lmludm9rZShpLHIsbyxhLHMpfWZpbmFsbHl7SHQoZSl9fSxvbkhhc1Rhc2s6ZnVuY3Rpb24odCxuLGkscil7dC5oYXNUYXNrKGksciksbj09PWkmJigibWljcm9UYXNrIj09ci5jaGFuZ2U/KGUuaGFzUGVuZGluZ01pY3JvdGFza3M9ci5taWNyb1Rhc2ssQnQoZSkpOiJtYWNyb1Rhc2siPT1yLmNoYW5nZSYmKGUuaGFzUGVuZGluZ01hY3JvdGFza3M9ci5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjpmdW5jdGlvbih0LG4saSxyKXtyZXR1cm4gdC5oYW5kbGVFcnJvcihpLHIpLGUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5vbkVycm9yLmVtaXQocil9KSwhMX19KX1yZXR1cm4gdC5pc0luQW5ndWxhclpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4hMD09PVpvbmUuY3VycmVudC5nZXQoImlzQW5ndWxhclpvbmUiKX0sdC5hc3NlcnRJbkFuZ3VsYXJab25lPWZ1bmN0aW9uKCl7aWYoIXQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyBub3QhIil9LHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZT1mdW5jdGlvbigpe2lmKHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0byBub3QgYmUgaW4gQW5ndWxhciBab25lLCBidXQgaXQgaXMhIil9LHQucHJvdG90eXBlLnJ1bj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bih0LGUsbil9LHQucHJvdG90eXBlLnJ1blRhc2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5faW5uZXIsbz1yLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitpLHQsVnQsenQsenQpO3RyeXtyZXR1cm4gci5ydW5UYXNrKG8sZSxuKX1maW5hbGx5e3IuY2FuY2VsVGFzayhvKX19LHQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbm5lci5ydW5HdWFyZGVkKHQsZSxuKX0sdC5wcm90b3R5cGUucnVuT3V0c2lkZUFuZ3VsYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX0sdH0oKTtmdW5jdGlvbiB6dCgpe312YXIgVnQ9e307ZnVuY3Rpb24gQnQodCl7aWYoMD09dC5fbmVzdGluZyYmIXQuaGFzUGVuZGluZ01pY3JvdGFza3MmJiF0LmlzU3RhYmxlKXRyeXt0Ll9uZXN0aW5nKyssdC5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZih0Ll9uZXN0aW5nLS0sIXQuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e3QucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gdC5vblN0YWJsZS5lbWl0KG51bGwpfSl9ZmluYWxseXt0LmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gVXQodCl7dC5fbmVzdGluZysrLHQuaXNTdGFibGUmJih0LmlzU3RhYmxlPSExLHQub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBIdCh0KXt0Ll9uZXN0aW5nLS0sQnQodCl9dmFyIHF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgTHQsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBMdCx0aGlzLm9uU3RhYmxlPW5ldyBMdCx0aGlzLm9uRXJyb3I9bmV3IEx0fXJldHVybiB0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0sdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5PdXRzaWRlQW5ndWxhcj1mdW5jdGlvbih0KXtyZXR1cm4gdCgpfSx0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHQpe3JldHVybiB0KCl9LHR9KCksR3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fbmdab25lPXQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLHQucnVuKGZ1bmN0aW9uKCl7ZS50YXNrVHJhY2tpbmdab25lPVpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfXJldHVybiB0LnByb3RvdHlwZS5fd2F0Y2hBbmd1bGFyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oKXt0Ll9kaWRXb3JrPSEwLHQuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXt0Ll9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKCl7RnQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHcoZnVuY3Rpb24oKXt0Ll9pc1pvbmVTdGFibGU9ITAsdC5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX0sdC5wcm90b3R5cGUuaW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBiZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9LHQucHJvdG90eXBlLmlzU3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc30sdC5wcm90b3R5cGUuX3J1bkNhbGxiYWNrc0lmUmVhZHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaXNTdGFibGUoKSl3KGZ1bmN0aW9uKCl7Zm9yKDswIT09dC5fY2FsbGJhY2tzLmxlbmd0aDspe3ZhciBlPXQuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoZS50aW1lb3V0SWQpLGUuZG9uZUNiKHQuX2RpZFdvcmspfXQuX2RpZFdvcms9ITF9KTtlbHNle3ZhciBlPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQudXBkYXRlQ2J8fCF0LnVwZGF0ZUNiKGUpfHwoY2xlYXJUaW1lb3V0KHQudGltZW91dElkKSwhMSl9KSx0aGlzLl9kaWRXb3JrPSEwfX0sdC5wcm90b3R5cGUuZ2V0UGVuZGluZ1Rhc2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LnNvdXJjZSxpc1BlcmlvZGljOnQuZGF0YS5pc1BlcmlvZGljLGRlbGF5OnQuZGF0YS5kZWxheSxjcmVhdGlvbkxvY2F0aW9uOnQuY3JlYXRpb25Mb2NhdGlvbix4aHI6dC5kYXRhLnRhcmdldH19KTpbXX0sdC5wcm90b3R5cGUuYWRkQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj0tMTtlJiZlPjAmJihyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9jYWxsYmFja3M9aS5fY2FsbGJhY2tzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lb3V0SWQhPT1yfSksdChpLl9kaWRXb3JrLGkuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxlKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjp0LHRpbWVvdXRJZDpyLHVwZGF0ZUNiOm59KX0sdC5wcm90b3R5cGUud2hlblN0YWJsZT1mdW5jdGlvbih0LGUsbil7aWYobiYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4gdXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvZGlzdC90YXNrLXRyYWNraW5nLmpzIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayh0LGUsbiksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSx0LnByb3RvdHlwZS5nZXRQZW5kaW5nUmVxdWVzdENvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH0sdC5wcm90b3R5cGUuZmluZFByb3ZpZGVycz1mdW5jdGlvbih0LGUsbil7cmV0dXJuW119LHR9KCksV3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXAsWnQuYWRkVG9XaW5kb3codGhpcyl9cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyQXBwbGljYXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KHQsZSl9LHQucHJvdG90eXBlLnVucmVnaXN0ZXJBcHBsaWNhdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKHQpfSx0LnByb3RvdHlwZS51bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zPWZ1bmN0aW9uKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9LHQucHJvdG90eXBlLmdldFRlc3RhYmlsaXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KHQpfHxudWxsfSx0LnByb3RvdHlwZS5nZXRBbGxUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX0sdC5wcm90b3R5cGUuZ2V0QWxsUm9vdEVsZW1lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMCksWnQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsdCxlKX0sdC5jdG9yUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybltdfSx0fSgpO2Z1bmN0aW9uIFl0KHQpe1p0PXR9dmFyIFF0LFp0PW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZmluZFRlc3RhYmlsaXR5SW5UcmVlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbnVsbH0sdH0oKSksS3Q9ITAsWHQ9ITEsJHQ9bmV3IGwoIkFsbG93TXVsdGlwbGVUb2tlbiIpO2Z1bmN0aW9uIEp0KCl7aWYoWHQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTtLdD0hMX1mdW5jdGlvbiB0ZSgpe3JldHVybiBYdD0hMCxLdH12YXIgZWU9ZnVuY3Rpb24odCxlKXt0aGlzLm5hbWU9dCx0aGlzLnRva2VuPWV9O2Z1bmN0aW9uIG5lKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1bXSk7dmFyIGk9IlBsYXRmb3JtOiAiK2Uscj1uZXcgbChpKTtyZXR1cm4gZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBvPWllKCk7aWYoIW98fG8uaW5qZWN0b3IuZ2V0KCR0LCExKSlpZih0KXQobi5jb25jYXQoZSkuY29uY2F0KHtwcm92aWRlOnIsdXNlVmFsdWU6ITB9KSk7ZWxzZXt2YXIgYT1uLmNvbmNhdChlKS5jb25jYXQoe3Byb3ZpZGU6cix1c2VWYWx1ZTohMH0pOyFmdW5jdGlvbih0KXtpZihRdCYmIVF0LmRlc3Ryb3llZCYmIVF0LmluamVjdG9yLmdldCgkdCwhMSkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcGxhdGZvcm0uIERlc3Ryb3kgdGhlIHByZXZpb3VzIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiIpO1F0PXQuZ2V0KHJlKTt2YXIgZT10LmdldChtdCxudWxsKTtlJiZlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfShOLmNyZWF0ZSh7cHJvdmlkZXJzOmEsbmFtZTppfSkpfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1pZSgpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTm8gcGxhdGZvcm0gZXhpc3RzISIpO2lmKCFlLmluamVjdG9yLmdldCh0LG51bGwpKXRocm93IG5ldyBFcnJvcigiQSBwbGF0Zm9ybSB3aXRoIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY3JlYXRlZC4gUGxlYXNlIGRlc3Ryb3kgaXQgZmlyc3QuIik7cmV0dXJuIGV9KHIpfX1mdW5jdGlvbiBpZSgpe3JldHVybiBRdCYmIVF0LmRlc3Ryb3llZD9RdDpudWxsfXZhciByZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5faW5qZWN0b3I9dCx0aGlzLl9tb2R1bGVzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXBNb2R1bGVGYWN0b3J5PWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLHI9Im5vb3AiPT09KG49ZT9lLm5nWm9uZTp2b2lkIDApP25ldyBxdDooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBGdCh7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dGUoKX0pLG89W3twcm92aWRlOkZ0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oZnVuY3Rpb24oKXt2YXIgZT1OLmNyZWF0ZSh7cHJvdmlkZXJzOm8scGFyZW50OmkuaW5qZWN0b3IsbmFtZTp0Lm1vZHVsZVR5cGUubmFtZX0pLG49dC5jcmVhdGUoZSksYT1uLmluamVjdG9yLmdldChhdCxudWxsKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk5vIEVycm9ySGFuZGxlci4gSXMgcGxhdGZvcm0gbW9kdWxlIChCcm93c2VyTW9kdWxlKSBpbmNsdWRlZD8iKTtyZXR1cm4gbi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gc2UoaS5fbW9kdWxlcyxuKX0pLHIucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gci5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbih0KXthLmhhbmRsZUVycm9yKHQpfX0pfSksZnVuY3Rpb24odCxlLHIpe3RyeXt2YXIgbz0oKGE9bi5pbmplY3Rvci5nZXQoZnQpKS5ydW5Jbml0aWFsaXplcnMoKSxhLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gaS5fbW9kdWxlRG9Cb290c3RyYXAobiksbn0pKTtyZXR1cm4gdXQobyk/by5jYXRjaChmdW5jdGlvbihuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufSk6b31jYXRjaChuKXt0aHJvdyBlLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGFuZGxlRXJyb3Iobil9KSxufXZhciBhfShhLHIpfSl9LHQucHJvdG90eXBlLmJvb3RzdHJhcE1vZHVsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBpPXRoaXMuaW5qZWN0b3IuZ2V0KHd0KSxyPW9lKHt9LGUpO3JldHVybiBpLmNyZWF0ZUNvbXBpbGVyKFtyXSkuY29tcGlsZU1vZHVsZUFzeW5jKHQpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIG4uYm9vdHN0cmFwTW9kdWxlRmFjdG9yeSh0LHIpfSl9LHQucHJvdG90eXBlLl9tb2R1bGVEb0Jvb3RzdHJhcD1mdW5jdGlvbih0KXt2YXIgZT10LmluamVjdG9yLmdldChhZSk7aWYodC5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MCl0Ll9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYm9vdHN0cmFwKHQpfSk7ZWxzZXtpZighdC5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBFcnJvcigiVGhlIG1vZHVsZSAiK1ModC5pbnN0YW5jZS5jb25zdHJ1Y3RvcikrJyB3YXMgYm9vdHN0cmFwcGVkLCBidXQgaXQgZG9lcyBub3QgZGVjbGFyZSAiQE5nTW9kdWxlLmJvb3RzdHJhcCIgY29tcG9uZW50cyBub3IgYSAibmdEb0Jvb3RzdHJhcCIgbWV0aG9kLiBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZS4nKTt0Lmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZSl9dGhpcy5fbW9kdWxlcy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKHQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGxhdGZvcm0gaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQhIik7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITB9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2Z1bmN0aW9uIG9lKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5yZWR1Y2Uob2UsdCk6T2JqZWN0KGkuYSkoe30sdCxlKX12YXIgYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvKXt2YXIgYz10aGlzO3RoaXMuX3pvbmU9dCx0aGlzLl9jb25zb2xlPWUsdGhpcy5faW5qZWN0b3I9bix0aGlzLl9leGNlcHRpb25IYW5kbGVyPWksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXIsdGhpcy5faW5pdFN0YXR1cz1vLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0aGlzLl92aWV3cz1bXSx0aGlzLl9ydW5uaW5nVGljaz0hMSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPSExLHRoaXMuX3N0YWJsZT0hMCx0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLl9lbmZvcmNlTm9OZXdDaGFuZ2VzPXRlKCksdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbigpe2MuX3pvbmUucnVuKGZ1bmN0aW9uKCl7Yy50aWNrKCl9KX19KTt2YXIgbD1uZXcgYS5hKGZ1bmN0aW9uKHQpe2MuX3N0YWJsZT1jLl96b25lLmlzU3RhYmxlJiYhYy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dChjLl9zdGFibGUpLHQuY29tcGxldGUoKX0pfSksZj1uZXcgYS5hKGZ1bmN0aW9uKHQpe3ZhciBlO2MuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlPWMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7RnQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHcoZnVuY3Rpb24oKXtjLl9zdGFibGV8fGMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N8fGMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3N8fChjLl9zdGFibGU9ITAsdC5uZXh0KCEwKSl9KX0pfSk7dmFyIG49Yy5fem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZShmdW5jdGlvbigpe0Z0LmFzc2VydEluQW5ndWxhclpvbmUoKSxjLl9zdGFibGUmJihjLl9zdGFibGU9ITEsYy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QubmV4dCghMSl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oKXtlLnVuc3Vic2NyaWJlKCksbi51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9T2JqZWN0KHMuYSkobCxmLnBpcGUoT2JqZWN0KHUuYSkoKSkpfXJldHVybiB0LnByb3RvdHlwZS5ib290c3RyYXA9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXRoaXM7aWYoIXRoaXMuX2luaXRTdGF0dXMuZG9uZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBib290c3RyYXAgYXMgdGhlcmUgYXJlIHN0aWxsIGFzeW5jaHJvbm91cyBpbml0aWFsaXplcnMgcnVubmluZy4gQm9vdHN0cmFwIGNvbXBvbmVudHMgaW4gdGhlIGBuZ0RvQm9vdHN0cmFwYCBtZXRob2Qgb2YgdGhlIHJvb3QgbW9kdWxlLiIpO249dCBpbnN0YW5jZW9mIHh0P3Q6dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpLHRoaXMuY29tcG9uZW50VHlwZXMucHVzaChuLmNvbXBvbmVudFR5cGUpO3ZhciByPW4gaW5zdGFuY2VvZiBJdD9udWxsOnRoaXMuX2luamVjdG9yLmdldChqdCksbz1uLmNyZWF0ZShOLk5VTEwsW10sZXx8bi5zZWxlY3RvcixyKTtvLm9uRGVzdHJveShmdW5jdGlvbigpe2kuX3VubG9hZENvbXBvbmVudChvKX0pO3ZhciBhPW8uaW5qZWN0b3IuZ2V0KEd0LG51bGwpO3JldHVybiBhJiZvLmluamVjdG9yLmdldChXdCkucmVnaXN0ZXJBcHBsaWNhdGlvbihvLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5fbG9hZENvbXBvbmVudChvKSx0ZSgpJiZ0aGlzLl9jb25zb2xlLmxvZygiQW5ndWxhciBpcyBydW5uaW5nIGluIHRoZSBkZXZlbG9wbWVudCBtb2RlLiBDYWxsIGVuYWJsZVByb2RNb2RlKCkgdG8gZW5hYmxlIHRoZSBwcm9kdWN0aW9uIG1vZGUuIiksb30sdC5wcm90b3R5cGUudGljaz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEVycm9yKCJBcHBsaWNhdGlvblJlZi50aWNrIGlzIGNhbGxlZCByZWN1cnNpdmVseSIpO3ZhciBuPXQuX3RpY2tTY29wZSgpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMCx0aGlzLl92aWV3cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRldGVjdENoYW5nZXMoKX0pLHRoaXMuX2VuZm9yY2VOb05ld0NoYW5nZXMmJnRoaXMuX3ZpZXdzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tOb0NoYW5nZXMoKX0pfWNhdGNoKHQpe3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcih0KX0pfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITEsRHQobil9fSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7dGhpcy5fdmlld3MucHVzaChlKSxlLmF0dGFjaFRvQXBwUmVmKHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7c2UodGhpcy5fdmlld3MsZSksZS5kZXRhY2hGcm9tQXBwUmVmKCl9LHQucHJvdG90eXBlLl9sb2FkQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3RoaXMuYXR0YWNoVmlldyh0Lmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaCh0KSx0aGlzLl9pbmplY3Rvci5nZXQodnQsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KX0sdC5wcm90b3R5cGUuX3VubG9hZENvbXBvbmVudD1mdW5jdGlvbih0KXt0aGlzLmRldGFjaFZpZXcodC5ob3N0Vmlldyksc2UodGhpcy5jb21wb25lbnRzLHQpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ2aWV3Q291bnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQuX3RpY2tTY29wZT1SdCgiQXBwbGljYXRpb25SZWYjdGljaygpIiksdH0oKTtmdW5jdGlvbiBzZSh0LGUpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfXZhciB1ZT1mdW5jdGlvbigpe30sY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsdFt0LkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsdH0oe30pLGxlPWZ1bmN0aW9uKCl7fSxmZT1mdW5jdGlvbih0KXt0aGlzLm5hdGl2ZUVsZW1lbnQ9dH0saGU9ZnVuY3Rpb24oKXt9LGRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLmNoYW5nZXM9bmV3IEx0LHRoaXMubGVuZ3RoPTB9cmV0dXJuIHQucHJvdG90eXBlLm1hcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAodCl9LHQucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9LHQucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZCh0KX0sdC5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKHQsZSl9LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfSx0LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUodCl9LHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfSx0LnByb3RvdHlwZVtfKCldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbXygpXSgpfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc3VsdHM9ZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXt2YXIgaT1BcnJheS5pc0FycmF5KG4pP3Qobik6bjtyZXR1cm4gZS5jb25jYXQoaSl9LFtdKX0odCksdGhpcy5kaXJ0eT0hMSx0aGlzLmxlbmd0aD10aGlzLl9yZXN1bHRzLmxlbmd0aCx0aGlzLmxhc3Q9dGhpcy5fcmVzdWx0c1t0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PXRoaXMuX3Jlc3VsdHNbMF19LHQucHJvdG90eXBlLm5vdGlmeU9uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMuY2hhbmdlcy5lbWl0KHRoaXMpfSx0LnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX0sdH0oKSxwZT1mdW5jdGlvbigpe30sbWU9e2ZhY3RvcnlQYXRoUHJlZml4OiIiLGZhY3RvcnlQYXRoU3VmZml4OiIubmdmYWN0b3J5In0seWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5fY29tcGlsZXI9dCx0aGlzLl9jb25maWc9ZXx8bWV9cmV0dXJuIHQucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbXBpbGVyIGluc3RhbmNlb2YgX3Q/dGhpcy5sb2FkRmFjdG9yeSh0KTp0aGlzLmxvYWRBbmRDb21waWxlKHQpfSx0LnByb3RvdHlwZS5sb2FkQW5kQ29tcGlsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9T2JqZWN0KGkuYykodC5zcGxpdCgiIyIpLDIpLG89clswXSxhPXJbMV07cmV0dXJuIHZvaWQgMD09PWEmJihhPSJkZWZhdWx0IiksbigiY3JuZCIpKG8pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRbYV19KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB2ZSh0LG8sYSl9KS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCl9KX0sdC5wcm90b3R5cGUubG9hZEZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGkuYykodC5zcGxpdCgiIyIpLDIpLHI9ZVswXSxvPWVbMV0sYT0iTmdGYWN0b3J5IjtyZXR1cm4gdm9pZCAwPT09byYmKG89ImRlZmF1bHQiLGE9IiIpLG4oImNybmQiKSh0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhQcmVmaXgrcit0aGlzLl9jb25maWcuZmFjdG9yeVBhdGhTdWZmaXgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHRbbythXX0pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHZlKHQscixvKX0pfSx0fSgpO2Z1bmN0aW9uIHZlKHQsZSxuKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kICciK24rIicgaW4gJyIrZSsiJyIpO3JldHVybiB0fXZhciBnZT1mdW5jdGlvbigpe30sYmU9ZnVuY3Rpb24oKXt9LF9lPWZ1bmN0aW9uKCl7fSx3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RlYnVnQ29udGV4dD1uLHRoaXMubmF0aXZlTm9kZT10LGUmJmUgaW5zdGFuY2VvZiB4ZT9lLmFkZENoaWxkKHRoaXMpOnRoaXMucGFyZW50PW51bGwsdGhpcy5saXN0ZW5lcnM9W119cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmluamVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50SW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmNvbXBvbmVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnQ29udGV4dC5yZWZlcmVuY2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvdmlkZXJUb2tlbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVidWdDb250ZXh0LnByb3ZpZGVyVG9rZW5zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCkseGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSxuLGkpfHx0aGlzO3JldHVybiByLnByb3BlcnRpZXM9e30sci5hdHRyaWJ1dGVzPXt9LHIuY2xhc3Nlcz17fSxyLnN0eWxlcz17fSxyLmNoaWxkTm9kZXM9W10sci5uYXRpdmVFbGVtZW50PWUscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbih0KXt0JiYodGhpcy5jaGlsZE5vZGVzLnB1c2godCksdC5wYXJlbnQ9dGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShlLDEpKX0sZS5wcm90b3R5cGUuaW5zZXJ0Q2hpbGRyZW5BZnRlcj1mdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcyxvPXRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHQpOy0xIT09byYmKChuPXRoaXMuY2hpbGROb2Rlcykuc3BsaWNlLmFwcGx5KG4sT2JqZWN0KGkuZCkoW28rMSwwXSxlKSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucGFyZW50JiZ0LnBhcmVudC5yZW1vdmVDaGlsZCh0KSx0LnBhcmVudD1yfSkpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmNoaWxkTm9kZXMuaW5kZXhPZih0KTstMT09PW4/dGhpcy5hZGRDaGlsZChlKTooZS5wYXJlbnQmJmUucGFyZW50LnJlbW92ZUNoaWxkKGUpLGUucGFyZW50PXRoaXMsdGhpcy5jaGlsZE5vZGVzLnNwbGljZShuLDAsZSkpfSxlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeUFsbCh0KVswXXx8bnVsbH0sZS5wcm90b3R5cGUucXVlcnlBbGw9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIFNlKHRoaXMsdCxlKSxlfSxlLnByb3RvdHlwZS5xdWVyeUFsbE5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBFZSh0aGlzLHQsZSksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLnRyaWdnZXJFdmVudEhhbmRsZXI9ZnVuY3Rpb24odCxlKXt0aGlzLmxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24ubmFtZT09dCYmbi5jYWxsYmFjayhlKX0pfSxlfSh3ZSk7ZnVuY3Rpb24gU2UodCxlLG4pe3QuY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QgaW5zdGFuY2VvZiB4ZSYmKGUodCkmJm4ucHVzaCh0KSxTZSh0LGUsbikpfSl9ZnVuY3Rpb24gRWUodCxlLG4pe3QgaW5zdGFuY2VvZiB4ZSYmdC5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7ZSh0KSYmbi5wdXNoKHQpLHQgaW5zdGFuY2VvZiB4ZSYmRWUodCxlLG4pfSl9dmFyIENlPW5ldyBNYXA7ZnVuY3Rpb24gT2UodCl7cmV0dXJuIENlLmdldCh0KXx8bnVsbH1mdW5jdGlvbiBUZSh0KXtDZS5zZXQodC5uYXRpdmVOb2RlLHQpfWZ1bmN0aW9uIGtlKHQsZSl7dmFyIG49amUodCksaT1qZShlKTtyZXR1cm4gbiYmaT9mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPXRbXygpXSgpLHI9ZVtfKCldKCk7Oyl7dmFyIG89aS5uZXh0KCksYT1yLm5leHQoKTtpZihvLmRvbmUmJmEuZG9uZSlyZXR1cm4hMDtpZihvLmRvbmV8fGEuZG9uZSlyZXR1cm4hMTtpZighbihvLnZhbHVlLGEudmFsdWUpKXJldHVybiExfX0odCxlLGtlKTohKG58fCF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0fHxpfHwhZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl8fHgodCxlKX12YXIgQWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMud3JhcHBlZD10fXJldHVybiB0LndyYXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0KGUpfSx0LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gdC5pc1dyYXBwZWQoZSk/ZS53cmFwcGVkOmV9LHQuaXNXcmFwcGVkPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdH0sdH0oKSxJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJldmlvdXNWYWx1ZT10LHRoaXMuY3VycmVudFZhbHVlPWUsdGhpcy5maXJzdENoYW5nZT1ufXJldHVybiB0LnByb3RvdHlwZS5pc0ZpcnN0Q2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9LHR9KCk7ZnVuY3Rpb24gamUodCl7cmV0dXJuISFNZSh0KSYmKEFycmF5LmlzQXJyYXkodCl8fCEodCBpbnN0YW5jZW9mIE1hcCkmJl8oKWluIHQpfWZ1bmN0aW9uIE1lKHQpe3JldHVybiBudWxsIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQpfXZhciBQZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnN1cHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBqZSh0KX0sdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUmUodCl9LHR9KCksTmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0sUmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxOZX1yZXR1cm4gdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoT3BlcmF0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9pdEhlYWQsbj10aGlzLl9yZW1vdmFsc0hlYWQsaT0wLHI9bnVsbDtlfHxuOyl7dmFyIG89IW58fGUmJmUuY3VycmVudEluZGV4PHplKG4saSxyKT9lOm4sYT16ZShvLGkscikscz1vLmN1cnJlbnRJbmRleDtpZihvPT09bilpLS0sbj1uLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1vLnByZXZpb3VzSW5kZXgpaSsrO2Vsc2V7cnx8KHI9W10pO3ZhciB1PWEtaSxjPXMtaTtpZih1IT1jKXtmb3IodmFyIGw9MDtsPHU7bCsrKXt2YXIgZj1sPHIubGVuZ3RoP3JbbF06cltsXT0wLGg9ZitsO2M8PWgmJmg8dSYmKHJbbF09ZisxKX1yW28ucHJldmlvdXNJbmRleF09Yy11fX1hIT09cyYmdChvLGEscyl9fSx0LnByb3RvdHlwZS5mb3JFYWNoUHJldmlvdXNJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFByZXZpb3VzKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hBZGRlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09ZTtlPWUuX25leHRBZGRlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoTW92ZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5mb3JFYWNoUmVtb3ZlZEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dFJlbW92ZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0SWRlbnRpdHlDaGFuZ2UpdChlKX0sdC5wcm90b3R5cGUuZGlmZj1mdW5jdGlvbih0KXtpZihudWxsPT10JiYodD1bXSksIWplKHQpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIrUyh0KSsiJy4gT25seSBhcnJheXMgYW5kIGl0ZXJhYmxlcyBhcmUgYWxsb3dlZCIpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX3Jlc2V0KCk7dmFyIG4saSxyLG89dGhpcy5faXRIZWFkLGE9ITE7aWYoQXJyYXkuaXNBcnJheSh0KSl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7Zm9yKHZhciBzPTA7czx0aGlzLmxlbmd0aDtzKyspcj10aGlzLl90cmFja0J5Rm4ocyxpPXRbc10pLG51bGwhPT1vJiZ4KG8udHJhY2tCeUlkLHIpPyhhJiYobz10aGlzLl92ZXJpZnlSZWluc2VydGlvbihvLGkscixzKSkseChvLml0ZW0saSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKG8saSkpOihvPXRoaXMuX21pc21hdGNoKG8saSxyLHMpLGE9ITApLG89by5fbmV4dH1lbHNlIG49MCxmdW5jdGlvbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspZSh0W25dKTtlbHNlIGZvcih2YXIgaT10W18oKV0oKSxyPXZvaWQgMDshKHI9aS5uZXh0KCkpLmRvbmU7KWUoci52YWx1ZSl9KHQsZnVuY3Rpb24odCl7cj1lLl90cmFja0J5Rm4obix0KSxudWxsIT09byYmeChvLnRyYWNrQnlJZCxyKT8oYSYmKG89ZS5fdmVyaWZ5UmVpbnNlcnRpb24obyx0LHIsbikpLHgoby5pdGVtLHQpfHxlLl9hZGRJZGVudGl0eUNoYW5nZShvLHQpKToobz1lLl9taXNtYXRjaChvLHQscixuKSxhPSEwKSxvPW8uX25leHQsbisrfSksdGhpcy5sZW5ndGg9bjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUobyksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRGlydHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2lmKHRoaXMuaXNEaXJ0eSl7dmFyIHQ9dm9pZCAwLGU9dm9pZCAwO2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9ZSl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXgsZT10Ll9uZXh0TW92ZWQ7dGhpcy5fbW92ZXNIZWFkPXRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19LHQucHJvdG90eXBlLl9taXNtYXRjaD1mdW5jdGlvbih0LGUsbixpKXt2YXIgcjtyZXR1cm4gbnVsbD09PXQ/cj10aGlzLl9pdFRhaWw6KHI9dC5fcHJldix0aGlzLl9yZW1vdmUodCkpLG51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KG4saSkpPyh4KHQuaXRlbSxlKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKSx0aGlzLl9tb3ZlQWZ0ZXIodCxyLGkpKTpudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQobixudWxsKSk/KHgodC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX3JlaW5zZXJ0QWZ0ZXIodCxyLGkpKTp0PXRoaXMuX2FkZEFmdGVyKG5ldyBEZShlLG4pLHIsaSksdH0sdC5wcm90b3R5cGUuX3ZlcmlmeVJlaW5zZXJ0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KG4sbnVsbCk7cmV0dXJuIG51bGwhPT1yP3Q9dGhpcy5fcmVpbnNlcnRBZnRlcihyLHQuX3ByZXYsaSk6dC5jdXJyZW50SW5kZXghPWkmJih0LmN1cnJlbnRJbmRleD1pLHRoaXMuX2FkZFRvTW92ZXModCxpKSksdH0sdC5wcm90b3R5cGUuX3RydW5jYXRlPWZ1bmN0aW9uKHQpe2Zvcig7bnVsbCE9PXQ7KXt2YXIgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9LHQucHJvdG90eXBlLl9yZWluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKHQpO3ZhciBpPXQuX3ByZXZSZW1vdmVkLHI9dC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1pP3RoaXMuX3JlbW92YWxzSGVhZD1yOmkuX25leHRSZW1vdmVkPXIsbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNUYWlsPWk6ci5fcHJldlJlbW92ZWQ9aSx0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkVG9Nb3Zlcyh0LG4pLHR9LHQucHJvdG90eXBlLl9tb3ZlQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl91bmxpbmsodCksdGhpcy5faW5zZXJ0QWZ0ZXIodCxlLG4pLHRoaXMuX2FkZFRvTW92ZXModCxuKSx0fSx0LnByb3RvdHlwZS5fYWRkQWZ0ZXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsbiksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH0sdC5wcm90b3R5cGUuX2luc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1udWxsPT09ZT90aGlzLl9pdEhlYWQ6ZS5fbmV4dDtyZXR1cm4gdC5fbmV4dD1pLHQuX3ByZXY9ZSxudWxsPT09aT90aGlzLl9pdFRhaWw9dDppLl9wcmV2PXQsbnVsbD09PWU/dGhpcy5faXRIZWFkPXQ6ZS5fbmV4dD10LG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgRmUpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KHQpLHQuY3VycmVudEluZGV4PW4sdH0sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsodCkpfSx0LnByb3RvdHlwZS5fdW5saW5rPWZ1bmN0aW9uKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTt2YXIgZT10Ll9wcmV2LG49dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPW46ZS5fbmV4dD1uLG51bGw9PT1uP3RoaXMuX2l0VGFpbD1lOm4uX3ByZXY9ZSx0fSx0LnByb3RvdHlwZS5fYWRkVG9Nb3Zlcz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZpb3VzSW5kZXg9PT1lP3Q6KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD10OnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPXQsdCl9LHQucHJvdG90eXBlLl9hZGRUb1JlbW92YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBGZSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH0sdC5wcm90b3R5cGUuX2FkZElkZW50aXR5Q2hhbmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaXRlbT1lLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10OnRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT10LHR9LHR9KCksRGU9ZnVuY3Rpb24odCxlKXt0aGlzLml0ZW09dCx0aGlzLnRyYWNrQnlJZD1lLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH0sTGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG47Zm9yKG49dGhpcy5faGVhZDtudWxsIT09bjtuPW4uX25leHREdXApaWYoKG51bGw9PT1lfHxlPD1uLmN1cnJlbnRJbmRleCkmJngobi50cmFja0J5SWQsdCkpcmV0dXJuIG47cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9wcmV2RHVwLG49dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1uOmUuX25leHREdXA9bixudWxsPT09bj90aGlzLl90YWlsPWU6bi5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfSx0fSgpLEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMubWFwPW5ldyBNYXB9cmV0dXJuIHQucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYWNrQnlJZCxuPXRoaXMubWFwLmdldChlKTtufHwobj1uZXcgTGUsdGhpcy5tYXAuc2V0KGUsbikpLG4uYWRkKHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG4/bi5nZXQodCxlKTpudWxsfSx0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChlKS5yZW1vdmUodCkmJnRoaXMubWFwLmRlbGV0ZShlKSx0fSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImlzRW1wdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubWFwLnNpemV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcC5jbGVhcigpfSx0fSgpO2Z1bmN0aW9uIHplKHQsZSxuKXt2YXIgaT10LnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWkpcmV0dXJuIGk7dmFyIHI9MDtyZXR1cm4gbiYmaTxuLmxlbmd0aCYmKHI9bltpXSksaStlK3J9dmFyIFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc3VwcG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNYXB8fE1lKHQpfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJlfSx0fSgpLEJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3JlY29yZHM9bmV3IE1hcCx0aGlzLl9tYXBIZWFkPW51bGwsdGhpcy5fYXBwZW5kQWZ0ZXI9bnVsbCx0aGlzLl9wcmV2aW91c01hcEhlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0RpcnR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZm9yRWFjaEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaFByZXZpb3VzSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaENoYW5nZWRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dENoYW5nZWQpdChlKX0sdC5wcm90b3R5cGUuZm9yRWFjaEFkZGVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9LHQucHJvdG90eXBlLmZvckVhY2hSZW1vdmVkSXRlbT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfSx0LnByb3RvdHlwZS5kaWZmPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKCEodCBpbnN0YW5jZW9mIE1hcHx8TWUodCkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgdHJ5aW5nIHRvIGRpZmYgJyIrUyh0KSsiJy4gT25seSBtYXBzIGFuZCBvYmplY3RzIGFyZSBhbGxvd2VkIil9ZWxzZSB0PW5ldyBNYXA7cmV0dXJuIHRoaXMuY2hlY2sodCk/dGhpczpudWxsfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmNoZWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fcmVzZXQoKTt2YXIgbj10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaCh0LGZ1bmN0aW9uKHQsaSl7aWYobiYmbi5rZXk9PT1pKWUuX21heWJlQWRkVG9DaGFuZ2VzKG4sdCksZS5fYXBwZW5kQWZ0ZXI9bixuPW4uX25leHQ7ZWxzZXt2YXIgcj1lLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShpLHQpO249ZS5faW5zZXJ0QmVmb3JlT3JBcHBlbmQobixyKX19KSxuKXtuLl9wcmV2JiYobi5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9bjtmb3IodmFyIGk9bjtudWxsIT09aTtpPWkuX25leHRSZW1vdmVkKWk9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShpLmtleSksaS5fbmV4dFJlbW92ZWQ9aS5fbmV4dCxpLnByZXZpb3VzVmFsdWU9aS5jdXJyZW50VmFsdWUsaS5jdXJyZW50VmFsdWU9bnVsbCxpLl9wcmV2PW51bGwsaS5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX0sdC5wcm90b3R5cGUuX2luc2VydEJlZm9yZU9yQXBwZW5kPWZ1bmN0aW9uKHQsZSl7aWYodCl7dmFyIG49dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9bix0Ll9wcmV2PWUsbiYmKG4uX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fcmVjb3Jkcy5oYXModCkpe3ZhciBuPXRoaXMuX3JlY29yZHMuZ2V0KHQpO3RoaXMuX21heWJlQWRkVG9DaGFuZ2VzKG4sZSk7dmFyIGk9bi5fcHJldixyPW4uX25leHQ7cmV0dXJuIGkmJihpLl9uZXh0PXIpLHImJihyLl9wcmV2PWkpLG4uX25leHQ9bnVsbCxuLl9wcmV2PW51bGwsbn12YXIgbz1uZXcgVWUodCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KHQsbyksby5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0FkZGl0aW9ucyhvKSxvfSx0LnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRGlydHkpe3ZhciB0PXZvaWQgMDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19LHQucHJvdG90eXBlLl9tYXliZUFkZFRvQ2hhbmdlcz1mdW5jdGlvbih0LGUpe3goZSx0LmN1cnJlbnRWYWx1ZSl8fCh0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWUsdC5jdXJyZW50VmFsdWU9ZSx0aGlzLl9hZGRUb0NoYW5nZXModCkpfSx0LnByb3RvdHlwZS5fYWRkVG9BZGRpdGlvbnM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9LHQucHJvdG90eXBlLl9hZGRUb0NoYW5nZXM9ZnVuY3Rpb24odCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPXQ6KHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD10LHRoaXMuX2NoYW5nZXNUYWlsPXQpfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbih0LGUpe3QgaW5zdGFuY2VvZiBNYXA/dC5mb3JFYWNoKGUpOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUodFtuXSxuKX0pfSx0fSgpLFVlPWZ1bmN0aW9uKHQpe3RoaXMua2V5PXQsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH0sSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZmFjdG9yaWVzPXR9cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUsbil7aWYobnVsbCE9bil7dmFyIGk9bi5mYWN0b3JpZXMuc2xpY2UoKTtlPWUuY29uY2F0KGkpfXJldHVybiBuZXcgdChlKX0sdC5leHRlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJue3Byb3ZpZGU6dCx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe2lmKCFuKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGV4dGVuZCBJdGVyYWJsZURpZmZlcnMgd2l0aG91dCBhIHBhcmVudCBpbmplY3RvciIpO3JldHVybiB0LmNyZWF0ZShlLG4pfSxkZXBzOltbdCxuZXcgQSxuZXcgVF1dfX0sdC5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuZmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VwcG9ydHModCl9KTtpZihudWxsIT1uKXJldHVybiBuO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyBvZiB0eXBlICciKygoZT10KS5uYW1lfHx0eXBlb2YgZSkrIiciKX0sdC5uZ0luamVjdGFibGVEZWY9Yyh7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChbbmV3IFBlXSl9fSksdH0oKSxxZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5mYWN0b3JpZXM9dH1yZXR1cm4gdC5jcmVhdGU9ZnVuY3Rpb24oZSxuKXtpZihuKXt2YXIgaT1uLmZhY3Rvcmllcy5zbGljZSgpO2U9ZS5jb25jYXQoaSl9cmV0dXJuIG5ldyB0KGUpfSx0LmV4dGVuZD1mdW5jdGlvbihlKXtyZXR1cm57cHJvdmlkZTp0LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZXh0ZW5kIEtleVZhbHVlRGlmZmVycyB3aXRob3V0IGEgcGFyZW50IGluamVjdG9yIik7cmV0dXJuIHQuY3JlYXRlKGUsbil9LGRlcHM6W1t0LG5ldyBBLG5ldyBUXV19fSx0LnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3VwcG9ydHModCl9KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyIrdCsiJyIpfSx0fSgpLEdlPVtuZXcgVmVdLFdlPW5ldyBIZShbbmV3IFBlXSksWWU9bmV3IHFlKEdlKSxRZT1uZShudWxsLCJjb3JlIixbe3Byb3ZpZGU6eXQsdXNlVmFsdWU6InVua25vd24ifSx7cHJvdmlkZTpyZSxkZXBzOltOXX0se3Byb3ZpZGU6V3QsZGVwczpbXX0se3Byb3ZpZGU6Z3QsZGVwczpbXX1dKSxaZT1uZXcgbCgiTG9jYWxlSWQiKTtmdW5jdGlvbiBLZSgpe3JldHVybiBXZX1mdW5jdGlvbiBYZSgpe3JldHVybiBZZX1mdW5jdGlvbiAkZSh0KXtyZXR1cm4gdHx8ImVuLVVTIn12YXIgSmU9ZnVuY3Rpb24odCl7fSx0bj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy5kZWZhdWx0RG9jPXQsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuYm9keSxudWxsPT10aGlzLmluZXJ0Qm9keUVsZW1lbnQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpLHRoaXMuaW5lcnRCb2R5RWxlbWVudD10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9keSIpLGUuYXBwZW5kQ2hpbGQodGhpcy5pbmVydEJvZHlFbGVtZW50KX10aGlzLmluZXJ0Qm9keUVsZW1lbnQuaW5uZXJIVE1MPSc8c3ZnPjxnIG9ubG9hZD0idGhpcy5wYXJlbnROb2RlLnJlbW92ZSgpIj48L2c+PC9zdmc+JywhdGhpcy5pbmVydEJvZHlFbGVtZW50LnF1ZXJ5U2VsZWN0b3J8fHRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJzdmciKT8odGhpcy5pbmVydEJvZHlFbGVtZW50LmlubmVySFRNTD0nPHN2Zz48cD48c3R5bGU+PGltZyBzcmM9Ijwvc3R5bGU+PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpLy8iPicsdGhpcy5nZXRJbmVydEJvZHlFbGVtZW50PXRoaXMuaW5lcnRCb2R5RWxlbWVudC5xdWVyeVNlbGVjdG9yJiZ0aGlzLmluZXJ0Qm9keUVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIGltZyIpJiZmdW5jdGlvbigpe3RyeXtyZXR1cm4hIXdpbmRvdy5ET01QYXJzZXJ9Y2F0Y2godCl7cmV0dXJuITF9fSgpP3RoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudF9ET01QYXJzZXI6dGhpcy5nZXRJbmVydEJvZHlFbGVtZW50X0luZXJ0RG9jdW1lbnQpOnRoaXMuZ2V0SW5lcnRCb2R5RWxlbWVudD10aGlzLmdldEluZXJ0Qm9keUVsZW1lbnRfWEhSfXJldHVybiB0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X1hIUj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3Q9ZW5jb2RlVVJJKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfXZhciBlPW5ldyBYTUxIdHRwUmVxdWVzdDtlLnJlc3BvbnNlVHlwZT0iZG9jdW1lbnQiLGUub3BlbigiR0VUIiwiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCwiK3QsITEpLGUuc2VuZChudWxsKTt2YXIgbj1lLnJlc3BvbnNlLmJvZHk7cmV0dXJuIG4ucmVtb3ZlQ2hpbGQobi5maXJzdENoaWxkKSxufSx0LnByb3RvdHlwZS5nZXRJbmVydEJvZHlFbGVtZW50X0RPTVBhcnNlcj1mdW5jdGlvbih0KXt0PSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrdCsiPC9ib2R5PiI7dHJ5e3ZhciBlPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRleHQvaHRtbCIpLmJvZHk7cmV0dXJuIGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlfWNhdGNoKHQpe3JldHVybiBudWxsfX0sdC5wcm90b3R5cGUuZ2V0SW5lcnRCb2R5RWxlbWVudF9JbmVydERvY3VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiJjb250ZW50ImluIGU/KGUuaW5uZXJIVE1MPXQsZSk6KHRoaXMuaW5lcnRCb2R5RWxlbWVudC5pbm5lckhUTUw9dCx0aGlzLmRlZmF1bHREb2MuZG9jdW1lbnRNb2RlJiZ0aGlzLnN0cmlwQ3VzdG9tTnNBdHRycyh0aGlzLmluZXJ0Qm9keUVsZW1lbnQpLHRoaXMuaW5lcnRCb2R5RWxlbWVudCl9LHQucHJvdG90eXBlLnN0cmlwQ3VzdG9tTnNBdHRycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5hdHRyaWJ1dGVzLG49ZS5sZW5ndGgtMTswPG47bi0tKXt2YXIgaT1lLml0ZW0obikubmFtZTsieG1sbnM6bnMxIiE9PWkmJjAhPT1pLmluZGV4T2YoIm5zMToiKXx8dC5yZW1vdmVBdHRyaWJ1dGUoaSl9Zm9yKHZhciByPXQuZmlyc3RDaGlsZDtyOylyLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKHIpLHI9ci5uZXh0U2libGluZ30sdH0oKSxlbj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpLG5uPS9eZGF0YTooPzppbWFnZVwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1wvKD86bXBlZ3xtcDR8b2dnfHdlYm0pfGF1ZGlvXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFthLXowLTkrXC9dKz0qJC9pO2Z1bmN0aW9uIHJuKHQpe3JldHVybih0PVN0cmluZyh0KSkubWF0Y2goZW4pfHx0Lm1hdGNoKG5uKT90Oih0ZSgpJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIFVSTCB2YWx1ZSAiK3QrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKSwidW5zYWZlOiIrdCl9ZnVuY3Rpb24gb24odCl7dmFyIGUsbixyPXt9O3RyeXtmb3IodmFyIG89T2JqZWN0KGkuZSkodC5zcGxpdCgiLCIpKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSlyW2EudmFsdWVdPSEwfWNhdGNoKHQpe2U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihuPW8ucmV0dXJuKSYmbi5jYWxsKG8pfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gcn1mdW5jdGlvbiBhbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbixyLG89e307dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKSh0KSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtmb3IodmFyIGMgaW4gdSl1Lmhhc093blByb3BlcnR5KGMpJiYob1tjXT0hMCl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb312YXIgc24sdW49b24oImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxjbj1vbigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLGxuPW9uKCJycCxydCIpLGZuPWFuKGxuLGNuKSxobj1hbih1bixhbihjbixvbigiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksYW4obG4sb24oImEsYWJicixhY3JvbnltLGF1ZGlvLGIsYmRpLGJkbyxiaWcsYnIsY2l0ZSxjb2RlLGRlbCxkZm4sZW0sZm9udCxpLGltZyxpbnMsa2JkLGxhYmVsLG1hcCxtYXJrLHBpY3R1cmUscSxydWJ5LHJwLHJ0LHMsc2FtcCxzbWFsbCxzb3VyY2Usc3BhbixzdHJpa2Usc3Ryb25nLHN1YixzdXAsdGltZSx0cmFjayx0dCx1LHZhcix2aWRlbyIpKSxmbiksZG49b24oImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6aHJlZiIpLHBuPW9uKCJzcmNzZXQiKSxtbj1hbihkbixwbixvbigiYWJicixhY2Nlc3NrZXksYWxpZ24sYWx0LGF1dG9wbGF5LGF4aXMsYmdjb2xvcixib3JkZXIsY2VsbHBhZGRpbmcsY2VsbHNwYWNpbmcsY2xhc3MsY2xlYXIsY29sb3IsY29scyxjb2xzcGFuLGNvbXBhY3QsY29udHJvbHMsY29vcmRzLGRhdGV0aW1lLGRlZmF1bHQsZGlyLGRvd25sb2FkLGZhY2UsaGVhZGVycyxoZWlnaHQsaGlkZGVuLGhyZWZsYW5nLGhzcGFjZSxpc21hcCxpdGVtc2NvcGUsaXRlbXByb3Asa2luZCxsYWJlbCxsYW5nLGxhbmd1YWdlLGxvb3AsbWVkaWEsbXV0ZWQsbm9ocmVmLG5vd3JhcCxvcGVuLHByZWxvYWQscmVsLHJldixyb2xlLHJvd3Mscm93c3BhbixydWxlcyxzY29wZSxzY3JvbGxpbmcsc2hhcGUsc2l6ZSxzaXplcyxzcGFuLHNyY2xhbmcsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSkseW49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119cmV0dXJuIHQucHJvdG90eXBlLnNhbml0aXplQ2hpbGRyZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZmlyc3RDaGlsZDtlOylpZihlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/dGhpcy5zdGFydEVsZW1lbnQoZSk6ZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoZS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGUuZmlyc3RDaGlsZCllPWUuZmlyc3RDaGlsZDtlbHNlIGZvcig7ZTspe2Uubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGUpO3ZhciBuPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5uZXh0U2libGluZyk7aWYobil7ZT1uO2JyZWFrfWU9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoZSxlLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX0sdC5wcm90b3R5cGUuc3RhcnRFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihobi5oYXNPd25Qcm9wZXJ0eShlKSl7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7Zm9yKHZhciBuLGk9dC5hdHRyaWJ1dGVzLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aS5pdGVtKHIpLGE9by5uYW1lLHM9YS50b0xvd2VyQ2FzZSgpO2lmKG1uLmhhc093blByb3BlcnR5KHMpKXt2YXIgdT1vLnZhbHVlO2RuW3NdJiYodT1ybih1KSkscG5bc10mJihuPXUsdT0obj1TdHJpbmcobikpLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBybih0LnRyaW0oKSl9KS5qb2luKCIsICIpKSx0aGlzLmJ1Zi5wdXNoKCIgIixhLCc9IicsYm4odSksJyInKX1lbHNlIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwfXRoaXMuYnVmLnB1c2goIj4iKX1lbHNlIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwfSx0LnByb3RvdHlwZS5lbmRFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtobi5oYXNPd25Qcm9wZXJ0eShlKSYmIXVuLmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9LHQucHJvdG90eXBlLmNoYXJzPWZ1bmN0aW9uKHQpe3RoaXMuYnVmLnB1c2goYm4odCkpfSx0LnByb3RvdHlwZS5jaGVja0Nsb2JiZXJlZEVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZihlJiYodC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSk9PT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAiK3Qub3V0ZXJIVE1MKTtyZXR1cm4gZX0sdH0oKSx2bj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csZ249LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIGJuKHQpe3JldHVybiB0LnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKHZuLGZ1bmN0aW9uKHQpe3JldHVybiImIyIrKDEwMjQqKHQuY2hhckNvZGVBdCgwKS01NTI5NikrKHQuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoZ24sZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gX24odCxlKXt2YXIgbj1udWxsO3RyeXtzbj1zbnx8bmV3IHRuKHQpO3ZhciBpPWU/U3RyaW5nKGUpOiIiO249c24uZ2V0SW5lcnRCb2R5RWxlbWVudChpKTt2YXIgcj01LG89aTtkb3tpZigwPT09cil0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7ci0tLGk9byxvPW4uaW5uZXJIVE1MLG49c24uZ2V0SW5lcnRCb2R5RWxlbWVudChpKX13aGlsZShpIT09byk7dmFyIGE9bmV3IHluLHM9YS5zYW5pdGl6ZUNoaWxkcmVuKHduKG4pfHxuKTtyZXR1cm4gdGUoKSYmYS5zYW5pdGl6ZWRTb21ldGhpbmcmJmNvbnNvbGUud2FybigiV0FSTklORzogc2FuaXRpemluZyBIVE1MIHN0cmlwcGVkIHNvbWUgY29udGVudCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykuIiksc31maW5hbGx5e2lmKG4pZm9yKHZhciB1PXduKG4pfHxuO3UuZmlyc3RDaGlsZDspdS5yZW1vdmVDaGlsZCh1LmZpcnN0Q2hpbGQpfX1mdW5jdGlvbiB3bih0KXtyZXR1cm4iY29udGVudCJpbiB0JiZmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0odCk/dC5jb250ZW50Om51bGx9dmFyIHhuPW5ldyBSZWdFeHAoIl4oWy0sLlwiJyVfISMgYS16QS1aMC05XSt8KD86KD86bWF0cml4fHRyYW5zbGF0ZXxzY2FsZXxyb3RhdGV8c2tld3xwZXJzcGVjdGl2ZSkoPzpYfFl8M2QpP3woPzpyZ2J8aHNsKWE/fCg/OnJlcGVhdGluZy0pPyg/OmxpbmVhcnxyYWRpYWwpLWdyYWRpZW50fCg/OmNhbGN8YXR0cikpXFwoWy0wLTkuJSwgI2EtekEtWl0rXFwpKSQiLCJnIiksU249L151cmxcKChbXildKylcKSQvO2Z1bmN0aW9uIEVuKHQpe2lmKCEodD1TdHJpbmcodCkudHJpbSgpKSlyZXR1cm4iIjt2YXIgZT10Lm1hdGNoKFNuKTtyZXR1cm4gZSYmcm4oZVsxXSk9PT1lWzFdfHx0Lm1hdGNoKHhuKSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPSEwLG49ITAsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgcj10LmNoYXJBdChpKTsiJyI9PT1yJiZuP2U9IWU6JyInPT09ciYmZSYmKG49IW4pfXJldHVybiBlJiZufSh0KT90Oih0ZSgpJiZjb25zb2xlLndhcm4oIldBUk5JTkc6IHNhbml0aXppbmcgdW5zYWZlIHN0eWxlIHZhbHVlICIrdCsiIChzZWUgaHR0cDovL2cuY28vbmcvc2VjdXJpdHkjeHNzKS4iKSwidW5zYWZlIil9dmFyIENuPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuTk9ORT0wXT0iTk9ORSIsdFt0LkhUTUw9MV09IkhUTUwiLHRbdC5TVFlMRT0yXT0iU1RZTEUiLHRbdC5TQ1JJUFQ9M109IlNDUklQVCIsdFt0LlVSTD00XT0iVVJMIix0W3QuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLHR9KHt9KSxPbj1mdW5jdGlvbigpe307ZnVuY3Rpb24gVG4odCxlLG4pe3ZhciBpPXQuc3RhdGUscj0xNzkyJmk7cmV0dXJuIHI9PT1lPyh0LnN0YXRlPS0xNzkzJml8bix0LmluaXRJbmRleD0tMSwhMCk6cj09PW59ZnVuY3Rpb24ga24odCxlLG4pe3JldHVybigxNzkyJnQuc3RhdGUpPT09ZSYmdC5pbml0SW5kZXg8PW4mJih0LmluaXRJbmRleD1uKzEsITApfWZ1bmN0aW9uIEFuKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gSW4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX1mdW5jdGlvbiBqbih0LGUpe3JldHVybiB0Lm5vZGVzW2VdfWZ1bmN0aW9uIE1uKHQsZSl7cmV0dXJuIHQubm9kZXNbZV19ZnVuY3Rpb24gUG4odCxlKXtyZXR1cm4gdC5ub2Rlc1tlXX12YXIgTm49e3NldEN1cnJlbnROb2RlOnZvaWQgMCxjcmVhdGVSb290Vmlldzp2b2lkIDAsY3JlYXRlRW1iZWRkZWRWaWV3OnZvaWQgMCxjcmVhdGVDb21wb25lbnRWaWV3OnZvaWQgMCxjcmVhdGVOZ01vZHVsZVJlZjp2b2lkIDAsb3ZlcnJpZGVQcm92aWRlcjp2b2lkIDAsb3ZlcnJpZGVDb21wb25lbnRWaWV3OnZvaWQgMCxjbGVhck92ZXJyaWRlczp2b2lkIDAsY2hlY2tBbmRVcGRhdGVWaWV3OnZvaWQgMCxjaGVja05vQ2hhbmdlc1ZpZXc6dm9pZCAwLGRlc3Ryb3lWaWV3OnZvaWQgMCxyZXNvbHZlRGVwOnZvaWQgMCxjcmVhdGVEZWJ1Z0NvbnRleHQ6dm9pZCAwLGhhbmRsZUV2ZW50OnZvaWQgMCx1cGRhdGVEaXJlY3RpdmVzOnZvaWQgMCx1cGRhdGVSZW5kZXJlcjp2b2lkIDAsZGlydHlQYXJlbnRRdWVyaWVzOnZvaWQgMH07ZnVuY3Rpb24gUm4odCxlLG4saSl7dmFyIHI9IkV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3I6IEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWQuIFByZXZpb3VzIHZhbHVlOiAnIitlKyInLiBDdXJyZW50IHZhbHVlOiAnIituKyInLiI7cmV0dXJuIGkmJihyKz0iIEl0IHNlZW1zIGxpa2UgdGhlIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCBhZnRlciBpdHMgcGFyZW50IGFuZCBpdHMgY2hpbGRyZW4gaGF2ZSBiZWVuIGRpcnR5IGNoZWNrZWQuIEhhcyBpdCBiZWVuIGNyZWF0ZWQgaW4gYSBjaGFuZ2UgZGV0ZWN0aW9uIGhvb2sgPyIpLGZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IEVycm9yKHQpO3JldHVybiBEbihuLGUpLG59KHIsdCl9ZnVuY3Rpb24gRG4odCxlKXt0W3R0XT1lLHRbbnRdPWUubG9nRXJyb3IuYmluZChlKX1mdW5jdGlvbiBMbih0KXtyZXR1cm4gbmV3IEVycm9yKCJWaWV3RGVzdHJveWVkRXJyb3I6IEF0dGVtcHQgdG8gdXNlIGEgZGVzdHJveWVkIHZpZXc6ICIrdCl9dmFyIEZuPWZ1bmN0aW9uKCl7fSx6bj1uZXcgTWFwO2Z1bmN0aW9uIFZuKHQpe3ZhciBlPXpuLmdldCh0KTtyZXR1cm4gZXx8KGU9Uyh0KSsiXyIrem4uc2l6ZSx6bi5zZXQodCxlKSksZX1mdW5jdGlvbiBCbih0LGUsbixpKXtpZihBZS5pc1dyYXBwZWQoaSkpe2k9QWUudW53cmFwKGkpO3ZhciByPXQuZGVmLm5vZGVzW2VdLmJpbmRpbmdJbmRleCtuLG89QWUudW53cmFwKHQub2xkVmFsdWVzW3JdKTt0Lm9sZFZhbHVlc1tyXT1uZXcgQWUobyl9cmV0dXJuIGl9dmFyIFVuPSIkJHVuZGVmaW5lZCIsSG49IiQkZW1wdHkiO2Z1bmN0aW9uIHFuKHQpe3JldHVybntpZDpVbixzdHlsZXM6dC5zdHlsZXMsZW5jYXBzdWxhdGlvbjp0LmVuY2Fwc3VsYXRpb24sZGF0YTp0LmRhdGF9fXZhciBHbj0wO2Z1bmN0aW9uIFduKHQsZSxuLGkpe3JldHVybiEoISgyJnQuc3RhdGUpJiZ4KHQub2xkVmFsdWVzW2UuYmluZGluZ0luZGV4K25dLGkpKX1mdW5jdGlvbiBZbih0LGUsbixpKXtyZXR1cm4hIVduKHQsZSxuLGkpJiYodC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl09aSwhMCl9ZnVuY3Rpb24gUW4odCxlLG4saSl7dmFyIHI9dC5vbGRWYWx1ZXNbZS5iaW5kaW5nSW5kZXgrbl07aWYoMSZ0LnN0YXRlfHwha2UocixpKSl7dmFyIG89ZS5iaW5kaW5nc1tuXS5uYW1lO3Rocm93IFJuKE5uLmNyZWF0ZURlYnVnQ29udGV4dCh0LGUubm9kZUluZGV4KSxvKyI6ICIrcixvKyI6ICIraSwwIT0oMSZ0LnN0YXRlKSl9fWZ1bmN0aW9uIFpuKHQpe2Zvcih2YXIgZT10O2U7KTImZS5kZWYuZmxhZ3MmJihlLnN0YXRlfD04KSxlPWUudmlld0NvbnRhaW5lclBhcmVudHx8ZS5wYXJlbnR9ZnVuY3Rpb24gS24odCxlKXtmb3IodmFyIG49dDtuJiZuIT09ZTspbi5zdGF0ZXw9NjQsbj1uLnZpZXdDb250YWluZXJQYXJlbnR8fG4ucGFyZW50fWZ1bmN0aW9uIFhuKHQsZSxuLGkpe3RyeXtyZXR1cm4gWm4oMzM1NTQ0MzImdC5kZWYubm9kZXNbZV0uZmxhZ3M/SW4odCxlKS5jb21wb25lbnRWaWV3OnQpLE5uLmhhbmRsZUV2ZW50KHQsZSxuLGkpfWNhdGNoKGUpe3Qucm9vdC5lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZSl9fWZ1bmN0aW9uICRuKHQpe3JldHVybiB0LnBhcmVudD9Jbih0LnBhcmVudCx0LnBhcmVudE5vZGVEZWYubm9kZUluZGV4KTpudWxsfWZ1bmN0aW9uIEpuKHQpe3JldHVybiB0LnBhcmVudD90LnBhcmVudE5vZGVEZWYucGFyZW50Om51bGx9ZnVuY3Rpb24gdGkodCxlKXtzd2l0Y2goMjAxMzQ3MDY3JmUuZmxhZ3Mpe2Nhc2UgMTpyZXR1cm4gSW4odCxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDtjYXNlIDI6cmV0dXJuIEFuKHQsZS5ub2RlSW5kZXgpLnJlbmRlclRleHR9fWZ1bmN0aW9uIGVpKHQpe3JldHVybiEhdC5wYXJlbnQmJiEhKDMyNzY4JnQucGFyZW50Tm9kZURlZi5mbGFncyl9ZnVuY3Rpb24gbmkodCl7cmV0dXJuISghdC5wYXJlbnR8fDMyNzY4JnQucGFyZW50Tm9kZURlZi5mbGFncyl9ZnVuY3Rpb24gaWkodCl7cmV0dXJuIDE8PHQlMzJ9ZnVuY3Rpb24gcmkodCl7dmFyIGU9e30sbj0wLHI9e307cmV0dXJuIHQmJnQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1PYmplY3QoaS5jKSh0LDIpLGE9b1swXSxzPW9bMV07Im51bWJlciI9PXR5cGVvZiBhPyhlW2FdPXMsbnw9aWkoYSkpOnJbYV09c30pLHttYXRjaGVkUXVlcmllczplLHJlZmVyZW5jZXM6cixtYXRjaGVkUXVlcnlJZHM6bn19ZnVuY3Rpb24gb2kodCxlKXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIG4scixvO3JldHVybiBBcnJheS5pc0FycmF5KHQpPyhyPShvPU9iamVjdChpLmMpKHQsMikpWzBdLG49b1sxXSk6KHI9MCxuPXQpLG4mJigiZnVuY3Rpb24iPT10eXBlb2Ygbnx8Im9iamVjdCI9PXR5cGVvZiBuKSYmZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sSSx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSx7ZmxhZ3M6cix0b2tlbjpuLHRva2VuS2V5OlZuKG4pfX0pfWZ1bmN0aW9uIGFpKHQsZSxuKXt2YXIgaT1uLnJlbmRlclBhcmVudDtyZXR1cm4gaT8wPT0oMSZpLmZsYWdzKXx8MD09KDMzNTU0NDMyJmkuZmxhZ3MpfHxpLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlJiZpLmVsZW1lbnQuY29tcG9uZW50UmVuZGVyZXJUeXBlLmVuY2Fwc3VsYXRpb249PT1YLk5hdGl2ZT9Jbih0LG4ucmVuZGVyUGFyZW50Lm5vZGVJbmRleCkucmVuZGVyRWxlbWVudDp2b2lkIDA6ZX12YXIgc2k9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdWkodCl7dmFyIGU9c2kuZ2V0KHQpO3JldHVybiBlfHwoKGU9dChmdW5jdGlvbigpe3JldHVybiBGbn0pKS5mYWN0b3J5PXQsc2kuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gY2kodCxlLG4saSxyKXszPT09ZSYmKG49dC5yZW5kZXJlci5wYXJlbnROb2RlKHRpKHQsdC5kZWYubGFzdFJlbmRlclJvb3ROb2RlKSkpLGxpKHQsZSwwLHQuZGVmLm5vZGVzLmxlbmd0aC0xLG4saSxyKX1mdW5jdGlvbiBsaSh0LGUsbixpLHIsbyxhKXtmb3IodmFyIHM9bjtzPD1pO3MrKyl7dmFyIHU9dC5kZWYubm9kZXNbc107MTEmdS5mbGFncyYmaGkodCx1LGUscixvLGEpLHMrPXUuY2hpbGRDb3VudH19ZnVuY3Rpb24gZmkodCxlLG4saSxyLG8pe2Zvcih2YXIgYT10O2EmJiFlaShhKTspYT1hLnBhcmVudDtmb3IodmFyIHM9YS5wYXJlbnQsdT1KbihhKSxjPXUubm9kZUluZGV4K3UuY2hpbGRDb3VudCxsPXUubm9kZUluZGV4KzE7bDw9YztsKyspe3ZhciBmPXMuZGVmLm5vZGVzW2xdO2YubmdDb250ZW50SW5kZXg9PT1lJiZoaShzLGYsbixpLHIsbyksbCs9Zi5jaGlsZENvdW50fWlmKCFzLnBhcmVudCl7dmFyIGg9dC5yb290LnByb2plY3RhYmxlTm9kZXNbZV07aWYoaClmb3IobD0wO2w8aC5sZW5ndGg7bCsrKWRpKHQsaFtsXSxuLGkscixvKX19ZnVuY3Rpb24gaGkodCxlLG4saSxyLG8pe2lmKDgmZS5mbGFncylmaSh0LGUubmdDb250ZW50LmluZGV4LG4saSxyLG8pO2Vsc2V7dmFyIGE9dGkodCxlKTtpZigzPT09biYmMzM1NTQ0MzImZS5mbGFncyYmNDgmZS5iaW5kaW5nRmxhZ3M/KDE2JmUuYmluZGluZ0ZsYWdzJiZkaSh0LGEsbixpLHIsbyksMzImZS5iaW5kaW5nRmxhZ3MmJmRpKEluKHQsZS5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXcsYSxuLGkscixvKSk6ZGkodCxhLG4saSxyLG8pLDE2Nzc3MjE2JmUuZmxhZ3MpZm9yKHZhciBzPUluKHQsZS5ub2RlSW5kZXgpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MsdT0wO3U8cy5sZW5ndGg7dSsrKWNpKHNbdV0sbixpLHIsbyk7MSZlLmZsYWdzJiYhZS5lbGVtZW50Lm5hbWUmJmxpKHQsbixlLm5vZGVJbmRleCsxLGUubm9kZUluZGV4K2UuY2hpbGRDb3VudCxpLHIsbyl9fWZ1bmN0aW9uIGRpKHQsZSxuLGkscixvKXt2YXIgYT10LnJlbmRlcmVyO3N3aXRjaChuKXtjYXNlIDE6YS5hcHBlbmRDaGlsZChpLGUpO2JyZWFrO2Nhc2UgMjphLmluc2VydEJlZm9yZShpLGUscik7YnJlYWs7Y2FzZSAzOmEucmVtb3ZlQ2hpbGQoaSxlKTticmVhaztjYXNlIDA6by5wdXNoKGUpfX12YXIgcGk9L146KFteOl0rKTooLispJC87ZnVuY3Rpb24gbWkodCl7aWYoIjoiPT09dFswXSl7dmFyIGU9dC5tYXRjaChwaSk7cmV0dXJuW2VbMV0sZVsyXV19cmV0dXJuWyIiLHRdfWZ1bmN0aW9uIHlpKHQpe2Zvcih2YXIgZT0wLG49MDtuPHQubGVuZ3RoO24rKyllfD10W25dLmZsYWdzO3JldHVybiBlfWZ1bmN0aW9uIHZpKHQsZSxuLGkscixvLGEscyx1LGMsbCxmLGgsZCxwLG0seSx2LGcsYil7c3dpdGNoKHQpe2Nhc2UgMTpyZXR1cm4gZStnaShuKStpO2Nhc2UgMjpyZXR1cm4gZStnaShuKStpK2dpKHIpK287Y2FzZSAzOnJldHVybiBlK2dpKG4pK2krZ2kocikrbytnaShhKStzO2Nhc2UgNDpyZXR1cm4gZStnaShuKStpK2dpKHIpK28rZ2koYSkrcytnaSh1KStjO2Nhc2UgNTpyZXR1cm4gZStnaShuKStpK2dpKHIpK28rZ2koYSkrcytnaSh1KStjK2dpKGwpK2Y7Y2FzZSA2OnJldHVybiBlK2dpKG4pK2krZ2kocikrbytnaShhKStzK2dpKHUpK2MrZ2kobCkrZitnaShoKStkO2Nhc2UgNzpyZXR1cm4gZStnaShuKStpK2dpKHIpK28rZ2koYSkrcytnaSh1KStjK2dpKGwpK2YrZ2koaCkrZCtnaShwKSttO2Nhc2UgODpyZXR1cm4gZStnaShuKStpK2dpKHIpK28rZ2koYSkrcytnaSh1KStjK2dpKGwpK2YrZ2koaCkrZCtnaShwKSttK2dpKHkpK3Y7Y2FzZSA5OnJldHVybiBlK2dpKG4pK2krZ2kocikrbytnaShhKStzK2dpKHUpK2MrZ2kobCkrZitnaShoKStkK2dpKHApK20rZ2koeSkrditnaShnKStiO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiA5IGV4cHJlc3Npb25zIil9fWZ1bmN0aW9uIGdpKHQpe3JldHVybiBudWxsIT10P3QudG9TdHJpbmcoKToiIn1mdW5jdGlvbiBiaSh0LGUsbixpLHIsbyl7dHw9MTt2YXIgYT1yaShlKTtyZXR1cm57bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxmbGFnczp0LGNoZWNrSW5kZXg6LTEsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6YS5tYXRjaGVkUXVlcmllcyxtYXRjaGVkUXVlcnlJZHM6YS5tYXRjaGVkUXVlcnlJZHMscmVmZXJlbmNlczphLnJlZmVyZW5jZXMsbmdDb250ZW50SW5kZXg6bixjaGlsZENvdW50OmksYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50OntuczpudWxsLG5hbWU6bnVsbCxhdHRyczpudWxsLHRlbXBsYXRlOm8/dWkobyk6bnVsbCxjb21wb25lbnRQcm92aWRlcjpudWxsLGNvbXBvbmVudFZpZXc6bnVsbCxjb21wb25lbnRSZW5kZXJlclR5cGU6bnVsbCxwdWJsaWNQcm92aWRlcnM6bnVsbCxhbGxQcm92aWRlcnM6bnVsbCxoYW5kbGVFdmVudDpyfHxGbn0scHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gX2kodCxlLG4scixvLGEscyx1LGMsbCxmLGgpe3ZvaWQgMD09PXMmJihzPVtdKSxsfHwobD1Gbik7dmFyIGQ9cmkobikscD1kLm1hdGNoZWRRdWVyaWVzLG09ZC5yZWZlcmVuY2VzLHk9ZC5tYXRjaGVkUXVlcnlJZHMsdj1udWxsLGc9bnVsbDthJiYodj0oTT1PYmplY3QoaS5jKShtaShhKSwyKSlbMF0sZz1NWzFdKSx1PXV8fFtdO2Zvcih2YXIgYj1uZXcgQXJyYXkodS5sZW5ndGgpLF89MDtfPHUubGVuZ3RoO18rKyl7dmFyIHc9T2JqZWN0KGkuYykodVtfXSwzKSx4PXdbMF0sUz13WzFdLEU9d1syXSxDPU9iamVjdChpLmMpKG1pKFMpLDIpLE89Q1swXSxUPUNbMV0saz12b2lkIDAsQT12b2lkIDA7c3dpdGNoKDE1Jngpe2Nhc2UgNDpBPUU7YnJlYWs7Y2FzZSAxOmNhc2UgODprPUV9YltfXT17ZmxhZ3M6eCxuczpPLG5hbWU6VCxub25NaW5pZmllZE5hbWU6VCxzZWN1cml0eUNvbnRleHQ6ayxzdWZmaXg6QX19Yz1jfHxbXTt2YXIgST1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihfPTA7XzxjLmxlbmd0aDtfKyspe3ZhciBqPU9iamVjdChpLmMpKGNbX10sMik7SVtfXT17dHlwZTowLHRhcmdldDpqWzBdLGV2ZW50TmFtZTpqWzFdLHByb3BOYW1lOm51bGx9fXZhciBNLFA9KHM9c3x8W10pLm1hcChmdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaS5jKSh0LDIpLG49ZVswXSxyPWVbMV0sbz1PYmplY3QoaS5jKShtaShuKSwyKTtyZXR1cm5bb1swXSxvWzFdLHJdfSk7cmV0dXJuIGg9ZnVuY3Rpb24odCl7aWYodCYmdC5pZD09PVVuKXt2YXIgZT1udWxsIT10LmVuY2Fwc3VsYXRpb24mJnQuZW5jYXBzdWxhdGlvbiE9PVguTm9uZXx8dC5zdHlsZXMubGVuZ3RofHxPYmplY3Qua2V5cyh0LmRhdGEpLmxlbmd0aDt0LmlkPWU/ImMiK0duKys6SG59cmV0dXJuIHQmJnQuaWQ9PT1IbiYmKHQ9bnVsbCksdHx8bnVsbH0oaCksZiYmKGV8PTMzNTU0NDMyKSx7bm9kZUluZGV4Oi0xLHBhcmVudDpudWxsLHJlbmRlclBhcmVudDpudWxsLGJpbmRpbmdJbmRleDotMSxvdXRwdXRJbmRleDotMSxjaGVja0luZGV4OnQsZmxhZ3M6ZXw9MSxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxtYXRjaGVkUXVlcmllczpwLG1hdGNoZWRRdWVyeUlkczp5LHJlZmVyZW5jZXM6bSxuZ0NvbnRlbnRJbmRleDpyLGNoaWxkQ291bnQ6byxiaW5kaW5nczpiLGJpbmRpbmdGbGFnczp5aShiKSxvdXRwdXRzOkksZWxlbWVudDp7bnM6dixuYW1lOmcsYXR0cnM6UCx0ZW1wbGF0ZTpudWxsLGNvbXBvbmVudFByb3ZpZGVyOm51bGwsY29tcG9uZW50VmlldzpmfHxudWxsLGNvbXBvbmVudFJlbmRlcmVyVHlwZTpoLHB1YmxpY1Byb3ZpZGVyczpudWxsLGFsbFByb3ZpZGVyczpudWxsLGhhbmRsZUV2ZW50Omx8fEZufSxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiB3aSh0LGUsbil7dmFyIHIsbz1uLmVsZW1lbnQsYT10LnJvb3Quc2VsZWN0b3JPck5vZGUscz10LnJlbmRlcmVyO2lmKHQucGFyZW50fHwhYSl7cj1vLm5hbWU/cy5jcmVhdGVFbGVtZW50KG8ubmFtZSxvLm5zKTpzLmNyZWF0ZUNvbW1lbnQoIiIpO3ZhciB1PWFpKHQsZSxuKTt1JiZzLmFwcGVuZENoaWxkKHUscil9ZWxzZSByPXMuc2VsZWN0Um9vdEVsZW1lbnQoYSk7aWYoby5hdHRycylmb3IodmFyIGM9MDtjPG8uYXR0cnMubGVuZ3RoO2MrKyl7dmFyIGw9T2JqZWN0KGkuYykoby5hdHRyc1tjXSwzKTtzLnNldEF0dHJpYnV0ZShyLGxbMV0sbFsyXSxsWzBdKX1yZXR1cm4gcn1mdW5jdGlvbiB4aSh0LGUsbixpKXtmb3IodmFyIHI9MDtyPG4ub3V0cHV0cy5sZW5ndGg7cisrKXt2YXIgbz1uLm91dHB1dHNbcl0sYT1TaSh0LG4ubm9kZUluZGV4LChmPW8uZXZlbnROYW1lLChsPW8udGFyZ2V0KT9sKyI6IitmOmYpKSxzPW8udGFyZ2V0LHU9dDsiY29tcG9uZW50Ij09PW8udGFyZ2V0JiYocz1udWxsLHU9ZSk7dmFyIGM9dS5yZW5kZXJlci5saXN0ZW4oc3x8aSxvLmV2ZW50TmFtZSxhKTt0LmRpc3Bvc2FibGVzW24ub3V0cHV0SW5kZXgrcl09Y312YXIgbCxmfWZ1bmN0aW9uIFNpKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIFhuKHQsZSxuLGkpfX1mdW5jdGlvbiBFaSh0LGUsbixpKXtpZighWW4odCxlLG4saSkpcmV0dXJuITE7dmFyIHI9ZS5iaW5kaW5nc1tuXSxvPUluKHQsZS5ub2RlSW5kZXgpLGE9by5yZW5kZXJFbGVtZW50LHM9ci5uYW1lO3N3aXRjaCgxNSZyLmZsYWdzKXtjYXNlIDE6IWZ1bmN0aW9uKHQsZSxuLGkscixvKXt2YXIgYT1lLnNlY3VyaXR5Q29udGV4dCxzPWE/dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShhLG8pOm87cz1udWxsIT1zP3MudG9TdHJpbmcoKTpudWxsO3ZhciB1PXQucmVuZGVyZXI7bnVsbCE9bz91LnNldEF0dHJpYnV0ZShuLHIscyxpKTp1LnJlbW92ZUF0dHJpYnV0ZShuLHIsaSl9KHQscixhLHIubnMscyxpKTticmVhaztjYXNlIDI6IWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXQucmVuZGVyZXI7aT9yLmFkZENsYXNzKGUsbik6ci5yZW1vdmVDbGFzcyhlLG4pfSh0LGEscyxpKTticmVhaztjYXNlIDQ6IWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dC5yb290LnNhbml0aXplci5zYW5pdGl6ZShDbi5TVFlMRSxyKTtpZihudWxsIT1vKXtvPW8udG9TdHJpbmcoKTt2YXIgYT1lLnN1ZmZpeDtudWxsIT1hJiYobys9YSl9ZWxzZSBvPW51bGw7dmFyIHM9dC5yZW5kZXJlcjtudWxsIT1vP3Muc2V0U3R5bGUobixpLG8pOnMucmVtb3ZlU3R5bGUobixpKX0odCxyLGEscyxpKTticmVhaztjYXNlIDg6IWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89ZS5zZWN1cml0eUNvbnRleHQsYT1vP3Qucm9vdC5zYW5pdGl6ZXIuc2FuaXRpemUobyxyKTpyO3QucmVuZGVyZXIuc2V0UHJvcGVydHkobixpLGEpfSgzMzU1NDQzMiZlLmZsYWdzJiYzMiZyLmZsYWdzP28uY29tcG9uZW50Vmlldzp0LHIsYSxzLGkpfXJldHVybiEwfXZhciBDaT1uZXcgT2JqZWN0LE9pPVZuKE4pLFRpPVZuKE0pLGtpPVZuKGp0KTtmdW5jdGlvbiBBaSh0LGUsbixpKXtyZXR1cm4gbj1DKG4pLHtpbmRleDotMSxkZXBzOm9pKGksUyhlKSksZmxhZ3M6dCx0b2tlbjplLHZhbHVlOm59fWZ1bmN0aW9uIElpKHQpe2Zvcih2YXIgZT17fSxuPVtdLGk9ITEscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdO28udG9rZW49PT1zdCYmKGk9ITApLDEwNzM3NDE4MjQmby5mbGFncyYmbi5wdXNoKG8udG9rZW4pLG8uaW5kZXg9cixlW1ZuKG8udG9rZW4pXT1vfXJldHVybntmYWN0b3J5Om51bGwscHJvdmlkZXJzQnlLZXk6ZSxwcm92aWRlcnM6dCxtb2R1bGVzOm4saXNSb290Oml9fWZ1bmN0aW9uIGppKHQsZSxuKXt2b2lkIDA9PT1uJiYobj1OLlRIUk9XX0lGX05PVF9GT1VORCk7dmFyIGkscixvPVoodCk7dHJ5e2lmKDgmZS5mbGFncylyZXR1cm4gZS50b2tlbjtpZigyJmUuZmxhZ3MmJihuPW51bGwpLDEmZS5mbGFncylyZXR1cm4gdC5fcGFyZW50LmdldChlLnRva2VuLG4pO3ZhciBhPWUudG9rZW5LZXk7c3dpdGNoKGEpe2Nhc2UgT2k6Y2FzZSBUaTpjYXNlIGtpOnJldHVybiB0fXZhciBzPXQuX2RlZi5wcm92aWRlcnNCeUtleVthXTtpZihzKXt2YXIgdT10Ll9wcm92aWRlcnNbcy5pbmRleF07cmV0dXJuIHZvaWQgMD09PXUmJih1PXQuX3Byb3ZpZGVyc1tzLmluZGV4XT1NaSh0LHMpKSx1PT09Q2k/dm9pZCAwOnV9aWYoZS50b2tlbi5uZ0luamVjdGFibGVEZWYmJihpPXQsbnVsbCE9KHI9ZS50b2tlbi5uZ0luamVjdGFibGVEZWYpLnByb3ZpZGVkSW4mJihmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9kZWYubW9kdWxlcy5pbmRleE9mKHIucHJvdmlkZWRJbik+LTF9KGkpfHwicm9vdCI9PT1yLnByb3ZpZGVkSW4mJmkuX2RlZi5pc1Jvb3QpKSl7dmFyIGM9dC5fcHJvdmlkZXJzLmxlbmd0aDtyZXR1cm4gdC5fZGVmLnByb3ZpZGVyc0J5S2V5W2UudG9rZW5LZXldPXtmbGFnczo1MTIwLHZhbHVlOmUudG9rZW4ubmdJbmplY3RhYmxlRGVmLmZhY3RvcnksZGVwczpbXSxpbmRleDpjLHRva2VuOmUudG9rZW59LHQuX3Byb3ZpZGVyc1tjXT1DaSx0Ll9wcm92aWRlcnNbY109TWkodCx0Ll9kZWYucHJvdmlkZXJzQnlLZXlbZS50b2tlbktleV0pfXJldHVybiA0JmUuZmxhZ3M/bjp0Ll9wYXJlbnQuZ2V0KGUudG9rZW4sbil9ZmluYWxseXtaKG8pfX1mdW5jdGlvbiBNaSh0LGUpe3ZhciBuO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSA1MTI6bj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5sZW5ndGg7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZShqaSh0LG5bMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyBlKGppKHQsblswXSksamkodCxuWzFdKSk7Y2FzZSAzOnJldHVybiBuZXcgZShqaSh0LG5bMF0pLGppKHQsblsxXSksamkodCxuWzJdKSk7ZGVmYXVsdDpmb3IodmFyIG89bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKW9bYV09amkodCxuW2FdKTtyZXR1cm4gbmV3KGUuYmluZC5hcHBseShlLE9iamVjdChpLmQpKFt2b2lkIDBdLG8pKSl9fSh0LGUudmFsdWUsZS5kZXBzKTticmVhaztjYXNlIDEwMjQ6bj1mdW5jdGlvbih0LGUsbil7dmFyIHI9bi5sZW5ndGg7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gZSgpO2Nhc2UgMTpyZXR1cm4gZShqaSh0LG5bMF0pKTtjYXNlIDI6cmV0dXJuIGUoamkodCxuWzBdKSxqaSh0LG5bMV0pKTtjYXNlIDM6cmV0dXJuIGUoamkodCxuWzBdKSxqaSh0LG5bMV0pLGppKHQsblsyXSkpO2RlZmF1bHQ6Zm9yKHZhciBvPUFycmF5KHIpLGE9MDthPHI7YSsrKW9bYV09amkodCxuW2FdKTtyZXR1cm4gZS5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkobykpfX0odCxlLnZhbHVlLGUuZGVwcyk7YnJlYWs7Y2FzZSAyMDQ4Om49amkodCxlLmRlcHNbMF0pO2JyZWFrO2Nhc2UgMjU2Om49ZS52YWx1ZX1yZXR1cm4gbj09PUNpfHxudWxsPT1ufHwib2JqZWN0IiE9dHlwZW9mIG58fDEzMTA3MiZlLmZsYWdzfHwiZnVuY3Rpb24iIT10eXBlb2Ygbi5uZ09uRGVzdHJveXx8KGUuZmxhZ3N8PTEzMTA3Miksdm9pZCAwPT09bj9DaTpufWZ1bmN0aW9uIFBpKHQsZSl7dmFyIG49dC52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzO2lmKChudWxsPT1lfHxlPj1uLmxlbmd0aCkmJihlPW4ubGVuZ3RoLTEpLGU8MClyZXR1cm4gbnVsbDt2YXIgaT1uW2VdO3JldHVybiBpLnZpZXdDb250YWluZXJQYXJlbnQ9bnVsbCxMaShuLGUpLE5uLmRpcnR5UGFyZW50UXVlcmllcyhpKSxSaShpKSxpfWZ1bmN0aW9uIE5pKHQsZSxuKXt2YXIgaT1lP3RpKGUsZS5kZWYubGFzdFJlbmRlclJvb3ROb2RlKTp0LnJlbmRlckVsZW1lbnQ7Y2kobiwyLG4ucmVuZGVyZXIucGFyZW50Tm9kZShpKSxuLnJlbmRlcmVyLm5leHRTaWJsaW5nKGkpLHZvaWQgMCl9ZnVuY3Rpb24gUmkodCl7Y2kodCwzLG51bGwsbnVsbCx2b2lkIDApfWZ1bmN0aW9uIERpKHQsZSxuKXtlPj10Lmxlbmd0aD90LnB1c2gobik6dC5zcGxpY2UoZSwwLG4pfWZ1bmN0aW9uIExpKHQsZSl7ZT49dC5sZW5ndGgtMT90LnBvcCgpOnQuc3BsaWNlKGUsMSl9dmFyIEZpPW5ldyBPYmplY3Q7ZnVuY3Rpb24gemkodCxlLG4saSxyLG8pe3JldHVybiBuZXcgVmkodCxlLG4saSxyLG8pfXZhciBWaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhKXt2YXIgcz10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHMuc2VsZWN0b3I9ZSxzLmNvbXBvbmVudFR5cGU9bixzLl9pbnB1dHM9cixzLl9vdXRwdXRzPW8scy5uZ0NvbnRlbnRTZWxlY3RvcnM9YSxzLnZpZXdEZWZGYWN0b3J5PWksc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcy5faW5wdXRzO2Zvcih2YXIgbiBpbiBlKXQucHVzaCh7cHJvcE5hbWU6bix0ZW1wbGF0ZU5hbWU6ZVtuXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwib3V0cHV0cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9vdXRwdXRzKXQucHVzaCh7cHJvcE5hbWU6ZSx0ZW1wbGF0ZU5hbWU6dGhpcy5fb3V0cHV0c1tlXX0pO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUsbixpKXtpZighaSl0aHJvdyBuZXcgRXJyb3IoIm5nTW9kdWxlIHNob3VsZCBiZSBwcm92aWRlZCIpO3ZhciByPXVpKHRoaXMudmlld0RlZkZhY3RvcnkpLG89ci5ub2Rlc1swXS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLm5vZGVJbmRleCxhPU5uLmNyZWF0ZVJvb3RWaWV3KHQsZXx8W10sbixyLGksRmkpLHM9am4oYSxvKS5pbnN0YW5jZTtyZXR1cm4gbiYmYS5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoSW4oYSwwKS5yZW5kZXJFbGVtZW50LCJuZy12ZXJzaW9uIixKLmZ1bGwpLG5ldyBCaShhLG5ldyBHaShhKSxzKX0sZX0oeHQpLEJpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdmlldz1lLHIuX3ZpZXdSZWY9bixyLl9jb21wb25lbnQ9aSxyLl9lbERlZj1yLl92aWV3LmRlZi5ub2Rlc1swXSxyLmhvc3RWaWV3PW4sci5jaGFuZ2VEZXRlY3RvclJlZj1uLHIuaW5zdGFuY2U9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibG9jYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZlKEluKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImluamVjdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaaSh0aGlzLl92aWV3LHRoaXMuX2VsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImNvbXBvbmVudFR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50LmNvbnN0cnVjdG9yfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl92aWV3UmVmLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXdSZWYub25EZXN0cm95KHQpfSxlfShmdW5jdGlvbigpe30pO2Z1bmN0aW9uIFVpKHQsZSxuKXtyZXR1cm4gbmV3IEhpKHQsZSxuKX12YXIgSGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3PXQsdGhpcy5fZWxEZWY9ZSx0aGlzLl9kYXRhPW4sdGhpcy5fZW1iZWRkZWRWaWV3cz1bXX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJlbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmZSh0aGlzLl9kYXRhLnJlbmRlckVsZW1lbnQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFppKHRoaXMuX3ZpZXcsdGhpcy5fZWxEZWYpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50SW5qZWN0b3IiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmlldyxlPXRoaXMuX2VsRGVmLnBhcmVudDshZSYmdDspZT1Kbih0KSx0PXQucGFyZW50O3JldHVybiB0P25ldyBaaSh0LGUpOm5ldyBaaSh0aGlzLl92aWV3LG51bGwpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2VtYmVkZGVkVmlld3MubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBlPVBpKHRoaXMuX2RhdGEsdCk7Tm4uZGVzdHJveVZpZXcoZSl9fSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZW1iZWRkZWRWaWV3c1t0XTtpZihlKXt2YXIgbj1uZXcgR2koZSk7cmV0dXJuIG4uYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKHRoaXMpLG59cmV0dXJuIG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VtYmVkZGVkVmlld3MubGVuZ3RofSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30pO3JldHVybiB0aGlzLmluc2VydChpLG4pLGl9LHQucHJvdG90eXBlLmNyZWF0ZUNvbXBvbmVudD1mdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvPW58fHRoaXMucGFyZW50SW5qZWN0b3I7cnx8dCBpbnN0YW5jZW9mIEl0fHwocj1vLmdldChqdCkpO3ZhciBhPXQuY3JlYXRlKG8saSx2b2lkIDAscik7cmV0dXJuIHRoaXMuaW5zZXJ0KGEuaG9zdFZpZXcsZSksYX0sdC5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7aWYodC5kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW5zZXJ0IGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3ZhciBuLGkscixvLGE9dDtyZXR1cm4gcj1hLl92aWV3LG89KG49dGhpcy5fZGF0YSkudmlld0NvbnRhaW5lci5fZW1iZWRkZWRWaWV3cyxudWxsIT09KGk9ZSkmJnZvaWQgMCE9PWl8fChpPW8ubGVuZ3RoKSxyLnZpZXdDb250YWluZXJQYXJlbnQ9dGhpcy5fdmlldyxEaShvLGksciksZnVuY3Rpb24odCxlKXt2YXIgbj0kbihlKTtpZihuJiZuIT09dCYmISgxNiZlLnN0YXRlKSl7ZS5zdGF0ZXw9MTY7dmFyIGk9bi50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aXx8KGk9bi50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M9W10pLGkucHVzaChlKSxmdW5jdGlvbih0LG4pe2lmKCEoNCZuLmZsYWdzKSl7ZS5wYXJlbnQuZGVmLm5vZGVGbGFnc3w9NCxuLmZsYWdzfD00O2Zvcih2YXIgaT1uLnBhcmVudDtpOylpLmNoaWxkRmxhZ3N8PTQsaT1pLnBhcmVudH19KDAsZS5wYXJlbnROb2RlRGVmKX19KG4sciksTm4uZGlydHlQYXJlbnRRdWVyaWVzKHIpLE5pKG4saT4wP29baS0xXTpudWxsLHIpLGEuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKHRoaXMpLHR9LHQucHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24odCxlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBtb3ZlIGEgZGVzdHJveWVkIFZpZXcgaW4gYSBWaWV3Q29udGFpbmVyISIpO3ZhciBuLGkscixvLGEscz10aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmlldyk7cmV0dXJuIHI9ZSxhPShvPShuPXRoaXMuX2RhdGEpLnZpZXdDb250YWluZXIuX2VtYmVkZGVkVmlld3MpW2k9c10sTGkobyxpKSxudWxsPT1yJiYocj1vLmxlbmd0aCksRGkobyxyLGEpLE5uLmRpcnR5UGFyZW50UXVlcmllcyhhKSxSaShhKSxOaShuLHI+MD9vW3ItMV06bnVsbCxhKSx0fSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9lbWJlZGRlZFZpZXdzLmluZGV4T2YodC5fdmlldyl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT1QaSh0aGlzLl9kYXRhLHQpO2UmJk5uLmRlc3Ryb3lWaWV3KGUpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9UGkodGhpcy5fZGF0YSx0KTtyZXR1cm4gZT9uZXcgR2koZSk6bnVsbH0sdH0oKTtmdW5jdGlvbiBxaSh0KXtyZXR1cm4gbmV3IEdpKHQpfXZhciBHaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fdmlldz10LHRoaXMuX3ZpZXdDb250YWluZXJSZWY9bnVsbCx0aGlzLl9hcHBSZWY9bnVsbH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Tm9kZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2kodGhpcy5fdmlldywwLHZvaWQgMCx2b2lkIDAsdD1bXSksdDt2YXIgdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbnRleHQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmlldy5jb250ZXh0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgxMjgmdGhpcy5fdmlldy5zdGF0ZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubWFya0ZvckNoZWNrPWZ1bmN0aW9uKCl7Wm4odGhpcy5fdmlldyl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3ZpZXcuc3RhdGUmPS01fSx0LnByb3RvdHlwZS5kZXRlY3RDaGFuZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdmlldy5yb290LnJlbmRlcmVyRmFjdG9yeTt0LmJlZ2luJiZ0LmJlZ2luKCk7dHJ5e05uLmNoZWNrQW5kVXBkYXRlVmlldyh0aGlzLl92aWV3KX1maW5hbGx5e3QuZW5kJiZ0LmVuZCgpfX0sdC5wcm90b3R5cGUuY2hlY2tOb0NoYW5nZXM9ZnVuY3Rpb24oKXtObi5jaGVja05vQ2hhbmdlc1ZpZXcodGhpcy5fdmlldyl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5zdGF0ZXw9NH0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX3ZpZXcuZGlzcG9zYWJsZXN8fCh0aGlzLl92aWV3LmRpc3Bvc2FibGVzPVtdKSx0aGlzLl92aWV3LmRpc3Bvc2FibGVzLnB1c2godCl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9hcHBSZWY/dGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk6dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fdmlld0NvbnRhaW5lclJlZi5kZXRhY2godGhpcy5fdmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMpKSxObi5kZXN0cm95Vmlldyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoRnJvbUFwcFJlZj1mdW5jdGlvbigpe3RoaXMuX2FwcFJlZj1udWxsLFJpKHRoaXMuX3ZpZXcpLE5uLmRpcnR5UGFyZW50UXVlcmllcyh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuYXR0YWNoVG9BcHBSZWY9ZnVuY3Rpb24odCl7aWYodGhpcy5fdmlld0NvbnRhaW5lclJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEgVmlld0NvbnRhaW5lciEiKTt0aGlzLl9hcHBSZWY9dH0sdC5wcm90b3R5cGUuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgRXJyb3IoIlRoaXMgdmlldyBpcyBhbHJlYWR5IGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBBcHBsaWNhdGlvblJlZiEiKTt0aGlzLl92aWV3Q29udGFpbmVyUmVmPXR9LHR9KCk7ZnVuY3Rpb24gV2kodCxlKXtyZXR1cm4gbmV3IFlpKHQsZSl9dmFyIFlpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX3BhcmVudFZpZXc9ZSxpLl9kZWY9bixpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNyZWF0ZUVtYmVkZGVkVmlldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEdpKE5uLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9wYXJlbnRWaWV3LHRoaXMuX2RlZix0aGlzLl9kZWYuZWxlbWVudC50ZW1wbGF0ZSx0KSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZWxlbWVudFJlZiIse2dldDpmdW5jdGlvbigpe3JldHVybiBuZXcgZmUoSW4odGhpcy5fcGFyZW50Vmlldyx0aGlzLl9kZWYubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfShnZSk7ZnVuY3Rpb24gUWkodCxlKXtyZXR1cm4gbmV3IFppKHQsZSl9dmFyIFppPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudmlldz10LHRoaXMuZWxEZWY9ZX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPU4uVEhST1dfSUZfTk9UX0ZPVU5EKSxObi5yZXNvbHZlRGVwKHRoaXMudmlldyx0aGlzLmVsRGVmLCEhdGhpcy5lbERlZiYmMCE9KDMzNTU0NDMyJnRoaXMuZWxEZWYuZmxhZ3MpLHtmbGFnczowLHRva2VuOnQsdG9rZW5LZXk6Vm4odCl9LGUpfSx0fSgpO2Z1bmN0aW9uIEtpKHQsZSl7dmFyIG49dC5kZWYubm9kZXNbZV07aWYoMSZuLmZsYWdzKXt2YXIgaT1Jbih0LG4ubm9kZUluZGV4KTtyZXR1cm4gbi5lbGVtZW50LnRlbXBsYXRlP2kudGVtcGxhdGU6aS5yZW5kZXJFbGVtZW50fWlmKDImbi5mbGFncylyZXR1cm4gQW4odCxuLm5vZGVJbmRleCkucmVuZGVyVGV4dDtpZigyMDI0MCZuLmZsYWdzKXJldHVybiBqbih0LG4ubm9kZUluZGV4KS5pbnN0YW5jZTt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgc3RhdGU6IHJlYWQgbm9kZVZhbHVlIGZvciBub2RlIGluZGV4ICIrZSl9ZnVuY3Rpb24gWGkodCl7cmV0dXJuIG5ldyAkaSh0LnJlbmRlcmVyKX12YXIgJGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dH1yZXR1cm4gdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QoaS5jKShtaShlKSwyKSxyPXRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuWzFdLG5bMF0pO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQscikscn0sdC5wcm90b3R5cGUuY3JlYXRlVmlld1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlQW5jaG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHQmJnRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGUpO3JldHVybiB0JiZ0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsbiksbn0sdC5wcm90b3R5cGUucHJvamVjdE5vZGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGVbbl0pfSx0LnByb3RvdHlwZS5hdHRhY2hWaWV3QWZ0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpLGk9dGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KSxyPTA7cjxlLmxlbmd0aDtyKyspdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobixlW3JdLGkpfSx0LnByb3RvdHlwZS5kZXRhY2hWaWV3PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdLGk9dGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKG4pO3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQoaSxuKX19LHQucHJvdG90eXBlLmRlc3Ryb3lWaWV3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspdGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZShlW25dKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5saXN0ZW5HbG9iYWw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLnNldEVsZW1lbnRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPU9iamVjdChpLmMpKG1pKGUpLDIpLG89clswXSxhPXJbMV07bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGEsbixvKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGEsbyl9LHQucHJvdG90eXBlLnNldEJpbmRpbmdEZWJ1Z0luZm89ZnVuY3Rpb24odCxlLG4pe30sdC5wcm90b3R5cGUuc2V0RWxlbWVudENsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3RoaXMuZGVsZWdhdGUuYWRkQ2xhc3ModCxlKTp0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9LHQucHJvdG90eXBlLnNldEVsZW1lbnRTdHlsZT1mdW5jdGlvbih0LGUsbil7bnVsbCE9bj90aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuKTp0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlKHQsZSl9LHQucHJvdG90eXBlLmludm9rZUVsZW1lbnRNZXRob2Q9ZnVuY3Rpb24odCxlLG4pe3RbZV0uYXBwbHkodCxuKX0sdC5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVuZGVyZXIuYW5pbWF0ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkISIpfSx0fSgpO2Z1bmN0aW9uIEppKHQsZSxuLGkpe3JldHVybiBuZXcgdHIodCxlLG4saSl9dmFyIHRyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLl9tb2R1bGVUeXBlPXQsdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1uLHRoaXMuX2RlZj1pLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuaW5qZWN0b3I9dGhpcyxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZGVmLG49dC5fcHJvdmlkZXJzPW5ldyBBcnJheShlLnByb3ZpZGVycy5sZW5ndGgpLGk9MDtpPGUucHJvdmlkZXJzLmxlbmd0aDtpKyspe3ZhciByPWUucHJvdmlkZXJzW2ldOzQwOTYmci5mbGFnc3x8dm9pZCAwPT09bltpXSYmKG5baV09TWkodCxyKSl9fSh0aGlzKX1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT1OLlRIUk9XX0lGX05PVF9GT1VORCksdm9pZCAwPT09biYmKG49MCk7dmFyIGk9MDtyZXR1cm4gNCZuP2l8PTE6MiZuJiYoaXw9NCksamkodGhpcyx7dG9rZW46dCx0b2tlbktleTpWbih0KSxmbGFnczppfSxlKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCh0aGlzLl9tb2R1bGVUeXBlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudEZhY3RvcnlSZXNvbHZlciIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldChrdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBuZyBtb2R1bGUgIitTKHRoaXMuaW5zdGFuY2UuY29uc3RydWN0b3IpKyIgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuIik7dGhpcy5fZGVzdHJveWVkPSEwLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuX2RlZixpPW5ldyBTZXQscj0wO3I8bi5wcm92aWRlcnMubGVuZ3RoO3IrKylpZigxMzEwNzImbi5wcm92aWRlcnNbcl0uZmxhZ3Mpe3ZhciBvPXQuX3Byb3ZpZGVyc1tyXTtpZihvJiZvIT09Q2kpe3ZhciBhPW8ubmdPbkRlc3Ryb3k7ImZ1bmN0aW9uIiE9dHlwZW9mIGF8fGkuaGFzKG8pfHwoYS5hcHBseShvKSxpLmFkZChvKSl9fX0odGhpcyksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaCh0KX0sdH0oKSxlcj1WbihmdW5jdGlvbigpe30pLG5yPVZuKGxlKSxpcj1WbihmZSkscnI9Vm4oYmUpLG9yPVZuKGdlKSxhcj1WbihfZSksc3I9Vm4oTiksdXI9Vm4oTSk7ZnVuY3Rpb24gY3IodCxlLG4scixvLGEscyx1KXt2YXIgYz1bXTtpZihzKWZvcih2YXIgbCBpbiBzKXt2YXIgZj1PYmplY3QoaS5jKShzW2xdLDIpO2NbZlswXV09e2ZsYWdzOjgsbmFtZTpsLG5vbk1pbmlmaWVkTmFtZTpmWzFdLG5zOm51bGwsc2VjdXJpdHlDb250ZXh0Om51bGwsc3VmZml4Om51bGx9fXZhciBoPVtdO2lmKHUpZm9yKHZhciBkIGluIHUpaC5wdXNoKHt0eXBlOjEscHJvcE5hbWU6ZCx0YXJnZXQ6bnVsbCxldmVudE5hbWU6dVtkXX0pO3JldHVybiBocih0LGV8PTE2Mzg0LG4scixvLG8sYSxjLGgpfWZ1bmN0aW9uIGxyKHQsZSxuKXtyZXR1cm4gaHIoLTEsdHw9MTYsbnVsbCwwLGUsZSxuKX1mdW5jdGlvbiBmcih0LGUsbixpLHIpe3JldHVybiBocigtMSx0LGUsMCxuLGkscil9ZnVuY3Rpb24gaHIodCxlLG4saSxyLG8sYSxzLHUpe3ZhciBjPXJpKG4pLGw9Yy5tYXRjaGVkUXVlcmllcyxmPWMucmVmZXJlbmNlcyxoPWMubWF0Y2hlZFF1ZXJ5SWRzO3V8fCh1PVtdKSxzfHwocz1bXSksbz1DKG8pO3ZhciBkPW9pKGEsUyhyKSk7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOmUsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6bCxtYXRjaGVkUXVlcnlJZHM6aCxyZWZlcmVuY2VzOmYsbmdDb250ZW50SW5kZXg6LTEsY2hpbGRDb3VudDppLGJpbmRpbmdzOnMsYmluZGluZ0ZsYWdzOnlpKHMpLG91dHB1dHM6dSxlbGVtZW50Om51bGwscHJvdmlkZXI6e3Rva2VuOnIsdmFsdWU6byxkZXBzOmR9LHRleHQ6bnVsbCxxdWVyeTpudWxsLG5nQ29udGVudDpudWxsfX1mdW5jdGlvbiBkcih0LGUpe3JldHVybiB2cih0LGUpfWZ1bmN0aW9uIHByKHQsZSl7Zm9yKHZhciBuPXQ7bi5wYXJlbnQmJiFlaShuKTspbj1uLnBhcmVudDtyZXR1cm4gZ3Iobi5wYXJlbnQsSm4obiksITAsZS5wcm92aWRlci52YWx1ZSxlLnByb3ZpZGVyLmRlcHMpfWZ1bmN0aW9uIG1yKHQsZSl7dmFyIG49Z3IodCxlLnBhcmVudCwoMzI3NjgmZS5mbGFncyk+MCxlLnByb3ZpZGVyLnZhbHVlLGUucHJvdmlkZXIuZGVwcyk7aWYoZS5vdXRwdXRzLmxlbmd0aClmb3IodmFyIGk9MDtpPGUub3V0cHV0cy5sZW5ndGg7aSsrKXt2YXIgcj1lLm91dHB1dHNbaV0sbz1uW3IucHJvcE5hbWVdLnN1YnNjcmliZSh5cih0LGUucGFyZW50Lm5vZGVJbmRleCxyLmV2ZW50TmFtZSkpO3QuZGlzcG9zYWJsZXNbZS5vdXRwdXRJbmRleCtpXT1vLnVuc3Vic2NyaWJlLmJpbmQobyl9cmV0dXJuIG59ZnVuY3Rpb24geXIodCxlLG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gWG4odCxlLG4saSl9fWZ1bmN0aW9uIHZyKHQsZSl7dmFyIG49KDgxOTImZS5mbGFncyk+MCxyPWUucHJvdmlkZXI7c3dpdGNoKDIwMTM0NzA2NyZlLmZsYWdzKXtjYXNlIDUxMjpyZXR1cm4gZ3IodCxlLnBhcmVudCxuLHIudmFsdWUsci5kZXBzKTtjYXNlIDEwMjQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLHIsbyl7dmFyIGE9by5sZW5ndGg7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gcigpO2Nhc2UgMTpyZXR1cm4gcihfcih0LGUsbixvWzBdKSk7Y2FzZSAyOnJldHVybiByKF9yKHQsZSxuLG9bMF0pLF9yKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIHIoX3IodCxlLG4sb1swXSksX3IodCxlLG4sb1sxXSksX3IodCxlLG4sb1syXSkpO2RlZmF1bHQ6Zm9yKHZhciBzPUFycmF5KGEpLHU9MDt1PGE7dSsrKXNbdV09X3IodCxlLG4sb1t1XSk7cmV0dXJuIHIuYXBwbHkodm9pZCAwLE9iamVjdChpLmQpKHMpKX19KHQsZS5wYXJlbnQsbixyLnZhbHVlLHIuZGVwcyk7Y2FzZSAyMDQ4OnJldHVybiBfcih0LGUucGFyZW50LG4sci5kZXBzWzBdKTtjYXNlIDI1NjpyZXR1cm4gci52YWx1ZX19ZnVuY3Rpb24gZ3IodCxlLG4scixvKXt2YXIgYT1vLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiBuZXcgcjtjYXNlIDE6cmV0dXJuIG5ldyByKF9yKHQsZSxuLG9bMF0pKTtjYXNlIDI6cmV0dXJuIG5ldyByKF9yKHQsZSxuLG9bMF0pLF9yKHQsZSxuLG9bMV0pKTtjYXNlIDM6cmV0dXJuIG5ldyByKF9yKHQsZSxuLG9bMF0pLF9yKHQsZSxuLG9bMV0pLF9yKHQsZSxuLG9bMl0pKTtkZWZhdWx0OmZvcih2YXIgcz1uZXcgQXJyYXkoYSksdT0wO3U8YTt1Kyspc1t1XT1fcih0LGUsbixvW3VdKTtyZXR1cm4gbmV3KHIuYmluZC5hcHBseShyLE9iamVjdChpLmQpKFt2b2lkIDBdLHMpKSl9fXZhciBicj17fTtmdW5jdGlvbiBfcih0LGUsbixpLHIpe2lmKHZvaWQgMD09PXImJihyPU4uVEhST1dfSUZfTk9UX0ZPVU5EKSw4JmkuZmxhZ3MpcmV0dXJuIGkudG9rZW47dmFyIG89dDsyJmkuZmxhZ3MmJihyPW51bGwpO3ZhciBhPWkudG9rZW5LZXk7YT09PWFyJiYobj0hKCFlfHwhZS5lbGVtZW50LmNvbXBvbmVudFZpZXcpKSxlJiYxJmkuZmxhZ3MmJihuPSExLGU9ZS5wYXJlbnQpO2Zvcih2YXIgcz10O3M7KXtpZihlKXN3aXRjaChhKXtjYXNlIGVyOnJldHVybiBYaSh3cihzLGUsbikpO2Nhc2UgbnI6cmV0dXJuIHdyKHMsZSxuKS5yZW5kZXJlcjtjYXNlIGlyOnJldHVybiBuZXcgZmUoSW4ocyxlLm5vZGVJbmRleCkucmVuZGVyRWxlbWVudCk7Y2FzZSBycjpyZXR1cm4gSW4ocyxlLm5vZGVJbmRleCkudmlld0NvbnRhaW5lcjtjYXNlIG9yOmlmKGUuZWxlbWVudC50ZW1wbGF0ZSlyZXR1cm4gSW4ocyxlLm5vZGVJbmRleCkudGVtcGxhdGU7YnJlYWs7Y2FzZSBhcjpyZXR1cm4gcWkod3IocyxlLG4pKTtjYXNlIHNyOmNhc2UgdXI6cmV0dXJuIFFpKHMsZSk7ZGVmYXVsdDp2YXIgdT0obj9lLmVsZW1lbnQuYWxsUHJvdmlkZXJzOmUuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpW2FdO2lmKHUpe3ZhciBjPWpuKHMsdS5ub2RlSW5kZXgpO3JldHVybiBjfHwoYz17aW5zdGFuY2U6dnIocyx1KX0scy5ub2Rlc1t1Lm5vZGVJbmRleF09YyksYy5pbnN0YW5jZX19bj1laShzKSxlPUpuKHMpLHM9cy5wYXJlbnQsNCZpLmZsYWdzJiYocz1udWxsKX12YXIgbD1vLnJvb3QuaW5qZWN0b3IuZ2V0KGkudG9rZW4sYnIpO3JldHVybiBsIT09YnJ8fHI9PT1icj9sOm8ucm9vdC5uZ01vZHVsZS5pbmplY3Rvci5nZXQoaS50b2tlbixyKX1mdW5jdGlvbiB3cih0LGUsbil7dmFyIGk7aWYobilpPUluKHQsZS5ub2RlSW5kZXgpLmNvbXBvbmVudFZpZXc7ZWxzZSBmb3IoaT10O2kucGFyZW50JiYhZWkoaSk7KWk9aS5wYXJlbnQ7cmV0dXJuIGl9ZnVuY3Rpb24geHIodCxlLG4saSxyLG8pe2lmKDMyNzY4Jm4uZmxhZ3Mpe3ZhciBhPUluKHQsbi5wYXJlbnQubm9kZUluZGV4KS5jb21wb25lbnRWaWV3OzImYS5kZWYuZmxhZ3MmJihhLnN0YXRlfD04KX1pZihlLmluc3RhbmNlW24uYmluZGluZ3NbaV0ubmFtZV09ciw1MjQyODgmbi5mbGFncyl7bz1vfHx7fTt2YXIgcz1BZS51bndyYXAodC5vbGRWYWx1ZXNbbi5iaW5kaW5nSW5kZXgraV0pO29bbi5iaW5kaW5nc1tpXS5ub25NaW5pZmllZE5hbWVdPW5ldyBJZShzLHIsMCE9KDImdC5zdGF0ZSkpfXJldHVybiB0Lm9sZFZhbHVlc1tuLmJpbmRpbmdJbmRleCtpXT1yLG99ZnVuY3Rpb24gU3IodCxlKXtpZih0LmRlZi5ub2RlRmxhZ3MmZSlmb3IodmFyIG49dC5kZWYubm9kZXMsaT0wLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXSxhPW8ucGFyZW50O2ZvcighYSYmby5mbGFncyZlJiZDcih0LHIsby5mbGFncyZlLGkrKyksMD09KG8uY2hpbGRGbGFncyZlKSYmKHIrPW8uY2hpbGRDb3VudCk7YSYmMSZhLmZsYWdzJiZyPT09YS5ub2RlSW5kZXgrYS5jaGlsZENvdW50OylhLmRpcmVjdENoaWxkRmxhZ3MmZSYmKGk9RXIodCxhLGUsaSkpLGE9YS5wYXJlbnR9fWZ1bmN0aW9uIEVyKHQsZSxuLGkpe2Zvcih2YXIgcj1lLm5vZGVJbmRleCsxO3I8PWUubm9kZUluZGV4K2UuY2hpbGRDb3VudDtyKyspe3ZhciBvPXQuZGVmLm5vZGVzW3JdO28uZmxhZ3MmbiYmQ3IodCxyLG8uZmxhZ3MmbixpKyspLHIrPW8uY2hpbGRDb3VudH1yZXR1cm4gaX1mdW5jdGlvbiBDcih0LGUsbixpKXt2YXIgcj1qbih0LGUpO2lmKHIpe3ZhciBvPXIuaW5zdGFuY2U7byYmKE5uLnNldEN1cnJlbnROb2RlKHQsZSksMTA0ODU3NiZuJiZrbih0LDUxMixpKSYmby5uZ0FmdGVyQ29udGVudEluaXQoKSwyMDk3MTUyJm4mJm8ubmdBZnRlckNvbnRlbnRDaGVja2VkKCksNDE5NDMwNCZuJiZrbih0LDc2OCxpKSYmby5uZ0FmdGVyVmlld0luaXQoKSw4Mzg4NjA4Jm4mJm8ubmdBZnRlclZpZXdDaGVja2VkKCksMTMxMDcyJm4mJm8ubmdPbkRlc3Ryb3koKSl9fWZ1bmN0aW9uIE9yKHQsZSxuKXt2YXIgaT1bXTtmb3IodmFyIHIgaW4gbilpLnB1c2goe3Byb3BOYW1lOnIsYmluZGluZ1R5cGU6bltyXX0pO3JldHVybntub2RlSW5kZXg6LTEscGFyZW50Om51bGwscmVuZGVyUGFyZW50Om51bGwsYmluZGluZ0luZGV4Oi0xLG91dHB1dEluZGV4Oi0xLGNoZWNrSW5kZXg6LTEsZmxhZ3M6dCxjaGlsZEZsYWdzOjAsZGlyZWN0Q2hpbGRGbGFnczowLGNoaWxkTWF0Y2hlZFF1ZXJpZXM6MCxuZ0NvbnRlbnRJbmRleDotMSxtYXRjaGVkUXVlcmllczp7fSxtYXRjaGVkUXVlcnlJZHM6MCxyZWZlcmVuY2VzOnt9LGNoaWxkQ291bnQ6MCxiaW5kaW5nczpbXSxiaW5kaW5nRmxhZ3M6MCxvdXRwdXRzOltdLGVsZW1lbnQ6bnVsbCxwcm92aWRlcjpudWxsLHRleHQ6bnVsbCxxdWVyeTp7aWQ6ZSxmaWx0ZXJJZDppaShlKSxiaW5kaW5nczppfSxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gVHIodCl7Zm9yKHZhciBlPXQuZGVmLm5vZGVNYXRjaGVkUXVlcmllczt0LnBhcmVudCYmbmkodCk7KXt2YXIgbj10LnBhcmVudE5vZGVEZWY7dD10LnBhcmVudDtmb3IodmFyIGk9bi5ub2RlSW5kZXgrbi5jaGlsZENvdW50LHI9MDtyPD1pO3IrKyk2NzEwODg2NCYobz10LmRlZi5ub2Rlc1tyXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiYoby5xdWVyeS5maWx0ZXJJZCZlKT09PW8ucXVlcnkuZmlsdGVySWQmJlBuKHQscikuc2V0RGlydHkoKSwhKDEmby5mbGFncyYmcitvLmNoaWxkQ291bnQ8bi5ub2RlSW5kZXgpJiY2NzEwODg2NCZvLmNoaWxkRmxhZ3MmJjUzNjg3MDkxMiZvLmNoaWxkRmxhZ3N8fChyKz1vLmNoaWxkQ291bnQpfWlmKDEzNDIxNzcyOCZ0LmRlZi5ub2RlRmxhZ3MpZm9yKHI9MDtyPHQuZGVmLm5vZGVzLmxlbmd0aDtyKyspe3ZhciBvOzEzNDIxNzcyOCYobz10LmRlZi5ub2Rlc1tyXSkuZmxhZ3MmJjUzNjg3MDkxMiZvLmZsYWdzJiZQbih0LHIpLnNldERpcnR5KCkscis9by5jaGlsZENvdW50fX1mdW5jdGlvbiBrcih0LGUpe3ZhciBuPVBuKHQsZS5ub2RlSW5kZXgpO2lmKG4uZGlydHkpe3ZhciBpLHI9dm9pZCAwO2lmKDY3MTA4ODY0JmUuZmxhZ3Mpe3ZhciBvPWUucGFyZW50LnBhcmVudDtyPUFyKHQsby5ub2RlSW5kZXgsby5ub2RlSW5kZXgrby5jaGlsZENvdW50LGUucXVlcnksW10pLGk9am4odCxlLnBhcmVudC5ub2RlSW5kZXgpLmluc3RhbmNlfWVsc2UgMTM0MjE3NzI4JmUuZmxhZ3MmJihyPUFyKHQsMCx0LmRlZi5ub2Rlcy5sZW5ndGgtMSxlLnF1ZXJ5LFtdKSxpPXQuY29tcG9uZW50KTtuLnJlc2V0KHIpO2Zvcih2YXIgYT1lLnF1ZXJ5LmJpbmRpbmdzLHM9ITEsdT0wO3U8YS5sZW5ndGg7dSsrKXt2YXIgYz1hW3VdLGw9dm9pZCAwO3N3aXRjaChjLmJpbmRpbmdUeXBlKXtjYXNlIDA6bD1uLmZpcnN0O2JyZWFrO2Nhc2UgMTpsPW4scz0hMH1pW2MucHJvcE5hbWVdPWx9cyYmbi5ub3RpZnlPbkNoYW5nZXMoKX19ZnVuY3Rpb24gQXIodCxlLG4saSxyKXtmb3IodmFyIG89ZTtvPD1uO28rKyl7dmFyIGE9dC5kZWYubm9kZXNbb10scz1hLm1hdGNoZWRRdWVyaWVzW2kuaWRdO2lmKG51bGwhPXMmJnIucHVzaChJcih0LGEscykpLDEmYS5mbGFncyYmYS5lbGVtZW50LnRlbXBsYXRlJiYoYS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcyZpLmZpbHRlcklkKT09PWkuZmlsdGVySWQpe3ZhciB1PUluKHQsbyk7aWYoKGEuY2hpbGRNYXRjaGVkUXVlcmllcyZpLmZpbHRlcklkKT09PWkuZmlsdGVySWQmJihBcih0LG8rMSxvK2EuY2hpbGRDb3VudCxpLHIpLG8rPWEuY2hpbGRDb3VudCksMTY3NzcyMTYmYS5mbGFncylmb3IodmFyIGM9dS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGw9MDtsPGMubGVuZ3RoO2wrKyl7dmFyIGY9Y1tsXSxoPSRuKGYpO2gmJmg9PT11JiZBcihmLDAsZi5kZWYubm9kZXMubGVuZ3RoLTEsaSxyKX12YXIgZD11LnRlbXBsYXRlLl9wcm9qZWN0ZWRWaWV3cztpZihkKWZvcihsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciBwPWRbbF07QXIocCwwLHAuZGVmLm5vZGVzLmxlbmd0aC0xLGkscil9fShhLmNoaWxkTWF0Y2hlZFF1ZXJpZXMmaS5maWx0ZXJJZCkhPT1pLmZpbHRlcklkJiYobys9YS5jaGlsZENvdW50KX1yZXR1cm4gcn1mdW5jdGlvbiBJcih0LGUsbil7aWYobnVsbCE9bilzd2l0Y2gobil7Y2FzZSAxOnJldHVybiBJbih0LGUubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2Nhc2UgMDpyZXR1cm4gbmV3IGZlKEluKHQsZS5ub2RlSW5kZXgpLnJlbmRlckVsZW1lbnQpO2Nhc2UgMjpyZXR1cm4gSW4odCxlLm5vZGVJbmRleCkudGVtcGxhdGU7Y2FzZSAzOnJldHVybiBJbih0LGUubm9kZUluZGV4KS52aWV3Q29udGFpbmVyO2Nhc2UgNDpyZXR1cm4gam4odCxlLm5vZGVJbmRleCkuaW5zdGFuY2V9fWZ1bmN0aW9uIGpyKHQsZSl7cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDotMSxmbGFnczo4LGNoaWxkRmxhZ3M6MCxkaXJlY3RDaGlsZEZsYWdzOjAsY2hpbGRNYXRjaGVkUXVlcmllczowLG1hdGNoZWRRdWVyaWVzOnt9LG1hdGNoZWRRdWVyeUlkczowLHJlZmVyZW5jZXM6e30sbmdDb250ZW50SW5kZXg6dCxjaGlsZENvdW50OjAsYmluZGluZ3M6W10sYmluZGluZ0ZsYWdzOjAsb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6e2luZGV4OmV9fX1mdW5jdGlvbiBNcih0LGUsbil7dmFyIGk9YWkodCxlLG4pO2kmJmZpKHQsbi5uZ0NvbnRlbnQuaW5kZXgsMSxpLG51bGwsdm9pZCAwKX1mdW5jdGlvbiBQcih0LGUpe3JldHVybiBEcigxMjgsdCxuZXcgQXJyYXkoZSsxKSl9ZnVuY3Rpb24gTnIodCxlKXtyZXR1cm4gRHIoMzIsdCxuZXcgQXJyYXkoZSkpfWZ1bmN0aW9uIFJyKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5rZXlzKGUpLGk9bi5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTtvKyspe3ZhciBhPW5bb107cltlW2FdXT1hfXJldHVybiBEcig2NCx0LHIpfWZ1bmN0aW9uIERyKHQsZSxuKXtmb3IodmFyIGk9bmV3IEFycmF5KG4ubGVuZ3RoKSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07aVtyXT17ZmxhZ3M6OCxuYW1lOm8sbnM6bnVsbCxub25NaW5pZmllZE5hbWU6byxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bnVsbH19cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDplLGZsYWdzOnQsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDotMSxjaGlsZENvdW50OjAsYmluZGluZ3M6aSxiaW5kaW5nRmxhZ3M6eWkoaSksb3V0cHV0czpbXSxlbGVtZW50Om51bGwscHJvdmlkZXI6bnVsbCx0ZXh0Om51bGwscXVlcnk6bnVsbCxuZ0NvbnRlbnQ6bnVsbH19ZnVuY3Rpb24gTHIodCxlLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkobi5sZW5ndGgtMSkscj0xO3I8bi5sZW5ndGg7cisrKWlbci0xXT17ZmxhZ3M6OCxuYW1lOm51bGwsbnM6bnVsbCxub25NaW5pZmllZE5hbWU6bnVsbCxzZWN1cml0eUNvbnRleHQ6bnVsbCxzdWZmaXg6bltyXX07cmV0dXJue25vZGVJbmRleDotMSxwYXJlbnQ6bnVsbCxyZW5kZXJQYXJlbnQ6bnVsbCxiaW5kaW5nSW5kZXg6LTEsb3V0cHV0SW5kZXg6LTEsY2hlY2tJbmRleDp0LGZsYWdzOjIsY2hpbGRGbGFnczowLGRpcmVjdENoaWxkRmxhZ3M6MCxjaGlsZE1hdGNoZWRRdWVyaWVzOjAsbWF0Y2hlZFF1ZXJpZXM6e30sbWF0Y2hlZFF1ZXJ5SWRzOjAscmVmZXJlbmNlczp7fSxuZ0NvbnRlbnRJbmRleDplLGNoaWxkQ291bnQ6MCxiaW5kaW5nczppLGJpbmRpbmdGbGFnczo4LG91dHB1dHM6W10sZWxlbWVudDpudWxsLHByb3ZpZGVyOm51bGwsdGV4dDp7cHJlZml4Om5bMF19LHF1ZXJ5Om51bGwsbmdDb250ZW50Om51bGx9fWZ1bmN0aW9uIEZyKHQsZSxuKXt2YXIgaSxyPXQucmVuZGVyZXI7aT1yLmNyZWF0ZVRleHQobi50ZXh0LnByZWZpeCk7dmFyIG89YWkodCxlLG4pO3JldHVybiBvJiZyLmFwcGVuZENoaWxkKG8saSkse3JlbmRlclRleHQ6aX19ZnVuY3Rpb24genIodCxlKXtyZXR1cm4obnVsbCE9dD90LnRvU3RyaW5nKCk6IiIpK2Uuc3VmZml4fWZ1bmN0aW9uIFZyKHQsZSxuLGkpe2Zvcih2YXIgcj0wLG89MCxhPTAscz0wLHU9MCxjPW51bGwsbD1udWxsLGY9ITEsaD0hMSxkPW51bGwscD0wO3A8ZS5sZW5ndGg7cCsrKXt2YXIgbT1lW3BdO2lmKG0ubm9kZUluZGV4PXAsbS5wYXJlbnQ9YyxtLmJpbmRpbmdJbmRleD1yLG0ub3V0cHV0SW5kZXg9byxtLnJlbmRlclBhcmVudD1sLGF8PW0uZmxhZ3MsdXw9bS5tYXRjaGVkUXVlcnlJZHMsbS5lbGVtZW50KXt2YXIgeT1tLmVsZW1lbnQ7eS5wdWJsaWNQcm92aWRlcnM9Yz9jLmVsZW1lbnQucHVibGljUHJvdmlkZXJzOk9iamVjdC5jcmVhdGUobnVsbCkseS5hbGxQcm92aWRlcnM9eS5wdWJsaWNQcm92aWRlcnMsZj0hMSxoPSExLG0uZWxlbWVudC50ZW1wbGF0ZSYmKHV8PW0uZWxlbWVudC50ZW1wbGF0ZS5ub2RlTWF0Y2hlZFF1ZXJpZXMpfWlmKFVyKGMsbSxlLmxlbmd0aCkscis9bS5iaW5kaW5ncy5sZW5ndGgsbys9bS5vdXRwdXRzLmxlbmd0aCwhbCYmMyZtLmZsYWdzJiYoZD1tKSwyMDIyNCZtLmZsYWdzKXtmfHwoZj0hMCxjLmVsZW1lbnQucHVibGljUHJvdmlkZXJzPU9iamVjdC5jcmVhdGUoYy5lbGVtZW50LnB1YmxpY1Byb3ZpZGVycyksYy5lbGVtZW50LmFsbFByb3ZpZGVycz1jLmVsZW1lbnQucHVibGljUHJvdmlkZXJzKTt2YXIgdj0wIT0oMzI3NjgmbS5mbGFncyk7MD09KDgxOTImbS5mbGFncyl8fHY/Yy5lbGVtZW50LnB1YmxpY1Byb3ZpZGVyc1tWbihtLnByb3ZpZGVyLnRva2VuKV09bTooaHx8KGg9ITAsYy5lbGVtZW50LmFsbFByb3ZpZGVycz1PYmplY3QuY3JlYXRlKGMuZWxlbWVudC5wdWJsaWNQcm92aWRlcnMpKSxjLmVsZW1lbnQuYWxsUHJvdmlkZXJzW1ZuKG0ucHJvdmlkZXIudG9rZW4pXT1tKSx2JiYoYy5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyPW0pfWlmKGM/KGMuY2hpbGRGbGFnc3w9bS5mbGFncyxjLmRpcmVjdENoaWxkRmxhZ3N8PW0uZmxhZ3MsYy5jaGlsZE1hdGNoZWRRdWVyaWVzfD1tLm1hdGNoZWRRdWVyeUlkcyxtLmVsZW1lbnQmJm0uZWxlbWVudC50ZW1wbGF0ZSYmKGMuY2hpbGRNYXRjaGVkUXVlcmllc3w9bS5lbGVtZW50LnRlbXBsYXRlLm5vZGVNYXRjaGVkUXVlcmllcykpOnN8PW0uZmxhZ3MsbS5jaGlsZENvdW50PjApYz1tLEJyKG0pfHwobD1tKTtlbHNlIGZvcig7YyYmcD09PWMubm9kZUluZGV4K2MuY2hpbGRDb3VudDspe3ZhciBnPWMucGFyZW50O2cmJihnLmNoaWxkRmxhZ3N8PWMuY2hpbGRGbGFncyxnLmNoaWxkTWF0Y2hlZFF1ZXJpZXN8PWMuY2hpbGRNYXRjaGVkUXVlcmllcyksbD0oYz1nKSYmQnIoYyk/Yy5yZW5kZXJQYXJlbnQ6Y319cmV0dXJue2ZhY3Rvcnk6bnVsbCxub2RlRmxhZ3M6YSxyb290Tm9kZUZsYWdzOnMsbm9kZU1hdGNoZWRRdWVyaWVzOnUsZmxhZ3M6dCxub2RlczplLHVwZGF0ZURpcmVjdGl2ZXM6bnx8Rm4sdXBkYXRlUmVuZGVyZXI6aXx8Rm4saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxuLGkscil7cmV0dXJuIGVbbl0uZWxlbWVudC5oYW5kbGVFdmVudCh0LGkscil9LGJpbmRpbmdDb3VudDpyLG91dHB1dENvdW50Om8sbGFzdFJlbmRlclJvb3ROb2RlOmR9fWZ1bmN0aW9uIEJyKHQpe3JldHVybiAwIT0oMSZ0LmZsYWdzKSYmbnVsbD09PXQuZWxlbWVudC5uYW1lfWZ1bmN0aW9uIFVyKHQsZSxuKXt2YXIgaT1lLmVsZW1lbnQmJmUuZWxlbWVudC50ZW1wbGF0ZTtpZihpKXtpZighaS5sYXN0UmVuZGVyUm9vdE5vZGUpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBFbWJlZGRlZCB0ZW1wbGF0ZXMgd2l0aG91dCBub2RlcyBhcmUgbm90IGFsbG93ZWQhIik7aWYoaS5sYXN0UmVuZGVyUm9vdE5vZGUmJjE2Nzc3MjE2JmkubGFzdFJlbmRlclJvb3ROb2RlLmZsYWdzKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogTGFzdCByb290IG5vZGUgb2YgYSB0ZW1wbGF0ZSBjYW4ndCBoYXZlIGVtYmVkZGVkIHZpZXdzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIil9aWYoMjAyMjQmZS5mbGFncyYmMD09KDEmKHQ/dC5mbGFnczowKSkpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBTdGF0aWNQcm92aWRlci9EaXJlY3RpdmUgbm9kZXMgbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBlbGVtZW50cyBvciBhbmNob3JzLCBhdCBpbmRleCAiK2Uubm9kZUluZGV4KyIhIik7aWYoZS5xdWVyeSl7aWYoNjcxMDg4NjQmZS5mbGFncyYmKCF0fHwwPT0oMTYzODQmdC5mbGFncykpKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogQ29udGVudCBRdWVyeSBub2RlcyBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIGRpcmVjdGl2ZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKTtpZigxMzQyMTc3MjgmZS5mbGFncyYmdCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IFZpZXcgUXVlcnkgbm9kZXMgaGF2ZSB0byBiZSB0b3AgbGV2ZWwgbm9kZXMsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX1pZihlLmNoaWxkQ291bnQpe3ZhciByPXQ/dC5ub2RlSW5kZXgrdC5jaGlsZENvdW50Om4tMTtpZihlLm5vZGVJbmRleDw9ciYmZS5ub2RlSW5kZXgrZS5jaGlsZENvdW50PnIpdGhyb3cgbmV3IEVycm9yKCJJbGxlZ2FsIFN0YXRlOiBjaGlsZENvdW50IG9mIG5vZGUgbGVhZHMgb3V0c2lkZSBvZiBwYXJlbnQsIGF0IGluZGV4ICIrZS5ub2RlSW5kZXgrIiEiKX19ZnVuY3Rpb24gSHIodCxlLG4saSl7dmFyIHI9V3IodC5yb290LHQucmVuZGVyZXIsdCxlLG4pO3JldHVybiBZcihyLHQuY29tcG9uZW50LGkpLFFyKHIpLHJ9ZnVuY3Rpb24gcXIodCxlLG4pe3ZhciBpPVdyKHQsdC5yZW5kZXJlcixudWxsLG51bGwsZSk7cmV0dXJuIFlyKGksbixuKSxRcihpKSxpfWZ1bmN0aW9uIEdyKHQsZSxuLGkpe3ZhciByLG89ZS5lbGVtZW50LmNvbXBvbmVudFJlbmRlcmVyVHlwZTtyZXR1cm4gcj1vP3Qucm9vdC5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaSxvKTp0LnJvb3QucmVuZGVyZXIsV3IodC5yb290LHIsdCxlLmVsZW1lbnQuY29tcG9uZW50UHJvdmlkZXIsbil9ZnVuY3Rpb24gV3IodCxlLG4saSxyKXt2YXIgbz1uZXcgQXJyYXkoci5ub2Rlcy5sZW5ndGgpLGE9ci5vdXRwdXRDb3VudD9uZXcgQXJyYXkoci5vdXRwdXRDb3VudCk6bnVsbDtyZXR1cm57ZGVmOnIscGFyZW50Om4sdmlld0NvbnRhaW5lclBhcmVudDpudWxsLHBhcmVudE5vZGVEZWY6aSxjb250ZXh0Om51bGwsY29tcG9uZW50Om51bGwsbm9kZXM6byxzdGF0ZToxMyxyb290OnQscmVuZGVyZXI6ZSxvbGRWYWx1ZXM6bmV3IEFycmF5KHIuYmluZGluZ0NvdW50KSxkaXNwb3NhYmxlczphLGluaXRJbmRleDotMX19ZnVuY3Rpb24gWXIodCxlLG4pe3QuY29tcG9uZW50PWUsdC5jb250ZXh0PW59ZnVuY3Rpb24gUXIodCl7dmFyIGU7ZWkodCkmJihlPUluKHQucGFyZW50LHQucGFyZW50Tm9kZURlZi5wYXJlbnQubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50KTtmb3IodmFyIG49dC5kZWYsaT10Lm5vZGVzLHI9MDtyPG4ubm9kZXMubGVuZ3RoO3IrKyl7dmFyIG89bi5ub2Rlc1tyXTtObi5zZXRDdXJyZW50Tm9kZSh0LHIpO3ZhciBhPXZvaWQgMDtzd2l0Y2goMjAxMzQ3MDY3Jm8uZmxhZ3Mpe2Nhc2UgMTp2YXIgcz13aSh0LGUsbyksdT12b2lkIDA7aWYoMzM1NTQ0MzImby5mbGFncyl7dmFyIGM9dWkoby5lbGVtZW50LmNvbXBvbmVudFZpZXcpO3U9Tm4uY3JlYXRlQ29tcG9uZW50Vmlldyh0LG8sYyxzKX14aSh0LHUsbyxzKSxhPXtyZW5kZXJFbGVtZW50OnMsY29tcG9uZW50Vmlldzp1LHZpZXdDb250YWluZXI6bnVsbCx0ZW1wbGF0ZTpvLmVsZW1lbnQudGVtcGxhdGU/V2kodCxvKTp2b2lkIDB9LDE2Nzc3MjE2Jm8uZmxhZ3MmJihhLnZpZXdDb250YWluZXI9VWkodCxvLGEpKTticmVhaztjYXNlIDI6YT1Gcih0LGUsbyk7YnJlYWs7Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDI1NjooYT1pW3JdKXx8NDA5NiZvLmZsYWdzfHwoYT17aW5zdGFuY2U6ZHIodCxvKX0pO2JyZWFrO2Nhc2UgMTY6YT17aW5zdGFuY2U6cHIodCxvKX07YnJlYWs7Y2FzZSAxNjM4NDooYT1pW3JdKXx8KGE9e2luc3RhbmNlOm1yKHQsbyl9KSwzMjc2OCZvLmZsYWdzJiZZcihJbih0LG8ucGFyZW50Lm5vZGVJbmRleCkuY29tcG9uZW50VmlldyxhLmluc3RhbmNlLGEuaW5zdGFuY2UpO2JyZWFrO2Nhc2UgMzI6Y2FzZSA2NDpjYXNlIDEyODphPXt2YWx1ZTp2b2lkIDB9O2JyZWFrO2Nhc2UgNjcxMDg4NjQ6Y2FzZSAxMzQyMTc3Mjg6YT1uZXcgZGU7YnJlYWs7Y2FzZSA4Ok1yKHQsZSxvKSxhPXZvaWQgMH1pW3JdPWF9aW8odCxuby5DcmVhdGVWaWV3Tm9kZXMpLHNvKHQsMjAxMzI2NTkyLDI2ODQzNTQ1NiwwKX1mdW5jdGlvbiBacih0KXskcih0KSxObi51cGRhdGVEaXJlY3RpdmVzKHQsMSkscm8odCxuby5DaGVja05vQ2hhbmdlcyksTm4udXBkYXRlUmVuZGVyZXIodCwxKSxpbyh0LG5vLkNoZWNrTm9DaGFuZ2VzKSx0LnN0YXRlJj0tOTd9ZnVuY3Rpb24gS3IodCl7MSZ0LnN0YXRlPyh0LnN0YXRlJj0tMix0LnN0YXRlfD0yKTp0LnN0YXRlJj0tMyxUbih0LDAsMjU2KSwkcih0KSxObi51cGRhdGVEaXJlY3RpdmVzKHQsMCkscm8odCxuby5DaGVja0FuZFVwZGF0ZSksc28odCw2NzEwODg2NCw1MzY4NzA5MTIsMCk7dmFyIGU9VG4odCwyNTYsNTEyKTtTcih0LDIwOTcxNTJ8KGU/MTA0ODU3NjowKSksTm4udXBkYXRlUmVuZGVyZXIodCwwKSxpbyh0LG5vLkNoZWNrQW5kVXBkYXRlKSxzbyh0LDEzNDIxNzcyOCw1MzY4NzA5MTIsMCksU3IodCw4Mzg4NjA4fCgoZT1Ubih0LDUxMiw3NjgpKT80MTk0MzA0OjApKSwyJnQuZGVmLmZsYWdzJiYodC5zdGF0ZSY9LTkpLHQuc3RhdGUmPS05NyxUbih0LDc2OCwxMDI0KX1mdW5jdGlvbiBYcih0LGUsbixyLG8sYSxzLHUsYyxsLGYsaCxkKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLHUsYyxsLGYpe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsdSxjLGwsZil7dmFyIGg9ZS5iaW5kaW5ncy5sZW5ndGgsZD0hMTtyZXR1cm4gaD4wJiZFaSh0LGUsMCxuKSYmKGQ9ITApLGg+MSYmRWkodCxlLDEsaSkmJihkPSEwKSxoPjImJkVpKHQsZSwyLHIpJiYoZD0hMCksaD4zJiZFaSh0LGUsMyxvKSYmKGQ9ITApLGg+NCYmRWkodCxlLDQsYSkmJihkPSEwKSxoPjUmJkVpKHQsZSw1LHMpJiYoZD0hMCksaD42JiZFaSh0LGUsNix1KSYmKGQ9ITApLGg+NyYmRWkodCxlLDcsYykmJihkPSEwKSxoPjgmJkVpKHQsZSw4LGwpJiYoZD0hMCksaD45JiZFaSh0LGUsOSxmKSYmKGQ9ITApLGR9KHQsZSxuLGkscixvLGEscyx1LGMsbCxmKTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGMsbCxmKXt2YXIgaD0hMSxkPWUuYmluZGluZ3MscD1kLmxlbmd0aDtpZihwPjAmJlluKHQsZSwwLG4pJiYoaD0hMCkscD4xJiZZbih0LGUsMSxpKSYmKGg9ITApLHA+MiYmWW4odCxlLDIscikmJihoPSEwKSxwPjMmJlluKHQsZSwzLG8pJiYoaD0hMCkscD40JiZZbih0LGUsNCxhKSYmKGg9ITApLHA+NSYmWW4odCxlLDUscykmJihoPSEwKSxwPjYmJlluKHQsZSw2LHUpJiYoaD0hMCkscD43JiZZbih0LGUsNyxjKSYmKGg9ITApLHA+OCYmWW4odCxlLDgsbCkmJihoPSEwKSxwPjkmJlluKHQsZSw5LGYpJiYoaD0hMCksaCl7dmFyIG09ZS50ZXh0LnByZWZpeDtwPjAmJihtKz16cihuLGRbMF0pKSxwPjEmJihtKz16cihpLGRbMV0pKSxwPjImJihtKz16cihyLGRbMl0pKSxwPjMmJihtKz16cihvLGRbM10pKSxwPjQmJihtKz16cihhLGRbNF0pKSxwPjUmJihtKz16cihzLGRbNV0pKSxwPjYmJihtKz16cih1LGRbNl0pKSxwPjcmJihtKz16cihjLGRbN10pKSxwPjgmJihtKz16cihsLGRbOF0pKSxwPjkmJihtKz16cihmLGRbOV0pKTt2YXIgeT1Bbih0LGUubm9kZUluZGV4KS5yZW5kZXJUZXh0O3QucmVuZGVyZXIuc2V0VmFsdWUoeSxtKX1yZXR1cm4gaH0odCxlLG4saSxyLG8sYSxzLHUsYyxsLGYpO2Nhc2UgMTYzODQ6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGMsbCxmKXt2YXIgaD1qbih0LGUubm9kZUluZGV4KSxkPWguaW5zdGFuY2UscD0hMSxtPXZvaWQgMCx5PWUuYmluZGluZ3MubGVuZ3RoO3JldHVybiB5PjAmJlduKHQsZSwwLG4pJiYocD0hMCxtPXhyKHQsaCxlLDAsbixtKSkseT4xJiZXbih0LGUsMSxpKSYmKHA9ITAsbT14cih0LGgsZSwxLGksbSkpLHk+MiYmV24odCxlLDIscikmJihwPSEwLG09eHIodCxoLGUsMixyLG0pKSx5PjMmJlduKHQsZSwzLG8pJiYocD0hMCxtPXhyKHQsaCxlLDMsbyxtKSkseT40JiZXbih0LGUsNCxhKSYmKHA9ITAsbT14cih0LGgsZSw0LGEsbSkpLHk+NSYmV24odCxlLDUscykmJihwPSEwLG09eHIodCxoLGUsNSxzLG0pKSx5PjYmJlduKHQsZSw2LHUpJiYocD0hMCxtPXhyKHQsaCxlLDYsdSxtKSkseT43JiZXbih0LGUsNyxjKSYmKHA9ITAsbT14cih0LGgsZSw3LGMsbSkpLHk+OCYmV24odCxlLDgsbCkmJihwPSEwLG09eHIodCxoLGUsOCxsLG0pKSx5PjkmJlduKHQsZSw5LGYpJiYocD0hMCxtPXhyKHQsaCxlLDksZixtKSksbSYmZC5uZ09uQ2hhbmdlcyhtKSw2NTUzNiZlLmZsYWdzJiZrbih0LDI1NixlLm5vZGVJbmRleCkmJmQubmdPbkluaXQoKSwyNjIxNDQmZS5mbGFncyYmZC5uZ0RvQ2hlY2soKSxwfSh0LGUsbixpLHIsbyxhLHMsdSxjLGwsZik7Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OnJldHVybiBmdW5jdGlvbih0LGUsbixpLHIsbyxhLHMsdSxjLGwsZil7dmFyIGg9ZS5iaW5kaW5ncyxkPSExLHA9aC5sZW5ndGg7aWYocD4wJiZZbih0LGUsMCxuKSYmKGQ9ITApLHA+MSYmWW4odCxlLDEsaSkmJihkPSEwKSxwPjImJlluKHQsZSwyLHIpJiYoZD0hMCkscD4zJiZZbih0LGUsMyxvKSYmKGQ9ITApLHA+NCYmWW4odCxlLDQsYSkmJihkPSEwKSxwPjUmJlluKHQsZSw1LHMpJiYoZD0hMCkscD42JiZZbih0LGUsNix1KSYmKGQ9ITApLHA+NyYmWW4odCxlLDcsYykmJihkPSEwKSxwPjgmJlluKHQsZSw4LGwpJiYoZD0hMCkscD45JiZZbih0LGUsOSxmKSYmKGQ9ITApLGQpe3ZhciBtPU1uKHQsZS5ub2RlSW5kZXgpLHk9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjp5PW5ldyBBcnJheShoLmxlbmd0aCkscD4wJiYoeVswXT1uKSxwPjEmJih5WzFdPWkpLHA+MiYmKHlbMl09cikscD4zJiYoeVszXT1vKSxwPjQmJih5WzRdPWEpLHA+NSYmKHlbNV09cykscD42JiYoeVs2XT11KSxwPjcmJih5WzddPWMpLHA+OCYmKHlbOF09bCkscD45JiYoeVs5XT1mKTticmVhaztjYXNlIDY0Onk9e30scD4wJiYoeVtoWzBdLm5hbWVdPW4pLHA+MSYmKHlbaFsxXS5uYW1lXT1pKSxwPjImJih5W2hbMl0ubmFtZV09cikscD4zJiYoeVtoWzNdLm5hbWVdPW8pLHA+NCYmKHlbaFs0XS5uYW1lXT1hKSxwPjUmJih5W2hbNV0ubmFtZV09cykscD42JiYoeVtoWzZdLm5hbWVdPXUpLHA+NyYmKHlbaFs3XS5uYW1lXT1jKSxwPjgmJih5W2hbOF0ubmFtZV09bCkscD45JiYoeVtoWzldLm5hbWVdPWYpO2JyZWFrO2Nhc2UgMTI4OnZhciB2PW47c3dpdGNoKHApe2Nhc2UgMTp5PXYudHJhbnNmb3JtKG4pO2JyZWFrO2Nhc2UgMjp5PXYudHJhbnNmb3JtKGkpO2JyZWFrO2Nhc2UgMzp5PXYudHJhbnNmb3JtKGkscik7YnJlYWs7Y2FzZSA0Onk9di50cmFuc2Zvcm0oaSxyLG8pO2JyZWFrO2Nhc2UgNTp5PXYudHJhbnNmb3JtKGkscixvLGEpO2JyZWFrO2Nhc2UgNjp5PXYudHJhbnNmb3JtKGkscixvLGEscyk7YnJlYWs7Y2FzZSA3Onk9di50cmFuc2Zvcm0oaSxyLG8sYSxzLHUpO2JyZWFrO2Nhc2UgODp5PXYudHJhbnNmb3JtKGkscixvLGEscyx1LGMpO2JyZWFrO2Nhc2UgOTp5PXYudHJhbnNmb3JtKGkscixvLGEscyx1LGMsbCk7YnJlYWs7Y2FzZSAxMDp5PXYudHJhbnNmb3JtKGkscixvLGEscyx1LGMsbCxmKX19bS52YWx1ZT15fXJldHVybiBkfSh0LGUsbixpLHIsbyxhLHMsdSxjLGwsZik7ZGVmYXVsdDp0aHJvdyJ1bnJlYWNoYWJsZSJ9fSh0LGUscixvLGEscyx1LGMsbCxmLGgsZCk6ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPSExLHI9MDtyPG4ubGVuZ3RoO3IrKylFaSh0LGUscixuW3JdKSYmKGk9ITApO3JldHVybiBpfSh0LGUsbik7Y2FzZSAyOnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPWUuYmluZGluZ3Mscj0hMSxvPTA7bzxuLmxlbmd0aDtvKyspWW4odCxlLG8sbltvXSkmJihyPSEwKTtpZihyKXt2YXIgYT0iIjtmb3Iobz0wO288bi5sZW5ndGg7bysrKWErPXpyKG5bb10saVtvXSk7YT1lLnRleHQucHJlZml4K2E7dmFyIHM9QW4odCxlLm5vZGVJbmRleCkucmVuZGVyVGV4dDt0LnJlbmRlcmVyLnNldFZhbHVlKHMsYSl9cmV0dXJuIHJ9KHQsZSxuKTtjYXNlIDE2Mzg0OnJldHVybiBmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPWpuKHQsZS5ub2RlSW5kZXgpLHI9aS5pbnN0YW5jZSxvPSExLGE9dm9pZCAwLHM9MDtzPG4ubGVuZ3RoO3MrKylXbih0LGUscyxuW3NdKSYmKG89ITAsYT14cih0LGksZSxzLG5bc10sYSkpO3JldHVybiBhJiZyLm5nT25DaGFuZ2VzKGEpLDY1NTM2JmUuZmxhZ3MmJmtuKHQsMjU2LGUubm9kZUluZGV4KSYmci5uZ09uSW5pdCgpLDI2MjE0NCZlLmZsYWdzJiZyLm5nRG9DaGVjaygpLG99KHQsZSxuKTtjYXNlIDMyOmNhc2UgNjQ6Y2FzZSAxMjg6cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9ZS5iaW5kaW5ncyxvPSExLGE9MDthPG4ubGVuZ3RoO2ErKylZbih0LGUsYSxuW2FdKSYmKG89ITApO2lmKG8pe3ZhciBzPU1uKHQsZS5ub2RlSW5kZXgpLHU9dm9pZCAwO3N3aXRjaCgyMDEzNDcwNjcmZS5mbGFncyl7Y2FzZSAzMjp1PW47YnJlYWs7Y2FzZSA2NDpmb3IodT17fSxhPTA7YTxuLmxlbmd0aDthKyspdVtyW2FdLm5hbWVdPW5bYV07YnJlYWs7Y2FzZSAxMjg6dmFyIGM9blswXSxsPW4uc2xpY2UoMSk7dT1jLnRyYW5zZm9ybS5hcHBseShjLE9iamVjdChpLmQpKGwpKX1zLnZhbHVlPXV9cmV0dXJuIG99KHQsZSxuKTtkZWZhdWx0OnRocm93InVucmVhY2hhYmxlIn19KHQsZSxyKX1mdW5jdGlvbiAkcih0KXt2YXIgZT10LmRlZjtpZig0JmUubm9kZUZsYWdzKWZvcih2YXIgbj0wO248ZS5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgaT1lLm5vZGVzW25dO2lmKDQmaS5mbGFncyl7dmFyIHI9SW4odCxuKS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGE9cltvXTthLnN0YXRlfD0zMixLbihhLHQpfX1lbHNlIDA9PSg0JmkuY2hpbGRGbGFncykmJihuKz1pLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBKcih0LGUsbixpLHIsbyxhLHMsdSxjLGwsZixoKXtyZXR1cm4gMD09PW4/ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzLHUsYyxsLGYpe3ZhciBoPWUuYmluZGluZ3MubGVuZ3RoO2g+MCYmUW4odCxlLDAsbiksaD4xJiZRbih0LGUsMSxpKSxoPjImJlFuKHQsZSwyLHIpLGg+MyYmUW4odCxlLDMsbyksaD40JiZRbih0LGUsNCxhKSxoPjUmJlFuKHQsZSw1LHMpLGg+NiYmUW4odCxlLDYsdSksaD43JiZRbih0LGUsNyxjKSxoPjgmJlFuKHQsZSw4LGwpLGg+OSYmUW4odCxlLDksZil9KHQsZSxpLHIsbyxhLHMsdSxjLGwsZixoKTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspUW4odCxlLGksbltpXSl9KHQsZSxpKSwhMX1mdW5jdGlvbiB0byh0LGUpe2lmKFBuKHQsZS5ub2RlSW5kZXgpLmRpcnR5KXRocm93IFJuKE5uLmNyZWF0ZURlYnVnQ29udGV4dCh0LGUubm9kZUluZGV4KSwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgbm90IGRpcnR5IiwiUXVlcnkgIitlLnF1ZXJ5LmlkKyIgZGlydHkiLDAhPSgxJnQuc3RhdGUpKX1mdW5jdGlvbiBlbyh0KXtpZighKDEyOCZ0LnN0YXRlKSl7aWYocm8odCxuby5EZXN0cm95KSxpbyh0LG5vLkRlc3Ryb3kpLFNyKHQsMTMxMDcyKSx0LmRpc3Bvc2FibGVzKWZvcih2YXIgZT0wO2U8dC5kaXNwb3NhYmxlcy5sZW5ndGg7ZSsrKXQuZGlzcG9zYWJsZXNbZV0oKTshZnVuY3Rpb24odCl7aWYoMTYmdC5zdGF0ZSl7dmFyIGU9JG4odCk7aWYoZSl7dmFyIG49ZS50ZW1wbGF0ZS5fcHJvamVjdGVkVmlld3M7biYmKExpKG4sbi5pbmRleE9mKHQpKSxObi5kaXJ0eVBhcmVudFF1ZXJpZXModCkpfX19KHQpLHQucmVuZGVyZXIuZGVzdHJveU5vZGUmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmRlZi5ub2Rlcy5sZW5ndGgsbj0wO248ZTtuKyspe3ZhciBpPXQuZGVmLm5vZGVzW25dOzEmaS5mbGFncz90LnJlbmRlcmVyLmRlc3Ryb3lOb2RlKEluKHQsbikucmVuZGVyRWxlbWVudCk6MiZpLmZsYWdzP3QucmVuZGVyZXIuZGVzdHJveU5vZGUoQW4odCxuKS5yZW5kZXJUZXh0KTooNjcxMDg4NjQmaS5mbGFnc3x8MTM0MjE3NzI4JmkuZmxhZ3MpJiZQbih0LG4pLmRlc3Ryb3koKX19KHQpLGVpKHQpJiZ0LnJlbmRlcmVyLmRlc3Ryb3koKSx0LnN0YXRlfD0xMjh9fXZhciBubz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LkNyZWF0ZVZpZXdOb2Rlcz0wXT0iQ3JlYXRlVmlld05vZGVzIix0W3QuQ2hlY2tOb0NoYW5nZXM9MV09IkNoZWNrTm9DaGFuZ2VzIix0W3QuQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cz0yXT0iQ2hlY2tOb0NoYW5nZXNQcm9qZWN0ZWRWaWV3cyIsdFt0LkNoZWNrQW5kVXBkYXRlPTNdPSJDaGVja0FuZFVwZGF0ZSIsdFt0LkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3M9NF09IkNoZWNrQW5kVXBkYXRlUHJvamVjdGVkVmlld3MiLHRbdC5EZXN0cm95PTVdPSJEZXN0cm95Iix0fSh7fSk7ZnVuY3Rpb24gaW8odCxlKXt2YXIgbj10LmRlZjtpZigzMzU1NDQzMiZuLm5vZGVGbGFncylmb3IodmFyIGk9MDtpPG4ubm9kZXMubGVuZ3RoO2krKyl7dmFyIHI9bi5ub2Rlc1tpXTszMzU1NDQzMiZyLmZsYWdzP29vKEluKHQsaSkuY29tcG9uZW50VmlldyxlKTowPT0oMzM1NTQ0MzImci5jaGlsZEZsYWdzKSYmKGkrPXIuY2hpbGRDb3VudCl9fWZ1bmN0aW9uIHJvKHQsZSl7dmFyIG49dC5kZWY7aWYoMTY3NzcyMTYmbi5ub2RlRmxhZ3MpZm9yKHZhciBpPTA7aTxuLm5vZGVzLmxlbmd0aDtpKyspe3ZhciByPW4ubm9kZXNbaV07aWYoMTY3NzcyMTYmci5mbGFncylmb3IodmFyIG89SW4odCxpKS52aWV3Q29udGFpbmVyLl9lbWJlZGRlZFZpZXdzLGE9MDthPG8ubGVuZ3RoO2ErKylvbyhvW2FdLGUpO2Vsc2UgMD09KDE2Nzc3MjE2JnIuY2hpbGRGbGFncykmJihpKz1yLmNoaWxkQ291bnQpfX1mdW5jdGlvbiBvbyh0LGUpe3ZhciBuPXQuc3RhdGU7c3dpdGNoKGUpe2Nhc2Ugbm8uQ2hlY2tOb0NoYW5nZXM6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/WnIodCk6NjQmbiYmYW8odCxuby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBuby5DaGVja05vQ2hhbmdlc1Byb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP1pyKHQpOjY0Jm4mJmFvKHQsZSkpO2JyZWFrO2Nhc2Ugbm8uQ2hlY2tBbmRVcGRhdGU6MD09KDEyOCZuKSYmKDEyPT0oMTImbik/S3IodCk6NjQmbiYmYW8odCxuby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzKSk7YnJlYWs7Y2FzZSBuby5DaGVja0FuZFVwZGF0ZVByb2plY3RlZFZpZXdzOjA9PSgxMjgmbikmJigzMiZuP0tyKHQpOjY0Jm4mJmFvKHQsZSkpO2JyZWFrO2Nhc2Ugbm8uRGVzdHJveTplbyh0KTticmVhaztjYXNlIG5vLkNyZWF0ZVZpZXdOb2RlczpRcih0KX19ZnVuY3Rpb24gYW8odCxlKXtybyh0LGUpLGlvKHQsZSl9ZnVuY3Rpb24gc28odCxlLG4saSl7aWYodC5kZWYubm9kZUZsYWdzJmUmJnQuZGVmLm5vZGVGbGFncyZuKWZvcih2YXIgcj10LmRlZi5ub2Rlcy5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPXQuZGVmLm5vZGVzW29dO2lmKGEuZmxhZ3MmZSYmYS5mbGFncyZuKXN3aXRjaChObi5zZXRDdXJyZW50Tm9kZSh0LGEubm9kZUluZGV4KSxpKXtjYXNlIDA6a3IodCxhKTticmVhaztjYXNlIDE6dG8odCxhKX1hLmNoaWxkRmxhZ3MmZSYmYS5jaGlsZEZsYWdzJm58fChvKz1hLmNoaWxkQ291bnQpfX12YXIgdW89ITE7ZnVuY3Rpb24gY28odCxlLG4saSxyLG8pe3JldHVybiBxcihmbyh0LHIsci5pbmplY3Rvci5nZXQodWUpLGUsbiksaSxvKX1mdW5jdGlvbiBsbyh0LGUsbixpLHIsbyl7dmFyIGE9ci5pbmplY3Rvci5nZXQodWUpLHM9Zm8odCxyLG5ldyBXbyhhKSxlLG4pLHU9eG8oaSk7cmV0dXJuIHFvKGpvLmNyZWF0ZSxxcixudWxsLFtzLHUsb10pfWZ1bmN0aW9uIGZvKHQsZSxuLGkscil7dmFyIG89ZS5pbmplY3Rvci5nZXQoT24pLGE9ZS5pbmplY3Rvci5nZXQoYXQpO3JldHVybntuZ01vZHVsZTplLGluamVjdG9yOnQscHJvamVjdGFibGVOb2RlczppLHNlbGVjdG9yT3JOb2RlOnIsc2FuaXRpemVyOm8scmVuZGVyZXJGYWN0b3J5Om4scmVuZGVyZXI6bi5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpLGVycm9ySGFuZGxlcjphfX1mdW5jdGlvbiBobyh0LGUsbixpKXt2YXIgcj14byhuKTtyZXR1cm4gcW8oam8uY3JlYXRlLEhyLG51bGwsW3QsZSxyLGldKX1mdW5jdGlvbiBwbyh0LGUsbixpKXtyZXR1cm4gbj1nby5nZXQoZS5lbGVtZW50LmNvbXBvbmVudFByb3ZpZGVyLnByb3ZpZGVyLnRva2VuKXx8eG8obikscW8oam8uY3JlYXRlLEdyLG51bGwsW3QsZSxuLGldKX1mdW5jdGlvbiBtbyh0LGUsbixpKXtyZXR1cm4gSmkodCxlLG4sZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGU9ITEsbj0hMTtyZXR1cm4gMD09PXlvLnNpemU/e2hhc092ZXJyaWRlczplLGhhc0RlcHJlY2F0ZWRPdmVycmlkZXM6bn06KHQucHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9eW8uZ2V0KHQudG9rZW4pOzM4NDAmdC5mbGFncyYmaSYmKGU9ITAsbj1ufHxpLmRlcHJlY2F0ZWRCZWhhdmlvcil9KSx0Lm1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt2by5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ci5uZ0luamVjdGFibGVEZWYucHJvdmlkZWRJbj09PXQmJihlPSEwLG49bnx8aS5kZXByZWNhdGVkQmVoYXZpb3IpfSl9KSx7aGFzT3ZlcnJpZGVzOmUsaGFzRGVwcmVjYXRlZE92ZXJyaWRlczpufSl9KHQpLG49ZS5oYXNEZXByZWNhdGVkT3ZlcnJpZGVzO3JldHVybiBlLmhhc092ZXJyaWRlcz8oZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0LnByb3ZpZGVycy5sZW5ndGg7ZSsrKXt2YXIgaT10LnByb3ZpZGVyc1tlXTtuJiYoaS5mbGFnc3w9NDA5Nik7dmFyIHI9eW8uZ2V0KGkudG9rZW4pO3ImJihpLmZsYWdzPS0zODQxJmkuZmxhZ3N8ci5mbGFncyxpLmRlcHM9b2koci5kZXBzKSxpLnZhbHVlPXIudmFsdWUpfWlmKHZvLnNpemU+MCl7dmFyIG89bmV3IFNldCh0Lm1vZHVsZXMpO3ZvLmZvckVhY2goZnVuY3Rpb24oZSxpKXtpZihvLmhhcyhpLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluKSl7dmFyIHI9e3Rva2VuOmksZmxhZ3M6ZS5mbGFnc3wobj80MDk2OjApLGRlcHM6b2koZS5kZXBzKSx2YWx1ZTplLnZhbHVlLGluZGV4OnQucHJvdmlkZXJzLmxlbmd0aH07dC5wcm92aWRlcnMucHVzaChyKSx0LnByb3ZpZGVyc0J5S2V5W1ZuKGkpXT1yfX0pfX0odD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gRm59KSksdCk6dH0oaSkpfXZhciB5bz1uZXcgTWFwLHZvPW5ldyBNYXAsZ289bmV3IE1hcDtmdW5jdGlvbiBibyh0KXt5by5zZXQodC50b2tlbix0KSwiZnVuY3Rpb24iPT10eXBlb2YgdC50b2tlbiYmdC50b2tlbi5uZ0luamVjdGFibGVEZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnRva2VuLm5nSW5qZWN0YWJsZURlZi5wcm92aWRlZEluJiZ2by5zZXQodC50b2tlbix0KX1mdW5jdGlvbiBfbyh0LGUpe3ZhciBuPXVpKHVpKGUudmlld0RlZkZhY3RvcnkpLm5vZGVzWzBdLmVsZW1lbnQuY29tcG9uZW50Vmlldyk7Z28uc2V0KHQsbil9ZnVuY3Rpb24gd28oKXt5by5jbGVhcigpLHZvLmNsZWFyKCksZ28uY2xlYXIoKX1mdW5jdGlvbiB4byh0KXtpZigwPT09eW8uc2l6ZSlyZXR1cm4gdDt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj1udWxsLGk9MDtpPHQubm9kZXMubGVuZ3RoO2krKyl7dmFyIHI9dC5ub2Rlc1tpXTsxJnIuZmxhZ3MmJihuPXIpLG4mJjM4NDAmci5mbGFncyYmeW8uaGFzKHIucHJvdmlkZXIudG9rZW4pJiYoZS5wdXNoKG4ubm9kZUluZGV4KSxuPW51bGwpfXJldHVybiBlfSh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQ7dD10LmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4gRm59KTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpKHQsZVtuXSk7cmV0dXJuIHQ7ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgbj1lKzE7bjx0Lm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPXQubm9kZXNbbl07aWYoMSZpLmZsYWdzKXJldHVybjtpZigzODQwJmkuZmxhZ3Mpe3ZhciByPWkucHJvdmlkZXIsbz15by5nZXQoci50b2tlbik7byYmKGkuZmxhZ3M9LTM4NDEmaS5mbGFnc3xvLmZsYWdzLHIuZGVwcz1vaShvLmRlcHMpLHIudmFsdWU9by52YWx1ZSl9fX19ZnVuY3Rpb24gU28odCxlLG4saSxyLG8sYSxzLHUsYyxsLGYsaCl7dmFyIGQ9dC5kZWYubm9kZXNbZV07cmV0dXJuIFhyKHQsZCxuLGkscixvLGEscyx1LGMsbCxmLGgpLDIyNCZkLmZsYWdzP01uKHQsZSkudmFsdWU6dm9pZCAwfWZ1bmN0aW9uIEVvKHQsZSxuLGkscixvLGEscyx1LGMsbCxmLGgpe3ZhciBkPXQuZGVmLm5vZGVzW2VdO3JldHVybiBKcih0LGQsbixpLHIsbyxhLHMsdSxjLGwsZixoKSwyMjQmZC5mbGFncz9Nbih0LGUpLnZhbHVlOnZvaWQgMH1mdW5jdGlvbiBDbyh0KXtyZXR1cm4gcW8oam8uZGV0ZWN0Q2hhbmdlcyxLcixudWxsLFt0XSl9ZnVuY3Rpb24gT28odCl7cmV0dXJuIHFvKGpvLmNoZWNrTm9DaGFuZ2VzLFpyLG51bGwsW3RdKX1mdW5jdGlvbiBUbyh0KXtyZXR1cm4gcW8oam8uZGVzdHJveSxlbyxudWxsLFt0XSl9dmFyIGtvLEFvLElvLGpvPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuY3JlYXRlPTBdPSJjcmVhdGUiLHRbdC5kZXRlY3RDaGFuZ2VzPTFdPSJkZXRlY3RDaGFuZ2VzIix0W3QuY2hlY2tOb0NoYW5nZXM9Ml09ImNoZWNrTm9DaGFuZ2VzIix0W3QuZGVzdHJveT0zXT0iZGVzdHJveSIsdFt0LmhhbmRsZUV2ZW50PTRdPSJoYW5kbGVFdmVudCIsdH0oe30pO2Z1bmN0aW9uIE1vKHQsZSl7QW89dCxJbz1lfWZ1bmN0aW9uIFBvKHQsZSxuLGkpe3JldHVybiBNbyh0LGUpLHFvKGpvLmhhbmRsZUV2ZW50LHQuZGVmLmhhbmRsZUV2ZW50LG51bGwsW3QsZSxuLGldKX1mdW5jdGlvbiBObyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IExuKGpvW2tvXSk7cmV0dXJuIE1vKHQsVm8odCwwKSksdC5kZWYudXBkYXRlRGlyZWN0aXZlcyhmdW5jdGlvbih0LG4saSl7Zm9yKHZhciByPVtdLG89MztvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXJbby0zXT1hcmd1bWVudHNbb107dmFyIGE9dC5kZWYubm9kZXNbbl07cmV0dXJuIDA9PT1lP0RvKHQsYSxpLHIpOkxvKHQsYSxpLHIpLDE2Mzg0JmEuZmxhZ3MmJk1vKHQsVm8odCxuKSksMjI0JmEuZmxhZ3M/TW4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBSbyh0LGUpe2lmKDEyOCZ0LnN0YXRlKXRocm93IExuKGpvW2tvXSk7cmV0dXJuIE1vKHQsQm8odCwwKSksdC5kZWYudXBkYXRlUmVuZGVyZXIoZnVuY3Rpb24odCxuLGkpe2Zvcih2YXIgcj1bXSxvPTM7bzxhcmd1bWVudHMubGVuZ3RoO28rKylyW28tM109YXJndW1lbnRzW29dO3ZhciBhPXQuZGVmLm5vZGVzW25dO3JldHVybiAwPT09ZT9Ebyh0LGEsaSxyKTpMbyh0LGEsaSxyKSwzJmEuZmxhZ3MmJk1vKHQsQm8odCxuKSksMjI0JmEuZmxhZ3M/TW4odCxhLm5vZGVJbmRleCkudmFsdWU6dm9pZCAwfSx0KX1mdW5jdGlvbiBEbyh0LGUsbixyKXtpZihYci5hcHBseSh2b2lkIDAsT2JqZWN0KGkuZCkoW3QsZSxuXSxyKSkpe3ZhciBvPTE9PT1uP3JbMF06cjtpZigxNjM4NCZlLmZsYWdzKXtmb3IodmFyIGE9e30scz0wO3M8ZS5iaW5kaW5ncy5sZW5ndGg7cysrKXt2YXIgdT1lLmJpbmRpbmdzW3NdLGM9b1tzXTs4JnUuZmxhZ3MmJihhWyhkPXUubm9uTWluaWZpZWROYW1lLCJuZy1yZWZsZWN0LSIrKGQ9ZC5yZXBsYWNlKC9bJEBdL2csIl8iKS5yZXBsYWNlKEZvLGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiItIit0WzFdLnRvTG93ZXJDYXNlKCl9KSkpXT16byhjKSl9dmFyIGw9ZS5wYXJlbnQsZj1Jbih0LGwubm9kZUluZGV4KS5yZW5kZXJFbGVtZW50O2lmKGwuZWxlbWVudC5uYW1lKWZvcih2YXIgaCBpbiBhKW51bGwhPShjPWFbaF0pP3QucmVuZGVyZXIuc2V0QXR0cmlidXRlKGYsaCxjKTp0LnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZShmLGgpO2Vsc2UgdC5yZW5kZXJlci5zZXRWYWx1ZShmLCJiaW5kaW5ncz0iK0pTT04uc3RyaW5naWZ5KGEsbnVsbCwyKSl9fXZhciBkfWZ1bmN0aW9uIExvKHQsZSxuLHIpe0pyLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShbdCxlLG5dLHIpKX12YXIgRm89LyhbQS1aXSkvZztmdW5jdGlvbiB6byh0KXt0cnl7cmV0dXJuIG51bGwhPXQ/dC50b1N0cmluZygpLnNsaWNlKDAsMzApOnR9Y2F0Y2godCl7cmV0dXJuIltFUlJPUl0gRXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBzZXJpYWxpemUgdGhlIHZhbHVlIn19ZnVuY3Rpb24gVm8odCxlKXtmb3IodmFyIG49ZTtuPHQuZGVmLm5vZGVzLmxlbmd0aDtuKyspe3ZhciBpPXQuZGVmLm5vZGVzW25dO2lmKDE2Mzg0JmkuZmxhZ3MmJmkuYmluZGluZ3MmJmkuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIEJvKHQsZSl7Zm9yKHZhciBuPWU7bjx0LmRlZi5ub2Rlcy5sZW5ndGg7bisrKXt2YXIgaT10LmRlZi5ub2Rlc1tuXTtpZigzJmkuZmxhZ3MmJmkuYmluZGluZ3MmJmkuYmluZGluZ3MubGVuZ3RoKXJldHVybiBufXJldHVybiBudWxsfXZhciBVbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnZpZXc9dCx0aGlzLm5vZGVJbmRleD1lLG51bGw9PWUmJih0aGlzLm5vZGVJbmRleD1lPTApLHRoaXMubm9kZURlZj10LmRlZi5ub2Rlc1tlXTtmb3IodmFyIG49dGhpcy5ub2RlRGVmLGk9dDtuJiYwPT0oMSZuLmZsYWdzKTspbj1uLnBhcmVudDtpZighbilmb3IoOyFuJiZpOyluPUpuKGkpLGk9aS5wYXJlbnQ7dGhpcy5lbERlZj1uLHRoaXMuZWxWaWV3PWl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZWxPckNvbXBWaWV3Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEluKHRoaXMuZWxWaWV3LHRoaXMuZWxEZWYubm9kZUluZGV4KS5jb21wb25lbnRWaWV3fHx0aGlzLnZpZXd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpbmplY3RvciIse2dldDpmdW5jdGlvbigpe3JldHVybiBRaSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNvbXBvbmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsT3JDb21wVmlldy5jb21wb25lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxPckNvbXBWaWV3LmNvbnRleHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwcm92aWRlclRva2VucyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2lmKHRoaXMuZWxEZWYpZm9yKHZhciBlPXRoaXMuZWxEZWYubm9kZUluZGV4KzE7ZTw9dGhpcy5lbERlZi5ub2RlSW5kZXgrdGhpcy5lbERlZi5jaGlsZENvdW50O2UrKyl7dmFyIG49dGhpcy5lbFZpZXcuZGVmLm5vZGVzW2VdOzIwMjI0Jm4uZmxhZ3MmJnQucHVzaChuLnByb3ZpZGVyLnRva2VuKSxlKz1uLmNoaWxkQ291bnR9cmV0dXJuIHR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWZlcmVuY2VzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5lbERlZil7SG8odGhpcy5lbFZpZXcsdGhpcy5lbERlZix0KTtmb3IodmFyIGU9dGhpcy5lbERlZi5ub2RlSW5kZXgrMTtlPD10aGlzLmVsRGVmLm5vZGVJbmRleCt0aGlzLmVsRGVmLmNoaWxkQ291bnQ7ZSsrKXt2YXIgbj10aGlzLmVsVmlldy5kZWYubm9kZXNbZV07MjAyMjQmbi5mbGFncyYmSG8odGhpcy5lbFZpZXcsbix0KSxlKz1uLmNoaWxkQ291bnR9fXJldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY29tcG9uZW50UmVuZGVyRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQpe2Zvcig7dCYmIWVpKHQpOyl0PXQucGFyZW50O3JldHVybiB0LnBhcmVudD9Jbih0LnBhcmVudCxKbih0KS5ub2RlSW5kZXgpOm51bGx9KHRoaXMuZWxPckNvbXBWaWV3KTtyZXR1cm4gdD90LnJlbmRlckVsZW1lbnQ6dm9pZCAwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicmVuZGVyTm9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiAyJnRoaXMubm9kZURlZi5mbGFncz90aSh0aGlzLnZpZXcsdGhpcy5ub2RlRGVmKTp0aSh0aGlzLmVsVmlldyx0aGlzLmVsRGVmKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5sb2dFcnJvcj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPVtdLG89MTtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXJbby0xXT1hcmd1bWVudHNbb107MiZ0aGlzLm5vZGVEZWYuZmxhZ3M/KGU9dGhpcy52aWV3LmRlZixuPXRoaXMubm9kZURlZi5ub2RlSW5kZXgpOihlPXRoaXMuZWxWaWV3LmRlZixuPXRoaXMuZWxEZWYubm9kZUluZGV4KTt2YXIgYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxpPTA7aTw9ZTtpKyspMyZ0Lm5vZGVzW2ldLmZsYWdzJiZuKys7cmV0dXJuIG59KGUsbikscz0tMTtlLmZhY3RvcnkoZnVuY3Rpb24oKXtyZXR1cm4rK3M9PT1hPyhlPXQuZXJyb3IpLmJpbmQuYXBwbHkoZSxPYmplY3QoaS5kKShbdF0scikpOkZuO3ZhciBlfSksczxhJiYodC5lcnJvcigiSWxsZWdhbCBzdGF0ZTogdGhlIFZpZXdEZWZpbml0aW9uRmFjdG9yeSBkaWQgbm90IGNhbGwgdGhlIGxvZ2dlciEiKSx0LmVycm9yLmFwcGx5KHQsT2JqZWN0KGkuZCkocikpKX0sdH0oKTtmdW5jdGlvbiBIbyh0LGUsbil7Zm9yKHZhciBpIGluIGUucmVmZXJlbmNlcyluW2ldPUlyKHQsZSxlLnJlZmVyZW5jZXNbaV0pfWZ1bmN0aW9uIHFvKHQsZSxuLGkpe3ZhciByPWtvLG89QW8sYT1Jbzt0cnl7a289dDt2YXIgcz1lLmFwcGx5KG4saSk7cmV0dXJuIEFvPW8sSW89YSxrbz1yLHN9Y2F0Y2godCl7aWYoaXQodCl8fCFBbyl0aHJvdyB0O3Rocm93IGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFcnJvcnx8KHQ9bmV3IEVycm9yKHQudG9TdHJpbmcoKSkpLERuKHQsZSksdH0odCxHbygpKX19ZnVuY3Rpb24gR28oKXtyZXR1cm4gQW8/bmV3IFVvKEFvLElvKTpudWxsfXZhciBXbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5kZWxlZ2F0ZT10fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVSZW5kZXJlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgWW8odGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpKX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLndoZW5SZW5kZXJpbmdEb25lP3RoaXMuZGVsZWdhdGUud2hlblJlbmRlcmluZ0RvbmUoKTpQcm9taXNlLnJlc29sdmUobnVsbCl9LHR9KCksWW89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVsZWdhdGU9dCx0aGlzLmRhdGE9dGhpcy5kZWxlZ2F0ZS5kYXRhfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95Tm9kZT1mdW5jdGlvbih0KXshZnVuY3Rpb24odCl7Q2UuZGVsZXRlKHQubmF0aXZlTm9kZSl9KE9lKHQpKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlJiZ0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlKHQpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9LHQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKSxpPUdvKCk7aWYoaSl7dmFyIHI9bmV3IHhlKG4sbnVsbCxpKTtyLm5hbWU9dCxUZShyKX1yZXR1cm4gbn0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQodCksbj1HbygpO3JldHVybiBuJiZUZShuZXcgd2UoZSxudWxsLG4pKSxlfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KSxuPUdvKCk7cmV0dXJuIG4mJlRlKG5ldyB3ZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dmFyIG49T2UodCksaT1PZShlKTtuJiZpJiZuIGluc3RhbmNlb2YgeGUmJm4uYWRkQ2hpbGQoaSksdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpfSx0LnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPU9lKHQpLHI9T2UoZSksbz1PZShuKTtpJiZyJiZpIGluc3RhbmNlb2YgeGUmJmkuaW5zZXJ0QmVmb3JlKG8sciksdGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUodCxlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPU9lKHQpLGk9T2UoZSk7biYmaSYmbiBpbnN0YW5jZW9mIHhlJiZuLnJlbW92ZUNoaWxkKGkpLHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQodCxlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0KSxuPUdvKCk7cmV0dXJuIG4mJlRlKG5ldyB4ZShlLG51bGwsbikpLGV9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1PZSh0KTtyJiZyIGluc3RhbmNlb2YgeGUmJihyLmF0dHJpYnV0ZXNbaT9pKyI6IitlOmVdPW4pLHRoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPU9lKHQpO2kmJmkgaW5zdGFuY2VvZiB4ZSYmKGkuYXR0cmlidXRlc1tuP24rIjoiK2U6ZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLG4pfSx0LnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPU9lKHQpO24mJm4gaW5zdGFuY2VvZiB4ZSYmKG4uY2xhc3Nlc1tlXT0hMCksdGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPU9lKHQpO24mJm4gaW5zdGFuY2VvZiB4ZSYmKG4uY2xhc3Nlc1tlXT0hMSksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj1PZSh0KTtyJiZyIGluc3RhbmNlb2YgeGUmJihyLnN0eWxlc1tlXT1uKSx0aGlzLmRlbGVnYXRlLnNldFN0eWxlKHQsZSxuLGkpfSx0LnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9T2UodCk7aSYmaSBpbnN0YW5jZW9mIHhlJiYoaS5zdHlsZXNbZV09bnVsbCksdGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsbil9LHQucHJvdG90eXBlLnNldFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1PZSh0KTtpJiZpIGluc3RhbmNlb2YgeGUmJihpLnByb3BlcnRpZXNbZV09biksdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXt2YXIgaT1PZSh0KTtpJiZpLmxpc3RlbmVycy5wdXNoKG5ldyBmdW5jdGlvbih0LGUpe3RoaXMubmFtZT10LHRoaXMuY2FsbGJhY2s9ZX0oZSxuKSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxuKX0sdC5wcm90b3R5cGUucGFyZW50Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wYXJlbnROb2RlKHQpfSx0LnByb3RvdHlwZS5uZXh0U2libGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX0sdC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfSx0fSgpO2Z1bmN0aW9uIFFvKHQsZSxuKXtyZXR1cm4gbmV3IFpvKHQsZSxuKX12YXIgWm89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLm1vZHVsZVR5cGU9ZSxyLl9ib290c3RyYXBDb21wb25lbnRzPW4sci5fbmdNb2R1bGVEZWZGYWN0b3J5PWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKCl7aWYoIXVvKXt1bz0hMDt2YXIgdD10ZSgpP3tzZXRDdXJyZW50Tm9kZTpNbyxjcmVhdGVSb290VmlldzpsbyxjcmVhdGVFbWJlZGRlZFZpZXc6aG8sY3JlYXRlQ29tcG9uZW50VmlldzpwbyxjcmVhdGVOZ01vZHVsZVJlZjptbyxvdmVycmlkZVByb3ZpZGVyOmJvLG92ZXJyaWRlQ29tcG9uZW50VmlldzpfbyxjbGVhck92ZXJyaWRlczp3byxjaGVja0FuZFVwZGF0ZVZpZXc6Q28sY2hlY2tOb0NoYW5nZXNWaWV3Ok9vLGRlc3Ryb3lWaWV3OlRvLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgVW8odCxlKX0saGFuZGxlRXZlbnQ6UG8sdXBkYXRlRGlyZWN0aXZlczpObyx1cGRhdGVSZW5kZXJlcjpSb306e3NldEN1cnJlbnROb2RlOmZ1bmN0aW9uKCl7fSxjcmVhdGVSb290VmlldzpjbyxjcmVhdGVFbWJlZGRlZFZpZXc6SHIsY3JlYXRlQ29tcG9uZW50VmlldzpHcixjcmVhdGVOZ01vZHVsZVJlZjpKaSxvdmVycmlkZVByb3ZpZGVyOkZuLG92ZXJyaWRlQ29tcG9uZW50VmlldzpGbixjbGVhck92ZXJyaWRlczpGbixjaGVja0FuZFVwZGF0ZVZpZXc6S3IsY2hlY2tOb0NoYW5nZXNWaWV3OlpyLGRlc3Ryb3lWaWV3OmVvLGNyZWF0ZURlYnVnQ29udGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgVW8odCxlKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQuZGVmLmhhbmRsZUV2ZW50KHQsZSxuLGkpfSx1cGRhdGVEaXJlY3RpdmVzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZURpcmVjdGl2ZXMoMD09PWU/U286RW8sdCl9LHVwZGF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGVmLnVwZGF0ZVJlbmRlcmVyKDA9PT1lP1NvOkVvLHQpfX07Tm4uc2V0Q3VycmVudE5vZGU9dC5zZXRDdXJyZW50Tm9kZSxObi5jcmVhdGVSb290Vmlldz10LmNyZWF0ZVJvb3RWaWV3LE5uLmNyZWF0ZUVtYmVkZGVkVmlldz10LmNyZWF0ZUVtYmVkZGVkVmlldyxObi5jcmVhdGVDb21wb25lbnRWaWV3PXQuY3JlYXRlQ29tcG9uZW50VmlldyxObi5jcmVhdGVOZ01vZHVsZVJlZj10LmNyZWF0ZU5nTW9kdWxlUmVmLE5uLm92ZXJyaWRlUHJvdmlkZXI9dC5vdmVycmlkZVByb3ZpZGVyLE5uLm92ZXJyaWRlQ29tcG9uZW50Vmlldz10Lm92ZXJyaWRlQ29tcG9uZW50VmlldyxObi5jbGVhck92ZXJyaWRlcz10LmNsZWFyT3ZlcnJpZGVzLE5uLmNoZWNrQW5kVXBkYXRlVmlldz10LmNoZWNrQW5kVXBkYXRlVmlldyxObi5jaGVja05vQ2hhbmdlc1ZpZXc9dC5jaGVja05vQ2hhbmdlc1ZpZXcsTm4uZGVzdHJveVZpZXc9dC5kZXN0cm95VmlldyxObi5yZXNvbHZlRGVwPV9yLE5uLmNyZWF0ZURlYnVnQ29udGV4dD10LmNyZWF0ZURlYnVnQ29udGV4dCxObi5oYW5kbGVFdmVudD10LmhhbmRsZUV2ZW50LE5uLnVwZGF0ZURpcmVjdGl2ZXM9dC51cGRhdGVEaXJlY3RpdmVzLE5uLnVwZGF0ZVJlbmRlcmVyPXQudXBkYXRlUmVuZGVyZXIsTm4uZGlydHlQYXJlbnRRdWVyaWVzPVRyfX0oKTt2YXIgZT11aSh0aGlzLl9uZ01vZHVsZURlZkZhY3RvcnkpO3JldHVybiBObi5jcmVhdGVOZ01vZHVsZVJlZih0aGlzLm1vZHVsZVR5cGUsdHx8Ti5OVUxMLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHMsZSl9LGV9KE10KTtmdW5jdGlvbiBLbyh0LGUsbil7dCE9ZSYmSm8obil9ZnVuY3Rpb24gWG8odCxlKXtudWxsIT10JiZKbyhlKX1mdW5jdGlvbiAkbyh0LGUpe251bGw9PXQmJkpvKGUpfWZ1bmN0aW9uIEpvKHQpe3Rocm93IG5ldyBFcnJvcigiQVNTRVJUSU9OIEVSUk9SOiAiK3QpfWZ1bmN0aW9uIHRhKHQsZSxuLGkpe3ZhciByPWk/ZTpuO3ImJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKz0yKWVbbisxXS5jYWxsKHRbZVtuXV0pfSh0LHIpfSJ1bmRlZmluZWQiPT10eXBlb2YgbmdEZXZNb2RlJiYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cubmdEZXZNb2RlPSEwKSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJihzZWxmLm5nRGV2TW9kZT0hMCksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwubmdEZXZNb2RlPSEwKSk7dmFyIGVhLG5hLGlhLHJhLG9hLGFhLHNhLHVhLGNhLGxhLGZhPSJfX25nSG9zdExOb2RlX18iLGhhPVByb21pc2UucmVzb2x2ZShudWxsKSxkYT1bMCwwXSxwYT1udWxsLG1hPSExO2Z1bmN0aW9uIHlhKHQsZSl7dmFyIG49cGE7cmV0dXJuIHVhPXQmJnQuZGF0YSxjYT10JiZ0LmRpcmVjdGl2ZXMsb2E9dCYmdC50Vmlldy5kYXRhLHNhPXQmJjE9PSgxJnQuZmxhZ3MpLGVhPXQmJnQucmVuZGVyZXIsdCYmdC5iaW5kaW5nSW5kZXg8MCYmKHQuYmluZGluZ0luZGV4PXQuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPWUmJihpYT1lLHJhPSEwKSxwYT10LGFhPXQmJnQucXVlcmllcyxufWZ1bmN0aW9uIHZhKHQpe21hfHx0YShjYSxwYS50Vmlldy52aWV3SG9va3MscGEudFZpZXcudmlld0NoZWNrSG9va3Msc2EpLHBhLmZsYWdzJj0tNixwYS5saWZlY3ljbGVTdGFnZT0xLHBhLmJpbmRpbmdJbmRleD0tMSx5YSh0LG51bGwpfWZ1bmN0aW9uIGdhKCl7X2EoKTt2YXIgdD1wYS50Vmlldzt0LmZpcnN0VGVtcGxhdGVQYXNzPSExLGJhKHQuaG9zdEJpbmRpbmdzKSxmdW5jdGlvbih0KXtpZihudWxsIT10KWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSs9MilTYSh0W2VdLHRbZSsxXSl9KHQuY29tcG9uZW50cyl9ZnVuY3Rpb24gYmEodCl7aWYobnVsbCE9dClmb3IodmFyIGU9cGEudFZpZXcuZGlyZWN0aXZlcyxuPTA7bjx0Lmxlbmd0aDtuKz0yKXt2YXIgaT10W25dLHI9ZVtpXTtyLmhvc3RCaW5kaW5ncyYmci5ob3N0QmluZGluZ3MoaSx0W24rMV0pfX1mdW5jdGlvbiBfYSgpe2lmKCFtYSl7dmFyIHQ9cGEudFZpZXc7KGZ1bmN0aW9uKHQsZSxuKXsxPT09dC5saWZlY3ljbGVTdGFnZSYmKHRhKHQuZGlyZWN0aXZlcyxlLmluaXRIb29rcyxlLmNoZWNrSG9va3MsbiksdC5saWZlY3ljbGVTdGFnZT0yKX0pKHBhLHQsc2EpLHRhKGNhLHQuY29udGVudEhvb2tzLHQuY29udGVudENoZWNrSG9va3Msc2EpfX1mdW5jdGlvbiB3YSh0LGUsbixpLHIsbyl7dmFyIGEscyx1LGMsbCxmLGgsZCxwLG09cmEseT1pYTt0cnl7cmE9ITAsaWE9bnVsbDt2YXIgdj0yO251bGw9PXQmJihzPW51bGwsdT0yLGM9bnVsbCxsPWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm57cGFyZW50OnBhLGlkOi0xLGZsYWdzOjExLG5vZGU6bnVsbCxkYXRhOltdLGRpcmVjdGl2ZXM6bnVsbCx0VmlldzpuLGNsZWFudXA6bnVsbCxyZW5kZXJlcjplLGNoaWxkOm51bGwsdGFpbDpudWxsLG5leHQ6bnVsbCxiaW5kaW5nU3RhcnRJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsdGVtcGxhdGU6aSxjb250ZXh0OnIsZHluYW1pY1ZpZXdDb3VudDowLGxpZmVjeWNsZVN0YWdlOjEscXVlcmllczpudWxsLGluamVjdG9yOnBhJiZwYS5pbmplY3Rvcn19KDAsaSxmdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubmdQcml2YXRlRGF0YXx8KHQubmdQcml2YXRlRGF0YT1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOltdLGRpcmVjdGl2ZXM6bnVsbCxmaXJzdFRlbXBsYXRlUGFzczohMCxpbml0SG9va3M6bnVsbCxjaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLHBpcGVEZXN0cm95SG9va3M6bnVsbCxob3N0QmluZGluZ3M6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dCgpOnQscGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2UoKTplLGN1cnJlbnRNYXRjaGVzOm51bGx9fShlLG4pKX0oZSxyfHxudWxsLG98fG51bGwpLGUsbiksZj1yYT9pYTppYSYmaWEucGFyZW50LGg9KHJhP2FhOmlhJiZpYS5xdWVyaWVzKXx8ZiYmZi5xdWVyaWVzJiZmLnF1ZXJpZXMuY2hpbGQoKSxwPWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm57dHlwZTp0LG5hdGl2ZTppLHZpZXc6ZSxwYXJlbnQ6bixjaGlsZDpudWxsLG5leHQ6bnVsbCxub2RlSW5qZWN0b3I6bj9uLm5vZGVJbmplY3RvcjpudWxsLGRhdGE6cixxdWVyaWVzOm8sdE5vZGU6bnVsbCxwTmV4dE9yUGFyZW50Om51bGwsZHluYW1pY0xDb250YWluZXJOb2RlOm51bGx9fSh1LHBhLGYsYywoZD1udWxsIT1sKT9sOm51bGwsaCksMj09KDImdSkmJmQmJihuZ0Rldk1vZGUmJlhvKGwubm9kZSwiTFZpZXcubm9kZSBzaG91bGQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLGwubm9kZT1wKSxudWxsIT1zJiYobmdEZXZNb2RlJiZmdW5jdGlvbih0LGUpe251bGw9PWUmJihlPXVhKSxLbyhlLmxlbmd0aCx0LCJpbmRleCAiK3QrIiBleHBlY3RlZCB0byBiZSBhdCB0aGUgZW5kIG9mIGFyciAobGVuZ3RoICIrZS5sZW5ndGgrIikiKX0ocyksdWFbc109cCxzPj1vYS5sZW5ndGg/b2Fbc109bnVsbDpwLnROb2RlPW9hW3NdLHJhPyhhYT1udWxsLGlhLnZpZXchPT1wYSYmMiE9PWlhLnR5cGV8fChuZ0Rldk1vZGUmJlhvKGlhLmNoaWxkLCJwcmV2aW91c09yUGFyZW50Tm9kZSdzIGNoaWxkIHNob3VsZCBub3QgaGF2ZSBiZWVuIHNldC4iKSxpYS5jaGlsZD1wKSk6aWEmJihuZ0Rldk1vZGUmJlhvKGlhLm5leHQsInByZXZpb3VzT3JQYXJlbnROb2RlJ3MgbmV4dCBwcm9wZXJ0eSBzaG91bGQgbm90IGhhdmUgYmVlbiBzZXQgIitzKyIuIiksaWEubmV4dD1wLGlhLmR5bmFtaWNMQ29udGFpbmVyTm9kZSYmKGlhLmR5bmFtaWNMQ29udGFpbmVyTm9kZS5uZXh0PXApKSksaWE9cCxyYT0hMCx0PXAsdj0xKSxhPXlhKHQuZGF0YSx0KSxlKHYsbiksZ2EoKSx4YSgpfWZpbmFsbHl7dmEoYSkscmE9bSxpYT15fXJldHVybiB0fWZ1bmN0aW9uIHhhKCl7Zm9yKHZhciB0PXBhLmNoaWxkO251bGwhPT10O3Q9dC5uZXh0KWlmKDAhPT10LmR5bmFtaWNWaWV3Q291bnQmJnQudmlld3MpZm9yKHZhciBlPXQsbj0wO248ZS52aWV3cy5sZW5ndGg7bisrKXt2YXIgaT1lLnZpZXdzW25dO3dhKGksaS5kYXRhLnRlbXBsYXRlLGkuZGF0YS5jb250ZXh0LGVhKX19ZnVuY3Rpb24gU2EodCxlKXtuZ0Rldk1vZGUmJk9hKGUpO3ZhciBuLGkscj11YVtlXTtuZ0Rldk1vZGUmJihpPTMsJG8obj1yLCJzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBub2RlIiksS28obi50eXBlLGksInNob3VsZCBiZSBhICIrZnVuY3Rpb24odCl7cmV0dXJuIDE9PXQ/IlByb2plY3Rpb24iOjA9PXQ/IkNvbnRhaW5lciI6Mj09dD8iVmlldyI6Mz09dD8iRWxlbWVudCI6Ijx1bmtub3duPiJ9KGkpKSksbmdEZXZNb2RlJiYkbyhyLmRhdGEsIkNvbXBvbmVudCdzIGhvc3Qgbm9kZSBzaG91bGQgaGF2ZSBhbiBMVmlldyBhdHRhY2hlZC4iKTt2YXIgbyxhPXIuZGF0YTs4PT0oOCZhLmZsYWdzKSYmNiZhLmZsYWdzJiYobmdEZXZNb2RlJiZPYSh0LGNhKSxDYShhLHIscGEudFZpZXcuZGlyZWN0aXZlc1t0XSwobz1jYVt0XSxBcnJheS5pc0FycmF5KG8pP29bMF06bykpKX1mdW5jdGlvbiBFYSh0KXt2YXIgZT1UYSh0KTtuZ0Rldk1vZGUmJiRvKGUuZGF0YSwiQ29tcG9uZW50IGhvc3Qgbm9kZSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gTFZpZXciKSxDYShlLmRhdGEsZSxlLnZpZXcudFZpZXcuZGlyZWN0aXZlc1tlLnROb2RlLmZsYWdzPj4xM10sdCl9ZnVuY3Rpb24gQ2EodCxlLG4saSl7dmFyIHI9eWEodCxlKSxvPW4udGVtcGxhdGU7dHJ5e28oMSZ0LmZsYWdzPzM6MixpKSxnYSgpLHhhKCl9ZmluYWxseXt2YShyKX19ZnVuY3Rpb24gT2EodCxlKXtudWxsPT1lJiYoZT11YSksdD49KGU/ZS5sZW5ndGg6MCkmJkpvKCJpbmRleCBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGRhdGEgaW5kZXgiKX1mdW5jdGlvbiBUYSh0KXtuZ0Rldk1vZGUmJiRvKHQsImV4cGVjdGluZyBjb21wb25lbnQgZ290IG51bGwiKTt2YXIgZT10W2ZhXTtyZXR1cm4gbmdEZXZNb2RlJiYkbyh0LCJvYmplY3QgaXMgbm90IGEgY29tcG9uZW50IiksZX1sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl92aWV3PXQsdGhpcy5jb250ZXh0PWV9cmV0dXJuIHQucHJvdG90eXBlLl9zZXRDb21wb25lbnRDb250ZXh0PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmlldz10LHRoaXMuY29udGV4dD1lfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7fSx0LnByb3RvdHlwZS5tYXJrRm9yQ2hlY2s9ZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQ7bnVsbCE9ZS5wYXJlbnQ7KWUuZmxhZ3N8PTQsZT1lLnBhcmVudDt2YXIgbixpO2UuZmxhZ3N8PTQsbmdEZXZNb2RlJiYkbyhlLmNvbnRleHQsInJvb3RDb250ZXh0IiksKG49ZS5jb250ZXh0KS5jbGVhbj09aGEmJihuLmNsZWFuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe3JldHVybiBpPXR9KSxuLnNjaGVkdWxlcihmdW5jdGlvbigpe3ZhciB0LGU7ZT1UYSgodD1mdW5jdGlvbih0KXtuZ0Rldk1vZGUmJiRvKHQsImNvbXBvbmVudCIpO2Zvcih2YXIgZT1UYSh0KS52aWV3O2UucGFyZW50OyllPWUucGFyZW50O3JldHVybiBlfShuLmNvbXBvbmVudCkpLmNvbnRleHQuY29tcG9uZW50KSxuZ0Rldk1vZGUmJiRvKGUuZGF0YSwiQ29tcG9uZW50IGhvc3Qgbm9kZSBzaG91bGQgYmUgYXR0YWNoZWQgdG8gYW4gTFZpZXciKSxmdW5jdGlvbihuLGkscixvKXt2YXIgYT15YSh0LGUpO3RyeXtuYS5iZWdpbiYmbmEuYmVnaW4oKSxfYSgpLGJhKGRhKSxTYSgwLDApfWZpbmFsbHl7bmEuZW5kJiZuYS5lbmQoKSx2YShhKX19KCksaShudWxsKSxuLmNsZWFuPWhhfSkpfSh0aGlzLl92aWV3KX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5mbGFncyY9LTl9LHQucHJvdG90eXBlLnJlYXR0YWNoPWZ1bmN0aW9uKCl7dGhpcy5fdmlldy5mbGFnc3w9OH0sdC5wcm90b3R5cGUuZGV0ZWN0Q2hhbmdlcz1mdW5jdGlvbigpe0VhKHRoaXMuY29udGV4dCl9LHQucHJvdG90eXBlLmNoZWNrTm9DaGFuZ2VzPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe21hPSEwO3RyeXtFYSh0KX1maW5hbGx5e21hPSExfX0odGhpcy5jb250ZXh0KX0sdH0oKSxPYmplY3QoaS5iKShmdW5jdGlvbih0LGUsbil7dmFyIGk9bGEuY2FsbCh0aGlzLHQuZGF0YSxuKXx8dGhpcztyZXR1cm4gaS5fbFZpZXdOb2RlPXQsaX0sbGEpfSxES1RiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LEVobWs6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpLHI9bigiZWlocyIpO2Z1bmN0aW9uIG8oKXt0cnl7cmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3JldHVybiByLmEuZT10LHIuYX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaT10LG99fSwiRW44KyI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCl9LCJGL1hMIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigibmtZNyIpLHI9bigiSVVUYiIpLG89bigiRzVKMSIpLGE9bigiUFU4TCIpO2Z1bmN0aW9uIHMoKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07dmFyIG49dFt0Lmxlbmd0aC0xXTtzd2l0Y2goT2JqZWN0KGkuYSkobik/dC5wb3AoKTpuPXZvaWQgMCx0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBPYmplY3Qoby5iKShuKTtjYXNlIDE6cmV0dXJuIG4/T2JqZWN0KHIuYSkodCxuKTpPYmplY3QoYS5hKSh0WzBdKTtkZWZhdWx0OnJldHVybiBPYmplY3Qoci5hKSh0LG4pfX19LEZGT286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIjJCZGoiKSxvPW4oIjZhaHciKSxhPW4oInB1Z1QiKSxzPW4oIkwvVjkiKSx1PW4oImlMeFEiKSxjPW4oIkRLVGIiKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2goci5zeW5jRXJyb3JWYWx1ZT1udWxsLHIuc3luY0Vycm9yVGhyb3duPSExLHIuc3luY0Vycm9yVGhyb3dhYmxlPSExLHIuaXNTdG9wcGVkPSExLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyLmRlc3RpbmF0aW9uPW8uYTticmVhaztjYXNlIDE6aWYoIWUpe3IuZGVzdGluYXRpb249by5hO2JyZWFrfWlmKCJvYmplY3QiPT10eXBlb2YgZSl7aWYoaChlKSl7dmFyIGE9ZVtzLmFdKCk7ci5zeW5jRXJyb3JUaHJvd2FibGU9YS5zeW5jRXJyb3JUaHJvd2FibGUsci5kZXN0aW5hdGlvbj1hLGEuYWRkKHIpfWVsc2Ugci5zeW5jRXJyb3JUaHJvd2FibGU9ITAsci5kZXN0aW5hdGlvbj1uZXcgZihyLGUpO2JyZWFrfWRlZmF1bHQ6ci5zeW5jRXJyb3JUaHJvd2FibGU9ITAsci5kZXN0aW5hdGlvbj1uZXcgZihyLGUsbixpKX1yZXR1cm4gcn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGVbcy5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLmNyZWF0ZT1mdW5jdGlvbih0LG4saSl7dmFyIHI9bmV3IGUodCxuLGkpO3JldHVybiByLnN5bmNFcnJvclRocm93YWJsZT0hMSxyfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuaXNTdG9wcGVkfHx0aGlzLl9uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2Vycm9yKHQpKX0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpfSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50LGU9dGhpcy5fcGFyZW50cztyZXR1cm4gdGhpcy5fcGFyZW50PW51bGwsdGhpcy5fcGFyZW50cz1udWxsLHRoaXMudW5zdWJzY3JpYmUoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9wYXJlbnRzPWUsdGhpc30sZX0oYS5hKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGksYSl7dmFyIHMsdT10LmNhbGwodGhpcyl8fHRoaXM7dS5fcGFyZW50U3Vic2NyaWJlcj1lO3ZhciBjPXU7cmV0dXJuIE9iamVjdChyLmEpKG4pP3M9bjpuJiYocz1uLm5leHQsaT1uLmVycm9yLGE9bi5jb21wbGV0ZSxuIT09by5hJiYoYz1PYmplY3QuY3JlYXRlKG4pLE9iamVjdChyLmEpKGMudW5zdWJzY3JpYmUpJiZ1LmFkZChjLnVuc3Vic2NyaWJlLmJpbmQoYykpLGMudW5zdWJzY3JpYmU9dS51bnN1YnNjcmliZS5iaW5kKHUpKSksdS5fY29udGV4dD1jLHUuX25leHQ9cyx1Ll9lcnJvcj1pLHUuX2NvbXBsZXRlPWEsdX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQmJnRoaXMuX25leHQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7dS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJmUuc3luY0Vycm9yVGhyb3dhYmxlP3RoaXMuX190cnlPclNldEVycm9yKGUsdGhpcy5fbmV4dCx0KSYmdGhpcy51bnN1YnNjcmliZSgpOnRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsdCl9fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXtpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXIsbj11LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZztpZih0aGlzLl9lcnJvciluJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSx0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9lcnJvcix0KSx0aGlzLnVuc3Vic2NyaWJlKCkpO2Vsc2UgaWYoZS5zeW5jRXJyb3JUaHJvd2FibGUpbj8oZS5zeW5jRXJyb3JWYWx1ZT10LGUuc3luY0Vycm9yVGhyb3duPSEwKTpPYmplY3QoYy5hKSh0KSx0aGlzLnVuc3Vic2NyaWJlKCk7ZWxzZXtpZih0aGlzLnVuc3Vic2NyaWJlKCksbil0aHJvdyB0O09iamVjdChjLmEpKHQpfX19LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5pc1N0b3BwZWQpe3ZhciBlPXRoaXMuX3BhcmVudFN1YnNjcmliZXI7aWYodGhpcy5fY29tcGxldGUpe3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbXBsZXRlLmNhbGwodC5fY29udGV4dCl9O3UuYS51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nJiZlLnN5bmNFcnJvclRocm93YWJsZT8odGhpcy5fX3RyeU9yU2V0RXJyb3IoZSxuKSx0aGlzLnVuc3Vic2NyaWJlKCkpOih0aGlzLl9fdHJ5T3JVbnN1YihuKSx0aGlzLnVuc3Vic2NyaWJlKCkpfWVsc2UgdGhpcy51bnN1YnNjcmliZSgpfX0sZS5wcm90b3R5cGUuX190cnlPclVuc3ViPWZ1bmN0aW9uKHQsZSl7dHJ5e3QuY2FsbCh0aGlzLl9jb250ZXh0LGUpfWNhdGNoKHQpe2lmKHRoaXMudW5zdWJzY3JpYmUoKSx1LmEudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl0aHJvdyB0O09iamVjdChjLmEpKHQpfX0sZS5wcm90b3R5cGUuX190cnlPclNldEVycm9yPWZ1bmN0aW9uKHQsZSxuKXtpZighdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpdGhyb3cgbmV3IEVycm9yKCJiYWQgY2FsbCIpO3RyeXtlLmNhbGwodGhpcy5fY29udGV4dCxuKX1jYXRjaChlKXtyZXR1cm4gdS5hLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/KHQuc3luY0Vycm9yVmFsdWU9ZSx0LnN5bmNFcnJvclRocm93bj0hMCwhMCk6KE9iamVjdChjLmEpKGUpLCEwKX1yZXR1cm4hMX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFyZW50U3Vic2NyaWJlcjt0aGlzLl9jb250ZXh0PW51bGwsdGhpcy5fcGFyZW50U3Vic2NyaWJlcj1udWxsLHQudW5zdWJzY3JpYmUoKX0sZX0obCk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGx8fCJzeW5jRXJyb3JUaHJvd2FibGUiaW4gdCYmdFtzLmFdfX0sRlZTeTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBhfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciBpPWZ1bmN0aW9uKCl7fSxyPWZ1bmN0aW9uKCl7fSxvPWZ1bmN0aW9uKCl7fSxhPWZ1bmN0aW9uKCl7fSxzPWZ1bmN0aW9uKCl7fSx1PWZ1bmN0aW9uKCl7fX0sRmJOOTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJDY25HIikscj0obigiOG1NciIpLG4oIkZ6cWMiKSxuKCJXZjRwIiksbigiZFdaZyIpLG4oIklwMFIiKSxpLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiQG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC10b29sYmFye291dGxpbmU6c29saWQgMXB4fX0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfS5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NjRweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo2NHB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjU2cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NTZweH19Il0sZGF0YTp7fX0pKTtmdW5jdGlvbiBvKHQpe3JldHVybiBpLmpiKDIsW2kuWWEobnVsbCwwKSxpLllhKG51bGwsMSldLG51bGwsbnVsbCl9fSxGeGIxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgaT1uKCI2YmxGIikscj1uKCIrdEo0Iiksbz1uKCJTNVhRIiksYT1uKCJ1NjdEIikscz1uKCJKY1J2IiksdT1uKCIyZVBsIiksYz1uKCIvV1l2IiksbD1uKCJNY1NvIiksZj1uKCJFbjgrIiksaD1uKCJ4VGxhIiksZD1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgaS5hKXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5faXNTY2FsYXI/KGUubmV4dCh0LnZhbHVlKSx2b2lkIGUuY29tcGxldGUoKSk6dC5zdWJzY3JpYmUoZSl9O2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2guYV0pcmV0dXJuIE9iamVjdChzLmEpKHQpO2lmKE9iamVjdCh1LmEpKHQpKXJldHVybiBPYmplY3Qoci5hKSh0KTtpZihPYmplY3QoYy5hKSh0KSlyZXR1cm4gT2JqZWN0KG8uYSkodCk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mIHRbZi5hXSlyZXR1cm4gT2JqZWN0KGEuYSkodCk7dmFyIGU9T2JqZWN0KGwuYSkodCk/ImFuIGludmFsaWQgb2JqZWN0IjoiJyIrdCsiJyI7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIrZSsiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIEFycmF5LCBvciBJdGVyYWJsZS4iKX19LEZ6cWM6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiSXAwUiIpLHI9bigiQ2NuRyIpLG89bmV3IHIubygiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyLlcpKGkuZCl9fSksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgci5tLHQmJih0aGlzLnZhbHVlPSh0LmJvZHk/dC5ib2R5LmRpcjpudWxsKXx8KHQuZG9jdW1lbnRFbGVtZW50P3QuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlcpKG8sOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxzPWZ1bmN0aW9uKCl7fX0sRzVKMTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCI2YmxGIikscj1uZXcgaS5hKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbXBsZXRlKCl9KTtmdW5jdGlvbiBvKHQpe3JldHVybiB0P2Z1bmN0aW9uKHQpe3JldHVybiBuZXcgaS5hKGZ1bmN0aW9uKGUpe3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY29tcGxldGUoKX0pfSl9KHQpOnJ9fSxHaTNpOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgaT1uKCJtclNHIikscj1uKCJGRk9vIiksbz1uKCJUMURNIik7ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1vLmEpLGZ1bmN0aW9uKG4pe3JldHVybiBuLmxpZnQobmV3IHModCxlKSl9fXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZHVlVGltZT10LHRoaXMuc2NoZWR1bGVyPWV9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHUodCx0aGlzLmR1ZVRpbWUsdGhpcy5zY2hlZHVsZXIpKX0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLmR1ZVRpbWU9bixyLnNjaGVkdWxlcj1pLHIuZGVib3VuY2VkU3Vic2NyaXB0aW9uPW51bGwsci5sYXN0VmFsdWU9bnVsbCxyLmhhc1ZhbHVlPSExLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMubGFzdFZhbHVlPXQsdGhpcy5oYXNWYWx1ZT0hMCx0aGlzLmFkZCh0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbj10aGlzLnNjaGVkdWxlci5zY2hlZHVsZShjLHRoaXMuZHVlVGltZSx0aGlzKSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuZGVib3VuY2VkTmV4dCgpLHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUuZGVib3VuY2VkTmV4dD1mdW5jdGlvbigpe2lmKHRoaXMuY2xlYXJEZWJvdW5jZSgpLHRoaXMuaGFzVmFsdWUpe3ZhciB0PXRoaXMubGFzdFZhbHVlO3RoaXMubGFzdFZhbHVlPW51bGwsdGhpcy5oYXNWYWx1ZT0hMSx0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9fSxlLnByb3RvdHlwZS5jbGVhckRlYm91bmNlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb247bnVsbCE9PXQmJih0aGlzLnJlbW92ZSh0KSx0LnVuc3Vic2NyaWJlKCksdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb249bnVsbCl9LGV9KHIuYSk7ZnVuY3Rpb24gYyh0KXt0LmRlYm91bmNlZE5leHQoKX19LElVVGI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIjZibEYiKSxyPW4oInB1Z1QiKSxvPW4oIit0SjQiKTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBpLmEoZT9mdW5jdGlvbihuKXt2YXIgaT1uZXcgci5hLG89MDtyZXR1cm4gaS5hZGQoZS5zY2hlZHVsZShmdW5jdGlvbigpe28hPT10Lmxlbmd0aD8obi5uZXh0KHRbbysrXSksbi5jbG9zZWR8fGkuYWRkKHRoaXMuc2NoZWR1bGUoKSkpOm4uY29tcGxldGUoKX0pKSxpfTpPYmplY3Qoby5hKSh0KSl9fSxJcDBSOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsInQiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsInUiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gUH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pLG4uZChlLCJzIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiciIsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBjfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibXJTRyIpLG89ZnVuY3Rpb24oKXt9LGE9bmV3IGkubygiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKSxzPWZ1bmN0aW9uKCl7fSx1PW5ldyBpLm8oImFwcEJhc2VIcmVmIiksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dmFyIG49dGhpczt0aGlzLl9zdWJqZWN0PW5ldyBpLm0sdGhpcy5fcGxhdGZvcm1TdHJhdGVneT1lO3ZhciByPXRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj10LnN0cmlwVHJhaWxpbmdTbGFzaChsKHIpKSx0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5Lm9uUG9wU3RhdGUoZnVuY3Rpb24odCl7bi5fc3ViamVjdC5lbWl0KHt1cmw6bi5wYXRoKCEwKSxwb3A6ITAsc3RhdGU6dC5zdGF0ZSx0eXBlOnQudHlwZX0pfSl9cmV0dXJuIHQucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSExKSx0aGlzLm5vcm1hbGl6ZSh0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LnBhdGgodCkpfSx0LnByb3RvdHlwZS5pc0N1cnJlbnRQYXRoRXF1YWxUbz1mdW5jdGlvbihlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0iIiksdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrdC5ub3JtYWxpemVRdWVyeVBhcmFtcyhuKSl9LHQucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZS5zdGFydHNXaXRoKHQpP2Uuc3Vic3RyaW5nKHQubGVuZ3RoKTplfSh0aGlzLl9iYXNlSHJlZixsKGUpKSl9LHQucHJvdG90eXBlLnByZXBhcmVFeHRlcm5hbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHQpfSx0LnByb3RvdHlwZS5nbz1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09ZSYmKGU9IiIpLHZvaWQgMD09PW4mJihuPW51bGwpLHRoaXMuX3BsYXRmb3JtU3RyYXRlZ3kucHVzaFN0YXRlKG4sIiIsdCxlKX0sdC5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuKXt2b2lkIDA9PT1lJiYoZT0iIiksdm9pZCAwPT09biYmKG49bnVsbCksdGhpcy5fcGxhdGZvcm1TdHJhdGVneS5yZXBsYWNlU3RhdGUobiwiIix0LGUpfSx0LnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1TdHJhdGVneS5mb3J3YXJkKCl9LHQucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybVN0cmF0ZWd5LmJhY2soKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6dCxlcnJvcjplLGNvbXBsZXRlOm59KX0sdC5ub3JtYWxpemVRdWVyeVBhcmFtcz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmIj8iIT09dFswXT8iPyIrdDp0fSx0LmpvaW5XaXRoU2xhc2g9ZnVuY3Rpb24odCxlKXtpZigwPT10Lmxlbmd0aClyZXR1cm4gZTtpZigwPT1lLmxlbmd0aClyZXR1cm4gdDt2YXIgbj0wO3JldHVybiB0LmVuZHNXaXRoKCIvIikmJm4rKyxlLnN0YXJ0c1dpdGgoIi8iKSYmbisrLDI9PW4/dCtlLnN1YnN0cmluZygxKToxPT1uP3QrZTp0KyIvIitlfSx0LnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8jfFw/fCQvKSxuPWUmJmUuaW5kZXh8fHQubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAsbi0oIi8iPT09dFtuLTFdPzE6MCkpK3Quc2xpY2Uobil9LHR9KCk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fcGxhdGZvcm1Mb2NhdGlvbj1lLGkuX2Jhc2VIcmVmPSIiLG51bGwhPW4mJihpLl9iYXNlSHJlZj1uKSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucGF0aD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMSk7dmFyIGU9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1lJiYoZT0iIyIpLGUubGVuZ3RoPjA/ZS5zdWJzdHJpbmcoMSk6ZX0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPWMuam9pbldpdGhTbGFzaCh0aGlzLl9iYXNlSHJlZix0KTtyZXR1cm4gZS5sZW5ndGg+MD8iIyIrZTplfSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitjLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGkpKTswPT1yLmxlbmd0aCYmKHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwobitjLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zKGkpKTswPT1yLmxlbmd0aCYmKHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksaD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO2lmKGkuX3BsYXRmb3JtTG9jYXRpb249ZSxudWxsPT1uJiYobj1pLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpKSxudWxsPT1uKXRocm93IG5ldyBFcnJvcigiTm8gYmFzZSBocmVmIHNldC4gUGxlYXNlIHByb3ZpZGUgYSB2YWx1ZSBmb3IgdGhlIEFQUF9CQVNFX0hSRUYgdG9rZW4gb3IgYWRkIGEgYmFzZSBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC4iKTtyZXR1cm4gaS5fYmFzZUhyZWY9bixpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLGUucHJvdG90eXBlLm9uUG9wU3RhdGU9ZnVuY3Rpb24odCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKHQpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKHQpfSxlLnByb3RvdHlwZS5nZXRCYXNlSHJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn0sZS5wcm90b3R5cGUucHJlcGFyZUV4dGVybmFsVXJsPWZ1bmN0aW9uKHQpe3JldHVybiBjLmpvaW5XaXRoU2xhc2godGhpcy5fYmFzZUhyZWYsdCl9LGUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBlPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrYy5ub3JtYWxpemVRdWVyeVBhcmFtcyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksbj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJnQ/IiIrZStuOmV9LGUucHJvdG90eXBlLnB1c2hTdGF0ZT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChuK2Mubm9ybWFsaXplUXVlcnlQYXJhbXMoaSkpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKHQsZSxyKX0sZS5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKG4rYy5ub3JtYWxpemVRdWVyeVBhcmFtcyhpKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUodCxlLHIpfSxlLnByb3RvdHlwZS5mb3J3YXJkPWZ1bmN0aW9uKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9LGUucHJvdG90eXBlLmJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX0sZX0ocyksZD12b2lkIDAscD1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGRdLFtbIkFNIiwiUE0iXSxkLGRdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGQsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGQsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixkLCJ7MX0gJ2F0JyB7MH0iLGRdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiJCIsIlVTIERvbGxhciIse30sZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLmFicyh0KSksbj10LnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PW4/MTo1fV0sbT17fSx5PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuWmVybz0wXT0iWmVybyIsdFt0Lk9uZT0xXT0iT25lIix0W3QuVHdvPTJdPSJUd28iLHRbdC5GZXc9M109IkZldyIsdFt0Lk1hbnk9NF09Ik1hbnkiLHRbdC5PdGhlcj01XT0iT3RoZXIiLHR9KHt9KSx2PW5ldyBpLm8oIlVzZVY0UGx1cmFscyIpLGc9ZnVuY3Rpb24oKXt9LGI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5sb2NhbGU9ZSxpLmRlcHJlY2F0ZWRQbHVyYWxGbj1uLGl9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0UGx1cmFsQ2F0ZWdvcnk9ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5kZXByZWNhdGVkUGx1cmFsRm4/dGhpcy5kZXByZWNhdGVkUGx1cmFsRm4oZXx8dGhpcy5sb2NhbGUsdCk6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSxuPW1bZV07aWYobilyZXR1cm4gbjt2YXIgaT1lLnNwbGl0KCItIilbMF07aWYobj1tW2ldKXJldHVybiBuO2lmKCJlbiI9PT1pKXJldHVybiBwO3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJyt0KyciLicpfSh0KVsxOF19KGV8fHRoaXMubG9jYWxlKSh0KSl7Y2FzZSB5Llplcm86cmV0dXJuInplcm8iO2Nhc2UgeS5PbmU6cmV0dXJuIm9uZSI7Y2FzZSB5LlR3bzpyZXR1cm4idHdvIjtjYXNlIHkuRmV3OnJldHVybiJmZXciO2Nhc2UgeS5NYW55OnJldHVybiJtYW55IjtkZWZhdWx0OnJldHVybiJvdGhlciJ9fSxlfShnKTtmdW5jdGlvbiBfKHQsZSl7ZT1lbmNvZGVVUklDb21wb25lbnQoZSk7dHJ5e2Zvcih2YXIgbj1PYmplY3Qoci5lKSh0LnNwbGl0KCI7IikpLGk9bi5uZXh0KCk7IWkuZG9uZTtpPW4ubmV4dCgpKXt2YXIgbz1pLnZhbHVlLGE9by5pbmRleE9mKCI9Iikscz1PYmplY3Qoci5jKSgtMT09YT9bbywiIl06W28uc2xpY2UoMCxhKSxvLnNsaWNlKGErMSldLDIpLHU9c1sxXTtpZihzWzBdLnRyaW0oKT09PWUpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1KX19Y2F0Y2godCl7Yz17ZXJyb3I6dH19ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKGw9bi5yZXR1cm4pJiZsLmNhbGwobil9ZmluYWxseXtpZihjKXRocm93IGMuZXJyb3J9fXJldHVybiBudWxsO3ZhciBjLGx9dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz10LHRoaXMuX2tleVZhbHVlRGlmZmVycz1lLHRoaXMuX25nRWw9bix0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX2luaXRpYWxDbGFzc2VzPVtdfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImtsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2luaXRpYWxDbGFzc2VzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTpbXSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9yYXdDbGFzcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0NsYXNzIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KC9ccysvKTp0LHRoaXMuX3Jhd0NsYXNzJiYoT2JqZWN0KGkuU2EpKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ0RvQ2hlY2s9ZnVuY3Rpb24oKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7dmFyIHQ9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7dCYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXModCl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7dmFyIGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fSx0LnByb3RvdHlwZS5fYXBwbHlLZXlWYWx1ZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQua2V5LHQuY3VycmVudFZhbHVlKX0pLHQuZm9yRWFjaENoYW5nZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXt0LnByZXZpb3VzVmFsdWUmJmUuX3RvZ2dsZUNsYXNzKHQua2V5LCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlJdGVyYWJsZUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0LmZvckVhY2hBZGRlZEl0ZW0oZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lml0ZW0pdGhyb3cgbmV3IEVycm9yKCJOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICIrT2JqZWN0KGkuZ2IpKHQuaXRlbSkpO2UuX3RvZ2dsZUNsYXNzKHQuaXRlbSwhMCl9KSx0LmZvckVhY2hSZW1vdmVkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModC5pdGVtLCExKX0pfSx0LnByb3RvdHlwZS5fYXBwbHlDbGFzc2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmKEFycmF5LmlzQXJyYXkodCl8fHQgaW5zdGFuY2VvZiBTZXQ/dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90b2dnbGVDbGFzcyh0LCEwKX0pOk9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKG4sISF0W25dKX0pKX0sdC5wcm90b3R5cGUuX3JlbW92ZUNsYXNzZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIFNldD90LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuX3RvZ2dsZUNsYXNzKHQsITEpfSk6T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5fdG9nZ2xlQ2xhc3ModCwhMSl9KSl9LHQucHJvdG90eXBlLl90b2dnbGVDbGFzcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7KHQ9dC50cmltKCkpJiZ0LnNwbGl0KC9ccysvZykuZm9yRWFjaChmdW5jdGlvbih0KXtlP24uX3JlbmRlcmVyLmFkZENsYXNzKG4uX25nRWwubmF0aXZlRWxlbWVudCx0KTpuLl9yZW5kZXJlci5yZW1vdmVDbGFzcyhuLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsdCl9KX0sdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9bix0aGlzLmNvdW50PWl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsYXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJldmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXglMj09MH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9kZCIse2dldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmV2ZW59LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdmlld0NvbnRhaW5lcj10LHRoaXMuX3RlbXBsYXRlPWUsdGhpcy5fZGlmZmVycz1uLHRoaXMuX2RpZmZlcj1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nRm9yVHJhY2tCeSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFja0J5Rm59LHNldDpmdW5jdGlvbih0KXtPYmplY3QoaS5YKSgpJiZudWxsIT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdCYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInRyYWNrQnkgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgIitKU09OLnN0cmluZ2lmeSh0KSsiLiBTZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2FwaS9jb21tb24vaW5kZXgvTmdGb3ItZGlyZWN0aXZlLmh0bWwjISNjaGFuZ2UtcHJvcGFnYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiksdGhpcy5fdHJhY2tCeUZuPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0ZvclRlbXBsYXRlIix7c2V0OmZ1bmN0aW9uKHQpe3QmJih0aGlzLl90ZW1wbGF0ZT10KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbih0KXtpZigibmdGb3JPZiJpbiB0KXt2YXIgZT10Lm5nRm9yT2YuY3VycmVudFZhbHVlO2lmKCF0aGlzLl9kaWZmZXImJmUpdHJ5e3RoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoZSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KX1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGEgZGlmZmVyIHN1cHBvcnRpbmcgb2JqZWN0ICciK2UrIicgb2YgdHlwZSAnIisoKG49ZSkubmFtZXx8dHlwZW9mIG4pKyInLiBOZ0ZvciBvbmx5IHN1cHBvcnRzIGJpbmRpbmcgdG8gSXRlcmFibGVzIHN1Y2ggYXMgQXJyYXlzLiIpfX12YXIgbn0sdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLm5nRm9yT2YpO3QmJnRoaXMuX2FwcGx5Q2hhbmdlcyh0KX19LHQucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVtdO3QuZm9yRWFjaE9wZXJhdGlvbihmdW5jdGlvbih0LGkscil7aWYobnVsbD09dC5wcmV2aW91c0luZGV4KXt2YXIgbz1lLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhlLl90ZW1wbGF0ZSxuZXcgeChudWxsLGUubmdGb3JPZiwtMSwtMSksciksYT1uZXcgRSh0LG8pO24ucHVzaChhKX1lbHNlIG51bGw9PXI/ZS5fdmlld0NvbnRhaW5lci5yZW1vdmUoaSk6KG89ZS5fdmlld0NvbnRhaW5lci5nZXQoaSksZS5fdmlld0NvbnRhaW5lci5tb3ZlKG8sciksYT1uZXcgRSh0LG8pLG4ucHVzaChhKSl9KTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl0aGlzLl9wZXJWaWV3Q2hhbmdlKG5baV0udmlldyxuW2ldLnJlY29yZCk7aT0wO2Zvcih2YXIgcj10aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDtpPHI7aSsrKXt2YXIgbz10aGlzLl92aWV3Q29udGFpbmVyLmdldChpKTtvLmNvbnRleHQuaW5kZXg9aSxvLmNvbnRleHQuY291bnQ9cixvLmNvbnRleHQubmdGb3JPZj10aGlzLm5nRm9yT2Z9dC5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZnVuY3Rpb24odCl7ZS5fdmlld0NvbnRhaW5lci5nZXQodC5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX0pfSx0LnByb3RvdHlwZS5fcGVyVmlld0NoYW5nZT1mdW5jdGlvbih0LGUpe3QuY29udGV4dC4kaW1wbGljaXQ9ZS5pdGVtfSx0fSgpLEU9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY29yZD10LHRoaXMudmlldz1lfSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdDb250YWluZXI9dCx0aGlzLl9jb250ZXh0PW5ldyBPLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ0lmIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj10LHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZUaGVuIix7c2V0OmZ1bmN0aW9uKHQpe1QoIm5nSWZUaGVuIix0KSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9dCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm5nSWZFbHNlIix7c2V0OmZ1bmN0aW9uKHQpe1QoIm5nSWZFbHNlIix0KSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9dCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdXBkYXRlVmlldz1mdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX0sdH0oKSxPPWZ1bmN0aW9uKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH07ZnVuY3Rpb24gVCh0LGUpe2lmKGUmJiFlLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICciK09iamVjdChpLmdiKShlKSsiJy4iKX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX2RpZmZlcnM9dCx0aGlzLl9uZ0VsPWUsdGhpcy5fcmVuZGVyZXI9bn1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJuZ1N0eWxlIix7c2V0OmZ1bmN0aW9uKHQpe3RoaXMuX25nU3R5bGU9dCwhdGhpcy5fZGlmZmVyJiZ0JiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZCh0KS5jcmVhdGUoKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdEb0NoZWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGlmZmVyKXt2YXIgdD10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTt0JiZ0aGlzLl9hcHBseUNoYW5nZXModCl9fSx0LnByb3RvdHlwZS5fYXBwbHlDaGFuZ2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5mb3JFYWNoUmVtb3ZlZEl0ZW0oZnVuY3Rpb24odCl7cmV0dXJuIGUuX3NldFN0eWxlKHQua2V5LG51bGwpfSksdC5mb3JFYWNoQWRkZWRJdGVtKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zZXRTdHlsZSh0LmtleSx0LmN1cnJlbnRWYWx1ZSl9KSx0LmZvckVhY2hDaGFuZ2VkSXRlbShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3R5bGUodC5rZXksdC5jdXJyZW50VmFsdWUpfSl9LHQucHJvdG90eXBlLl9zZXRTdHlsZT1mdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdChyLmMpKHQuc3BsaXQoIi4iKSwyKSxpPW5bMF0sbz1uWzFdO251bGwhPShlPW51bGwhPWUmJm8/IiIrZStvOmUpP3RoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxpLGUpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxpKX0sdH0oKSxBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlU3Vic2NyaXB0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgdH19KX0sdC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9LHR9KCksST1uZXcoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jcmVhdGVTdWJzY3JpcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50aGVuKGUsZnVuY3Rpb24odCl7dGhyb3cgdH0pfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe30sdH0oKSksaj1uZXcgQSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9yZWY9dCx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX2xhdGVzdFJldHVybmVkVmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpfSx0LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29iaj90IT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0odCkpOnRoaXMuX2xhdGVzdFZhbHVlPT09dGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT90aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlOih0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLGkuUS53cmFwKHRoaXMuX2xhdGVzdFZhbHVlKSk6KHQmJnRoaXMuX3N1YnNjcmliZSh0KSx0aGlzLl9sYXRlc3RSZXR1cm5lZFZhbHVlPXRoaXMuX2xhdGVzdFZhbHVlLHRoaXMuX2xhdGVzdFZhbHVlKX0sdC5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX29iaj10LHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KHQpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24odCxmdW5jdGlvbihuKXtyZXR1cm4gZS5fdXBkYXRlTGF0ZXN0VmFsdWUodCxuKX0pfSx0LnByb3RvdHlwZS5fc2VsZWN0U3RyYXRlZ3k9ZnVuY3Rpb24oZSl7aWYoT2JqZWN0KGkuVWEpKGUpKXJldHVybiBJO2lmKE9iamVjdChpLlRhKShlKSlyZXR1cm4gajt0aHJvdyBuPXQsRXJyb3IoIkludmFsaWRQaXBlQXJndW1lbnQ6ICciK2UrIicgZm9yIHBpcGUgJyIrT2JqZWN0KGkuZ2IpKG4pKyInIik7dmFyIG59LHQucHJvdG90eXBlLl9kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMuX2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fbGF0ZXN0UmV0dXJuZWRWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfSx0LnByb3RvdHlwZS5fdXBkYXRlTGF0ZXN0VmFsdWU9ZnVuY3Rpb24odCxlKXt0PT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfSx0fSgpLFA9ZnVuY3Rpb24oKXt9LE49bmV3IGkubygiRG9jdW1lbnRUb2tlbiIpLFI9ImJyb3dzZXIiLEQ9InNlcnZlciI7ZnVuY3Rpb24gTCh0KXtyZXR1cm4gdD09PVJ9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdD09PUR9fSxKT2o5OmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiQ2NuRyIpLHI9bigiUFQvWCIpLG89bigiSXAwUiIpLGE9KG4oIkZ6cWMiKSxuKCJXZjRwIikpLHM9bigiU01zbSIpLHU9bigiZFdaZyIpLGM9bigiTEM1cCIpLGw9bigiMC9RNiIpLGY9bigiWllDaSIpLGg9bigiNlVNeCIpLGQ9bigiTXIrWCIpLHA9bigid0Z3MSIpLG09aS5OYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlci10b3Atd2lkdGg6MXB4O2JvcmRlci10b3Atc3R5bGU6c29saWR9Lm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci10b3A6MDtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZH0ubWF0LWRpdmlkZXIubWF0LWRpdmlkZXItaW5zZXR7bWFyZ2luLWxlZnQ6ODBweH1bZGlyPXJ0bF0gLm1hdC1kaXZpZGVyLm1hdC1kaXZpZGVyLWluc2V0e21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjgwcHh9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIHkodCl7cmV0dXJuIGkuamIoMixbXSxudWxsLG51bGwpfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KTt2YXIgdj1pLk5hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOlsiLmFtbWwtaXRlbVtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cG9zaXRpb246cmVsYXRpdmV9LmFubWwtZGF0YVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmFtbWwtaWNvbltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6NDhweDttYXJnaW4tcmlnaHQ6MTVweH0uYW1tbC1pY29uLWZhW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweH0uYW1tbC1zdWJtZW51W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxNnB4fS5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMxOTc2ZDJ9Il0sZGF0YTp7fX0pO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCwxLCJuZy1saXN0LWl0ZW0iLFtdLG51bGwsW1tudWxsLCJzZWxlY3RlZEl0ZW0iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJzZWxlY3RlZEl0ZW0iPT09ZSYmKGk9ITEhPT10LmNvbXBvbmVudC5zZWxlY3RlZExpc3RJdGVtKG4pJiZpKSxpfSxrLHcpKSxpLk9hKDEsNTczNDQwLG51bGwsMCxyLmUsW2YubCxyLmRdLHtub2RlOlswLCJub2RlIl0sc2VsZWN0ZWROb2RlOlsxLCJzZWxlY3RlZE5vZGUiXSxub2RlQ29uZmlndXJhdGlvbjpbMiwibm9kZUNvbmZpZ3VyYXRpb24iXX0se3NlbGVjdGVkSXRlbToic2VsZWN0ZWRJdGVtIn0pXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsZS5jb250ZXh0LiRpbXBsaWNpdCxuLmN1cnJlbnROb2RlLG4ubm9kZUNvbmZpZyl9LG51bGwpfWZ1bmN0aW9uIGIodCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCw2LCJkaXYiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuT2EoMSwyNzg1MjgsbnVsbCwwLG8uaSxbaS5xLGkucixpLmssaS5DXSx7bmdDbGFzczpbMCwibmdDbGFzcyJdfSxudWxsKSxpLk9hKDIsMjc4NTI4LG51bGwsMCxvLm4sW2kucixpLmssaS5DXSx7bmdTdHlsZTpbMCwibmdTdHlsZSJdfSxudWxsKSwodCgpKCksaS5QYSgzLDAsbnVsbCxudWxsLDMsIm1hdC1saXN0IixbWyJjbGFzcyIsIm1hdC1saXN0Il1dLG51bGwsbnVsbCxudWxsLGguZSxoLmEpKSxpLk9hKDQsNDkxNTIsbnVsbCwwLGwuYSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLkdhKDE2Nzc3MjE2LG51bGwsMCwxLG51bGwsZykpLGkuT2EoNiw4MDI4MTYsbnVsbCwwLG8uaixbaS5PLGkuTCxpLnFdLHtuZ0Zvck9mOlswLCJuZ0Zvck9mIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsbi5nZXRDbGFzc05hbWUoKSksdChlLDIsMCxuLmdldEdsb2JhbFN0eWxlKCkpLHQoZSw2LDAsbi5pdGVtcyl9LG51bGwpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuR2EoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxiKSksaS5PYSgxLDE2Mzg0LG51bGwsMCxvLmssW2kuTyxpLkxdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDAsMCE9PWUuY29tcG9uZW50Lml0ZW1zLmxlbmd0aCl9LG51bGwpfXZhciB3PWkuTmEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6WyIuYW1tbC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDo0OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyfS5hbm1sLWRhdGFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnN0YXJ0O2hlaWdodDo0OHB4fS5hbW1sLWljb25bX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjQ4cHg7bWFyZ2luLXJpZ2h0OjE1cHh9LmFtbWwtaWNvbi1mYVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHh9LmxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDo0OHB4fS5hbW1sLXN1Ym1lbnVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjE2cHh9Il0sZGF0YTp7YW5pbWF0aW9uOlt7dHlwZTo3LG5hbWU6InNsaWRlSW5PdXQiLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6ImluIixzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiIsb3BhY2l0eTowfSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoiOmxlYXZlIixhbmltYXRpb246W3t0eXBlOjYsc3R5bGVzOntoZWlnaHQ6IioiLG9wYWNpdHk6LjJ9LG9mZnNldDpudWxsfSx7dHlwZTozLHN0ZXBzOlt7dHlwZTo0LHN0eWxlczp7dHlwZTo2LHN0eWxlczp7aGVpZ2h0OjB9LG9mZnNldDpudWxsfSx0aW1pbmdzOjMwMH0se3R5cGU6NCxzdHlsZXM6e3R5cGU6NixzdHlsZXM6e29wYWNpdHk6MH0sb2Zmc2V0Om51bGx9LHRpbWluZ3M6IjIwMG1zIGVhc2Utb3V0In1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiI6ZW50ZXIiLGFuaW1hdGlvbjpbe3R5cGU6NixzdHlsZXM6e2hlaWdodDoiMCIsb3BhY2l0eTowfSxvZmZzZXQ6bnVsbH0se3R5cGU6MyxzdGVwczpbe3R5cGU6NCxzdHlsZXM6e3R5cGU6NixzdHlsZXM6e2hlaWdodDoiKiJ9LG9mZnNldDpudWxsfSx0aW1pbmdzOjIwMH0se3R5cGU6NCxzdHlsZXM6e3R5cGU6NixzdHlsZXM6e29wYWNpdHk6MX0sb2Zmc2V0Om51bGx9LHRpbWluZ3M6IjQwMG1zIGVhc2Utb3V0In1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319LHt0eXBlOjcsbmFtZToiaXNFeHBhbmRlZCIsZGVmaW5pdGlvbnM6W3t0eXBlOjAsbmFtZToibm8iLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoLTkwZGVnKSJ9LG9mZnNldDpudWxsfSxvcHRpb25zOnZvaWQgMH0se3R5cGU6MCxuYW1lOiJ5ZXMiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7dHJhbnNmb3JtOiJyb3RhdGUoMGRlZykifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoibm8gPT4geWVzIixhbmltYXRpb246e3R5cGU6NCxzdHlsZXM6bnVsbCx0aW1pbmdzOjMwMH0sb3B0aW9uczpudWxsfSx7dHlwZToxLGV4cHI6InllcyA9PiBubyIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczozMDB9LG9wdGlvbnM6bnVsbH1dLG9wdGlvbnM6e319XX19KTtmdW5jdGlvbiB4KHQpe3JldHVybiBpLmpiKDAsWyh0KCkoKSxpLlBhKDAsMCxudWxsLG51bGwsMiwic3BhbiIsW1siY2xhc3MiLCJhbW1sLWljb24gYW1tbC1pY29uLWZhIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLlBhKDEsMCxudWxsLG51bGwsMSwiaSIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksaS5PYSgyLDI3ODUyOCxudWxsLDAsby5pLFtpLnEsaS5yLGkuayxpLkNdLHtuZ0NsYXNzOlswLCJuZ0NsYXNzIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3QoZSwyLDAsZS5jb21wb25lbnQubm9kZS5mYUljb24pfSxudWxsKX1mdW5jdGlvbiBTKHQpe3JldHVybiBpLmpiKDAsWyh0KCkoKSxpLlBhKDAsMCxudWxsLG51bGwsMiwibWF0LWljb24iLFtbImNsYXNzIiwiYW1tbC1pY29uIG1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGQuYixkLmEpKSxpLk9hKDEsNjM4OTc2LG51bGwsMCxzLmEsW2kuayxzLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKHQoKSgpLGkuaGIoMiwwLFsiICIsIiAiXSkpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwwLDAsaS5aYShlLDEpLmlubGluZSksdChlLDIsMCxuLm5vZGUuaWNvbil9KX1mdW5jdGlvbiBFKHQpe3JldHVybiBpLmpiKDAsWyh0KCkoKSxpLlBhKDAsMCxudWxsLG51bGwsMiwibWF0LWljb24iLFtbImNsYXNzIiwibWF0LWljb24iXSxbInJvbGUiLCJpbWciXV0sW1syNCwiQGlzRXhwYW5kZWQiLDBdLFsyLCJtYXQtaWNvbi1pbmxpbmUiLG51bGxdXSxudWxsLG51bGwsZC5iLGQuYSkpLGkuT2EoMSw2Mzg5NzYsbnVsbCwwLHMuYSxbaS5rLHMuYyxbOCxudWxsXV0sbnVsbCxudWxsKSwodCgpKCksaS5oYigtMSwwLFsiIGtleWJvYXJkX2Fycm93X2Rvd24gIl0pKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMCwwLG4uaGFzSXRlbXMoKSYmbi5leHBhbmRlZD8ieWVzIjoibm8iLGkuWmEoZSwxKS5pbmxpbmUpfSl9ZnVuY3Rpb24gQyh0KXtyZXR1cm4gaS5qYigwLFsodCgpKCksaS5QYSgwLDAsbnVsbCxudWxsLDE1LCJtYXQtbGlzdC1pdGVtIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0gbWF0LXJpcHBsZSJdLFsibWF0UmlwcGxlIiwiIl1dLFtbMiwibWF0LWxpc3QtaXRlbS1hdmF0YXIiLG51bGxdLFsyLCJtYXQtbGlzdC1pdGVtLXdpdGgtYXZhdGFyIixudWxsXSxbMiwibWF0LXJpcHBsZS11bmJvdW5kZWQiLG51bGxdXSxbW251bGwsImNsaWNrIl0sW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXV0sZnVuY3Rpb24odCxlLG4pe3ZhciByPSEwLG89dC5jb21wb25lbnQ7cmV0dXJuImZvY3VzIj09PWUmJihyPSExIT09aS5aYSh0LDMpLl9oYW5kbGVGb2N1cygpJiZyKSwiYmx1ciI9PT1lJiYocj0hMSE9PWkuWmEodCwzKS5faGFuZGxlQmx1cigpJiZyKSwiY2xpY2siPT09ZSYmKHI9ITEhPT1vLmV4cGFuZChvLm5vZGUpJiZyKSxyfSxoLmQsaC5iKSksaS5PYSgxLDI3ODUyOCxudWxsLDAsby5pLFtpLnEsaS5yLGkuayxpLkNdLHtuZ0NsYXNzOlswLCJuZ0NsYXNzIl19LG51bGwpLGkuT2EoMiwyNzg1MjgsbnVsbCwwLG8ubixbaS5yLGkuayxpLkNdLHtuZ1N0eWxlOlswLCJuZ1N0eWxlIl19LG51bGwpLGkuT2EoMywxMDk3NzI4LG51bGwsMixsLmIsW2kuayxbMixsLmVdXSxudWxsLG51bGwpLGkuZmIoNjAzOTc5Nzc2LDEse19saW5lczoxfSksaS5mYigzMzU1NDQzMjAsMix7X2F2YXRhcjowfSksaS5PYSg2LDIxMjk5MixudWxsLDAsYS5xLFtpLmssaS54LHUuYSxbMixhLmddLFsyLHAuYV1dLG51bGwsbnVsbCksKHQoKSgpLGkuUGEoNywwLG51bGwsMiw2LCJkaXYiLFtbImNsYXNzIiwiYW5tbC1kYXRhIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLCh0KCkoKSxpLkdhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwseCkpLGkuT2EoOSwxNjM4NCxudWxsLDAsby5rLFtpLk8saS5MXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKSwodCgpKCksaS5HYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLFMpKSxpLk9hKDExLDE2Mzg0LG51bGwsMCxvLmssW2kuTyxpLkxdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLCh0KCkoKSxpLlBhKDEyLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibGFiZWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKHQoKSgpLGkuaGIoMTMsbnVsbCxbIiIsIiJdKSksKHQoKSgpLGkuR2EoMTY3NzcyMTYsbnVsbCwyLDEsbnVsbCxFKSksaS5PYSgxNSwxNjM4NCxudWxsLDAsby5rLFtpLk8saS5MXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uc2VsZWN0ZWRMaXN0Q2xhc3NlcyksdChlLDIsMCxuLmdldExpc3RTdHlsZSgpKSx0KGUsNiwwKSx0KGUsOSwwLG4ubm9kZS5mYUljb24pLHQoZSwxMSwwLG4ubm9kZS5pY29uKSx0KGUsMTUsMCxuLmhhc0l0ZW1zKCkpfSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwwLDAsaS5aYShlLDMpLl9hdmF0YXIsaS5aYShlLDMpLl9hdmF0YXIsaS5aYShlLDYpLnVuYm91bmRlZCksdChlLDEzLDAsbi5ub2RlLmxhYmVsKX0pfWZ1bmN0aW9uIE8odCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCwxLCJuZy1saXN0LWl0ZW0iLFtdLG51bGwsW1tudWxsLCJzZWxlY3RlZEl0ZW0iXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJzZWxlY3RlZEl0ZW0iPT09ZSYmKGk9ITEhPT10LmNvbXBvbmVudC5zZWxlY3RlZExpc3RJdGVtKG4pJiZpKSxpfSxrLHcpKSxpLk9hKDEsNTczNDQwLG51bGwsMCxyLmUsW2YubCxyLmRdLHtub2RlOlswLCJub2RlIl0sbGV2ZWw6WzEsImxldmVsIl0sc2VsZWN0ZWROb2RlOlsyLCJzZWxlY3RlZE5vZGUiXSxub2RlQ29uZmlndXJhdGlvbjpbMywibm9kZUNvbmZpZ3VyYXRpb24iXX0se3NlbGVjdGVkSXRlbToic2VsZWN0ZWRJdGVtIn0pXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwxLDAsZS5jb250ZXh0LiRpbXBsaWNpdCxuLmxldmVsKzEsbi5zZWxlY3RlZE5vZGUsbi5ub2RlQ29uZmlndXJhdGlvbil9LG51bGwpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCwzLCJkaXYiLFtdLFtbMjQsIkBzbGlkZUluT3V0IiwwXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuT2EoMSwyNzg1MjgsbnVsbCwwLG8uaSxbaS5xLGkucixpLmssaS5DXSx7bmdDbGFzczpbMCwibmdDbGFzcyJdfSxudWxsKSwodCgpKCksaS5HYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLE8pKSxpLk9hKDMsODAyODE2LG51bGwsMCxvLmosW2kuTyxpLkwsaS5xXSx7bmdGb3JPZjpbMCwibmdGb3JPZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLG4uY2xhc3NlcyksdChlLDMsMCxuLm5vZGVDaGlsZHJlbil9LGZ1bmN0aW9uKHQsZSl7dChlLDAsMCx2b2lkIDApfSl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gaS5qYigwLFsodCgpKCksaS5HYSgxNjc3NzIxNixudWxsLG51bGwsMSxudWxsLEMpKSxpLk9hKDEsMTYzODQsbnVsbCwwLG8uayxbaS5PLGkuTF0se25nSWY6WzAsIm5nSWYiXX0sbnVsbCksKHQoKSgpLGkuUGEoMiwwLG51bGwsbnVsbCwxLCJtYXQtZGl2aWRlciIsW1siY2xhc3MiLCJtYXQtZGl2aWRlciJdLFsicm9sZSIsInNlcGFyYXRvciJdXSxbWzEsImFyaWEtb3JpZW50YXRpb24iLDBdLFsyLCJtYXQtZGl2aWRlci12ZXJ0aWNhbCIsbnVsbF0sWzIsIm1hdC1kaXZpZGVyLWhvcml6b250YWwiLG51bGxdLFsyLCJtYXQtZGl2aWRlci1pbnNldCIsbnVsbF1dLG51bGwsbnVsbCx5LG0pKSxpLk9hKDMsNDkxNTIsbnVsbCwwLGMuYSxbXSxudWxsLG51bGwpLCh0KCkoKSxpLkdhKDE2Nzc3MjE2LG51bGwsbnVsbCwxLG51bGwsVCkpLGkuT2EoNSwxNjM4NCxudWxsLDAsby5rLFtpLk8saS5MXSx7bmdJZjpbMCwibmdJZiJdfSxudWxsKV0sZnVuY3Rpb24odCxlKXt2YXIgbj1lLmNvbXBvbmVudDt0KGUsMSwwLCFuLm5vZGUuaGlkZGVuKSx0KGUsNSwwLG4uaGFzSXRlbXMoKSYmbi5leHBhbmRlZCl9LGZ1bmN0aW9uKHQsZSl7dChlLDIsMCxpLlphKGUsMykudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIsaS5aYShlLDMpLnZlcnRpY2FsLCFpLlphKGUsMykudmVydGljYWwsaS5aYShlLDMpLmluc2V0KX0pfX0sSmNSdjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigieFRsYSIpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbaS5hXSgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuLnN1YnNjcmliZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpO3JldHVybiBuLnN1YnNjcmliZShlKX19fSxLOUlhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIjZibEYiKSxvPW4oIkZGT28iKSxhPW4oInB1Z1QiKSxzPW4oIjhnOEEiKSx1PW4oInVNYU8iKSxjPW4oIkwvVjkiKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4uZGVzdGluYXRpb249ZSxufXJldHVybiBpLmIoZSx0KSxlfShvLmEpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gZS5vYnNlcnZlcnM9W10sZS5jbG9zZWQ9ITEsZS5pc1N0b3BwZWQ9ITEsZS5oYXNFcnJvcj0hMSxlLnRocm93bkVycm9yPW51bGwsZX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGVbYy5hXT1mdW5jdGlvbigpe3JldHVybiBuZXcgbCh0aGlzKX0sZS5wcm90b3R5cGUubGlmdD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgaCh0aGlzLHRoaXMpO3JldHVybiBlLm9wZXJhdG9yPXQsZX0sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO2lmKCF0aGlzLmlzU3RvcHBlZClmb3IodmFyIGU9dGhpcy5vYnNlcnZlcnMsbj1lLmxlbmd0aCxpPWUuc2xpY2UoKSxyPTA7cjxuO3IrKylpW3JdLm5leHQodCl9LGUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7dGhpcy5oYXNFcnJvcj0hMCx0aGlzLnRocm93bkVycm9yPXQsdGhpcy5pc1N0b3BwZWQ9ITA7Zm9yKHZhciBlPXRoaXMub2JzZXJ2ZXJzLG49ZS5sZW5ndGgsaT1lLnNsaWNlKCkscj0wO3I8bjtyKyspaVtyXS5lcnJvcih0KTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUuY29tcGxldGU9ZnVuY3Rpb24oKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgcy5hO3RoaXMuaXNTdG9wcGVkPSEwO2Zvcih2YXIgdD10aGlzLm9ic2VydmVycyxlPXQubGVuZ3RoLG49dC5zbGljZSgpLGk9MDtpPGU7aSsrKW5baV0uY29tcGxldGUoKTt0aGlzLm9ic2VydmVycy5sZW5ndGg9MH0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz1udWxsfSxlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7cmV0dXJuIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5fc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBzLmE7cmV0dXJuIHRoaXMuaGFzRXJyb3I/KHQuZXJyb3IodGhpcy50aHJvd25FcnJvciksYS5hLkVNUFRZKTp0aGlzLmlzU3RvcHBlZD8odC5jb21wbGV0ZSgpLGEuYS5FTVBUWSk6KHRoaXMub2JzZXJ2ZXJzLnB1c2godCksbmV3IHUuYSh0aGlzLHQpKX0sZS5wcm90b3R5cGUuYXNPYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHIuYTtyZXR1cm4gdC5zb3VyY2U9dGhpcyx0fSxlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaCh0LGUpfSxlfShyLmEpLGg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5kZXN0aW5hdGlvbj1lLGkuc291cmNlPW4saX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUubmV4dCYmZS5uZXh0KHQpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uO2UmJmUuZXJyb3ImJnRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9LGUucHJvdG90eXBlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbjt0JiZ0LmNvbXBsZXRlJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9zdWJzY3JpYmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlP3RoaXMuc291cmNlLnN1YnNjcmliZSh0KTphLmEuRU1QVFl9LGV9KGYpfSwiTC9WOSI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoInJ4U3Vic2NyaWJlciIpOiJAQHJ4U3Vic2NyaWJlciJ9LExDNXA6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigibjZnRyIpLHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fdmVydGljYWw9ITEsdGhpcy5faW5zZXQ9ITF9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmVydGljYWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9LHNldDpmdW5jdGlvbih0KXt0aGlzLl92ZXJ0aWNhbD1PYmplY3QoaS5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImluc2V0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luc2V0fSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5faW5zZXQ9T2JqZWN0KGkuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKSxvPWZ1bmN0aW9uKCl7fX0sTUdCUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGUucHJvdG90eXBlLm5vdGlmeUVycm9yPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShuKCJGRk9vIikuYSl9LE1jU286ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KX0sIk1yK1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBpPW4oIkNjbkciKSxyPShuKCJTTXNtIiksbigiRnpxYyIpLG4oIldmNHAiKSxpLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOlsiLm1hdC1pY29ue2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4fS5tYXQtaWNvbi5tYXQtaWNvbi1pbmxpbmV7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDt3aWR0aDppbmhlcml0fVtkaXI9cnRsXSAubWF0LWljb24tcnRsLW1pcnJvcnt0cmFuc2Zvcm06c2NhbGUoLTEsMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5qYigyLFtpLllhKG51bGwsMCldLG51bGwsbnVsbCl9fSxOU1lMOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBXdH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBhZX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB1ZX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBjZX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oImloWVkiKTtmdW5jdGlvbiBvKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzfWZ1bmN0aW9uIGEodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyByLmQ7Y2FzZSAxOnJldHVybiB0WzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyByLm4odCl9fWZ1bmN0aW9uIHModCxlLG4saSxvLGEpe3ZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSk7dmFyIHM9W10sdT1bXSxjPS0xLGw9bnVsbDtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5vZmZzZXQsaT1uPT1jLGY9aSYmbHx8e307T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLHU9dFtuXTtpZigib2Zmc2V0IiE9PW4pc3dpdGNoKGk9ZS5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoaSxzKSx1KXtjYXNlIHIubzp1PW9bbl07YnJlYWs7Y2FzZSByLmE6dT1hW25dO2JyZWFrO2RlZmF1bHQ6dT1lLm5vcm1hbGl6ZVN0eWxlVmFsdWUobixpLHUscyl9ZltpXT11fSksaXx8dS5wdXNoKGYpLGw9ZixjPW59KSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBhbmltYXRlIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcbiAtICIrcy5qb2luKCJcbiAtICIpKTtyZXR1cm4gdX1mdW5jdGlvbiB1KHQsZSxuLGkpe3N3aXRjaChlKXtjYXNlInN0YXJ0Ijp0Lm9uU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gaShuJiZjKG4sInN0YXJ0Iix0KSl9KTticmVhaztjYXNlImRvbmUiOnQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmYyhuLCJkb25lIix0KSl9KTticmVhaztjYXNlImRlc3Ryb3kiOnQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkobiYmYyhuLCJkZXN0cm95Iix0KSl9KX19ZnVuY3Rpb24gYyh0LGUsbil7dmFyIGk9bi50b3RhbFRpbWUscj1sKHQuZWxlbWVudCx0LnRyaWdnZXJOYW1lLHQuZnJvbVN0YXRlLHQudG9TdGF0ZSxlfHx0LnBoYXNlTmFtZSx2b2lkIDA9PWk/dC50b3RhbFRpbWU6aSwhIW4uZGlzYWJsZWQpLG89dC5fZGF0YTtyZXR1cm4gbnVsbCE9byYmKHIuX2RhdGE9bykscn1mdW5jdGlvbiBsKHQsZSxuLGkscixvLGEpe3JldHVybiB2b2lkIDA9PT1yJiYocj0iIiksdm9pZCAwPT09byYmKG89MCkse2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLGZyb21TdGF0ZTpuLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIWF9fWZ1bmN0aW9uIGYodCxlLG4pe3ZhciBpO3JldHVybiB0IGluc3RhbmNlb2YgTWFwPyhpPXQuZ2V0KGUpKXx8dC5zZXQoZSxpPW4pOihpPXRbZV0pfHwoaT10W2VdPW4pLGl9ZnVuY3Rpb24gaCh0KXt2YXIgZT10LmluZGV4T2YoIjoiKTtyZXR1cm5bdC5zdWJzdHJpbmcoMSxlKSx0LnN1YnN0cihlKzEpXX12YXIgZD1mdW5jdGlvbih0LGUpe3JldHVybiExfSxwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuITF9LG09ZnVuY3Rpb24odCxlLG4pe3JldHVybltdfSx5PW8oKTtpZih5fHwidW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQpe2lmKGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb250YWlucyhlKX0seXx8RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcylwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX07ZWxzZXt2YXIgdj1FbGVtZW50LnByb3RvdHlwZSxnPXYubWF0Y2hlc1NlbGVjdG9yfHx2Lm1vek1hdGNoZXNTZWxlY3Rvcnx8di5tc01hdGNoZXNTZWxlY3Rvcnx8di5vTWF0Y2hlc1NlbGVjdG9yfHx2LndlYmtpdE1hdGNoZXNTZWxlY3RvcjtnJiYocD1mdW5jdGlvbih0LGUpe3JldHVybiBnLmFwcGx5KHQsW2VdKX0pfW09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVtdO2lmKG4pci5wdXNoLmFwcGx5KHIsT2JqZWN0KGkuZCkodC5xdWVyeVNlbGVjdG9yQWxsKGUpKSk7ZWxzZXt2YXIgbz10LnF1ZXJ5U2VsZWN0b3IoZSk7byYmci5wdXNoKG8pfXJldHVybiByfX12YXIgYj1udWxsLF89ITE7ZnVuY3Rpb24gdyh0KXtifHwoYj0oInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSxfPSEhYi5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gYi5zdHlsZSk7dmFyIGU9ITA7cmV0dXJuIGIuc3R5bGUmJiFmdW5jdGlvbih0KXtyZXR1cm4iZWJraXQiPT10LnN1YnN0cmluZygxLDYpfSh0KSYmIShlPXQgaW4gYi5zdHlsZSkmJl8mJihlPSJXZWJraXQiK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHIoMSlpbiBiLnN0eWxlKSxlfXZhciB4PXAsUz1kLEU9bTtmdW5jdGlvbiBDKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKTtlW2ldPXRbbl19KSxlfXZhciBPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRSh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG58fCIifSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGksbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1bXSksbmV3IHIuZChuLGkpfSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0Lk5PT1A9bmV3IE8sdH0oKSxrPTFlMztmdW5jdGlvbiBBKHQpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdDt2YXIgZT10Lm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFlfHxlLmxlbmd0aDwyPzA6SShwYXJzZUZsb2F0KGVbMV0pLGVbMl0pfWZ1bmN0aW9uIEkodCxlKXtzd2l0Y2goZSl7Y2FzZSJzIjpyZXR1cm4gdCprO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGoodCxlLG4pe3JldHVybiB0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP3Q6ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9MCxvPSIiO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGE9dC5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIGUucHVzaCgnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJykse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2k9SShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO3ZhciBzPWFbM107bnVsbCE9cyYmKHI9SShNYXRoLmZsb29yKHBhcnNlRmxvYXQocykpLGFbNF0pKTt2YXIgdT1hWzVdO3UmJihvPXUpfWVsc2UgaT10O2lmKCFuKXt2YXIgYz0hMSxsPWUubGVuZ3RoO2k8MCYmKGUucHVzaCgiRHVyYXRpb24gdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGM9ITApLHI8MCYmKGUucHVzaCgiRGVsYXkgdmFsdWVzIGJlbG93IDAgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIGFuaW1hdGlvbiBzdGVwLiIpLGM9ITApLGMmJmUuc3BsaWNlKGwsMCwnVGhlIHByb3ZpZGVkIHRpbWluZyB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQuJyl9cmV0dXJue2R1cmF0aW9uOmksZGVsYXk6cixlYXNpbmc6b319KHQsZSxuKX1mdW5jdGlvbiBNKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pLGV9ZnVuY3Rpb24gUCh0LGUsbil7aWYodm9pZCAwPT09biYmKG49e30pLGUpZm9yKHZhciBpIGluIHQpbltpXT10W2ldO2Vsc2UgTSh0LG4pO3JldHVybiBufWZ1bmN0aW9uIE4odCxlLG4pe3JldHVybiBuP2UrIjoiK24rIjsiOiIifWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPSIiLG49MDtuPHQuc3R5bGUubGVuZ3RoO24rKyllKz1OKDAsaT10LnN0eWxlLml0ZW0obiksdC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGkpKTtmb3IodmFyIGkgaW4gdC5zdHlsZSl0LnN0eWxlLmhhc093blByb3BlcnR5KGkpJiYhaS5zdGFydHNXaXRoKCJfIikmJihlKz1OKDAsaS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksdC5zdHlsZVtpXSkpO3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsZSl9ZnVuY3Rpb24gRCh0LGUpe3Quc3R5bGUmJihPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPXEobik7dC5zdHlsZVtpXT1lW25dfSksbygpJiZSKHQpKX1mdW5jdGlvbiBMKHQsZSl7dC5zdHlsZSYmKE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cShlKTt0LnN0eWxlW25dPSIifSksbygpJiZSKHQpKX1mdW5jdGlvbiBGKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPzE9PXQubGVuZ3RoP3RbMF06T2JqZWN0KHIuaSkodCk6dH12YXIgej1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiBWKHQpe3ZhciBlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7Zm9yKHZhciBuPXQudG9TdHJpbmcoKSxpPXZvaWQgMDtpPXouZXhlYyhuKTspZS5wdXNoKGlbMV0pO3oubGFzdEluZGV4PTB9cmV0dXJuIGV9ZnVuY3Rpb24gQih0LGUsbil7dmFyIGk9dC50b1N0cmluZygpLHI9aS5yZXBsYWNlKHosZnVuY3Rpb24odCxpKXt2YXIgcj1lW2ldO3JldHVybiBlLmhhc093blByb3BlcnR5KGkpfHwobi5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgYW5pbWF0aW9uIHBhcmFtICIraSkscj0iIiksci50b1N0cmluZygpfSk7cmV0dXJuIHI9PWk/dDpyfWZ1bmN0aW9uIFUodCl7Zm9yKHZhciBlPVtdLG49dC5uZXh0KCk7IW4uZG9uZTspZS5wdXNoKG4udmFsdWUpLG49dC5uZXh0KCk7cmV0dXJuIGV9dmFyIEg9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQucmVwbGFjZShILGZ1bmN0aW9uKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBHKHQsZSl7cmV0dXJuIDA9PT10fHwwPT09ZX1mdW5jdGlvbiBXKHQsZSxuKXt2YXIgaT1PYmplY3Qua2V5cyhuKTtpZihpLmxlbmd0aCYmZS5sZW5ndGgpe3ZhciByPWVbMF0sbz1bXTtpZihpLmZvckVhY2goZnVuY3Rpb24odCl7ci5oYXNPd25Qcm9wZXJ0eSh0KXx8by5wdXNoKHQpLHJbdF09blt0XX0pLG8ubGVuZ3RoKWZvcih2YXIgYT1mdW5jdGlvbigpe3ZhciBuPWVbc107by5mb3JFYWNoKGZ1bmN0aW9uKGUpe25bZV09USh0LGUpfSl9LHM9MTtzPGUubGVuZ3RoO3MrKylhKCl9cmV0dXJuIGV9ZnVuY3Rpb24gWSh0LGUsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSA3OnJldHVybiB0LnZpc2l0VHJpZ2dlcihlLG4pO2Nhc2UgMDpyZXR1cm4gdC52aXNpdFN0YXRlKGUsbik7Y2FzZSAxOnJldHVybiB0LnZpc2l0VHJhbnNpdGlvbihlLG4pO2Nhc2UgMjpyZXR1cm4gdC52aXNpdFNlcXVlbmNlKGUsbik7Y2FzZSAzOnJldHVybiB0LnZpc2l0R3JvdXAoZSxuKTtjYXNlIDQ6cmV0dXJuIHQudmlzaXRBbmltYXRlKGUsbik7Y2FzZSA1OnJldHVybiB0LnZpc2l0S2V5ZnJhbWVzKGUsbik7Y2FzZSA2OnJldHVybiB0LnZpc2l0U3R5bGUoZSxuKTtjYXNlIDg6cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UoZSxuKTtjYXNlIDk6cmV0dXJuIHQudmlzaXRBbmltYXRlQ2hpbGQoZSxuKTtjYXNlIDEwOnJldHVybiB0LnZpc2l0QW5pbWF0ZVJlZihlLG4pO2Nhc2UgMTE6cmV0dXJuIHQudmlzaXRRdWVyeShlLG4pO2Nhc2UgMTI6cmV0dXJuIHQudmlzaXRTdGFnZ2VyKGUsbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIGFuaW1hdGlvbiBtZXRhZGF0YSBub2RlICMiK2UudHlwZSl9fWZ1bmN0aW9uIFEodCxlKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19dmFyIFo9IioiLEs9bmV3IFNldChbInRydWUiLCIxIl0pLFg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiAkKHQsZSl7dmFyIG49Sy5oYXModCl8fFguaGFzKHQpLGk9Sy5oYXMoZSl8fFguaGFzKGUpO3JldHVybiBmdW5jdGlvbihyLG8pe3ZhciBhPXQ9PVp8fHQ9PXIscz1lPT1afHxlPT1vO3JldHVybiFhJiZuJiYiYm9vbGVhbiI9PXR5cGVvZiByJiYoYT1yP0suaGFzKHQpOlguaGFzKHQpKSwhcyYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKHM9bz9LLmhhcyhlKTpYLmhhcyhlKSksYSYmc319dmFyIEo9bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gdHQodCxlLG4pe3JldHVybiBuZXcgZXQodCkuYnVpbGQoZSxuKX12YXIgZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2RyaXZlcj10fXJldHVybiB0LnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBudChlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShuKSxZKHRoaXMsRih0KSxuKX0sdC5wcm90b3R5cGUuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGU9ZnVuY3Rpb24odCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz17fSx0LmNvbGxlY3RlZFN0eWxlc1siIl09e30sdC5jdXJyZW50VGltZT0wfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxhPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaCgiYW5pbWF0aW9uIHRyaWdnZXJzIGNhbm5vdCBiZSBwcmVmaXhlZCB3aXRoIGFuIGBAYCBzaWduIChlLmcuIHRyaWdnZXIoJ0Bmb28nLCBbLi4uXSkpIiksdC5kZWZpbml0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKG4uX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09dC50eXBlKXt2YXIgcz10LHU9cy5uYW1lO3UudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cy5uYW1lPXQsby5wdXNoKG4udmlzaXRTdGF0ZShzLGUpKX0pLHMubmFtZT11fWVsc2UgaWYoMT09dC50eXBlKXt2YXIgYz1uLnZpc2l0VHJhbnNpdGlvbih0LGUpO2krPWMucXVlcnlDb3VudCxyKz1jLmRlcENvdW50LGEucHVzaChjKX1lbHNlIGUuZXJyb3JzLnB1c2goIm9ubHkgc3RhdGUoKSBhbmQgdHJhbnNpdGlvbigpIGRlZmluaXRpb25zIGNhbiBzaXQgaW5zaWRlIG9mIGEgdHJpZ2dlcigpIil9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOmEscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX0sdC5wcm90b3R5cGUudmlzaXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMudmlzaXRTdHlsZSh0LnN0eWxlcyxlKSxpPXQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihuLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7dmFyIHI9bmV3IFNldCxvPWl8fHt9O2lmKG4uc3R5bGVzLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQ7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtWKGVbdF0pLmZvckVhY2goZnVuY3Rpb24odCl7by5oYXNPd25Qcm9wZXJ0eSh0KXx8ci5hZGQodCl9KX0pfX0pLHIuc2l6ZSl7dmFyIGE9VShyLnZhbHVlcygpKTtlLmVycm9ycy5wdXNoKCdzdGF0ZSgiJyt0Lm5hbWUrJyIsIC4uLikgbXVzdCBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgZm9sbG93aW5nIHN0eWxlIHN1YnN0aXR1dGlvbnM6ICcrYS5qb2luKCIsICIpKX19cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTpuLG9wdGlvbnM6aT97cGFyYW1zOml9Om51bGx9fSx0LnByb3RvdHlwZS52aXNpdFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7dmFyIG4saSxyLG89WSh0aGlzLEYodC5hbmltYXRpb24pLGUpO3JldHVybnt0eXBlOjEsbWF0Y2hlcnM6KG49dC5leHByLGk9ZS5lcnJvcnMscj1bXSwic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtpZigiOiI9PXRbMF0pe3ZhciBpPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gcGFyc2VGbG9hdChlKT5wYXJzZUZsb2F0KHQpfTtjYXNlIjpkZWNyZW1lbnQiOnJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KGUpPHBhcnNlRmxvYXQodCl9O2RlZmF1bHQ6cmV0dXJuIGUucHVzaCgnVGhlIHRyYW5zaXRpb24gYWxpYXMgdmFsdWUgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyksIiogPT4gKiJ9fSh0LG4pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXJldHVybiB2b2lkIGUucHVzaChpKTt0PWl9dmFyIHI9dC5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09cnx8ci5sZW5ndGg8NClyZXR1cm4gbi5wdXNoKCdUaGUgcHJvdmlkZWQgdHJhbnNpdGlvbiBleHByZXNzaW9uICInK3QrJyIgaXMgbm90IHN1cHBvcnRlZCcpLGU7dmFyIG89clsxXSxhPXJbMl0scz1yWzNdO2UucHVzaCgkKG8scykpLCI8IiE9YVswXXx8bz09WiYmcz09Wnx8ZS5wdXNoKCQocyxvKSl9KHQscixpKX0pOnIucHVzaChuKSxyKSxhbmltYXRpb246byxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6cnQodC5vcHRpb25zKX19LHQucHJvdG90eXBlLnZpc2l0U2VxdWVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIFkobix0LGUpfSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe2UuY3VycmVudFRpbWU9aTt2YXIgbz1ZKG4sdCxlKTtyZXR1cm4gcj1NYXRoLm1heChyLGUuY3VycmVudFRpbWUpLG99KTtyZXR1cm4gZS5jdXJyZW50VGltZT1yLHt0eXBlOjMsc3RlcHM6byxvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdEFuaW1hdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWZ1bmN0aW9uKHQsZSl7dmFyIG49bnVsbDtpZih0Lmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKW49dDtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gb3Qoaih0LGUpLmR1cmF0aW9uLDAsIiIpO3ZhciBpPXQ7aWYoaS5zcGxpdCgvXHMrLykuc29tZShmdW5jdGlvbih0KXtyZXR1cm4ieyI9PXQuY2hhckF0KDApJiYieyI9PXQuY2hhckF0KDEpfSkpe3ZhciByPW90KDAsMCwiIik7cmV0dXJuIHIuZHluYW1pYz0hMCxyLnN0clZhbHVlPWkscn1yZXR1cm4gb3QoKG49bnx8aihpLGUpKS5kdXJhdGlvbixuLmRlbGF5LG4uZWFzaW5nKX0odC50aW1pbmdzLGUuZXJyb3JzKTtlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1pO3ZhciBvPXQuc3R5bGVzP3Quc3R5bGVzOk9iamVjdChyLmspKHt9KTtpZig1PT1vLnR5cGUpbj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXt2YXIgYT10LnN0eWxlcyxzPSExO2lmKCFhKXtzPSEwO3ZhciB1PXt9O2kuZWFzaW5nJiYodS5lYXNpbmc9aS5lYXNpbmcpLGE9T2JqZWN0KHIuaykodSl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O3ZhciBjPXRoaXMudmlzaXRTdHlsZShhLGUpO2MuaXNFbXB0eVN0ZXA9cyxuPWN9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6bixvcHRpb25zOm51bGx9fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QobixlKSxufSx0LnByb3RvdHlwZS5fbWFrZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49W107QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQ/dD09ci5hP24ucHVzaCh0KTplLmVycm9ycy5wdXNoKCJUaGUgcHJvdmlkZWQgc3R5bGUgc3RyaW5nIHZhbHVlICIrdCsiIGlzIG5vdCBhbGxvd2VkLiIpOm4ucHVzaCh0KX0pOm4ucHVzaCh0LnN0eWxlcyk7dmFyIGk9ITEsbz1udWxsO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkpe3ZhciBlPXQsbj1lLmVhc2luZztpZihuJiYobz1uLGRlbGV0ZSBlLmVhc2luZyksIWkpZm9yKHZhciByIGluIGUpaWYoZVtyXS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2k9ITA7YnJlYWt9fX0pLHt0eXBlOjYsc3R5bGVzOm4sZWFzaW5nOm8sb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczppLG9wdGlvbnM6bnVsbH19LHQucHJvdG90eXBlLl92YWxpZGF0ZVN0eWxlQXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLHI9ZS5jdXJyZW50VGltZSxvPWUuY3VycmVudFRpbWU7aSYmbz4wJiYoby09aS5kdXJhdGlvbitpLmRlbGF5KSx0LnN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXtpZihuLl9kcml2ZXIudmFsaWRhdGVTdHlsZVByb3BlcnR5KGkpKXt2YXIgYSxzLHUsYz1lLmNvbGxlY3RlZFN0eWxlc1tlLmN1cnJlbnRRdWVyeVNlbGVjdG9yXSxsPWNbaV0sZj0hMDtsJiYobyE9ciYmbz49bC5zdGFydFRpbWUmJnI8PWwuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2goJ1RoZSBDU1MgcHJvcGVydHkgIicraSsnIiB0aGF0IGV4aXN0cyBiZXR3ZWVuIHRoZSB0aW1lcyBvZiAiJytsLnN0YXJ0VGltZSsnbXMiIGFuZCAiJytsLmVuZFRpbWUrJ21zIiBpcyBhbHNvIGJlaW5nIGFuaW1hdGVkIGluIGEgcGFyYWxsZWwgYW5pbWF0aW9uIGJldHdlZW4gdGhlIHRpbWVzIG9mICInK28rJ21zIiBhbmQgIicrcisnbXMiJyksZj0hMSksbz1sLnN0YXJ0VGltZSksZiYmKGNbaV09e3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmKGE9ZS5lcnJvcnMscz1lLm9wdGlvbnMucGFyYW1zfHx7fSwodT1WKHRbaV0pKS5sZW5ndGgmJnUuZm9yRWFjaChmdW5jdGlvbih0KXtzLmhhc093blByb3BlcnR5KHQpfHxhLnB1c2goIlVuYWJsZSB0byByZXNvbHZlIHRoZSBsb2NhbCBhbmltYXRpb24gcGFyYW0gIit0KyIgaW4gdGhlIGdpdmVuIGxpc3Qgb2YgdmFsdWVzIil9KSl9ZWxzZSBlLmVycm9ycy5wdXNoKCdUaGUgcHJvdmlkZWQgYW5pbWF0aW9uIHByb3BlcnR5ICInK2krJyIgaXMgbm90IGEgc3VwcG9ydGVkIENTUyBwcm9wZXJ0eSBmb3IgYW5pbWF0aW9ucycpfSl9KX0sdC5wcm90b3R5cGUudmlzaXRLZXlmcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2goImtleWZyYW1lcygpIG11c3QgYmUgcGxhY2VkIGluc2lkZSBvZiBhIGNhbGwgdG8gYW5pbWF0ZSgpIiksaTt2YXIgcj0wLG89W10sYT0hMSxzPSExLHU9MCxjPXQuc3RlcHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBpPW4uX21ha2VTdHlsZUFzdCh0LGUpLGM9bnVsbCE9aS5vZmZzZXQ/aS5vZmZzZXQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBudWxsO3ZhciBlPW51bGw7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fX0pO2Vsc2UgaWYoaXQodCkmJnQuaGFzT3duUHJvcGVydHkoIm9mZnNldCIpKXt2YXIgbj10O2U9cGFyc2VGbG9hdChuLm9mZnNldCksZGVsZXRlIG4ub2Zmc2V0fXJldHVybiBlfShpLnN0eWxlcyksbD0wO3JldHVybiBudWxsIT1jJiYocisrLGw9aS5vZmZzZXQ9Yykscz1zfHxsPDB8fGw+MSxhPWF8fGw8dSx1PWwsby5wdXNoKGwpLGl9KTtzJiZlLmVycm9ycy5wdXNoKCJQbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGtleWZyYW1lIG9mZnNldHMgYXJlIGJldHdlZW4gMCBhbmQgMSIpLGEmJmUuZXJyb3JzLnB1c2goIlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwga2V5ZnJhbWUgb2Zmc2V0cyBhcmUgaW4gb3JkZXIiKTt2YXIgbD10LnN0ZXBzLmxlbmd0aCxmPTA7cj4wJiZyPGw/ZS5lcnJvcnMucHVzaCgiTm90IGFsbCBzdHlsZSgpIHN0ZXBzIHdpdGhpbiB0aGUgZGVjbGFyZWQga2V5ZnJhbWVzKCkgY29udGFpbiBvZmZzZXRzIik6MD09ciYmKGY9MS8obC0xKSk7dmFyIGg9bC0xLGQ9ZS5jdXJyZW50VGltZSxwPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLG09cC5kdXJhdGlvbjtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIGE9Zj4wP3I9PWg/MTpmKnI6b1tyXSxzPWEqbTtlLmN1cnJlbnRUaW1lPWQrcC5kZWxheStzLHAuZHVyYXRpb249cyxuLl92YWxpZGF0ZVN0eWxlQXN0KHQsZSksdC5vZmZzZXQ9YSxpLnN0eWxlcy5wdXNoKHQpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjpZKHRoaXMsRih0LmFuaW1hdGlvbiksZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlUmVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24sZSksb3B0aW9uczpydCh0Lm9wdGlvbnMpfX0sdC5wcm90b3R5cGUudmlzaXRRdWVyeT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7dmFyIG89T2JqZWN0KGkuYykoZnVuY3Rpb24odCl7dmFyIGU9ISF0LnNwbGl0KC9ccyosXHMqLykuZmluZChmdW5jdGlvbih0KXtyZXR1cm4iOnNlbGYiPT10fSk7cmV0dXJuIGUmJih0PXQucmVwbGFjZShKLCIiKSksW3Q9dC5yZXBsYWNlKC9AXCovZywiLm5nLXRyaWdnZXIiKS5yZXBsYWNlKC9AXHcrL2csZnVuY3Rpb24odCl7cmV0dXJuIi5uZy10cmlnZ2VyLSIrdC5zdWJzdHIoMSl9KS5yZXBsYWNlKC86YW5pbWF0aW5nL2csIi5uZy1hbmltYXRpbmciKSxlXX0odC5zZWxlY3RvciksMiksYT1vWzBdLHM9b1sxXTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4ubGVuZ3RoP24rIiAiK2E6YSxmKGUuY29sbGVjdGVkU3R5bGVzLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3Ise30pO3ZhciB1PVkodGhpcyxGKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW4se3R5cGU6MTEsc2VsZWN0b3I6YSxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjp1LG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOnJ0KHQub3B0aW9ucyl9fSx0LnByb3RvdHlwZS52aXNpdFN0YWdnZXI9ZnVuY3Rpb24odCxlKXtlLmN1cnJlbnRRdWVyeXx8ZS5lcnJvcnMucHVzaCgic3RhZ2dlcigpIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIHF1ZXJ5KCkiKTt2YXIgbj0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpqKHQudGltaW5ncyxlLmVycm9ycywhMCk7cmV0dXJue3R5cGU6MTIsYW5pbWF0aW9uOlkodGhpcyxGKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOm4sb3B0aW9uczpudWxsfX0sdH0oKSxudD1mdW5jdGlvbih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9e30sdGhpcy5vcHRpb25zPW51bGx9O2Z1bmN0aW9uIGl0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiYib2JqZWN0Ij09dHlwZW9mIHR9ZnVuY3Rpb24gcnQodCl7dmFyIGU7cmV0dXJuIHQ/KHQ9TSh0KSkucGFyYW1zJiYodC5wYXJhbXM9KGU9dC5wYXJhbXMpP00oZSk6bnVsbCk6dD17fSx0fWZ1bmN0aW9uIG90KHQsZSxuKXtyZXR1cm57ZHVyYXRpb246dCxkZWxheTplLGVhc2luZzpufX1mdW5jdGlvbiBhdCh0LGUsbixpLHIsbyxhLHMpe3JldHVybiB2b2lkIDA9PT1hJiYoYT1udWxsKSx2b2lkIDA9PT1zJiYocz0hMSkse3R5cGU6MSxlbGVtZW50OnQsa2V5ZnJhbWVzOmUscHJlU3R5bGVQcm9wczpuLHBvc3RTdHlsZVByb3BzOmksZHVyYXRpb246cixkZWxheTpvLHRvdGFsVGltZTpyK28sZWFzaW5nOmEsc3ViVGltZWxpbmU6c319dmFyIHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX21hcD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5jb25zdW1lPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXQodCk7cmV0dXJuIGU/dGhpcy5fbWFwLmRlbGV0ZSh0KTplPVtdLGV9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX21hcC5nZXQodCk7bnx8dGhpcy5fbWFwLnNldCh0LG49W10pLG4ucHVzaC5hcHBseShuLE9iamVjdChpLmQpKGUpKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfSx0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX21hcC5jbGVhcigpfSx0fSgpLHV0PW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxjdD1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gbHQodCxlLG4saSxyLG8sYSxzLHUsYyl7cmV0dXJuIHZvaWQgMD09PW8mJihvPXt9KSx2b2lkIDA9PT1hJiYoYT17fSksdm9pZCAwPT09YyYmKGM9W10pLChuZXcgZnQpLmJ1aWxkS2V5ZnJhbWVzKHQsZSxuLGkscixvLGEscyx1LGMpfXZhciBmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGMpe3ZvaWQgMD09PWMmJihjPVtdKSx1PXV8fG5ldyBzdDt2YXIgbD1uZXcgZHQodCxlLHUsaSxyLGMsW10pO2wub3B0aW9ucz1zLGwuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbb10sbnVsbCxsLmVycm9ycyxzKSxZKHRoaXMsbixsKTt2YXIgZj1sLnRpbWVsaW5lcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29udGFpbnNBbmltYXRpb24oKX0pO2lmKGYubGVuZ3RoJiZPYmplY3Qua2V5cyhhKS5sZW5ndGgpe3ZhciBoPWZbZi5sZW5ndGgtMV07aC5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpfHxoLnNldFN0eWxlcyhbYV0sbnVsbCxsLmVycm9ycyxzKX1yZXR1cm4gZi5sZW5ndGg/Zi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYnVpbGRLZXlmcmFtZXMoKX0pOlthdChlLFtdLFtdLFtdLDAsMCwiIiwhMSldfSx0LnByb3RvdHlwZS52aXNpdFRyaWdnZXI9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0U3RhdGU9ZnVuY3Rpb24odCxlKXt9LHQucHJvdG90eXBlLnZpc2l0VHJhbnNpdGlvbj1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUudmlzaXRBbmltYXRlQ2hpbGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1Ykluc3RydWN0aW9ucy5jb25zdW1lKGUuZWxlbWVudCk7aWYobil7dmFyIGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucykscj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKG4saSxpLm9wdGlvbnMpO3IhPW8mJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKG8pfWUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZVJlZj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO24udHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixuKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShuLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPW51bGwhPW4uZHVyYXRpb24/QShuLmR1cmF0aW9uKTpudWxsLG89bnVsbCE9bi5kZWxheT9BKG4uZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1yJiZ0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxyLG8pO2k9TWF0aC5tYXgoaSxuLmR1cmF0aW9uK24uZGVsYXkpfSksaX0sdC5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXtlLnVwZGF0ZU9wdGlvbnModC5vcHRpb25zLCEwKSxZKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRTZXF1ZW5jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKChyPWUuY3JlYXRlU3ViQ29udGV4dChvKSkudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1odCk7dmFyIGE9QShvLmRlbGF5KTtyLmRlbGF5TmV4dFN0ZXAoYSl9dC5zdGVwcy5sZW5ndGgmJih0LnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFkobix0LHIpfSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH0sdC5wcm90b3R5cGUudmlzaXRHcm91cD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1bXSxyPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLG89dC5vcHRpb25zJiZ0Lm9wdGlvbnMuZGVsYXk/QSh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJnMuZGVsYXlOZXh0U3RlcChvKSxZKG4sYSxzKSxyPU1hdGgubWF4KHIscy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGkucHVzaChzLmN1cnJlbnRUaW1lbGluZSl9KSxpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModCl9KSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS5fdmlzaXRUaW1pbmc9ZnVuY3Rpb24odCxlKXtpZih0LmR5bmFtaWMpe3ZhciBuPXQuc3RyVmFsdWU7cmV0dXJuIGooZS5wYXJhbXM/QihuLGUucGFyYW1zLGUuZXJyb3JzKTpuLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319LHQucHJvdG90eXBlLnZpc2l0QW5pbWF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxpPWUuY3VycmVudFRpbWVsaW5lO24uZGVsYXkmJihlLmluY3JlbWVudFRpbWUobi5kZWxheSksaS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7dmFyIHI9dC5zdHlsZTs1PT1yLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhyLGUpOihlLmluY3JlbWVudFRpbWUobi5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKHIsZSksaS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fSx0LnByb3RvdHlwZS52aXNpdFN0eWxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50VGltZWxpbmUsaT1lLmN1cnJlbnRBbmltYXRlVGltaW5nczshaSYmbi5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoJiZuLmZvcndhcmRGcmFtZSgpO3ZhciByPWkmJmkuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP24uYXBwbHlFbXB0eVN0ZXAocik6bi5zZXRTdHlsZXModC5zdHlsZXMscixlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0S2V5ZnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaT1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixyPW4uZHVyYXRpb24sbz1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7by5lYXNpbmc9bi5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtvLmZvcndhcmRUaW1lKCh0Lm9mZnNldHx8MCkqciksby5zZXRTdHlsZXModC5zdHlsZXMsdC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxvLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhvKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpK3IpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0UXVlcnk9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscj10Lm9wdGlvbnN8fHt9LG89ci5kZWxheT9BKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5nZXRDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkubGVuZ3RoKSYmKGUuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGUucHJldmlvdXNOb2RlPWh0KTt2YXIgYT1pLHM9ZS5pbnZva2VRdWVyeSh0LnNlbGVjdG9yLHQub3JpZ2luYWxTZWxlY3Rvcix0LmxpbWl0LHQuaW5jbHVkZVNlbGYsISFyLm9wdGlvbmFsLGUuZXJyb3JzKTtlLmN1cnJlbnRRdWVyeVRvdGFsPXMubGVuZ3RoO3ZhciB1PW51bGw7cy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5jdXJyZW50UXVlcnlJbmRleD1yO3ZhciBzPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMsaSk7byYmcy5kZWxheU5leHRTdGVwKG8pLGk9PT1lLmVsZW1lbnQmJih1PXMuY3VycmVudFRpbWVsaW5lKSxZKG4sdC5hbmltYXRpb24scykscy5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksYT1NYXRoLm1heChhLHMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoYSksdSYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXModSksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9LHQucHJvdG90eXBlLnZpc2l0U3RhZ2dlcj1mdW5jdGlvbih0LGUpe3ZhciBuPWUucGFyZW50Q29udGV4dCxpPWUuY3VycmVudFRpbWVsaW5lLHI9dC50aW1pbmdzLG89TWF0aC5hYnMoci5kdXJhdGlvbiksYT1vKihlLmN1cnJlbnRRdWVyeVRvdGFsLTEpLHM9byplLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChyLmR1cmF0aW9uPDA/InJldmVyc2UiOnIuZWFzaW5nKXtjYXNlInJldmVyc2UiOnM9YS1zO2JyZWFrO2Nhc2UiZnVsbCI6cz1uLmN1cnJlbnRTdGFnZ2VyVGltZX12YXIgdT1lLmN1cnJlbnRUaW1lbGluZTtzJiZ1LmRlbGF5TmV4dFN0ZXAocyk7dmFyIGM9dS5jdXJyZW50VGltZTtZKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxuLmN1cnJlbnRTdGFnZ2VyVGltZT1pLmN1cnJlbnRUaW1lLWMrKGkuc3RhcnRUaW1lLW4uY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9LHR9KCksaHQ9e30sZHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9bix0aGlzLl9lbnRlckNsYXNzTmFtZT1pLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPXIsdGhpcy5lcnJvcnM9byx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPXN8fG5ldyBwdCh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO2lmKHQpe3ZhciBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249QShpLmR1cmF0aW9uKSksbnVsbCE9aS5kZWxheSYmKHIuZGVsYXk9QShpLmRlbGF5KSk7dmFyIG89aS5wYXJhbXM7aWYobyl7dmFyIGE9ci5wYXJhbXM7YXx8KGE9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtlJiZhLmhhc093blByb3BlcnR5KHQpfHwoYVt0XT1CKG9bdF0sYSxuLmVycm9ycykpfSl9fX0sdC5wcm90b3R5cGUuX2NvcHlPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5vcHRpb25zKXt2YXIgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe3ZhciBuPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9fXJldHVybiB0fSx0LnByb3RvdHlwZS5jcmVhdGVTdWJDb250ZXh0PWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgcj1ufHx0aGlzLmVsZW1lbnQsbz1uZXcgdCh0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnMoZSksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99LHQucHJvdG90eXBlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9aHQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9LHQucHJvdG90eXBlLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZT1mdW5jdGlvbih0LGUsbil7dmFyIGk9e2R1cmF0aW9uOm51bGwhPWU/ZTp0LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhudWxsIT1uP246MCkrdC5kZWxheSxlYXNpbmc6IiJ9LHI9bmV3IG10KHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMsaSx0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChyKSxpfSx0LnByb3RvdHlwZS5pbmNyZW1lbnRUaW1lPWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK3QpfSx0LnByb3RvdHlwZS5kZWxheU5leHRTdGVwPWZ1bmN0aW9uKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX0sdC5wcm90b3R5cGUuaW52b2tlUXVlcnk9ZnVuY3Rpb24odCxlLG4scixvLGEpe3ZhciBzPVtdO2lmKHImJnMucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKHV0LCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoY3QsIi4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTt2YXIgdT10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LHQsMSE9bik7MCE9PW4mJih1PW48MD91LnNsaWNlKHUubGVuZ3RoK24sdS5sZW5ndGgpOnUuc2xpY2UoMCxuKSkscy5wdXNoLmFwcGx5KHMsT2JqZWN0KGkuZCkodSkpfXJldHVybiBvfHwwIT1zLmxlbmd0aHx8YS5wdXNoKCdgcXVlcnkoIicrZSsnIilgIHJldHVybmVkIHplcm8gZWxlbWVudHMuIChVc2UgYHF1ZXJ5KCInK2UrJyIsIHsgb3B0aW9uYWw6IHRydWUgfSlgIGlmIHlvdSB3aXNoIHRvIGFsbG93IHRoaXMuKScpLHN9LHR9KCkscHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3RhcnRUaW1lPW4sdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWksdGhpcy5kdXJhdGlvbj0wLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9e30sdGhpcy5fY3VycmVudEtleWZyYW1lPXt9LHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT17fSx0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LHRoaXMuX2JhY2tGaWxsPXt9LHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzPU9iamVjdC5jcmVhdGUodGhpcy5fYmFja0ZpbGwse30pLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoZSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoZSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9cmV0dXJuIHQucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmdldEN1cnJlbnRTdHlsZVByb3BlcnRpZXMoKS5sZW5ndGg+MDtkZWZhdWx0OnJldHVybiEwfX0sdC5wcm90b3R5cGUuZ2V0Q3VycmVudFN0eWxlUHJvcGVydGllcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9jdXJyZW50S2V5ZnJhbWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImN1cnJlbnRUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVsYXlOZXh0U3RlcD1mdW5jdGlvbih0KXt2YXIgZT0xPT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmT2JqZWN0LmtleXModGhpcy5fcGVuZGluZ1N0eWxlcykubGVuZ3RoO3RoaXMuZHVyYXRpb258fGU/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZSt0KSxlJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9dH0sdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyB0KHRoaXMuX2RyaXZlcixlLG58fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX0sdC5wcm90b3R5cGUuX2xvYWRLZXlmcmFtZT1mdW5jdGlvbigpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9T2JqZWN0LmNyZWF0ZSh0aGlzLl9iYWNrRmlsbCx7fSksdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfSx0LnByb3RvdHlwZS5mb3J3YXJkRnJhbWU9ZnVuY3Rpb24oKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfSx0LnByb3RvdHlwZS5mb3J3YXJkVGltZT1mdW5jdGlvbih0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlc1t0XT1lLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzW3RdPWUsdGhpcy5fc3R5bGVTdW1tYXJ5W3RdPXt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6ZX19LHQucHJvdG90eXBlLmFsbG93T25seVRpbWVsaW5lU3R5bGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuYXBwbHlFbXB0eVN0ZXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZS5lYXNpbmc9dCksT2JqZWN0LmtleXModGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7ZS5fYmFja0ZpbGxbdF09ZS5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF18fHIuYSxlLl9jdXJyZW50S2V5ZnJhbWVbdF09ci5hfSksdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX0sdC5wcm90b3R5cGUuc2V0U3R5bGVzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvPXRoaXM7ZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuZWFzaW5nPWUpO3ZhciBhPWkmJmkucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpeyIqIj09PXQ/KG49bnx8T2JqZWN0LmtleXMoZSkpLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1yLmF9KTpQKHQsITEsaSl9KSxpfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPUIoc1t0XSxhLG4pO28uX3BlbmRpbmdTdHlsZXNbdF09ZSxvLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhc093blByb3BlcnR5KHQpfHwoby5fYmFja0ZpbGxbdF09by5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuaGFzT3duUHJvcGVydHkodCk/by5fZ2xvYmFsVGltZWxpbmVTdHlsZXNbdF06ci5hKSxvLl91cGRhdGVTdHlsZSh0LGUpfSl9LHQucHJvdG90eXBlLmFwcGx5U3R5bGVzVG9LZXlmcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9wZW5kaW5nU3R5bGVzLG49T2JqZWN0LmtleXMoZSk7MCE9bi5sZW5ndGgmJih0aGlzLl9wZW5kaW5nU3R5bGVzPXt9LG4uZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9jdXJyZW50S2V5ZnJhbWVbbl09ZVtuXX0pLE9iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5fY3VycmVudEtleWZyYW1lLmhhc093blByb3BlcnR5KGUpfHwodC5fY3VycmVudEtleWZyYW1lW2VdPXQuX2xvY2FsVGltZWxpbmVTdHlsZXNbZV0pfSkpfSx0LnByb3RvdHlwZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO09iamVjdC5rZXlzKHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dC5fbG9jYWxUaW1lbGluZVN0eWxlc1tlXTt0Ll9wZW5kaW5nU3R5bGVzW2VdPW4sdC5fdXBkYXRlU3R5bGUoZSxuKX0pfSx0LnByb3RvdHlwZS5nZXRGaW5hbEtleWZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicHJvcGVydGllcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpdC5wdXNoKGUpO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0Ll9zdHlsZVN1bW1hcnkpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9ZS5fc3R5bGVTdW1tYXJ5W25dLHI9dC5fc3R5bGVTdW1tYXJ5W25dOyghaXx8ci50aW1lPmkudGltZSkmJmUuX3VwZGF0ZVN0eWxlKG4sci52YWx1ZSl9KX0sdC5wcm90b3R5cGUuYnVpbGRLZXlmcmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7dmFyIGU9bmV3IFNldCxuPW5ldyBTZXQsaT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uLG89W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goZnVuY3Rpb24oYSxzKXt2YXIgdT1QKGEsITApO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9dVt0XTtpPT1yLm8/ZS5hZGQodCk6aT09ci5hJiZuLmFkZCh0KX0pLGl8fCh1Lm9mZnNldD1zL3QuZHVyYXRpb24pLG8ucHVzaCh1KX0pO3ZhciBhPWUuc2l6ZT9VKGUudmFsdWVzKCkpOltdLHM9bi5zaXplP1Uobi52YWx1ZXMoKSk6W107aWYoaSl7dmFyIHU9b1swXSxjPU0odSk7dS5vZmZzZXQ9MCxjLm9mZnNldD0xLG89W3UsY119cmV0dXJuIGF0KHRoaXMuZWxlbWVudCxvLGEscyx0aGlzLmR1cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX0sdH0oKSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyxhLHMpe3ZvaWQgMD09PXMmJihzPSExKTt2YXIgdT10LmNhbGwodGhpcyxlLG4sYS5kZWxheSl8fHRoaXM7cmV0dXJuIHUuZWxlbWVudD1uLHUua2V5ZnJhbWVzPWksdS5wcmVTdHlsZVByb3BzPXIsdS5wb3N0U3R5bGVQcm9wcz1vLHUuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPXMsdS50aW1pbmdzPXtkdXJhdGlvbjphLmR1cmF0aW9uLGRlbGF5OmEuZGVsYXksZWFzaW5nOmEuZWFzaW5nfSx1fXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNvbnRhaW5zQW5pbWF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfSxlLnByb3RvdHlwZS5idWlsZEtleWZyYW1lcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMua2V5ZnJhbWVzLGU9dGhpcy50aW1pbmdzLG49ZS5kZWxheSxpPWUuZHVyYXRpb24scj1lLmVhc2luZztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZSYmbil7dmFyIG89W10sYT1pK24scz1uL2EsdT1QKHRbMF0sITEpO3Uub2Zmc2V0PTAsby5wdXNoKHUpO3ZhciBjPVAodFswXSwhMSk7Yy5vZmZzZXQ9eXQocyksby5wdXNoKGMpO2Zvcih2YXIgbD10Lmxlbmd0aC0xLGY9MTtmPD1sO2YrKyl7dmFyIGg9UCh0W2ZdLCExKTtoLm9mZnNldD15dCgobitoLm9mZnNldCppKS9hKSxvLnB1c2goaCl9aT1hLG49MCxyPSIiLHQ9b31yZXR1cm4gYXQodGhpcy5lbGVtZW50LHQsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsaSxuLHIsITApfSxlfShwdCk7ZnVuY3Rpb24geXQodCxlKXt2b2lkIDA9PT1lJiYoZT0zKTt2YXIgbj1NYXRoLnBvdygxMCxlLTEpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn12YXIgdnQ9ZnVuY3Rpb24oKXt9LGd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5vcm1hbGl6ZVByb3BlcnR5TmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiBxKHQpfSxlLnByb3RvdHlwZS5ub3JtYWxpemVTdHlsZVZhbHVlPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPSIiLG89bi50b1N0cmluZygpLnRyaW0oKTtpZihidFtlXSYmMCE9PW4mJiIwIiE9PW4paWYoIm51bWJlciI9PXR5cGVvZiBuKXI9InB4IjtlbHNle3ZhciBhPW4ubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTthJiYwPT1hWzFdLmxlbmd0aCYmaS5wdXNoKCJQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAiK3QrIjoiK24pfXJldHVybiBvK3J9LGV9KHZ0KSxidD1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4id2lkdGgsaGVpZ2h0LG1pbldpZHRoLG1pbkhlaWdodCxtYXhXaWR0aCxtYXhIZWlnaHQsbGVmdCx0b3AsYm90dG9tLHJpZ2h0LGZvbnRTaXplLG91dGxpbmVXaWR0aCxvdXRsaW5lT2Zmc2V0LHBhZGRpbmdUb3AscGFkZGluZ0xlZnQscGFkZGluZ0JvdHRvbSxwYWRkaW5nUmlnaHQsbWFyZ2luVG9wLG1hcmdpbkxlZnQsbWFyZ2luQm90dG9tLG1hcmdpblJpZ2h0LGJvcmRlclJhZGl1cyxib3JkZXJXaWR0aCxib3JkZXJUb3BXaWR0aCxib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJCb3R0b21XaWR0aCx0ZXh0SW5kZW50LHBlcnNwZWN0aXZlIi5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGVbdF09ITB9KSxlfSgpO2Z1bmN0aW9uIF90KHQsZSxuLGkscixvLGEscyx1LGMsbCxmLGgpe3JldHVybnt0eXBlOjAsZWxlbWVudDp0LHRyaWdnZXJOYW1lOmUsaXNSZW1vdmFsVHJhbnNpdGlvbjpyLGZyb21TdGF0ZTpuLGZyb21TdHlsZXM6byx0b1N0YXRlOmksdG9TdHlsZXM6YSx0aW1lbGluZXM6cyxxdWVyaWVkRWxlbWVudHM6dSxwcmVTdHlsZVByb3BzOmMscG9zdFN0eWxlUHJvcHM6bCx0b3RhbFRpbWU6ZixlcnJvcnM6aH19dmFyIHd0PXt9LHh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPW59cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQsZSxuLGkpe3JldHVybiBmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB0LnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSxuLGkscil9KX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLG4saSl9LHQucHJvdG90eXBlLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9zdGF0ZVN0eWxlc1siKiJdLHI9dGhpcy5fc3RhdGVTdHlsZXNbdF0sbz1pP2kuYnVpbGRTdHlsZXMoZSxuKTp7fTtyZXR1cm4gcj9yLmJ1aWxkU3R5bGVzKGUsbik6b30sdC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCxlLG4scixvLGEscyx1LGMsbCl7dmFyIGg9W10sZD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8d3QscD10aGlzLmJ1aWxkU3R5bGVzKG4scyYmcy5wYXJhbXN8fHd0LGgpLG09dSYmdS5wYXJhbXN8fHd0LHk9dGhpcy5idWlsZFN0eWxlcyhyLG0saCksdj1uZXcgU2V0LGc9bmV3IE1hcCxiPW5ldyBNYXAsXz0idm9pZCI9PT1yLHc9e3BhcmFtczpPYmplY3QoaS5hKSh7fSxkLG0pfSx4PWw/W106bHQodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLGEscCx5LHcsYyxoKSxTPTA7aWYoeC5mb3JFYWNoKGZ1bmN0aW9uKHQpe1M9TWF0aC5tYXgodC5kdXJhdGlvbit0LmRlbGF5LFMpfSksaC5sZW5ndGgpcmV0dXJuIF90KGUsdGhpcy5fdHJpZ2dlck5hbWUsbixyLF8scCx5LFtdLFtdLGcsYixTLGgpO3guZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmVsZW1lbnQsaT1mKGcsbix7fSk7dC5wcmVTdHlsZVByb3BzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGlbdF09ITB9KTt2YXIgcj1mKGIsbix7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiByW3RdPSEwfSksbiE9PWUmJnYuYWRkKG4pfSk7dmFyIEU9VSh2LnZhbHVlcygpKTtyZXR1cm4gX3QoZSx0aGlzLl90cmlnZ2VyTmFtZSxuLHIsXyxwLHkseCxFLGcsYixTKX0sdH0oKSxTdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lfXJldHVybiB0LnByb3RvdHlwZS5idWlsZFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9LGk9TSh0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07bnVsbCE9biYmKGlbZV09bil9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciByPXQ7T2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbz1yW3RdO28ubGVuZ3RoPjEmJihvPUIobyxpLGUpKSxuW3RdPW99KX19KSxufSx0fSgpLEV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5uYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9e30sZS5zdGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnN0YXRlc1t0Lm5hbWVdPW5ldyBTdCh0LnN0eWxlLHQub3B0aW9ucyYmdC5vcHRpb25zLnBhcmFtc3x8e30pfSksQ3QodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksQ3QodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihlKXtuLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgeHQodCxlLG4uc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1uZXcgeHQodCx7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuITB9XSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LHRoaXMuc3RhdGVzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb250YWluc1F1ZXJpZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm1hdGNoVHJhbnNpdGlvbj1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQoZnVuY3Rpb24ocil7cmV0dXJuIHIubWF0Y2godCxlLG4saSl9KXx8bnVsbH0sdC5wcm90b3R5cGUubWF0Y2hTdHlsZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsbil9LHR9KCk7ZnVuY3Rpb24gQ3QodCxlLG4pe3QuaGFzT3duUHJvcGVydHkoZSk/dC5oYXNPd25Qcm9wZXJ0eShuKXx8KHRbbl09dFtlXSk6dC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbZV09dFtuXSl9dmFyIE90PW5ldyBzdCxUdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPW4sdGhpcy5fYW5pbWF0aW9ucz17fSx0aGlzLl9wbGF5ZXJzQnlJZD17fSx0aGlzLnBsYXllcnM9W119cmV0dXJuIHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W10saT10dCh0aGlzLl9kcml2ZXIsZSxuKTtpZihuLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBidWlsZCB0aGUgYW5pbWF0aW9uIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczogIituLmpvaW4oIlxuIikpO3RoaXMuX2FuaW1hdGlvbnNbdF09aX0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LmVsZW1lbnQscj1zKDAsdGhpcy5fbm9ybWFsaXplciwwLHQua2V5ZnJhbWVzLGUsbik7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGkscix0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsW10sITApfSx0LnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49e30pO3ZhciBvLHM9W10sdT10aGlzLl9hbmltYXRpb25zW3RdLGM9bmV3IE1hcDtpZih1PyhvPWx0KHRoaXMuX2RyaXZlcixlLHUsIm5nLWVudGVyIiwibmctbGVhdmUiLHt9LHt9LG4sT3QscykpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZihjLHQuZWxlbWVudCx7fSk7dC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdPW51bGx9KX0pOihzLnB1c2goIlRoZSByZXF1ZXN0ZWQgYW5pbWF0aW9uIGRvZXNuJ3QgZXhpc3Qgb3IgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQiKSxvPVtdKSxzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgdGhlIGFuaW1hdGlvbiBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6ICIrcy5qb2luKCJcbiIpKTtjLmZvckVhY2goZnVuY3Rpb24odCxlKXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09aS5fZHJpdmVyLmNvbXB1dGVTdHlsZShlLG4sci5hKX0pfSk7dmFyIGw9YShvLm1hcChmdW5jdGlvbih0KXt2YXIgZT1jLmdldCh0LmVsZW1lbnQpO3JldHVybiBpLl9idWlsZFBsYXllcih0LHt9LGUpfSkpO3JldHVybiB0aGlzLl9wbGF5ZXJzQnlJZFt0XT1sLGwub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVzdHJveSh0KX0pLHRoaXMucGxheWVycy5wdXNoKGwpLGx9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0UGxheWVyKHQpO2UuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9wbGF5ZXJzQnlJZFt0XTt2YXIgbj10aGlzLnBsYXllcnMuaW5kZXhPZihlKTtuPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG4sMSl9LHQucHJvdG90eXBlLl9nZXRQbGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyc0J5SWRbdF07aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB0aGUgdGltZWxpbmUgcGxheWVyIHJlZmVyZW5jZWQgYnkgIit0KTtyZXR1cm4gZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPWwoZSwiIiwiIiwiIik7cmV0dXJuIHUodGhpcy5fZ2V0UGxheWVyKHQpLG4scixpKSxmdW5jdGlvbigpe319LHQucHJvdG90eXBlLmNvbW1hbmQ9ZnVuY3Rpb24odCxlLG4saSl7aWYoInJlZ2lzdGVyIiE9bilpZigiY3JlYXRlIiE9bil7dmFyIHI9dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChuKXtjYXNlInBsYXkiOnIucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOnIucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpyLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpyLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6ci5maW5pc2goKTticmVhaztjYXNlImluaXQiOnIuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOnIuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChpWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fWVsc2UgdGhpcy5jcmVhdGUodCxlLGlbMF18fHt9KTtlbHNlIHRoaXMucmVnaXN0ZXIodCxpWzBdKX0sdH0oKSxrdD1bXSxBdD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sSXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGp0PSJfX25nX3JlbW92ZWQiLE10PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZvaWQgMD09PWUmJihlPSIiKSx0aGlzLm5hbWVzcGFjZUlkPWU7dmFyIG49dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P3Q6bnVsbH0obj90LnZhbHVlOnQpLG4pe3ZhciBpPU0odCk7ZGVsZXRlIGkudmFsdWUsdGhpcy5vcHRpb25zPWl9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmFic29yYk9wdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJhbXM7aWYoZSl7dmFyIG49dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe251bGw9PW5bdF0mJihuW3RdPWVbdF0pfSl9fSx0fSgpLFB0PW5ldyBNdCgidm9pZCIpLE50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5pZD10LHRoaXMuaG9zdEVsZW1lbnQ9ZSx0aGlzLl9lbmdpbmU9bix0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9e30sdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsVXQoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1yZXR1cm4gdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG89dGhpcztpZighdGhpcy5fdHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciBldmVudCAiJytuKyciIGJlY2F1c2UgdGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2UrIlwiIGRvZXNuJ3QgZXhpc3QhIik7aWYobnVsbD09bnx8MD09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbGlzdGVuIG9uIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGJlY2F1c2UgdGhlIHByb3ZpZGVkIGV2ZW50IGlzIHVuZGVmaW5lZCEnKTtpZigic3RhcnQiIT0ocj1uKSYmImRvbmUiIT1yKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyIGV2ZW50ICInK24rJyIgZm9yIHRoZSBhbmltYXRpb24gdHJpZ2dlciAiJytlKyciIGlzIG5vdCBzdXBwb3J0ZWQhJyk7dmFyIGE9Zih0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTpuLGNhbGxiYWNrOml9O2EucHVzaChzKTt2YXIgdT1mKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsdCx7fSk7cmV0dXJuIHUuaGFzT3duUHJvcGVydHkoZSl8fChVdCh0LCJuZy10cmlnZ2VyIiksVXQodCwibmctdHJpZ2dlci0iK2UpLHVbZV09UHQpLGZ1bmN0aW9uKCl7by5fZW5naW5lLmFmdGVyRmx1c2goZnVuY3Rpb24oKXt2YXIgdD1hLmluZGV4T2Yocyk7dD49MCYmYS5zcGxpY2UodCwxKSxvLl90cmlnZ2Vyc1tlXXx8ZGVsZXRlIHVbZV19KX19LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzW3RdJiYodGhpcy5fdHJpZ2dlcnNbdF09ZSwhMCl9LHQucHJvdG90eXBlLl9nZXRUcmlnZ2VyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyaWdnZXJzW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiB0cmlnZ2VyICInK3QrJyIgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQhJyk7cmV0dXJuIGV9LHQucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpczt2b2lkIDA9PT1pJiYoaT0hMCk7dmFyIG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxhPW5ldyBEdCh0aGlzLmlkLGUsdCkscz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtzfHwoVXQodCwibmctdHJpZ2dlciIpLFV0KHQsIm5nLXRyaWdnZXItIitlKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldCh0LHM9e30pKTt2YXIgdT1zW2VdLGM9bmV3IE10KG4sdGhpcy5pZCk7aWYoIShuJiZuLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmdSYmYy5hYnNvcmJPcHRpb25zKHUub3B0aW9ucyksc1tlXT1jLHV8fCh1PVB0KSwidm9pZCI9PT1jLnZhbHVlfHx1LnZhbHVlIT09Yy52YWx1ZSl7dmFyIGw9Zih0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudCx0LFtdKTtsLmZvckVhY2goZnVuY3Rpb24odCl7dC5uYW1lc3BhY2VJZD09ci5pZCYmdC50cmlnZ2VyTmFtZT09ZSYmdC5xdWV1ZWQmJnQuZGVzdHJveSgpfSk7dmFyIGg9by5tYXRjaFRyYW5zaXRpb24odS52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLGQ9ITE7aWYoIWgpe2lmKCFpKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGQ9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOnUsdG9TdGF0ZTpjLHBsYXllcjphLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmR9KSxkfHwoVXQodCwibmctYW5pbWF0ZS1xdWV1ZWQiKSxhLm9uU3RhcnQoZnVuY3Rpb24oKXtIdCh0LCJuZy1hbmltYXRlLXF1ZXVlZCIpfSkpLGEub25Eb25lKGZ1bmN0aW9uKCl7dmFyIGU9ci5wbGF5ZXJzLmluZGV4T2YoYSk7ZT49MCYmci5wbGF5ZXJzLnNwbGljZShlLDEpO3ZhciBuPXIuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtpZihuKXt2YXIgaT1uLmluZGV4T2YoYSk7aT49MCYmbi5zcGxpY2UoaSwxKX19KSx0aGlzLnBsYXllcnMucHVzaChhKSxsLnB1c2goYSksYX1pZighZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KSxpPU9iamVjdC5rZXlzKGUpO2lmKG4ubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtpZighZS5oYXNPd25Qcm9wZXJ0eShvKXx8dFtvXSE9PWVbb10pcmV0dXJuITF9cmV0dXJuITB9KHUucGFyYW1zLGMucGFyYW1zKSl7dmFyIHA9W10sbT1vLm1hdGNoU3R5bGVzKHUudmFsdWUsdS5wYXJhbXMscCkseT1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMscCk7cC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHApOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKGZ1bmN0aW9uKCl7TCh0LG0pLEQodCx5KX0pfX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2RlbGV0ZSB0aGlzLl90cmlnZ2Vyc1t0XSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goZnVuY3Rpb24oZSxuKXtkZWxldGUgZVt0XX0pLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihuLGkpe2UuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGksbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9dH0pKX0pfSx0LnByb3RvdHlwZS5jbGVhckVsZW1lbnRDYWNoZT1mdW5jdGlvbih0KXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZSh0KSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZSh0KTt2YXIgZT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmKGUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfSx0LnByb3RvdHlwZS5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXM7dm9pZCAwPT09biYmKG49ITEpLHRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCwiLm5nLXRyaWdnZXIiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCF0W2p0XSl7dmFyIG49aS5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KTtuLnNpemU/bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLnRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsITEsITApfSk6aS5jbGVhckVsZW1lbnRDYWNoZSh0KX19KX0sdC5wcm90b3R5cGUudHJpZ2dlckxlYXZlQW5pbWF0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihvKXt2YXIgcz1bXTtpZihPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKHIuX3RyaWdnZXJzW2VdKXt2YXIgbj1yLnRyaWdnZXIodCxlLCJ2b2lkIixpKTtuJiZzLnB1c2gobil9fSkscy5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSksbiYmYShzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gci5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUodCl9KSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldCh0KTtpZihuKXt2YXIgaT1uZXcgU2V0O24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1uLm5hbWU7aWYoIWkuaGFzKHIpKXtpLmFkZChyKTt2YXIgbz1lLl90cmlnZ2Vyc1tyXS5mYWxsYmFja1RyYW5zaXRpb24sYT1lLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KVtyXXx8UHQscz1uZXcgTXQoInZvaWQiKSx1PW5ldyBEdChlLmlkLHIsdCk7ZS5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLGUuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpyLHRyYW5zaXRpb246byxmcm9tU3RhdGU6YSx0b1N0YXRlOnMscGxheWVyOnUsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX19KX19LHQucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSwhMCksIXRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpe3ZhciByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXt2YXIgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZSBmb3IodmFyIGE9dDthPWEucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGEpKXtyPSEwO2JyZWFrfX10aGlzLnByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyh0KSxyP2kubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCExLGUpOihpLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtyZXR1cm4gbi5jbGVhckVsZW1lbnRDYWNoZSh0KX0pLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19LHQucHJvdG90eXBlLmluc2VydE5vZGU9ZnVuY3Rpb24odCxlKXtVdCh0LHRoaXMuX2hvc3RDbGFzc05hbWUpfSx0LnByb3RvdHlwZS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcj1pLnBsYXllcjtpZighci5kZXN0cm95ZWQpe3ZhciBvPWkuZWxlbWVudCxhPWUuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO2EmJmEuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLm5hbWU9PWkudHJpZ2dlck5hbWUpe3ZhciBuPWwobyxpLnRyaWdnZXJOYW1lLGkuZnJvbVN0YXRlLnZhbHVlLGkudG9TdGF0ZS52YWx1ZSk7bi5fZGF0YT10LHUoaS5wbGF5ZXIsZS5waGFzZSxuLGUuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT9lLl9lbmdpbmUuYWZ0ZXJGbHVzaChmdW5jdGlvbigpe3IuZGVzdHJveSgpfSk6bi5wdXNoKGkpfX0pLHRoaXMuX3F1ZXVlPVtdLG4uc29ydChmdW5jdGlvbih0LG4pe3ZhciBpPXQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQscj1uLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1pfHwwPT1yP2ktcjplLl9lbmdpbmUuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0LmVsZW1lbnQsbi5lbGVtZW50KT8xOi0xfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVzdHJveSgpfSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCx0KX0sdC5wcm90b3R5cGUuZWxlbWVudENvbnRhaW5zRGF0YT1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSwhIXRoaXMuX3F1ZXVlLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZWxlbWVudD09PXR9KXx8ZX0sdH0oKSxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuYm9keU5vZGU9dCx0aGlzLmRyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9bix0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdIb3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0wLHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt9fXJldHVybiB0LnByb3RvdHlwZS5fb25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicXVldWVkUGxheWVycyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5xdWV1ZWQmJnQucHVzaChlKX0pfSksdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5jcmVhdGVOYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgTnQodCxlLHRoaXMpO3JldHVybiBlLnBhcmVudE5vZGU/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QobixlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsbiksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09bn0sdC5wcm90b3R5cGUuX2JhbGFuY2VOYW1lc3BhY2VMaXN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtpZihuPj0wKXtmb3IodmFyIGk9ITEscj1uO3I+PTA7ci0tKWlmKHRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLl9uYW1lc3BhY2VMaXN0W3JdLmhvc3RFbGVtZW50LGUpKXt0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShyKzEsMCx0KSxpPSEwO2JyZWFrfWl8fHRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKDAsMCx0KX1lbHNlIHRoaXMuX25hbWVzcGFjZUxpc3QucHVzaCh0KTtyZXR1cm4gdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5zZXQoZSx0KSx0fSx0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtyZXR1cm4gbnx8KG49dGhpcy5jcmVhdGVOYW1lc3BhY2UodCxlKSksbn0sdC5wcm90b3R5cGUucmVnaXN0ZXJUcmlnZ2VyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07aSYmaS5yZWdpc3RlcihlLG4pJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih0KXt2YXIgaT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTt0aGlzLmFmdGVyRmx1c2goZnVuY3Rpb24oKXtuLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShpLmhvc3RFbGVtZW50KSxkZWxldGUgbi5fbmFtZXNwYWNlTG9va3VwW3RdO3ZhciBlPW4uX25hbWVzcGFjZUxpc3QuaW5kZXhPZihpKTtlPj0wJiZuLl9uYW1lc3BhY2VMaXN0LnNwbGljZShlLDEpfSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoZnVuY3Rpb24oKXtyZXR1cm4gaS5kZXN0cm95KGUpfSl9fSx0LnByb3RvdHlwZS5fZmV0Y2hOYW1lc3BhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX0sdC5wcm90b3R5cGUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBTZXQsbj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYobilmb3IodmFyIGk9T2JqZWN0LmtleXMobikscj0wO3I8aS5sZW5ndGg7cisrKXt2YXIgbz1uW2lbcl1dLm5hbWVzcGFjZUlkO2lmKG8pe3ZhciBhPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG8pO2EmJmUuYWRkKGEpfX1yZXR1cm4gZX0sdC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbih0LGUsbixpKXtpZihMdChlKSl7dmFyIHI9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYocilyZXR1cm4gci50cmlnZ2VyKGUsbixpKSwhMH1yZXR1cm4hMX0sdC5wcm90b3R5cGUuaW5zZXJ0Tm9kZT1mdW5jdGlvbih0LGUsbixpKXtpZihMdChlKSl7dmFyIHI9ZVtqdF07aWYociYmci5zZXRGb3JSZW1vdmFsKXtyLnNldEZvclJlbW92YWw9ITEsci5zZXRGb3JNb3ZlPSEwO3ZhciBvPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO28+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UobywxKX1pZih0KXt2YXIgYT10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTthJiZhLmluc2VydE5vZGUoZSxuKX1pJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9fSx0LnByb3RvdHlwZS5jb2xsZWN0RW50ZXJFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKHQpfSx0LnByb3RvdHlwZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQ9ZnVuY3Rpb24odCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLFV0KHQsIm5nLWFuaW1hdGUtZGlzYWJsZWQiKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksSHQodCwibmctYW5pbWF0ZS1kaXNhYmxlZCIpKX0sdC5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0LGUsbil7aWYoTHQoZSkpe3ZhciBpPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpP2kucmVtb3ZlTm9kZShlLG4pOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLG4pfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoZSxuKX0sdC5wcm90b3R5cGUubWFya0VsZW1lbnRBc1JlbW92ZWQ9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtqdF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDppLGhhc0FuaW1hdGlvbjpuLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIEx0KGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLG4saSxyKTpmdW5jdGlvbigpe319LHQucHJvdG90eXBlLl9idWlsZEluc3RydWN0aW9uPWZ1bmN0aW9uKHQsZSxuLGkscil7cmV0dXJuIHQudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcix0LmVsZW1lbnQsdC5mcm9tU3RhdGUudmFsdWUsdC50b1N0YXRlLnZhbHVlLG4saSx0LmZyb21TdGF0ZS5vcHRpb25zLHQudG9TdGF0ZS5vcHRpb25zLGUscil9LHQucHJvdG90eXBlLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy10cmlnZ2VyIiwhMCk7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudCh0KX0pLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKG49dGhpcy5kcml2ZXIucXVlcnkodCwiLm5nLWFuaW1hdGluZyIsITApKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl9KX0sdC5wcm90b3R5cGUuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QucXVldWVkP3QubWFya2VkRm9yRGVzdHJveT0hMDp0LmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS53aGVuUmVuZGVyaW5nRG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe2lmKHQucGxheWVycy5sZW5ndGgpcmV0dXJuIGEodC5wbGF5ZXJzKS5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZSgpfSk7ZSgpfSl9LHQucHJvdG90eXBlLnByb2Nlc3NMZWF2ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbanRdO2lmKG4mJm4uc2V0Rm9yUmVtb3ZhbCl7aWYodFtqdF09QXQsbi5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO3ZhciBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKG4ubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxuLnNldEZvclJlbW92YWwpfXRoaXMuZHJpdmVyLm1hdGNoZXNFbGVtZW50KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIikmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChmdW5jdGlvbihuKXtlLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKX0pfSx0LnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3ZvaWQgMD09PXQmJih0PS0xKTt2YXIgbj1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbih0LG4pe3JldHVybiBlLl9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LG4pfSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKHZhciBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylVdCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7dmFyIHI9W107dHJ5e249dGhpcy5fZmx1c2hBbmltYXRpb25zKHIsdCl9ZmluYWxseXtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0oKX19ZWxzZSBmb3IoaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe3ZhciBvPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sbi5sZW5ndGg/YShuKS5vbkRvbmUoZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSk6by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX19LHQucHJvdG90eXBlLnJlcG9ydEVycm9yPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHByb2Nlc3MgYW5pbWF0aW9ucyBkdWUgdG8gdGhlIGZvbGxvd2luZyBmYWlsZWQgdHJpZ2dlciB0cmFuc2l0aW9uc1xuICIrdC5qb2luKCJcbiIpKX0sdC5wcm90b3R5cGUuX2ZsdXNoQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsbz1uZXcgc3Qscz1bXSx1PW5ldyBNYXAsYz1bXSxsPW5ldyBNYXAsaD1uZXcgTWFwLGQ9bmV3IE1hcCxwPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7cC5hZGQodCk7Zm9yKHZhciBlPW4uZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApLGk9MDtpPGUubGVuZ3RoO2krKylwLmFkZChlW2ldKX0pO3ZhciBtPXRoaXMuYm9keU5vZGUseT1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksdj1WdCh5LHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZz1uZXcgTWFwLGI9MDt2LmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctZW50ZXIiK2IrKztnLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSk7Zm9yKHZhciBfPVtdLHc9bmV3IFNldCx4PW5ldyBTZXQsUz0wO1M8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtTKyspKFU9KEI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW1NdKVtqdF0pJiZVLnNldEZvclJlbW92YWwmJihfLnB1c2goQiksdy5hZGQoQiksVS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB3LmFkZCh0KX0pOnguYWRkKEIpKTt2YXIgRT1uZXcgTWFwLEM9VnQoeSxBcnJheS5mcm9tKHcpKTtDLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj0ibmctbGVhdmUiK2IrKztFLnNldChlLG4pLHQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gVXQodCxuKX0pfSksdC5wdXNoKGZ1bmN0aW9uKCl7di5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49Zy5nZXQoZSk7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBIdCh0LG4pfSl9KSxDLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgbj1FLmdldChlKTt0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsbil9KX0pLF8uZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb2Nlc3NMZWF2ZU5vZGUodCl9KX0pO2Zvcih2YXIgTz1bXSxUPVtdLGs9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtrPj0wO2stLSl0aGlzLl9uYW1lc3BhY2VMaXN0W2tdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnBsYXllcixpPXQuZWxlbWVudDtpZihPLnB1c2goZSksbi5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7dmFyIHI9aVtqdF07aWYociYmci5zZXRGb3JNb3ZlKXJldHVybiB2b2lkIGUuZGVzdHJveSgpfXZhciBhPSFtfHwhbi5kcml2ZXIuY29udGFpbnNFbGVtZW50KG0saSksdT1FLmdldChpKSxwPWcuZ2V0KGkpLHk9bi5fYnVpbGRJbnN0cnVjdGlvbih0LG8scCx1LGEpO2lmKHkuZXJyb3JzJiZ5LmVycm9ycy5sZW5ndGgpVC5wdXNoKHkpO2Vsc2V7aWYoYSlyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwoaSx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChpLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7aWYodC5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gZS5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIEwoaSx5LmZyb21TdHlsZXMpfSksZS5vbkRlc3Ryb3koZnVuY3Rpb24oKXtyZXR1cm4gRChpLHkudG9TdHlsZXMpfSksdm9pZCBzLnB1c2goZSk7eS50aW1lbGluZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMH0pLG8uYXBwZW5kKGkseS50aW1lbGluZXMpLGMucHVzaCh7aW5zdHJ1Y3Rpb246eSxwbGF5ZXI6ZSxlbGVtZW50Oml9KSx5LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBmKGwsdCxbXSkucHVzaChlKX0pLHkucHJlU3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGgpe3ZhciBpPWguZ2V0KGUpO2l8fGguc2V0KGUsaT1uZXcgU2V0KSxuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGkuYWRkKHQpfSl9fSkseS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCksaT1kLmdldChlKTtpfHxkLnNldChlLGk9bmV3IFNldCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBpLmFkZCh0KX0pfSl9fSk7aWYoVC5sZW5ndGgpe3ZhciBBPVtdO1QuZm9yRWFjaChmdW5jdGlvbih0KXtBLnB1c2goIkAiK3QudHJpZ2dlck5hbWUrIiBoYXMgZmFpbGVkIGR1ZSB0bzpcbiIpLHQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEEucHVzaCgiLSAiK3QrIlxuIil9KX0pLE8uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5kZXN0cm95KCl9KSx0aGlzLnJlcG9ydEVycm9yKEEpfXZhciBJPW5ldyBNYXAsaj1uZXcgTWFwO2MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQ7by5oYXMoZSkmJihqLnNldChlLGUpLG4uX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQucGxheWVyLm5hbWVzcGFjZUlkLHQuaW5zdHJ1Y3Rpb24sSSkpfSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudDtuLl9nZXRQcmV2aW91c1BsYXllcnMoZSwhMSx0Lm5hbWVzcGFjZUlkLHQudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChmdW5jdGlvbih0KXtmKEksZSxbXSkucHVzaCh0KSx0LmRlc3Ryb3koKX0pfSk7dmFyIE09Xy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEd0KHQsaCxkKX0pLFA9bmV3IE1hcDt6dChQLHRoaXMuZHJpdmVyLHgsZCxyLmEpLmZvckVhY2goZnVuY3Rpb24odCl7R3QodCxoLGQpJiZNLnB1c2godCl9KTt2YXIgTj1uZXcgTWFwO3YuZm9yRWFjaChmdW5jdGlvbih0LGUpe3p0KE4sbi5kcml2ZXIsbmV3IFNldCh0KSxoLHIubyl9KSxNLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9UC5nZXQodCksbj1OLmdldCh0KTtQLnNldCh0LE9iamVjdChpLmEpKHt9LGUsbikpfSk7dmFyIFI9W10sRj1bXSx6PXt9O2MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmVsZW1lbnQsaT10LnBsYXllcixyPXQuaW5zdHJ1Y3Rpb247aWYoby5oYXMoZSkpe2lmKHAuaGFzKGUpKXJldHVybiBpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsci50b1N0eWxlcyl9KSxpLmRpc2FibGVkPSEwLGkub3ZlcnJpZGVUb3RhbFRpbWUoci50b3RhbFRpbWUpLHZvaWQgcy5wdXNoKGkpO3ZhciBjPXo7aWYoai5zaXplPjEpe2Zvcih2YXIgbD1lLGY9W107bD1sLnBhcmVudE5vZGU7KXt2YXIgaD1qLmdldChsKTtpZihoKXtjPWg7YnJlYWt9Zi5wdXNoKGwpfWYuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gai5zZXQodCxjKX0pfXZhciBkPW4uX2J1aWxkQW5pbWF0aW9uKGkubmFtZXNwYWNlSWQscixJLHUsTixQKTtpZihpLnNldFJlYWxQbGF5ZXIoZCksYz09PXopUi5wdXNoKGkpO2Vsc2V7dmFyIG09bi5wbGF5ZXJzQnlFbGVtZW50LmdldChjKTttJiZtLmxlbmd0aCYmKGkucGFyZW50UGxheWVyPWEobSkpLHMucHVzaChpKX19ZWxzZSBMKGUsci5mcm9tU3R5bGVzKSxpLm9uRGVzdHJveShmdW5jdGlvbigpe3JldHVybiBEKGUsci50b1N0eWxlcyl9KSxGLnB1c2goaSkscC5oYXMoZSkmJnMucHVzaChpKX0pLEYuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT11LmdldCh0LmVsZW1lbnQpO2lmKGUmJmUubGVuZ3RoKXt2YXIgbj1hKGUpO3Quc2V0UmVhbFBsYXllcihuKX19KSxzLmZvckVhY2goZnVuY3Rpb24odCl7dC5wYXJlbnRQbGF5ZXI/dC5zeW5jUGxheWVyRXZlbnRzKHQucGFyZW50UGxheWVyKTp0LmRlc3Ryb3koKX0pO2Zvcih2YXIgVj0wO1Y8Xy5sZW5ndGg7VisrKXt2YXIgQixVPShCPV9bVl0pW2p0XTtpZihIdChCLCJuZy1sZWF2ZSIpLCFVfHwhVS5oYXNBbmltYXRpb24pe3ZhciBIPVtdO2lmKGwuc2l6ZSl7dmFyIHE9bC5nZXQoQik7cSYmcS5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKHEpKTtmb3IodmFyIEc9dGhpcy5kcml2ZXIucXVlcnkoQiwiLm5nLWFuaW1hdGluZyIsITApLFc9MDtXPEcubGVuZ3RoO1crKyl7dmFyIFk9bC5nZXQoR1tXXSk7WSYmWS5sZW5ndGgmJkgucHVzaC5hcHBseShILE9iamVjdChpLmQpKFkpKX19dmFyIFE9SC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuZGVzdHJveWVkfSk7US5sZW5ndGg/cXQodGhpcyxCLFEpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShCKX19cmV0dXJuIF8ubGVuZ3RoPTAsUi5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucGxheWVycy5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7dC5kZXN0cm95KCk7dmFyIGU9bi5wbGF5ZXJzLmluZGV4T2YodCk7bi5wbGF5ZXJzLnNwbGljZShlLDEpfSksdC5wbGF5KCl9KSxSfSx0LnByb3RvdHlwZS5lbGVtZW50Q29udGFpbnNEYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEsaT1lW2p0XTtyZXR1cm4gaSYmaS5zZXRGb3JSZW1vdmFsJiYobj0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKG49ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYobj0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8bn0sdC5wcm90b3R5cGUuYWZ0ZXJGbHVzaD1mdW5jdGlvbih0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmU9ZnVuY3Rpb24odCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9nZXRQcmV2aW91c1BsYXllcnM9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz1bXTtpZihlKXt2YXIgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYobz1hKX1lbHNle3ZhciBzPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYocyl7dmFyIHU9IXJ8fCJ2b2lkIj09cjtzLmZvckVhY2goZnVuY3Rpb24odCl7dC5xdWV1ZWR8fCh1fHx0LnRyaWdnZXJOYW1lPT1pKSYmby5wdXNoKHQpfSl9fXJldHVybihufHxpKSYmKG89by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIShuJiZuIT10Lm5hbWVzcGFjZUlkfHxpJiZpIT10LnRyaWdnZXJOYW1lKX0pKSxvfSx0LnByb3RvdHlwZS5fYmVmb3JlQW5pbWF0aW9uQnVpbGQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG8sYT1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsdT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWUsYz1mdW5jdGlvbih0KXt2YXIgaT10LmVsZW1lbnQscj1pIT09YSxvPWYobixpLFtdKTtsLl9nZXRQcmV2aW91c1BsYXllcnMoaSxyLHMsdSxlLnRvU3RhdGUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRSZWFsUGxheWVyKCk7ZS5iZWZvcmVEZXN0cm95JiZlLmJlZm9yZURlc3Ryb3koKSx0LmRlc3Ryb3koKSxvLnB1c2godCl9KX0sbD10aGlzO3RyeXtmb3IodmFyIGg9T2JqZWN0KGkuZSkoZS50aW1lbGluZXMpLGQ9aC5uZXh0KCk7IWQuZG9uZTtkPWgubmV4dCgpKWMoZC52YWx1ZSl9Y2F0Y2godCl7cj17ZXJyb3I6dH19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKG89aC5yZXR1cm4pJiZvLmNhbGwoaCl9ZmluYWxseXtpZihyKXRocm93IHIuZXJyb3J9fUwoYSxlLmZyb21TdHlsZXMpfSx0LnByb3RvdHlwZS5fYnVpbGRBbmltYXRpb249ZnVuY3Rpb24odCxlLG4saSxvLHUpe3ZhciBjPXRoaXMsbD1lLnRyaWdnZXJOYW1lLGg9ZS5lbGVtZW50LGQ9W10scD1uZXcgU2V0LG09bmV3IFNldCx5PWUudGltZWxpbmVzLm1hcChmdW5jdGlvbihlKXt2YXIgYT1lLmVsZW1lbnQ7cC5hZGQoYSk7dmFyIGY9YVtqdF07aWYoZiYmZi5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IHIuZChlLmR1cmF0aW9uLGUuZGVsYXkpO3ZhciB5LHYsZz1hIT09aCxiPSh5PShuLmdldChhKXx8a3QpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRSZWFsUGxheWVyKCl9KSx2PVtdLGZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvIGluc3RhbmNlb2Ygci5uP3Qoby5wbGF5ZXJzLG4pOm4ucHVzaChvKX19KHksdiksdikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdC5lbGVtZW50JiZ0LmVsZW1lbnQ9PT1hfSksXz1vLmdldChhKSx3PXUuZ2V0KGEpLHg9cygwLGMuX25vcm1hbGl6ZXIsMCxlLmtleWZyYW1lcyxfLHcpLFM9Yy5fYnVpbGRQbGF5ZXIoZSx4LGIpO2lmKGUuc3ViVGltZWxpbmUmJmkmJm0uYWRkKGEpLGcpe3ZhciBFPW5ldyBEdCh0LGwsYSk7RS5zZXRSZWFsUGxheWVyKFMpLGQucHVzaChFKX1yZXR1cm4gU30pO2QuZm9yRWFjaChmdW5jdGlvbih0KXtmKGMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LFtdKS5wdXNoKHQpLHQub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgaTtpZih0IGluc3RhbmNlb2YgTWFwKXtpZihpPXQuZ2V0KGUpKXtpZihpLmxlbmd0aCl7dmFyIHI9aS5pbmRleE9mKG4pO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJnQuZGVsZXRlKGUpfX1lbHNlKGk9dFtlXSkmJihpLmxlbmd0aCYmKHI9aS5pbmRleE9mKG4pLGkuc3BsaWNlKHIsMSkpLDA9PWkubGVuZ3RoJiZkZWxldGUgdFtlXSk7cmV0dXJuIGl9KGMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsdC5lbGVtZW50LHQpfSl9KSxwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQsIm5nLWFuaW1hdGluZyIpfSk7dmFyIHY9YSh5KTtyZXR1cm4gdi5vbkRlc3Ryb3koZnVuY3Rpb24oKXtwLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIEh0KHQsIm5nLWFuaW1hdGluZyIpfSksRChoLGUudG9TdHlsZXMpfSksbS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2YoaSx0LFtdKS5wdXNoKHYpfSksdn0sdC5wcm90b3R5cGUuX2J1aWxkUGxheWVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKHQuZWxlbWVudCxlLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxuKTpuZXcgci5kKHQuZHVyYXRpb24sdC5kZWxheSl9LHR9KCksRHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1uLHRoaXMuX3BsYXllcj1uZXcgci5kLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5tYXJrZWRGb3JEZXN0cm95PSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5xdWV1ZWQ9ITAsdGhpcy50b3RhbFRpbWU9MH1yZXR1cm4gdC5wcm90b3R5cGUuc2V0UmVhbFBsYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2NvbnRhaW5zUmVhbFBsYXllcnx8KHRoaXMuX3BsYXllcj10LE9iamVjdC5rZXlzKHRoaXMuX3F1ZXVlZENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihuKXtlLl9xdWV1ZWRDYWxsYmFja3Nbbl0uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdSh0LG4sdm9pZCAwLGUpfSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9e30sdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSEwLHRoaXMub3ZlcnJpZGVUb3RhbFRpbWUodC50b3RhbFRpbWUpLHRoaXMucXVldWVkPSExKX0sdC5wcm90b3R5cGUuZ2V0UmVhbFBsYXllcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9LHQucHJvdG90eXBlLm92ZXJyaWRlVG90YWxUaW1lPWZ1bmN0aW9uKHQpe3RoaXMudG90YWxUaW1lPXR9LHQucHJvdG90eXBlLnN5bmNQbGF5ZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuX3BsYXllcjtuLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIG4udHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpfSksdC5vbkRvbmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5maW5pc2goKX0pLHQub25EZXN0cm95KGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLl9xdWV1ZUV2ZW50PWZ1bmN0aW9uKHQsZSl7Zih0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsdCksdGhpcy5fcGxheWVyLm9uU3RhcnQodCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuX3BsYXllci5pbml0KCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGxheWVyO2UudHJpZ2dlckNhbGxiYWNrJiZlLnRyaWdnZXJDYWxsYmFjayh0KX0sdH0oKTtmdW5jdGlvbiBMdCh0KXtyZXR1cm4gdCYmMT09PXQubm9kZVR5cGV9ZnVuY3Rpb24gRnQodCxlKXt2YXIgbj10LnN0eWxlLmRpc3BsYXk7cmV0dXJuIHQuc3R5bGUuZGlzcGxheT1udWxsIT1lP2U6Im5vbmUiLG59ZnVuY3Rpb24genQodCxlLG4saSxyKXt2YXIgbz1bXTtuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaChGdCh0KSl9KTt2YXIgYT1bXTtpLmZvckVhY2goZnVuY3Rpb24obixpKXt2YXIgbz17fTtuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49b1t0XT1lLmNvbXB1dGVTdHlsZShpLHQscik7biYmMCE9bi5sZW5ndGh8fChpW2p0XT1JdCxhLnB1c2goaSkpfSksdC5zZXQoaSxvKX0pO3ZhciBzPTA7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gRnQodCxvW3MrK10pfSksYX1mdW5jdGlvbiBWdCh0LGUpe3ZhciBuPW5ldyBNYXA7aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNldCh0LFtdKX0pLDA9PWUubGVuZ3RoKXJldHVybiBuO3ZhciBpPW5ldyBTZXQoZSkscj1uZXcgTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24gdChlKXtpZighZSlyZXR1cm4gMTt2YXIgbz1yLmdldChlKTtpZihvKXJldHVybiBvO3ZhciBhPWUucGFyZW50Tm9kZTtyZXR1cm4gbz1uLmhhcyhhKT9hOmkuaGFzKGEpPzE6dChhKSxyLnNldChlLG8pLG99KHQpOzEhPT1lJiZuLmdldChlKS5wdXNoKHQpfSksbn12YXIgQnQ9IiQkY2xhc3NlcyI7ZnVuY3Rpb24gVXQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj10W0J0XTtufHwobj10W0J0XT17fSksbltlXT0hMH19ZnVuY3Rpb24gSHQodCxlKXtpZih0LmNsYXNzTGlzdCl0LmNsYXNzTGlzdC5yZW1vdmUoZSk7ZWxzZXt2YXIgbj10W0J0XTtuJiZkZWxldGUgbltlXX19ZnVuY3Rpb24gcXQodCxlLG4pe2Eobikub25Eb25lKGZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvY2Vzc0xlYXZlTm9kZShlKX0pfWZ1bmN0aW9uIEd0KHQsZSxuKXt2YXIgaT1uLmdldCh0KTtpZighaSlyZXR1cm4hMTt2YXIgcj1lLmdldCh0KTtyZXR1cm4gcj9pLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHIuYWRkKHQpfSk6ZS5zZXQodCxpKSxuLmRlbGV0ZSh0KSwhMH12YXIgV3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgUnQodCxlLG4pLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBUdCh0LGUsbiksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBpLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9fXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3RlclRyaWdnZXI9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbz10KyItIitpLGE9dGhpcy5fdHJpZ2dlckNhY2hlW29dO2lmKCFhKXt2YXIgcz1bXSx1PXR0KHRoaXMuX2RyaXZlcixyLHMpO2lmKHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlIGFuaW1hdGlvbiB0cmlnZ2VyICInK2krJyIgaGFzIGZhaWxlZCB0byBidWlsZCBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4gLSAnK3Muam9pbigiXG4gLSAiKSk7YT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRXQodCxlKX0oaSx1KSx0aGlzLl90cmlnZ2VyQ2FjaGVbb109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLGksYSl9LHQucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3Rlcih0LGUpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9LHQucHJvdG90eXBlLm9uSW5zZXJ0PWZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsbixpKX0sdC5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUsbil9LHQucHJvdG90eXBlLmRpc2FibGVBbmltYXRpb25zPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX0sdC5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbih0LGUsbixyKXtpZigiQCI9PW4uY2hhckF0KDApKXt2YXIgbz1PYmplY3QoaS5jKShoKG4pLDIpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQob1swXSxlLG9bMV0scil9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLG4scil9LHQucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbixyLG8pe2lmKCJAIj09bi5jaGFyQXQoMCkpe3ZhciBhPU9iamVjdChpLmMpKGgobiksMik7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihhWzBdLGUsYVsxXSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLG4scixvKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9LTEpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGxheWVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMuY29uY2F0KHRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX0sdH0oKSxZdD0iYW5pbWF0aW9uIixRdD0iYW5pbWF0aW9uZW5kIixadD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSl7dmFyIHM9dGhpczt0aGlzLl9lbGVtZW50PXQsdGhpcy5fbmFtZT1lLHRoaXMuX2R1cmF0aW9uPW4sdGhpcy5fZGVsYXk9aSx0aGlzLl9lYXNpbmc9cix0aGlzLl9maWxsTW9kZT1vLHRoaXMuX29uRG9uZUZuPWEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX3N0YXJ0VGltZT0wLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5fZXZlbnRGbj1mdW5jdGlvbih0KXtyZXR1cm4gcy5faGFuZGxlQ2FsbGJhY2sodCl9fXJldHVybiB0LnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpe3ZhciB0LGUsbjtlPXRoaXMuX2R1cmF0aW9uKyJtcyAiK3RoaXMuX2Vhc2luZysiICIrdGhpcy5fZGVsYXkrIm1zIDEgbm9ybWFsICIrdGhpcy5fZmlsbE1vZGUrIiAiK3RoaXMuX25hbWUsKG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS50cmltKCkpLmxlbmd0aCYmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspIiwiPT09dC5jaGFyQXQobikmJjB9KG4pLGU9bisiLCAiK2UpLHRlKHQsIiIsZSksSnQodGhpcy5fZWxlbWVudCx0aGlzLl9ldmVudEZuLCExKSx0aGlzLl9zdGFydFRpbWU9RGF0ZS5ub3coKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInBhdXNlZCIpfSx0LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtLdCh0aGlzLl9lbGVtZW50LHRoaXMuX25hbWUsInJ1bm5pbmciKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9WHQodGhpcy5fZWxlbWVudCx0aGlzLl9uYW1lKTt0aGlzLl9wb3NpdGlvbj10KnRoaXMuX2R1cmF0aW9uLHRlKHRoaXMuX2VsZW1lbnQsIkRlbGF5IiwiLSIrdGhpcy5fcG9zaXRpb24rIm1zIixlKX0sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259LHQucHJvdG90eXBlLl9oYW5kbGVDYWxsYmFjaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9uZ1Rlc3RNYW51YWxUaW1lc3RhbXB8fERhdGUubm93KCksbj0xZTMqcGFyc2VGbG9hdCh0LmVsYXBzZWRUaW1lLnRvRml4ZWQoMykpO3QuYW5pbWF0aW9uTmFtZT09dGhpcy5fbmFtZSYmTWF0aC5tYXgoZS10aGlzLl9zdGFydFRpbWUsMCk+PXRoaXMuX2RlbGF5JiZuPj10aGlzLl9kdXJhdGlvbiYmdGhpcy5maW5pc2goKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbigpLEp0KHRoaXMuX2VsZW1lbnQsdGhpcy5fZXZlbnRGbiwhMCkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGk7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZmluaXNoKCksZT10aGlzLl9uYW1lLChpPSR0KG49ZWUodD10aGlzLl9lbGVtZW50LCIiKS5zcGxpdCgiLCIpLGUpKT49MCYmKG4uc3BsaWNlKGksMSksdGUodCwiIixuLmpvaW4oIiwiKSkpKX0sdH0oKTtmdW5jdGlvbiBLdCh0LGUsbil7dGUodCwiUGxheVN0YXRlIixuLFh0KHQsZSkpfWZ1bmN0aW9uIFh0KHQsZSl7dmFyIG49ZWUodCwiIik7cmV0dXJuIG4uaW5kZXhPZigiLCIpPjA/JHQobi5zcGxpdCgiLCIpLGUpOiR0KFtuXSxlKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uaW5kZXhPZihlKT49MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBKdCh0LGUsbil7bj90LnJlbW92ZUV2ZW50TGlzdGVuZXIoUXQsZSk6dC5hZGRFdmVudExpc3RlbmVyKFF0LGUpfWZ1bmN0aW9uIHRlKHQsZSxuLGkpe3ZhciByPVl0K2U7aWYobnVsbCE9aSl7dmFyIG89dC5zdHlsZVtyXTtpZihvLmxlbmd0aCl7dmFyIGE9by5zcGxpdCgiLCIpO2FbaV09bixuPWEuam9pbigiLCIpfX10LnN0eWxlW3JdPW59ZnVuY3Rpb24gZWUodCxlKXtyZXR1cm4gdC5zdHlsZVtZdCtlXX12YXIgbmU9ImxpbmVhciIsaWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRbdC5JTklUSUFMSVpFRD0xXT0iSU5JVElBTElaRUQiLHRbdC5TVEFSVEVEPTJdPSJTVEFSVEVEIix0W3QuRklOSVNIRUQ9M109IkZJTklTSEVEIix0W3QuREVTVFJPWUVEPTRdPSJERVNUUk9ZRUQiLHR9KHt9KSxyZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSl7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLmFuaW1hdGlvbk5hbWU9bix0aGlzLl9kdXJhdGlvbj1pLHRoaXMuX2RlbGF5PXIsdGhpcy5fZmluYWxTdHlsZXM9YSx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLmN1cnJlbnRTbmFwc2hvdD17fSx0aGlzLnN0YXRlPTAsdGhpcy5lYXNpbmc9b3x8bmUsdGhpcy50b3RhbFRpbWU9aStyLHRoaXMuX2J1aWxkU3R5bGVyKCl9cmV0dXJuIHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRvbmU9ZnVuY3Rpb24odCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWllLkRFU1RST1lFRHx8KHRoaXMuc3RhdGU9aWUuREVTVFJPWUVELHRoaXMuX3N0eWxlci5kZXN0cm95KCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5fZmx1c2hEb25lRm5zPWZ1bmN0aW9uKCl7dGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXX0sdC5wcm90b3R5cGUuX2ZsdXNoU3RhcnRGbnM9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuaW5pdCgpLHRoaXMuc3RhdGU+PWllLkZJTklTSEVEfHwodGhpcy5zdGF0ZT1pZS5GSU5JU0hFRCx0aGlzLl9zdHlsZXIuZmluaXNoKCksdGhpcy5fZmx1c2hTdGFydEZucygpLHRoaXMuX2ZsdXNoRG9uZUZucygpKX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dGhpcy5fc3R5bGVyLnNldFBvc2l0aW9uKHQpfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHlsZXIuZ2V0UG9zaXRpb24oKX0sdC5wcm90b3R5cGUuaGFzU3RhcnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRlPj1pZS5TVEFSVEVEfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT49aWUuSU5JVElBTElaRUR8fCh0aGlzLnN0YXRlPWllLklOSVRJQUxJWkVELHRoaXMuX3N0eWxlci5hcHBseSgpLHRoaXMuX2RlbGF5JiZ0aGlzLl9zdHlsZXIucGF1c2UoKSl9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX2ZsdXNoU3RhcnRGbnMoKSx0aGlzLnN0YXRlPWllLlNUQVJURUQpLHRoaXMuX3N0eWxlci5yZXN1bWUoKX0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLmluaXQoKSx0aGlzLl9zdHlsZXIucGF1c2UoKX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9zdHlsZXIuZGVzdHJveSgpLHRoaXMuX2J1aWxkU3R5bGVyKCksdGhpcy5fc3R5bGVyLmFwcGx5KCl9LHQucHJvdG90eXBlLl9idWlsZFN0eWxlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc3R5bGVyPW5ldyBadCh0aGlzLmVsZW1lbnQsdGhpcy5hbmltYXRpb25OYW1lLHRoaXMuX2R1cmF0aW9uLHRoaXMuX2RlbGF5LHRoaXMuZWFzaW5nLCJmb3J3YXJkcyIsZnVuY3Rpb24oKXtyZXR1cm4gdC5maW5pc2goKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaW5pdCgpO3ZhciBlPXt9O2lmKHRoaXMuaGFzU3RhcnRlZCgpKXt2YXIgbj10aGlzLnN0YXRlPj1pZS5GSU5JU0hFRDtPYmplY3Qua2V5cyh0aGlzLl9maW5hbFN0eWxlcykuZm9yRWFjaChmdW5jdGlvbihpKXsib2Zmc2V0IiE9aSYmKGVbaV09bj90Ll9maW5hbFN0eWxlc1tpXTpRKHQuZWxlbWVudCxpKSl9KX10aGlzLmN1cnJlbnRTbmFwc2hvdD1lfSx0fSgpLG9lPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuZWxlbWVudD1lLGkuX3N0YXJ0aW5nU3R5bGVzPXt9LGkuX19pbml0aWFsaXplZD0hMSxpLl9zdHlsZXM9QyhuKSxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOyF0aGlzLl9faW5pdGlhbGl6ZWQmJnRoaXMuX3N0YXJ0aW5nU3R5bGVzJiYodGhpcy5fX2luaXRpYWxpemVkPSEwLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtlLl9zdGFydGluZ1N0eWxlc1t0XT1lLmVsZW1lbnQuc3R5bGVbdF19KSx0LnByb3RvdHlwZS5pbml0LmNhbGwodGhpcykpfSxlLnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9zdGFydGluZ1N0eWxlcyYmKHRoaXMuaW5pdCgpLE9iamVjdC5rZXlzKHRoaXMuX3N0eWxlcykuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHQsZS5fc3R5bGVzW3RdKX0pLHQucHJvdG90eXBlLnBsYXkuY2FsbCh0aGlzKSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3N0YXJ0aW5nU3R5bGVzJiYoT2JqZWN0LmtleXModGhpcy5fc3RhcnRpbmdTdHlsZXMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49ZS5fc3RhcnRpbmdTdHlsZXNbdF07bj9lLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkodCxuKTplLmVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9KSx0aGlzLl9zdGFydGluZ1N0eWxlcz1udWxsLHQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSl9LGV9KHIuZCksYWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY291bnQ9MCx0aGlzLl9oZWFkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKSx0aGlzLl93YXJuaW5nSXNzdWVkPSExfXJldHVybiB0LnByb3RvdHlwZS52YWxpZGF0ZVN0eWxlUHJvcGVydHk9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCl9LHQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHgodCxlKX0sdC5wcm90b3R5cGUuY29udGFpbnNFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFModCxlKX0sdC5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBFKHQsZSxuKX0sdC5wcm90b3R5cGUuY29tcHV0ZVN0eWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19LHQucHJvdG90eXBlLmJ1aWxkS2V5ZnJhbWVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iQGtleWZyYW1lcyAiK2UrIiB7XG4iLHI9IiI7KG49bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEModCl9KSkuZm9yRWFjaChmdW5jdGlvbih0KXtyPSIgIjt2YXIgZT1wYXJzZUZsb2F0KHQub2Zmc2V0KTtpKz0iIityKzEwMCplKyIlIHtcbiIscis9IiAiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJvZmZzZXQiOnJldHVybjtjYXNlImVhc2luZyI6cmV0dXJuIHZvaWQobiYmKGkrPXIrImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICIrbisiO1xuIikpO2RlZmF1bHQ6cmV0dXJuIHZvaWQoaSs9IiIrcitlKyI6ICIrbisiO1xuIil9fSksaSs9cisifVxuIn0pLGkrPSJ9XG4iO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG8uaW5uZXJIVE1MPWksb30sdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LGUsbixpLHIsbyxhKXt2b2lkIDA9PT1vJiYobz1bXSksYSYmdGhpcy5fbm90aWZ5RmF1bHR5U2NydWJiZXIoKTt2YXIgcz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHJlfSksdT17fTtHKG4saSkmJnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LmN1cnJlbnRTbmFwc2hvdDtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdPWVbdF19KX0pO3ZhciBjPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiB0JiYoQXJyYXkuaXNBcnJheSh0KT90Olt0XSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4peyJvZmZzZXQiIT1uJiYiZWFzaW5nIiE9biYmKGVbbl09dFtuXSl9KX0pLGV9KGU9Vyh0LGUsdSkpO2lmKDA9PW4pcmV0dXJuIG5ldyBvZSh0LGMpO3ZhciBsPSJnZW5fY3NzX2tmXyIrdGhpcy5fY291bnQrKyxmPXRoaXMuYnVpbGRLZXlmcmFtZUVsZW1lbnQodCxsLGUpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImhlYWQiKS5hcHBlbmRDaGlsZChmKTt2YXIgaD1uZXcgcmUodCxlLGwsbixpLHIsYyk7cmV0dXJuIGgub25EZXN0cm95KGZ1bmN0aW9uKCl7dmFyIHQ7KHQ9ZikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pLGh9LHQucHJvdG90eXBlLl9ub3RpZnlGYXVsdHlTY3J1YmJlcj1mdW5jdGlvbigpe3RoaXMuX3dhcm5pbmdJc3N1ZWR8fChjb25zb2xlLndhcm4oIkBhbmd1bGFyL2FuaW1hdGlvbnM6IHBsZWFzZSBsb2FkIHRoZSB3ZWItYW5pbWF0aW9ucy5qcyBwb2x5ZmlsbCB0byBhbGxvdyBwcm9ncmFtbWF0aWMgYWNjZXNzLi4uXG4iLCIgIHZpc2l0IGh0dHA6Ly9iaXQubHkvSVd1a2FtIHRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgdGhlIHdlYi1hbmltYXRpb24tanMgcG9seWZpbGwuIiksdGhpcy5fd2FybmluZ0lzc3VlZD0hMCl9LHR9KCksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1uLHRoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9pbml0aWFsaXplZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PXt9LHRoaXMuX2R1cmF0aW9uPW4uZHVyYXRpb24sdGhpcy5fZGVsYXk9bi5kZWxheXx8MCx0aGlzLnRpbWU9dGhpcy5fZHVyYXRpb24rdGhpcy5fZGVsYXl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfSx0LnByb3RvdHlwZS5fYnVpbGRQbGF5ZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9pbml0aWFsaXplZCl7dGhpcy5faW5pdGlhbGl6ZWQ9ITA7dmFyIGU9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsZSx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp7fSx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX19LHQucHJvdG90eXBlLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuX3RyaWdnZXJXZWJBbmltYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LmFuaW1hdGUoZSxuKX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5wbGF5PWZ1bmN0aW9uKCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX0sdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5pbml0KCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9LHQucHJvdG90eXBlLl9yZXNldERvbVBsYXllclN0YXRlPWZ1bmN0aW9uKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRGVzdHJveUZucz1bXSl9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe3RoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidG90YWxUaW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307dGhpcy5oYXNTdGFydGVkKCkmJk9iamVjdC5rZXlzKHRoaXMuX2ZpbmFsS2V5ZnJhbWUpLmZvckVhY2goZnVuY3Rpb24obil7Im9mZnNldCIhPW4mJihlW25dPXQuX2ZpbmlzaGVkP3QuX2ZpbmFsS2V5ZnJhbWVbbl06USh0LmVsZW1lbnQsbikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9ZX0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX2lzTmF0aXZlSW1wbD0vXHtccypcW25hdGl2ZVxzK2NvZGVcXVxzKlx9Ly50ZXN0KGxlKCkudG9TdHJpbmcoKSksdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyPW5ldyBhZX1yZXR1cm4gdC5wcm90b3R5cGUudmFsaWRhdGVTdHlsZVByb3BlcnR5PWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpfSx0LnByb3RvdHlwZS5tYXRjaGVzRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB4KHQsZSl9LHQucHJvdG90eXBlLmNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBTKHQsZSl9LHQucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRSh0LGUsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTdHlsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfSx0LnByb3RvdHlwZS5vdmVycmlkZVdlYkFuaW1hdGlvbnNTdXBwb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX2lzTmF0aXZlSW1wbD10fSx0LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEpe2lmKHZvaWQgMD09PW8mJihvPVtdKSwhYSYmIXRoaXMuX2lzTmF0aXZlSW1wbClyZXR1cm4gdGhpcy5fY3NzS2V5ZnJhbWVzRHJpdmVyLmFuaW1hdGUodCxlLG4saSxyLG8pO3ZhciBzPXtkdXJhdGlvbjpuLGRlbGF5OmksZmlsbDowPT1pPyJib3RoIjoiZm9yd2FyZHMifTtyJiYocy5lYXNpbmc9cik7dmFyIHU9e30sYz1vLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlfSk7cmV0dXJuIEcobixpKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY3VycmVudFNuYXBzaG90O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHVbdF09ZVt0XX0pfSksZT1XKHQsZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gUCh0LCExKX0pLHUpLG5ldyBzZSh0LGUscyl9LHR9KCk7ZnVuY3Rpb24gY2UoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbGUoKX1mdW5jdGlvbiBsZSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQmJkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGV8fHt9fX0sTnNoNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gZ30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIF99KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gd30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuKCJpaFlZIik7dmFyIGk9bigibjZnRyIpLHI9bigiWVNoMiIpLG89bigiQ2NuRyIpLGE9bigiSzlJYSIpLHM9bigiYm5lNSIpLHU9bigicDBpYiIpLGM9bigiVm5ELyIpLGw9bigiNjdZLyIpLGY9bigidDlmWiIpLGg9bigibnkyNCIpLGQ9bigicDBTaiIpLHA9bigiR2kzaSIpLG09bigibXJTRyIpO2Z1bmN0aW9uIHkodCl7dGhyb3cgRXJyb3IoIkEgZHJhd2VyIHdhcyBhbHJlYWR5IGRlY2xhcmVkIGZvciAncG9zaXRpb249XCIiK3QrIlwiJyIpfXZhciB2PW5ldyBvLm8oIk1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMX19KSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPXQsdGhpcy5fY29udGFpbmVyPWV9cmV0dXJuIHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29udGFpbmVyLl9jb250ZW50TWFyZ2luQ2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXt0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSx0fSgpLGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksdSxsKXt2YXIgZj10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWUsdGhpcy5fZm9jdXNNb25pdG9yPW4sdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9uZ1pvbmU9dSx0aGlzLl9kb2M9bCx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1udWxsLHRoaXMuX2VuYWJsZUFuaW1hdGlvbnM9ITEsdGhpcy5fcG9zaXRpb249InN0YXJ0Iix0aGlzLl9tb2RlPSJvdmVyIix0aGlzLl9kaXNhYmxlQ2xvc2U9ITEsdGhpcy5fYXV0b0ZvY3VzPSEwLHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQ9bmV3IG8ubSx0aGlzLl9hbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IG8ubSghMCksdGhpcy5vblBvc2l0aW9uQ2hhbmdlZD1uZXcgby5tLHRoaXMuX21vZGVDaGFuZ2VkPW5ldyBhLmEsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShmdW5jdGlvbih0KXt0PyhmLl9kb2MmJihmLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZD1mLl9kb2MuYWN0aXZlRWxlbWVudCksZi5faXNGb2N1c1RyYXBFbmFibGVkJiZmLl9mb2N1c1RyYXAmJmYuX3RyYXBGb2N1cygpKTpmLl9yZXN0b3JlRm9jdXMoKX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe09iamVjdChzLmEpKGYuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwia2V5ZG93biIpLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5Q29kZT09PXIuZSYmIWYuZGlzYWJsZUNsb3NlfSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZi5fbmdab25lLnJ1bihmdW5jdGlvbigpe2YuY2xvc2UoKSx0LnN0b3BQcm9wYWdhdGlvbigpfSl9KX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBvc2l0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufSxzZXQ6ZnVuY3Rpb24odCl7KHQ9ImVuZCI9PT10PyJlbmQiOiJzdGFydCIpIT10aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3Bvc2l0aW9uPXQsdGhpcy5vblBvc2l0aW9uQ2hhbmdlZC5lbWl0KCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibW9kZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbW9kZT10LHRoaXMuX21vZGVDaGFuZ2VkLm5leHQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVDbG9zZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xvc2V9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlQ2xvc2U9T2JqZWN0KGkuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhdXRvRm9jdXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0ZvY3VzfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b0ZvY3VzPU9iamVjdChpLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX29wZW5lZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksT2JqZWN0KGwuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlJiYwPT09dC50b1N0YXRlLmluZGV4T2YoIm9wZW4iKX0pLE9iamVjdChsLmEpKGZ1bmN0aW9uKCl7fSkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX2Nsb3NlZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fSksT2JqZWN0KGwuYSkoZnVuY3Rpb24oKXt9KSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjbG9zZWRTdGFydCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlJiYidm9pZCI9PT10LnRvU3RhdGV9KSxPYmplY3QobC5hKShmdW5jdGlvbigpe30pKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl9pc0ZvY3VzVHJhcEVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGVuZWQmJiJzaWRlIiE9PXRoaXMubW9kZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fdHJhcEZvY3VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmF1dG9Gb2N1cyYmdGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGZ1bmN0aW9uKGUpe2V8fCJmdW5jdGlvbiIhPXR5cGVvZiB0Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXN8fHQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9LHQucHJvdG90eXBlLl9yZXN0b3JlRm9jdXM9ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9Gb2N1cyl7dmFyIHQ9dGhpcy5fZG9jJiZ0aGlzLl9kb2MuYWN0aXZlRWxlbWVudDt0JiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModCkmJih0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCx0aGlzLl9vcGVuZWRWaWEpOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCkpLHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkPW51bGwsdGhpcy5fb3BlbmVkVmlhPW51bGx9fSx0LnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9mb2N1c1RyYXAuZW5hYmxlZD10aGlzLl9pc0ZvY3VzVHJhcEVuYWJsZWR9LHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZD1mdW5jdGlvbigpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2VuYWJsZUFuaW1hdGlvbnM9ITApfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvcGVuZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3BlbmVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50b2dnbGUoT2JqZWN0KGkuYikodCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG9nZ2xlKCEwLHQpfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvZ2dsZSghMSl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PSF0aGlzLm9wZW5lZCksdm9pZCAwPT09ZSYmKGU9InByb2dyYW0iKSx0aGlzLl9vcGVuZWQ9dCx0Pyh0aGlzLl9hbmltYXRpb25TdGF0ZT10aGlzLl9lbmFibGVBbmltYXRpb25zPyJvcGVuIjoib3Blbi1pbnN0YW50Iix0aGlzLl9vcGVuZWRWaWE9ZSk6KHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLl9yZXN0b3JlRm9jdXMoKSksdGhpcy5fZm9jdXNUcmFwJiYodGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQ9dGhpcy5faXNGb2N1c1RyYXBFbmFibGVkKSxuZXcgUHJvbWlzZShmdW5jdGlvbih0KXtuLm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChmLmEpKDEpKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT8ib3BlbiI6ImNsb3NlIil9KX0pfSx0LnByb3RvdHlwZS5fb25BbmltYXRpb25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpb25TdGFydGVkLmVtaXQodCl9LHQucHJvdG90eXBlLl9vbkFuaW1hdGlvbkVuZD1mdW5jdGlvbih0KXt2YXIgZT10LmZyb21TdGF0ZSxuPXQudG9TdGF0ZTsoMD09PW4uaW5kZXhPZigib3BlbiIpJiYidm9pZCI9PT1lfHwidm9pZCI9PT1uJiYwPT09ZS5pbmRleE9mKCJvcGVuIikpJiZ0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMuX29wZW5lZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLHMpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgdT10aGlzO3RoaXMuX2Rpcj10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9cyx0aGlzLmJhY2tkcm9wQ2xpY2s9bmV3IG8ubSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGEuYSx0aGlzLl9kb0NoZWNrU3ViamVjdD1uZXcgYS5hLHRoaXMuX2NvbnRlbnRNYXJnaW5zPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0sdGhpcy5fY29udGVudE1hcmdpbkNoYW5nZXM9bmV3IGEuYSx0JiZ0LmNoYW5nZS5waXBlKE9iamVjdChoLmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3UuX3ZhbGlkYXRlRHJhd2VycygpLHUuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCl9KSx0aGlzLl9hdXRvc2l6ZT1yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN0YXJ0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZW5kIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF1dG9zaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9zaXplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fYXV0b3NpemU9T2JqZWN0KGkuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNCYWNrZHJvcCIse2dldDpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLl9iYWNrZHJvcE92ZXJyaWRlPyF0aGlzLl9zdGFydHx8InNpZGUiIT09dGhpcy5fc3RhcnQubW9kZXx8IXRoaXMuX2VuZHx8InNpZGUiIT09dGhpcy5fZW5kLm1vZGU6dGhpcy5fYmFja2Ryb3BPdmVycmlkZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2JhY2tkcm9wT3ZlcnJpZGU9bnVsbD09dD9udWxsOk9iamVjdChpLmIpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLm5nQWZ0ZXJDb250ZW50SW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZHJhd2Vycy5jaGFuZ2VzLnBpcGUoT2JqZWN0KGQuYSkobnVsbCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3QuX3ZhbGlkYXRlRHJhd2VycygpLHQuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll93YXRjaERyYXdlclRvZ2dsZShlKSx0Ll93YXRjaERyYXdlclBvc2l0aW9uKGUpLHQuX3dhdGNoRHJhd2VyTW9kZShlKX0pLCghdC5fZHJhd2Vycy5sZW5ndGh8fHQuX2lzRHJhd2VyT3Blbih0Ll9zdGFydCl8fHQuX2lzRHJhd2VyT3Blbih0Ll9lbmQpKSYmdC5fdXBkYXRlQ29udGVudE1hcmdpbnMoKSx0Ll9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RvQ2hlY2tTdWJqZWN0LnBpcGUoT2JqZWN0KHAuYSkoMTApLE9iamVjdChoLmEpKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll91cGRhdGVDb250ZW50TWFyZ2lucygpfSl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZG9DaGVja1N1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5fZHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wZW4oKX0pfSx0LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLm5nRG9DaGVjaz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fYXV0b3NpemUmJnRoaXMuX2lzUHVzaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiB0Ll9kb0NoZWNrU3ViamVjdC5uZXh0KCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyVG9nZ2xlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKE9iamVjdChoLmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyksT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuZnJvbVN0YXRlIT09dC50b1N0YXRlfSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXsib3Blbi1pbnN0YW50IiE9PXQudG9TdGF0ZSYmIk5vb3BBbmltYXRpb25zIiE9PWUuX2FuaW1hdGlvbk1vZGUmJmUuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtZHJhd2VyLXRyYW5zaXRpb24iKSxlLl91cGRhdGVDb250ZW50TWFyZ2lucygpLGUuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksInNpZGUiIT09dC5tb2RlJiZ0Lm9wZW5lZENoYW5nZS5waXBlKE9iamVjdChoLmEpKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLl9zZXRDb250YWluZXJDbGFzcyh0Lm9wZW5lZCl9KX0sdC5wcm90b3R5cGUuX3dhdGNoRHJhd2VyUG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0Lm9uUG9zaXRpb25DaGFuZ2VkLnBpcGUoT2JqZWN0KGguYSkodGhpcy5fZHJhd2Vycy5jaGFuZ2VzKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fbmdab25lLm9uTWljcm90YXNrRW1wdHkuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5fdmFsaWRhdGVEcmF3ZXJzKCl9KX0pfSx0LnByb3RvdHlwZS5fd2F0Y2hEcmF3ZXJNb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCYmdC5fbW9kZUNoYW5nZWQucGlwZShPYmplY3QoaC5hKShPYmplY3QodS5hKSh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZShmdW5jdGlvbigpe2UuX3VwZGF0ZUNvbnRlbnRNYXJnaW5zKCksZS5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX0sdC5wcm90b3R5cGUuX3NldENvbnRhaW5lckNsYXNzPWZ1bmN0aW9uKHQpe3Q/dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1kcmF3ZXItb3BlbmVkIik6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC1kcmF3ZXItb3BlbmVkIil9LHQucHJvdG90eXBlLl92YWxpZGF0ZURyYXdlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3N0YXJ0PXRoaXMuX2VuZD1udWxsLHRoaXMuX2RyYXdlcnMuZm9yRWFjaChmdW5jdGlvbihlKXsiZW5kIj09ZS5wb3NpdGlvbj8obnVsbCE9dC5fZW5kJiZ5KCJlbmQiKSx0Ll9lbmQ9ZSk6KG51bGwhPXQuX3N0YXJ0JiZ5KCJzdGFydCIpLHQuX3N0YXJ0PWUpfSksdGhpcy5fcmlnaHQ9dGhpcy5fbGVmdD1udWxsLHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/KHRoaXMuX2xlZnQ9dGhpcy5fZW5kLHRoaXMuX3JpZ2h0PXRoaXMuX3N0YXJ0KToodGhpcy5fbGVmdD10aGlzLl9zdGFydCx0aGlzLl9yaWdodD10aGlzLl9lbmQpfSx0LnByb3RvdHlwZS5faXNQdXNoZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSYmIm92ZXIiIT10aGlzLl9zdGFydC5tb2RlfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmIm92ZXIiIT10aGlzLl9lbmQubW9kZX0sdC5wcm90b3R5cGUuX29uQmFja2Ryb3BDbGlja2VkPWZ1bmN0aW9uKCl7dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoKSx0aGlzLl9jbG9zZU1vZGFsRHJhd2VyKCl9LHQucHJvdG90eXBlLl9jbG9zZU1vZGFsRHJhd2VyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztbdGhpcy5fc3RhcnQsdGhpcy5fZW5kXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiFlLmRpc2FibGVDbG9zZSYmdC5fY2FuSGF2ZUJhY2tkcm9wKGUpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbG9zZSgpfSl9LHQucHJvdG90eXBlLl9pc1Nob3dpbmdCYWNrZHJvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpJiZ0aGlzLl9jYW5IYXZlQmFja2Ryb3AodGhpcy5fc3RhcnQpfHx0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fZW5kKSYmdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX2VuZCl9LHQucHJvdG90eXBlLl9jYW5IYXZlQmFja2Ryb3A9ZnVuY3Rpb24odCl7cmV0dXJuInNpZGUiIT09dC5tb2RlfHwhIXRoaXMuX2JhY2tkcm9wT3ZlcnJpZGV9LHQucHJvdG90eXBlLl9pc0RyYXdlck9wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQub3BlbmVkfSx0LnByb3RvdHlwZS5fdXBkYXRlQ29udGVudE1hcmdpbnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9MCxuPTA7aWYodGhpcy5fbGVmdCYmdGhpcy5fbGVmdC5vcGVuZWQmJigic2lkZSI9PXRoaXMuX2xlZnQubW9kZT9lKz10aGlzLl9sZWZ0Ll93aWR0aDoicHVzaCI9PXRoaXMuX2xlZnQubW9kZSYmKGUrPWk9dGhpcy5fbGVmdC5fd2lkdGgsbi09aSkpLHRoaXMuX3JpZ2h0JiZ0aGlzLl9yaWdodC5vcGVuZWQpaWYoInNpZGUiPT10aGlzLl9yaWdodC5tb2RlKW4rPXRoaXMuX3JpZ2h0Ll93aWR0aDtlbHNlIGlmKCJwdXNoIj09dGhpcy5fcmlnaHQubW9kZSl7dmFyIGk7bis9aT10aGlzLl9yaWdodC5fd2lkdGgsZS09aX1lPT09dGhpcy5fY29udGVudE1hcmdpbnMubGVmdCYmbj09PXRoaXMuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0fHwodGhpcy5fY29udGVudE1hcmdpbnM9e2xlZnQ6ZSxyaWdodDpufSx0aGlzLl9uZ1pvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX2NvbnRlbnRNYXJnaW5DaGFuZ2VzLm5leHQodC5fY29udGVudE1hcmdpbnMpfSkpfSx0fSgpLHc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyxlLG4pfHx0aGlzfXJldHVybiBPYmplY3QobS5iKShlLHQpLGV9KGcpLHg9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fZml4ZWRJblZpZXdwb3J0PSExLGUuX2ZpeGVkVG9wR2FwPTAsZS5fZml4ZWRCb3R0b21HYXA9MCxlfXJldHVybiBPYmplY3QobS5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZml4ZWRJblZpZXdwb3J0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkSW5WaWV3cG9ydH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkSW5WaWV3cG9ydD1PYmplY3QoaS5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImZpeGVkVG9wR2FwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpeGVkVG9wR2FwfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZml4ZWRUb3BHYXA9T2JqZWN0KGkuZCkodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmaXhlZEJvdHRvbUdhcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJvdHRvbUdhcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZpeGVkQm90dG9tR2FwPU9iamVjdChpLmQpKHQpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGV9KGIpLFM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChtLmIpKGUsdCksZX0oXyksRT1mdW5jdGlvbigpe319LE96ZkI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBNfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBCfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIEh9KTt2YXIgaT1uKCJDY25HIikscj1uKCJJcDBSIiksbz1uKCIyNkZVIiksYT1uKCJWbkQvIikscz1uKCI2N1kvIiksdT1uKCJtclNHIik7ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBmdW5jdGlvbigpe2lmKE9iamVjdChyLnEpKGUpKXt2YXIgbj0vXGJmbGV4LWxheW91dC0uKz9cYi9nO0FycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKCJbY2xhc3MqPSIrbCsiXSIpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY2xhc3NMaXN0LmNvbnRhaW5zKGwrInNzciIpJiZ0LnBhcmVudE5vZGU/dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpOnQuY2xhc3NOYW1lLnJlcGxhY2UobiwiIil9KX19fXZhciBsPSJmbGV4LWxheW91dC0iLGY9bmV3IGkubygiRmxleCBMYXlvdXQgdG9rZW4sIGNvbGxlY3QgYWxsIGJyZWFrcG9pbnRzIGludG8gb25lIHByb3ZpZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBudWxsfX0pLGg9W3thbGlhczoieHMiLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDBweCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSJ9LHthbGlhczoiZ3QteHMiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDYwMHB4KSJ9LHthbGlhczoibHQtc20iLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDU5OXB4KSJ9LHthbGlhczoic20iLG1lZGlhUXVlcnk6IihtaW4td2lkdGg6IDYwMHB4KSBhbmQgKG1heC13aWR0aDogOTU5cHgpIn0se2FsaWFzOiJndC1zbSIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogOTYwcHgpIn0se2FsaWFzOiJsdC1tZCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1heC13aWR0aDogOTU5cHgpIn0se2FsaWFzOiJtZCIsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIn0se2FsaWFzOiJndC1tZCIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTI4MHB4KSJ9LHthbGlhczoibHQtbGciLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDEyNzlweCkifSx7YWxpYXM6ImxnIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxMjgwcHgpIGFuZCAobWF4LXdpZHRoOiAxOTE5cHgpIn0se2FsaWFzOiJndC1sZyIsb3ZlcmxhcHBpbmc6ITAsbWVkaWFRdWVyeToiKG1pbi13aWR0aDogMTkyMHB4KSJ9LHthbGlhczoibHQteGwiLG92ZXJsYXBwaW5nOiEwLG1lZGlhUXVlcnk6IihtYXgtd2lkdGg6IDE5MjBweCkifSx7YWxpYXM6InhsIixtZWRpYVF1ZXJ5OiIobWluLXdpZHRoOiAxOTIwcHgpIGFuZCAobWF4LXdpZHRoOiA1MDAwcHgpIn1dLGQ9IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixwPSIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkiLG09IihvcmllbnRhdGlvbjogcG9ydHJhaXQpIGFuZCAobWluLXdpZHRoOiA4NDBweCkiLHk9IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1pbi13aWR0aDogMTI4MHB4KSIsdj17SEFORFNFVDoiKG9yaWVudGF0aW9uOiBwb3J0cmFpdCkgYW5kIChtYXgtd2lkdGg6IDU5OXB4KSwgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLFRBQkxFVDpwKyIgLCAiK2QsV0VCOm0rIiwgIit5KyIgIixIQU5EU0VUX1BPUlRSQUlUOiIob3JpZW50YXRpb246IHBvcnRyYWl0KSBhbmQgKG1heC13aWR0aDogNTk5cHgpIixUQUJMRVRfUE9SVFJBSVQ6cCsiICIsV0VCX1BPUlRSQUlUOiIiK20sSEFORFNFVF9MQU5EU0NBUEU6IihvcmllbnRhdGlvbjogbGFuZHNjYXBlKSBhbmQgKG1heC13aWR0aDogOTU5cHgpXSIsVEFCTEVUX0xBTkRTQ0FQRToiIitkLFdFQl9MQU5EU0NBUEU6IiIreX0sZz1be2FsaWFzOiJoYW5kc2V0IixtZWRpYVF1ZXJ5OnYuSEFORFNFVH0se2FsaWFzOiJoYW5kc2V0LmxhbmRzY2FwZSIsbWVkaWFRdWVyeTp2LkhBTkRTRVRfTEFORFNDQVBFfSx7YWxpYXM6ImhhbmRzZXQucG9ydHJhaXQiLG1lZGlhUXVlcnk6di5IQU5EU0VUX1BPUlRSQUlUfSx7YWxpYXM6InRhYmxldCIsbWVkaWFRdWVyeTp2LlRBQkxFVH0se2FsaWFzOiJ0YWJsZXQubGFuZHNjYXBlIixtZWRpYVF1ZXJ5OnYuVEFCTEVUfSx7YWxpYXM6InRhYmxldC5wb3J0cmFpdCIsbWVkaWFRdWVyeTp2LlRBQkxFVF9QT1JUUkFJVH0se2FsaWFzOiJ3ZWIiLG1lZGlhUXVlcnk6di5XRUIsb3ZlcmxhcHBpbmc6ITB9LHthbGlhczoid2ViLmxhbmRzY2FwZSIsbWVkaWFRdWVyeTp2LldFQl9MQU5EU0NBUEUsb3ZlcmxhcHBpbmc6ITB9LHthbGlhczoid2ViLnBvcnRyYWl0IixtZWRpYVF1ZXJ5OnYuV0VCX1BPUlRSQUlULG92ZXJsYXBwaW5nOiEwfV07ZnVuY3Rpb24gYih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtpZihudWxsPT10KXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciBpPTAscj1lO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKG51bGwhPW8pZm9yKHZhciBhIGluIG8pby5oYXNPd25Qcm9wZXJ0eShhKSYmKHRbYV09b1thXSl9cmV0dXJuIHR9dmFyIF89LyhcLnwtfF8pL2c7ZnVuY3Rpb24gdyh0KXt2YXIgZT10Lmxlbmd0aD4wP3QuY2hhckF0KDApOiIiLG49dC5sZW5ndGg+MT90LnNsaWNlKDEpOiIiO3JldHVybiBlLnRvVXBwZXJDYXNlKCkrbn12YXIgeD17YWRkRmxleFRvUGFyZW50OiEwLGFkZE9yaWVudGF0aW9uQnBzOiExLGRpc2FibGVEZWZhdWx0QnBzOiExLGRpc2FibGVWZW5kb3JQcmVmaXhlczohMSxzZXJ2ZXJMb2FkZWQ6ITEsdXNlQ29sdW1uQmFzaXNaZXJvOiEwfSxTPW5ldyBpLm8oIkZsZXggTGF5b3V0IHRva2VuLCBjb25maWcgb3B0aW9ucyBmb3IgdGhlIGxpYnJhcnkiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHh9fSksRT1uZXcgaS5vKCJUb2tlbiAoQGFuZ3VsYXIvZmxleC1sYXlvdXQpIEJyZWFrcG9pbnRzIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3ZhciB0PU9iamVjdChpLlcpKGYpLGU9T2JqZWN0KGkuVykoUyksbj1bXS5jb25jYXQuYXBwbHkoW10sKHR8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19KSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBuLGk9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtpW3QuYWxpYXNdPXR9KSxlLmZvckVhY2goZnVuY3Rpb24odCl7aVt0LmFsaWFzXT9iKGlbdC5hbGlhc10sdCk6aVt0LmFsaWFzXT10fSksKG49T2JqZWN0LmtleXMoaSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdfSkpLmZvckVhY2goZnVuY3Rpb24odCl7dC5zdWZmaXh8fCh0LnN1ZmZpeD10LmFsaWFzLnJlcGxhY2UoXywifCIpLnNwbGl0KCJ8IikubWFwKHcpLmpvaW4oIiIpLHQub3ZlcmxhcHBpbmc9ISF0Lm92ZXJsYXBwaW5nKX0pLG59KChlLmRpc2FibGVEZWZhdWx0QnBzP1tdOmgpLmNvbmNhdChlLmFkZE9yaWVudGF0aW9uQnBzP2c6W10pLG4pfX0pLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3JlZ2lzdHJ5PXR9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaXRlbXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuc2xpY2UoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNvcnRlZEl0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dC5vdmVybGFwcGluZ30pLGU9dGhpcy5fcmVnaXN0cnkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEwIT09dC5vdmVybGFwcGluZ30pO3JldHVybiB0LmNvbmNhdChlKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5hbGlhcz09dH0pfHxudWxsfSx0LnByb3RvdHlwZS5maW5kQnlRdWVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVnaXN0cnkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5tZWRpYVF1ZXJ5PT10fSl8fG51bGx9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwib3ZlcmxhcHBpbmdzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gMT09dC5vdmVybGFwcGluZ30pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWxpYXNlcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWxpYXN9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInN1ZmZpeGVzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWZmaXg/dC5zdWZmaXg6IiJ9KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5XKShFKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3ZvaWQgMD09PXQmJih0PSExKSx2b2lkIDA9PT1lJiYoZT0iYWxsIiksdm9pZCAwPT09biYmKG49IiIpLHZvaWQgMD09PWkmJihpPSIiKSx0aGlzLm1hdGNoZXM9dCx0aGlzLm1lZGlhUXVlcnk9ZSx0aGlzLm1xQWxpYXM9bix0aGlzLnN1ZmZpeD1pfXJldHVybiB0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdCh0aGlzLm1hdGNoZXMsdGhpcy5tZWRpYVF1ZXJ5LHRoaXMubXFBbGlhcyx0aGlzLnN1ZmZpeCl9LHR9KCksVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX3pvbmU9dCx0aGlzLl9wbGF0Zm9ybUlkPWUsdGhpcy5fZG9jdW1lbnQ9bix0aGlzLl9yZWdpc3RyeT1uZXcgTWFwLHRoaXMuX3NvdXJjZT1uZXcgby5hKG5ldyBPKCEwKSksdGhpcy5fb2JzZXJ2YWJsZSQ9dGhpcy5fc291cmNlLmFzT2JzZXJ2YWJsZSgpfXJldHVybiB0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWdpc3RyeS5nZXQodCk7cmV0dXJuISFlJiZlLm1hdGNoZXN9LHQucHJvdG90eXBlLm9ic2VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMucmVnaXN0ZXJRdWVyeSh0KSx0aGlzLl9vYnNlcnZhYmxlJC5waXBlKE9iamVjdChhLmEpKGZ1bmN0aW9uKGUpe3JldHVybiF0fHxlLm1lZGlhUXVlcnk9PT10fSkpfSx0LnByb3RvdHlwZS5yZWdpc3RlclF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9bXToic3RyaW5nIj09dHlwZW9mIHQ/W3RdOihlPXt9LHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFlLmhhc093blByb3BlcnR5KHQpJiYoZVt0XT0hMCl9KSk7dmFyIGV9KHQpO24ubGVuZ3RoPjAmJih0aGlzLl9wcmVwYXJlUXVlcnlDU1Mobix0aGlzLl9kb2N1bWVudCksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX3JlZ2lzdHJ5LmdldCh0KSxpPWZ1bmN0aW9uKG4pe2UuX3pvbmUucnVuKGZ1bmN0aW9uKCl7dmFyIGk9bmV3IE8obi5tYXRjaGVzLHQpO2UuX3NvdXJjZS5uZXh0KGkpfSl9O258fCgobj1lLl9idWlsZE1RTCh0KSkuYWRkTGlzdGVuZXIoaSksZS5fcmVnaXN0cnkuc2V0KHQsbikpLG4ubWF0Y2hlcyYmaShuKX0pKX0sdC5wcm90b3R5cGUuX2J1aWxkTVFMPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoci5xKSh0aGlzLl9wbGF0Zm9ybUlkKSYmd2luZG93Lm1hdGNoTWVkaWEoImFsbCIpLmFkZExpc3RlbmVyP3dpbmRvdy5tYXRjaE1lZGlhKHQpOnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19LHQucHJvdG90eXBlLl9wcmVwYXJlUXVlcnlDU1M9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4ha1t0XX0pO2lmKG4ubGVuZ3RoPjApe3ZhciBpPW4uam9pbigiLCAiKTt0cnl7dmFyIHI9ZS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxyLnN0eWxlU2hlZXR8fHIuYXBwZW5kQ2hpbGQoZS5jcmVhdGVUZXh0Tm9kZSgiXG4vKlxuICBAYW5ndWxhci9mbGV4LWxheW91dCAtIHdvcmthcm91bmQgZm9yIHBvc3NpYmxlIGJyb3dzZXIgcXVpcmsgd2l0aCBtZWRpYVF1ZXJ5IGxpc3RlbmVyc1xuICBzZWUgaHR0cDovL2JpdC5seS8yc2Q0SE1QXG4qL1xuQG1lZGlhICIraSsiIHsuZngtcXVlcnktdGVzdHsgfX1cbiIpKSxlLmhlYWQuYXBwZW5kQ2hpbGQociksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBrW3RdPXJ9KX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlcpKGkueCksT2JqZWN0KGkuVykoaS56KSxPYmplY3QoaS5XKShyLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksaz17fTtmdW5jdGlvbiBBKHQsZSl7cmV0dXJuIGIodCxlP3ttcUFsaWFzOmUuYWxpYXMsc3VmZml4OmUuc3VmZml4fTp7fSl9dmFyIEk9ZnVuY3Rpb24oKXt9LGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5icmVha3BvaW50cz10LHRoaXMubWVkaWFXYXRjaGVyPWUsdGhpcy5maWx0ZXJPdmVybGFwcz0hMCx0aGlzLl9yZWdpc3RlckJyZWFrUG9pbnRzKCksdGhpcy5vYnNlcnZhYmxlJD10aGlzLl9idWlsZE9ic2VydmFibGUoKX1yZXR1cm4gdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdG9NZWRpYVF1ZXJ5KHQpO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5pc0FjdGl2ZShlKX0sdC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJC5zdWJzY3JpYmUodCxlLG4pfSx0LnByb3RvdHlwZS5hc09ic2VydmFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYnNlcnZhYmxlJH0sdC5wcm90b3R5cGUuX3JlZ2lzdGVyQnJlYWtQb2ludHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmJyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5tZWRpYVdhdGNoZXIucmVnaXN0ZXJRdWVyeSh0KX0sdC5wcm90b3R5cGUuX2J1aWxkT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzO3JldHVybiB0aGlzLm1lZGlhV2F0Y2hlci5vYnNlcnZlKCkucGlwZShPYmplY3QoYS5hKShmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQubWF0Y2hlc30pLE9iamVjdChhLmEpKGZ1bmN0aW9uKG4pe3ZhciBpPXQuYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkobi5tZWRpYVF1ZXJ5KTtyZXR1cm4haXx8IShlLmZpbHRlck92ZXJsYXBzJiZpLm92ZXJsYXBwaW5nKX0pLE9iamVjdChzLmEpKGZ1bmN0aW9uKGUpe3JldHVybiBBKGUsdC5fZmluZEJ5UXVlcnkoZS5tZWRpYVF1ZXJ5KSl9KSl9LHQucHJvdG90eXBlLl9maW5kQnlBbGlhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5icmVha3BvaW50cy5maW5kQnlBbGlhcyh0KX0sdC5wcm90b3R5cGUuX2ZpbmRCeVF1ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpfSx0LnByb3RvdHlwZS5fdG9NZWRpYVF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2ZpbmRCeUFsaWFzKHQpfHx0aGlzLl9maW5kQnlRdWVyeSh0KTtyZXR1cm4gZT9lLm1lZGlhUXVlcnk6dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUykoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVykoQyksT2JqZWN0KGkuVykoVCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxNPWZ1bmN0aW9uKCl7fSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc3R5bGVzaGVldD1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcy5zdHlsZXNoZWV0LmdldCh0KTtpP2kuc2V0KGUsbik6dGhpcy5zdHlsZXNoZWV0LnNldCh0LG5ldyBNYXAoW1tlLG5dXSkpfSx0LnByb3RvdHlwZS5jbGVhclN0eWxlcz1mdW5jdGlvbigpe3RoaXMuc3R5bGVzaGVldC5jbGVhcigpfSx0LnByb3RvdHlwZS5nZXRTdHlsZUZvckVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLnN0eWxlc2hlZXQuZ2V0KHQpLGk9IiI7aWYobil7dmFyIHI9bi5nZXQoZSk7Im51bWJlciIhPXR5cGVvZiByJiYic3RyaW5nIiE9dHlwZW9mIHJ8fChpPXIrIiIpfXJldHVybiBpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTj1uZXcgaS5vKCJGbGV4TGF5b3V0U2VydmVyTG9hZGVkIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiExfX0pLFI9WyJyb3ciLCJjb2x1bW4iLCJyb3ctcmV2ZXJzZSIsImNvbHVtbi1yZXZlcnNlIl0sRD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9tZWRpYU1vbml0b3I9ZSx0aGlzLl9vbk1lZGlhQ2hhbmdlcz1uLHRoaXMuX3N1YnNjcmliZXJzPVtdLHRoaXMuX3JlZ2lzdHJ5TWFwPXRoaXMuX2J1aWxkUmVnaXN0cnlNYXAoKSx0aGlzLl9zdWJzY3JpYmVycz10aGlzLl9jb25maWd1cmVDaGFuZ2VPYnNlcnZlcnMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyZWdpc3RyeUZyb21MYXJnZXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5TWFwLnNsaWNlKCkucmV2ZXJzZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibWVkaWFNb25pdG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhTW9uaXRvcn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZElucHV0S2V5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZElucHV0S2V5fHx0aGlzLl9vcHRpb25zLmJhc2VLZXl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRJbnB1dCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0aXZhdGVkSW5wdXRLZXk7cmV0dXJuIHRoaXMuaGFzS2V5VmFsdWUodCk/dGhpcy5fbG9va3VwS2V5VmFsdWUodCk6dGhpcy5fb3B0aW9ucy5kZWZhdWx0VmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX29wdGlvbnMuaW5wdXRLZXlzW3RdfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVuc3Vic2NyaWJlKCl9KSx0aGlzLl9zdWJzY3JpYmVycz1bXX0sdC5wcm90b3R5cGUuX2NvbmZpZ3VyZUNoYW5nZU9ic2VydmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5fcmVnaXN0cnlNYXAuZm9yRWFjaChmdW5jdGlvbihuKXt0Ll9rZXlJblVzZShuLmtleSkmJmUucHVzaCh0Lm1lZGlhTW9uaXRvci5vYnNlcnZlKG4uYWxpYXMpLnBpcGUoT2JqZWN0KHMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuKGU9ZS5jbG9uZSgpKS5wcm9wZXJ0eT10Ll9vcHRpb25zLmJhc2VLZXksZX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7dC5fb25Nb25pdG9yRXZlbnRzKGUpfSkpfSksZX0sdC5wcm90b3R5cGUuX2J1aWxkUmVnaXN0cnlNYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm1lZGlhTW9uaXRvci5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGIoe30sZSx7YmFzZUtleTp0Ll9vcHRpb25zLmJhc2VLZXksa2V5OnQuX29wdGlvbnMuYmFzZUtleStlLnN1ZmZpeH0pfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9rZXlJblVzZShlLmtleSl9KX0sdC5wcm90b3R5cGUuX29uTW9uaXRvckV2ZW50cz1mdW5jdGlvbih0KXt0LnByb3BlcnR5PT10aGlzLl9vcHRpb25zLmJhc2VLZXkmJih0LnZhbHVlPXRoaXMuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlKHQpLHRoaXMuX29uTWVkaWFDaGFuZ2VzKHQpKX0sdC5wcm90b3R5cGUuX2tleUluVXNlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLl9sb29rdXBLZXlWYWx1ZSh0KX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUFjdGl2YXRlZFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX29wdGlvbnMuYmFzZUtleSt0LnN1ZmZpeCxuPXRoaXMuX2FjdGl2YXRlZElucHV0S2V5O3JldHVybiB0aGlzLl9hY3RpdmF0ZWRJbnB1dEtleT10aGlzLl92YWxpZGF0ZUlucHV0S2V5KG49dC5tYXRjaGVzP2U6bj09ZT8iIjpuKSx0aGlzLmFjdGl2YXRlZElucHV0fSx0LnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dEtleT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49ZnVuY3Rpb24odCl7cmV0dXJuIWUuX2tleUluVXNlKHQpfTtyZXR1cm4gbih0KSYmdGhpcy5tZWRpYU1vbml0b3IuYWN0aXZlT3ZlcmxhcHMuc29tZShmdW5jdGlvbihpKXt2YXIgcj1lLl9vcHRpb25zLmJhc2VLZXkraS5zdWZmaXg7cmV0dXJuIW4ocikmJih0PXIsITApfSksdH0sdC5wcm90b3R5cGUuX2xvb2t1cEtleVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vcHRpb25zLmlucHV0S2V5c1t0XX0sdH0oKSxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5fbWVkaWFNb25pdG9yPXQsdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX3N0eWxlcj1uLHRoaXMuX2lucHV0TWFwPXt9LHRoaXMuX2hhc0luaXRpYWxpemVkPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhhc01lZGlhUXVlcnlMaXN0ZW5lciIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbXFBY3RpdmF0aW9ufSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZhdGVkVmFsdWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbXFBY3RpdmF0aW9uP3RoaXMuX21xQWN0aXZhdGlvbi5hY3RpdmF0ZWRJbnB1dDp2b2lkIDB9LHNldDpmdW5jdGlvbih0KXt2YXIgZSxuPSJiYXNlS2V5Ijt0aGlzLl9tcUFjdGl2YXRpb24mJihlPXRoaXMuX2lucHV0TWFwW249dGhpcy5fbXFBY3RpdmF0aW9uLmFjdGl2YXRlZElucHV0S2V5XSx0aGlzLl9pbnB1dE1hcFtuXT10KTt2YXIgcixvPW5ldyBpLkgoZSx0LCExKTt0aGlzLm5nT25DaGFuZ2VzKCgocj17fSlbbl09byxyKSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnRFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibmF0aXZlRWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3F1ZXJ5SW5wdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lucHV0TWFwW3RdfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2Rpc3BsYXk9dGhpcy5fZ2V0RGlzcGxheVN0eWxlKCksdGhpcy5faGFzSW5pdGlhbGl6ZWQ9ITB9LHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiQmFzZURpcmVjdGl2ZTo6bmdPbkNoYW5nZXMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3M6ICIrdCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbXFBY3RpdmF0aW9uJiZ0aGlzLl9tcUFjdGl2YXRpb24uZGVzdHJveSgpLGRlbGV0ZSB0aGlzLl9tZWRpYU1vbml0b3J9LHQucHJvdG90eXBlLl9nZXREZWZhdWx0VmFsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fcXVlcnlJbnB1dCh0KTtyZXR1cm4gdm9pZCAwIT09biYmbnVsbCE9PW4mJiIiIT09bj9uOmV9LHQucHJvdG90eXBlLl9nZXREaXNwbGF5U3R5bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cFN0eWxlKHQsImRpc3BsYXkiKX0sdC5wcm90b3R5cGUuX2dldEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXRoaXMubmF0aXZlRWxlbWVudCksdGhpcy5fc3R5bGVyLmxvb2t1cEF0dHJpYnV0ZVZhbHVlKGUsdCl9LHQucHJvdG90eXBlLl9nZXRGbGV4Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSExKTt2YXIgbixpPSJyb3ciO2lmKHQmJihpPShuPXRoaXMuX3N0eWxlci5nZXRGbG93RGlyZWN0aW9uKHQpKVswXSwhblsxXSYmZSkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT1mdW5jdGlvbih0KXt2YXIgZT0odD10P3QudG9Mb3dlckNhc2UoKToiIikuc3BsaXQoIiAiKSxuPWVbMF0saT1lWzFdLHI9ZVsyXTtyZXR1cm4gUi5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0PT09bn0pfHwobj1SWzBdKSwiaW5saW5lIj09PWkmJihpPSJpbmxpbmUiIT09cj9yOiIiLHI9ImlubGluZSIpLFtuLGZ1bmN0aW9uKHQpe2lmKHQpc3dpdGNoKHQudG9Mb3dlckNhc2UoKSl7Y2FzZSJyZXZlcnNlIjpjYXNlIndyYXAtcmV2ZXJzZSI6Y2FzZSJyZXZlcnNlLXdyYXAiOnQ9IndyYXAtcmV2ZXJzZSI7YnJlYWs7Y2FzZSJubyI6Y2FzZSJub25lIjpjYXNlIm5vd3JhcCI6dD0ibm93cmFwIjticmVhaztkZWZhdWx0OnQ9IndyYXAifXJldHVybiB0fShpKSwhIXJdfSh0KTtyZXR1cm4gbj1pWzJdLHZvaWQgMD09PShlPWlbMV0pJiYoZT1udWxsKSx2b2lkIDA9PT1uJiYobj0hMSkse2Rpc3BsYXk6bj8iaW5saW5lLWZsZXgiOiJmbGV4IiwiYm94LXNpemluZyI6ImJvcmRlci1ib3giLCJmbGV4LWRpcmVjdGlvbiI6aVswXSwiZmxleC13cmFwIjplfHxudWxsfX0oaSk7dGhpcy5fc3R5bGVyLmFwcGx5U3R5bGVUb0VsZW1lbnRzKHIsW3RdKX1yZXR1cm4gaS50cmltKCl8fCJyb3cifSx0LnByb3RvdHlwZS5fYXBwbHlTdHlsZVRvRWxlbWVudD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49dGhpcy5uYXRpdmVFbGVtZW50KSx0aGlzLl9zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudChuLHQsZSl9LHQucHJvdG90eXBlLl9hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3RoaXMuX3N0eWxlci5hcHBseVN0eWxlVG9FbGVtZW50cyh0LGUpfSx0LnByb3RvdHlwZS5fY2FjaGVJbnB1dD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZSlmb3IodmFyIG4gaW4gZSl0aGlzLl9pbnB1dE1hcFtuXT1lW25dO2Vsc2UgdCYmKHRoaXMuX2lucHV0TWFwW3RdPWUpfSx0LnByb3RvdHlwZS5fbGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXM9ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl9tcUFjdGl2YXRpb24pe3ZhciBpPW5ldyBmdW5jdGlvbih0LGUsbil7dGhpcy5iYXNlS2V5PXQsdGhpcy5kZWZhdWx0VmFsdWU9ZSx0aGlzLmlucHV0S2V5cz1ufSh0LGUsdGhpcy5faW5wdXRNYXApO3RoaXMuX21xQWN0aXZhdGlvbj1uZXcgRChpLHRoaXMuX21lZGlhTW9uaXRvcixmdW5jdGlvbih0KXtyZXR1cm4gbih0KX0pfXJldHVybiB0aGlzLl9tcUFjdGl2YXRpb259LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW5Ob2RlcyIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4sZT1bXSxuPXQubGVuZ3RoO24tLTspZVtuXT10W25dO3JldHVybiBlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEk9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2lucHV0TWFwKS5sZW5ndGgtKHRoaXMuX2lucHV0TWFwW3RdPzE6MCk+MH0sdC5wcm90b3R5cGUuaGFzS2V5VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbi5oYXNLZXlWYWx1ZSh0KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoYXNJbml0aWFsaXplZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNJbml0aWFsaXplZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpLEY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxuLGkscil8fHRoaXM7cmV0dXJuIG8uX2Jhc2VLZXk9ZSxvLl9tZWRpYU1vbml0b3I9bixvLl9lbGVtZW50UmVmPWksby5fc3R5bGVyPXIsb31yZXR1cm4gT2JqZWN0KHUuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImFjdGl2ZUtleSIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21xQWN0aXZhdGlvbixlPXQ/dC5hY3RpdmF0ZWRJbnB1dEtleTp0aGlzLl9iYXNlS2V5O3JldHVybiJjbGFzcyI9PT1lPyJrbGF6eiI6ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlucHV0TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lucHV0TWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwibXFBY3RpdmF0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21xQWN0aXZhdGlvbn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5oYXNSZXNwb25zaXZlQVBJPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvdG90eXBlLmhhc1Jlc3BvbnNpdmVBUEkuY2FsbCh0aGlzLHRoaXMuX2Jhc2VLZXkpfSxlLnByb3RvdHlwZS5xdWVyeUlucHV0PWZ1bmN0aW9uKHQpe3JldHVybiB0P3RoaXMuX3F1ZXJ5SW5wdXQodCk6dm9pZCAwfSxlLnByb3RvdHlwZS5jYWNoZUlucHV0PWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1uJiYobj0hMSksbil0aGlzLl9jYWNoZUlucHV0UmF3KHQsZSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXRoaXMuX2NhY2hlSW5wdXRBcnJheSh0LGUpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKXRoaXMuX2NhY2hlSW5wdXRPYmplY3QodCxlKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY2xhc3MgdmFsdWUgJyIrdCsiJyBwcm92aWRlZC4gRGlkIHlvdSB3YW50IHRvIGNhY2hlIHRoZSByYXcgdmFsdWU/Iik7dGhpcy5fY2FjaGVJbnB1dFN0cmluZyh0LGUpfX0sZS5wcm90b3R5cGUubGlzdGVuRm9yTWVkaWFRdWVyeUNoYW5nZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLl9saXN0ZW5Gb3JNZWRpYVF1ZXJ5Q2hhbmdlcyh0LGUsbil9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0UmF3PWZ1bmN0aW9uKHQsZSl7dCYmKHRoaXMuX2lucHV0TWFwW3RdPWUpfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dEFycmF5PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX2lucHV0TWFwW3RdPWU/ZS5qb2luKCIgIik6IiJ9LGUucHJvdG90eXBlLl9jYWNoZUlucHV0T2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9IiIpO3ZhciBuPVtdO2lmKGUpZm9yKHZhciBpIGluIGUpZVtpXSYmbi5wdXNoKGkpO3RoaXMuX2lucHV0TWFwW3RdPW4uam9pbigiICIpfSxlLnByb3RvdHlwZS5fY2FjaGVJbnB1dFN0cmluZz1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9pbnB1dE1hcFt0XT1lfSxlfShMKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2JyZWFrcG9pbnRzPXQsdGhpcy5fbWF0Y2hNZWRpYT1lLHRoaXMuX3JlZ2lzdGVyQnJlYWtwb2ludHMoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJicmVha3BvaW50cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9icmVha3BvaW50cy5pdGVtcy5zbGljZSgpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlT3ZlcmxhcHMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9icmVha3BvaW50cy5vdmVybGFwcGluZ3MucmV2ZXJzZSgpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShlLm1lZGlhUXVlcnkpfSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9bnVsbDt0aGlzLmJyZWFrcG9pbnRzLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyIiIT09bi5hbGlhcyYmIWUmJnQuX21hdGNoTWVkaWEuaXNBY3RpdmUobi5tZWRpYVF1ZXJ5KSYmKGU9bil9KTt2YXIgbj10aGlzLmJyZWFrcG9pbnRzWzBdO3JldHVybiBlfHwodGhpcy5fbWF0Y2hNZWRpYS5pc0FjdGl2ZShuLm1lZGlhUXVlcnkpP246bnVsbCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5QWxpYXModCl8fHRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeVF1ZXJ5KHQpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLmlzQWN0aXZlKGU/ZS5tZWRpYVF1ZXJ5OnQpfSx0LnByb3RvdHlwZS5vYnNlcnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2JyZWFrcG9pbnRzLmZpbmRCeUFsaWFzKHR8fCIiKXx8dGhpcy5fYnJlYWtwb2ludHMuZmluZEJ5UXVlcnkodHx8IiIpO3JldHVybiB0aGlzLl9tYXRjaE1lZGlhLm9ic2VydmUoZT9lLm1lZGlhUXVlcnk6dCkucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbih0KXtyZXR1cm4gQSh0LGUpfSksT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIWV8fCIiIT09dC5tcUFsaWFzfSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJCcmVha3BvaW50cz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2JyZWFrcG9pbnRzLnNvcnRlZEl0ZW1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tZWRpYVF1ZXJ5fSk7dGhpcy5fbWF0Y2hNZWRpYS5yZWdpc3RlclF1ZXJ5KHQpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5XKShDKSxPYmplY3QoaS5XKShUKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIFYodCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuPXRbZV18fCIiO3N3aXRjaChlKXtjYXNlImRpc3BsYXkiOnQuZGlzcGxheT0iZmxleCI9PT1uP1siLXdlYmtpdC1mbGV4IiwiZmxleCJdOiJpbmxpbmUtZmxleCI9PT1uP1siLXdlYmtpdC1pbmxpbmUtZmxleCIsImlubGluZS1mbGV4Il06bjticmVhaztjYXNlImFsaWduLWl0ZW1zIjpjYXNlImFsaWduLXNlbGYiOmNhc2UiYWxpZ24tY29udGVudCI6Y2FzZSJmbGV4IjpjYXNlImZsZXgtYmFzaXMiOmNhc2UiZmxleC1mbG93IjpjYXNlImZsZXgtZ3JvdyI6Y2FzZSJmbGV4LXNocmluayI6Y2FzZSJmbGV4LXdyYXAiOmNhc2UianVzdGlmeS1jb250ZW50Ijp0WyItd2Via2l0LSIrZV09bjticmVhaztjYXNlImZsZXgtZGlyZWN0aW9uIjp0WyItd2Via2l0LWZsZXgtZGlyZWN0aW9uIl09bj1ufHwicm93Iix0WyJmbGV4LWRpcmVjdGlvbiJdPW47YnJlYWs7Y2FzZSJvcmRlciI6dC5vcmRlcj10WyItd2Via2l0LSIrZV09aXNOYU4obik/IjAiOm59fXJldHVybiB0fXZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt0aGlzLl9zZXJ2ZXJTdHlsZXNoZWV0PXQsdGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkPWUsdGhpcy5fcGxhdGZvcm1JZD1uLHRoaXMubGF5b3V0Q29uZmlnPWl9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5U3R5bGVUb0VsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXt9OyJzdHJpbmciPT10eXBlb2YgZSYmKGlbZV09bixlPWkpLGk9dGhpcy5sYXlvdXRDb25maWcuZGlzYWJsZVZlbmRvclByZWZpeGVzP2U6VihlKSx0aGlzLl9hcHBseU11bHRpVmFsdWVTdHlsZVRvRWxlbWVudChpLHQpfSx0LnByb3RvdHlwZS5hcHBseVN0eWxlVG9FbGVtZW50cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7dm9pZCAwPT09ZSYmKGU9W10pO3ZhciBpPXRoaXMubGF5b3V0Q29uZmlnLmRpc2FibGVWZW5kb3JQcmVmaXhlcz90OlYodCk7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24uX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50KGksdCl9KX0sdC5wcm90b3R5cGUuZ2V0Rmxvd0RpcmVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvb2t1cFN0eWxlKHQsImZsZXgtZGlyZWN0aW9uIik7ZT09PVUmJihlPSIiKTt2YXIgbj10aGlzLmxvb2t1cElubGluZVN0eWxlKHQsImZsZXgtZGlyZWN0aW9uIil8fE9iamVjdChyLnIpKHRoaXMuX3BsYXRmb3JtSWQpJiZ0aGlzLl9zZXJ2ZXJNb2R1bGVMb2FkZWQ/ZToiIjtyZXR1cm5bZXx8InJvdyIsbl19LHQucHJvdG90eXBlLmxvb2t1cEF0dHJpYnV0ZVZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKGUpfHwiIn0sdC5wcm90b3R5cGUubG9va3VwSW5saW5lU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KHIucSkodGhpcy5fcGxhdGZvcm1JZCk/dC5zdHlsZVtlXTp0aGlzLl9nZXRTZXJ2ZXJTdHlsZSh0LGUpfSx0LnByb3RvdHlwZS5sb29rdXBTdHlsZT1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBpPSIiO3JldHVybiB0JiYoKGk9dGhpcy5sb29rdXBJbmxpbmVTdHlsZSh0LGUpKXx8KE9iamVjdChyLnEpKHRoaXMuX3BsYXRmb3JtSWQpP258fChpPWdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk6dGhpcy5fc2VydmVyTW9kdWxlTG9hZGVkJiYoaT10aGlzLl9zZXJ2ZXJTdHlsZXNoZWV0LmdldFN0eWxlRm9yRWxlbWVudCh0LGUpKSkpLGk/aS50cmltKCk6VX0sdC5wcm90b3R5cGUuX2FwcGx5TXVsdGlWYWx1ZVN0eWxlVG9FbGVtZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztPYmplY3Qua2V5cyh0KS5zb3J0KCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1BcnJheS5pc0FycmF5KHRbaV0pP3RbaV06W3RbaV1dO28uc29ydCgpO2Zvcih2YXIgYT0wLHM9bzthPHMubGVuZ3RoO2ErKyl7dmFyIHU9c1thXTtPYmplY3Qoci5xKShuLl9wbGF0Zm9ybUlkKXx8IW4uX3NlcnZlck1vZHVsZUxvYWRlZD9PYmplY3Qoci5xKShuLl9wbGF0Zm9ybUlkKT9lLnN0eWxlLnNldFByb3BlcnR5KGksdSk6bi5fc2V0U2VydmVyU3R5bGUoZSxpLHUpOm4uX3NlcnZlclN0eWxlc2hlZXQuYWRkU3R5bGVUb0VsZW1lbnQoZSxpLHUpfX0pfSx0LnByb3RvdHlwZS5fc2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlLG4pe2U9ZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIGk9dGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpO2lbZV09bnx8IiIsdGhpcy5fd3JpdGVTdHlsZUF0dHJpYnV0ZSh0LGkpfSx0LnByb3RvdHlwZS5fZ2V0U2VydmVyU3R5bGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVhZFN0eWxlQXR0cmlidXRlKHQpW2VdfHwiIn0sdC5wcm90b3R5cGUuX3JlYWRTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2lmKG4pZm9yKHZhciBpPW4uc3BsaXQoLzsrL2cpLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXS50cmltKCk7aWYoby5sZW5ndGg+MCl7dmFyIGE9by5pbmRleE9mKCI6Iik7aWYoLTE9PT1hKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBDU1Mgc3R5bGU6ICIrbyk7ZVtvLnN1YnN0cigwLGEpLnRyaW0oKV09by5zdWJzdHIoYSsxKS50cmltKCl9fXJldHVybiBlfSx0LnByb3RvdHlwZS5fd3JpdGVTdHlsZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPSIiO2Zvcih2YXIgaSBpbiBlKWVbaV0mJihuKz1pKyI6IitlW2ldKyI7Iik7dC5zZXRBdHRyaWJ1dGUoInN0eWxlIixuKX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUykoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVykoUCw4KSxPYmplY3QoaS5XKShOLDgpLE9iamVjdChpLlcpKGkueiksT2JqZWN0KGkuVykoUykpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxVPSJibG9jayI7ZnVuY3Rpb24gSCh0LGUsbil7dm9pZCAwPT09ZSYmKGU9IjEiKSx2b2lkIDA9PT1uJiYobj0iMSIpO3ZhciBpPVtlLG4sdF0scj10LmluZGV4T2YoImNhbGMiKTtpZihyPjApaVsyXT1xKHQuc3Vic3RyaW5nKHIpLnRyaW0oKSksMj09KG89dC5zdWJzdHIoMCxyKS50cmltKCkuc3BsaXQoIiAiKSkubGVuZ3RoJiYoaVswXT1vWzBdLGlbMV09b1sxXSk7ZWxzZSBpZigwPT1yKWlbMl09cSh0LnRyaW0oKSk7ZWxzZXt2YXIgbztpPTM9PT0obz10LnNwbGl0KCIgIikpLmxlbmd0aD9vOltlLG4sdF19cmV0dXJuIGl9ZnVuY3Rpb24gcSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHNdL2csIiIpLnJlcGxhY2UoL1tcL1wqXCtcLV0vZywiICQmICIpfX0sIlBUL1giOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pO3ZhciBpPW4oIkNjbkciKSxyPW4oIlpZQ2kiKSxvPWZ1bmN0aW9uKCl7fSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZ2VuZXJhdGVJZD1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsbj0wO248MjA7bisrKXQrPWUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCkpO3JldHVybiB0fSx0LnByb3RvdHlwZS5hZGRSYW5kb21JZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt0LmlkPWUuZ2VuZXJhdGVJZCgpLHZvaWQgMCE9PXQuaXRlbXMmJmUuYWRkUmFuZG9tSWQodC5pdGVtcyl9KX0sdC5wcm90b3R5cGUucmVjdXJzaXZlQ2hlY2tJZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIHQuaWQ9PT1lfHwodm9pZCAwIT09dC5pdGVtcz90Lml0ZW1zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIG4ucmVjdXJzaXZlQ2hlY2tJZCh0LGUpfSk6dm9pZCAwKX0sdC5wcm90b3R5cGUucmVjdXJzaXZlQ2hlY2tMaW5rPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07Zm9yKHZhciByIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShyKSYmKGkubGluaz09PWU/dGhpcy5mb3VuZExpbmtPYmplY3Q9aTp2b2lkIDAhPT1pLml0ZW1zJiZ0aGlzLnJlY3Vyc2l2ZUNoZWNrTGluayhpLml0ZW1zLGUpKX19LHQucHJvdG90eXBlLmdldE1hdGNoZWRPYmplY3RCeVVybD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlY3Vyc2l2ZUNoZWNrTGluayh0LGUpLHRoaXMuZm91bmRMaW5rT2JqZWN0fSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCkscz17UEFERElOR19BVF9TVEFSVDohMCxERUZBVUxUX0NMQVNTX05BTUU6ImFtbWwtY29udGFpbmVyIixERUZBVUxUX0xJU1RfQ0xBU1NfTkFNRToiYW1tbC1pdGVtIixTRUxFQ1RFRF9MSVNUX0NMQVNTX05BTUU6InNlbGVjdGVkLWFtbWwtaXRlbSIsREVGQVVMVF9TRUxFQ1RFRF9GT05UX0NPTE9SOiIjMTk3NmQyIixERUZBVUxUX0xJU1RfQkFDS0dST1VORF9DT0xPUjoiI2ZmZiIsREVGQVVMVF9MSVNUX0ZPTlRfQ09MT1I6InJnYmEoMCwwLDAsLjg3KSIsRVJST1JfTUVTU0FHRToiSW52YWxpZCBkYXRhIGZvciBtYXRlcmlhbCBNdWx0aWxldmVsIExpc3QgQ29tcG9uZW50In0sdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnJvdXRlcj10LHRoaXMubXVsdGlsZXZlbE1lbnVTZXJ2aWNlPWUsdGhpcy5jb25maWd1cmF0aW9uPW51bGwsdGhpcy5zZWxlY3RlZEl0ZW09bmV3IGkubSx0aGlzLm5vZGVDb25maWc9e3BhZGRpbmdBdFN0YXJ0OiEwLGxpc3RCYWNrZ3JvdW5kQ29sb3I6bnVsbCxmb250Q29sb3I6bnVsbCxzZWxlY3RlZExpc3RGb250Q29sb3I6bnVsbCxpbnRlcmZhY2VXaXRoUm91dGU6bnVsbH0sdGhpcy5pc0ludmFsaWRDb25maWc9ITB9cmV0dXJuIHQucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKCl7dGhpcy5jaGVja1ZhbGlkZGF0YSgpLHRoaXMuZGV0ZWN0SW52YWxpZENvbmZpZygpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bnVsbCE9PXRoaXMuY29uZmlndXJhdGlvbiYmdm9pZCAwIT09dGhpcy5jb25maWd1cmF0aW9uJiYiIiE9PXRoaXMuY29uZmlndXJhdGlvbiYmbnVsbCE9PXRoaXMuY29uZmlndXJhdGlvbi5pbnRlcmZhY2VXaXRoUm91dGUmJnRoaXMuY29uZmlndXJhdGlvbi5pbnRlcmZhY2VXaXRoUm91dGUmJnRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHIuZCl7dmFyIG49dC5tdWx0aWxldmVsTWVudVNlcnZpY2UuZ2V0TWF0Y2hlZE9iamVjdEJ5VXJsKHQuaXRlbXMsZS51cmwpO3ZvaWQgMCE9PW4mJnZvaWQgMCE9PW4ubGluayYmbnVsbCE9PW4ubGluayYmIiIhPT1uLmxpbmsmJih0LmN1cnJlbnROb2RlPW4sdC5zZWxlY3RlZExpc3RJdGVtKG4pKX19KX0sdC5wcm90b3R5cGUuY2hlY2tWYWxpZGRhdGE9ZnVuY3Rpb24oKXswPT09dGhpcy5pdGVtcy5sZW5ndGg/Y29uc29sZS53YXJuKHMuRVJST1JfTUVTU0FHRSk6KHRoaXMuaXRlbXM9dGhpcy5pdGVtcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaGlkZGVufSksdGhpcy5tdWx0aWxldmVsTWVudVNlcnZpY2UuYWRkUmFuZG9tSWQodGhpcy5pdGVtcykpfSx0LnByb3RvdHlwZS5kZXRlY3RJbnZhbGlkQ29uZmlnPWZ1bmN0aW9uKCl7aWYobnVsbD09PXRoaXMuY29uZmlndXJhdGlvbnx8dm9pZCAwPT09dGhpcy5jb25maWd1cmF0aW9ufHwiIj09PXRoaXMuY29uZmlndXJhdGlvbil0aGlzLmlzSW52YWxpZENvbmZpZz0hMDtlbHNle3RoaXMuaXNJbnZhbGlkQ29uZmlnPSExO3ZhciB0PXRoaXMuY29uZmlndXJhdGlvbjt2b2lkIDAhPT10LnBhZGRpbmdBdFN0YXJ0JiZudWxsIT09dC5wYWRkaW5nQXRTdGFydCYmImJvb2xlYW4iPT10eXBlb2YgdC5wYWRkaW5nQXRTdGFydCYmKHRoaXMubm9kZUNvbmZpZy5wYWRkaW5nQXRTdGFydD10LnBhZGRpbmdBdFN0YXJ0KSwiIiE9PXQubGlzdEJhY2tncm91bmRDb2xvciYmbnVsbCE9PXQubGlzdEJhY2tncm91bmRDb2xvciYmdm9pZCAwIT09dC5saXN0QmFja2dyb3VuZENvbG9yJiYodGhpcy5ub2RlQ29uZmlnLmxpc3RCYWNrZ3JvdW5kQ29sb3I9dC5saXN0QmFja2dyb3VuZENvbG9yKSwiIiE9PXQuZm9udENvbG9yJiZudWxsIT09dC5mb250Q29sb3ImJnZvaWQgMCE9PXQuZm9udENvbG9yJiYodGhpcy5ub2RlQ29uZmlnLmZvbnRDb2xvcj10LmZvbnRDb2xvciksIiIhPT10LnNlbGVjdGVkTGlzdEZvbnRDb2xvciYmbnVsbCE9PXQuc2VsZWN0ZWRMaXN0Rm9udENvbG9yJiZ2b2lkIDAhPT10LnNlbGVjdGVkTGlzdEZvbnRDb2xvciYmKHRoaXMubm9kZUNvbmZpZy5zZWxlY3RlZExpc3RGb250Q29sb3I9dC5zZWxlY3RlZExpc3RGb250Q29sb3IpLG51bGwhPT10LmludGVyZmFjZVdpdGhSb3V0ZSYmdm9pZCAwIT09dC5pbnRlcmZhY2VXaXRoUm91dGUmJiJib29sZWFuIj09dHlwZW9mIHQuaW50ZXJmYWNlV2l0aFJvdXRlJiYodGhpcy5ub2RlQ29uZmlnLmludGVyZmFjZVdpdGhSb3V0ZT10LmludGVyZmFjZVdpdGhSb3V0ZSl9fSx0LnByb3RvdHlwZS5nZXRDbGFzc05hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ludmFsaWRDb25maWc/cy5ERUZBVUxUX0NMQVNTX05BTUU6IiIhPT10aGlzLmNvbmZpZ3VyYXRpb24uY2xhc3NuYW1lJiZudWxsIT09dGhpcy5jb25maWd1cmF0aW9uLmNsYXNzbmFtZSYmdm9pZCAwIT09dGhpcy5jb25maWd1cmF0aW9uLmNsYXNzbmFtZT9zLkRFRkFVTFRfQ0xBU1NfTkFNRSsiICIrdGhpcy5jb25maWd1cmF0aW9uLmNsYXNzbmFtZTpzLkRFRkFVTFRfQ0xBU1NfTkFNRX0sdC5wcm90b3R5cGUuZ2V0R2xvYmFsU3R5bGU9ZnVuY3Rpb24oKXtpZighdGhpcy5pc0ludmFsaWRDb25maWcpe3ZhciB0PXtiYWNrZ3JvdW5kOm51bGx9O3JldHVybiIiIT09dGhpcy5jb25maWd1cmF0aW9uLmJhY2tncm91bmRDb2xvciYmbnVsbCE9PXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3ImJnZvaWQgMCE9PXRoaXMuY29uZmlndXJhdGlvbi5iYWNrZ3JvdW5kQ29sb3ImJih0LmJhY2tncm91bmQ9dGhpcy5jb25maWd1cmF0aW9uLmJhY2tncm91bmRDb2xvciksdH19LHQucHJvdG90eXBlLnNlbGVjdGVkTGlzdEl0ZW09ZnVuY3Rpb24odCl7dGhpcy5jdXJyZW50Tm9kZT10LHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQodCl9LHR9KCksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgbjt0aGlzLnJvdXRlcj10LHRoaXMubXVsdGlsZXZlbE1lbnVTZXJ2aWNlPWUsdGhpcy5sZXZlbD0xLHRoaXMubm9kZUNvbmZpZ3VyYXRpb249bnVsbCx0aGlzLnNlbGVjdGVkSXRlbT1uZXcgaS5tLHRoaXMuaXNTZWxlY3RlZD0hMSx0aGlzLmV4cGFuZGVkPSExLHRoaXMuc2VsZWN0ZWRMaXN0Q2xhc3Nlcz0oKG49e30pW3MuREVGQVVMVF9MSVNUX0NMQVNTX05BTUVdPSEwLG5bcy5TRUxFQ1RFRF9MSVNUX0NMQVNTX05BTUVdPSExLG4pfXJldHVybiB0LnByb3RvdHlwZS5uZ09uQ2hhbmdlcz1mdW5jdGlvbigpe3RoaXMubm9kZUNoaWxkcmVuPXRoaXMubm9kZSYmdGhpcy5ub2RlLml0ZW1zP3RoaXMubm9kZS5pdGVtcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuaGlkZGVufSk6W10sdm9pZCAwIT09dGhpcy5zZWxlY3RlZE5vZGUmJm51bGwhPT10aGlzLnNlbGVjdGVkTm9kZSYmdGhpcy5zZXRTZWxlY3RlZENsYXNzKHRoaXMubXVsdGlsZXZlbE1lbnVTZXJ2aWNlLnJlY3Vyc2l2ZUNoZWNrSWQodGhpcy5ub2RlLHRoaXMuc2VsZWN0ZWROb2RlLmlkKSl9LHQucHJvdG90eXBlLnNldFNlbGVjdGVkQ2xhc3M9ZnVuY3Rpb24odCl7dmFyIGU7dD8odGhpcy5pc1NlbGVjdGVkPSEwLHRoaXMuZXhwYW5kZWQ9ITApOnRoaXMuaXNTZWxlY3RlZD0hMSx0aGlzLnNlbGVjdGVkTGlzdENsYXNzZXM9KChlPXt9KVtzLkRFRkFVTFRfTElTVF9DTEFTU19OQU1FXT0hMCxlW3MuU0VMRUNURURfTElTVF9DTEFTU19OQU1FXT10aGlzLmlzU2VsZWN0ZWQsZSksdGhpcy5zZXRDbGFzc2VzKCl9LHQucHJvdG90eXBlLmdldFBhZGRpbmdBdFN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUubG9nKHRoaXMubm9kZUNvbmZpZ3VyYXRpb24pLCEhdGhpcy5ub2RlQ29uZmlndXJhdGlvbi5wYWRkaW5nQXRTdGFydH0sdC5wcm90b3R5cGUuZ2V0TGlzdFN0eWxlPWZ1bmN0aW9uKCl7dmFyIHQ9e2JhY2tncm91bmQ6cy5ERUZBVUxUX0xJU1RfQkFDS0dST1VORF9DT0xPUixjb2xvcjpzLkRFRkFVTFRfTElTVF9GT05UX0NPTE9SfTtyZXR1cm4gbnVsbCE9PXRoaXMubm9kZUNvbmZpZ3VyYXRpb24ubGlzdEJhY2tncm91bmRDb2xvciYmKHQuYmFja2dyb3VuZD10aGlzLm5vZGVDb25maWd1cmF0aW9uLmxpc3RCYWNrZ3JvdW5kQ29sb3IpLHRoaXMuaXNTZWxlY3RlZD90LmNvbG9yPW51bGwhPT10aGlzLm5vZGVDb25maWd1cmF0aW9uLnNlbGVjdGVkTGlzdEZvbnRDb2xvcj90aGlzLm5vZGVDb25maWd1cmF0aW9uLnNlbGVjdGVkTGlzdEZvbnRDb2xvcjpzLkRFRkFVTFRfU0VMRUNURURfRk9OVF9DT0xPUjpudWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5mb250Q29sb3ImJih0LmNvbG9yPXRoaXMubm9kZUNvbmZpZ3VyYXRpb24uZm9udENvbG9yKSx0fSx0LnByb3RvdHlwZS5oYXNJdGVtcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVDaGlsZHJlbi5sZW5ndGg+MH0sdC5wcm90b3R5cGUuc2V0Q2xhc3Nlcz1mdW5jdGlvbigpe3ZhciB0O3RoaXMuY2xhc3Nlcz0oKHQ9e30pWyJsZXZlbC0iK3RoaXMubGV2ZWxdPSEwLHRbImFtbWwtc3VibWVudSJdPXRoaXMuaGFzSXRlbXMoKSYmdGhpcy5leHBhbmRlZCYmdGhpcy5nZXRQYWRkaW5nQXRTdGFydCgpLHQpfSx0LnByb3RvdHlwZS5leHBhbmQ9ZnVuY3Rpb24odCl7dGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLnNldENsYXNzZXMoKSxudWxsIT09dGhpcy5ub2RlQ29uZmlndXJhdGlvbi5pbnRlcmZhY2VXaXRoUm91dGUmJnRoaXMubm9kZUNvbmZpZ3VyYXRpb24uaW50ZXJmYWNlV2l0aFJvdXRlJiZ2b2lkIDAhPT10Lmxpbms/dm9pZCAwIT09dC5leHRlcm5hbFJlZGlyZWN0JiZ0LmV4dGVybmFsUmVkaXJlY3Q/d2luZG93LmxvY2F0aW9uLmhyZWY9dC5saW5rOnRoaXMucm91dGVyLm5hdmlnYXRlKFt0LmxpbmtdKTp2b2lkIDA9PT10Lml0ZW1zJiZ0aGlzLnNlbGVjdGVkTGlzdEl0ZW0odCl9LHQucHJvdG90eXBlLnNlbGVjdGVkTGlzdEl0ZW09ZnVuY3Rpb24odCl7dGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh0KX0sdH0oKSxsPWZ1bmN0aW9uKCl7fX0sUFU4TDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiNmJsRiIpO2Z1bmN0aW9uIHIodCl7dmFyIGU9bmV3IGkuYShmdW5jdGlvbihlKXtlLm5leHQodCksZS5jb21wbGV0ZSgpfSk7cmV0dXJuIGUuX2lzU2NhbGFyPSEwLGUudmFsdWU9dCxlfX0sUGhqbjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigicHNXMCIpO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gT2JqZWN0KGkuYSkodCxlLDEpfX0sUzFuWDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPW4oIks5SWEiKSxvPW4oIjZibEYiKSxhPW4oIkZGT28iKSxzPW4oInB1Z1QiKTtmdW5jdGlvbiB1KCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IGModCkpfX12YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jb25uZWN0YWJsZT10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25uZWN0YWJsZTtuLl9yZWZDb3VudCsrO3ZhciBpPW5ldyBsKHQsbikscj1lLnN1YnNjcmliZShpKTtyZXR1cm4gaS5jbG9zZWR8fChpLmNvbm5lY3Rpb249bi5jb25uZWN0KCkpLHJ9LHR9KCksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuY29ubmVjdGFibGU9bixpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fdW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbm5lY3RhYmxlO2lmKHQpe3RoaXMuY29ubmVjdGFibGU9bnVsbDt2YXIgZT10Ll9yZWZDb3VudDtpZihlPD0wKXRoaXMuY29ubmVjdGlvbj1udWxsO2Vsc2UgaWYodC5fcmVmQ291bnQ9ZS0xLGU+MSl0aGlzLmNvbm5lY3Rpb249bnVsbDtlbHNle3ZhciBuPXRoaXMuY29ubmVjdGlvbixpPXQuX2Nvbm5lY3Rpb247dGhpcy5jb25uZWN0aW9uPW51bGwsIWl8fG4mJmkhPT1ufHxpLnVuc3Vic2NyaWJlKCl9fWVsc2UgdGhpcy5jb25uZWN0aW9uPW51bGx9LGV9KGEuYSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnNvdXJjZT1lLGkuc3ViamVjdEZhY3Rvcnk9bixpLl9yZWZDb3VudD0wLGkuX2lzQ29tcGxldGU9ITEsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX3N1YnNjcmliZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfSxlLnByb3RvdHlwZS5nZXRTdWJqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3ViamVjdDtyZXR1cm4gdCYmIXQuaXNTdG9wcGVkfHwodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9LGUucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb25uZWN0aW9uO3JldHVybiB0fHwodGhpcy5faXNDb21wbGV0ZT0hMSwodD10aGlzLl9jb25uZWN0aW9uPW5ldyBzLmEpLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUobmV3IGQodGhpcy5nZXRTdWJqZWN0KCksdGhpcykpKSx0LmNsb3NlZD8odGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9cy5hLkVNUFRZKTp0aGlzLl9jb25uZWN0aW9uPXQpLHR9LGUucHJvdG90eXBlLnJlZkNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHUoKSh0aGlzKX0sZX0oby5hKS5wcm90b3R5cGUsaD17b3BlcmF0b3I6e3ZhbHVlOm51bGx9LF9yZWZDb3VudDp7dmFsdWU6MCx3cml0YWJsZTohMH0sX3N1YmplY3Q6e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9LF9jb25uZWN0aW9uOnt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSxfc3Vic2NyaWJlOnt2YWx1ZTpmLl9zdWJzY3JpYmV9LF9pc0NvbXBsZXRlOnt2YWx1ZTpmLl9pc0NvbXBsZXRlLHdyaXRhYmxlOiEwfSxnZXRTdWJqZWN0Ont2YWx1ZTpmLmdldFN1YmplY3R9LGNvbm5lY3Q6e3ZhbHVlOmYuY29ubmVjdH0scmVmQ291bnQ6e3ZhbHVlOmYucmVmQ291bnR9fSxkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS5jb25uZWN0YWJsZT1uLGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9lcnJvcj1mdW5jdGlvbihlKXt0aGlzLl91bnN1YnNjcmliZSgpLHQucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsZSl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGFibGUuX2lzQ29tcGxldGU9ITAsdGhpcy5fdW5zdWJzY3JpYmUoKSx0LnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKX0sZS5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25uZWN0YWJsZTtpZih0KXt0aGlzLmNvbm5lY3RhYmxlPW51bGw7dmFyIGU9dC5fY29ubmVjdGlvbjt0Ll9yZWZDb3VudD0wLHQuX3N1YmplY3Q9bnVsbCx0Ll9jb25uZWN0aW9uPW51bGwsZSYmZS51bnN1YnNjcmliZSgpfX0sZX0oci5iKTtmdW5jdGlvbiBwKCl7cmV0dXJuIG5ldyByLmF9ZnVuY3Rpb24gbSgpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdSgpKChlPXAsZnVuY3Rpb24odCl7dmFyIG47bj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3ZhciBpPU9iamVjdC5jcmVhdGUodCxoKTtyZXR1cm4gaS5zb3VyY2U9dCxpLnN1YmplY3RGYWN0b3J5PW4saX0pKHQpKTt2YXIgZX19bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KX0sUzVYUTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiREtUYiIpLHI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnRoZW4oZnVuY3Rpb24odCl7ZS5jbG9zZWR8fChlLm5leHQodCksZS5jb21wbGV0ZSgpKX0sZnVuY3Rpb24odCl7cmV0dXJuIGUuZXJyb3IodCl9KS50aGVuKG51bGwsaS5hKSxlfX19LFNNc206ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJJcDBSIikscj1uKCJ0L05hIiksbz1uKCJDY25HIiksYT1uKCJaWWp0Iikscz1uKCJGL1hMIiksdT1uKCJWTnI0IiksYz1uKCJYbFB3IiksbD1uKCJ4TXlFIiksZj1uKCI2N1kvIiksaD1uKCJtclNHIiksZD1uKCJGRk9vIikscD1uKCJwdWdUIiksbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5jYWxsYmFjaz10fXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyB5KHQsdGhpcy5jYWxsYmFjaykpfSx0fSgpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmFkZChuZXcgcC5hKG4pKSxpfXJldHVybiBoLmIoZSx0KSxlfShkLmEpLHY9bigiUzFuWCIpLGc9bigiOVoxRiIpLGI9bigidDlmWiIpLF89bigiV2Y0cCIpLHc9bigibjZnRyIpO2Z1bmN0aW9uIHgodCl7cmV0dXJuIEVycm9yKCdVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIicrdCsnIicpfWZ1bmN0aW9uIFModCl7cmV0dXJuIEVycm9yKCJUaGUgVVJMIHByb3ZpZGVkIHRvIE1hdEljb25SZWdpc3RyeSB3YXMgbm90IHRydXN0ZWQgYXMgYSByZXNvdXJjZSBVUkwgdmlhIEFuZ3VsYXIncyBEb21TYW5pdGl6ZXIuIEF0dGVtcHRlZCBVUkwgd2FzIFwiIit0KyciLicpfWZ1bmN0aW9uIEUodCl7cmV0dXJuIEVycm9yKCJUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgXCIiK3QrJyIuJyl9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBPfSk7dmFyIEM9ZnVuY3Rpb24odCl7dC5ub2RlTmFtZT90aGlzLnN2Z0VsZW1lbnQ9dDp0aGlzLnVybD10fSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5faHR0cENsaWVudD10LHRoaXMuX3Nhbml0aXplcj1lLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPSJtYXRlcmlhbC1pY29ucyIsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuYWRkU3ZnSWNvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIix0LGUpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsdCxlKX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvbkluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3IEMobikpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5HLkhUTUwsbik7aWYoIWkpdGhyb3cgRShuKTt2YXIgcj10aGlzLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbihpKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyh0LGUsbmV3IEMocikpfSx0LnByb3RvdHlwZS5hZGRTdmdJY29uU2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRJbk5hbWVzcGFjZSgiIix0KX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldExpdGVyYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZSgiIix0KX0sdC5wcm90b3R5cGUuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25TZXRDb25maWcodCxuZXcgQyhlKSl9LHQucHJvdG90eXBlLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUoby5HLkhUTUwsZSk7aWYoIW4pdGhyb3cgRShlKTt2YXIgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhuKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyh0LG5ldyBDKGkpKX0sdC5wcm90b3R5cGUucmVnaXN0ZXJGb250Q2xhc3NBbGlhcz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10KSx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KHQsZSksdGhpc30sdC5wcm90b3R5cGUuY2xhc3NOYW1lRm9yRm9udEFsaWFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuZ2V0KHQpfHx0fSx0LnByb3RvdHlwZS5zZXREZWZhdWx0Rm9udFNldENsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzPXQsdGhpc30sdC5wcm90b3R5cGUuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfSx0LnByb3RvdHlwZS5nZXRTdmdJY29uRnJvbVVybD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG8uRy5SRVNPVVJDRV9VUkwsdCk7aWYoIW4pdGhyb3cgUyh0KTt2YXIgaT10aGlzLl9jYWNoZWRJY29uc0J5VXJsLmdldChuKTtyZXR1cm4gaT9PYmplY3Qocy5hKShUKGkpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IEModCkpLnBpcGUoT2JqZWN0KGwuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhY2hlZEljb25zQnlVcmwuc2V0KG4sdCl9KSxPYmplY3QoZi5hKShmdW5jdGlvbih0KXtyZXR1cm4gVCh0KX0pKX0sdC5wcm90b3R5cGUuZ2V0TmFtZWRTdmdJY29uPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciBuPWsoZSx0KSxpPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChuKTtpZihpKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKGkpO3ZhciByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3ModCxyKTpPYmplY3QoYy5hKSh4KG4pKX0sdC5wcm90b3R5cGUuX2dldFN2Z0Zyb21Db25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3ZnRWxlbWVudD9PYmplY3Qocy5hKShUKHQuc3ZnRWxlbWVudCkpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyh0KS5waXBlKE9iamVjdChsLmEpKGZ1bmN0aW9uKGUpe3JldHVybiB0LnN2Z0VsZW1lbnQ9ZX0pLE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBUKHQpfSkpfSx0LnByb3RvdHlwZS5fZ2V0U3ZnRnJvbUljb25TZXRDb25maWdzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPXRoaXMuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7aWYoaSlyZXR1cm4gT2JqZWN0KHMuYSkoaSk7dmFyIHI9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuc3ZnRWxlbWVudH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbi5fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKHQpLnBpcGUoT2JqZWN0KGcuYSkoZnVuY3Rpb24oZSl7dmFyIGk9bi5fc2FuaXRpemVyLnNhbml0aXplKG8uRy5SRVNPVVJDRV9VUkwsdC51cmwpO3JldHVybiBjb25zb2xlLmVycm9yKCJMb2FkaW5nIGljb24gc2V0IFVSTDogIitpKyIgZmFpbGVkOiAiK2UubWVzc2FnZSksT2JqZWN0KHMuYSkobnVsbCl9KSl9KTtyZXR1cm4gT2JqZWN0KHUuYSkocikucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbigpe3ZhciBpPW4uX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KHQsZSk7aWYoIWkpdGhyb3cgeCh0KTtyZXR1cm4gaX0pKX0sdC5wcm90b3R5cGUuX2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPWVbbl07aWYoaS5zdmdFbGVtZW50KXt2YXIgcj10aGlzLl9leHRyYWN0U3ZnSWNvbkZyb21TZXQoaS5zdmdFbGVtZW50LHQpO2lmKHIpcmV0dXJuIHJ9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2ZldGNoVXJsKHQudXJsKS5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbih0KX0pKX0sdC5wcm90b3R5cGUuX2xvYWRTdmdJY29uU2V0RnJvbUNvbmZpZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0LnN2Z0VsZW1lbnQ/T2JqZWN0KHMuYSkodC5zdmdFbGVtZW50KTp0aGlzLl9mZXRjaFVybCh0LnVybCkucGlwZShPYmplY3QoZi5hKShmdW5jdGlvbihuKXtyZXR1cm4gdC5zdmdFbGVtZW50fHwodC5zdmdFbGVtZW50PWUuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKG4pKSx0LnN2Z0VsZW1lbnR9KSl9LHQucHJvdG90eXBlLl9jcmVhdGVTdmdFbGVtZW50Rm9yU2luZ2xlSWNvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyh0KTtyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyhlKSxlfSx0LnByb3RvdHlwZS5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5xdWVyeVNlbGVjdG9yKCIjIitlKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmNsb25lTm9kZSghMCk7aWYoaS5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSk7aWYoInN5bWJvbCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KGkpKTt2YXIgcj10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZygiPHN2Zz48L3N2Zz4iKTtyZXR1cm4gci5hcHBlbmRDaGlsZChpKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHIpfSx0LnByb3RvdHlwZS5fc3ZnRWxlbWVudEZyb21TdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7ZS5pbm5lckhUTUw9dDt2YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFuKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIG59LHQucHJvdG90eXBlLl90b1N2Z0VsZW1lbnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKCI8c3ZnPjwvc3ZnPiIpLG49MDtuPHQuY2hpbGROb2Rlcy5sZW5ndGg7bisrKXQuY2hpbGROb2Rlc1tuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmZS5hcHBlbmRDaGlsZCh0LmNoaWxkTm9kZXNbbl0uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGV9LHQucHJvdG90eXBlLl9zZXRTdmdBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEF0dHJpYnV0ZSgiZml0IiwiIiksdC5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjEwMCUiKSx0LnNldEF0dHJpYnV0ZSgid2lkdGgiLCIxMDAlIiksdC5zZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiksdC5zZXRBdHRyaWJ1dGUoImZvY3VzYWJsZSIsImZhbHNlIiksdH0sdC5wcm90b3R5cGUuX2ZldGNoVXJsPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXRoaXMuX2h0dHBDbGllbnQpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIEh0dHBDbGllbnQgcHJvdmlkZXIgZm9yIHVzZSB3aXRoIEFuZ3VsYXIgTWF0ZXJpYWwgaWNvbnMuIFBsZWFzZSBpbmNsdWRlIHRoZSBIdHRwQ2xpZW50TW9kdWxlIGZyb20gQGFuZ3VsYXIvY29tbW9uL2h0dHAgaW4geW91ciBhcHAgaW1wb3J0cy4iKTtpZihudWxsPT10KXRocm93IEVycm9yKCdDYW5ub3QgZmV0Y2ggaWNvbiBmcm9tIFVSTCAiJyt0KyciLicpO3ZhciBuPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShvLkcuUkVTT1VSQ0VfVVJMLHQpO2lmKCFuKXRocm93IFModCk7dmFyIGk9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KG4pO2lmKGkpcmV0dXJuIGk7dmFyIHIsYT10aGlzLl9odHRwQ2xpZW50LmdldChuLHtyZXNwb25zZVR5cGU6InRleHQifSkucGlwZSgocj1mdW5jdGlvbigpe3JldHVybiBlLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUobil9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpZnQobmV3IG0ocikpfSksT2JqZWN0KHYuYSkoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChuLGEpLGF9LHQucHJvdG90eXBlLl9hZGRTdmdJY29uQ29uZmlnPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KGsodCxlKSxuKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkU3ZnSWNvblNldENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2ljb25TZXRDb25maWdzLmdldCh0KTtyZXR1cm4gbj9uLnB1c2goZSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KHQsW2VdKSx0aGlzfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoby5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoby5XKShyLmMsOCksT2JqZWN0KG8uVykoYS5jKSxPYmplY3Qoby5XKShpLmQsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBUKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0KyI6IitlfXZhciBBPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiByLl9pY29uUmVnaXN0cnk9bixyLl9pbmxpbmU9ITEsaXx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikscn1yZXR1cm4gT2JqZWN0KGguYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImlubGluZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmxpbmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9pbmxpbmU9T2JqZWN0KHcuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb250U2V0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9mb250U2V0PXRoaXMuX2NsZWFudXBGb250VmFsdWUodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJmb250SWNvbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb250SWNvbn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2ZvbnRJY29uPXRoaXMuX2NsZWFudXBGb250VmFsdWUodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX3NwbGl0SWNvbk5hbWU9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuWyIiLCIiXTt2YXIgZT10LnNwbGl0KCI6Iik7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6cmV0dXJuWyIiLGVbMF1dO2Nhc2UgMjpyZXR1cm4gZTtkZWZhdWx0OnRocm93IEVycm9yKCdJbnZhbGlkIGljb24gbmFtZTogIicrdCsnIicpfX0sZS5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0LnN2Z0ljb24paWYodGhpcy5zdmdJY29uKXt2YXIgbj10aGlzLl9zcGxpdEljb25OYW1lKHRoaXMuc3ZnSWNvbik7dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihuWzFdLG5bMF0pLnBpcGUoT2JqZWN0KGIuYSkoMSkpLnN1YnNjcmliZShmdW5jdGlvbih0KXtyZXR1cm4gZS5fc2V0U3ZnRWxlbWVudCh0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKCJFcnJvciByZXRyaWV2aW5nIGljb246ICIrdC5tZXNzYWdlKX0pfWVsc2UgdGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7dGhpcy5fdXNpbmdGb250SWNvbigpJiZ0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKX0sZS5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt0aGlzLl91c2luZ0ZvbnRJY29uKCkmJnRoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfSxlLnByb3RvdHlwZS5fdXNpbmdGb250SWNvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN2Z0ljb259LGUucHJvdG90eXBlLl9zZXRTdmdFbGVtZW50PWZ1bmN0aW9uKHQpe3RoaXMuX2NsZWFyU3ZnRWxlbWVudCgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0KX0sZS5wcm90b3R5cGUuX2NsZWFyU3ZnRWxlbWVudD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZT10LmNoaWxkTm9kZXMubGVuZ3RoLG49MDtuPGU7bisrKXQucmVtb3ZlQ2hpbGQodC5jaGlsZE5vZGVzW25dKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUZvbnRJY29uQ2xhc3Nlcz1mdW5jdGlvbigpe2lmKHRoaXMuX3VzaW5nRm9udEljb24oKSl7dmFyIHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGU9dGhpcy5mb250U2V0P3RoaXMuX2ljb25SZWdpc3RyeS5jbGFzc05hbWVGb3JGb250QWxpYXModGhpcy5mb250U2V0KTp0aGlzLl9pY29uUmVnaXN0cnkuZ2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpO2UhPXRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzJiYodGhpcy5fcHJldmlvdXNGb250U2V0Q2xhc3MmJnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcyksZSYmdC5jbGFzc0xpc3QuYWRkKGUpLHRoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzPWUpLHRoaXMuZm9udEljb24hPXRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyYmdC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcyksdGhpcy5mb250SWNvbiYmdC5jbGFzc0xpc3QuYWRkKHRoaXMuZm9udEljb24pLHRoaXMuX3ByZXZpb3VzRm9udEljb25DbGFzcz10aGlzLmZvbnRJY29uKX19LGUucHJvdG90eXBlLl9jbGVhbnVwRm9udFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnRyaW0oKS5zcGxpdCgiICIpWzBdOnR9LGV9KE9iamVjdChfLnUpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSxJPWZ1bmN0aW9uKCl7fX0sVDFETTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiaDlEcSIpLHI9bmV3KG4oIkNTOVEiKS5hKShpLmEpfSxUeGpnOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT1uKCJabjhEIik7ZnVuY3Rpb24gcigpe3JldHVybiBPYmplY3QoaS5hKSgxKX19LFVvZEg6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KTt2YXIgaT1uKCJtclNHIikscj1uKCJXZjRwIiksbz0iYWNjZW50IixhPSJwcmltYXJ5IixzPVsibWF0LWJ1dHRvbiIsIm1hdC1mbGF0LWJ1dHRvbiIsIm1hdC1pY29uLWJ1dHRvbiIsIm1hdC1yYWlzZWQtYnV0dG9uIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwibWF0LW1pbmktZmFiIiwibWF0LWZhYiJdLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgdT10LmNhbGwodGhpcyxlKXx8dGhpczt1Ll9wbGF0Zm9ybT1uLHUuX2ZvY3VzTW9uaXRvcj1pLHUuX2FuaW1hdGlvbk1vZGU9cix1LmlzUm91bmRCdXR0b249dS5faGFzSG9zdEF0dHJpYnV0ZXMoIm1hdC1mYWIiLCJtYXQtbWluaS1mYWIiKSx1LmlzSWNvbkJ1dHRvbj11Ll9oYXNIb3N0QXR0cmlidXRlcygibWF0LWljb24tYnV0dG9uIik7Zm9yKHZhciBjPTAsbD1zO2M8bC5sZW5ndGg7YysrKXt2YXIgZj1sW2NdO3UuX2hhc0hvc3RBdHRyaWJ1dGVzKGYpJiZlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChmKX1yZXR1cm4gdS5fZm9jdXNNb25pdG9yLm1vbml0b3IodS5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCEwKSx1LmlzUm91bmRCdXR0b24/dS5jb2xvcj1vOnUuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtZmxhdC1idXR0b24iKSYmKHUuY29sb3I9YSksdX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpfSxlLnByb3RvdHlwZS5mb2N1cz1mdW5jdGlvbigpe3RoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoKX0sZS5wcm90b3R5cGUuX2dldEhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sZS5wcm90b3R5cGUuX2lzUmlwcGxlRGlzYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlUmlwcGxlfHx0aGlzLmRpc2FibGVkfSxlLnByb3RvdHlwZS5faGFzSG9zdEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2dldEhvc3RFbGVtZW50KCkuaGFzQXR0cmlidXRlKGUpfSl9LGV9KE9iamVjdChyLnUpKE9iamVjdChyLncpKE9iamVjdChyLnYpKGZ1bmN0aW9uKHQpe3RoaXMuX2VsZW1lbnRSZWY9dH0pKSkpLGM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXtyZXR1cm4gdC5jYWxsKHRoaXMsaSxlLG4scil8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuX2hhbHREaXNhYmxlZEV2ZW50cz1mdW5jdGlvbih0KXt0aGlzLmRpc2FibGVkJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSxlfSh1KSxsPWZ1bmN0aW9uKCl7fX0sIlY5cSsiOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuKCJDY25HIik7dmFyIGk9bigiSXAwUiIpLHI9bigiT3pmQiIpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7T2JqZWN0KGkucikoZSkmJiF0JiZjb25zb2xlLndhcm4oIldhcm5pbmc6IEZsZXggTGF5b3V0IGxvYWRlZCBvbiB0aGUgc2VydmVyIHdpdGhvdXQgRmxleExheW91dFNlcnZlck1vZHVsZSIpfXJldHVybiB0LndpdGhDb25maWc9ZnVuY3Rpb24oZSxuKXt2YXIgaT1PYmplY3QuYXNzaWduKHt9LHIuZiksbz1bXTtmb3IodmFyIGEgaW4gZSllW2FdPT09aVthXXx8ITEhPT1lW2FdJiYhMCE9PWVbYV18fChpW2FdPWVbYV0pO3JldHVybiBlLnNlcnZlckxvYWRlZCYmby5wdXNoKHtwcm92aWRlOnIubCx1c2VWYWx1ZTohMH0pLEFycmF5LmlzQXJyYXkobikmJm8ucHVzaCh7cHJvdmlkZTpyLmEsdXNlVmFsdWU6bixtdWx0aTohMH0pLG8ucHVzaCh7cHJvdmlkZTpyLmcsdXNlVmFsdWU6aX0pLHtuZ01vZHVsZTp0LHByb3ZpZGVyczpvfX0sdH0oKX0sVk5yNDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGk9bigibXJTRyIpLHI9bigiNmJsRiIpLG89bigiaXNieSIpLGE9bigiRzVKMSIpLHM9bigiem90bSIpLHU9bigiTUdCUyIpLGM9bigiNjdZLyIpO2Z1bmN0aW9uIGwoKXtmb3IodmFyIHQsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZVtlLmxlbmd0aC0xXSYmKHQ9ZS5wb3AoKSksMT09PWUubGVuZ3RoJiZPYmplY3Qoby5hKShlWzBdKSYmKGU9ZVswXSksMD09PWUubGVuZ3RoP2EuYTp0P2woZSkucGlwZShPYmplY3QoYy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh2b2lkIDAsZSl9KSk6bmV3IHIuYShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGYodCxlKX0pfXZhciBmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztpLnNvdXJjZXM9bixpLmNvbXBsZXRlZD0wLGkuaGF2ZVZhbHVlcz0wO3ZhciByPW4ubGVuZ3RoO2kudmFsdWVzPW5ldyBBcnJheShyKTtmb3IodmFyIG89MDtvPHI7bysrKXt2YXIgYT1uW29dLHU9T2JqZWN0KHMuYSkoaSxhLG51bGwsbyk7dSYmaS5hZGQodSl9cmV0dXJuIGl9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLm5vdGlmeU5leHQ9ZnVuY3Rpb24odCxlLG4saSxyKXt0aGlzLnZhbHVlc1tuXT1lLHIuX2hhc1ZhbHVlfHwoci5faGFzVmFsdWU9ITAsdGhpcy5oYXZlVmFsdWVzKyspfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRlc3RpbmF0aW9uLG49dGhpcy5oYXZlVmFsdWVzLGk9dGhpcy52YWx1ZXMscj1pLmxlbmd0aDt0Ll9oYXNWYWx1ZT8odGhpcy5jb21wbGV0ZWQrKyx0aGlzLmNvbXBsZXRlZD09PXImJihuPT09ciYmZS5uZXh0KGkpLGUuY29tcGxldGUoKSkpOmUuY29tcGxldGUoKX0sZX0odS5hKX0sIlZuRC8iOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCJtclNHIikscj1uKCJGRk9vIik7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5saWZ0KG5ldyBhKHQsZSkpfX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnByZWRpY2F0ZT10LHRoaXMudGhpc0FyZz1lfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBzKHQsdGhpcy5wcmVkaWNhdGUsdGhpcy50aGlzQXJnKSl9LHR9KCkscz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5wcmVkaWNhdGU9bixyLnRoaXNBcmc9aSxyLmNvdW50PTAscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsdCx0aGlzLmNvdW50KyspfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9ZSYmdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlfShyLmEpfSxWcGhaOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59LHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKGU9dCx0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGkoZSh0KSxuKX0pLHtsZWZ0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKGUsbixpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj1lLmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTt0KGVbb10sbik+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX0sbz1yKGkpLGE9by5yaWdodCxzPW8ubGVmdCx1PWEsYz1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWwpO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGgtMSxyPXRbMF0sbz1uZXcgQXJyYXkoaTwwPzA6aSk7bjxpOylvW25dPWUocixyPXRbKytuXSk7cmV0dXJuIG99O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm5bdCxlXX12YXIgZj1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvLGEscz10Lmxlbmd0aCx1PWUubGVuZ3RoLGM9bmV3IEFycmF5KHMqdSk7Zm9yKG51bGw9PW4mJihuPWwpLGk9bz0wO2k8czsrK2kpZm9yKGE9dFtpXSxyPTA7cjx1OysrciwrK28pY1tvXT1uKGEsZVtyXSk7cmV0dXJuIGN9LGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0scD1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10Lmxlbmd0aCxvPTAsYT0tMSxzPTAsdT0wO2lmKG51bGw9PWUpZm9yKDsrK2E8cjspaXNOYU4obj1kKHRbYV0pKXx8KHUrPShpPW4tcykqKG4tKHMrPWkvKytvKSkpO2Vsc2UgZm9yKDsrK2E8cjspaXNOYU4obj1kKGUodFthXSxhLHQpKSl8fCh1Kz0oaT1uLXMpKihuLShzKz1pLysrbykpKTtpZihvPjEpcmV0dXJuIHUvKG8tMSl9LG09ZnVuY3Rpb24odCxlKXt2YXIgbj1wKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LHk9ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsbz10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49dFthXSkmJihpPm4mJihpPW4pLHI8biYmKHI9bikpfWVsc2UgZm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZuPj1uKWZvcihpPXI9bjsrK2E8bzspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiYoaT5uJiYoaT1uKSxyPG4mJihyPW4pKTtyZXR1cm5baSxyXX0sdj1BcnJheS5wcm90b3R5cGUsZz12LnNsaWNlLGI9di5tYXAsXz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHc9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHg9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShyPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6cjwzPzE6K247Zm9yKHZhciBpPS0xLHI9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksbz1uZXcgQXJyYXkocik7KytpPHI7KW9baV09dCtpKm47cmV0dXJuIG99LFM9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksQz1NYXRoLnNxcnQoMiksTz1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvLGEscz0tMTtpZihuPStuLCh0PSt0KT09KGU9K2UpJiZuPjApcmV0dXJuW3RdO2lmKChpPWU8dCkmJihyPXQsdD1lLGU9ciksMD09PShhPVQodCxlLG4pKXx8IWlzRmluaXRlKGEpKXJldHVybltdO2lmKGE+MClmb3IodD1NYXRoLmNlaWwodC9hKSxlPU1hdGguZmxvb3IoZS9hKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbChlLXQrMSkpOysrczxyOylvW3NdPSh0K3MpKmE7ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqYSksZT1NYXRoLmNlaWwoZSphKSxvPW5ldyBBcnJheShyPU1hdGguY2VpbCh0LWUrMSkpOysrczxyOylvW3NdPSh0LXMpL2E7cmV0dXJuIGkmJm8ucmV2ZXJzZSgpLG99O2Z1bmN0aW9uIFQodCxlLG4pe3ZhciBpPShlLXQpL01hdGgubWF4KDAsbikscj1NYXRoLmZsb29yKE1hdGgubG9nKGkpL01hdGguTE4xMCksbz1pL01hdGgucG93KDEwLHIpO3JldHVybiByPj0wPyhvPj1TPzEwOm8+PUU/NTpvPj1DPzI6MSkqTWF0aC5wb3coMTAscik6LU1hdGgucG93KDEwLC1yKS8obz49Uz8xMDpvPj1FPzU6bz49Qz8yOjEpfWZ1bmN0aW9uIGsodCxlLG4pe3ZhciBpPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxuKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PVM/cio9MTA6bz49RT9yKj01Om8+PUMmJihyKj0yKSxlPHQ/LXI6cn12YXIgQT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX0sST1mdW5jdGlvbigpe3ZhciB0PXcsZT15LG49QTtmdW5jdGlvbiBpKGkpe3ZhciByLG8sYT1pLmxlbmd0aCxzPW5ldyBBcnJheShhKTtmb3Iocj0wO3I8YTsrK3Ipc1tyXT10KGlbcl0scixpKTt2YXIgYz1lKHMpLGw9Y1swXSxmPWNbMV0saD1uKHMsbCxmKTtBcnJheS5pc0FycmF5KGgpfHwoaD1rKGwsZixoKSxoPXgoTWF0aC5jZWlsKGwvaCkqaCxNYXRoLmZsb29yKGYvaCkqaCxoKSk7Zm9yKHZhciBkPWgubGVuZ3RoO2hbMF08PWw7KWguc2hpZnQoKSwtLWQ7Zm9yKDtoW2QtMV0+ZjspaC5wb3AoKSwtLWQ7dmFyIHAsbT1uZXcgQXJyYXkoZCsxKTtmb3Iocj0wO3I8PWQ7KytyKShwPW1bcl09W10pLngwPXI+MD9oW3ItMV06bCxwLngxPXI8ZD9oW3JdOmY7Zm9yKHI9MDtyPGE7KytyKWw8PShvPXNbcl0pJiZvPD1mJiZtW3UoaCxvLDAsZCldLnB1c2goaVtyXSk7cmV0dXJuIG19cmV0dXJuIGkudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfKGUpLGkpOnR9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6XyhbdFswXSx0WzFdXSksaSk6ZX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9fKGcuY2FsbCh0KSk6Xyh0KSxpKTpufSxpfSxqPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1kKSxpPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fGk8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W2ktMV0saS0xLHQpO3ZhciBpLHI9KGktMSkqZSxvPU1hdGguZmxvb3IociksYT0rbih0W29dLG8sdCk7cmV0dXJuIGErKCtuKHRbbysxXSxvKzEsdCktYSkqKHItbyl9fSxNPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1iLmNhbGwodCxkKS5zb3J0KGkpLE1hdGguY2VpbCgobi1lKS8oMiooaih0LC43NSktaih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LFA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSptKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LE49ZnVuY3Rpb24odCxlKXt2YXIgbixpLHI9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxyOylpZihudWxsIT0obj10W29dKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj10W29dKSYmbj5pJiYoaT1uKX1lbHNlIGZvcig7KytvPHI7KWlmKG51bGwhPShuPWUodFtvXSxvLHQpKSYmbj49bilmb3IoaT1uOysrbzxyOyludWxsIT0obj1lKHRbb10sbyx0KSkmJm4+aSYmKGk9bik7cmV0dXJuIGl9LFI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLHI9aSxvPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKG49ZCh0W29dKSk/LS1yOmErPW47ZWxzZSBmb3IoOysrbzxpOylpc05hTihuPWQoZSh0W29dLG8sdCkpKT8tLXI6YSs9bjtpZihyKXJldHVybiBhL3J9LEQ9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLG89LTEsYT1bXTtpZihudWxsPT1lKWZvcig7KytvPHI7KWlzTmFOKG49ZCh0W29dKSl8fGEucHVzaChuKTtlbHNlIGZvcig7KytvPHI7KWlzTmFOKG49ZChlKHRbb10sbyx0KSkpfHxhLnB1c2gobik7cmV0dXJuIGooYS5zb3J0KGkpLC41KX0sTD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixpLHI9dC5sZW5ndGgsbz0tMSxhPTA7KytvPHI7KWErPXRbb10ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKTstLXI+PTA7KWZvcihlPShpPXRbcl0pLmxlbmd0aDstLWU+PTA7KW5bLS1hXT1pW2VdO3JldHVybiBufSxGPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyPXQubGVuZ3RoLG89LTE7aWYobnVsbD09ZSl7Zm9yKDsrK288cjspaWYobnVsbCE9KG49dFtvXSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49dFtvXSkmJmk+biYmKGk9bil9ZWxzZSBmb3IoOysrbzxyOylpZihudWxsIT0obj1lKHRbb10sbyx0KSkmJm4+PW4pZm9yKGk9bjsrK288cjspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiZpPm4mJihpPW4pO3JldHVybiBpfSx6PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4pO24tLTspaVtuXT10W2Vbbl1dO3JldHVybiBpfSxWPWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4scixvPTAsYT0wLHM9dFthXTtmb3IobnVsbD09ZSYmKGU9aSk7KytvPG47KShlKHI9dFtvXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9cixhPW8pO3JldHVybiAwPT09ZShzLHMpP2E6dm9pZCAwfX0sQj1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpLHIsbz0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO287KXI9TWF0aC5yYW5kb20oKSpvLS18MCxpPXRbbytlXSx0W28rZV09dFtyK2VdLHRbcitlXT1pO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10Lmxlbmd0aCxyPS0xLG89MDtpZihudWxsPT1lKWZvcig7KytyPGk7KShuPSt0W3JdKSYmKG8rPW4pO2Vsc2UgZm9yKDsrK3I8aTspKG49K2UodFtyXSxyLHQpKSYmKG8rPW4pO3JldHVybiBvfSxIPWZ1bmN0aW9uKHQpe2lmKCEocj10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49Rih0LHEpLGk9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIHIsbz0tMSxhPWlbZV09bmV3IEFycmF5KHIpOysrbzxyOylhW29dPXRbb11bZV07cmV0dXJuIGl9O2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQubGVuZ3RofXZhciBHPWZ1bmN0aW9uKCl7cmV0dXJuIEgoYXJndW1lbnRzKX0sVz1BcnJheS5wcm90b3R5cGUuc2xpY2UsWT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sUT0xLFo9MixLPTMsWD00LCQ9MWUtNjtmdW5jdGlvbiBKKHQpe3JldHVybiJ0cmFuc2xhdGUoIisodCsuNSkrIiwwKSJ9ZnVuY3Rpb24gdHQodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBldCgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBudCh0LGUpe3ZhciBuPVtdLGk9bnVsbCxyPW51bGwsbz02LGE9NixzPTMsdT10PT09UXx8dD09PVg/LTE6MSxjPXQ9PT1YfHx0PT09Wj8ieCI6InkiLGw9dD09PVF8fHQ9PT1LP0o6dHQ7ZnVuY3Rpb24gZihmKXt2YXIgaD1udWxsPT1pP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6aSxkPW51bGw9PXI/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOlk6cixwPU1hdGgubWF4KG8sMCkrcyxtPWUucmFuZ2UoKSx5PSttWzBdKy41LHY9K21bbS5sZW5ndGgtMV0rLjUsZz0oZS5iYW5kd2lkdGg/ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCx0LmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIHQucm91bmQoKSYmKGU9TWF0aC5yb3VuZChlKSksZnVuY3Rpb24obil7cmV0dXJuK3QobikrZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19KShlLmNvcHkoKSksYj1mLnNlbGVjdGlvbj9mLnNlbGVjdGlvbigpOmYsXz1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSx3PWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxlKS5vcmRlcigpLHg9dy5leGl0KCksUz13LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRT13LnNlbGVjdCgibGluZSIpLEM9dy5zZWxlY3QoInRleHQiKTtfPV8ubWVyZ2UoXy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCIjMDAwIikpLHc9dy5tZXJnZShTKSxFPUUubWVyZ2UoUy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cihjKyIyIix1Km8pKSxDPUMubWVyZ2UoUy5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoYyx1KnApLmF0dHIoImR5Iix0PT09UT8iMGVtIjp0PT09Sz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1iJiYoXz1fLnRyYW5zaXRpb24oZiksdz13LnRyYW5zaXRpb24oZiksRT1FLnRyYW5zaXRpb24oZiksQz1DLnRyYW5zaXRpb24oZikseD14LnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIsJCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1nKHQpKT9sKHQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLFMuYXR0cigib3BhY2l0eSIsJCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTpnKHQpKX0pKSx4LnJlbW92ZSgpLF8uYXR0cigiZCIsdD09PVh8fHQ9PVo/Ik0iK3UqYSsiLCIreSsiSDAuNVYiK3YrIkgiK3UqYToiTSIreSsiLCIrdSphKyJWMC41SCIrdisiViIrdSphKSx3LmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIGwoZyh0KSl9KSxFLmF0dHIoYysiMiIsdSpvKSxDLmF0dHIoYyx1KnApLnRleHQoZCksYi5maWx0ZXIoZXQpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLHQ9PT1aPyJzdGFydCI6dD09PVg/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWd9KX1yZXR1cm4gZi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gbj1XLmNhbGwoYXJndW1lbnRzKSxmfSxmLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9bXTpXLmNhbGwodCksZik6bi5zbGljZSgpfSxmLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOlcuY2FsbCh0KSxmKTppJiZpLnNsaWNlKCl9LGYudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGYpOnJ9LGYudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rdCxmKTpvfSxmLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsZik6b30sZi50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGYpOmF9LGYudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZik6c30sZn1mdW5jdGlvbiBpdCh0KXtyZXR1cm4gbnQoUSx0KX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gbnQoWix0KX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gbnQoSyx0KX1mdW5jdGlvbiBhdCh0KXtyZXR1cm4gbnQoWCx0KX12YXIgc3Q9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gdXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IGN0KGkpfWZ1bmN0aW9uIGN0KHQpe3RoaXMuXz10fWZ1bmN0aW9uIGx0KHQsZSl7Zm9yKHZhciBuLGk9MCxyPXQubGVuZ3RoO2k8cjsrK2kpaWYoKG49dFtpXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gZnQodCxlLG4pe2Zvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyOysraSlpZih0W2ldLm5hbWU9PT1lKXt0W2ldPXN0LHQ9dC5zbGljZSgwLGkpLmNvbmNhdCh0LnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1jdC5wcm90b3R5cGU9dXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLGkscj10aGlzLl8sbz0oaT1yLCh0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhaS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KSksYT0tMSxzPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KythPHM7KWlmKG49KHQ9b1thXSkudHlwZSlyW25dPWZ0KHJbbl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IobiBpbiByKXJbbl09ZnQocltuXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2E8czspaWYoKG49KHQ9b1thXSkudHlwZSkmJihuPWx0KHJbbl0sdC5uYW1lKSkpcmV0dXJuIG59LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IGN0KHQpfSxjYWxsOmZ1bmN0aW9uKHQsZSl7aWYoKG49YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgbixpLHI9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXJbb109YXJndW1lbnRzW28rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3Iobz0wLG49KGk9dGhpcy5fW3RdKS5sZW5ndGg7bzxuOysrbylpW29dLnZhbHVlLmFwcGx5KGUscil9LGFwcGx5OmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2Zvcih2YXIgaT10aGlzLl9bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcilpW3JdLnZhbHVlLmFwcGx5KGUsbil9fTt2YXIgaHQ9dXQsZHQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHB0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpkdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LG10PWZ1bmN0aW9uKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLHB0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTpwdFtlXSxsb2NhbDp0fTp0fSx5dD1mdW5jdGlvbih0KXt2YXIgZT1tdCh0KTtyZXR1cm4oZS5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX06ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1kdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09ZHQ/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fSkoZSl9O2Z1bmN0aW9uIHZ0KCl7fXZhciBndD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fTtmdW5jdGlvbiBidCgpe3JldHVybltdfXZhciBfdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9idDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSx3dD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCl7dmFyIHh0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtpZigheHQubWF0Y2hlcyl7dmFyIFN0PXh0LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8eHQubXNNYXRjaGVzU2VsZWN0b3J8fHh0Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eHQub01hdGNoZXNTZWxlY3Rvcjt3dD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU3QuY2FsbCh0aGlzLHQpfX19fXZhciBFdD13dCxDdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEFycmF5KHQubGVuZ3RoKX07ZnVuY3Rpb24gT3QodCxlKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPWV9T3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPdCxhcHBlbmRDaGlsZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZSh0LGUpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3Rvcih0KX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCl9fTt2YXIgVHQ9IiQiO2Z1bmN0aW9uIGt0KHQsZSxuLGkscixvKXtmb3IodmFyIGEscz0wLHU9ZS5sZW5ndGgsYz1vLmxlbmd0aDtzPGM7KytzKShhPWVbc10pPyhhLl9fZGF0YV9fPW9bc10saVtzXT1hKTpuW3NdPW5ldyBPdCh0LG9bc10pO2Zvcig7czx1OysrcykoYT1lW3NdKSYmKHJbc109YSl9ZnVuY3Rpb24gQXQodCxlLG4saSxyLG8sYSl7dmFyIHMsdSxjLGw9e30sZj1lLmxlbmd0aCxoPW8ubGVuZ3RoLGQ9bmV3IEFycmF5KGYpO2ZvcihzPTA7czxmOysrcykodT1lW3NdKSYmKGRbc109Yz1UdCthLmNhbGwodSx1Ll9fZGF0YV9fLHMsZSksYyBpbiBsP3Jbc109dTpsW2NdPXUpO2ZvcihzPTA7czxoOysrcykodT1sW2M9VHQrYS5jYWxsKHQsb1tzXSxzLG8pXSk/KGlbc109dSx1Ll9fZGF0YV9fPW9bc10sbFtjXT1udWxsKTpuW3NdPW5ldyBPdCh0LG9bc10pO2ZvcihzPTA7czxmOysrcykodT1lW3NdKSYmbFtkW3NdXT09PXUmJihyW3NdPXUpfWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciBqdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXd9O2Z1bmN0aW9uIE10KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8anQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIE50KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFJ0KHQpfWZ1bmN0aW9uIFJ0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1QdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIER0KHQsZSl7Zm9yKHZhciBuPU50KHQpLGk9LTEscj1lLmxlbmd0aDsrK2k8cjspbi5hZGQoZVtpXSl9ZnVuY3Rpb24gTHQodCxlKXtmb3IodmFyIG49TnQodCksaT0tMSxyPWUubGVuZ3RoOysraTxyOyluLnJlbW92ZShlW2ldKX1mdW5jdGlvbiBGdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24genQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBWdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBCdCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSHQoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBxdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCExKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBHdCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1SdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O3ZhciBXdD17fSxZdD1udWxsO2Z1bmN0aW9uIFF0KHQsZSxuKXtyZXR1cm4gdD1adCh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIFp0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHI9WXQ7WXQ9aTt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7WXQ9cn19fWZ1bmN0aW9uIEt0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4saT0wLHI9LTEsbz1lLmxlbmd0aDtpPG87KytpKW49ZVtpXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytyXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysrcj9lLmxlbmd0aD1yOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBYdCh0LGUsbil7dmFyIGk9V3QuaGFzT3duUHJvcGVydHkodC50eXBlKT9RdDpadDtyZXR1cm4gZnVuY3Rpb24ocixvLGEpe3ZhciBzLHU9dGhpcy5fX29uLGM9aShlLG8sYSk7aWYodSlmb3IodmFyIGw9MCxmPXUubGVuZ3RoO2w8ZjsrK2wpaWYoKHM9dVtsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9YyxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsYyxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOmMsY2FwdHVyZTpufSx1P3UucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiAkdCh0LGUsbixpKXt2YXIgcj1ZdDt0LnNvdXJjZUV2ZW50PVl0LFl0PXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4saSl9ZmluYWxseXtZdD1yfX1mdW5jdGlvbiBKdCh0LGUsbil7dmFyIGk9anQodCkscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIoZSxuKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KHIuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksci5kZXRhaWw9bi5kZXRhaWwpOnIuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQocil9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciB0ZT1bbnVsbF07ZnVuY3Rpb24gZWUodCxlKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPWV9ZnVuY3Rpb24gbmUoKXtyZXR1cm4gbmV3IGVlKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sdGUpfWVlLnByb3RvdHlwZT1uZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVlLHNlbGVjdDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Z3QodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYSxzPWVbcl0sdT1zLmxlbmd0aCxjPWlbcl09bmV3IEFycmF5KHUpLGw9MDtsPHU7KytsKShvPXNbbF0pJiYoYT10LmNhbGwobyxvLl9fZGF0YV9fLGwscykpJiYoIl9fZGF0YV9fImluIG8mJihhLl9fZGF0YV9fPW8uX19kYXRhX18pLGNbbF09YSk7cmV0dXJuIG5ldyBlZShpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PV90KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPG47KytvKWZvcih2YXIgYSxzPWVbb10sdT1zLmxlbmd0aCxjPTA7Yzx1OysrYykoYT1zW2NdKSYmKGkucHVzaCh0LmNhbGwoYSxhLl9fZGF0YV9fLGMscykpLHIucHVzaChhKSk7cmV0dXJuIG5ldyBlZShpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUV0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZm9yKHZhciBvLGE9ZVtyXSxzPWEubGVuZ3RoLHU9aVtyXT1bXSxjPTA7YzxzOysrYykobz1hW2NdKSYmdC5jYWxsKG8sby5fX2RhdGFfXyxjLGEpJiZ1LnB1c2gobyk7cmV0dXJuIG5ldyBlZShpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxsPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0KXtwWysrbF09dH0pLHA7dmFyIG4saT1lP0F0Omt0LHI9dGhpcy5fcGFyZW50cyxvPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKG49dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59KTtmb3IodmFyIGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksdT1uZXcgQXJyYXkoYSksYz1uZXcgQXJyYXkoYSksbD0wO2w8YTsrK2wpe3ZhciBmPXJbbF0saD1vW2xdLGQ9aC5sZW5ndGgscD10LmNhbGwoZixmJiZmLl9fZGF0YV9fLGwsciksbT1wLmxlbmd0aCx5PXVbbF09bmV3IEFycmF5KG0pLHY9c1tsXT1uZXcgQXJyYXkobSk7aShmLGgseSx2LGNbbF09bmV3IEFycmF5KGQpLHAsZSk7Zm9yKHZhciBnLGIsXz0wLHc9MDtfPG07KytfKWlmKGc9eVtfXSl7Zm9yKF8+PXcmJih3PV8rMSk7IShiPXZbd10pJiYrK3c8bTspO2cuX25leHQ9Ynx8bnVsbH19cmV0dXJuKHM9bmV3IGVlKHMscikpLl9lbnRlcj11LHMuX2V4aXQ9YyxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgZWUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoQ3QpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKEN0KSx0aGlzLl9wYXJlbnRzKX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLHU9ZVthXSxjPW5bYV0sbD11Lmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGwpLGg9MDtoPGw7KytoKShzPXVbaF18fGNbaF0pJiYoZltoXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgZWUobyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9LTEsbj10Lmxlbmd0aDsrK2U8bjspZm9yKHZhciBpLHI9dFtlXSxvPXIubGVuZ3RoLTEsYT1yW29dOy0tbz49MDspKGk9cltvXSkmJihhJiZhIT09aS5uZXh0U2libGluZyYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGEpLGE9aSk7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD1JdCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGEscz1uW29dLHU9cy5sZW5ndGgsYz1yW29dPW5ldyBBcnJheSh1KSxsPTA7bDx1OysrbCkoYT1zW2xdKSYmKGNbbF09YSk7Yy5zb3J0KGUpfXJldHVybiBuZXcgZWUocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSx0fSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsbj10Lmxlbmd0aDtlPG47KytlKWZvcih2YXIgaT10W2VdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBhPWlbcl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilmb3IodmFyIHIsbz1lW25dLGE9MCxzPW8ubGVuZ3RoO2E8czsrK2EpKHI9b1thXSkmJnQuY2FsbChyLHIuX19kYXRhX18sYSxvKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPW10KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOmkuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP24ubG9jYWw/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX06bi5sb2NhbD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX0pKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1pP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGksbil9fTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fSkodCxlLG51bGw9PW4/IiI6bikpOk10KHRoaXMubm9kZSgpLHQpfSxwcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX0pKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49UHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9TnQodGhpcy5ub2RlKCkpLHI9LTEsbz1uLmxlbmd0aDsrK3I8bzspaWYoIWkuY29udGFpbnMobltyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXsoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk/RHQ6THQpKHRoaXMsdCl9fTplP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe0R0KHRoaXMsdCl9fTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtMdCh0aGlzLHQpfX0pKG4sZSkpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P0Z0OigiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/enQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFZ0KX0sbG93ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEJ0KX0sYXBwZW5kOmZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eXQodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eXQodCksaT1udWxsPT1lP1V0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Z3QoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEh0KX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/R3Q6cXQpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyLG89KHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKGU9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6ZX19KSxhPW8ubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9YdDpLdCxudWxsPT1uJiYobj0hMSksaT0wO2k8YTsrK2kpdGhpcy5lYWNoKHMob1tpXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciB1LGM9MCxsPXMubGVuZ3RoO2M8bDsrK2MpZm9yKGk9MCx1PXNbY107aTxhOysraSlpZigocj1vW2ldKS50eXBlPT09dS50eXBlJiZyLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSnQodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEp0KHRoaXMsdCxlKX19KSh0LGUpKX19O3ZhciBpZT1uZSxyZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGVlKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZWUoW1t0XV0sdGUpfSxvZT1mdW5jdGlvbih0KXtyZXR1cm4gcmUoeXQodCkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX0sYWU9MDtmdW5jdGlvbiBzZSgpe3JldHVybiBuZXcgdWV9ZnVuY3Rpb24gdWUoKXt0aGlzLl89IkAiKygrK2FlKS50b1N0cmluZygzNil9dWUucHJvdG90eXBlPXNlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dWUsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGNlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9WXQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9LGxlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKHQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2UuY2xpZW50WC1yLmxlZnQtdC5jbGllbnRMZWZ0LGUuY2xpZW50WS1yLnRvcC10LmNsaWVudFRvcF19LGZlPWZ1bmN0aW9uKHQpe3ZhciBlPWNlKCk7cmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMmJihlPWUuY2hhbmdlZFRvdWNoZXNbMF0pLGxlKHQsZSl9LGhlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgZWUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZWUoW251bGw9PXQ/W106dF0sdGUpfSxkZT1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9Y2UoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBpLHI9MCxvPWU/ZS5sZW5ndGg6MDtyPG87KytyKWlmKChpPWVbcl0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBsZSh0LGkpO3JldHVybiBudWxsfSxwZT1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWNlKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAsaT1lP2UubGVuZ3RoOjAscj1uZXcgQXJyYXkoaSk7bjxpOysrbilyW25dPWxlKHQsZVtuXSk7cmV0dXJuIHJ9O2Z1bmN0aW9uIG1lKCl7WXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHllPWZ1bmN0aW9uKCl7WXQucHJldmVudERlZmF1bHQoKSxZdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sdmU9ZnVuY3Rpb24odCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1yZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLHllLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLHllLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX07ZnVuY3Rpb24gZ2UodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPXJlKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKGkub24oImNsaWNrLmRyYWciLHllLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBuP2kub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfXZhciBiZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIF9lKHQsZSxuLGkscixvLGEscyx1LGMpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPWUsdGhpcy5zdWJqZWN0PW4sdGhpcy5pZGVudGlmaWVyPWksdGhpcy5hY3RpdmU9cix0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT11LHRoaXMuXz1jfWZ1bmN0aW9uIHdlKCl7cmV0dXJuIVl0LmJ1dHRvbn1mdW5jdGlvbiB4ZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gU2UodCl7cmV0dXJuIG51bGw9PXQ/e3g6WXQueCx5Oll0Lnl9OnR9ZnVuY3Rpb24gRWUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9X2UucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIENlPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscj13ZSxvPXhlLGE9U2Uscz1FZSx1PXt9LGM9aHQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxmPTA7ZnVuY3Rpb24gaCh0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLHkpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdikub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsZykuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXtpZighaSYmci5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBhPWIoIm1vdXNlIixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmZSx0aGlzLGFyZ3VtZW50cyk7YSYmKHJlKFl0LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCwhMCkub24oIm1vdXNldXAuZHJhZyIsbSwhMCksdmUoWXQudmlldyksbWUoKSxuPSExLHQ9WXQuY2xpZW50WCxlPVl0LmNsaWVudFksYSgic3RhcnQiKSl9fWZ1bmN0aW9uIHAoKXtpZih5ZSgpLCFuKXt2YXIgaT1ZdC5jbGllbnRYLXQscj1ZdC5jbGllbnRZLWU7bj1pKmkrcipyPmZ9dS5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIG0oKXtyZShZdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxnZShZdC52aWV3LG4pLHllKCksdS5tb3VzZSgiZW5kIil9ZnVuY3Rpb24geSgpe2lmKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49WXQuY2hhbmdlZFRvdWNoZXMsaT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPW4ubGVuZ3RoO2Zvcih0PTA7dDxhOysrdCkoZT1iKG5bdF0uaWRlbnRpZmllcixpLGRlLHRoaXMsYXJndW1lbnRzKSkmJihtZSgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPVl0LmNoYW5nZWRUb3VjaGVzLGk9bi5sZW5ndGg7Zm9yKHQ9MDt0PGk7Kyt0KShlPXVbblt0XS5pZGVudGlmaWVyXSkmJih5ZSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gZygpe3ZhciB0LGUsbj1ZdC5jaGFuZ2VkVG91Y2hlcyxyPW4ubGVuZ3RoO2ZvcihpJiZjbGVhclRpbWVvdXQoaSksaT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT1udWxsfSw1MDApLHQ9MDt0PHI7Kyt0KShlPXVbblt0XS5pZGVudGlmaWVyXSkmJihtZSgpLGUoImVuZCIpKX1mdW5jdGlvbiBiKHQsZSxuLGkscil7dmFyIG8scyxmLGQ9bihlLHQpLHA9Yy5jb3B5KCk7aWYoJHQobmV3IF9lKGgsImJlZm9yZXN0YXJ0IixvLHQsbCxkWzBdLGRbMV0sMCwwLHApLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShZdC5zdWJqZWN0PW89YS5hcHBseShpLHIpKSYmKHM9by54LWRbMF18fDAsZj1vLnktZFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gYShjKXt2YXIgbSx5PWQ7c3dpdGNoKGMpe2Nhc2Uic3RhcnQiOnVbdF09YSxtPWwrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIHVbdF0sLS1sO2Nhc2UiZHJhZyI6ZD1uKGUsdCksbT1sfSR0KG5ldyBfZShoLGMsbyx0LG0sZFswXStzLGRbMV0rZixkWzBdLXlbMF0sZFsxXS15WzFdLHApLHAuYXBwbHkscCxbYyxpLHJdKX19cmV0dXJuIGguZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmUoISF0KSxoKTpyfSxoLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJlKHQpLGgpOm99LGguc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJlKHQpLGgpOmF9LGgudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YmUoISF0KSxoKTpzfSxoLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Yy5vbi5hcHBseShjLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1jP2g6dH0saC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LGgpOk1hdGguc3FydChmKX0saH0sT2U9ZnVuY3Rpb24odCxlLG4pe3QucHJvdG90eXBlPWUucHJvdG90eXBlPW4sbi5jb25zdHJ1Y3Rvcj10fTtmdW5jdGlvbiBUZSh0LGUpe3ZhciBuPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiBlKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBrZSgpe312YXIgQWU9IlxccyooWystXT9cXGQrKVxccyoiLEllPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGplPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixNZT0vXiMoWzAtOWEtZl17M30pJC8sUGU9L14jKFswLTlhLWZdezZ9KSQvLE5lPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tBZSxBZSxBZV0rIlxcKSQiKSxSZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbamUsamUsamVdKyJcXCkkIiksRGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tBZSxBZSxBZSxJZV0rIlxcKSQiKSxMZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2plLGplLGplLEllXSsiXFwpJCIpLEZlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tJZSxqZSxqZV0rIlxcKSQiKSx6ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0llLGplLGplLEllXSsiXFwpJCIpLFZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIEJlKHQpe3ZhciBlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1NZS5leGVjKHQpKT9uZXcgV2UoKGU9cGFyc2VJbnQoZVsxXSwxNikpPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6KGU9UGUuZXhlYyh0KSk/VWUocGFyc2VJbnQoZVsxXSwxNikpOihlPU5lLmV4ZWModCkpP25ldyBXZShlWzFdLGVbMl0sZVszXSwxKTooZT1SZS5leGVjKHQpKT9uZXcgV2UoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9RGUuZXhlYyh0KSk/SGUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9TGUuZXhlYyh0KSk/SGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9RmUuZXhlYyh0KSk/UWUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT16ZS5leGVjKHQpKT9RZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlZlLmhhc093blByb3BlcnR5KHQpP1VlKFZlW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgV2UoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gbmV3IFdlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBIZSh0LGUsbixpKXtyZXR1cm4gaTw9MCYmKHQ9ZT1uPU5hTiksbmV3IFdlKHQsZSxuLGkpfWZ1bmN0aW9uIHFlKHQpe3JldHVybiB0IGluc3RhbmNlb2Yga2V8fCh0PUJlKHQpKSx0P25ldyBXZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgV2V9ZnVuY3Rpb24gR2UodCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3FlKHQpOm5ldyBXZSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gV2UodCxlLG4saSl7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFllKHQpe3JldHVybigodD1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHQpfHwwKSkpPDE2PyIwIjoiIikrdC50b1N0cmluZygxNil9ZnVuY3Rpb24gUWUodCxlLG4saSl7cmV0dXJuIGk8PTA/dD1lPW49TmFOOm48PTB8fG4+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBLZSh0LGUsbixpKX1mdW5jdGlvbiBaZSh0LGUsbixpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEtlKXJldHVybiBuZXcgS2UodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2Yga2V8fCh0PUJlKHQpKSwhdClyZXR1cm4gbmV3IEtlO2lmKHQgaW5zdGFuY2VvZiBLZSlyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxuPXQuZy8yNTUsaT10LmIvMjU1LHI9TWF0aC5taW4oZSxuLGkpLG89TWF0aC5tYXgoZSxuLGkpLGE9TmFOLHM9by1yLHU9KG8rcikvMjtyZXR1cm4gcz8oYT1lPT09bz8obi1pKS9zKzYqKG48aSk6bj09PW8/KGktZSkvcysyOihlLW4pL3MrNCxzLz11PC41P28rcjoyLW8tcixhKj02MCk6cz11PjAmJnU8MT8wOmEsbmV3IEtlKGEscyx1LHQub3BhY2l0eSl9KHQpOm5ldyBLZSh0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gS2UodCxlLG4saSl7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIFhlKHQsZSxuKXtyZXR1cm4gMjU1Kih0PDYwP2UrKG4tZSkqdC82MDp0PDE4MD9uOnQ8MjQwP2UrKG4tZSkqKDI0MC10KS82MDplKX1PZShrZSxCZSx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5oZXgoKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn19KSxPZShXZSxHZSxUZShrZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IFdlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBXZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpmdW5jdGlvbigpe3JldHVybiIjIitZZSh0aGlzLnIpK1llKHRoaXMuZykrWWUodGhpcy5iKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksT2UoS2UsWmUsVGUoa2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBLZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBLZSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxpPW4rKG48LjU/bjoxLW4pKmUscj0yKm4taTtyZXR1cm4gbmV3IFdlKFhlKHQ+PTI0MD90LTI0MDp0KzEyMCxyLGkpLFhlKHQscixpKSxYZSh0PDEyMD90KzI0MDp0LTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgJGU9TWF0aC5QSS8xODAsSmU9MTgwL01hdGguUEksdG49Ljk2NDIyLGVuPTEsbm49LjgyNTIxLHJuPTQvMjksb249Ni8yOSxhbj0zKm9uKm9uLHNuPW9uKm9uKm9uO2Z1bmN0aW9uIHVuKHQpe2lmKHQgaW5zdGFuY2VvZiBmbilyZXR1cm4gbmV3IGZuKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIGJuKXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgZm4odC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCokZTtyZXR1cm4gbmV3IGZuKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIFdlfHwodD1xZSh0KSk7dmFyIG4saSxyPW1uKHQuciksbz1tbih0LmcpLGE9bW4odC5iKSxzPWhuKCguMjIyNTA0NSpyKy43MTY4Nzg2Km8rLjA2MDYxNjkqYSkvZW4pO3JldHVybiByPT09byYmbz09PWE/bj1pPXM6KG49aG4oKC40MzYwNzQ3KnIrLjM4NTA2NDkqbysuMTQzMDgwNCphKS90biksaT1obigoLjAxMzkzMjIqcisuMDk3MTA0NSpvKy43MTQxNzMzKmEpL25uKSksbmV3IGZuKDExNipzLTE2LDUwMCoobi1zKSwyMDAqKHMtaSksdC5vcGFjaXR5KX1mdW5jdGlvbiBjbih0LGUpe3JldHVybiBuZXcgZm4odCwwLDAsbnVsbD09ZT8xOmUpfWZ1bmN0aW9uIGxuKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD91bih0KTpuZXcgZm4odCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIGZuKHQsZSxuLGkpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBobih0KXtyZXR1cm4gdD5zbj9NYXRoLnBvdyh0LDEvMyk6dC9hbitybn1mdW5jdGlvbiBkbih0KXtyZXR1cm4gdD5vbj90KnQqdDphbioodC1ybil9ZnVuY3Rpb24gcG4odCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBtbih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB5bih0KXtpZih0IGluc3RhbmNlb2YgYm4pcmV0dXJuIG5ldyBibih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBmbnx8KHQ9dW4odCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBibihOYU4sMCx0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkplO3JldHVybiBuZXcgYm4oZTwwP2UrMzYwOmUsTWF0aC5zcXJ0KHQuYSp0LmErdC5iKnQuYiksdC5sLHQub3BhY2l0eSl9ZnVuY3Rpb24gdm4odCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3luKHQpOm5ldyBibihuLGUsdCxudWxsPT1pPzE6aSl9ZnVuY3Rpb24gZ24odCxlLG4saSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3luKHQpOm5ldyBibih0LGUsbixudWxsPT1pPzE6aSl9ZnVuY3Rpb24gYm4odCxlLG4saSl7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K24sdGhpcy5vcGFjaXR5PStpfU9lKGZuLGxuLFRlKGtlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGZuKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZm4odGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IFdlKHBuKDMuMTMzODU2MSooZT10bipkbihlKSktMS42MTY4NjY3Kih0PWVuKmRuKHQpKS0uNDkwNjE0Nioobj1ubipkbihuKSkpLHBuKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbikscG4oLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxPZShibixnbixUZShrZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBibih0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGJuKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHVuKHRoaXMpLnJnYigpfX0pKTt2YXIgX249LS4yOTIyNyx3bj0tLjkwNjQ5LHhuPTEuOTcyOTQsU249eG4qd24sRW49MS43ODI3Nyp4bixDbj0xLjc4Mjc3Kl9uLSAtLjE0ODYxKnduO2Z1bmN0aW9uIE9uKHQsZSxuLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVG4pcmV0dXJuIG5ldyBUbih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBXZXx8KHQ9cWUodCkpO3ZhciBlPXQuZy8yNTUsbj10LmIvMjU1LGk9KENuKm4rU24qKHQuci8yNTUpLUVuKmUpLyhDbitTbi1Fbikscj1uLWksbz0oeG4qKGUtaSktX24qcikvd24sYT1NYXRoLnNxcnQobypvK3IqcikvKHhuKmkqKDEtaSkpLHM9YT9NYXRoLmF0YW4yKG8scikqSmUtMTIwOk5hTjtyZXR1cm4gbmV3IFRuKHM8MD9zKzM2MDpzLGEsaSx0Lm9wYWNpdHkpfSh0KTpuZXcgVG4odCxlLG4sbnVsbD09aT8xOmkpfWZ1bmN0aW9uIFRuKHQsZSxuLGkpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBrbih0LGUsbixpLHIpe3ZhciBvPXQqdCxhPW8qdDtyZXR1cm4oKDEtMyp0KzMqby1hKSplKyg0LTYqbyszKmEpKm4rKDErMyp0KzMqby0zKmEpKmkrYSpyKS82fU9lKFRuLE9uLFRlKGtlLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgVG4odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgVG4odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKiRlLGU9K3RoaXMubCxuPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxpPU1hdGguY29zKHQpLHI9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBXZSgyNTUqKGUrbiooLS4xNDg2MSppKzEuNzgyNzcqcikpLDI1NSooZStuKihfbippK3duKnIpKSwyNTUqKGUrbiooeG4qaSkpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBBbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSkscj10W2ldLG89dFtpKzFdO3JldHVybiBrbigobi1pL2UpKmUsaT4wP3RbaS0xXToyKnItbyxyLG8saTxlLTE/dFtpKzJdOjIqby1yKX19LEluPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSk7cmV0dXJuIGtuKChuLWkvZSkqZSx0WyhpK2UtMSklZV0sdFtpJWVdLHRbKGkrMSklZV0sdFsoaSsyKSVlXSl9fSxqbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIE1uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gUG4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/TW4odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmpuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gTm4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/TW4odCxuKTpqbihpc05hTih0KT9lOnQpfXZhciBSbj1mdW5jdGlvbiB0KGUpe3ZhciBuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT0odD0rdCk/Tm46ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi1lP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1NYXRoLnBvdyh0LG4pLGU9TWF0aC5wb3coZSxuKS10LG49MS9uLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyh0K2kqZSxuKX19KGUsbix0KTpqbihpc05hTihlKT9uOmUpfX0oZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBpPW4oKHQ9R2UodCkpLnIsKGU9R2UoZSkpLnIpLHI9bih0LmcsZS5nKSxvPW4odC5iLGUuYiksYT1Obih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQucj1pKGUpLHQuZz1yKGUpLHQuYj1vKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fXJldHVybiBpLmdhbW1hPXQsaX0oMSk7ZnVuY3Rpb24gRG4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLGkscj1lLmxlbmd0aCxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24paT1HZShlW25dKSxvW25dPWkucnx8MCxhW25dPWkuZ3x8MCxzW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLGE9dChhKSxzPXQocyksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1hKHQpLGkuYj1zKHQpLGkrIiJ9fX12YXIgTG4sRm4sem4sVm4sQm49RG4oQW4pLFVuPURuKEluKSxIbj1mdW5jdGlvbih0LGUpe3ZhciBuLGk9ZT9lLmxlbmd0aDowLHI9dD9NYXRoLm1pbihpLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxyOysrbilvW25dPUtuKHRbbl0sZVtuXSk7Zm9yKDtuPGk7KytuKWFbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPHI7KytuKWFbbl09b1tuXSh0KTtyZXR1cm4gYX19LHFuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24oaSl7cmV0dXJuIG4uc2V0VGltZSh0K2UqaSksbn19LEduPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtPXQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHQrZSpufX0sV249ZnVuY3Rpb24odCxlKXt2YXIgbixpPXt9LHI9e307Zm9yKG4gaW4gbnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KSxlKW4gaW4gdD9pW25dPUtuKHRbbl0sZVtuXSk6cltuXT1lW25dO3JldHVybiBmdW5jdGlvbih0KXtmb3IobiBpbiBpKXJbbl09aVtuXSh0KTtyZXR1cm4gcn19LFluPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRbj1uZXcgUmVnRXhwKFluLnNvdXJjZSwiZyIpLFpuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG89WW4ubGFzdEluZGV4PVFuLmxhc3RJbmRleD0wLGE9LTEscz1bXSx1PVtdO2Zvcih0Kz0iIixlKz0iIjsobj1Zbi5leGVjKHQpKSYmKGk9UW4uZXhlYyhlKSk7KShyPWkuaW5kZXgpPm8mJihyPWUuc2xpY2UobyxyKSxzW2FdP3NbYV0rPXI6c1srK2FdPXIpLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCx1LnB1c2goe2k6YSx4OkduKG4saSl9KSksbz1Rbi5sYXN0SW5kZXg7cmV0dXJuIG88ZS5sZW5ndGgmJihyPWUuc2xpY2Uobyksc1thXT9zW2FdKz1yOnNbKythXT1yKSxzLmxlbmd0aDwyP3VbMF0/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpKyIifX0odVswXS54KTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19KGUpOihlPXUubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixpPTA7aTxlOysraSlzWyhuPXVbaV0pLmldPW4ueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfSxLbj1mdW5jdGlvbih0LGUpe3ZhciBuLGk9dHlwZW9mIGU7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09PWk/am4oZSk6KCJudW1iZXIiPT09aT9Hbjoic3RyaW5nIj09PWk/KG49QmUoZSkpPyhlPW4sUm4pOlpuOmUgaW5zdGFuY2VvZiBCZT9SbjplIGluc3RhbmNlb2YgRGF0ZT9xbjpBcnJheS5pc0FycmF5KGUpP0huOiJmdW5jdGlvbiIhPXR5cGVvZiBlLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nfHxpc05hTihlKT9XbjpHbikodCxlKX0sWG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS09dD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqbil9fSwkbj0xODAvTWF0aC5QSSxKbj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSx0aT1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGEscyx1O3JldHVybihhPU1hdGguc3FydCh0KnQrZSplKSkmJih0Lz1hLGUvPWEpLCh1PXQqbitlKmkpJiYobi09dCp1LGktPWUqdSksKHM9TWF0aC5zcXJ0KG4qbitpKmkpKSYmKG4vPXMsaS89cyx1Lz1zKSx0Kmk8ZSpuJiYodD0tdCxlPS1lLHU9LXUsYT0tYSkse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIoZSx0KSokbixza2V3WDpNYXRoLmF0YW4odSkqJG4sc2NhbGVYOmEsc2NhbGVZOnN9fTtmdW5jdGlvbiBlaSh0LGUsbixpKXtmdW5jdGlvbiByKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24obyxhKXt2YXIgcz1bXSx1PVtdO3JldHVybiBvPXQobyksYT10KGEpLGZ1bmN0aW9uKHQsaSxyLG8sYSxzKXtpZih0IT09cnx8aSE9PW8pe3ZhciB1PWEucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxlLG51bGwsbik7cy5wdXNoKHtpOnUtNCx4OkduKHQscil9LHtpOnUtMix4OkduKGksbyl9KX1lbHNlKHJ8fG8pJiZhLnB1c2goInRyYW5zbGF0ZSgiK3IrZStvK24pfShvLnRyYW5zbGF0ZVgsby50cmFuc2xhdGVZLGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVkscyx1KSxmdW5jdGlvbih0LGUsbixvKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOm4ucHVzaChyKG4pKyJyb3RhdGUoIixudWxsLGkpLTIseDpHbih0LGUpfSkpOmUmJm4ucHVzaChyKG4pKyJyb3RhdGUoIitlK2kpfShvLnJvdGF0ZSxhLnJvdGF0ZSxzLHUpLGZ1bmN0aW9uKHQsZSxuLG8pe3QhPT1lP28ucHVzaCh7aTpuLnB1c2gocihuKSsic2tld1goIixudWxsLGkpLTIseDpHbih0LGUpfSk6ZSYmbi5wdXNoKHIobikrInNrZXdYKCIrZStpKX0oby5za2V3WCxhLnNrZXdYLHMsdSksZnVuY3Rpb24odCxlLG4saSxvLGEpe2lmKHQhPT1ufHxlIT09aSl7dmFyIHM9by5wdXNoKHIobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2EucHVzaCh7aTpzLTQseDpHbih0LG4pfSx7aTpzLTIseDpHbihlLGkpfSl9ZWxzZSAxPT09biYmMT09PWl8fG8ucHVzaChyKG8pKyJzY2FsZSgiK24rIiwiK2krIikiKX0oby5zY2FsZVgsby5zY2FsZVksYS5zY2FsZVgsYS5zY2FsZVkscyx1KSxvPWE9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0tMSxpPXUubGVuZ3RoOysrbjxpOylzWyhlPXVbbl0pLmldPWUueCh0KTtyZXR1cm4gcy5qb2luKCIiKX19fXZhciBuaT1laShmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0puOihMbnx8KExuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEZuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx6bj1kb2N1bWVudC5kZWZhdWx0VmlldyksTG4uc3R5bGUudHJhbnNmb3JtPXQsdD16bi5nZXRDb21wdXRlZFN0eWxlKEZuLmFwcGVuZENoaWxkKExuKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxGbi5yZW1vdmVDaGlsZChMbiksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksdGkoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksaWk9ZWkoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/Sm46KFZufHwoVm49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksVm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PVZuLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP3RpKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkpuKX0sIiwgIiwiKSIsIikiKSxyaT1NYXRoLlNRUlQyO2Z1bmN0aW9uIG9pKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfXZhciBhaT1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10WzBdLG89dFsxXSxhPXRbMl0scz1lWzJdLHU9ZVswXS1yLGM9ZVsxXS1vLGw9dSp1K2MqYztpZihsPDFlLTEyKWk9TWF0aC5sb2cocy9hKS9yaSxuPWZ1bmN0aW9uKHQpe3JldHVybltyK3QqdSxvK3QqYyxhKk1hdGguZXhwKHJpKnQqaSldfTtlbHNle3ZhciBmPU1hdGguc3FydChsKSxoPShzKnMtYSphKzQqbCkvKDIqYSoyKmYpLGQ9KHMqcy1hKmEtNCpsKS8oMipzKjIqZikscD1NYXRoLmxvZyhNYXRoLnNxcnQoaCpoKzEpLWgpLG09TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKTtpPShtLXApL3JpLG49ZnVuY3Rpb24odCl7dmFyIGUsbj10Kmkscz1vaShwKSxsPWEvKDIqZikqKHMqKGU9cmkqbitwLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KHApKTtyZXR1cm5bcitsKnUsbytsKmMsYSpzL29pKHJpKm4rcCldfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqaSxufTtmdW5jdGlvbiBzaSh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KChlPVplKGUpKS5oLChuPVplKG4pKS5oKSxyPU5uKGUucyxuLnMpLG89Tm4oZS5sLG4ubCksYT1ObihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1yKHQpLGUubD1vKHQpLGUub3BhY2l0eT1hKHQpLGUrIiJ9fX12YXIgdWk9c2koUG4pLGNpPXNpKE5uKTtmdW5jdGlvbiBsaSh0LGUpe3ZhciBuPU5uKCh0PWxuKHQpKS5sLChlPWxuKGUpKS5sKSxpPU5uKHQuYSxlLmEpLHI9Tm4odC5iLGUuYiksbz1Obih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1pKGUpLHQuYj1yKGUpLHQub3BhY2l0eT1vKGUpLHQrIiJ9fWZ1bmN0aW9uIGZpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXQoKGU9Z24oZSkpLmgsKG49Z24obikpLmgpLHI9Tm4oZS5jLG4uYyksbz1ObihlLmwsbi5sKSxhPU5uKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPWkodCksZS5jPXIodCksZS5sPW8odCksZS5vcGFjaXR5PWEodCksZSsiIn19fXZhciBoaT1maShQbiksZGk9ZmkoTm4pO2Z1bmN0aW9uIHBpKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIGkoZSxpKXt2YXIgcj10KChlPU9uKGUpKS5oLChpPU9uKGkpKS5oKSxvPU5uKGUucyxpLnMpLGE9Tm4oZS5sLGkubCkscz1ObihlLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1vKHQpLGUubD1hKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9ZSxpfSgxKX12YXIgbWk9cGkoUG4pLHlpPXBpKE5uKTtmdW5jdGlvbiB2aSh0LGUpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGgtMSxyPWVbMF0sbz1uZXcgQXJyYXkoaTwwPzA6aSk7bjxpOylvW25dPXQocixyPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oaS0xLE1hdGguZmxvb3IodCo9aSkpKTtyZXR1cm4gb1tlXSh0LWUpfX12YXIgZ2ksYmksX2k9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09dChpLyhlLTEpKTtyZXR1cm4gbn0sd2k9MCx4aT0wLFNpPTAsRWk9MWUzLENpPTAsT2k9MCxUaT0wLGtpPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEFpPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIElpKCl7cmV0dXJuIE9pfHwoQWkoamkpLE9pPWtpLm5vdygpK1RpKX1mdW5jdGlvbiBqaSgpe09pPTB9ZnVuY3Rpb24gTWkoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFBpKHQsZSxuKXt2YXIgaT1uZXcgTWk7cmV0dXJuIGkucmVzdGFydCh0LGUsbiksaX1mdW5jdGlvbiBOaSgpe0lpKCksKyt3aTtmb3IodmFyIHQsZT1naTtlOykodD1PaS1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0td2l9ZnVuY3Rpb24gUmkoKXtPaT0oQ2k9a2kubm93KCkpK1RpLHdpPXhpPTA7dHJ5e05pKCl9ZmluYWxseXt3aT0wLGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbj1naSxpPTEvMDtuOyluLl9jYWxsPyhpPm4uX3RpbWUmJihpPW4uX3RpbWUpLHQ9bixuPW4uX25leHQpOihlPW4uX25leHQsbi5fbmV4dD1udWxsLG49dD90Ll9uZXh0PWU6Z2k9ZSk7Ymk9dCxMaShpKX0oKSxPaT0wfX1mdW5jdGlvbiBEaSgpe3ZhciB0PWtpLm5vdygpLGU9dC1DaTtlPkVpJiYoVGktPWUsQ2k9dCl9ZnVuY3Rpb24gTGkodCl7d2l8fCh4aSYmKHhpPWNsZWFyVGltZW91dCh4aSkpLHQtT2k+MjQ/KHQ8MS8wJiYoeGk9c2V0VGltZW91dChSaSx0LWtpLm5vdygpLVRpKSksU2kmJihTaT1jbGVhckludGVydmFsKFNpKSkpOihTaXx8KENpPWtpLm5vdygpLFNpPXNldEludGVydmFsKERpLEVpKSksd2k9MSxBaShSaSkpKX1NaS5wcm90b3R5cGU9UGkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNaSxyZXN0YXJ0OmZ1bmN0aW9uKHQsZSxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/SWkoKTorbikrKG51bGw9PWU/MDorZSksdGhpcy5fbmV4dHx8Ymk9PT10aGlzfHwoYmk/YmkuX25leHQ9dGhpczpnaT10aGlzLGJpPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sTGkoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsTGkoKSl9fTt2YXIgRmk9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW5ldyBNaTtyZXR1cm4gaS5yZXN0YXJ0KGZ1bmN0aW9uKG4pe2kuc3RvcCgpLHQobitlKX0sZT1udWxsPT1lPzA6K2UsbiksaX0semk9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW5ldyBNaSxyPWU7cmV0dXJuIG51bGw9PWU/KGkucmVzdGFydCh0LGUsbiksaSk6KGU9K2Usbj1udWxsPT1uP0lpKCk6K24saS5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9cixpLnJlc3RhcnQobyxyKz1lLG4pLHQoYSl9LGUsbiksaSl9LFZpPWh0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLEJpPVtdLFVpPTAsSGk9MSxxaT0yLEdpPTMsV2k9NCxZaT01LFFpPTYsWmk9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhPXQuX190cmFuc2l0aW9uO2lmKGEpe2lmKG4gaW4gYSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9dC5fX3RyYW5zaXRpb247ZnVuY3Rpb24gbyh1KXt2YXIgYyxsLGYsaDtpZihuLnN0YXRlIT09SGkpcmV0dXJuIHMoKTtmb3IoYyBpbiByKWlmKChoPXJbY10pLm5hbWU9PT1uLm5hbWUpe2lmKGguc3RhdGU9PT1HaSlyZXR1cm4gRmkobyk7aC5zdGF0ZT09PVdpPyhoLnN0YXRlPVFpLGgudGltZXIuc3RvcCgpLGgub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18saC5pbmRleCxoLmdyb3VwKSxkZWxldGUgcltjXSk6K2M8ZSYmKGguc3RhdGU9UWksaC50aW1lci5zdG9wKCksZGVsZXRlIHJbY10pfWlmKEZpKGZ1bmN0aW9uKCl7bi5zdGF0ZT09PUdpJiYobi5zdGF0ZT1XaSxuLnRpbWVyLnJlc3RhcnQoYSxuLmRlbGF5LG4udGltZSksYSh1KSl9KSxuLnN0YXRlPXFpLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLG4uc3RhdGU9PT1xaSl7Zm9yKG4uc3RhdGU9R2ksaT1uZXcgQXJyYXkoZj1uLnR3ZWVuLmxlbmd0aCksYz0wLGw9LTE7YzxmOysrYykoaD1uLnR3ZWVuW2NdLnZhbHVlLmNhbGwodCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkpJiYoaVsrK2xdPWgpO2kubGVuZ3RoPWwrMX19ZnVuY3Rpb24gYShlKXtmb3IodmFyIHI9ZTxuLmR1cmF0aW9uP24uZWFzZS5jYWxsKG51bGwsZS9uLmR1cmF0aW9uKToobi50aW1lci5yZXN0YXJ0KHMpLG4uc3RhdGU9WWksMSksbz0tMSxhPWkubGVuZ3RoOysrbzxhOylpW29dLmNhbGwobnVsbCxyKTtuLnN0YXRlPT09WWkmJihuLm9uLmNhbGwoImVuZCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCkscygpKX1mdW5jdGlvbiBzKCl7Zm9yKHZhciBpIGluIG4uc3RhdGU9UWksbi50aW1lci5zdG9wKCksZGVsZXRlIHJbZV0scilyZXR1cm47ZGVsZXRlIHQuX190cmFuc2l0aW9ufXJbZV09bixuLnRpbWVyPVBpKGZ1bmN0aW9uKHQpe24uc3RhdGU9SGksbi50aW1lci5yZXN0YXJ0KG8sbi5kZWxheSxuLnRpbWUpLG4uZGVsYXk8PXQmJm8odC1uLmRlbGF5KX0sMCxuLnRpbWUpfSh0LG4se25hbWU6ZSxpbmRleDppLGdyb3VwOnIsb246VmksdHdlZW46QmksdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWl9KX07ZnVuY3Rpb24gS2kodCxlKXt2YXIgbj0kaSh0LGUpO2lmKG4uc3RhdGU+VWkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBYaSh0LGUpe3ZhciBuPSRpKHQsZSk7aWYobi5zdGF0ZT5xaSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHN0YXJ0ZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiAkaSh0LGUpe3ZhciBuPXQuX190cmFuc2l0aW9uO2lmKCFufHwhKG49bltlXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBufXZhciBKaT1mdW5jdGlvbih0LGUpe3ZhciBuLGkscixvPXQuX190cmFuc2l0aW9uLGE9ITA7aWYobyl7Zm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixvKShuPW9bcl0pLm5hbWU9PT1lPyhpPW4uc3RhdGU+cWkmJm4uc3RhdGU8WWksbi5zdGF0ZT1RaSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIG9bcl0pOmE9ITE7YSYmZGVsZXRlIHQuX190cmFuc2l0aW9ufX07ZnVuY3Rpb24gdHIodCxlLG4pe3ZhciBpPXQuX2lkO3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1YaSh0aGlzLGkpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24odCl7cmV0dXJuICRpKHQsaSkudmFsdWVbZV19fXZhciBlcj1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybigibnVtYmVyIj09dHlwZW9mIGU/R246ZSBpbnN0YW5jZW9mIEJlP1JuOihuPUJlKGUpKT8oZT1uLFJuKTpabikodCxlKX0sbnI9aWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLGlyPTA7ZnVuY3Rpb24gcnIodCxlLG4saSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lLHRoaXMuX25hbWU9bix0aGlzLl9pZD1pfWZ1bmN0aW9uIG9yKHQpe3JldHVybiBpZSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gYXIoKXtyZXR1cm4rK2lyfXZhciBzcj1pZS5wcm90b3R5cGU7ZnVuY3Rpb24gdXIodCl7cmV0dXJuK3R9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBscih0KXtyZXR1cm4gdCooMi10KX1mdW5jdGlvbiBmcih0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdDotLXQqKDItdCkrMSkvMn1mdW5jdGlvbiBocih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gZHIodCl7cmV0dXJuLS10KnQqdCsxfWZ1bmN0aW9uIHByKHQpe3JldHVybigodCo9Mik8PTE/dCp0KnQ6KHQtPTIpKnQqdCsyKS8yfXJyLnByb3RvdHlwZT1vci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJyLHNlbGVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWd0KHQpKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpZm9yKHZhciBzLHUsYz1pW2FdLGw9Yy5sZW5ndGgsZj1vW2FdPW5ldyBBcnJheShsKSxoPTA7aDxsOysraCkocz1jW2hdKSYmKHU9dC5jYWxsKHMscy5fX2RhdGFfXyxoLGMpKSYmKCJfX2RhdGFfXyJpbiBzJiYodS5fX2RhdGFfXz1zLl9fZGF0YV9fKSxmW2hdPXUsWmkoZltoXSxlLG4saCxmLCRpKHMsbikpKTtyZXR1cm4gbmV3IHJyKG8sdGhpcy5fcGFyZW50cyxlLG4pfSxzZWxlY3RBbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZSxuPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1fdCh0KSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10sYT1bXSxzPTA7czxyOysrcylmb3IodmFyIHUsYz1pW3NdLGw9Yy5sZW5ndGgsZj0wO2Y8bDsrK2YpaWYodT1jW2ZdKXtmb3IodmFyIGgsZD10LmNhbGwodSx1Ll9fZGF0YV9fLGYsYykscD0kaSh1LG4pLG09MCx5PWQubGVuZ3RoO208eTsrK20pKGg9ZFttXSkmJlppKGgsZSxuLG0sZCxwKTtvLnB1c2goZCksYS5wdXNoKHUpfXJldHVybiBuZXcgcnIobyxhLGUsbil9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcilmb3IodmFyIG8sYT1lW3JdLHM9YS5sZW5ndGgsdT1pW3JdPVtdLGM9MDtjPHM7KytjKShvPWFbY10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLGMsYSkmJnUucHVzaChvKTtyZXR1cm4gbmV3IHJyKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxpPWUubGVuZ3RoLHI9TWF0aC5taW4oaSxuLmxlbmd0aCksbz1uZXcgQXJyYXkoaSksYT0wO2E8cjsrK2EpZm9yKHZhciBzLHU9ZVthXSxjPW5bYV0sbD11Lmxlbmd0aCxmPW9bYV09bmV3IEFycmF5KGwpLGg9MDtoPGw7KytoKShzPXVbaF18fGNbaF0pJiYoZltoXT1zKTtmb3IoO2E8aTsrK2Epb1thXT1lW2FdO3JldHVybiBuZXcgcnIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG5yKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1hcigpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSx1PXMubGVuZ3RoLGM9MDtjPHU7KytjKWlmKGE9c1tjXSl7dmFyIGw9JGkoYSxlKTtaaShhLHQsbixjLHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IHJyKGksdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnNyLmNhbGwsbm9kZXM6c3Iubm9kZXMsbm9kZTpzci5ub2RlLHNpemU6c3Iuc2l6ZSxlbXB0eTpzci5lbXB0eSxlYWNoOnNyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyRpKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChmdW5jdGlvbih0LGUsbil7dmFyIGkscixvPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KGUpP0tpOlhpO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyx0KSxzPWEub247cyE9PWkmJihyPShpPXMpLmNvcHkoKSkub24oZSxuKSxhLm9uPXJ9fShuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bXQodCksaT0idHJhbnNmb3JtIj09PW4/aWk6ZXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPW4odGhpcyk7aWYobnVsbCE9cylyZXR1cm4oYT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCkpPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fTpmdW5jdGlvbih0LGUsbil7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9bih0aGlzKTtpZihudWxsIT1zKXJldHVybihhPXRoaXMuZ2V0QXR0cmlidXRlKHQpKT09PXM/bnVsbDphPT09aSYmcz09PXI/bzpvPWUoaT1hLHI9cyk7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fSkobixpLHRyKHRoaXMsImF0dHIuIit0LGUpKTpudWxsPT1lPyhuLmxvY2FsP2Z1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX0pKG4pOihuLmxvY2FsP2Z1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fTpmdW5jdGlvbih0LGUsbil7dmFyIGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PW4/bnVsbDpvPT09aT9yOnI9ZShpPW8sbil9fSkobixpLGUrIiIpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49ImF0dHIuIit0O2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjt2YXIgaT1tdCh0KTtyZXR1cm4gdGhpcy50d2VlbihuLChpLmxvY2FsP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMsaT1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsaShlKSl9fXJldHVybiBuLl92YWx1ZT1lLG59OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciBuPXRoaXMsaT1lLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24oZSl7bi5zZXRBdHRyaWJ1dGUodCxpKGUpKX19cmV0dXJuIG4uX3ZhbHVlPWUsbn0pKGksZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7dmFyIGk9InRyYW5zZm9ybSI9PSh0Kz0iIik/bmk6ZXI7cmV0dXJuIG51bGw9PWU/dGhpcy5zdHlsZVR3ZWVuKHQsZnVuY3Rpb24odCxlKXt2YXIgbixpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89TXQodGhpcyx0KSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLE10KHRoaXMsdCkpO3JldHVybiBvPT09YT9udWxsOm89PT1uJiZhPT09aT9yOnI9ZShuPW8saT1hKX19KHQsaSkpLm9uKCJlbmQuc3R5bGUuIit0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fSh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1NdCh0aGlzLHQpLHM9bih0aGlzKTtyZXR1cm4gbnVsbD09cyYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCkscz1NdCh0aGlzLHQpKSxhPT09cz9udWxsOmE9PT1pJiZzPT09cj9vOm89ZShpPWEscj1zKX19KHQsaSx0cih0aGlzLCJzdHlsZS4iK3QsZSkpOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU10KHRoaXMsdCk7cmV0dXJuIG89PT1uP251bGw6bz09PWk/cjpyPWUoaT1vLG4pfX0odCxpLGUrIiIpLG4pfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09ZSlyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGZ1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiBpKCl7dmFyIGk9dGhpcyxyPWUuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihlKXtpLnN0eWxlLnNldFByb3BlcnR5KHQscihlKSxuKX19cmV0dXJuIGkuX3ZhbHVlPWUsaX0odCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0odHIodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsKHQ9dGhpcy5faWQsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBuIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtuIT09dClyZXR1cm47ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX0pKTt2YXIgdH0sdHdlZW46ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtpZih0Kz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaSxyPSRpKHRoaXMubm9kZSgpLG4pLnR3ZWVuLG89MCxhPXIubGVuZ3RoO288YTsrK28paWYoKGk9cltvXSkubmFtZT09PXQpcmV0dXJuIGkudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09ZT9mdW5jdGlvbih0LGUpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9WGkodGhpcyx0KSxvPXIudHdlZW47aWYobyE9PW4pZm9yKHZhciBhPTAscz0oaT1uPW8pLmxlbmd0aDthPHM7KythKWlmKGlbYV0ubmFtZT09PWUpeyhpPWkuc2xpY2UoKSkuc3BsaWNlKGEsMSk7YnJlYWt9ci50d2Vlbj1pfX06ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVhpKHRoaXMsdCksYT1vLnR3ZWVuO2lmKGEhPT1pKXtyPShpPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOmUsdmFsdWU6bn0sdT0wLGM9ci5sZW5ndGg7dTxjOysrdSlpZihyW3VdLm5hbWU9PT1lKXtyW3VdPXM7YnJlYWt9dT09PWMmJnIucHVzaChzKX1vLnR3ZWVuPXJ9fSkobix0LGUpKX0sZGVsYXk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe0tpKHRoaXMsdCkuZGVsYXk9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe0tpKHRoaXMsdCkuZGVsYXk9ZX19KShlLHQpKTokaSh0aGlzLm5vZGUoKSxlKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbigpe1hpKHRoaXMsdCkuZHVyYXRpb249K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT0rZSxmdW5jdGlvbigpe1hpKHRoaXMsdCkuZHVyYXRpb249ZX19KShlLHQpKTokaSh0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZnVuY3Rpb24odCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7WGkodGhpcyx0KS5lYXNlPWV9fShlLHQpKTokaSh0aGlzLm5vZGUoKSxlKS5lYXNlfX07dmFyIG1yPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMykseXI9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksdnI9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksZ3I9TWF0aC5QSSxicj1nci8yO2Z1bmN0aW9uIF9yKHQpe3JldHVybiAxLU1hdGguY29zKHQqYnIpfWZ1bmN0aW9uIHdyKHQpe3JldHVybiBNYXRoLnNpbih0KmJyKX1mdW5jdGlvbiB4cih0KXtyZXR1cm4oMS1NYXRoLmNvcyhncip0KSkvMn1mdW5jdGlvbiBTcih0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCp0LTEwKX1mdW5jdGlvbiBFcih0KXtyZXR1cm4gMS1NYXRoLnBvdygyLC0xMCp0KX1mdW5jdGlvbiBDcih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KDIsMTAqdC0xMCk6Mi1NYXRoLnBvdygyLDEwLTEwKnQpKS8yfWZ1bmN0aW9uIE9yKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gVHIodCl7cmV0dXJuIE1hdGguc3FydCgxLSAtLXQqdCl9ZnVuY3Rpb24ga3IodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLU1hdGguc3FydCgxLXQqdCk6TWF0aC5zcXJ0KDEtKHQtPTIpKnQpKzEpLzJ9dmFyIEFyPTQvMTEsSXI9Ni8xMSxqcj04LzExLE1yPS43NSxQcj05LzExLE5yPTEwLzExLFJyPS45Mzc1LERyPTIxLzIyLExyPTYzLzY0LEZyPTEvQXIvQXI7ZnVuY3Rpb24genIodCl7cmV0dXJuIDEtVnIoMS10KX1mdW5jdGlvbiBWcih0KXtyZXR1cm4odD0rdCk8QXI/RnIqdCp0OnQ8anI/RnIqKHQtPUlyKSp0K01yOnQ8TnI/RnIqKHQtPVByKSp0K1JyOkZyKih0LT1EcikqdCtMcn1mdW5jdGlvbiBCcih0KXtyZXR1cm4oKHQqPTIpPD0xPzEtVnIoMS10KTpWcih0LTEpKzEpLzJ9dmFyIFVyPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCp0KigoZSsxKSp0LWUpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksSHI9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigoZSsxKSp0K2UpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxxcj1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksR3I9MipNYXRoLlBJLFdyPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPUdyKTtmdW5jdGlvbiByKHQpe3JldHVybiBlKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoaS10KS9uKX1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKkdyKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0oMSwuMyksWXI9ZnVuY3Rpb24gdChlLG4pe3ZhciBpPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89R3IpO2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtZSpNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K2kpL24pfXJldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qR3IpfSxyLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxyfSgxLC4zKSxRcj1mdW5jdGlvbiB0KGUsbil7dmFyIGk9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1Hcik7ZnVuY3Rpb24gcih0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/ZSpNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChpLXQpL24pOjItZSpNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigoaSt0KS9uKSkvMn1yZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKkdyKX0sci5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0scn0oMSwuMyksWnI9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnByfTtmdW5jdGlvbiBLcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBaci50aW1lPUlpKCksWnI7cmV0dXJuIG59aWUucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7SmkodGhpcyx0KX0pfSxpZS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxuO3QgaW5zdGFuY2VvZiBycj8oZT10Ll9pZCx0PXQuX25hbWUpOihlPWFyKCksKG49WnIpLnRpbWU9SWkoKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBhLHM9aVtvXSx1PXMubGVuZ3RoLGM9MDtjPHU7KytjKShhPXNbY10pJiZaaShhLHQsZSxjLHMsbnx8S3IoYSxlKSk7cmV0dXJuIG5ldyBycihpLHRoaXMuX3BhcmVudHMsdCxlKX07dmFyIFhyPVtudWxsXSwkcj1mdW5jdGlvbih0LGUpe3ZhciBuLGkscj10Ll9fdHJhbnNpdGlvbjtpZihyKWZvcihpIGluIGU9bnVsbD09ZT9udWxsOmUrIiIscilpZigobj1yW2ldKS5zdGF0ZT5IaSYmbi5uYW1lPT09ZSlyZXR1cm4gbmV3IHJyKFtbdF1dLFhyLGUsK2kpO3JldHVybiBudWxsfSxKcj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHRvPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc2VsZWN0aW9uPW59O2Z1bmN0aW9uIGVvKCl7WXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIG5vPWZ1bmN0aW9uKCl7WXQucHJldmVudERlZmF1bHQoKSxZdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0saW89e25hbWU6ImRyYWcifSxybz17bmFtZToic3BhY2UifSxvbz17bmFtZToiaGFuZGxlIn0sYW89e25hbWU6ImNlbnRlciJ9LHNvPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoeW8pLGlucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJltbdFswXSxlWzBdWzFdXSxbdFsxXSxlWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx1bz17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHlvKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0JiZbW2VbMF1bMF0sdFswXV0sW2VbMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sY289e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKHlvKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sbG89e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGZvPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxobz17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0scG89e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sbW89e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24geW8odCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdm8oKXtyZXR1cm4hWXQuYnV0dG9ufWZ1bmN0aW9uIGdvKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuW1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJvKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gX28odCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiB3byh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIHhvKCl7cmV0dXJuIENvKHNvKX1mdW5jdGlvbiBTbygpe3JldHVybiBDbyh1byl9dmFyIEVvPWZ1bmN0aW9uKCl7cmV0dXJuIENvKGNvKX07ZnVuY3Rpb24gQ28odCl7dmFyIGUsbj1nbyxpPXZvLHI9aHQoYSwic3RhcnQiLCJicnVzaCIsImVuZCIpLG89NjtmdW5jdGlvbiBhKGUpe3ZhciBuPWUucHJvcGVydHkoIl9fYnJ1c2giLGYpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFt5bygib3ZlcmxheSIpXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixsby5vdmVybGF5KS5tZXJnZShuKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Ym8odGhpcykuZXh0ZW50O3JlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLGUuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbeW8oInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsbG8uc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9ZS5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKHQuaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBsb1t0LnR5cGVdfSksZS5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsbCl9ZnVuY3Rpb24gcygpe3ZhciB0PXJlKHRoaXMpLGU9Ym8odGhpcykuc2VsZWN0aW9uO2U/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGVbMF1bMF0pLmF0dHIoInkiLGVbMF1bMV0pLmF0dHIoIndpZHRoIixlWzFdWzBdLWVbMF1bMF0pLmF0dHIoImhlaWdodCIsZVsxXVsxXS1lWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLW8vMjplWzBdWzBdLW8vMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9lWzFdWzFdLW8vMjplWzBdWzFdLW8vMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9lWzFdWzBdLWVbMF1bMF0rbzpvfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rbzpvfSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgYyh0LGUpfWZ1bmN0aW9uIGModCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGwoKXtpZihZdC50b3VjaGVzKXtpZihZdC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8WXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIG5vKCl9ZWxzZSBpZihlKXJldHVybjtpZihpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4scixvLGEsYyxsLGYsaCxkLHAsbSx5LHYsZz10aGlzLGI9WXQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsXz0ic2VsZWN0aW9uIj09PShZdC5tZXRhS2V5P2I9Im92ZXJsYXkiOmIpP2lvOll0LmFsdEtleT9hbzpvbyx3PXQ9PT11bz9udWxsOnBvW2JdLHg9dD09PXNvP251bGw6bW9bYl0sUz1ibyhnKSxFPVMuZXh0ZW50LEM9Uy5zZWxlY3Rpb24sTz1FWzBdWzBdLFQ9RVswXVsxXSxrPUVbMV1bMF0sQT1FWzFdWzFdLEk9dyYmeCYmWXQuc2hpZnRLZXksaj1mZShnKSxNPWosUD11KGcsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PWI/Uy5zZWxlY3Rpb249Qz1bW249dD09PXVvP086alswXSxvPXQ9PT1zbz9UOmpbMV1dLFtjPXQ9PT11bz9rOm4sZj10PT09c28/QTpvXV06KG49Q1swXVswXSxvPUNbMF1bMV0sYz1DWzFdWzBdLGY9Q1sxXVsxXSkscj1uLGE9byxsPWMsaD1mO3ZhciBOPXJlKGcpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLFI9Ti5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixsb1tiXSk7aWYoWXQudG91Y2hlcylOLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLEwsITApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIseiwhMCk7ZWxzZXt2YXIgRD1yZShZdC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZnVuY3Rpb24oKXtzd2l0Y2goWXQua2V5Q29kZSl7Y2FzZSAxNjpJPXcmJng7YnJlYWs7Y2FzZSAxODpfPT09b28mJih3JiYoYz1sLWQqdyxuPXIrZCp3KSx4JiYoZj1oLXAqeCxvPWErcCp4KSxfPWFvLEYoKSk7YnJlYWs7Y2FzZSAzMjpfIT09b28mJl8hPT1hb3x8KHc8MD9jPWwtZDp3PjAmJihuPXItZCkseDwwP2Y9aC1wOng+MCYmKG89YS1wKSxfPXJvLFIuYXR0cigiY3Vyc29yIixsby5zZWxlY3Rpb24pLEYoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59bm8oKX0sITApLm9uKCJrZXl1cC5icnVzaCIsZnVuY3Rpb24oKXtzd2l0Y2goWXQua2V5Q29kZSl7Y2FzZSAxNjpJJiYoeT12PUk9ITEsRigpKTticmVhaztjYXNlIDE4Ol89PT1hbyYmKHc8MD9jPWw6dz4wJiYobj1yKSx4PDA/Zj1oOng+MCYmKG89YSksXz1vbyxGKCkpO2JyZWFrO2Nhc2UgMzI6Xz09PXJvJiYoWXQuYWx0S2V5Pyh3JiYoYz1sLWQqdyxuPXIrZCp3KSx4JiYoZj1oLXAqeCxvPWErcCp4KSxfPWFvKToodzwwP2M9bDp3PjAmJihuPXIpLHg8MD9mPWg6eD4wJiYobz1hKSxfPW9vKSxSLmF0dHIoImN1cnNvciIsbG9bYl0pLEYoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59bm8oKX0sITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLEwsITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTt2ZShZdC52aWV3KX1lbygpLEppKGcpLHMuY2FsbChnKSxQLnN0YXJ0KCl9ZnVuY3Rpb24gTCgpe3ZhciB0PWZlKGcpOyFJfHx5fHx2fHwoTWF0aC5hYnModFswXS1NWzBdKT5NYXRoLmFicyh0WzFdLU1bMV0pP3Y9ITA6eT0hMCksTT10LG09ITAsbm8oKSxGKCl9ZnVuY3Rpb24gRigpe3ZhciB0O3N3aXRjaChkPU1bMF0talswXSxwPU1bMV0talsxXSxfKXtjYXNlIHJvOmNhc2UgaW86dyYmKGQ9TWF0aC5tYXgoTy1uLE1hdGgubWluKGstYyxkKSkscj1uK2QsbD1jK2QpLHgmJihwPU1hdGgubWF4KFQtbyxNYXRoLm1pbihBLWYscCkpLGE9bytwLGg9ZitwKTticmVhaztjYXNlIG9vOnc8MD8oZD1NYXRoLm1heChPLW4sTWF0aC5taW4oay1uLGQpKSxyPW4rZCxsPWMpOnc+MCYmKGQ9TWF0aC5tYXgoTy1jLE1hdGgubWluKGstYyxkKSkscj1uLGw9YytkKSx4PDA/KHA9TWF0aC5tYXgoVC1vLE1hdGgubWluKEEtbyxwKSksYT1vK3AsaD1mKTp4PjAmJihwPU1hdGgubWF4KFQtZixNYXRoLm1pbihBLWYscCkpLGE9byxoPWYrcCk7YnJlYWs7Y2FzZSBhbzp3JiYocj1NYXRoLm1heChPLE1hdGgubWluKGssbi1kKncpKSxsPU1hdGgubWF4KE8sTWF0aC5taW4oayxjK2QqdykpKSx4JiYoYT1NYXRoLm1heChULE1hdGgubWluKEEsby1wKngpKSxoPU1hdGgubWF4KFQsTWF0aC5taW4oQSxmK3AqeCkpKX1sPHImJih3Kj0tMSx0PW4sbj1jLGM9dCx0PXIscj1sLGw9dCxiIGluIGZvJiZSLmF0dHIoImN1cnNvciIsbG9bYj1mb1tiXV0pKSxoPGEmJih4Kj0tMSx0PW8sbz1mLGY9dCx0PWEsYT1oLGg9dCxiIGluIGhvJiZSLmF0dHIoImN1cnNvciIsbG9bYj1ob1tiXV0pKSxTLnNlbGVjdGlvbiYmKEM9Uy5zZWxlY3Rpb24pLHkmJihyPUNbMF1bMF0sbD1DWzFdWzBdKSx2JiYoYT1DWzBdWzFdLGg9Q1sxXVsxXSksQ1swXVswXT09PXImJkNbMF1bMV09PT1hJiZDWzFdWzBdPT09bCYmQ1sxXVsxXT09PWh8fChTLnNlbGVjdGlvbj1bW3IsYV0sW2wsaF1dLHMuY2FsbChnKSxQLmJydXNoKCkpfWZ1bmN0aW9uIHooKXtpZihlbygpLFl0LnRvdWNoZXMpe2lmKFl0LnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZT1udWxsfSw1MDApLE4ub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBnZShZdC52aWV3LG0pLEQub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO04uYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxSLmF0dHIoImN1cnNvciIsbG8ub3ZlcmxheSksUy5zZWxlY3Rpb24mJihDPVMuc2VsZWN0aW9uKSxfbyhDKSYmKFMuc2VsZWN0aW9uPW51bGwscy5jYWxsKGcpKSxQLmVuZCgpfX1mdW5jdGlvbiBmKCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmRpbT10LGV9cmV0dXJuIGEubW92ZT1mdW5jdGlvbihlLG4pe2Uuc2VsZWN0aW9uP2Uub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1lLl9fYnJ1c2gscj11KGUsYXJndW1lbnRzKSxvPWkuc2VsZWN0aW9uLGE9dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLGkuZXh0ZW50KSxjPUtuKG8sYSk7ZnVuY3Rpb24gbCh0KXtpLnNlbGVjdGlvbj0xPT09dCYmX28oYSk/bnVsbDpjKHQpLHMuY2FsbChlKSxyLmJydXNoKCl9cmV0dXJuIG8mJmE/bDpsKDEpfSk6ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLGk9dGhpcy5fX2JydXNoLHI9dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsZSk6bixpLmV4dGVudCksbz11KHRoaXMsZSkuYmVmb3Jlc3RhcnQoKTtKaSh0aGlzKSxpLnNlbGVjdGlvbj1udWxsPT1yfHxfbyhyKT9udWxsOnIscy5jYWxsKHRoaXMpLG8uc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9LGMucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZyYmKHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7JHQobmV3IHRvKGEsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLHIuYXBwbHkscixbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxhLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxhKTpufSxhLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkpyKCEhdCksYSk6aX0sYS5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGEpOm99LGEub249ZnVuY3Rpb24oKXt2YXIgdD1yLm9uLmFwcGx5KHIsYXJndW1lbnRzKTtyZXR1cm4gdD09PXI/YTp0fSxhfXZhciBPbz1NYXRoLmNvcyxUbz1NYXRoLnNpbixrbz1NYXRoLlBJLEFvPWtvLzIsSW89Miprbyxqbz1NYXRoLm1heCxNbz1mdW5jdGlvbigpe3ZhciB0PTAsZT1udWxsLG49bnVsbCxpPW51bGw7ZnVuY3Rpb24gcihyKXt2YXIgbyxhLHMsdSxjLGwsZj1yLmxlbmd0aCxoPVtdLGQ9eChmKSxwPVtdLG09W10seT1tLmdyb3Vwcz1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoZipmKTtmb3Iobz0wLGM9LTE7KytjPGY7KXtmb3IoYT0wLGw9LTE7KytsPGY7KWErPXJbY11bbF07aC5wdXNoKGEpLHAucHVzaCh4KGYpKSxvKz1hfWZvcihlJiZkLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShoW3RdLGhbbl0pfSksbiYmcC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC5zb3J0KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4ocltlXVt0XSxyW2VdW2ldKX0pfSksdT0obz1qbygwLElvLXQqZikvbyk/dDpJby9mLGE9MCxjPS0xOysrYzxmOyl7Zm9yKHM9YSxsPS0xOysrbDxmOyl7dmFyIGc9ZFtjXSxiPXBbZ11bbF0sXz1yW2ddW2JdLHc9YSxTPWErPV8qbzt2W2IqZitnXT17aW5kZXg6ZyxzdWJpbmRleDpiLHN0YXJ0QW5nbGU6dyxlbmRBbmdsZTpTLHZhbHVlOl99fXlbZ109e2luZGV4Omcsc3RhcnRBbmdsZTpzLGVuZEFuZ2xlOmEsdmFsdWU6aFtnXX0sYSs9dX1mb3IoYz0tMTsrK2M8ZjspZm9yKGw9Yy0xOysrbDxmOyl7dmFyIEU9dltsKmYrY10sQz12W2MqZitsXTsoRS52YWx1ZXx8Qy52YWx1ZSkmJm0ucHVzaChFLnZhbHVlPEMudmFsdWU/e3NvdXJjZTpDLHRhcmdldDpFfTp7c291cmNlOkUsdGFyZ2V0OkN9KX1yZXR1cm4gaT9tLnNvcnQoaSk6bX1yZXR1cm4gci5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1qbygwLGUpLHIpOnR9LHIuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHIpOmV9LHIuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHIpOm59LHIuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9pPW51bGw6KGU9dCxpPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfSkuXz10LHIpOmkmJmkuXzt2YXIgZX0scn0sUG89QXJyYXkucHJvdG90eXBlLnNsaWNlLE5vPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sUm89TWF0aC5QSSxEbz0yKlJvLExvPURvLTFlLTY7ZnVuY3Rpb24gRm8oKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB6bygpe3JldHVybiBuZXcgRm99Rm8ucHJvdG90eXBlPXpvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K2kpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLGkscixvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK2krIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPShuPStuKS0odD0rdCksdT0oaT0raSktKGU9K2UpLGM9by10LGw9YS1lLGY9YypjK2wqbDtpZigocj0rcik8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihmPjFlLTYpaWYoTWF0aC5hYnMobCpzLXUqYyk+MWUtNiYmcil7dmFyIGg9bi1vLGQ9aS1hLHA9cypzK3UqdSxtPWgqaCtkKmQseT1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQoZiksZz1yKk1hdGgudGFuKChSby1NYXRoLmFjb3MoKHArZi1tKS8oMip5KnYpKSkvMiksYj1nL3YsXz1nL3k7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYipjKSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMCwiKyArKGwqaD5jKmQpKyIsIisodGhpcy5feDE9dCtfKnMpKyIsIisodGhpcy5feTE9ZStfKnUpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSl9LGFyYzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dD0rdCxlPStlO3ZhciBhPShuPStuKSpNYXRoLmNvcyhpKSxzPW4qTWF0aC5zaW4oaSksdT10K2EsYz1lK3MsbD0xXm8sZj1vP2ktcjpyLWk7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIit1KyIsIitjOihNYXRoLmFicyh0aGlzLl94MS11KT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS1jKT4xZS02KSYmKHRoaXMuXys9IkwiK3UrIiwiK2MpLG4mJihmPDAmJihmPWYlRG8rRG8pLGY+TG8/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0LWEpKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT11KSsiLCIrKHRoaXMuX3kxPWMpOmY+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoZj49Um8pKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKHIpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihyKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixpKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyAraSsiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgVm89em87ZnVuY3Rpb24gQm8odCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIFVvKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBIbyh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gcW8odCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBHbyh0KXtyZXR1cm4gdC5lbmRBbmdsZX12YXIgV289ZnVuY3Rpb24oKXt2YXIgdD1CbyxlPVVvLG49SG8saT1xbyxyPUdvLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIGEscz1Qby5jYWxsKGFyZ3VtZW50cyksdT10LmFwcGx5KHRoaXMscyksYz1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGY9aS5hcHBseSh0aGlzLHMpLUFvLGg9ci5hcHBseSh0aGlzLHMpLUFvLGQ9bCpPbyhmKSxwPWwqVG8oZiksbT0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLHk9aS5hcHBseSh0aGlzLHMpLUFvLHY9ci5hcHBseSh0aGlzLHMpLUFvO2lmKG98fChvPWE9Vm8oKSksby5tb3ZlVG8oZCxwKSxvLmFyYygwLDAsbCxmLGgpLGY9PT15JiZoPT09dnx8KG8ucXVhZHJhdGljQ3VydmVUbygwLDAsbSpPbyh5KSxtKlRvKHkpKSxvLmFyYygwLDAsbSx5LHYpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksby5jbG9zZVBhdGgoKSxhKXJldHVybiBvPW51bGwsYSsiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpObygrdCksYSk6bn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Tm8oK3QpLGEpOml9LGEuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpObygrdCksYSk6cn0sYS5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGEpOmV9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1udWxsPT10P251bGw6dCxhKTpvfSxhfTtmdW5jdGlvbiBZbygpe31mdW5jdGlvbiBRbyh0LGUpe3ZhciBuPW5ldyBZbztpZih0IGluc3RhbmNlb2YgWW8pdC5lYWNoKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGkscj0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK3I8bzspbi5zZXQocix0W3JdKTtlbHNlIGZvcig7KytyPG87KW4uc2V0KGUoaT10W3JdLHIsdCksaSl9ZWxzZSBpZih0KWZvcih2YXIgYSBpbiB0KW4uc2V0KGEsdFthXSk7cmV0dXJuIG59WW8ucHJvdG90eXBlPVFvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WW8saGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIFpvPVFvLEtvPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGk9W10scj1bXTtmdW5jdGlvbiBvKG4scixhLHMpe2lmKHI+PWkubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciB1LGMsbCxmPS0xLGg9bi5sZW5ndGgsZD1pW3IrK10scD1abygpLG09YSgpOysrZjxoOykobD1wLmdldCh1PWQoYz1uW2ZdKSsiIikpP2wucHVzaChjKTpwLnNldCh1LFtjXSk7cmV0dXJuIHAuZWFjaChmdW5jdGlvbih0LGUpe3MobSxlLG8odCxyLGEscykpfSksbX1yZXR1cm4gbj17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCxYbywkbyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LDAsSm8sdGEpfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KG4sbyl7aWYoKytvPmkubGVuZ3RoKXJldHVybiBuO3ZhciBhLHM9cltvLTFdO3JldHVybiBudWxsIT1lJiZvPj1pLmxlbmd0aD9hPW4uZW50cmllcygpOihhPVtdLG4uZWFjaChmdW5jdGlvbihlLG4pe2EucHVzaCh7a2V5Om4sdmFsdWVzOnQoZSxvKX0pfSkpLG51bGwhPXM/YS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSk6YX0obyh0LDAsSm8sdGEpLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIGkucHVzaCh0KSxufSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gcltpLmxlbmd0aC0xXT10LG59LHNvcnRWYWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHQ9ZSxufSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxufX19O2Z1bmN0aW9uIFhvKCl7cmV0dXJue319ZnVuY3Rpb24gJG8odCxlLG4pe3RbZV09bn1mdW5jdGlvbiBKbygpe3JldHVybiBabygpfWZ1bmN0aW9uIHRhKHQsZSxuKXt0LnNldChlLG4pfWZ1bmN0aW9uIGVhKCl7fXZhciBuYT1aby5wcm90b3R5cGU7ZnVuY3Rpb24gaWEodCxlKXt2YXIgbj1uZXcgZWE7aWYodCBpbnN0YW5jZW9mIGVhKXQuZWFjaChmdW5jdGlvbih0KXtuLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIGk9LTEscj10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPHI7KW4uYWRkKHRbaV0pO2Vsc2UgZm9yKDsrK2k8cjspbi5hZGQoZSh0W2ldLGksdCkpfXJldHVybiBufWVhLnByb3RvdHlwZT1pYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVhLGhhczpuYS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpuYS5yZW1vdmUsY2xlYXI6bmEuY2xlYXIsdmFsdWVzOm5hLmtleXMsc2l6ZTpuYS5zaXplLGVtcHR5Om5hLmVtcHR5LGVhY2g6bmEuZWFjaH07dmFyIHJhPWlhLG9hPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZX0sYWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfSxzYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe2tleTpuLHZhbHVlOnRbbl19KTtyZXR1cm4gZX0sdWE9QXJyYXkucHJvdG90eXBlLnNsaWNlLGNhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0sbGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aCxpPXRbbi0xXVsxXSp0WzBdWzBdLXRbbi0xXVswXSp0WzBdWzFdOysrZTxuOylpKz10W2UtMV1bMV0qdFtlXVswXS10W2UtMV1bMF0qdFtlXVsxXTtyZXR1cm4gaX0sZmE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxoYT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixpPS0xLHI9ZS5sZW5ndGg7KytpPHI7KWlmKG49ZGEodCxlW2ldKSlyZXR1cm4gbjtyZXR1cm4gMH07ZnVuY3Rpb24gZGEodCxlKXtmb3IodmFyIG49ZVswXSxpPWVbMV0scj0tMSxvPTAsYT10Lmxlbmd0aCxzPWEtMTtvPGE7cz1vKyspe3ZhciB1PXRbb10sYz11WzBdLGw9dVsxXSxmPXRbc10saD1mWzBdLGQ9ZlsxXTtpZihwYSh1LGYsZSkpcmV0dXJuIDA7bD5pIT1kPmkmJm48KGgtYykqKGktbCkvKGQtbCkrYyYmKHI9LXIpfXJldHVybiByfWZ1bmN0aW9uIHBhKHQsZSxuKXt2YXIgaSxyLG8sYTtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPT0oblswXS10WzBdKSooZVsxXS10WzFdKX0odCxlLG4pJiYocj10W2k9Kyh0WzBdPT09ZVswXSldLGE9ZVtpXSxyPD0obz1uW2ldKSYmbzw9YXx8YTw9byYmbzw9cil9dmFyIG1hPWZ1bmN0aW9uKCl7fSx5YT1bW10sW1tbMSwxLjVdLFsuNSwxXV1dLFtbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsuNSwxXV1dLFtbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWy41LDFdXSxbWzEsLjVdLFsxLjUsMV1dXSxbW1sxLC41XSxbMSwxLjVdXV0sW1tbMSwuNV0sWy41LDFdXV0sW1tbLjUsMV0sWzEsLjVdXV0sW1tbMSwxLjVdLFsxLC41XV1dLFtbWy41LDFdLFsxLC41XV0sW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbMSwuNV1dXSxbW1suNSwxXSxbMS41LDFdXV0sW1tbMSwxLjVdLFsxLjUsMV1dXSxbW1suNSwxXSxbMSwxLjVdXV0sW11dLHZhPWZ1bmN0aW9uKCl7dmFyIHQ9MSxlPTEsbj1BLGk9cztmdW5jdGlvbiByKHQpe3ZhciBlPW4odCk7aWYoQXJyYXkuaXNBcnJheShlKSllPWUuc2xpY2UoKS5zb3J0KGNhKTtlbHNle3ZhciBpPXkodCkscj1pWzBdLGE9aVsxXTtlPWsocixhLGUpLGU9eChNYXRoLmZsb29yKHIvZSkqZSxNYXRoLmZsb29yKGEvZSkqZSxlKX1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8odCxlKX0pfWZ1bmN0aW9uIG8obixyKXt2YXIgbz1bXSxzPVtdO3JldHVybiBmdW5jdGlvbihuLGkscil7dmFyIG8scyx1LGMsbCxmPW5ldyBBcnJheSxoPW5ldyBBcnJheTtmb3Iobz1zPS0xLHlhWyh1PW5bMF0+PWkpPDwxXS5mb3JFYWNoKGQpOysrbzx0LTE7KXlhW3V8KHU9bltvKzFdPj1pKTw8MV0uZm9yRWFjaChkKTtmb3IoeWFbdTw8MF0uZm9yRWFjaChkKTsrK3M8ZS0xOyl7Zm9yKG89LTEseWFbKHU9bltzKnQrdF0+PWkpPDwxfChjPW5bcyp0XT49aSk8PDJdLmZvckVhY2goZCk7KytvPHQtMTspbD1jLHlhW3V8KHU9bltzKnQrdCtvKzFdPj1pKTw8MXwoYz1uW3MqdCtvKzFdPj1pKTw8MnxsPDwzXS5mb3JFYWNoKGQpO3lhW3V8Yzw8M10uZm9yRWFjaChkKX1mb3Iobz0tMSx5YVsoYz1uW3MqdF0+PWkpPDwyXS5mb3JFYWNoKGQpOysrbzx0LTE7KWw9Yyx5YVsoYz1uW3MqdCtvKzFdPj1pKTw8MnxsPDwzXS5mb3JFYWNoKGQpO2Z1bmN0aW9uIGQodCl7dmFyIGUsbixpPVt0WzBdWzBdK28sdFswXVsxXStzXSx1PVt0WzFdWzBdK28sdFsxXVsxXStzXSxjPWEoaSksbD1hKHUpOyhlPWhbY10pPyhuPWZbbF0pPyhkZWxldGUgaFtlLmVuZF0sZGVsZXRlIGZbbi5zdGFydF0sZT09PW4/KGUucmluZy5wdXNoKHUpLHIoZS5yaW5nKSk6ZltlLnN0YXJ0XT1oW24uZW5kXT17c3RhcnQ6ZS5zdGFydCxlbmQ6bi5lbmQscmluZzplLnJpbmcuY29uY2F0KG4ucmluZyl9KTooZGVsZXRlIGhbZS5lbmRdLGUucmluZy5wdXNoKHUpLGhbZS5lbmQ9bF09ZSk6KGU9ZltsXSk/KG49aFtjXSk/KGRlbGV0ZSBmW2Uuc3RhcnRdLGRlbGV0ZSBoW24uZW5kXSxlPT09bj8oZS5yaW5nLnB1c2godSkscihlLnJpbmcpKTpmW24uc3RhcnRdPWhbZS5lbmRdPXtzdGFydDpuLnN0YXJ0LGVuZDplLmVuZCxyaW5nOm4ucmluZy5jb25jYXQoZS5yaW5nKX0pOihkZWxldGUgZltlLnN0YXJ0XSxlLnJpbmcudW5zaGlmdChpKSxmW2Uuc3RhcnQ9Y109ZSk6ZltjXT1oW2xdPXtzdGFydDpjLGVuZDpsLHJpbmc6W2ksdV19fXlhW2M8PDNdLmZvckVhY2goZCl9KG4scixmdW5jdGlvbih0KXtpKHQsbixyKSxsYSh0KT4wP28ucHVzaChbdF0pOnMucHVzaCh0KX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLGk9by5sZW5ndGg7bjxpOysrbilpZigtMSE9PWhhKChlPW9bbl0pWzBdLHQpKXJldHVybiB2b2lkIGUucHVzaCh0KX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnIsY29vcmRpbmF0ZXM6b319ZnVuY3Rpb24gYShlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4saSxyKXtuLmZvckVhY2goZnVuY3Rpb24obil7dmFyIG8sYT1uWzBdLHM9blsxXSx1PTB8YSxjPTB8cyxsPWlbYyp0K3VdO2E+MCYmYTx0JiZ1PT09YSYmKG5bMF09YSsoci0obz1pW2MqdCt1LTFdKSkvKGwtbyktLjUpLHM+MCYmczxlJiZjPT09cyYmKG5bMV09cysoci0obz1pWyhjLTEpKnQrdV0pKS8obC1vKS0uNSl9KX1yZXR1cm4gci5jb250b3VyPW8sci5zaXplPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVyblt0LGVdO3ZhciBpPU1hdGguY2VpbChuWzBdKSxvPU1hdGguY2VpbChuWzFdKTtpZighKGk+MCYmbz4wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiB0PWksZT1vLHJ9LHIudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZmEodWEuY2FsbCh0KSk6ZmEodCkscik6bn0sci5zbW9vdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dD9zOm1hLHIpOmk9PT1zfSxyfTtmdW5jdGlvbiBnYSh0LGUsbil7Zm9yKHZhciBpPXQud2lkdGgscj10LmhlaWdodCxvPTErKG48PDEpLGE9MDthPHI7KythKWZvcih2YXIgcz0wLHU9MDtzPGkrbjsrK3MpczxpJiYodSs9dC5kYXRhW3MrYSppXSkscz49biYmKHM+PW8mJih1LT10LmRhdGFbcy1vK2EqaV0pLGUuZGF0YVtzLW4rYSppXT11L01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiBiYSh0LGUsbil7Zm9yKHZhciBpPXQud2lkdGgscj10LmhlaWdodCxvPTErKG48PDEpLGE9MDthPGk7KythKWZvcih2YXIgcz0wLHU9MDtzPHIrbjsrK3MpczxyJiYodSs9dC5kYXRhW2ErcyppXSkscz49biYmKHM+PW8mJih1LT10LmRhdGFbYSsocy1vKSppXSksZS5kYXRhW2ErKHMtbikqaV09dS9NYXRoLm1pbihzKzEsci0xK28tcyxvKSl9ZnVuY3Rpb24gX2EodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd2EodCl7cmV0dXJuIHRbMV19dmFyIHhhPWZ1bmN0aW9uKCl7dmFyIHQ9X2EsZT13YSxuPTk2MCxpPTUwMCxyPTIwLG89MixhPTMqcixzPW4rMiphPj5vLHU9aSsyKmE+Pm8sYz1mYSgyMCk7ZnVuY3Rpb24gbChuKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KHMqdSksbD1uZXcgRmxvYXQzMkFycmF5KHMqdSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG4scixjKXt2YXIgbD10KG4scixjKSthPj5vLGY9ZShuLHIsYykrYT4+bztsPj0wJiZsPHMmJmY+PTAmJmY8dSYmKytpW2wrZipzXX0pLGdhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpsfSxyPj5vKSxiYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmx9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6aX0scj4+byksZ2Eoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOmx9LHI+Pm8pLGJhKHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6bH0se3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTppfSxyPj5vKSxnYSh7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpzLGhlaWdodDp1LGRhdGE6bH0scj4+byksYmEoe3dpZHRoOnMsaGVpZ2h0OnUsZGF0YTpsfSx7d2lkdGg6cyxoZWlnaHQ6dSxkYXRhOml9LHI+Pm8pO3ZhciBoPWMoaSk7aWYoIUFycmF5LmlzQXJyYXkoaCkpe3ZhciBkPU4oaSk7aD1rKDAsZCxoKSwoaD14KDAsTWF0aC5mbG9vcihkL2gpKmgsaCkpLnNoaWZ0KCl9cmV0dXJuIHZhKCkudGhyZXNob2xkcyhoKS5zaXplKFtzLHVdKShpKS5tYXAoZil9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMipvKSx0LmNvb3JkaW5hdGVzLmZvckVhY2goaCksdH1mdW5jdGlvbiBoKHQpe3QuZm9yRWFjaChkKX1mdW5jdGlvbiBkKHQpe3QuZm9yRWFjaChwKX1mdW5jdGlvbiBwKHQpe3RbMF09dFswXSpNYXRoLnBvdygyLG8pLWEsdFsxXT10WzFdKk1hdGgucG93KDIsbyktYX1mdW5jdGlvbiBtKCl7cmV0dXJuIHM9bisyKihhPTMqcik+Pm8sdT1pKzIqYT4+byxsfXJldHVybiBsLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmYSgrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZmEoK3QpLGwpOmV9LGwuc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bbixpXTt2YXIgZT1NYXRoLmNlaWwodFswXSkscj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiBuPWUsaT1yLG0oKX0sbC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8bztpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLG0oKX0sbC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9mYSh1YS5jYWxsKHQpKTpmYSh0KSxsKTpjfSxsLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KHIqKHIrMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIHI9TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLG0oKX0sbH0sU2E9e30sRWE9e30sQ2E9MzQsT2E9MTAsVGE9MTM7ZnVuY3Rpb24ga2EodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KS5qb2luKCIsIikrIn0iKX12YXIgQWE9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cCgnWyInK3QrIlxuXHJdIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBpLHI9W10sbz10Lmxlbmd0aCxhPTAscz0wLHU9bzw9MCxjPSExO2Z1bmN0aW9uIGwoKXtpZih1KXJldHVybiBFYTtpZihjKXJldHVybiBjPSExLFNhO3ZhciBlLGkscj1hO2lmKHQuY2hhckNvZGVBdChyKT09PUNhKXtmb3IoO2ErKzxvJiZ0LmNoYXJDb2RlQXQoYSkhPT1DYXx8dC5jaGFyQ29kZUF0KCsrYSk9PT1DYTspO3JldHVybihlPWEpPj1vP3U9ITA6KGk9dC5jaGFyQ29kZUF0KGErKykpPT09T2E/Yz0hMDppPT09VGEmJihjPSEwLHQuY2hhckNvZGVBdChhKT09PU9hJiYrK2EpLHQuc2xpY2UocisxLGUtMSkucmVwbGFjZSgvIiIvZywnIicpfWZvcig7YTxvOyl7aWYoKGk9dC5jaGFyQ29kZUF0KGU9YSsrKSk9PT1PYSljPSEwO2Vsc2UgaWYoaT09PVRhKWM9ITAsdC5jaGFyQ29kZUF0KGEpPT09T2EmJisrYTtlbHNlIGlmKGkhPT1uKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKHIsZSl9cmV0dXJuIHU9ITAsdC5zbGljZShyLG8pfWZvcih0LmNoYXJDb2RlQXQoby0xKT09PU9hJiYtLW8sdC5jaGFyQ29kZUF0KG8tMSk9PT1UYSYmLS1vOyhpPWwoKSkhPT1FYTspe2Zvcih2YXIgZj1bXTtpIT09U2EmJmkhPT1FYTspZi5wdXNoKGkpLGk9bCgpO2UmJm51bGw9PShmPWUoZixzKyspKXx8ci5wdXNoKGYpfXJldHVybiByfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixyLG89aSh0LGZ1bmN0aW9uKHQsaSl7aWYobilyZXR1cm4gbih0LGktMSk7cj10LG49ZT9mdW5jdGlvbih0LGUpe3ZhciBuPWthKHQpO3JldHVybiBmdW5jdGlvbihpLHIpe3JldHVybiBlKG4oaSkscix0KX19KHQsZSk6a2EodCl9KTtyZXR1cm4gby5jb2x1bW5zPXJ8fFtdLG99LHBhcnNlUm93czppLGZvcm1hdDpmdW5jdGlvbihlLG4pe3JldHVybiBudWxsPT1uJiYobj1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGkgaW4gdClpIGluIGV8fG4ucHVzaChlW2ldPWkpfSksbn0oZSkpLFtuLm1hcChvKS5qb2luKHQpXS5jb25jYXQoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfSxmb3JtYXRSb3dzOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChyKS5qb2luKCJcbiIpfX19LElhPUFhKCIsIiksamE9SWEucGFyc2UsTWE9SWEucGFyc2VSb3dzLFBhPUlhLmZvcm1hdCxOYT1JYS5mb3JtYXRSb3dzLFJhPUFhKCJcdCIpLERhPVJhLnBhcnNlLExhPVJhLnBhcnNlUm93cyxGYT1SYS5mb3JtYXQsemE9UmEuZm9ybWF0Um93cztmdW5jdGlvbiBWYSh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfXZhciBCYT1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oVmEpfTtmdW5jdGlvbiBVYSh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX12YXIgSGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFVhKX07ZnVuY3Rpb24gcWEodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgR2E9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKHFhKX07ZnVuY3Rpb24gV2EodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49dm9pZCAwKSxHYShlLG4pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxpKX0pfX1mdW5jdGlvbiBZYSh0LGUsbixpKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj12b2lkIDApO3ZhciByPUFhKHQpO3JldHVybiBHYShlLG4pLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHIucGFyc2UodCxpKX0pfXZhciBRYT1XYShqYSksWmE9V2EoRGEpLEthPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7dmFyIHI9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiBlKXJbb109ZVtvXTtyLm9uZXJyb3I9aSxyLm9ubG9hZD1mdW5jdGlvbigpe24ocil9LHIuc3JjPXR9KX07ZnVuY3Rpb24gWGEodCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX12YXIgJGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKFhhKX07ZnVuY3Rpb24gSmEodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIEdhKGUsbikudGhlbihmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KX19dmFyIHRzPUphKCJhcHBsaWNhdGlvbi94bWwiKSxlcz1KYSgidGV4dC9odG1sIiksbnM9SmEoImltYWdlL3N2Zyt4bWwiKSxpcz1mdW5jdGlvbih0LGUpe3ZhciBuO2Z1bmN0aW9uIGkoKXt2YXIgaSxyLG89bi5sZW5ndGgsYT0wLHM9MDtmb3IoaT0wO2k8bzsrK2kpYSs9KHI9bltpXSkueCxzKz1yLnk7Zm9yKGE9YS9vLXQscz1zL28tZSxpPTA7aTxvOysraSkocj1uW2ldKS54LT1hLHIueS09c31yZXR1cm4gbnVsbD09dCYmKHQ9MCksbnVsbD09ZSYmKGU9MCksaS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dH0saS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxpKTplfSxpfSxycz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG9zPWZ1bmN0aW9uKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfTtmdW5jdGlvbiBhcyh0LGUsbixpKXtpZihpc05hTihlKXx8aXNOYU4obikpcmV0dXJuIHQ7dmFyIHIsbyxhLHMsdSxjLGwsZixoLGQ9dC5fcm9vdCxwPXtkYXRhOml9LG09dC5feDAseT10Ll95MCx2PXQuX3gxLGc9dC5feTE7aWYoIWQpcmV0dXJuIHQuX3Jvb3Q9cCx0O2Zvcig7ZC5sZW5ndGg7KWlmKChjPWU+PShvPShtK3YpLzIpKT9tPW86dj1vLChsPW4+PShhPSh5K2cpLzIpKT95PWE6Zz1hLHI9ZCwhKGQ9ZFtmPWw8PDF8Y10pKXJldHVybiByW2ZdPXAsdDtpZihzPSt0Ll94LmNhbGwobnVsbCxkLmRhdGEpLHU9K3QuX3kuY2FsbChudWxsLGQuZGF0YSksZT09PXMmJm49PT11KXJldHVybiBwLm5leHQ9ZCxyP3JbZl09cDp0Ll9yb290PXAsdDtkb3tyPXI/cltmXT1uZXcgQXJyYXkoNCk6dC5fcm9vdD1uZXcgQXJyYXkoNCksKGM9ZT49KG89KG0rdikvMikpP209bzp2PW8sKGw9bj49KGE9KHkrZykvMikpP3k9YTpnPWF9d2hpbGUoKGY9bDw8MXxjKT09KGg9KHU+PWEpPDwxfHM+PW8pKTtyZXR1cm4gcltoXT1kLHJbZl09cCx0fXZhciBzcz1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPW4sdGhpcy54MT1pLHRoaXMueTE9cn07ZnVuY3Rpb24gdXModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gY3ModCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbHModCxlLG4pe3ZhciBpPW5ldyBmcyhudWxsPT1lP3VzOmUsbnVsbD09bj9jczpuLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/aTppLmFkZEFsbCh0KX1mdW5jdGlvbiBmcyh0LGUsbixpLHIsbyl7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl94MD1uLHRoaXMuX3kwPWksdGhpcy5feDE9cix0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGhzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LG49ZTt0PXQubmV4dDspbj1uLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgZHM9bHMucHJvdG90eXBlPWZzLnByb3RvdHlwZTtmdW5jdGlvbiBwcyh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gbXModCl7cmV0dXJuIHQueSt0LnZ5fWRzLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLG49bmV3IGZzKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksaT10aGlzLl9yb290O2lmKCFpKXJldHVybiBuO2lmKCFpLmxlbmd0aClyZXR1cm4gbi5fcm9vdD1ocyhpKSxuO2Zvcih0PVt7c291cmNlOmksdGFyZ2V0Om4uX3Jvb3Q9bmV3IEFycmF5KDQpfV07aT10LnBvcCgpOylmb3IodmFyIHI9MDtyPDQ7KytyKShlPWkuc291cmNlW3JdKSYmKGUubGVuZ3RoP3QucHVzaCh7c291cmNlOmUsdGFyZ2V0OmkudGFyZ2V0W3JdPW5ldyBBcnJheSg0KX0pOmkudGFyZ2V0W3JdPWhzKGUpKTtyZXR1cm4gbn0sZHMuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlPSt0aGlzLl94LmNhbGwobnVsbCx0KSxuPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gYXModGhpcy5jb3ZlcihlLG4pLGUsbix0KX0sZHMuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG89dC5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksdT0xLzAsYz0xLzAsbD0tMS8wLGY9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsZT10W25dKSl8fGlzTmFOKHI9K3RoaXMuX3kuY2FsbChudWxsLGUpKXx8KGFbbl09aSxzW25dPXIsaTx1JiYodT1pKSxpPmwmJihsPWkpLHI8YyYmKGM9cikscj5mJiYoZj1yKSk7Zm9yKGw8dSYmKHU9dGhpcy5feDAsbD10aGlzLl94MSksZjxjJiYoYz10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKHUsYykuY292ZXIobCxmKSxuPTA7bjxvOysrbilhcyh0aGlzLGFbbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sZHMuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAsaT10aGlzLl95MCxyPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4obikpcj0obj1NYXRoLmZsb29yKHQpKSsxLG89KGk9TWF0aC5mbG9vcihlKSkrMTtlbHNle2lmKCEobj50fHx0PnJ8fGk+ZXx8ZT5vKSlyZXR1cm4gdGhpczt2YXIgYSxzLHU9ci1uLGM9dGhpcy5fcm9vdDtzd2l0Y2gocz0oZTwoaStvKS8yKTw8MXx0PChuK3IpLzIpe2Nhc2UgMDpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsodSo9MiksdD4ocj1uK3UpfHxlPm8pO2JyZWFrO2Nhc2UgMTpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKG89aSsodSo9MiksKG49ci11KT50fHxlPm8pO2JyZWFrO2Nhc2UgMjpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0odSo9MiksdD4ocj1uK3UpfHxpPmUpO2JyZWFrO2Nhc2UgMzpkb3soYT1uZXcgQXJyYXkoNCkpW3NdPWMsYz1hfXdoaWxlKGk9by0odSo9MiksKG49ci11KT50fHxpPmUpfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1jKX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1pLHRoaXMuX3gxPXIsdGhpcy5feTE9byx0aGlzfSxkcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGRzLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sZHMuZmluZD1mdW5jdGlvbih0LGUsbil7dmFyIGkscixvLGEscyx1LGMsbD10aGlzLl94MCxmPXRoaXMuX3kwLGg9dGhpcy5feDEsZD10aGlzLl95MSxwPVtdLG09dGhpcy5fcm9vdDtmb3IobSYmcC5wdXNoKG5ldyBzcyhtLGwsZixoLGQpKSxudWxsPT1uP249MS8wOihsPXQtbixmPWUtbixoPXQrbixkPWUrbixuKj1uKTt1PXAucG9wKCk7KWlmKCEoIShtPXUubm9kZSl8fChyPXUueDApPmh8fChvPXUueTApPmR8fChhPXUueDEpPGx8fChzPXUueTEpPGYpKWlmKG0ubGVuZ3RoKXt2YXIgeT0ocithKS8yLHY9KG8rcykvMjtwLnB1c2gobmV3IHNzKG1bM10seSx2LGEscyksbmV3IHNzKG1bMl0scix2LHkscyksbmV3IHNzKG1bMV0seSxvLGEsdiksbmV3IHNzKG1bMF0scixvLHksdikpLChjPShlPj12KTw8MXx0Pj15KSYmKHU9cFtwLmxlbmd0aC0xXSxwW3AubGVuZ3RoLTFdPXBbcC5sZW5ndGgtMS1jXSxwW3AubGVuZ3RoLTEtY109dSl9ZWxzZXt2YXIgZz10LSt0aGlzLl94LmNhbGwobnVsbCxtLmRhdGEpLGI9ZS0rdGhpcy5feS5jYWxsKG51bGwsbS5kYXRhKSxfPWcqZytiKmI7aWYoXzxuKXt2YXIgdz1NYXRoLnNxcnQobj1fKTtsPXQtdyxmPWUtdyxoPXQrdyxkPWUrdyxpPW0uZGF0YX19cmV0dXJuIGl9LGRzLnJlbW92ZT1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgZSxuLGkscixvLGEscyx1LGMsbCxmLGgsZD10aGlzLl9yb290LHA9dGhpcy5feDAsbT10aGlzLl95MCx5PXRoaXMuX3gxLHY9dGhpcy5feTE7aWYoIWQpcmV0dXJuIHRoaXM7aWYoZC5sZW5ndGgpZm9yKDs7KXtpZigoYz1vPj0ocz0ocCt5KS8yKSk/cD1zOnk9cywobD1hPj0odT0obSt2KS8yKSk/bT11OnY9dSxlPWQsIShkPWRbZj1sPDwxfGNdKSlyZXR1cm4gdGhpcztpZighZC5sZW5ndGgpYnJlYWs7KGVbZisxJjNdfHxlW2YrMiYzXXx8ZVtmKzMmM10pJiYobj1lLGg9Zil9Zm9yKDtkLmRhdGEhPT10OylpZihpPWQsIShkPWQubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKHI9ZC5uZXh0KSYmZGVsZXRlIGQubmV4dCxpPyhyP2kubmV4dD1yOmRlbGV0ZSBpLm5leHQsdGhpcyk6ZT8ocj9lW2ZdPXI6ZGVsZXRlIGVbZl0sKGQ9ZVswXXx8ZVsxXXx8ZVsyXXx8ZVszXSkmJmQ9PT0oZVszXXx8ZVsyXXx8ZVsxXXx8ZVswXSkmJiFkLmxlbmd0aCYmKG4/bltoXT1kOnRoaXMuX3Jvb3Q9ZCksdGhpcyk6KHRoaXMuX3Jvb3Q9cix0aGlzKX0sZHMucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sZHMucm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxkcy5zaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pLHR9LGRzLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG8sYSxzPVtdLHU9dGhpcy5fcm9vdDtmb3IodSYmcy5wdXNoKG5ldyBzcyh1LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdCh1PWUubm9kZSxpPWUueDAscj1lLnkwLG89ZS54MSxhPWUueTEpJiZ1Lmxlbmd0aCl7dmFyIGM9KGkrbykvMixsPShyK2EpLzI7KG49dVszXSkmJnMucHVzaChuZXcgc3MobixjLGwsbyxhKSksKG49dVsyXSkmJnMucHVzaChuZXcgc3MobixpLGwsYyxhKSksKG49dVsxXSkmJnMucHVzaChuZXcgc3MobixjLHIsbyxsKSksKG49dVswXSkmJnMucHVzaChuZXcgc3MobixpLHIsYyxsKSl9cmV0dXJuIHRoaXN9LGRzLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxpPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHNzKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgcj1lLm5vZGU7aWYoci5sZW5ndGgpe3ZhciBvLGE9ZS54MCxzPWUueTAsdT1lLngxLGM9ZS55MSxsPShhK3UpLzIsZj0ocytjKS8yOyhvPXJbMF0pJiZuLnB1c2gobmV3IHNzKG8sYSxzLGwsZikpLChvPXJbMV0pJiZuLnB1c2gobmV3IHNzKG8sbCxzLHUsZikpLChvPXJbMl0pJiZuLnB1c2gobmV3IHNzKG8sYSxmLGwsYykpLChvPXJbM10pJiZuLnB1c2gobmV3IHNzKG8sbCxmLHUsYykpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGRzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxkcy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIHlzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT0xLHI9MTtmdW5jdGlvbiBvKCl7Zm9yKHZhciB0LG8scyx1LGMsbCxmLGg9ZS5sZW5ndGgsZD0wO2Q8cjsrK2QpZm9yKG89bHMoZSxwcyxtcykudmlzaXRBZnRlcihhKSx0PTA7dDxoOysrdClmPShsPW5bKHM9ZVt0XSkuaW5kZXhdKSpsLHU9cy54K3MudngsYz1zLnkrcy52eSxvLnZpc2l0KHApO2Z1bmN0aW9uIHAodCxlLG4scixvKXt2YXIgYT10LmRhdGEsaD10LnIsZD1sK2g7aWYoIWEpcmV0dXJuIGU+dStkfHxyPHUtZHx8bj5jK2R8fG88Yy1kO2lmKGEuaW5kZXg+cy5pbmRleCl7dmFyIHA9dS1hLngtYS52eCxtPWMtYS55LWEudnkseT1wKnArbSptO3k8ZCpkJiYoMD09PXAmJih5Kz0ocD1vcygpKSpwKSwwPT09bSYmKHkrPShtPW9zKCkpKm0pLHk9KGQtKHk9TWF0aC5zcXJ0KHkpKSkveSppLHMudngrPShwKj15KSooZD0oaCo9aCkvKGYraCkpLHMudnkrPShtKj15KSpkLGEudngtPXAqKGQ9MS1kKSxhLnZ5LT1tKmQpfX19ZnVuY3Rpb24gYSh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgaSxyLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLGk9MDtpPG87KytpKW5bKHI9ZVtpXSkuaW5kZXhdPSt0KHIsaSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJzKG51bGw9PXQ/MTordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3Qsbyk6cn0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxvKTppfSxvLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnJzKCtlKSxzKCksbyk6dH0sb307ZnVuY3Rpb24gdnModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gZ3ModCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIG59dmFyIGJzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG8sYT12cyxzPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKHJbdC5zb3VyY2UuaW5kZXhdLHJbdC50YXJnZXQuaW5kZXhdKX0sdT1ycygzMCksYz0xO2Z1bmN0aW9uIGwoaSl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPGM7KytyKWZvcih2YXIgcyx1LGwsZixoLGQscCxtPTA7bTxhOysrbSlmPShsPShzPXRbbV0pLnRhcmdldCkueCtsLnZ4LSh1PXMuc291cmNlKS54LXUudnh8fG9zKCksaD1sLnkrbC52eS11LnktdS52eXx8b3MoKSxoKj1kPSgoZD1NYXRoLnNxcnQoZipmK2gqaCkpLW5bbV0pL2QqaSplW21dLGwudngtPShmKj1kKSoocD1vW21dKSxsLnZ5LT1oKnAsdS52eCs9ZioocD0xLXApLHUudnkrPWgqcH1mdW5jdGlvbiBmKCl7aWYoaSl7dmFyIHMsdSxjPWkubGVuZ3RoLGw9dC5sZW5ndGgsZj1abyhpLGEpO2ZvcihzPTAscj1uZXcgQXJyYXkoYyk7czxsOysrcykodT10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgdS5zb3VyY2UmJih1LnNvdXJjZT1ncyhmLHUuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiB1LnRhcmdldCYmKHUudGFyZ2V0PWdzKGYsdS50YXJnZXQpKSxyW3Uuc291cmNlLmluZGV4XT0oclt1LnNvdXJjZS5pbmRleF18fDApKzEsclt1LnRhcmdldC5pbmRleF09KHJbdS50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsbz1uZXcgQXJyYXkobCk7czxsOysrcylvW3NdPXJbKHU9dFtzXSkuc291cmNlLmluZGV4XS8oclt1LnNvdXJjZS5pbmRleF0rclt1LnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGwpLGgoKSxuPW5ldyBBcnJheShsKSxkKCl9fWZ1bmN0aW9uIGgoKXtpZihpKWZvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBkKCl7aWYoaSlmb3IodmFyIGU9MCxyPXQubGVuZ3RoO2U8cjsrK2UpbltlXT0rdSh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LGYoKX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGYoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbCk6YX0sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGwpOmN9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksaCgpLGwpOnN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksZCgpLGwpOnV9LGx9O2Z1bmN0aW9uIF9zKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gd3ModCl7cmV0dXJuIHQueX12YXIgeHM9MTAsU3M9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLEVzPWZ1bmN0aW9uKHQpe3ZhciBlLG49MSxpPS4wMDEscj0xLU1hdGgucG93KGksMS8zMDApLG89MCxhPS42LHM9Wm8oKSx1PVBpKGwpLGM9aHQoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBsKCl7ZigpLGMuY2FsbCgidGljayIsZSksbjxpJiYodS5zdG9wKCksYy5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBmKCl7dmFyIGUsaSx1PXQubGVuZ3RoO2ZvcihuKz0oby1uKSpyLHMuZWFjaChmdW5jdGlvbih0KXt0KG4pfSksZT0wO2U8dTsrK2UpbnVsbD09KGk9dFtlXSkuZng/aS54Kz1pLnZ4Kj1hOihpLng9aS5meCxpLnZ4PTApLG51bGw9PWkuZnk/aS55Kz1pLnZ5Kj1hOihpLnk9aS5meSxpLnZ5PTApfWZ1bmN0aW9uIGgoKXtmb3IodmFyIGUsbj0wLGk9dC5sZW5ndGg7bjxpOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgcj14cypNYXRoLnNxcnQobiksbz1uKlNzO2UueD1yKk1hdGguY29zKG8pLGUueT1yKk1hdGguc2luKG8pfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksaCgpLGU9e3RpY2s6ZixyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHUucmVzdGFydChsKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHUuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4saCgpLHMuZWFjaChkKSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKTppfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUpOityfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxlKTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtdCxlKToxLWF9LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLnJlbW92ZSh0KTpzLnNldCh0LGQobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixpKXt2YXIgcixvLGEscyx1LGM9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1pP2k9MS8wOmkqPWksYz0wO2M8bDsrK2MpKGE9KHI9ZS0ocz10W2NdKS54KSpyKyhvPW4tcy55KSpvKTxpJiYodT1zLGk9YSk7cmV0dXJuIHV9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbih0LG4pLGUpOmMub24odCl9fX0sQ3M9ZnVuY3Rpb24oKXt2YXIgdCxlLG4saSxyPXJzKC0zMCksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIHUoaSl7dmFyIHIsbz10Lmxlbmd0aCxhPWxzKHQsX3Msd3MpLnZpc2l0QWZ0ZXIobCk7Zm9yKG49aSxyPTA7cjxvOysrcillPXRbcl0sYS52aXNpdChmKX1mdW5jdGlvbiBjKCl7aWYodCl7dmFyIGUsbixvPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShvKSxlPTA7ZTxvOysrZSlpWyhuPXRbZV0pLmluZGV4XT0rcihuLGUsdCl9fWZ1bmN0aW9uIGwodCl7dmFyIGUsbixyLG8sYSxzPTAsdT0wO2lmKHQubGVuZ3RoKXtmb3Iocj1vPWE9MDthPDQ7KythKShlPXRbYV0pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLHUrPW4scis9biplLngsbys9biplLnkpO3QueD1yL3UsdC55PW8vdX1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGYodCxyLHUsYyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGw9dC54LWUueCxmPXQueS1lLnksaD1jLXIsZD1sKmwrZipmO2lmKGgqaC9zPGQpcmV0dXJuIGQ8YSYmKDA9PT1sJiYoZCs9KGw9b3MoKSkqbCksMD09PWYmJihkKz0oZj1vcygpKSpmKSxkPG8mJihkPU1hdGguc3FydChvKmQpKSxlLnZ4Kz1sKnQudmFsdWUqbi9kLGUudnkrPWYqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PWEpKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT1sJiYoZCs9KGw9b3MoKSkqbCksMD09PWYmJihkKz0oZj1vcygpKSpmKSxkPG8mJihkPU1hdGguc3FydChvKmQpKSk7ZG97dC5kYXRhIT09ZSYmKGUudngrPWwqKGg9aVt0LmRhdGEuaW5kZXhdKm4vZCksZS52eSs9ZipoKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiB1LmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLGMoKX0sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJzKCt0KSxjKCksdSk6cn0sdS5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsdSk6TWF0aC5zcXJ0KG8pfSx1LmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQqdCx1KTpNYXRoLnNxcnQoYSl9LHUudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LHUpOk1hdGguc3FydChzKX0sdX0sT3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHIsbyxhPXJzKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgYT0wLHM9aS5sZW5ndGg7YTxzOysrYSl7dmFyIHU9aVthXSxjPXUueC1lfHwxZS02LGw9dS55LW58fDFlLTYsZj1NYXRoLnNxcnQoYypjK2wqbCksaD0ob1thXS1mKSpyW2FdKnQvZjt1LnZ4Kz1jKmgsdS52eSs9bCpofX1mdW5jdGlvbiB1KCl7aWYoaSl7dmFyIGUsbj1pLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2Upb1tlXT0rdChpW2VdLGUsaSkscltlXT1pc05hTihvW2VdKT8wOithKGlbZV0sZSxpKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXJzKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCx1KCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksdSgpLHMpOmF9LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cnMoK2UpLHUoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LFRzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyPXJzKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgcixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKShyPWVbb10pLnZ4Kz0oaVtvXS1yLngpKm5bb10qdH1mdW5jdGlvbiBhKCl7aWYoZSl7dmFyIG8sYT1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkoYSksaT1uZXcgQXJyYXkoYSksbz0wO288YTsrK28pbltvXT1pc05hTihpW29dPSt0KGVbb10sbyxlKSk/MDorcihlW29dLG8sZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ycyhudWxsPT10PzA6K3QpKSxvLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJzKCt0KSxhKCksbyk6cn0sby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cnMoK2UpLGEoKSxvKTp0fSxvfSxrcz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscj1ycyguMSk7ZnVuY3Rpb24gbyh0KXtmb3IodmFyIHIsbz0wLGE9ZS5sZW5ndGg7bzxhOysrbykocj1lW29dKS52eSs9KGlbb10tci55KSpuW29dKnR9ZnVuY3Rpb24gYSgpe2lmKGUpe3ZhciBvLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLGk9bmV3IEFycmF5KGEpLG89MDtvPGE7KytvKW5bb109aXNOYU4oaVtvXT0rdChlW29dLG8sZSkpPzA6K3IoZVtvXSxvLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cnMobnVsbD09dD8wOit0KSksby5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpycygrdCksYSgpLG8pOnJ9LG8ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnJzKCtlKSxhKCksbyk6dH0sb30sQXM9ZnVuY3Rpb24odCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4saT10LnNsaWNlKDAsbik7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK3Quc2xpY2UobisxKV19LElzPWZ1bmN0aW9uKHQpe3JldHVybih0PUFzKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59LGpzPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBNcyh0KXtyZXR1cm4gbmV3IFBzKHQpfWZ1bmN0aW9uIFBzKHQpe2lmKCEoZT1qcy5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3RoaXMuZmlsbD1lWzFdfHwiICIsdGhpcy5hbGlnbj1lWzJdfHwiPiIsdGhpcy5zaWduPWVbM118fCItIix0aGlzLnN5bWJvbD1lWzRdfHwiIix0aGlzLnplcm89ISFlWzVdLHRoaXMud2lkdGg9ZVs2XSYmK2VbNl0sdGhpcy5jb21tYT0hIWVbN10sdGhpcy5wcmVjaXNpb249ZVs4XSYmK2VbOF0uc2xpY2UoMSksdGhpcy50cmltPSEhZVs5XSx0aGlzLnR5cGU9ZVsxMF18fCIifU1zLnByb3RvdHlwZT1Qcy5wcm90b3R5cGUsUHMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIE5zLFJzLERzLExzLEZzPWZ1bmN0aW9uKHQpe3Q6Zm9yKHZhciBlLG49dC5sZW5ndGgsaT0xLHI9LTE7aTxuOysraSlzd2l0Y2godFtpXSl7Y2FzZSIuIjpyPWU9aTticmVhaztjYXNlIjAiOjA9PT1yJiYocj1pKSxlPWk7YnJlYWs7ZGVmYXVsdDppZihyPjApe2lmKCErdFtpXSlicmVhayB0O3I9MH19cmV0dXJuIHI+MD90LnNsaWNlKDAscikrdC5zbGljZShlKzEpOnR9LHpzPWZ1bmN0aW9uKHQsZSl7dmFyIG49QXModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgaT1uWzBdLHI9blsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX0sVnM9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHpzKDEwMCp0LGUpfSxyOnpzLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1Bcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciBpPW5bMF0scj1uWzFdLG89ci0oTnM9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Ioci8zKSkpKSsxLGE9aS5sZW5ndGg7cmV0dXJuIG89PT1hP2k6bz5hP2krbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP2kuc2xpY2UoMCxvKSsiLiIraS5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStBcyh0LE1hdGgubWF4KDAsZStvLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxCcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sVXM9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sSHM9ZnVuY3Rpb24odCl7dmFyIGUsbixpPXQuZ3JvdXBpbmcmJnQudGhvdXNhbmRzPyhlPXQuZ3JvdXBpbmcsbj10LnRob3VzYW5kcyxmdW5jdGlvbih0LGkpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sdT0wO3I+MCYmcz4wJiYodStzKzE+aSYmKHM9TWF0aC5tYXgoMSxpLXUpKSxvLnB1c2godC5zdWJzdHJpbmcoci09cyxyK3MpKSwhKCh1Kz1zKzEpPmkpKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKG4pfSk6QnMscj10LmN1cnJlbmN5LG89dC5kZWNpbWFsLGE9dC5udW1lcmFscz9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KX19KHQubnVtZXJhbHMpOkJzLHM9dC5wZXJjZW50fHwiJSI7ZnVuY3Rpb24gdSh0KXt2YXIgZT0odD1Ncyh0KSkuZmlsbCxuPXQuYWxpZ24sdT10LnNpZ24sYz10LnN5bWJvbCxsPXQuemVybyxmPXQud2lkdGgsaD10LmNvbW1hLGQ9dC5wcmVjaXNpb24scD10LnRyaW0sbT10LnR5cGU7Im4iPT09bT8oaD0hMCxtPSJnIik6VnNbbV18fChudWxsPT1kJiYoZD0xMikscD0hMCxtPSJnIiksKGx8fCIwIj09PWUmJiI9Ij09PW4pJiYobD0hMCxlPSIwIixuPSI9Iik7dmFyIHk9IiQiPT09Yz9yWzBdOiIjIj09PWMmJi9bYm94WF0vLnRlc3QobSk/IjAiK20udG9Mb3dlckNhc2UoKToiIix2PSIkIj09PWM/clsxXTovWyVwXS8udGVzdChtKT9zOiIiLGc9VnNbbV0sYj0vW2RlZmdwcnMlXS8udGVzdChtKTtmdW5jdGlvbiBfKHQpe3ZhciByLHMsYyxfPXksdz12O2lmKCJjIj09PW0pdz1nKHQpK3csdD0iIjtlbHNle3ZhciB4PSh0PSt0KTwwO2lmKHQ9ZyhNYXRoLmFicyh0KSxkKSxwJiYodD1Gcyh0KSkseCYmMD09K3QmJih4PSExKSxfPSh4PyIoIj09PXU/dToiLSI6Ii0iPT09dXx8IigiPT09dT8iIjp1KStfLHc9KCJzIj09PW0/VXNbOCtOcy8zXToiIikrdysoeCYmIigiPT09dT8iKSI6IiIpLGIpZm9yKHI9LTEscz10Lmxlbmd0aDsrK3I8czspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KHIpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShyKzEpOnQuc2xpY2UocikpK3csdD10LnNsaWNlKDAscik7YnJlYWt9fWgmJiFsJiYodD1pKHQsMS8wKSk7dmFyIFM9Xy5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsRT1TPGY/bmV3IEFycmF5KGYtUysxKS5qb2luKGUpOiIiO3N3aXRjaChoJiZsJiYodD1pKEUrdCxFLmxlbmd0aD9mLXcubGVuZ3RoOjEvMCksRT0iIiksbil7Y2FzZSI8Ijp0PV8rdCt3K0U7YnJlYWs7Y2FzZSI9Ijp0PV8rRSt0K3c7YnJlYWs7Y2FzZSJeIjp0PUUuc2xpY2UoMCxTPUUubGVuZ3RoPj4xKStfK3QrdytFLnNsaWNlKFMpO2JyZWFrO2RlZmF1bHQ6dD1FK18rdCt3fXJldHVybiBhKHQpfXJldHVybiBkPW51bGw9PWQ/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZCkpLF8udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sX31yZXR1cm57Zm9ybWF0OnUsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49dSgoKHQ9TXModCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKElzKGUpLzMpKSkscj1NYXRoLnBvdygxMCwtaSksbz1Vc1s4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKHIqdCkrb319fX07ZnVuY3Rpb24gcXModCl7cmV0dXJuIFJzPUhzKHQpLERzPVJzLmZvcm1hdCxMcz1Scy5mb3JtYXRQcmVmaXgsUnN9cXMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7dmFyIEdzPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLC1JcyhNYXRoLmFicyh0KSkpfSxXcz1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKElzKGUpLzMpKSktSXMoTWF0aC5hYnModCkpKX0sWXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxJcyhlKS1Jcyh0KSkrMX0sUXM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpzfTtmdW5jdGlvbiBacygpe3RoaXMucmVzZXQoKX1acy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpzLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7WHMoS3MsdCx0aGlzLnQpLFhzKHRoaXMsS3Mucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPUtzLnQ6dGhpcy5zPUtzLnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIEtzPW5ldyBacztmdW5jdGlvbiBYcyh0LGUsbil7dmFyIGk9dC5zPWUrbixyPWktZTt0LnQ9ZS0oaS1yKSsobi1yKX12YXIgJHM9MWUtNixKcz1NYXRoLlBJLHR1PUpzLzIsZXU9SnMvNCxudT0yKkpzLGl1PTE4MC9KcyxydT1Kcy8xODAsb3U9TWF0aC5hYnMsYXU9TWF0aC5hdGFuLHN1PU1hdGguYXRhbjIsdXU9TWF0aC5jb3MsY3U9TWF0aC5jZWlsLGx1PU1hdGguZXhwLGZ1PShNYXRoLE1hdGgubG9nKSxodT1NYXRoLnBvdyxkdT1NYXRoLnNpbixwdT1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sbXU9TWF0aC5zcXJ0LHl1PU1hdGgudGFuO2Z1bmN0aW9uIHZ1KHQpe3JldHVybiB0PjE/MDp0PC0xP0pzOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBndSh0KXtyZXR1cm4gdD4xP3R1OnQ8LTE/LXR1Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBidSh0KXtyZXR1cm4odD1kdSh0LzIpKSp0fWZ1bmN0aW9uIF91KCl7fWZ1bmN0aW9uIHd1KHQsZSl7dCYmU3UuaGFzT3duUHJvcGVydHkodC50eXBlKSYmU3VbdC50eXBlXSh0LGUpfXZhciB4dT17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3d1KHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyl3dShuW2ldLmdlb21ldHJ5LGUpfX0sU3U9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7ZS5wb2ludCgodD10LmNvb3JkaW5hdGVzKVswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOyllLnBvaW50KCh0PW5baV0pWzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtFdSh0LmNvb3JkaW5hdGVzLGUsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspRXUobltpXSxlLDApfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Q3UodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylDdShuW2ldLGUpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspd3UobltpXSxlKX19O2Z1bmN0aW9uIEV1KHQsZSxuKXt2YXIgaSxyPS0xLG89dC5sZW5ndGgtbjtmb3IoZS5saW5lU3RhcnQoKTsrK3I8bzspZS5wb2ludCgoaT10W3JdKVswXSxpWzFdLGlbMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIEN1KHQsZSl7dmFyIG49LTEsaT10Lmxlbmd0aDtmb3IoZS5wb2x5Z29uU3RhcnQoKTsrK248aTspRXUodFtuXSxlLDEpO2UucG9seWdvbkVuZCgpfXZhciBPdSxUdSxrdSxBdSxJdSxqdT1mdW5jdGlvbih0LGUpe3QmJnh1Lmhhc093blByb3BlcnR5KHQudHlwZSk/eHVbdC50eXBlXSh0LGUpOnd1KHQsZSl9LE11PVFzKCksUHU9UXMoKSxOdT17cG9pbnQ6X3UsbGluZVN0YXJ0Ol91LGxpbmVFbmQ6X3UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TXUucmVzZXQoKSxOdS5saW5lU3RhcnQ9UnUsTnUubGluZUVuZD1EdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStNdTtQdS5hZGQodDwwP251K3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9X3V9LHNwaGVyZTpmdW5jdGlvbigpe1B1LmFkZChudSl9fTtmdW5jdGlvbiBSdSgpe051LnBvaW50PUx1fWZ1bmN0aW9uIER1KCl7RnUoT3UsVHUpfWZ1bmN0aW9uIEx1KHQsZSl7TnUucG9pbnQ9RnUsT3U9dCxUdT1lLGt1PXQqPXJ1LEF1PXV1KGU9KGUqPXJ1KS8yK2V1KSxJdT1kdShlKX1mdW5jdGlvbiBGdSh0LGUpe2U9KGUqPXJ1KS8yK2V1O3ZhciBuPSh0Kj1ydSkta3UsaT1uPj0wPzE6LTEscj1pKm4sbz11dShlKSxhPWR1KGUpLHM9SXUqYSx1PUF1Km8rcyp1dShyKSxjPXMqaSpkdShyKTtNdS5hZGQoc3UoYyx1KSksa3U9dCxBdT1vLEl1PWF9dmFyIHp1PWZ1bmN0aW9uKHQpe3JldHVybiBQdS5yZXNldCgpLGp1KHQsTnUpLDIqUHV9O2Z1bmN0aW9uIFZ1KHQpe3JldHVybltzdSh0WzFdLHRbMF0pLGd1KHRbMl0pXX1mdW5jdGlvbiBCdSh0KXt2YXIgZT10WzBdLG49dFsxXSxpPXV1KG4pO3JldHVybltpKnV1KGUpLGkqZHUoZSksZHUobildfWZ1bmN0aW9uIFV1KHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIEh1KHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiBxdSh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIEd1KHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiBXdSh0KXt2YXIgZT1tdSh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIFl1LFF1LFp1LEt1LFh1LCR1LEp1LHRjLGVjLG5jLGljPVFzKCkscmM9e3BvaW50Om9jLGxpbmVTdGFydDpzYyxsaW5lRW5kOnVjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3JjLnBvaW50PWNjLHJjLmxpbmVTdGFydD1sYyxyYy5saW5lRW5kPWZjLGljLnJlc2V0KCksTnUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtOdS5wb2x5Z29uRW5kKCkscmMucG9pbnQ9b2MscmMubGluZVN0YXJ0PXNjLHJjLmxpbmVFbmQ9dWMsTXU8MD8oWXU9LShadT0xODApLFF1PS0oS3U9OTApKTppYz4kcz9LdT05MDppYzwtJHMmJihRdT0tOTApLG5jWzBdPVl1LG5jWzFdPVp1fX07ZnVuY3Rpb24gb2ModCxlKXtlYy5wdXNoKG5jPVtZdT10LFp1PXRdKSxlPFF1JiYoUXU9ZSksZT5LdSYmKEt1PWUpfWZ1bmN0aW9uIGFjKHQsZSl7dmFyIG49QnUoW3QqcnUsZSpydV0pO2lmKHRjKXt2YXIgaT1IdSh0YyxuKSxyPUh1KFtpWzFdLC1pWzBdLDBdLGkpO1d1KHIpLHI9VnUocik7dmFyIG8sYT10LVh1LHM9YT4wPzE6LTEsdT1yWzBdKml1KnMsYz1vdShhKT4xODA7Y14ocypYdTx1JiZ1PHMqdCk/KG89clsxXSppdSk+S3UmJihLdT1vKTpjXihzKlh1PCh1PSh1KzM2MCklMzYwLTE4MCkmJnU8cyp0KT8obz0tclsxXSppdSk8UXUmJihRdT1vKTooZTxRdSYmKFF1PWUpLGU+S3UmJihLdT1lKSksYz90PFh1P2hjKFl1LHQpPmhjKFl1LFp1KSYmKFp1PXQpOmhjKHQsWnUpPmhjKFl1LFp1KSYmKFl1PXQpOlp1Pj1ZdT8odDxZdSYmKFl1PXQpLHQ+WnUmJihadT10KSk6dD5YdT9oYyhZdSx0KT5oYyhZdSxadSkmJihadT10KTpoYyh0LFp1KT5oYyhZdSxadSkmJihZdT10KX1lbHNlIGVjLnB1c2gobmM9W1l1PXQsWnU9dF0pO2U8UXUmJihRdT1lKSxlPkt1JiYoS3U9ZSksdGM9bixYdT10fWZ1bmN0aW9uIHNjKCl7cmMucG9pbnQ9YWN9ZnVuY3Rpb24gdWMoKXtuY1swXT1ZdSxuY1sxXT1adSxyYy5wb2ludD1vYyx0Yz1udWxsfWZ1bmN0aW9uIGNjKHQsZSl7aWYodGMpe3ZhciBuPXQtWHU7aWMuYWRkKG91KG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm4pfWVsc2UgJHU9dCxKdT1lO051LnBvaW50KHQsZSksYWModCxlKX1mdW5jdGlvbiBsYygpe051LmxpbmVTdGFydCgpfWZ1bmN0aW9uIGZjKCl7Y2MoJHUsSnUpLE51LmxpbmVFbmQoKSxvdShpYyk+JHMmJihZdT0tKFp1PTE4MCkpLG5jWzBdPVl1LG5jWzFdPVp1LHRjPW51bGx9ZnVuY3Rpb24gaGModCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGRjKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBwYyh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIG1jLHljLHZjLGdjLGJjLF9jLHdjLHhjLFNjLEVjLENjLE9jLFRjLGtjLEFjLEljLGpjPWZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLG8sYSxzO2lmKEt1PVp1PS0oWXU9UXU9MS8wKSxlYz1bXSxqdSh0LHJjKSxuPWVjLmxlbmd0aCl7Zm9yKGVjLnNvcnQoZGMpLGU9MSxvPVtpPWVjWzBdXTtlPG47KytlKXBjKGksKHI9ZWNbZV0pWzBdKXx8cGMoaSxyWzFdKT8oaGMoaVswXSxyWzFdKT5oYyhpWzBdLGlbMV0pJiYoaVsxXT1yWzFdKSxoYyhyWzBdLGlbMV0pPmhjKGlbMF0saVsxXSkmJihpWzBdPXJbMF0pKTpvLnB1c2goaT1yKTtmb3IoYT0tMS8wLGU9MCxpPW9bbj1vLmxlbmd0aC0xXTtlPD1uO2k9ciwrK2UpKHM9aGMoaVsxXSwocj1vW2VdKVswXSkpPmEmJihhPXMsWXU9clswXSxadT1pWzFdKX1yZXR1cm4gZWM9bmM9bnVsbCxZdT09PTEvMHx8UXU9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbWXUsUXVdLFtadSxLdV1dfSxNYz17c3BoZXJlOl91LHBvaW50OlBjLGxpbmVTdGFydDpSYyxsaW5lRW5kOkZjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe01jLmxpbmVTdGFydD16YyxNYy5saW5lRW5kPVZjfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7TWMubGluZVN0YXJ0PVJjLE1jLmxpbmVFbmQ9RmN9fTtmdW5jdGlvbiBQYyh0LGUpe3QqPXJ1O3ZhciBuPXV1KGUqPXJ1KTtOYyhuKnV1KHQpLG4qZHUodCksZHUoZSkpfWZ1bmN0aW9uIE5jKHQsZSxuKXt2Yys9KHQtdmMpLysrbWMsZ2MrPShlLWdjKS9tYyxiYys9KG4tYmMpL21jfWZ1bmN0aW9uIFJjKCl7TWMucG9pbnQ9RGN9ZnVuY3Rpb24gRGModCxlKXt0Kj1ydTt2YXIgbj11dShlKj1ydSk7a2M9bip1dSh0KSxBYz1uKmR1KHQpLEljPWR1KGUpLE1jLnBvaW50PUxjLE5jKGtjLEFjLEljKX1mdW5jdGlvbiBMYyh0LGUpe3QqPXJ1O3ZhciBuPXV1KGUqPXJ1KSxpPW4qdXUodCkscj1uKmR1KHQpLG89ZHUoZSksYT1zdShtdSgoYT1BYypvLUljKnIpKmErKGE9SWMqaS1rYypvKSphKyhhPWtjKnItQWMqaSkqYSksa2MqaStBYypyK0ljKm8pO3ljKz1hLF9jKz1hKihrYysoa2M9aSkpLHdjKz1hKihBYysoQWM9cikpLHhjKz1hKihJYysoSWM9bykpLE5jKGtjLEFjLEljKX1mdW5jdGlvbiBGYygpe01jLnBvaW50PVBjfWZ1bmN0aW9uIHpjKCl7TWMucG9pbnQ9QmN9ZnVuY3Rpb24gVmMoKXtVYyhPYyxUYyksTWMucG9pbnQ9UGN9ZnVuY3Rpb24gQmModCxlKXtPYz10LFRjPWUsdCo9cnUsZSo9cnUsTWMucG9pbnQ9VWM7dmFyIG49dXUoZSk7a2M9bip1dSh0KSxBYz1uKmR1KHQpLEljPWR1KGUpLE5jKGtjLEFjLEljKX1mdW5jdGlvbiBVYyh0LGUpe3QqPXJ1O3ZhciBuPXV1KGUqPXJ1KSxpPW4qdXUodCkscj1uKmR1KHQpLG89ZHUoZSksYT1BYypvLUljKnIscz1JYyppLWtjKm8sdT1rYypyLUFjKmksYz1tdShhKmErcypzK3UqdSksbD1ndShjKSxmPWMmJi1sL2M7U2MrPWYqYSxFYys9ZipzLENjKz1mKnUseWMrPWwsX2MrPWwqKGtjKyhrYz1pKSksd2MrPWwqKEFjKyhBYz1yKSkseGMrPWwqKEljKyhJYz1vKSksTmMoa2MsQWMsSWMpfXZhciBIYz1mdW5jdGlvbih0KXttYz15Yz12Yz1nYz1iYz1fYz13Yz14Yz1TYz1FYz1DYz0wLGp1KHQsTWMpO3ZhciBlPVNjLG49RWMsaT1DYyxyPWUqZStuKm4raSppO3JldHVybiByPDFlLTEyJiYoZT1fYyxuPXdjLGk9eGMseWM8JHMmJihlPXZjLG49Z2MsaT1iYyksKHI9ZSplK24qbitpKmkpPDFlLTEyKT9bTmFOLE5hTl06W3N1KG4sZSkqaXUsZ3UoaS9tdShyKSkqaXVdfSxxYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEdjPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLGkpe3JldHVybiBuPXQobixpKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuKG49ZS5pbnZlcnQobixpKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBXYyh0LGUpe3JldHVyblt0PkpzP3QtbnU6dDwtSnM/dCtudTp0LGVdfWZ1bmN0aW9uIFljKHQsZSxuKXtyZXR1cm4odCU9bnUpP2V8fG4/R2MoWmModCksS2MoZSxuKSk6WmModCk6ZXx8bj9LYyhlLG4pOldjfWZ1bmN0aW9uIFFjKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVyblsoZSs9dCk+SnM/ZS1udTplPC1Kcz9lK251OmUsbl19fWZ1bmN0aW9uIFpjKHQpe3ZhciBlPVFjKHQpO3JldHVybiBlLmludmVydD1RYygtdCksZX1mdW5jdGlvbiBLYyh0LGUpe3ZhciBuPXV1KHQpLGk9ZHUodCkscj11dShlKSxvPWR1KGUpO2Z1bmN0aW9uIGEodCxlKXt2YXIgYT11dShlKSxzPXV1KHQpKmEsdT1kdSh0KSphLGM9ZHUoZSksbD1jKm4rcyppO3JldHVybltzdSh1KnItbCpvLHMqbi1jKmkpLGd1KGwqcit1Km8pXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgYT11dShlKSxzPXV1KHQpKmEsdT1kdSh0KSphLGM9ZHUoZSksbD1jKnItdSpvO3JldHVybltzdSh1KnIrYypvLHMqbitsKmkpLGd1KGwqbi1zKmkpXX0sYX1XYy5pbnZlcnQ9V2M7dmFyIFhjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuKGU9dChlWzBdKnJ1LGVbMV0qcnUpKVswXSo9aXUsZVsxXSo9aXUsZX1yZXR1cm4gdD1ZYyh0WzBdKnJ1LHRbMV0qcnUsdC5sZW5ndGg+Mj90WzJdKnJ1OjApLGUuaW52ZXJ0PWZ1bmN0aW9uKGUpe3JldHVybihlPXQuaW52ZXJ0KGVbMF0qcnUsZVsxXSpydSkpWzBdKj1pdSxlWzFdKj1pdSxlfSxlfTtmdW5jdGlvbiAkYyh0LGUsbixpLHIsbyl7aWYobil7dmFyIGE9dXUoZSkscz1kdShlKSx1PWkqbjtudWxsPT1yPyhyPWUraSpudSxvPWUtdS8yKToocj1KYyhhLHIpLG89SmMoYSxvKSwoaT4wP3I8bzpyPm8pJiYocis9aSpudSkpO2Zvcih2YXIgYyxsPXI7aT4wP2w+bzpsPG87bC09dSljPVZ1KFthLC1zKnV1KGwpLC1zKmR1KGwpXSksdC5wb2ludChjWzBdLGNbMV0pfX1mdW5jdGlvbiBKYyh0LGUpeyhlPUJ1KGUpKVswXS09dCxXdShlKTt2YXIgbj12dSgtZVsxXSk7cmV0dXJuKCgtZVsyXTwwPy1uOm4pK251LSRzKSVudX12YXIgdGw9ZnVuY3Rpb24oKXt2YXIgdCxlLG49cWMoWzAsMF0pLGk9cWMoOTApLHI9cWMoNiksbz17cG9pbnQ6ZnVuY3Rpb24obixpKXt0LnB1c2gobj1lKG4saSkpLG5bMF0qPWl1LG5bMV0qPWl1fX07ZnVuY3Rpb24gYSgpe3ZhciBhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqcnUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpydTtyZXR1cm4gdD1bXSxlPVljKC1hWzBdKnJ1LC1hWzFdKnJ1LDApLmludmVydCwkYyhvLHMsdSwxKSxhPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbdF19LHQ9ZT1udWxsLGF9cmV0dXJuIGEuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cWMoWyt0WzBdLCt0WzFdXSksYSk6bn0sYS5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpxYygrdCksYSk6aX0sYS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpxYygrdCksYSk6cn0sYX0sZWw9ZnVuY3Rpb24oKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLG4pe3QucHVzaChbZSxuXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpfdSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBuPWU7cmV0dXJuIGU9W10sdD1udWxsLG59fX0sbmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gb3UodFswXS1lWzBdKTwkcyYmb3UodFsxXS1lWzFdKTwkc307ZnVuY3Rpb24gaWwodCxlLG4saSl7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPWksdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH12YXIgcmw9ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgbyxhLHM9W10sdT1bXTtpZih0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4saT10WzBdLGE9dFtlXTtpZihubChpLGEpKXtmb3Ioci5saW5lU3RhcnQoKSxvPTA7bzxlOysrbylyLnBvaW50KChpPXRbb10pWzBdLGlbMV0pO3IubGluZUVuZCgpfWVsc2Ugcy5wdXNoKG49bmV3IGlsKGksdCxudWxsLCEwKSksdS5wdXNoKG4ubz1uZXcgaWwoaSxudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgaWwoYSx0LG51bGwsITEpKSx1LnB1c2gobi5vPW5ldyBpbChhLG51bGwsbiwhMCkpfX0pLHMubGVuZ3RoKXtmb3IodS5zb3J0KGUpLG9sKHMpLG9sKHUpLG89MCxhPXUubGVuZ3RoO288YTsrK28pdVtvXS5lPW49IW47Zm9yKHZhciBjLGwsZj1zWzBdOzspe2Zvcih2YXIgaD1mLGQ9ITA7aC52OylpZigoaD1oLm4pPT09ZilyZXR1cm47Yz1oLnosci5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihkKWZvcihvPTAsYT1jLmxlbmd0aDtvPGE7KytvKXIucG9pbnQoKGw9Y1tvXSlbMF0sbFsxXSk7ZWxzZSBpKGgueCxoLm4ueCwxLHIpO2g9aC5ufWVsc2V7aWYoZClmb3Iobz0oYz1oLnAueikubGVuZ3RoLTE7bz49MDstLW8pci5wb2ludCgobD1jW29dKVswXSxsWzFdKTtlbHNlIGkoaC54LGgucC54LC0xLHIpO2g9aC5wfWM9KGg9aC5vKS56LGQ9IWR9d2hpbGUoIWgudik7ci5saW5lRW5kKCl9fX07ZnVuY3Rpb24gb2wodCl7aWYoZT10Lmxlbmd0aCl7Zm9yKHZhciBlLG4saT0wLHI9dFswXTsrK2k8ZTspci5uPW49dFtpXSxuLnA9cixyPW47ci5uPW49dFswXSxuLnA9cn19dmFyIGFsPVFzKCksc2w9ZnVuY3Rpb24odCxlKXt2YXIgbj1lWzBdLGk9ZVsxXSxyPWR1KGkpLG89W2R1KG4pLC11dShuKSwwXSxhPTAscz0wO2FsLnJlc2V0KCksMT09PXI/aT10dSskczotMT09PXImJihpPS10dS0kcyk7Zm9yKHZhciB1PTAsYz10Lmxlbmd0aDt1PGM7Kyt1KWlmKGY9KGw9dFt1XSkubGVuZ3RoKWZvcih2YXIgbCxmLGg9bFtmLTFdLGQ9aFswXSxwPWhbMV0vMitldSxtPWR1KHApLHk9dXUocCksdj0wO3Y8ZjsrK3YsZD1iLG09dyx5PXgsaD1nKXt2YXIgZz1sW3ZdLGI9Z1swXSxfPWdbMV0vMitldSx3PWR1KF8pLHg9dXUoXyksUz1iLWQsRT1TPj0wPzE6LTEsQz1FKlMsTz1DPkpzLFQ9bSp3O2lmKGFsLmFkZChzdShUKkUqZHUoQykseSp4K1QqdXUoQykpKSxhKz1PP1MrRSpudTpTLE9eZD49bl5iPj1uKXt2YXIgaz1IdShCdShoKSxCdShnKSk7V3Uoayk7dmFyIEE9SHUobyxrKTtXdShBKTt2YXIgST0oT15TPj0wPy0xOjEpKmd1KEFbMl0pOyhpPkl8fGk9PT1JJiYoa1swXXx8a1sxXSkpJiYocys9T15TPj0wPzE6LTEpfX1yZXR1cm4oYTwtJHN8fGE8JHMmJmFsPC0kcyleMSZzfSx1bD1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG8sYSxzLHU9ZShyKSxjPWVsKCksbD1lKGMpLGY9ITEsaD17cG9pbnQ6ZCxsaW5lU3RhcnQ6bSxsaW5lRW5kOnkscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7aC5wb2ludD12LGgubGluZVN0YXJ0PWcsaC5saW5lRW5kPWIsYT1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aC5wb2ludD1kLGgubGluZVN0YXJ0PW0saC5saW5lRW5kPXksYT1MKGEpO3ZhciB0PXNsKG8saSk7YS5sZW5ndGg/KGZ8fChyLnBvbHlnb25TdGFydCgpLGY9ITApLHJsKGEsbGwsdCxuLHIpKTp0JiYoZnx8KHIucG9seWdvblN0YXJ0KCksZj0hMCksci5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHIpLHIubGluZUVuZCgpKSxmJiYoci5wb2x5Z29uRW5kKCksZj0hMSksYT1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe3IucG9seWdvblN0YXJ0KCksci5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLHIpLHIubGluZUVuZCgpLHIucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gZChlLG4pe3QoZSxuKSYmci5wb2ludChlLG4pfWZ1bmN0aW9uIHAodCxlKXt1LnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2gucG9pbnQ9cCx1LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHkoKXtoLnBvaW50PWQsdS5saW5lRW5kKCl9ZnVuY3Rpb24gdih0LGUpe3MucHVzaChbdCxlXSksbC5wb2ludCh0LGUpfWZ1bmN0aW9uIGcoKXtsLmxpbmVTdGFydCgpLHM9W119ZnVuY3Rpb24gYigpe3Yoc1swXVswXSxzWzBdWzFdKSxsLmxpbmVFbmQoKTt2YXIgdCxlLG4saSx1PWwuY2xlYW4oKSxoPWMucmVzdWx0KCksZD1oLmxlbmd0aDtpZihzLnBvcCgpLG8ucHVzaChzKSxzPW51bGwsZClpZigxJnUpe2lmKChlPShuPWhbMF0pLmxlbmd0aC0xKT4wKXtmb3IoZnx8KHIucG9seWdvblN0YXJ0KCksZj0hMCksci5saW5lU3RhcnQoKSx0PTA7dDxlOysrdClyLnBvaW50KChpPW5bdF0pWzBdLGlbMV0pO3IubGluZUVuZCgpfX1lbHNlIGQ+MSYmMiZ1JiZoLnB1c2goaC5wb3AoKS5jb25jYXQoaC5zaGlmdCgpKSksYS5wdXNoKGguZmlsdGVyKGNsKSl9cmV0dXJuIGh9fTtmdW5jdGlvbiBjbCh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBsbCh0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS10dS0kczp0dS10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tdHUtJHM6dHUtZVsxXSl9dmFyIGZsPXVsKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLGk9TmFOLHI9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/SnM6LUpzLHU9b3Uoby1uKTtvdSh1LUpzKTwkcz8odC5wb2ludChuLGk9KGkrYSkvMj4wP3R1Oi10dSksdC5wb2ludChyLGkpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChzLGkpLHQucG9pbnQobyxpKSxlPTApOnIhPT1zJiZ1Pj1KcyYmKG91KG4tcik8JHMmJihuLT1yKiRzKSxvdShvLXMpPCRzJiYoby09cyokcyksaT1mdW5jdGlvbih0LGUsbixpKXt2YXIgcixvLGE9ZHUodC1uKTtyZXR1cm4gb3UoYSk+JHM/YXUoKGR1KGUpKihvPXV1KGkpKSpkdShuKS1kdShpKSoocj11dShlKSkqZHUodCkpLyhyKm8qYSkpOihlK2kpLzJ9KG4saSxvLGEpLHQucG9pbnQocixpKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxpKSxlPTApLHQucG9pbnQobj1vLGk9YSkscj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1pPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19LGZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByO2lmKG51bGw9PXQpaS5wb2ludCgtSnMscj1uKnR1KSxpLnBvaW50KDAsciksaS5wb2ludChKcyxyKSxpLnBvaW50KEpzLDApLGkucG9pbnQoSnMsLXIpLGkucG9pbnQoMCwtciksaS5wb2ludCgtSnMsLXIpLGkucG9pbnQoLUpzLDApLGkucG9pbnQoLUpzLHIpO2Vsc2UgaWYob3UodFswXS1lWzBdKT4kcyl7dmFyIG89dFswXTxlWzBdP0pzOi1KcztpLnBvaW50KC1vLHI9bipvLzIpLGkucG9pbnQoMCxyKSxpLnBvaW50KG8scil9ZWxzZSBpLnBvaW50KGVbMF0sZVsxXSl9LFstSnMsLXR1XSksaGw9ZnVuY3Rpb24odCl7dmFyIGU9dXUodCksbj02KnJ1LGk9ZT4wLHI9b3UoZSk+JHM7ZnVuY3Rpb24gbyh0LG4pe3JldHVybiB1dSh0KSp1dShuKT5lfWZ1bmN0aW9uIGEodCxuLGkpe3ZhciByPVsxLDAsMF0sbz1IdShCdSh0KSxCdShuKSksYT1VdShvLG8pLHM9b1swXSx1PWEtcypzO2lmKCF1KXJldHVybiFpJiZ0O3ZhciBjPWUqYS91LGw9LWUqcy91LGY9SHUocixvKSxoPUd1KHIsYyk7cXUoaCxHdShvLGwpKTt2YXIgZD1mLHA9VXUoaCxkKSxtPVV1KGQsZCkseT1wKnAtbSooVXUoaCxoKS0xKTtpZighKHk8MCkpe3ZhciB2PW11KHkpLGc9R3UoZCwoLXAtdikvbSk7aWYocXUoZyxoKSxnPVZ1KGcpLCFpKXJldHVybiBnO3ZhciBiLF89dFswXSx3PW5bMF0seD10WzFdLFM9blsxXTt3PF8mJihiPV8sXz13LHc9Yik7dmFyIEU9dy1fLEM9b3UoRS1Kcyk8JHM7aWYoIUMmJlM8eCYmKGI9eCx4PVMsUz1iKSxDfHxFPCRzP0M/eCtTPjBeZ1sxXTwob3UoZ1swXS1fKTwkcz94OlMpOng8PWdbMV0mJmdbMV08PVM6RT5Kc14oXzw9Z1swXSYmZ1swXTw9dykpe3ZhciBPPUd1KGQsKC1wK3YpL20pO3JldHVybiBxdShPLGgpLFtnLFZ1KE8pXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgcj1pP3Q6SnMtdCxvPTA7cmV0dXJuIGU8LXI/b3w9MTplPnImJihvfD0yKSxuPC1yP298PTQ6bj5yJiYob3w9OCksb31yZXR1cm4gdWwobyxmdW5jdGlvbih0KXt2YXIgZSxuLHUsYyxsO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPXU9ITEsbD0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBkLHA9W2YsaF0sbT1vKGYsaCkseT1pP20/MDpzKGYsaCk6bT9zKGYrKGY8MD9KczotSnMpLGgpOjA7aWYoIWUmJihjPXU9bSkmJnQubGluZVN0YXJ0KCksbSE9PXUmJighKGQ9YShlLHApKXx8bmwoZSxkKXx8bmwocCxkKSkmJihwWzBdKz0kcyxwWzFdKz0kcyxtPW8ocFswXSxwWzFdKSksbSE9PXUpbD0wLG0/KHQubGluZVN0YXJ0KCksZD1hKHAsZSksdC5wb2ludChkWzBdLGRbMV0pKTooZD1hKGUscCksdC5wb2ludChkWzBdLGRbMV0pLHQubGluZUVuZCgpKSxlPWQ7ZWxzZSBpZihyJiZlJiZpXm0pe3ZhciB2O3kmbnx8ISh2PWEocCxlLCEwKSl8fChsPTAsaT8odC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSksdC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh2WzFdWzBdLHZbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh2WzBdWzBdLHZbMF1bMV0pKSl9IW18fGUmJm5sKGUscCl8fHQucG9pbnQocFswXSxwWzFdKSxlPXAsdT1tLG49eX0sbGluZUVuZDpmdW5jdGlvbigpe3UmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gbHwoYyYmdSk8PDF9fX0sZnVuY3Rpb24oZSxpLHIsbyl7JGMobyx0LG4scixlLGkpfSxpP1swLC10XTpbLUpzLHQtSnNdKX0sZGw9ZnVuY3Rpb24odCxlLG4saSxyLG8pe3ZhciBhLHM9dFswXSx1PXRbMV0sYz0wLGw9MSxmPWVbMF0tcyxoPWVbMV0tdTtpZihhPW4tcyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGMpcmV0dXJuO2E8bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE+bClyZXR1cm47YT5jJiYoYz1hKX1pZihhPXItcyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmwpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihmPjApe2lmKGE8YylyZXR1cm47YTxsJiYobD1hKX1pZihhPWktdSxofHwhKGE+MCkpe2lmKGEvPWgsaDwwKXtpZihhPGMpcmV0dXJuO2E8bCYmKGw9YSl9ZWxzZSBpZihoPjApe2lmKGE+bClyZXR1cm47YT5jJiYoYz1hKX1pZihhPW8tdSxofHwhKGE8MCkpe2lmKGEvPWgsaDwwKXtpZihhPmwpcmV0dXJuO2E+YyYmKGM9YSl9ZWxzZSBpZihoPjApe2lmKGE8YylyZXR1cm47YTxsJiYobD1hKX1yZXR1cm4gYz4wJiYodFswXT1zK2MqZix0WzFdPXUrYypoKSxsPDEmJihlWzBdPXMrbCpmLGVbMV09dStsKmgpLCEwfX19fX0scGw9MWU5LG1sPS1wbDtmdW5jdGlvbiB5bCh0LGUsbixpKXtmdW5jdGlvbiByKHIsbyl7cmV0dXJuIHQ8PXImJnI8PW4mJmU8PW8mJm88PWl9ZnVuY3Rpb24gbyhyLG8scyxjKXt2YXIgbD0wLGY9MDtpZihudWxsPT1yfHwobD1hKHIscykpIT09KGY9YShvLHMpKXx8dShyLG8pPDBecz4wKWRve2MucG9pbnQoMD09PWx8fDM9PT1sP3Q6bixsPjE/aTplKX13aGlsZSgobD0obCtzKzQpJTQpIT09Zik7ZWxzZSBjLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gYShpLHIpe3JldHVybiBvdShpWzBdLXQpPCRzP3I+MD8wOjM6b3UoaVswXS1uKTwkcz9yPjA/MjoxOm91KGlbMV0tZSk8JHM/cj4wPzE6MDpyPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdSh0LngsZS54KX1mdW5jdGlvbiB1KHQsZSl7dmFyIG49YSh0LDEpLGk9YShlLDEpO3JldHVybiBuIT09aT9uLWk6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihhKXt2YXIgdSxjLGwsZixoLGQscCxtLHksdixnLGI9YSxfPWVsKCksdz17cG9pbnQ6eCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt3LnBvaW50PVMsYyYmYy5wdXNoKGw9W10pLHY9ITAseT0hMSxwPW09TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dSYmKFMoZixoKSxkJiZ5JiZfLnJlam9pbigpLHUucHVzaChfLnJlc3VsdCgpKSksdy5wb2ludD14LHkmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPV8sdT1bXSxjPVtdLGc9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49MCxyPWMubGVuZ3RoO248cjsrK24pZm9yKHZhciBvLGEscz1jW25dLHU9MSxsPXMubGVuZ3RoLGY9c1swXSxoPWZbMF0sZD1mWzFdO3U8bDsrK3Upbz1oLGE9ZCxoPShmPXNbdV0pWzBdLGQ9ZlsxXSxhPD1pP2Q+aSYmKGgtbykqKGktYSk+KGQtYSkqKHQtbykmJisrZTpkPD1pJiYoaC1vKSooaS1hKTwoZC1hKSoodC1vKSYmLS1lO3JldHVybiBlfSgpLG49ZyYmZSxyPSh1PUwodSkpLmxlbmd0aDsobnx8cikmJihhLnBvbHlnb25TdGFydCgpLG4mJihhLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLHImJnJsKHUscyxlLG8sYSksYS5wb2x5Z29uRW5kKCkpLGI9YSx1PWM9bD1udWxsfX07ZnVuY3Rpb24geCh0LGUpe3IodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIFMobyxhKXt2YXIgcz1yKG8sYSk7aWYoYyYmbC5wdXNoKFtvLGFdKSx2KWY9byxoPWEsZD1zLHY9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChvLGEpKTtlbHNlIGlmKHMmJnkpYi5wb2ludChvLGEpO2Vsc2V7dmFyIHU9W3A9TWF0aC5tYXgobWwsTWF0aC5taW4ocGwscCkpLG09TWF0aC5tYXgobWwsTWF0aC5taW4ocGwsbSkpXSxfPVtvPU1hdGgubWF4KG1sLE1hdGgubWluKHBsLG8pKSxhPU1hdGgubWF4KG1sLE1hdGgubWluKHBsLGEpKV07ZGwodSxfLHQsZSxuLGkpPyh5fHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KHVbMF0sdVsxXSkpLGIucG9pbnQoX1swXSxfWzFdKSxzfHxiLmxpbmVFbmQoKSxnPSExKTpzJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KG8sYSksZz0hMSl9cD1vLG09YSx5PXN9cmV0dXJuIHd9fXZhciB2bCxnbCxibCxfbD1mdW5jdGlvbigpe3ZhciB0LGUsbixpPTAscj0wLG89OTYwLGE9NTAwO3JldHVybiBuPXtzdHJlYW06ZnVuY3Rpb24obil7cmV0dXJuIHQmJmU9PT1uP3Q6dD15bChpLHIsbyxhKShlPW4pfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3NbMF1bMF0scj0rc1swXVsxXSxvPStzWzFdWzBdLGE9K3NbMV1bMV0sdD1lPW51bGwsbik6W1tpLHJdLFtvLGFdXX19fSx3bD1RcygpLHhsPXtzcGhlcmU6X3UscG9pbnQ6X3UsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7eGwucG9pbnQ9RWwseGwubGluZUVuZD1TbH0sbGluZUVuZDpfdSxwb2x5Z29uU3RhcnQ6X3UscG9seWdvbkVuZDpfdX07ZnVuY3Rpb24gU2woKXt4bC5wb2ludD14bC5saW5lRW5kPV91fWZ1bmN0aW9uIEVsKHQsZSl7dmw9dCo9cnUsZ2w9ZHUoZSo9cnUpLGJsPXV1KGUpLHhsLnBvaW50PUNsfWZ1bmN0aW9uIENsKHQsZSl7dCo9cnU7dmFyIG49ZHUoZSo9cnUpLGk9dXUoZSkscj1vdSh0LXZsKSxvPXV1KHIpLGE9aSpkdShyKSxzPWJsKm4tZ2wqaSpvLHU9Z2wqbitibCppKm87d2wuYWRkKHN1KG11KGEqYStzKnMpLHUpKSx2bD10LGdsPW4sYmw9aX12YXIgT2w9ZnVuY3Rpb24odCl7cmV0dXJuIHdsLnJlc2V0KCksanUodCx4bCksK3dsfSxUbD1bbnVsbCxudWxsXSxrbD17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6VGx9LEFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFRsWzBdPXQsVGxbMV09ZSxPbChrbCl9LElsPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1sKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZmVhdHVyZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihNbChuW2ldLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0samw9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiBQbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihQbChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE5sKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLGk9LTEscj1uLmxlbmd0aDsrK2k8cjspaWYoTmwobltpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBSbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxpPS0xLHI9bi5sZW5ndGg7KytpPHI7KWlmKFJsKG5baV0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmdlb21ldHJpZXMsaT0tMSxyPW4ubGVuZ3RoOysraTxyOylpZihNbChuW2ldLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gTWwodCxlKXtyZXR1cm4hKCF0fHwhamwuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJmpsW3QudHlwZV0odCxlKX1mdW5jdGlvbiBQbCh0LGUpe3JldHVybiAwPT09QWwodCxlKX1mdW5jdGlvbiBObCh0LGUpe3ZhciBuPUFsKHRbMF0sdFsxXSk7cmV0dXJuIEFsKHRbMF0sZSkrQWwoZSx0WzFdKTw9biskc31mdW5jdGlvbiBSbCh0LGUpe3JldHVybiEhc2wodC5tYXAoRGwpLExsKGUpKX1mdW5jdGlvbiBEbCh0KXtyZXR1cm4odD10Lm1hcChMbCkpLnBvcCgpLHR9ZnVuY3Rpb24gTGwodCl7cmV0dXJuW3RbMF0qcnUsdFsxXSpydV19dmFyIEZsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJklsLmhhc093blByb3BlcnR5KHQudHlwZSk/SWxbdC50eXBlXTpNbCkodCxlKX07ZnVuY3Rpb24gemwodCxlLG4pe3ZhciBpPXgodCxlLSRzLG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSl9fWZ1bmN0aW9uIFZsKHQsZSxuKXt2YXIgaT14KHQsZS0kcyxuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bZSx0XX0pfX1mdW5jdGlvbiBCbCgpe3ZhciB0LGUsbixpLHIsbyxhLHMsdSxjLGwsZixoPTEwLGQ9aCxwPTkwLG09MzYwLHk9Mi41O2Z1bmN0aW9uIHYoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpnKCl9fWZ1bmN0aW9uIGcoKXtyZXR1cm4geChjdShpL3ApKnAsbixwKS5tYXAobCkuY29uY2F0KHgoY3Uocy9tKSptLGEsbSkubWFwKGYpKS5jb25jYXQoeChjdShlL2gpKmgsdCxoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIG91KHQlcCk+JHN9KS5tYXAodSkpLmNvbmNhdCh4KGN1KG8vZCkqZCxyLGQpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gb3UodCVtKT4kc30pLm1hcChjKSl9cmV0dXJuIHYubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZygpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0sdi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltsKGkpLmNvbmNhdChmKGEpLnNsaWNlKDEpLGwobikucmV2ZXJzZSgpLnNsaWNlKDEpLGYocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx2LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOnYuZXh0ZW50TWlub3IoKX0sdi5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdFswXVsxXSxhPSt0WzFdWzFdLChpPSt0WzBdWzBdKT4obj0rdFsxXVswXSkmJih0PWksaT1uLG49dCkscz5hJiYodD1zLHM9YSxhPXQpLHYucHJlY2lzaW9uKHkpKTpbW2ksc10sW24sYV1dfSx2LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStuWzBdWzFdLHI9K25bMV1bMV0sKGU9K25bMF1bMF0pPih0PStuWzFdWzBdKSYmKG49ZSxlPXQsdD1uKSxvPnImJihuPW8sbz1yLHI9biksdi5wcmVjaXNpb24oeSkpOltbZSxvXSxbdCxyXV19LHYuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6di5zdGVwTWlub3IoKX0sdi5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0sbT0rdFsxXSx2KTpbcCxtXX0sdi5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3RbMF0sZD0rdFsxXSx2KTpbaCxkXX0sdi5wcmVjaXNpb249ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2gsdT16bChvLHIsOTApLGM9VmwoZSx0LHkpLGw9emwocyxhLDkwKSxmPVZsKGksbix5KSx2KTp5fSx2LmV4dGVudE1ham9yKFtbLTE4MCwtOTArJHNdLFsxODAsOTAtJHNdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC0kc10sWzE4MCw4MCskc11dKX1mdW5jdGlvbiBVbCgpe3JldHVybiBCbCgpKCl9dmFyIEhsLHFsLEdsLFdsLFlsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFswXSpydSxpPXRbMV0qcnUscj1lWzBdKnJ1LG89ZVsxXSpydSxhPXV1KGkpLHM9ZHUoaSksdT11dShvKSxjPWR1KG8pLGw9YSp1dShuKSxmPWEqZHUobiksaD11KnV1KHIpLGQ9dSpkdShyKSxwPTIqZ3UobXUoYnUoby1pKSthKnUqYnUoci1uKSkpLG09ZHUocCkseT1wP2Z1bmN0aW9uKHQpe3ZhciBlPWR1KHQqPXApL20sbj1kdShwLXQpL20saT1uKmwrZSpoLHI9bipmK2UqZCxvPW4qcytlKmM7cmV0dXJuW3N1KHIsaSkqaXUsc3UobyxtdShpKmkrcipyKSkqaXVdfTpmdW5jdGlvbigpe3JldHVybltuKml1LGkqaXVdfTtyZXR1cm4geS5kaXN0YW5jZT1wLHl9LFFsPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxabD1RcygpLEtsPVFzKCksWGw9e3BvaW50Ol91LGxpbmVTdGFydDpfdSxsaW5lRW5kOl91LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1hsLmxpbmVTdGFydD0kbCxYbC5saW5lRW5kPWVmfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WGwubGluZVN0YXJ0PVhsLmxpbmVFbmQ9WGwucG9pbnQ9X3UsWmwuYWRkKG91KEtsKSksS2wucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9WmwvMjtyZXR1cm4gWmwucmVzZXQoKSx0fX07ZnVuY3Rpb24gJGwoKXtYbC5wb2ludD1KbH1mdW5jdGlvbiBKbCh0LGUpe1hsLnBvaW50PXRmLEhsPUdsPXQscWw9V2w9ZX1mdW5jdGlvbiB0Zih0LGUpe0tsLmFkZChXbCp0LUdsKmUpLEdsPXQsV2w9ZX1mdW5jdGlvbiBlZigpe3RmKEhsLHFsKX12YXIgbmYscmYsb2YsYWYsc2Y9WGwsdWY9MS8wLGNmPXVmLGxmPS11ZixmZj1sZixoZj17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PHVmJiYodWY9dCksdD5sZiYmKGxmPXQpLGU8Y2YmJihjZj1lKSxlPmZmJiYoZmY9ZSl9LGxpbmVTdGFydDpfdSxsaW5lRW5kOl91LHBvbHlnb25TdGFydDpfdSxwb2x5Z29uRW5kOl91LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbdWYsY2ZdLFtsZixmZl1dO3JldHVybiBsZj1mZj0tKGNmPXVmPTEvMCksdH19LGRmPTAscGY9MCxtZj0wLHlmPTAsdmY9MCxnZj0wLGJmPTAsX2Y9MCx3Zj0wLHhmPXtwb2ludDpTZixsaW5lU3RhcnQ6RWYsbGluZUVuZDpUZixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt4Zi5saW5lU3RhcnQ9a2YseGYubGluZUVuZD1BZn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3hmLnBvaW50PVNmLHhmLmxpbmVTdGFydD1FZix4Zi5saW5lRW5kPVRmfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD13Zj9bYmYvd2YsX2Yvd2ZdOmdmP1t5Zi9nZix2Zi9nZl06bWY/W2RmL21mLHBmL21mXTpbTmFOLE5hTl07cmV0dXJuIGRmPXBmPW1mPXlmPXZmPWdmPWJmPV9mPXdmPTAsdH19O2Z1bmN0aW9uIFNmKHQsZSl7ZGYrPXQscGYrPWUsKyttZn1mdW5jdGlvbiBFZigpe3hmLnBvaW50PUNmfWZ1bmN0aW9uIENmKHQsZSl7eGYucG9pbnQ9T2YsU2Yob2Y9dCxhZj1lKX1mdW5jdGlvbiBPZih0LGUpe3ZhciBuPXQtb2YsaT1lLWFmLHI9bXUobipuK2kqaSk7eWYrPXIqKG9mK3QpLzIsdmYrPXIqKGFmK2UpLzIsZ2YrPXIsU2Yob2Y9dCxhZj1lKX1mdW5jdGlvbiBUZigpe3hmLnBvaW50PVNmfWZ1bmN0aW9uIGtmKCl7eGYucG9pbnQ9SWZ9ZnVuY3Rpb24gQWYoKXtqZihuZixyZil9ZnVuY3Rpb24gSWYodCxlKXt4Zi5wb2ludD1qZixTZihuZj1vZj10LHJmPWFmPWUpfWZ1bmN0aW9uIGpmKHQsZSl7dmFyIG49dC1vZixpPWUtYWYscj1tdShuKm4raSppKTt5Zis9cioob2YrdCkvMix2Zis9ciooYWYrZSkvMixnZis9cixiZis9KHI9YWYqdC1vZiplKSoob2YrdCksX2YrPXIqKGFmK2UpLHdmKz0zKnIsU2Yob2Y9dCxhZj1lKX12YXIgTWY9eGY7ZnVuY3Rpb24gUGYodCl7dGhpcy5fY29udGV4dD10fVBmLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxudSl9fSxyZXN1bHQ6X3V9O3ZhciBOZixSZixEZixMZixGZix6Zj1RcygpLFZmPXtwb2ludDpfdSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtWZi5wb2ludD1CZn0sbGluZUVuZDpmdW5jdGlvbigpe05mJiZVZihSZixEZiksVmYucG9pbnQ9X3V9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05mPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7TmY9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3pmO3JldHVybiB6Zi5yZXNldCgpLHR9fTtmdW5jdGlvbiBCZih0LGUpe1ZmLnBvaW50PVVmLFJmPUxmPXQsRGY9RmY9ZX1mdW5jdGlvbiBVZih0LGUpe3pmLmFkZChtdSgoTGYtPXQpKkxmKyhGZi09ZSkqRmYpKSxMZj10LEZmPWV9dmFyIEhmPVZmO2Z1bmN0aW9uIHFmKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIEdmKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifXFmLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpHZig0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz10LHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA9PT10aGlzLl9saW5lJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fc3RyaW5nLnB1c2goIkwiLHQsIiwiLGUpO2JyZWFrO2RlZmF1bHQ6bnVsbD09dGhpcy5fY2lyY2xlJiYodGhpcy5fY2lyY2xlPUdmKHRoaXMuX3JhZGl1cykpLHRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlLHRoaXMuX2NpcmNsZSl9fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgdD10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSx0fXJldHVybiBudWxsfX07dmFyIFdmPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyPTQuNTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxqdSh0LG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24odCl7cmV0dXJuIGp1KHQsbihzZikpLHNmLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIGp1KHQsbihIZikpLEhmLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4ganUodCxuKGhmKSksaGYucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGp1KHQsbihNZikpLE1mLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09ZT8odD1udWxsLFFsKToodD1lKS5zdHJlYW0sbyk6dH0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/KGU9bnVsbCxuZXcgcWYpOm5ldyBQZihlPXQpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiZpLnBvaW50UmFkaXVzKHIpLG8pOmV9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLG8pOnJ9LG8ucHJvamVjdGlvbih0KS5jb250ZXh0KGUpfSxZZj1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOlFmKHQpfX07ZnVuY3Rpb24gUWYodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBaZjtmb3IodmFyIGkgaW4gdCluW2ldPXRbaV07cmV0dXJuIG4uc3RyZWFtPWUsbn19ZnVuY3Rpb24gWmYoKXt9ZnVuY3Rpb24gS2YodCxlLG4pe3ZhciBpPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7cmV0dXJuIHQuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPWkmJnQuY2xpcEV4dGVudChudWxsKSxqdShuLHQuc3RyZWFtKGhmKSksZShoZi5yZXN1bHQoKSksbnVsbCE9aSYmdC5jbGlwRXh0ZW50KGkpLHR9ZnVuY3Rpb24gWGYodCxlLG4pe3JldHVybiBLZih0LGZ1bmN0aW9uKG4pe3ZhciBpPWVbMV1bMF0tZVswXVswXSxyPWVbMV1bMV0tZVswXVsxXSxvPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksci8oblsxXVsxXS1uWzBdWzFdKSksYT0rZVswXVswXSsoaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKHItbyooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSxuKX1mdW5jdGlvbiAkZih0LGUsbil7cmV0dXJuIFhmKHQsW1swLDBdLGVdLG4pfWZ1bmN0aW9uIEpmKHQsZSxuKXtyZXR1cm4gS2YodCxmdW5jdGlvbihuKXt2YXIgaT0rZSxyPWkvKG5bMV1bMF0tblswXVswXSksbz0oaS1yKihuWzFdWzBdK25bMF1bMF0pKS8yLGE9LXIqblswXVsxXTt0LnNjYWxlKDE1MCpyKS50cmFuc2xhdGUoW28sYV0pfSxuKX1mdW5jdGlvbiB0aCh0LGUsbil7cmV0dXJuIEtmKHQsZnVuY3Rpb24obil7dmFyIGk9K2Uscj1pLyhuWzFdWzFdLW5bMF1bMV0pLG89LXIqblswXVswXSxhPShpLXIqKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqcikudHJhbnNsYXRlKFtvLGFdKX0sbil9WmYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaZixwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fTt2YXIgZWg9MTYsbmg9dXUoMzAqcnUpLGloPWZ1bmN0aW9uKHQsZSl7cmV0dXJuK2U/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKGkscixvLGEscyx1LGMsbCxmLGgsZCxwLG0seSl7dmFyIHY9Yy1pLGc9bC1yLGI9dip2K2cqZztpZihiPjQqZSYmbS0tKXt2YXIgXz1hK2gsdz1zK2QseD11K3AsUz1tdShfKl8rdyp3K3gqeCksRT1ndSh4Lz1TKSxDPW91KG91KHgpLTEpPCRzfHxvdShvLWYpPCRzPyhvK2YpLzI6c3UodyxfKSxPPXQoQyxFKSxUPU9bMF0saz1PWzFdLEE9VC1pLEk9ay1yLGo9ZypBLXYqSTsoaipqL2I+ZXx8b3UoKHYqQStnKkkpL2ItLjUpPi4zfHxhKmgrcypkK3UqcDxuaCkmJihuKGkscixvLGEscyx1LFQsayxDLF8vPVMsdy89Uyx4LG0seSkseS5wb2ludChULGspLG4oVCxrLEMsXyx3LHgsYyxsLGYsaCxkLHAsbSx5KSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgaSxyLG8sYSxzLHUsYyxsLGYsaCxkLHAsbT17cG9pbnQ6eSxsaW5lU3RhcnQ6dixsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxtLmxpbmVTdGFydD1ffSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksbS5saW5lU3RhcnQ9dn19O2Z1bmN0aW9uIHkobixpKXtuPXQobixpKSxlLnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gdigpe2w9TmFOLG0ucG9pbnQ9ZyxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGcoaSxyKXt2YXIgbz1CdShbaSxyXSksYT10KGkscik7bihsLGYsYyxoLGQscCxsPWFbMF0sZj1hWzFdLGM9aSxoPW9bMF0sZD1vWzFdLHA9b1syXSxlaCxlKSxlLnBvaW50KGwsZil9ZnVuY3Rpb24gYigpe20ucG9pbnQ9eSxlLmxpbmVFbmQoKX1mdW5jdGlvbiBfKCl7digpLG0ucG9pbnQ9dyxtLmxpbmVFbmQ9eH1mdW5jdGlvbiB3KHQsZSl7ZyhpPXQsZSkscj1sLG89ZixhPWgscz1kLHU9cCxtLnBvaW50PWd9ZnVuY3Rpb24geCgpe24obCxmLGMsaCxkLHAscixvLGksYSxzLHUsZWgsZSksbS5saW5lRW5kPWIsYigpfXJldHVybiBtfX0odCxlKTpmdW5jdGlvbih0KXtyZXR1cm4gUWYoe3BvaW50OmZ1bmN0aW9uKGUsbil7ZT10KGUsbiksdGhpcy5zdHJlYW0ucG9pbnQoZVswXSxlWzFdKX19KX0odCl9LHJoPVFmKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqcnUsZSpydSl9fSk7ZnVuY3Rpb24gb2godCxlLG4saSl7dmFyIHI9dXUoaSksbz1kdShpKSxhPXIqdCxzPW8qdCx1PXIvdCxjPW8vdCxsPShvKm4tciplKS90LGY9KG8qZStyKm4pL3Q7ZnVuY3Rpb24gaCh0LGkpe3JldHVyblthKnQtcyppK2Usbi1zKnQtYSppXX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdSp0LWMqZStsLGYtYyp0LXUqZV19LGh9ZnVuY3Rpb24gYWgodCl7cmV0dXJuIHNoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSgpfWZ1bmN0aW9uIHNoKHQpe3ZhciBlLG4saSxyLG8sYSxzLHUsYyxsLGY9MTUwLGg9NDgwLGQ9MjUwLHA9MCxtPTAseT0wLHY9MCxnPTAsYj0wLF89bnVsbCx3PWZsLHg9bnVsbCxTPVFsLEU9LjU7ZnVuY3Rpb24gQyh0KXtyZXR1cm4gdSh0WzBdKnJ1LHRbMV0qcnUpfWZ1bmN0aW9uIE8odCl7cmV0dXJuKHQ9dS5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKml1LHRbMV0qaXVdfWZ1bmN0aW9uIFQoKXt2YXIgdD1vaChmLDAsMCxiKS5hcHBseShudWxsLGUocCxtKSksaT0oYj9vaDpmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gaShpLHIpe3JldHVybltlK3QqaSxuLXQqcl19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGkscil7cmV0dXJuWyhpLWUpL3QsKG4tcikvdF19LGl9KShmLGgtdFswXSxkLXRbMV0sYik7cmV0dXJuIG49WWMoeSx2LGcpLHM9R2MoZSxpKSx1PUdjKG4scyksYT1paChzLEUpLGsoKX1mdW5jdGlvbiBrKCl7cmV0dXJuIGM9bD1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZsPT09dD9jOmM9cmgoZnVuY3Rpb24odCl7cmV0dXJuIFFmKHtwb2ludDpmdW5jdGlvbihlLG4pe3ZhciBpPXQoZSxuKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoaVswXSxpWzFdKX19KX0obikodyhhKFMobD10KSkpKSl9LEMucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz10LF89dm9pZCAwLGsoKSk6d30sQy5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz10LHg9aT1yPW89bnVsbCxrKCkpOlN9LEMuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSt0P2hsKF89dCpydSk6KF89bnVsbCxmbCksaygpKTpfKml1fSxDLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9bnVsbD09dD8oeD1pPXI9bz1udWxsLFFsKTp5bCh4PSt0WzBdWzBdLGk9K3RbMF1bMV0scj0rdFsxXVswXSxvPSt0WzFdWzFdKSxrKCkpOm51bGw9PXg/bnVsbDpbW3gsaV0sW3Isb11dfSxDLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0LFQoKSk6Zn0sQy50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3RbMF0sZD0rdFsxXSxUKCkpOltoLGRdfSxDLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10WzBdJTM2MCpydSxtPXRbMV0lMzYwKnJ1LFQoKSk6W3AqaXUsbSppdV19LEMucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXRbMF0lMzYwKnJ1LHY9dFsxXSUzNjAqcnUsZz10Lmxlbmd0aD4yP3RbMl0lMzYwKnJ1OjAsVCgpKTpbeSppdSx2Kml1LGcqaXVdfSxDLmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQlMzYwKnJ1LFQoKSk6YippdX0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9aWgocyxFPXQqdCksaygpKTptdShFKX0sQy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGYoQyx0LGUpfSxDLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGYoQyx0LGUpfSxDLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpmKEMsdCxlKX0sQy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGgoQyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLEMuaW52ZXJ0PWUuaW52ZXJ0JiZPLFQoKX19ZnVuY3Rpb24gdWgodCl7dmFyIGU9MCxuPUpzLzMsaT1zaCh0KSxyPWkoZSxuKTtyZXR1cm4gci5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aShlPXRbMF0qcnUsbj10WzFdKnJ1KTpbZSppdSxuKml1XX0scn1mdW5jdGlvbiBjaCh0LGUpe3ZhciBuPWR1KHQpLGk9KG4rZHUoZSkpLzI7aWYob3UoaSk8JHMpcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXV1KHQpO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm5bdCpuLGR1KGUpL25dfXJldHVybiBpLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L24sZ3UoZSpuKV19LGl9KCk7dmFyIHI9MStuKigyKmktbiksbz1tdShyKS9pO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1tdShyLTIqaSpkdShlKSkvaTtyZXR1cm5bbipkdSh0Kj1pKSxvLW4qdXUodCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPW8tZTtyZXR1cm5bc3UodCxvdShuKSkvaSpwdShuKSxndSgoci0odCp0K24qbikqaSppKS8oMippKSldfSxhfXZhciBsaD1mdW5jdGlvbigpe3JldHVybiB1aChjaCkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX0sZmg9ZnVuY3Rpb24oKXtyZXR1cm4gbGgoKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX0saGg9ZnVuY3Rpb24oKXt2YXIgdCxlLG4saSxyLG8sYT1maCgpLHM9bGgoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHU9bGgoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksYz17cG9pbnQ6ZnVuY3Rpb24odCxlKXtvPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLGE9dFsxXTtyZXR1cm4gbz1udWxsLG4ucG9pbnQoZSxhKSxvfHwoaS5wb2ludChlLGEpLG8pfHwoci5wb2ludChlLGEpLG8pfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9YS5zY2FsZSgpLG49YS50cmFuc2xhdGUoKSxpPSh0WzBdLW5bMF0pL2Uscj0odFsxXS1uWzFdKS9lO3JldHVybihyPj0uMTImJnI8LjIzNCYmaT49LS40MjUmJmk8LS4yMTQ/czpyPj0uMTY2JiZyPC4yMzQmJmk+PS0uMjE0JiZpPC0uMTE1P3U6YSkuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDooaT1bYS5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSx1LnN0cmVhbShuKV0scj1pLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248cjspaVtuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PHI7KWlbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8cjspaVt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8cjspaVt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8cjspaVt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8cjspaVt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIGkscn0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLHUucHJlY2lzaW9uKHQpLGYoKSk6YS5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYS5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSx1LnNjYWxlKHQpLGwudHJhbnNsYXRlKGEudHJhbnNsYXRlKCkpKTphLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhLnRyYW5zbGF0ZSgpO3ZhciBlPWEuc2NhbGUoKSxvPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49YS50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW28tLjQ1NSplLGwtLjIzOCplXSxbbysuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKGMpLGk9cy50cmFuc2xhdGUoW28tLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW28tLjQyNSplKyRzLGwrLjEyKmUrJHNdLFtvLS4yMTQqZS0kcyxsKy4yMzQqZS0kc11dKS5zdHJlYW0oYykscj11LnRyYW5zbGF0ZShbby0uMjA1KmUsbCsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbby0uMjE0KmUrJHMsbCsuMTY2KmUrJHNdLFtvLS4xMTUqZS0kcyxsKy4yMzQqZS0kc11dKS5zdHJlYW0oYyksZigpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBYZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiAkZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSmYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB0aChsLHQsZSl9LGwuc2NhbGUoMTA3MCl9O2Z1bmN0aW9uIGRoKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciBpPXV1KGUpLHI9dXUobiksbz10KGkqcik7cmV0dXJuW28qcipkdShlKSxvKmR1KG4pXX19ZnVuY3Rpb24gcGgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9bXUoZSplK24qbikscj10KGkpLG89ZHUociksYT11dShyKTtyZXR1cm5bc3UoZSpvLGkqYSksZ3UoaSYmbipvL2kpXX19dmFyIG1oPWRoKGZ1bmN0aW9uKHQpe3JldHVybiBtdSgyLygxK3QpKX0pO21oLmludmVydD1waChmdW5jdGlvbih0KXtyZXR1cm4gMipndSh0LzIpfSk7dmFyIHloPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKG1oKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdmg9ZGgoZnVuY3Rpb24odCl7cmV0dXJuKHQ9dnUodCkpJiZ0L2R1KHQpfSk7dmguaW52ZXJ0PXBoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIGdoPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKHZoKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O2Z1bmN0aW9uIGJoKHQsZSl7cmV0dXJuW3QsZnUoeXUoKHR1K2UpLzIpKV19YmguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMiphdShsdShlKSktdHVdfTt2YXIgX2g9ZnVuY3Rpb24oKXtyZXR1cm4gd2goYmgpLnNjYWxlKDk2MS9udSl9O2Z1bmN0aW9uIHdoKHQpe3ZhciBlLG4saSxyPWFoKHQpLG89ci5jZW50ZXIsYT1yLnNjYWxlLHM9ci50cmFuc2xhdGUsdT1yLmNsaXBFeHRlbnQsYz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgbz1KcyphKCkscz1yKFhjKHIucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiB1KG51bGw9PWM/W1tzWzBdLW8sc1sxXS1vXSxbc1swXStvLHNbMV0rb11dOnQ9PT1iaD9bW01hdGgubWF4KHNbMF0tbyxjKSxlXSxbTWF0aC5taW4oc1swXStvLG4pLGldXTpbW2MsTWF0aC5tYXgoc1sxXS1vLGUpXSxbbixNYXRoLm1pbihzWzFdK28saSldXSl9cmV0dXJuIHIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksbCgpKTphKCl9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzKHQpLGwoKSk6cygpfSxyLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxsKCkpOm8oKX0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2M9ZT1uPWk9bnVsbDooYz0rdFswXVswXSxlPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksbCgpKTpudWxsPT1jP251bGw6W1tjLGVdLFtuLGldXX0sbCgpfWZ1bmN0aW9uIHhoKHQpe3JldHVybiB5dSgodHUrdCkvMil9ZnVuY3Rpb24gU2godCxlKXt2YXIgbj11dSh0KSxpPXQ9PT1lP2R1KHQpOmZ1KG4vdXUoZSkpL2Z1KHhoKGUpL3hoKHQpKSxyPW4qaHUoeGgodCksaSkvaTtpZighaSlyZXR1cm4gYmg7ZnVuY3Rpb24gbyh0LGUpe3I+MD9lPC10dSskcyYmKGU9LXR1KyRzKTplPnR1LSRzJiYoZT10dS0kcyk7dmFyIG49ci9odSh4aChlKSxpKTtyZXR1cm5bbipkdShpKnQpLHItbip1dShpKnQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLWUsbz1wdShpKSptdSh0KnQrbipuKTtyZXR1cm5bc3UodCxvdShuKSkvaSpwdShuKSwyKmF1KGh1KHIvbywxL2kpKS10dV19LG99dmFyIEVoPWZ1bmN0aW9uKCl7cmV0dXJuIHVoKFNoKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfTtmdW5jdGlvbiBDaCh0LGUpe3JldHVyblt0LGVdfUNoLmludmVydD1DaDt2YXIgT2g9ZnVuY3Rpb24oKXtyZXR1cm4gYWgoQ2gpLnNjYWxlKDE1Mi42Myl9O2Z1bmN0aW9uIFRoKHQsZSl7dmFyIG49dXUodCksaT10PT09ZT9kdSh0KToobi11dShlKSkvKGUtdCkscj1uL2krdDtpZihvdShpKTwkcylyZXR1cm4gQ2g7ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXItZSxvPWkqdDtyZXR1cm5bbipkdShvKSxyLW4qdXUobyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPXItZTtyZXR1cm5bc3UodCxvdShuKSkvaSpwdShuKSxyLXB1KGkpKm11KHQqdCtuKm4pXX0sb312YXIga2g9ZnVuY3Rpb24oKXtyZXR1cm4gdWgoVGgpLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9O2Z1bmN0aW9uIEFoKHQsZSl7dmFyIG49dXUoZSksaT11dSh0KSpuO3JldHVybltuKmR1KHQpL2ksZHUoZSkvaV19QWguaW52ZXJ0PXBoKGF1KTt2YXIgSWg9ZnVuY3Rpb24oKXtyZXR1cm4gYWgoQWgpLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9O2Z1bmN0aW9uIGpoKHQsZSxuLGkpe3JldHVybiAxPT09dCYmMT09PWUmJjA9PT1uJiYwPT09aT9RbDpRZih7cG9pbnQ6ZnVuY3Rpb24ocixvKXt0aGlzLnN0cmVhbS5wb2ludChyKnQrbixvKmUraSl9fSl9dmFyIE1oPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLGkscixvLGE9MSxzPTAsdT0wLGM9MSxsPTEsZj1RbCxoPW51bGwsZD1RbDtmdW5jdGlvbiBwKCl7cmV0dXJuIGk9cj1udWxsLG99cmV0dXJuIG89e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmcj09PXQ/aTppPWYoZChyPXQpKX0scG9zdGNsaXA6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9aSxoPXQ9ZT1uPW51bGwscCgpKTpkfSxjbGlwRXh0ZW50OmZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPW51bGw9PWk/KGg9dD1lPW49bnVsbCxRbCk6eWwoaD0raVswXVswXSx0PStpWzBdWzFdLGU9K2lbMV1bMF0sbj0raVsxXVsxXSkscCgpKTpudWxsPT1oP251bGw6W1toLHRdLFtlLG5dXX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9amgoKGE9K3QpKmMsYSpsLHMsdSkscCgpKTphfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9amgoYSpjLGEqbCxzPSt0WzBdLHU9K3RbMV0pLHAoKSk6W3MsdV19LHJlZmxlY3RYOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWpoKGEqKGM9dD8tMToxKSxhKmwscyx1KSxwKCkpOmM8MH0scmVmbGVjdFk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9amgoYSpjLGEqKGw9dD8tMToxKSxzLHUpLHAoKSk6bDwwfSxmaXRFeHRlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gWGYobyx0LGUpfSxmaXRTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuICRmKG8sdCxlKX0sZml0V2lkdGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSmYobyx0LGUpfSxmaXRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGgobyx0LGUpfX19O2Z1bmN0aW9uIFBoKHQsZSl7dmFyIG49ZSplLGk9bipuO3JldHVyblt0KiguODcwNy0uMTMxOTc5Km4raSooaSooLjAwMzk3MSpuLS4wMDE1MjkqaSktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K24qKC4wMTUwODUraSooLjAyODg3NCpuLS4wNDQ0NzUtLjAwNTkxNippKSkpXX1QaC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbixpPWUscj0yNTtkb3t2YXIgbz1pKmksYT1vKm87aS09bj0oaSooMS4wMDcyMjYrbyooLjAxNTA4NSthKiguMDI4ODc0Km8tLjA0NDQ3NS0uMDA1OTE2KmEpKSktZSkvKDEuMDA3MjI2K28qKC4wNDUyNTUrYSooLjI1OTg2NipvLS4zMTEzMjUtLjAwNTkxNioxMSphKSkpfXdoaWxlKG91KG4pPiRzJiYtLXI+MCk7cmV0dXJuW3QvKC44NzA3KyhvPWkqaSkqKG8qKG8qbypvKiguMDAzOTcxLS4wMDE1MjkqbyktLjAxMzc5MSktLjEzMTk3OSkpLGldfTt2YXIgTmg9ZnVuY3Rpb24oKXtyZXR1cm4gYWgoUGgpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBSaCh0LGUpe3JldHVyblt1dShlKSpkdSh0KSxkdShlKV19UmguaW52ZXJ0PXBoKGd1KTt2YXIgRGg9ZnVuY3Rpb24oKXtyZXR1cm4gYWgoUmgpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArJHMpfTtmdW5jdGlvbiBMaCh0LGUpe3ZhciBuPXV1KGUpLGk9MSt1dSh0KSpuO3JldHVybltuKmR1KHQpL2ksZHUoZSkvaV19TGguaW52ZXJ0PXBoKGZ1bmN0aW9uKHQpe3JldHVybiAyKmF1KHQpfSk7dmFyIEZoPWZ1bmN0aW9uKCl7cmV0dXJuIGFoKExoKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTtmdW5jdGlvbiB6aCh0LGUpe3JldHVybltmdSh5dSgodHUrZSkvMikpLC10XX16aC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMiphdShsdSh0KSktdHVdfTt2YXIgVmg9ZnVuY3Rpb24oKXt2YXIgdD13aCh6aCksZT10LmNlbnRlcixuPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PW4oKSlbMF0sdFsxXSx0WzJdLTkwXX0sbihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9O2Z1bmN0aW9uIEJoKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIFVoKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIEhoKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX12YXIgcWg9ZnVuY3Rpb24oKXt2YXIgdD1CaCxlPTEsbj0xLGk9ITE7ZnVuY3Rpb24gcihyKXt2YXIgbyxhPTA7ci5lYWNoQWZ0ZXIoZnVuY3Rpb24oZSl7dmFyIG49ZS5jaGlsZHJlbjtuPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKFVoLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UoSGgsMCl9KG4pKTooZS54PW8/YSs9dChlLG8pOjAsZS55PTAsbz1lKX0pO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0ociksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KHIpLGM9cy54LXQocyx1KS8yLGw9dS54K3QodSxzKS8yO3JldHVybiByLmVhY2hBZnRlcihpP2Z1bmN0aW9uKHQpe3QueD0odC54LXIueCkqZSx0Lnk9KHIueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LWMpLyhsLWMpKmUsdC55PSgxLShyLnk/dC55L3IueToxKSkqbn0pfXJldHVybiByLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITEsZT0rdFswXSxuPSt0WzFdLHIpOmk/bnVsbDpbZSxuXX0sci5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMCxlPSt0WzBdLG49K3RbMV0scik6aT9bZSxuXTpudWxsfSxyfTtmdW5jdGlvbiBHaCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixpPW4mJm4ubGVuZ3RoO2lmKGkpZm9yKDstLWk+PTA7KWUrPW5baV0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIFdoKHQsZSl7dmFyIG4saSxyLG8sYSxzPW5ldyBLaCh0KSx1PSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSxjPVtzXTtmb3IobnVsbD09ZSYmKGU9WWgpO249Yy5wb3AoKTspaWYodSYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKHI9ZShuLmRhdGEpKSYmKGE9ci5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShhKSxvPWEtMTtvPj0wOy0tbyljLnB1c2goaT1uLmNoaWxkcmVuW29dPW5ldyBLaChyW29dKSksaS5wYXJlbnQ9bixpLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKFpoKX1mdW5jdGlvbiBZaCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBRaCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gWmgodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBLaCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1LaC5wcm90b3R5cGU9V2gucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpLaCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihHaCl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixpLHIsbz10aGlzLGE9W29dO2Rve2ZvcihlPWEucmV2ZXJzZSgpLGE9W107bz1lLnBvcCgpOylpZih0KG8pLG49by5jaGlsZHJlbilmb3IoaT0wLHI9bi5sZW5ndGg7aTxyOysraSlhLnB1c2gobltpXSl9d2hpbGUoYS5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saSxyPXRoaXMsbz1bcl0sYT1bXTtyPW8ucG9wKCk7KWlmKGEucHVzaChyKSxlPXIuY2hpbGRyZW4pZm9yKG49MCxpPWUubGVuZ3RoO248aTsrK24pby5wdXNoKGVbbl0pO2Zvcig7cj1hLnBvcCgpOyl0KHIpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9dGhpcyxyPVtpXTtpPXIucG9wKCk7KWlmKHQoaSksZT1pLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4pci5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLGk9ZS5jaGlsZHJlbixyPWkmJmkubGVuZ3RoOy0tcj49MDspbis9aVtyXS52YWx1ZTtlLnZhbHVlPW59KX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLGk9ZS5hbmNlc3RvcnMoKSxyPW51bGw7Zm9yKHQ9bi5wb3AoKSxlPWkucG9wKCk7dD09PWU7KXI9dCx0PW4ucG9wKCksZT1pLnBvcCgpO3JldHVybiByfShlLHQpLGk9W2VdO2UhPT1uOylpLnB1c2goZT1lLnBhcmVudCk7Zm9yKHZhciByPWkubGVuZ3RoO3QhPT1uOylpLnNwbGljZShyLDAsdCksdD10LnBhcmVudDtyZXR1cm4gaX0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBXaCh0aGlzKS5lYWNoQmVmb3JlKFFoKX19O3ZhciBYaD1BcnJheS5wcm90b3R5cGUuc2xpY2UsJGg9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT0wLHI9KHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saT10Lmxlbmd0aDtpOyluPU1hdGgucmFuZG9tKCkqaS0tfDAsZT10W2ldLHRbaV09dFtuXSx0W25dPWU7cmV0dXJuIHR9KFhoLmNhbGwodCkpKS5sZW5ndGgsbz1bXTtpPHI7KWU9dFtpXSxuJiZlZChuLGUpPysraToobj1pZChvPUpoKG8sZSkpLGk9MCk7cmV0dXJuIG59O2Z1bmN0aW9uIEpoKHQsZSl7dmFyIG4saTtpZihuZChlLHQpKXJldHVybltlXTtmb3Iobj0wO248dC5sZW5ndGg7KytuKWlmKHRkKGUsdFtuXSkmJm5kKHJkKHRbbl0sZSksdCkpcmV0dXJuW3Rbbl0sZV07Zm9yKG49MDtuPHQubGVuZ3RoLTE7KytuKWZvcihpPW4rMTtpPHQubGVuZ3RoOysraSlpZih0ZChyZCh0W25dLHRbaV0pLGUpJiZ0ZChyZCh0W25dLGUpLHRbaV0pJiZ0ZChyZCh0W2ldLGUpLHRbbl0pJiZuZChvZCh0W25dLHRbaV0sZSksdCkpcmV0dXJuW3Rbbl0sdFtpXSxlXTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gdGQodCxlKXt2YXIgbj10LnItZS5yLGk9ZS54LXQueCxyPWUueS10Lnk7cmV0dXJuIG48MHx8bipuPGkqaStyKnJ9ZnVuY3Rpb24gZWQodCxlKXt2YXIgbj10LnItZS5yKzFlLTYsaT1lLngtdC54LHI9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+aSppK3Iqcn1mdW5jdGlvbiBuZCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7KytuKWlmKCFlZCh0LGVbbl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGlkKHQpe3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOnJldHVybnt4OihlPXRbMF0pLngseTplLnkscjplLnJ9O2Nhc2UgMjpyZXR1cm4gcmQodFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIG9kKHRbMF0sdFsxXSx0WzJdKX12YXIgZX1mdW5jdGlvbiByZCh0LGUpe3ZhciBuPXQueCxpPXQueSxyPXQucixvPWUueCxhPWUueSxzPWUucix1PW8tbixjPWEtaSxsPXMtcixmPU1hdGguc3FydCh1KnUrYypjKTtyZXR1cm57eDoobitvK3UvZipsKS8yLHk6KGkrYStjL2YqbCkvMixyOihmK3IrcykvMn19ZnVuY3Rpb24gb2QodCxlLG4pe3ZhciBpPXQueCxyPXQueSxvPXQucixhPWUueCxzPWUueSx1PWUucixjPW4ueCxsPW4ueSxmPW4ucixoPWktYSxkPWktYyxwPXItcyxtPXItbCx5PXUtbyx2PWYtbyxnPWkqaStyKnItbypvLGI9Zy1hKmEtcypzK3UqdSxfPWctYypjLWwqbCtmKmYsdz1kKnAtaCptLHg9KHAqXy1tKmIpLygyKncpLWksUz0obSp5LXAqdikvdyxFPShkKmItaCpfKS8oMip3KS1yLEM9KGgqdi1kKnkpL3csTz1TKlMrQypDLTEsVD0yKihvK3gqUytFKkMpLGs9eCp4K0UqRS1vKm8sQT0tKE8/KFQrTWF0aC5zcXJ0KFQqVC00Kk8qaykpLygyKk8pOmsvVCk7cmV0dXJue3g6aSt4K1MqQSx5OnIrRStDKkEscjpBfX1mdW5jdGlvbiBhZCh0LGUsbil7dmFyIGkscixvLGEscz10LngtZS54LHU9dC55LWUueSxjPXMqcyt1KnU7Yz8ocj1lLnIrbi5yLGE9dC5yK24uciwocio9cik+KGEqPWEpPyhpPShjK2EtcikvKDIqYyksbz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxhL2MtaSppKSksbi54PXQueC1pKnMtbyp1LG4ueT10LnktaSp1K28qcyk6KGk9KGMrci1hKS8oMipjKSxvPU1hdGguc3FydChNYXRoLm1heCgwLHIvYy1pKmkpKSxuLng9ZS54K2kqcy1vKnUsbi55PWUueStpKnUrbypzKSk6KG4ueD1lLngrbi5yLG4ueT1lLnkpfWZ1bmN0aW9uIHNkKHQsZSl7dmFyIG49dC5yK2Uuci0xZS02LGk9ZS54LXQueCxyPWUueS10Lnk7cmV0dXJuIG4+MCYmbipuPmkqaStyKnJ9ZnVuY3Rpb24gdWQodCl7dmFyIGU9dC5fLG49dC5uZXh0Ll8saT1lLnIrbi5yLHI9KGUueCpuLnIrbi54KmUucikvaSxvPShlLnkqbi5yK24ueSplLnIpL2k7cmV0dXJuIHIqcitvKm99ZnVuY3Rpb24gY2QodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIGxkKHQpe2lmKCEocj10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIGUsbixpLHIsbyxhLHMsdSxjLGwsZjtpZigoZT10WzBdKS54PTAsZS55PTAsIShyPjEpKXJldHVybiBlLnI7aWYoZS54PS0obj10WzFdKS5yLG4ueD1lLnIsbi55PTAsIShyPjIpKXJldHVybiBlLnIrbi5yO2FkKG4sZSxpPXRbMl0pLGU9bmV3IGNkKGUpLG49bmV3IGNkKG4pLGk9bmV3IGNkKGkpLGUubmV4dD1pLnByZXZpb3VzPW4sbi5uZXh0PWUucHJldmlvdXM9aSxpLm5leHQ9bi5wcmV2aW91cz1lO3Q6Zm9yKHM9MztzPHI7KytzKXthZChlLl8sbi5fLGk9dFtzXSksaT1uZXcgY2QoaSksdT1uLm5leHQsYz1lLnByZXZpb3VzLGw9bi5fLnIsZj1lLl8ucjtkb3tpZihsPD1mKXtpZihzZCh1Ll8saS5fKSl7ZS5uZXh0PW49dSxuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9bCs9dS5fLnIsdT11Lm5leHR9ZWxzZXtpZihzZChjLl8saS5fKSl7KGU9YykubmV4dD1uLG4ucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1mKz1jLl8ucixjPWMucHJldmlvdXN9fXdoaWxlKHUhPT1jLm5leHQpO2ZvcihpLnByZXZpb3VzPWUsaS5uZXh0PW4sZS5uZXh0PW4ucHJldmlvdXM9bj1pLG89dWQoZSk7KGk9aS5uZXh0KSE9PW47KShhPXVkKGkpKTxvJiYoZT1pLG89YSk7bj1lLm5leHR9Zm9yKGU9W24uX10saT1uOyhpPWkubmV4dCkhPT1uOyllLnB1c2goaS5fKTtmb3IoaT0kaChlKSxzPTA7czxyOysrcykoZT10W3NdKS54LT1pLngsZS55LT1pLnk7cmV0dXJuIGkucn12YXIgZmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGxkKHQpLHR9O2Z1bmN0aW9uIGhkKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBkZCgpe3JldHVybiAwfXZhciBwZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIG1kKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9dmFyIHlkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLGk9ZGQ7ZnVuY3Rpb24gcihyKXtyZXR1cm4gci54PWUvMixyLnk9bi8yLHQ/ci5lYWNoQmVmb3JlKHZkKHQpKS5lYWNoQWZ0ZXIoZ2QoaSwuNSkpLmVhY2hCZWZvcmUoYmQoMSkpOnIuZWFjaEJlZm9yZSh2ZChtZCkpLmVhY2hBZnRlcihnZChkZCwxKSkuZWFjaEFmdGVyKGdkKGksci5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKGJkKE1hdGgubWluKGUsbikvKDIqci5yKSkpLHJ9cmV0dXJuIHIucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PShuPWUpP251bGw6aGQobikscik6dDt2YXIgbn0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scik6W2Usbl19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxyKTppfSxyfTtmdW5jdGlvbiB2ZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIGdkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGk9bi5jaGlsZHJlbil7dmFyIGkscixvLGE9aS5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yKz1zO2lmKG89bGQoaSkscylmb3Iocj0wO3I8YTsrK3IpaVtyXS5yLT1zO24ucj1vK3N9fX1mdW5jdGlvbiBiZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX12YXIgX2Q9ZnVuY3Rpb24odCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfSx3ZD1mdW5jdGlvbih0LGUsbixpLHIpe2Zvcih2YXIgbyxhPXQuY2hpbGRyZW4scz0tMSx1PWEubGVuZ3RoLGM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK3M8dTspKG89YVtzXSkueTA9bixvLnkxPXIsby54MD1lLG8ueDE9ZSs9by52YWx1ZSpjfSx4ZD1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49MCxpPSExO2Z1bmN0aW9uIHIocil7dmFyIG89ci5oZWlnaHQrMTtyZXR1cm4gci54MD1yLnkwPW4sci54MT10LHIueTE9ZS9vLHIuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihpKXtpLmNoaWxkcmVuJiZ3ZChpLGkueDAsdCooaS5kZXB0aCsxKS9lLGkueDEsdCooaS5kZXB0aCsyKS9lKTt2YXIgcj1pLngwLG89aS55MCxhPWkueDEtbixzPWkueTEtbjthPHImJihyPWE9KHIrYSkvMiksczxvJiYobz1zPShvK3MpLzIpLGkueDA9cixpLnkwPW8saS54MT1hLGkueTE9c319KGUsbykpLGkmJnIuZWFjaEJlZm9yZShfZCkscn1yZXR1cm4gci5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIXQscik6aX0sci5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0scik6W3QsZV19LHIucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKTpufSxyfSxTZD0iJCIsRWQ9e2RlcHRoOi0xfSxDZD17fTtmdW5jdGlvbiBPZCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBUZCh0KXtyZXR1cm4gdC5wYXJlbnRJZH12YXIga2Q9ZnVuY3Rpb24oKXt2YXIgdD1PZCxlPVRkO2Z1bmN0aW9uIG4obil7dmFyIGkscixvLGEscyx1LGMsbD1uLmxlbmd0aCxmPW5ldyBBcnJheShsKSxoPXt9O2ZvcihyPTA7cjxsOysrcilzPWZbcl09bmV3IEtoKGk9bltyXSksbnVsbCE9KHU9dChpLHIsbikpJiYodSs9IiIpJiYoaFtjPVNkKyhzLmlkPXUpXT1jIGluIGg/Q2Q6cyk7Zm9yKHI9MDtyPGw7KytyKWlmKHM9ZltyXSxudWxsIT0odT1lKG5bcl0scixuKSkmJih1Kz0iIikpe2lmKCEoYT1oW1NkK3VdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrdSk7aWYoYT09PUNkKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK3UpO2EuY2hpbGRyZW4/YS5jaGlsZHJlbi5wdXNoKHMpOmEuY2hpbGRyZW49W3NdLHMucGFyZW50PWF9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPXN9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9RWQsby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWx9KS5lYWNoQmVmb3JlKFpoKSxvLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aGQoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1oZCh0KSxuKTplfSxufTtmdW5jdGlvbiBBZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBJZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIGpkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gTWQodCxlLG4pe3ZhciBpPW4vKGUuaS10LmkpO2UuYy09aSxlLnMrPW4sdC5jKz1pLGUueis9bixlLm0rPW59ZnVuY3Rpb24gUGQodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gTmQodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1OZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShLaC5wcm90b3R5cGUpO3ZhciBSZD1mdW5jdGlvbigpe3ZhciB0PUFkLGU9MSxuPTEsaT1udWxsO2Z1bmN0aW9uIHIocil7dmFyIHU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4saSxyLG8sYT1uZXcgTmQodCwwKSxzPVthXTtlPXMucG9wKCk7KWlmKGk9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShvPWkubGVuZ3RoKSxyPW8tMTtyPj0wOy0tcilzLnB1c2gobj1lLmNoaWxkcmVuW3JdPW5ldyBOZChpW3JdLHIpKSxuLnBhcmVudD1lO3JldHVybihhLnBhcmVudD1uZXcgTmQobnVsbCwwKSkuY2hpbGRyZW49W2FdLGF9KHIpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksaSlyLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgYz1yLGw9cixmPXI7ci5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD5sLngmJihsPXQpLHQuZGVwdGg+Zi5kZXB0aCYmKGY9dCl9KTt2YXIgaD1jPT09bD8xOnQoYyxsKS8yLGQ9aC1jLngscD1lLyhsLngraCtkKSxtPW4vKGYuZGVwdGh8fDEpO3IuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKm19KX1yZXR1cm4gcn1mdW5jdGlvbiBvKGUpe3ZhciBuPWUuY2hpbGRyZW4saT1lLnBhcmVudC5jaGlsZHJlbixyPWUuaT9pW2UuaS0xXTpudWxsO2lmKG4peyFmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLGk9MCxyPXQuY2hpbGRyZW4sbz1yLmxlbmd0aDstLW8+PTA7KShlPXJbb10pLnorPW4sZS5tKz1uLG4rPWUucysoaSs9ZS5jKX0oZSk7dmFyIG89KG5bMF0ueituW24ubGVuZ3RoLTFdLnopLzI7cj8oZS56PXIueit0KGUuXyxyLl8pLGUubT1lLnotbyk6ZS56PW99ZWxzZSByJiYoZS56PXIueit0KGUuXyxyLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUsbixpKXtpZihuKXtmb3IodmFyIHIsbz1lLGE9ZSxzPW4sdT1vLnBhcmVudC5jaGlsZHJlblswXSxjPW8ubSxsPWEubSxmPXMubSxoPXUubTtzPWpkKHMpLG89SWQobykscyYmbzspdT1JZCh1KSwoYT1qZChhKSkuYT1lLChyPXMueitmLW8uei1jK3Qocy5fLG8uXykpPjAmJihNZChQZChzLGUsaSksZSxyKSxjKz1yLGwrPXIpLGYrPXMubSxjKz1vLm0saCs9dS5tLGwrPWEubTtzJiYhamQoYSkmJihhLnQ9cyxhLm0rPWYtbCksbyYmIUlkKHUpJiYodS50PW8sdS5tKz1jLWgsaT1lKX1yZXR1cm4gaX0oZSxyLGUucGFyZW50LkF8fGlbMF0pfWZ1bmN0aW9uIGEodCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIHIuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPSt0WzBdLG49K3RbMV0scik6aT9udWxsOltlLG5dfSxyLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K3RbMF0sbj0rdFsxXSxyKTppP1tlLG5dOm51bGx9LHJ9LERkPWZ1bmN0aW9uKHQsZSxuLGkscil7Zm9yKHZhciBvLGE9dC5jaGlsZHJlbixzPS0xLHU9YS5sZW5ndGgsYz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrczx1Oykobz1hW3NdKS54MD1lLG8ueDE9aSxvLnkwPW4sby55MT1uKz1vLnZhbHVlKmN9LExkPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBGZCh0LGUsbixpLHIsbyl7Zm9yKHZhciBhLHMsdSxjLGwsZixoLGQscCxtLHksdj1bXSxnPWUuY2hpbGRyZW4sYj0wLF89MCx3PWcubGVuZ3RoLHg9ZS52YWx1ZTtiPHc7KXt1PXItbixjPW8taTtkb3tsPWdbXysrXS52YWx1ZX13aGlsZSghbCYmXzx3KTtmb3IoZj1oPWwseT1sKmwqKG09TWF0aC5tYXgoYy91LHUvYykvKHgqdCkpLHA9TWF0aC5tYXgoaC95LHkvZik7Xzx3OysrXyl7aWYobCs9cz1nW19dLnZhbHVlLHM8ZiYmKGY9cykscz5oJiYoaD1zKSx5PWwqbCptLChkPU1hdGgubWF4KGgveSx5L2YpKT5wKXtsLT1zO2JyZWFrfXA9ZH12LnB1c2goYT17dmFsdWU6bCxkaWNlOnU8YyxjaGlsZHJlbjpnLnNsaWNlKGIsXyl9KSxhLmRpY2U/d2QoYSxuLGkscix4P2krPWMqbC94Om8pOkRkKGEsbixpLHg/bis9dSpsL3g6cixvKSx4LT1sLGI9X31yZXR1cm4gdn12YXIgemQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixpLHIsbyl7RmQoZSx0LG4saSxyLG8pfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KExkKSxWZD1mdW5jdGlvbigpe3ZhciB0PXpkLGU9ITEsbj0xLGk9MSxyPVswXSxvPWRkLGE9ZGQscz1kZCx1PWRkLGM9ZGQ7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1uLHQueTE9aSx0LmVhY2hCZWZvcmUoZikscj1bMF0sZSYmdC5lYWNoQmVmb3JlKF9kKSx0fWZ1bmN0aW9uIGYoZSl7dmFyIG49cltlLmRlcHRoXSxpPWUueDArbixsPWUueTArbixmPWUueDEtbixoPWUueTEtbjtmPGkmJihpPWY9KGkrZikvMiksaDxsJiYobD1oPShsK2gpLzIpLGUueDA9aSxlLnkwPWwsZS54MT1mLGUueTE9aCxlLmNoaWxkcmVuJiYobj1yW2UuZGVwdGgrMV09byhlKS8yLGkrPWMoZSktbixsKz1hKGUpLW4sZi09cyhlKS1uLGgtPXUoZSktbixmPGkmJihpPWY9KGkrZikvMiksaDxsJiYobD1oPShsK2gpLzIpLHQoZSxpLGwsZixoKSl9cmV0dXJuIGwucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGwpOmV9LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxpPSt0WzFdLGwpOltuLGldfSxsLnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9aGQoZSksbCk6dH0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTpsLnBhZGRpbmdJbm5lcigpfSxsLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxsKTpvfSxsLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6bC5wYWRkaW5nVG9wKCl9LGwucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxsKTphfSxsLnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxsKTpzfSxsLnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwZCgrdCksbCk6dX0sbC5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnBkKCt0KSxsKTpjfSxsfSxCZD1mdW5jdGlvbih0LGUsbixpLHIpe3ZhciBvLGEscz10LmNoaWxkcmVuLHU9cy5sZW5ndGgsYz1uZXcgQXJyYXkodSsxKTtmb3IoY1swXT1hPW89MDtvPHU7KytvKWNbbysxXT1hKz1zW29dLnZhbHVlOyFmdW5jdGlvbiB0KGUsbixpLHIsbyxhLHUpe2lmKGU+PW4tMSl7dmFyIGw9c1tlXTtyZXR1cm4gbC54MD1yLGwueTA9byxsLngxPWEsdm9pZChsLnkxPXUpfWZvcih2YXIgZj1jW2VdLGg9aS8yK2YsZD1lKzEscD1uLTE7ZDxwOyl7dmFyIG09ZCtwPj4+MTtjW21dPGg/ZD1tKzE6cD1tfWgtY1tkLTFdPGNbZF0taCYmZSsxPGQmJi0tZDt2YXIgeT1jW2RdLWYsdj1pLXk7aWYoYS1yPnUtbyl7dmFyIGc9KHIqdithKnkpL2k7dChlLGQseSxyLG8sZyx1KSx0KGQsbix2LGcsbyxhLHUpfWVsc2V7dmFyIGI9KG8qdit1KnkpL2k7dChlLGQseSxyLG8sYSxiKSx0KGQsbix2LHIsYixhLHUpfX0oMCx1LHQudmFsdWUsZSxuLGkscil9LFVkPWZ1bmN0aW9uKHQsZSxuLGkscil7KDEmdC5kZXB0aD9EZDp3ZCkodCxlLG4saSxyKX0sSGQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixpLHIsbyl7aWYoKGE9dC5fc3F1YXJpZnkpJiZhLnJhdGlvPT09ZSlmb3IodmFyIGEscyx1LGMsbCxmPS0xLGg9YS5sZW5ndGgsZD10LnZhbHVlOysrZjxoOyl7Zm9yKHU9KHM9YVtmXSkuY2hpbGRyZW4sYz1zLnZhbHVlPTAsbD11Lmxlbmd0aDtjPGw7KytjKXMudmFsdWUrPXVbY10udmFsdWU7cy5kaWNlP3dkKHMsbixpLHIsaSs9KG8taSkqcy52YWx1ZS9kKTpEZChzLG4saSxuKz0oci1uKSpzLnZhbHVlL2QsbyksZC09cy52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PWE9RmQoZSx0LG4saSxyLG8pLGEucmF0aW89ZX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufShMZCkscWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEsaT10Lmxlbmd0aCxyPXRbaS0xXSxvPTA7KytuPGk7KW8rPShlPXIpWzFdKihyPXRbbl0pWzBdLWVbMF0qclsxXTtyZXR1cm4gby8yfSxHZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixpPS0xLHI9dC5sZW5ndGgsbz0wLGE9MCxzPXRbci0xXSx1PTA7KytpPHI7KXUrPW49KGU9cylbMF0qKHM9dFtpXSlbMV0tc1swXSplWzFdLG8rPShlWzBdK3NbMF0pKm4sYSs9KGVbMV0rc1sxXSkqbjtyZXR1cm5bby8odSo9MyksYS91XX0sV2Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pLShlWzFdLXRbMV0pKihuWzBdLXRbMF0pfTtmdW5jdGlvbiBZZCh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBRZCh0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bMCwxXSxpPTIscj0yO3I8ZTsrK3Ipe2Zvcig7aT4xJiZXZCh0W25baS0yXV0sdFtuW2ktMV1dLHRbcl0pPD0wOyktLWk7bltpKytdPXJ9cmV0dXJuIG4uc2xpY2UoMCxpKX12YXIgWmQ9ZnVuY3Rpb24odCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixpPW5ldyBBcnJheShuKSxyPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpaVtlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKGkuc29ydChZZCksZT0wO2U8bjsrK2UpcltlXT1baVtlXVswXSwtaVtlXVsxXV07dmFyIG89UWQoaSksYT1RZChyKSxzPWFbMF09PT1vWzBdLHU9YVthLmxlbmd0aC0xXT09PW9bby5sZW5ndGgtMV0sYz1bXTtmb3IoZT1vLmxlbmd0aC0xO2U+PTA7LS1lKWMucHVzaCh0W2lbb1tlXV1bMl1dKTtmb3IoZT0rcztlPGEubGVuZ3RoLXU7KytlKWMucHVzaCh0W2lbYVtlXV1bMl1dKTtyZXR1cm4gY30sS2Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4saSxyPXQubGVuZ3RoLG89dFtyLTFdLGE9ZVswXSxzPWVbMV0sdT1vWzBdLGM9b1sxXSxsPSExLGY9MDtmPHI7KytmKW49KG89dFtmXSlbMF0sKGk9b1sxXSk+cyE9Yz5zJiZhPCh1LW4pKihzLWkpLyhjLWkpK24mJihsPSFsKSx1PW4sYz1pO3JldHVybiBsfSxYZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixpPS0xLHI9dC5sZW5ndGgsbz10W3ItMV0sYT1vWzBdLHM9b1sxXSx1PTA7KytpPHI7KWU9YSxuPXMsZS09YT0obz10W2ldKVswXSxuLT1zPW9bMV0sdSs9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiB1fSwkZD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxKZD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLHRwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciBpLHI7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIG87aWYobnVsbCE9aSlvPWksaT1udWxsO2Vsc2UgZG97aT0yKmUoKS0xLG89MiplKCktMSxyPWkqaStvKm99d2hpbGUoIXJ8fHI+MSk7cmV0dXJuIHQrbipvKk1hdGguc3FydCgtMipNYXRoLmxvZyhyKS9yKX19cmV0dXJuIG4uc291cmNlPXQsbn0oJGQpLGVwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PXRwLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSxucD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCksaXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPW5wLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KCRkKSxycD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufSgkZCksb3A9QXJyYXkucHJvdG90eXBlLGFwPW9wLm1hcCxzcD1vcC5zbGljZSx1cD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBjcCh0KXt2YXIgZT1abygpLG49W10saT11cDtmdW5jdGlvbiByKHIpe3ZhciBvPXIrIiIsYT1lLmdldChvKTtpZighYSl7aWYoaSE9PXVwKXJldHVybiBpO2Uuc2V0KG8sYT1uLnB1c2gocikpfXJldHVybiB0WyhhLTEpJXQubGVuZ3RoXX1yZXR1cm4gdD1udWxsPT10P1tdOnNwLmNhbGwodCksci5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG4uc2xpY2UoKTtuPVtdLGU9Wm8oKTtmb3IodmFyIGksbyxhPS0xLHM9dC5sZW5ndGg7KythPHM7KWUuaGFzKG89KGk9dFthXSkrIiIpfHxlLnNldChvLG4ucHVzaChpKSk7cmV0dXJuIHJ9LHIucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9c3AuY2FsbChlKSxyKTp0LnNsaWNlKCl9LHIudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LHIpOml9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBjcCgpLmRvbWFpbihuKS5yYW5nZSh0KS51bmtub3duKGkpfSxyfWZ1bmN0aW9uIGxwKCl7dmFyIHQsZSxuPWNwKCkudW5rbm93bih2b2lkIDApLGk9bi5kb21haW4scj1uLnJhbmdlLG89WzAsMV0sYT0hMSxzPTAsdT0wLGM9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPWkoKS5sZW5ndGgsbD1vWzFdPG9bMF0sZj1vW2wtMF0saD1vWzEtbF07dD0oaC1mKS9NYXRoLm1heCgxLG4tcysyKnUpLGEmJih0PU1hdGguZmxvb3IodCkpLGYrPShoLWYtdCoobi1zKSkqYyxlPXQqKDEtcyksYSYmKGY9TWF0aC5yb3VuZChmKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPXgobikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBmK3QqZX0pO3JldHVybiByKGw/ZC5yZXZlcnNlKCk6ZCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbCgpKTppKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89Wyt0WzBdLCt0WzFdXSxsKCkpOm8uc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvPVsrdFswXSwrdFsxXV0sYT0hMCxsKCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxsKCkpOmF9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz11PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxsKCkpOnV9LG4uYWxpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSxsKCkpOmN9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBscCgpLmRvbWFpbihpKCkpLnJhbmdlKG8pLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIodSkuYWxpZ24oYyl9LGwoKX1mdW5jdGlvbiBmcCgpe3JldHVybiBmdW5jdGlvbiB0KGUpe3ZhciBuPWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQobigpKX0sZX0obHAoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBocD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGRwPWZ1bmN0aW9uKHQpe3JldHVybit0fSxwcD1bMCwxXTtmdW5jdGlvbiBtcCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfTpocChlKX1mdW5jdGlvbiB5cCh0LGUsbixpKXt2YXIgcj10WzBdLG89dFsxXSxhPWVbMF0scz1lWzFdO3JldHVybiBvPHI/KHI9bihvLHIpLGE9aShzLGEpKToocj1uKHIsbyksYT1pKGEscykpLGZ1bmN0aW9uKHQpe3JldHVybiBhKHIodCkpfX1mdW5jdGlvbiB2cCh0LGUsbixpKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxzPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8cjspb1tzXT1uKHRbc10sdFtzKzFdKSxhW3NdPWkoZVtzXSxlW3MrMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj11KHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0ob1tuXShlKSl9fWZ1bmN0aW9uIGdwKHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpfWZ1bmN0aW9uIGJwKHQsZSl7dmFyIG4saSxyLG89cHAsYT1wcCxzPUtuLHU9ITE7ZnVuY3Rpb24gYygpe3JldHVybiBuPU1hdGgubWluKG8ubGVuZ3RoLGEubGVuZ3RoKT4yP3ZwOnlwLGk9cj1udWxsLGx9ZnVuY3Rpb24gbChlKXtyZXR1cm4oaXx8KGk9bihvLGEsdT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgaT10KGU9K2Usbj0rbik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1lPzA6dD49bj8xOmkodCl9fX0odCk6dCxzKSkpKCtlKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHJ8fChyPW4oYSxvLG1wLHU/ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9dChlPStlLG49K24pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDw9MD9lOnQ+PTE/bjppKHQpfX19KGUpOmUpKSkoK3QpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hcC5jYWxsKHQsZHApLGMoKSk6by5zbGljZSgpfSxsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXNwLmNhbGwodCksYygpKTphLnNsaWNlKCl9LGwucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYT1zcC5jYWxsKHQpLHM9WG4sYygpfSxsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEhdCxjKCkpOnV9LGwuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxjKCkpOnN9LGMoKX12YXIgX3A9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9dFswXSxvPXRbdC5sZW5ndGgtMV0sYT1rKHIsbyxudWxsPT1lPzEwOmUpO3N3aXRjaCgobj1NcyhudWxsPT1uPyIsZiI6bikpLnR5cGUpe2Nhc2UicyI6dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMociksTWF0aC5hYnMobykpO3JldHVybiBudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4oaT1XcyhhLHMpKXx8KG4ucHJlY2lzaW9uPWkpLExzKG4scyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9bi5wcmVjaXNpb258fGlzTmFOKGk9WXMoYSxNYXRoLm1heChNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkpKXx8KG4ucHJlY2lzaW9uPWktKCJlIj09PW4udHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1uLnByZWNpc2lvbnx8aXNOYU4oaT1HcyhhKSl8fChuLnByZWNpc2lvbj1pLTIqKCIlIj09PW4udHlwZSkpfXJldHVybiBEcyhuKX07ZnVuY3Rpb24gd3AodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBPKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gX3AoZSgpLHQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIGkscj1lKCksbz0wLGE9ci5sZW5ndGgtMSxzPXJbb10sdT1yW2FdO3JldHVybiB1PHMmJihpPXMscz11LHU9aSxpPW8sbz1hLGE9aSksKGk9VChzLHUsbikpPjA/aT1UKHM9TWF0aC5mbG9vcihzL2kpKmksdT1NYXRoLmNlaWwodS9pKSppLG4pOmk8MCYmKGk9VChzPU1hdGguY2VpbChzKmkpL2ksdT1NYXRoLmZsb29yKHUqaSkvaSxuKSksaT4wPyhyW29dPU1hdGguZmxvb3Iocy9pKSppLHJbYV09TWF0aC5jZWlsKHUvaSkqaSxlKHIpKTppPDAmJihyW29dPU1hdGguY2VpbChzKmkpL2ksclthXT1NYXRoLmZsb29yKHUqaSkvaSxlKHIpKSx0fSx0fWZ1bmN0aW9uIHhwKCl7dmFyIHQ9YnAobXAsR24pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3AodCx4cCgpKX0sd3AodCl9ZnVuY3Rpb24gU3AoKXt2YXIgdD1bMCwxXTtmdW5jdGlvbiBlKHQpe3JldHVybit0fXJldHVybiBlLmludmVydD1lLGUuZG9tYWluPWUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YXAuY2FsbChuLGRwKSxlKTp0LnNsaWNlKCl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBTcCgpLmRvbWFpbih0KX0sd3AoZSl9dmFyIEVwPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT0wLHI9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxvPXRbaV0sYT10W3JdO3JldHVybiBhPG8mJihuPWksaT1yLHI9bixuPW8sbz1hLGE9biksdFtpXT1lLmZsb29yKG8pLHRbcl09ZS5jZWlsKGEpLHR9O2Z1bmN0aW9uIENwKHQsZSl7cmV0dXJuKGU9TWF0aC5sb2coZS90KSk/ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4vdCkvZX06aHAoZSl9ZnVuY3Rpb24gT3AodCxlKXtyZXR1cm4gdDwwP2Z1bmN0aW9uKG4pe3JldHVybi1NYXRoLnBvdygtZSxuKSpNYXRoLnBvdygtdCwxLW4pfTpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZSxuKSpNYXRoLnBvdyh0LDEtbil9fWZ1bmN0aW9uIFRwKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBrcCh0KXtyZXR1cm4gMTA9PT10P1RwOnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KHQsZSl9fWZ1bmN0aW9uIEFwKHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpL3R9KX1mdW5jdGlvbiBJcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBqcCgpe3ZhciB0PWJwKENwLE9wKS5kb21haW4oWzEsMTBdKSxlPXQuZG9tYWluLG49MTAsaT1BcCgxMCkscj1rcCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBpPUFwKG4pLHI9a3AobiksZSgpWzBdPDAmJihpPUlwKGkpLHI9SXAocikpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxvKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlKHQpLG8oKSk6ZSgpfSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBvLGE9ZSgpLHM9YVswXSx1PWFbYS5sZW5ndGgtMV07KG89dTxzKSYmKGg9cyxzPXUsdT1oKTt2YXIgYyxsLGYsaD1pKHMpLGQ9aSh1KSxwPW51bGw9PXQ/MTA6K3QsbT1bXTtpZighKG4lMSkmJmQtaDxwKXtpZihoPU1hdGgucm91bmQoaCktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7aDxkOysraClmb3IobD0xLGM9cihoKTtsPG47KytsKWlmKCEoKGY9YypsKTxzKSl7aWYoZj51KWJyZWFrO20ucHVzaChmKX19ZWxzZSBmb3IoO2g8ZDsrK2gpZm9yKGw9bi0xLGM9cihoKTtsPj0xOy0tbClpZighKChmPWMqbCk8cykpe2lmKGY+dSlicmVhazttLnB1c2goZil9fWVsc2UgbT1PKGgsZCxNYXRoLm1pbihkLWgscCkpLm1hcChyKTtyZXR1cm4gbz9tLnJldmVyc2UoKTptfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxvKXtpZihudWxsPT1vJiYobz0xMD09PW4/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbyYmKG89RHMobykpLGU9PT0xLzApcmV0dXJuIG87bnVsbD09ZSYmKGU9MTApO3ZhciBhPU1hdGgubWF4KDEsbiplL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10L3IoTWF0aC5yb3VuZChpKHQpKSk7cmV0dXJuIGUqbjxuLS41JiYoZSo9biksZTw9YT9vKHQpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoRXAoZSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gcihNYXRoLmZsb29yKGkodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gcihNYXRoLmNlaWwoaSh0KSkpfX0pKX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGdwKHQsanAoKS5iYXNlKG4pKX0sdH1mdW5jdGlvbiBNcCh0LGUpe3JldHVybiB0PDA/LU1hdGgucG93KC10LGUpOk1hdGgucG93KHQsZSl9ZnVuY3Rpb24gUHAoKXt2YXIgdD0xLGU9YnAoZnVuY3Rpb24oZSxuKXtyZXR1cm4obj1NcChuLHQpLShlPU1wKGUsdCkpKT9mdW5jdGlvbihpKXtyZXR1cm4oTXAoaSx0KS1lKS9ufTpocChuKX0sZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj1NcChuLHQpLShlPU1wKGUsdCkpLGZ1bmN0aW9uKGkpe3JldHVybiBNcChlK24qaSwxL3QpfX0pLG49ZS5kb21haW47cmV0dXJuIGUuZXhwb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2UsbihuKCkpKTp0fSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3AoZSxQcCgpLmV4cG9uZW50KHQpKX0sd3AoZSl9ZnVuY3Rpb24gTnAoKXtyZXR1cm4gUHAoKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gUnAoKXt2YXIgdD1bXSxlPVtdLG49W107ZnVuY3Rpb24gcigpe3ZhciBpPTAscj1NYXRoLm1heCgxLGUubGVuZ3RoKTtmb3Iobj1uZXcgQXJyYXkoci0xKTsrK2k8cjspbltpLTFdPWoodCxpL3IpO3JldHVybiBvfWZ1bmN0aW9uIG8odCl7aWYoIWlzTmFOKHQ9K3QpKXJldHVybiBlW3Uobix0KV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGkpe3ZhciByPWUuaW5kZXhPZihpKTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP25bci0xXTp0WzBdLHI8bi5sZW5ndGg/bltyXTp0W3QubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt0PVtdO2Zvcih2YXIgbixvPTAsYT1lLmxlbmd0aDtvPGE7KytvKW51bGw9PShuPWVbb10pfHxpc05hTihuPStuKXx8dC5wdXNoKG4pO3JldHVybiB0LnNvcnQoaSkscigpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXNwLmNhbGwodCkscigpKTplLnNsaWNlKCl9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFJwKCkuZG9tYWluKHQpLnJhbmdlKGUpfSxvfWZ1bmN0aW9uIERwKCl7dmFyIHQ9MCxlPTEsbj0xLGk9Wy41XSxyPVswLDFdO2Z1bmN0aW9uIG8odCl7aWYodDw9dClyZXR1cm4gclt1KGksdCwwLG4pXX1mdW5jdGlvbiBhKCl7dmFyIHI9LTE7Zm9yKGk9bmV3IEFycmF5KG4pOysrcjxuOylpW3JdPSgocisxKSplLShyLW4pKnQpLyhuKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGEoKSk6W3QsZV19LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49KHI9c3AuY2FsbCh0KSkubGVuZ3RoLTEsYSgpKTpyLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXIuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTphPDE/W3QsaVswXV06YT49bj9baVtuLTFdLGVdOltpW2EtMV0saVthXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBEcCgpLmRvbWFpbihbdCxlXSkucmFuZ2Uocil9LHdwKG8pfWZ1bmN0aW9uIExwKCl7dmFyIHQ9Wy41XSxlPVswLDFdLG49MTtmdW5jdGlvbiBpKGkpe2lmKGk8PWkpcmV0dXJuIGVbdSh0LGksMCxuKV19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXNwLmNhbGwociksbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aC0xKSxpKTp0LnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9c3AuY2FsbChyKSxuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoLTEpLGkpOmUuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obil7dmFyIGk9ZS5pbmRleE9mKG4pO3JldHVyblt0W2ktMV0sdFtpXV19LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBMcCgpLmRvbWFpbih0KS5yYW5nZShlKX0saX12YXIgRnA9bmV3IERhdGUsenA9bmV3IERhdGU7ZnVuY3Rpb24gVnAodCxlLG4saSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX1yZXR1cm4gci5mbG9vcj1yLHIuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LHIucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPXIuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LHIub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LHIucmFuZ2U9ZnVuY3Rpb24obixpLG8pe3ZhciBhLHM9W107aWYobj1yLmNlaWwobiksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKG48aSYmbz4wKSlyZXR1cm4gcztkb3tzLnB1c2goYT1uZXcgRGF0ZSgrbikpLGUobixvKSx0KG4pfXdoaWxlKGE8biYmbjxpKTtyZXR1cm4gc30sci5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIFZwKGZ1bmN0aW9uKGUpe2lmKGU+PWUpZm9yKDt0KGUpLCFuKGUpOyllLnNldFRpbWUoZS0xKX0sZnVuY3Rpb24odCxpKXtpZih0Pj10KWlmKGk8MClmb3IoOysraTw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0taT49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KX0sbiYmKHIuY291bnQ9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gRnAuc2V0VGltZSgrZSksenAuc2V0VGltZSgraSksdChGcCksdCh6cCksTWF0aC5mbG9vcihuKEZwLHpwKSl9LHIuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUpJXQ9PTB9OmZ1bmN0aW9uKGUpe3JldHVybiByLmNvdW50KDAsZSkldD09MH0pOnI6bnVsbH0pLHJ9dmFyIEJwPVZwKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSk7QnAuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9WcChmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL3QpKnQpfSxmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSxmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KTpCcDpudWxsfTt2YXIgVXA9QnAsSHA9QnAucmFuZ2UscXA9NmU0LEdwPTYwNDhlNSxXcD1WcChmdW5jdGlvbih0KXt0LnNldFRpbWUoMWUzKk1hdGguZmxvb3IodC8xZTMpKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzFlM30sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSksWXA9V3AsUXA9V3AucmFuZ2UsWnA9VnAoZnVuY3Rpb24odCl7dC5zZXRUaW1lKE1hdGguZmxvb3IodC9xcCkqcXApfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKnFwKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS9xcH0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSksS3A9WnAsWHA9WnAucmFuZ2UsJHA9VnAoZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRUaW1lem9uZU9mZnNldCgpKnFwJTM2ZTU7ZTwwJiYoZSs9MzZlNSksdC5zZXRUaW1lKDM2ZTUqTWF0aC5mbG9vcigoK3QtZSkvMzZlNSkrZSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0SG91cnMoKX0pLEpwPSRwLHRtPSRwLnJhbmdlLGVtPVZwKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQtKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnFwKS84NjRlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSxubT1lbSxpbT1lbS5yYW5nZTtmdW5jdGlvbiBybSh0KXtyZXR1cm4gVnAoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpxcCkvR3B9KX12YXIgb209cm0oMCksYW09cm0oMSksc209cm0oMiksdW09cm0oMyksY209cm0oNCksbG09cm0oNSksZm09cm0oNiksaG09b20ucmFuZ2UsZG09YW0ucmFuZ2UscG09c20ucmFuZ2UsbW09dW0ucmFuZ2UseW09Y20ucmFuZ2Usdm09bG0ucmFuZ2UsZ209Zm0ucmFuZ2UsYm09VnAoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksX209Ym0sd209Ym0ucmFuZ2UseG09VnAoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTt4bS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1ZwKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsbil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrbip0KX0pOm51bGx9O3ZhciBTbT14bSxFbT14bS5yYW5nZSxDbT1WcChmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSpxcCl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvcXB9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLE9tPUNtLFRtPUNtLnJhbmdlLGttPVZwKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLEFtPWttLEltPWttLnJhbmdlLGptPVZwKGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLE1tPWptLFBtPWptLnJhbmdlO2Z1bmN0aW9uIE5tKHQpe3JldHVybiBWcChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL0dwfSl9dmFyIFJtPU5tKDApLERtPU5tKDEpLExtPU5tKDIpLEZtPU5tKDMpLHptPU5tKDQpLFZtPU5tKDUpLEJtPU5tKDYpLFVtPVJtLnJhbmdlLEhtPURtLnJhbmdlLHFtPUxtLnJhbmdlLEdtPUZtLnJhbmdlLFdtPXptLnJhbmdlLFltPVZtLnJhbmdlLFFtPUJtLnJhbmdlLFptPVZwKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLEttPVptLFhtPVptLnJhbmdlLCRtPVZwKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7JG0uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9WcChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLG4pe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK24qdCl9KTpudWxsfTt2YXIgSm09JG0sdHk9JG0ucmFuZ2U7ZnVuY3Rpb24gZXkodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIG55KHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGl5KHQpe3JldHVybnt5OnQsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHJ5KHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUsaT10LnRpbWUscj10LnBlcmlvZHMsbz10LmRheXMsYT10LnNob3J0RGF5cyxzPXQubW9udGhzLHU9dC5zaG9ydE1vbnRocyxjPXl5KHIpLGw9dnkociksZj15eShvKSxoPXZ5KG8pLGQ9eXkoYSkscD12eShhKSxtPXl5KHMpLHk9dnkocyksdj15eSh1KSxnPXZ5KHUpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHVbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpMeSxlOkx5LGY6VXksSDpGeSxJOnp5LGo6VnksTDpCeSxtOkh5LE06cXkscDpmdW5jdGlvbih0KXtyZXR1cm4gclsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUTpndixzOmJ2LFM6R3ksdTpXeSxVOll5LFY6UXksdzpaeSxXOkt5LHg6bnVsbCxYOm51bGwseTpYeSxZOiR5LFo6SnksIiUiOnZ2fSxfPXthOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0VVRDRGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiB1W3QuZ2V0VVRDTW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6dHYsZTp0dixmOm92LEg6ZXYsSTpudixqOml2LEw6cnYsbTphdixNOnN2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIHJbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LFE6Z3YsczpidixTOnV2LHU6Y3YsVTpsdixWOmZ2LHc6aHYsVzpkdix4Om51bGwsWDpudWxsLHk6cHYsWTptdixaOnl2LCIlIjp2dn0sdz17YTpmdW5jdGlvbih0LGUsbil7dmFyIGk9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lnc9cFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1mLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQudz1oW2lbMF0udG9Mb3dlckNhc2UoKV0sbitpWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gaT8odC5tPWdbaVswXS50b0xvd2VyQ2FzZSgpXSxuK2lbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIGk9bS5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0Lm09eVtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gRSh0LGUsbixpKX0sZDpUeSxlOlR5LGY6UHksSDpBeSxJOkF5LGo6a3ksTDpNeSxtOk95LE06SXkscDpmdW5jdGlvbih0LGUsbil7dmFyIGk9Yy5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LnA9bFtpWzBdLnRvTG93ZXJDYXNlKCldLG4raVswXS5sZW5ndGgpOi0xfSxROlJ5LHM6RHksUzpqeSx1OmJ5LFU6X3ksVjp3eSx3Omd5LFc6eHkseDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIEUodCxuLGUsaSl9LFg6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBFKHQsaSxlLG4pfSx5OkV5LFk6U3ksWjpDeSwiJSI6Tnl9O2Z1bmN0aW9uIHgodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvLGE9W10scz0tMSx1PTAsYz10Lmxlbmd0aDtmb3IobiBpbnN0YW5jZW9mIERhdGV8fChuPW5ldyBEYXRlKCtuKSk7KytzPGM7KTM3PT09dC5jaGFyQ29kZUF0KHMpJiYoYS5wdXNoKHQuc2xpY2UodSxzKSksbnVsbCE9KHI9bHlbaT10LmNoYXJBdCgrK3MpXSk/aT10LmNoYXJBdCgrK3MpOnI9ImUiPT09aT8iICI6IjAiLChvPWVbaV0pJiYoaT1vKG4scikpLGEucHVzaChpKSx1PXMrMSk7cmV0dXJuIGEucHVzaCh0LnNsaWNlKHUscykpLGEuam9pbigiIil9fWZ1bmN0aW9uIFModCxlKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGkscixvPWl5KDE5MDApO2lmKEUobyx0LG4rPSIiLDApIT1uLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBvKXJldHVybiBuZXcgRGF0ZShvLlEpO2lmKCJwImluIG8mJihvLkg9by5IJTEyKzEyKm8ucCksIlYiaW4gbyl7aWYoby5WPDF8fG8uVj41MylyZXR1cm4gbnVsbDsidyJpbiBvfHwoby53PTEpLCJaImluIG8/KGk9KHI9KGk9bnkoaXkoby55KSkpLmdldFVUQ0RheSgpKT40fHwwPT09cj9EbS5jZWlsKGkpOkRtKGkpLGk9TW0ub2Zmc2V0KGksNyooby5WLTEpKSxvLnk9aS5nZXRVVENGdWxsWWVhcigpLG8ubT1pLmdldFVUQ01vbnRoKCksby5kPWkuZ2V0VVRDRGF0ZSgpKyhvLncrNiklNyk6KGk9KHI9KGk9ZShpeShvLnkpKSkuZ2V0RGF5KCkpPjR8fDA9PT1yP2FtLmNlaWwoaSk6YW0oaSksaT1ubS5vZmZzZXQoaSw3KihvLlYtMSkpLG8ueT1pLmdldEZ1bGxZZWFyKCksby5tPWkuZ2V0TW9udGgoKSxvLmQ9aS5nZXREYXRlKCkrKG8udys2KSU3KX1lbHNlKCJXImluIG98fCJVImluIG8pJiYoInciaW4gb3x8KG8udz0idSJpbiBvP28udSU3OiJXImluIG8/MTowKSxyPSJaImluIG8/bnkoaXkoby55KSkuZ2V0VVRDRGF5KCk6ZShpeShvLnkpKS5nZXREYXkoKSxvLm09MCxvLmQ9IlciaW4gbz8oby53KzYpJTcrNypvLlctKHIrNSklNzpvLncrNypvLlUtKHIrNiklNyk7cmV0dXJuIloiaW4gbz8oby5IKz1vLlovMTAwfDAsby5NKz1vLlolMTAwLG55KG8pKTplKG8pfX1mdW5jdGlvbiBFKHQsZSxuLGkpe2Zvcih2YXIgcixvLGE9MCxzPWUubGVuZ3RoLHU9bi5sZW5ndGg7YTxzOyl7aWYoaT49dSlyZXR1cm4tMTtpZigzNz09PShyPWUuY2hhckNvZGVBdChhKyspKSl7aWYocj1lLmNoYXJBdChhKyspLCEobz13W3IgaW4gbHk/ZS5jaGFyQXQoYSsrKTpyXSl8fChpPW8odCxuLGkpKTwwKXJldHVybi0xfWVsc2UgaWYociE9bi5jaGFyQ29kZUF0KGkrKykpcmV0dXJuLTF9cmV0dXJuIGl9cmV0dXJuIGIueD14KG4sYiksYi5YPXgoaSxiKSxiLmM9eChlLGIpLF8ueD14KG4sXyksXy5YPXgoaSxfKSxfLmM9eChlLF8pLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9eCh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1TKHQrPSIiLGV5KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9eCh0Kz0iIixfKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1TKHQsbnkpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgb3ksYXksc3ksdXksY3ksbHk9eyItIjoiIixfOiIgIiwwOiIwIn0sZnk9L15ccypcZCsvLGh5PS9eJS8sZHk9L1tcXF4kKis/fFtcXSgpLnt9XS9nO2Z1bmN0aW9uIHB5KHQsZSxuKXt2YXIgaT10PDA/Ii0iOiIiLHI9KGk/LXQ6dCkrIiIsbz1yLmxlbmd0aDtyZXR1cm4gaSsobzxuP25ldyBBcnJheShuLW8rMSkuam9pbihlKStyOnIpfWZ1bmN0aW9uIG15KHQpe3JldHVybiB0LnJlcGxhY2UoZHksIlxcJCYiKX1mdW5jdGlvbiB5eSh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAobXkpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiB2eSh0KXtmb3IodmFyIGU9e30sbj0tMSxpPXQubGVuZ3RoOysrbjxpOyllW3Rbbl0udG9Mb3dlckNhc2UoKV09bjtyZXR1cm4gZX1mdW5jdGlvbiBneSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBieSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIGk/KHQudT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3eSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVj0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4eSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQuVz0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbis0KSk7cmV0dXJuIGk/KHQueT0raVswXSxuK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFeSh0LGUsbil7dmFyIGk9ZnkuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIGk/KHQueT0raVswXSsoK2lbMF0+Njg/MTkwMDoyZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEN5KHQsZSxuKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIGk/KHQuWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3kodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiBpPyh0Lm09aVswXS0xLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGt5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5tPTAsdC5kPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEF5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5IPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEl5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5NPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGp5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gaT8odC5TPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE15KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzMpKTtyZXR1cm4gaT8odC5MPStpWzBdLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFB5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobixuKzYpKTtyZXR1cm4gaT8odC5MPU1hdGguZmxvb3IoaVswXS8xZTMpLG4raVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE55KHQsZSxuKXt2YXIgaT1oeS5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gaT9uK2lbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIFJ5KHQsZSxuKXt2YXIgaT1meS5leGVjKGUuc2xpY2UobikpO3JldHVybiBpPyh0LlE9K2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRHkodCxlLG4pe3ZhciBpPWZ5LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIGk/KHQuUT0xZTMqK2lbMF0sbitpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTHkodCxlKXtyZXR1cm4gcHkodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBGeSh0LGUpe3JldHVybiBweSh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiB6eSh0LGUpe3JldHVybiBweSh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gVnkodCxlKXtyZXR1cm4gcHkoMStubS5jb3VudChTbSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEJ5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBVeSh0LGUpe3JldHVybiBCeSh0LGUpKyIwMDAifWZ1bmN0aW9uIEh5KHQsZSl7cmV0dXJuIHB5KHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gcXkodCxlKXtyZXR1cm4gcHkodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBHeSh0LGUpe3JldHVybiBweSh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFd5KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBZeSh0LGUpe3JldHVybiBweShvbS5jb3VudChTbSh0KSx0KSxlLDIpfWZ1bmN0aW9uIFF5KHQsZSl7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gdD1uPj00fHwwPT09bj9jbSh0KTpjbS5jZWlsKHQpLHB5KGNtLmNvdW50KFNtKHQpLHQpKyg0PT09U20odCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gWnkodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gS3kodCxlKXtyZXR1cm4gcHkoYW0uY291bnQoU20odCksdCksZSwyKX1mdW5jdGlvbiBYeSh0LGUpe3JldHVybiBweSh0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gJHkodCxlKXtyZXR1cm4gcHkodC5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIEp5KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrcHkoZS82MHwwLCIwIiwyKStweShlJTYwLCIwIiwyKX1mdW5jdGlvbiB0dih0LGUpe3JldHVybiBweSh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIGV2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uIG52KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBpdih0LGUpe3JldHVybiBweSgxK01tLmNvdW50KEptKHQpLHQpLGUsMyl9ZnVuY3Rpb24gcnYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG92KHQsZSl7cmV0dXJuIHJ2KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gYXYodCxlKXtyZXR1cm4gcHkodC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBzdih0LGUpe3JldHVybiBweSh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIHV2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gY3YodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGx2KHQsZSl7cmV0dXJuIHB5KFJtLmNvdW50KEptKHQpLHQpLGUsMil9ZnVuY3Rpb24gZnYodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP3ptKHQpOnptLmNlaWwodCkscHkoem0uY291bnQoSm0odCksdCkrKDQ9PT1KbSh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBodih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBkdih0LGUpe3JldHVybiBweShEbS5jb3VudChKbSh0KSx0KSxlLDIpfWZ1bmN0aW9uIHB2KHQsZSl7cmV0dXJuIHB5KHQuZ2V0VVRDRnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBtdih0LGUpe3JldHVybiBweSh0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geXYoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHZ2KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGd2KHQpe3JldHVybit0fWZ1bmN0aW9uIGJ2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gX3YodCl7cmV0dXJuIG95PXJ5KHQpLGF5PW95LmZvcm1hdCxzeT1veS5wYXJzZSx1eT1veS51dGNGb3JtYXQsY3k9b3kudXRjUGFyc2Usb3l9X3Yoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgd3Y9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dXkoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLHh2PStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06Y3koIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLFN2PTFlMyxFdj02MCpTdixDdj02MCpFdixPdj0yNCpDdixUdj03Kk92LGt2PTMwKk92LEF2PTM2NSpPdjtmdW5jdGlvbiBJdih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24ganYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gTXYodCxlLG4saSxvLGEscyx1LGMpe3ZhciBsPWJwKG1wLEduKSxmPWwuaW52ZXJ0LGg9bC5kb21haW4sZD1jKCIuJUwiKSxwPWMoIjolUyIpLG09YygiJUk6JU0iKSx5PWMoIiVJICVwIiksdj1jKCIlYSAlZCIpLGc9YygiJWIgJWQiKSxiPWMoIiVCIiksXz1jKCIlWSIpLHc9W1tzLDEsU3ZdLFtzLDUsNSpTdl0sW3MsMTUsMTUqU3ZdLFtzLDMwLDMwKlN2XSxbYSwxLEV2XSxbYSw1LDUqRXZdLFthLDE1LDE1KkV2XSxbYSwzMCwzMCpFdl0sW28sMSxDdl0sW28sMywzKkN2XSxbbyw2LDYqQ3ZdLFtvLDEyLDEyKkN2XSxbaSwxLE92XSxbaSwyLDIqT3ZdLFtuLDEsVHZdLFtlLDEsa3ZdLFtlLDMsMyprdl0sW3QsMSxBdl1dO2Z1bmN0aW9uIHgocil7cmV0dXJuKHMocik8cj9kOmEocik8cj9wOm8ocik8cj9tOmkocik8cj95OmUocik8cj9uKHIpPHI/djpnOnQocik8cj9iOl8pKHIpfWZ1bmN0aW9uIFMoZSxuLGksbyl7aWYobnVsbD09ZSYmKGU9MTApLCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIGE9TWF0aC5hYnMoaS1uKS9lLHM9cihmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KHcsYSk7cz09PXcubGVuZ3RoPyhvPWsobi9BdixpL0F2LGUpLGU9dCk6cz8obz0ocz13W2Evd1tzLTFdWzJdPHdbc11bMl0vYT9zLTE6c10pWzFdLGU9c1swXSk6KG89TWF0aC5tYXgoayhuLGksZSksMSksZT11KX1yZXR1cm4gbnVsbD09bz9lOmUuZXZlcnkobyl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShmKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChhcC5jYWxsKHQsanYpKTpoKCkubWFwKEl2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLGk9aCgpLHI9aVswXSxvPWlbaS5sZW5ndGgtMV0sYT1vPHI7cmV0dXJuIGEmJihuPXIscj1vLG89biksbj0obj1TKHQscixvLGUpKT9uLnJhbmdlKHIsbysxKTpbXSxhP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP3g6YyhlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49aCgpO3JldHVybih0PVModCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2goRXAobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGdwKGwsTXYodCxlLG4saSxvLGEscyx1LGMpKX0sbH12YXIgUHY9ZnVuY3Rpb24oKXtyZXR1cm4gTXYoU20sX20sb20sbm0sSnAsS3AsWXAsVXAsYXkpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKX0sTnY9ZnVuY3Rpb24oKXtyZXR1cm4gTXYoSm0sS20sUm0sTW0sQW0sT20sWXAsVXAsdXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX07ZnVuY3Rpb24gUnYodCl7dmFyIGU9MCxuPTEsaT0xLHI9ITE7ZnVuY3Rpb24gbyhuKXt2YXIgbz0obi1lKSppO3JldHVybiB0KHI/TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTpvKX1yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KGU9K3RbMF0pPT0obj0rdFsxXSk/MDoxLyhuLWUpLG8pOltlLG5dfSxvLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhdCxvKTpyfSxvLmludGVycG9sYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBSdih0KS5kb21haW4oW2Usbl0pLmNsYW1wKHIpfSx3cChvKX1mdW5jdGlvbiBEdih0KXt2YXIgZT0wLG49LjUsaT0xLHI9MSxvPTEsYT0hMTtmdW5jdGlvbiBzKGUpe3ZhciBpPS41KygoZT0rZSktbikqKGU8bj9yOm8pO3JldHVybiB0KGE/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGkpKTppKX1yZXR1cm4gcy5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3RbMl0scj0oZT0rdFswXSk9PShuPSt0WzFdKT8wOi41LyhuLWUpLG89bj09PWk/MDouNS8oaS1uKSxzKTpbZSxuLGldfSxzLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxzKTphfSxzLmludGVycG9sYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHMpOnR9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiBEdih0KS5kb21haW4oW2UsbixpXSkuY2xhbXAoYSl9LHdwKHMpfXZhciBMdj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgvNnwwLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KW5baV09IiMiK3Quc2xpY2UoNippLDYqKytpKTtyZXR1cm4gbn0sRnY9THYoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLHp2PUx2KCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKSxWdj1MdigiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2IiksQnY9THYoImE2Y2VlMzFmNzhiNGIyZGY4YTMzYTAyY2ZiOWE5OWUzMWExY2ZkYmY2ZmZmN2YwMGNhYjJkNjZhM2Q5YWZmZmY5OWIxNTkyOCIpLFV2PUx2KCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKSxIdj1MdigiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIikscXY9THYoImU0MWExYzM3N2ViODRkYWY0YTk4NGVhM2ZmN2YwMGZmZmYzM2E2NTYyOGY3ODFiZjk5OTk5OSIpLEd2PUx2KCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKSxXdj1MdigiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIiksWXY9ZnVuY3Rpb24odCl7cmV0dXJuIEJuKHRbdC5sZW5ndGgtMV0pfSxRdj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoTHYpLFp2PVl2KFF2KSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoTHYpLFh2PVl2KEt2KSwkdj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoTHYpLEp2PVl2KCR2KSx0Zz1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoTHYpLGVnPVl2KHRnKSxuZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoTHYpLGlnPVl2KG5nKSxyZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoTHYpLG9nPVl2KHJnKSxhZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoTHYpLHNnPVl2KGFnKSx1Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoTHYpLGNnPVl2KHVnKSxsZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoTHYpLGZnPVl2KGxnKSxoZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoTHYpLGRnPVl2KGhnKSxwZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoTHYpLG1nPVl2KHBnKSx5Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoTHYpLHZnPVl2KHlnKSxnZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoTHYpLGJnPVl2KGdnKSxfZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoTHYpLHdnPVl2KF9nKSx4Zz1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoTHYpLFNnPVl2KHhnKSxFZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoTHYpLENnPVl2KEVnKSxPZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoTHYpLFRnPVl2KE9nKSxrZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoTHYpLEFnPVl2KGtnKSxJZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoTHYpLGpnPVl2KElnKSxNZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoTHYpLFBnPVl2KE1nKSxOZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoTHYpLFJnPVl2KE5nKSxEZz1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoTHYpLExnPVl2KERnKSxGZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoTHYpLHpnPVl2KEZnKSxWZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoTHYpLEJnPVl2KFZnKSxVZz1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoTHYpLEhnPVl2KFVnKSxxZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoTHYpLEdnPVl2KHFnKSxXZz1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoTHYpLFlnPVl2KFdnKSxRZz15aShPbigzMDAsLjUsMCksT24oLTI0MCwuNSwxKSksWmc9eWkoT24oLTEwMCwuNzUsLjM1KSxPbig4MCwxLjUsLjgpKSxLZz15aShPbigyNjAsLjc1LC4zNSksT24oODAsMS41LC44KSksWGc9T24oKSwkZz1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIFhnLmg9MzYwKnQtMTAwLFhnLnM9MS41LTEuNSplLFhnLmw9LjgtLjkqZSxYZysiIn0sSmc9R2UoKSx0Yj1NYXRoLlBJLzMsZWI9MipNYXRoLlBJLzMsbmI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksSmcucj0yNTUqKGU9TWF0aC5zaW4odCkpKmUsSmcuZz0yNTUqKGU9TWF0aC5zaW4odCt0YikpKmUsSmcuYj0yNTUqKGU9TWF0aC5zaW4odCtlYikpKmUsSmcrIiJ9O2Z1bmN0aW9uIGliKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciByYj1pYihMdigiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLG9iPWliKEx2KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksYWI9aWIoTHYoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxzYj1pYihMdigiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLHViPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sY2I9TWF0aC5hYnMsbGI9TWF0aC5hdGFuMixmYj1NYXRoLmNvcyxoYj1NYXRoLm1heCxkYj1NYXRoLm1pbixwYj1NYXRoLnNpbixtYj1NYXRoLnNxcnQseWI9MWUtMTIsdmI9TWF0aC5QSSxnYj12Yi8yLGJiPTIqdmI7ZnVuY3Rpb24gX2IodCl7cmV0dXJuIHQ+PTE/Z2I6dDw9LTE/LWdiOk1hdGguYXNpbih0KX1mdW5jdGlvbiB3Yih0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB4Yih0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBTYih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEViKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIENiKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIE9iKHQsZSxuLGkscixvLGEpe3ZhciBzPXQtbix1PWUtaSxjPShhP286LW8pL21iKHMqcyt1KnUpLGw9Yyp1LGY9LWMqcyxoPXQrbCxkPWUrZixwPW4rbCxtPWkrZix5PShoK3ApLzIsdj0oZCttKS8yLGc9cC1oLGI9bS1kLF89ZypnK2IqYix3PXItbyx4PWgqbS1wKmQsUz0oYjwwPy0xOjEpKm1iKGhiKDAsdyp3Kl8teCp4KSksRT0oeCpiLWcqUykvXyxDPSgteCpnLWIqUykvXyxPPSh4KmIrZypTKS9fLFQ9KC14KmcrYipTKS9fLGs9RS15LEE9Qy12LEk9Ty15LGo9VC12O3JldHVybiBrKmsrQSpBPkkqSStqKmomJihFPU8sQz1UKSx7Y3g6RSxjeTpDLHgwMTotbCx5MDE6LWYseDExOkUqKHIvdy0xKSx5MTE6Qyooci93LTEpfX12YXIgVGI9ZnVuY3Rpb24oKXt2YXIgdD13YixlPXhiLG49dWIoMCksaT1udWxsLHI9U2Isbz1FYixhPUNiLHM9bnVsbDtmdW5jdGlvbiB1KCl7dmFyIHUsYyxsLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQ9ci5hcHBseSh0aGlzLGFyZ3VtZW50cyktZ2IscD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nYixtPWNiKHAtZCkseT1wPmQ7aWYoc3x8KHM9dT1WbygpKSxoPGYmJihjPWgsaD1mLGY9YyksaD55YilpZihtPmJiLXliKXMubW92ZVRvKGgqZmIoZCksaCpwYihkKSkscy5hcmMoMCwwLGgsZCxwLCF5KSxmPnliJiYocy5tb3ZlVG8oZipmYihwKSxmKnBiKHApKSxzLmFyYygwLDAsZixwLGQseSkpO2Vsc2V7dmFyIHYsZyxiPWQsXz1wLHc9ZCx4PXAsUz1tLEU9bSxDPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1DPnliJiYoaT8raS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bWIoZipmK2gqaCkpLFQ9ZGIoY2IoaC1mKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaz1ULEE9VDtpZihPPnliKXt2YXIgST1fYihPL2YqcGIoQykpLGo9X2IoTy9oKnBiKEMpKTsoUy09MipJKT55Yj8odys9SSo9eT8xOi0xLHgtPUkpOihTPTAsdz14PShkK3ApLzIpLChFLT0yKmopPnliPyhiKz1qKj15PzE6LTEsXy09aik6KEU9MCxiPV89KGQrcCkvMil9dmFyIE09aCpmYihiKSxQPWgqcGIoYiksTj1mKmZiKHgpLFI9ZipwYih4KTtpZihUPnliKXt2YXIgRD1oKmZiKF8pLEw9aCpwYihfKSxGPWYqZmIodyksej1mKnBiKHcpO2lmKG08dmIpe3ZhciBWPVM+eWI/ZnVuY3Rpb24odCxlLG4saSxyLG8sYSxzKXt2YXIgdT1GLU0sYz16LVAsbD1hLUQsZj1zLUwsaD0obCooUC1MKS1mKihNLUQpKS8oZip1LWwqYyk7cmV0dXJuW00raCp1LFAraCpjXX0oMCwwLDAsMCwwLDAsTixSKTpbTixSXSxCPU0tVlswXSxVPVAtVlsxXSxIPUQtVlswXSxxPUwtVlsxXSxHPTEvcGIoKChsPShCKkgrVSpxKS8obWIoQipCK1UqVSkqbWIoSCpIK3EqcSkpKT4xPzA6bDwtMT92YjpNYXRoLmFjb3MobCkpLzIpLFc9bWIoVlswXSpWWzBdK1ZbMV0qVlsxXSk7az1kYihULChmLVcpLyhHLTEpKSxBPWRiKFQsKGgtVykvKEcrMSkpfX1FPnliP0E+eWI/KHY9T2IoRix6LE0sUCxoLEEseSksZz1PYihELEwsTixSLGgsQSx5KSxzLm1vdmVUbyh2LmN4K3YueDAxLHYuY3krdi55MDEpLEE8VD9zLmFyYyh2LmN4LHYuY3ksQSxsYih2LnkwMSx2LngwMSksbGIoZy55MDEsZy54MDEpLCF5KToocy5hcmModi5jeCx2LmN5LEEsbGIodi55MDEsdi54MDEpLGxiKHYueTExLHYueDExKSwheSkscy5hcmMoMCwwLGgsbGIodi5jeSt2LnkxMSx2LmN4K3YueDExKSxsYihnLmN5K2cueTExLGcuY3grZy54MTEpLCF5KSxzLmFyYyhnLmN4LGcuY3ksQSxsYihnLnkxMSxnLngxMSksbGIoZy55MDEsZy54MDEpLCF5KSkpOihzLm1vdmVUbyhNLFApLHMuYXJjKDAsMCxoLGIsXywheSkpOnMubW92ZVRvKE0sUCksZj55YiYmUz55Yj9rPnliPyh2PU9iKE4sUixELEwsZiwtayx5KSxnPU9iKE0sUCxGLHosZiwtayx5KSxzLmxpbmVUbyh2LmN4K3YueDAxLHYuY3krdi55MDEpLGs8VD9zLmFyYyh2LmN4LHYuY3ksayxsYih2LnkwMSx2LngwMSksbGIoZy55MDEsZy54MDEpLCF5KToocy5hcmModi5jeCx2LmN5LGssbGIodi55MDEsdi54MDEpLGxiKHYueTExLHYueDExKSwheSkscy5hcmMoMCwwLGYsbGIodi5jeSt2LnkxMSx2LmN4K3YueDExKSxsYihnLmN5K2cueTExLGcuY3grZy54MTEpLHkpLHMuYXJjKGcuY3gsZy5jeSxrLGxiKGcueTExLGcueDExKSxsYihnLnkwMSxnLngwMSksIXkpKSk6cy5hcmMoMCwwLGYseCx3LHkpOnMubGluZVRvKE4sUil9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksdSlyZXR1cm4gcz1udWxsLHUrIiJ8fG51bGx9cmV0dXJuIHUuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsaT0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItdmIvMjtyZXR1cm5bZmIoaSkqbixwYihpKSpuXX0sdS5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKCtlKSx1KTp0fSx1Lm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOmV9LHUuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOm59LHUucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTppfSx1LnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6cn0sdS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSx1KTpvfSx1LnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOmF9LHUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCx1KTpzfSx1fTtmdW5jdGlvbiBrYih0KXt0aGlzLl9jb250ZXh0PXR9a2IucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEFiPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga2IodCl9O2Z1bmN0aW9uIEliKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGpiKHQpe3JldHVybiB0WzFdfXZhciBNYj1mdW5jdGlvbigpe3ZhciB0PUliLGU9amIsbj11YighMCksaT1udWxsLHI9QWIsbz1udWxsO2Z1bmN0aW9uIGEoYSl7dmFyIHMsdSxjLGw9YS5sZW5ndGgsZj0hMTtmb3IobnVsbD09aSYmKG89cihjPVZvKCkpKSxzPTA7czw9bDsrK3MpIShzPGwmJm4odT1hW3NdLHMsYSkpPT09ZiYmKChmPSFmKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxmJiZvLnBvaW50KCt0KHUscyxhKSwrZSh1LHMsYSkpO2lmKGMpcmV0dXJuIG89bnVsbCxjKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YigrZSksYSk6dH0sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOmV9LGEuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCEhdCksYSk6bn0sYS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG51bGwhPWkmJihvPXIoaSkpLGEpOnJ9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9pPW89bnVsbDpvPXIoaT10KSxhKTppfSxhfSxQYj1mdW5jdGlvbigpe3ZhciB0PUliLGU9bnVsbCxuPXViKDApLGk9amIscj11YighMCksbz1udWxsLGE9QWIscz1udWxsO2Z1bmN0aW9uIHUodSl7dmFyIGMsbCxmLGgsZCxwPXUubGVuZ3RoLG09ITEseT1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PW8mJihzPWEoZD1WbygpKSksYz0wO2M8PXA7KytjKXtpZighKGM8cCYmcihoPXVbY10sYyx1KSk9PT1tKWlmKG09IW0pbD1jLHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGY9Yy0xO2Y+PWw7LS1mKXMucG9pbnQoeVtmXSx2W2ZdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX1tJiYoeVtjXT0rdChoLGMsdSksdltjXT0rbihoLGMsdSkscy5wb2ludChlPytlKGgsYyx1KTp5W2NdLGk/K2koaCxjLHUpOnZbY10pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiBjKCl7cmV0dXJuIE1iKCkuZGVmaW5lZChyKS5jdXJ2ZShhKS5jb250ZXh0KG8pfXJldHVybiB1Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp1YigrbiksZT1udWxsLHUpOnR9LHUueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YigrZSksdSk6dH0sdS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksdSk6ZX0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGk9bnVsbCx1KTpufSx1LnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOm59LHUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLHUpOml9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkobil9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KHQpLnkoaSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGMoKS54KGUpLnkobil9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCEhdCksdSk6cn0sdS5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG51bGwhPW8mJihzPWEobykpLHUpOmF9LHUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9vPXM9bnVsbDpzPWEobz10KSx1KTpvfSx1fSxOYj1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sUmI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LERiPWZ1bmN0aW9uKCl7dmFyIHQ9UmIsZT1OYixuPW51bGwsaT11YigwKSxyPXViKGJiKSxvPXViKDApO2Z1bmN0aW9uIGEoYSl7dmFyIHMsdSxjLGwsZixoPWEubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShoKSxtPW5ldyBBcnJheShoKSx5PStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKGJiLE1hdGgubWF4KC1iYixyLmFwcGx5KHRoaXMsYXJndW1lbnRzKS15KSksZz1NYXRoLm1pbihNYXRoLmFicyh2KS9oLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPWcqKHY8MD8tMToxKTtmb3Iocz0wO3M8aDsrK3MpKGY9bVtwW3NdPXNdPSt0KGFbc10scyxhKSk+MCYmKGQrPWYpO2ZvcihudWxsIT1lP3Auc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKG1bdF0sbVtuXSl9KTpudWxsIT1uJiZwLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihhW3RdLGFbZV0pfSkscz0wLGM9ZD8odi1oKmIpL2Q6MDtzPGg7KytzLHk9bCltW3U9cFtzXV09e2RhdGE6YVt1XSxpbmRleDpzLHZhbHVlOmY9bVt1XSxzdGFydEFuZ2xlOnksZW5kQW5nbGU6bD15KyhmPjA/ZipjOjApK2IscGFkQW5nbGU6Z307cmV0dXJuIG19cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp1YigrZSksYSk6dH0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLGEpOmV9LGEuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxhKTpufSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YigrdCksYSk6aX0sYS5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTpyfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOm99LGF9LExiPXpiKEFiKTtmdW5jdGlvbiBGYih0KXt0aGlzLl9jdXJ2ZT10fWZ1bmN0aW9uIHpiKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIG5ldyBGYih0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIFZiKHQpe3ZhciBlPXQuY3VydmU7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHpiKHQpKTplKCkuX2N1cnZlfSx0fUZiLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIEJiPWZ1bmN0aW9uKCl7cmV0dXJuIFZiKE1iKCkuY3VydmUoTGIpKX0sVWI9ZnVuY3Rpb24oKXt2YXIgdD1QYigpLmN1cnZlKExiKSxlPXQuY3VydmUsbj10LmxpbmVYMCxpPXQubGluZVgxLHI9dC5saW5lWTAsbz10LmxpbmVZMTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnN0YXJ0QW5nbGU9dC54MCxkZWxldGUgdC54MCx0LmVuZEFuZ2xlPXQueDEsZGVsZXRlIHQueDEsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5pbm5lclJhZGl1cz10LnkwLGRlbGV0ZSB0LnkwLHQub3V0ZXJSYWRpdXM9dC55MSxkZWxldGUgdC55MSx0LmxpbmVTdGFydEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFZiKG4oKSl9LGRlbGV0ZSB0LmxpbmVYMCx0LmxpbmVFbmRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBWYihpKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gVmIocigpKX0sZGVsZXRlIHQubGluZVkwLHQubGluZU91dGVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFZiKG8oKSl9LGRlbGV0ZSB0LmxpbmVZMSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoemIodCkpOmUoKS5fY3VydmV9LHR9LEhiPWZ1bmN0aW9uKHQsZSl7cmV0dXJuWyhlPStlKSpNYXRoLmNvcyh0LT1NYXRoLlBJLzIpLGUqTWF0aC5zaW4odCldfSxxYj1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gR2IodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIFdiKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBZYih0KXt2YXIgZT1HYixuPVdiLGk9SWIscj1qYixvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBhLHM9cWIuY2FsbChhcmd1bWVudHMpLHU9ZS5hcHBseSh0aGlzLHMpLGM9bi5hcHBseSh0aGlzLHMpO2lmKG98fChvPWE9Vm8oKSksdChvLCtpLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksK3IuYXBwbHkodGhpcyxzKSwraS5hcHBseSh0aGlzLChzWzBdPWMscykpLCtyLmFwcGx5KHRoaXMscykpLGEpcmV0dXJuIG89bnVsbCxhKyIifHxudWxsfXJldHVybiBhLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsYSk6bn0sYS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWIoK3QpLGEpOml9LGEueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxhKTpyfSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09dD9udWxsOnQsYSk6b30sYX1mdW5jdGlvbiBRYih0LGUsbixpLHIpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGU9KGUraSkvMixuLGUscixpLHIpfWZ1bmN0aW9uIFpiKHQsZSxuLGkscil7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZSxuPShuK3IpLzIsaSxuLGkscil9ZnVuY3Rpb24gS2IodCxlLG4saSxyKXt2YXIgbz1IYihlLG4pLGE9SGIoZSxuPShuK3IpLzIpLHM9SGIoaSxuKSx1PUhiKGkscik7dC5tb3ZlVG8ob1swXSxvWzFdKSx0LmJlemllckN1cnZlVG8oYVswXSxhWzFdLHNbMF0sc1sxXSx1WzBdLHVbMV0pfWZ1bmN0aW9uIFhiKCl7cmV0dXJuIFliKFFiKX1mdW5jdGlvbiAkYigpe3JldHVybiBZYihaYil9ZnVuY3Rpb24gSmIoKXt2YXIgdD1ZYihLYik7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH12YXIgdF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS92Yik7dC5tb3ZlVG8obiwwKSx0LmFyYygwLDAsbiwwLGJiKX19LGVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvNSkvMjt0Lm1vdmVUbygtMypuLC1uKSx0LmxpbmVUbygtbiwtbiksdC5saW5lVG8oLW4sLTMqbiksdC5saW5lVG8obiwtMypuKSx0LmxpbmVUbyhuLC1uKSx0LmxpbmVUbygzKm4sLW4pLHQubGluZVRvKDMqbixuKSx0LmxpbmVUbyhuLG4pLHQubGluZVRvKG4sMypuKSx0LmxpbmVUbygtbiwzKm4pLHQubGluZVRvKC1uLG4pLHQubGluZVRvKC0zKm4sbiksdC5jbG9zZVBhdGgoKX19LG5fPU1hdGguc3FydCgxLzMpLGlfPTIqbl8scl89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9pXyksaT1uKm5fO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKGksMCksdC5saW5lVG8oMCxuKSx0LmxpbmVUbygtaSwwKSx0LmNsb3NlUGF0aCgpfX0sb189TWF0aC5zaW4odmIvMTApL01hdGguc2luKDcqdmIvMTApLGFfPU1hdGguc2luKGJiLzEwKSpvXyxzXz0tTWF0aC5jb3MoYmIvMTApKm9fLHVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLGk9YV8qbixyPXNfKm47dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8oaSxyKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1iYipvLzUscz1NYXRoLmNvcyhhKSx1PU1hdGguc2luKGEpO3QubGluZVRvKHUqbiwtcypuKSx0LmxpbmVUbyhzKmktdSpyLHUqaStzKnIpfXQuY2xvc2VQYXRoKCl9fSxjXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlKSxpPS1uLzI7dC5yZWN0KGksaSxuLG4pfX0sbF89TWF0aC5zcXJ0KDMpLGZfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49LU1hdGguc3FydChlLygzKmxfKSk7dC5tb3ZlVG8oMCwyKm4pLHQubGluZVRvKC1sXypuLC1uKSx0LmxpbmVUbyhsXypuLC1uKSx0LmNsb3NlUGF0aCgpfX0saF89TWF0aC5zcXJ0KDMpLzIsZF89MS9NYXRoLnNxcnQoMTIpLHBfPTMqKGRfLzIrMSksbV89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS9wXyksaT1uLzIscj1uKmRfLG89aSxhPW4qZF8rbixzPS1vLHU9YTt0Lm1vdmVUbyhpLHIpLHQubGluZVRvKG8sYSksdC5saW5lVG8ocyx1KSx0LmxpbmVUbygtLjUqaS1oXypyLGhfKmkrLS41KnIpLHQubGluZVRvKC0uNSpvLWhfKmEsaF8qbystLjUqYSksdC5saW5lVG8oLS41KnMtaF8qdSxoXypzKy0uNSp1KSx0LmxpbmVUbygtLjUqaStoXypyLC0uNSpyLWhfKmkpLHQubGluZVRvKC0uNSpvK2hfKmEsLS41KmEtaF8qbyksdC5saW5lVG8oLS41KnMraF8qdSwtLjUqdS1oXypzKSx0LmNsb3NlUGF0aCgpfX0seV89W3RfLGVfLHJfLGNfLHVfLGZfLG1fXSx2Xz1mdW5jdGlvbigpe3ZhciB0PXViKHRfKSxlPXViKDY0KSxuPW51bGw7ZnVuY3Rpb24gaSgpe3ZhciBpO2lmKG58fChuPWk9Vm8oKSksdC5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhuLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gbj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIGkudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnViKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxpKTplfSxpLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOnQsaSk6bn0saX0sZ189ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGJfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErZSkvNiwodC5feTArNCp0Ll95MStuKS82KX1mdW5jdGlvbiBfXyh0KXt0aGlzLl9jb250ZXh0PXR9X18ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpiXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpiXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIHdfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX18odCl9O2Z1bmN0aW9uIHhfKHQpe3RoaXMuX2NvbnRleHQ9dH14Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpnXyxhcmVhRW5kOmdfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpiXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIFNfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeF8odCl9O2Z1bmN0aW9uIEVfKHQpe3RoaXMuX2NvbnRleHQ9dH1FXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgbj0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LGk9KHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKG4saSk6dGhpcy5fY29udGV4dC5tb3ZlVG8obixpKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OmJfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgQ189ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFXyh0KX07ZnVuY3Rpb24gT18odCxlKXt0aGlzLl9iYXNpcz1uZXcgX18odCksdGhpcy5fYmV0YT1lfU9fLnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aC0xO2lmKG4+MClmb3IodmFyIGkscj10WzBdLG89ZVswXSxhPXRbbl0tcixzPWVbbl0tbyx1PS0xOysrdTw9bjspdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSp0W3VdKygxLXRoaXMuX2JldGEpKihyKyhpPXUvbikqYSksdGhpcy5fYmV0YSplW3VdKygxLXRoaXMuX2JldGEpKihvK2kqcykpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgVF89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxPT09ZT9uZXcgX18odCk6bmV3IE9fKHQsZSl9cmV0dXJuIG4uYmV0YT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC44NSk7ZnVuY3Rpb24ga18odCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLWUpLHQuX3kyK3QuX2sqKHQuX3kxLW4pLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBBXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9QV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOmtfKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT10LHRoaXMuX3kxPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDprXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIElfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IEFfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIGpfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1qXy5wcm90b3R5cGU9e2FyZWFTdGFydDpnXyxhcmVhRW5kOmdfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6a18odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBNXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBqXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBQXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9UF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6a18odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBOXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBQXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBSXyh0LGUsbil7dmFyIGk9dC5feDEscj10Ll95MSxvPXQuX3gyLGE9dC5feTI7aWYodC5fbDAxX2E+eWIpe3ZhciBzPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO2k9KGkqcy10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS91LHI9KHIqcy10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS91fWlmKHQuX2wyM19hPnliKXt2YXIgYz0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKmMrdC5feDEqdC5fbDIzXzJhLWUqdC5fbDEyXzJhKS9sLGE9KGEqYyt0Ll95MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2x9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGkscixvLGEsdC5feDIsdC5feTIpfWZ1bmN0aW9uIERfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9RF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQsaT10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK2kqaSx0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpSXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBMXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IERfKHQsZSk6bmV3IEFfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gRl8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1GXy5wcm90b3R5cGU9e2FyZWFTdGFydDpnXyxhcmVhRW5kOmdfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LGk9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbitpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OlJfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHpfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgRl8odCxlKTpuZXcgal8odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBWXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVZfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxpPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4raSppLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpSXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBCXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3IFZfKHQsZSk6bmV3IFBfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gVV8odCl7dGhpcy5fY29udGV4dD10fVVfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmdfLGFyZWFFbmQ6Z18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3Q9K3QsZT0rZSx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSkpfX07dmFyIEhfPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVV8odCl9O2Z1bmN0aW9uIHFfKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBHXyh0LGUsbil7dmFyIGk9dC5feDEtdC5feDAscj1lLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8oaXx8cjwwJiYtMCksYT0obi10Ll95MSkvKHJ8fGk8MCYmLTApLHM9KG8qcithKmkpLyhpK3IpO3JldHVybihxXyhvKStxXyhhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIFdfKHQsZSl7dmFyIG49dC5feDEtdC5feDA7cmV0dXJuIG4/KDMqKHQuX3kxLXQuX3kwKS9uLWUpLzI6ZX1mdW5jdGlvbiBZXyh0LGUsbil7dmFyIGk9dC5feDAscj10Ll94MSxvPXQuX3kxLGE9KHItaSkvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oaSthLHQuX3kwK2EqZSxyLWEsby1hKm4scixvKX1mdW5jdGlvbiBRXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gWl8odCl7dGhpcy5fY29udGV4dD1uZXcgS18odCl9ZnVuY3Rpb24gS18odCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFhfKHQpe3JldHVybiBuZXcgUV8odCl9ZnVuY3Rpb24gJF8odCl7cmV0dXJuIG5ldyBaXyh0KX1mdW5jdGlvbiBKXyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gdHcodCl7dmFyIGUsbixpPXQubGVuZ3RoLTEscj1uZXcgQXJyYXkoaSksbz1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKHJbMF09MCxvWzBdPTIsYVswXT10WzBdKzIqdFsxXSxlPTE7ZTxpLTE7KytlKXJbZV09MSxvW2VdPTQsYVtlXT00KnRbZV0rMip0W2UrMV07Zm9yKHJbaS0xXT0yLG9baS0xXT03LGFbaS0xXT04KnRbaS0xXSt0W2ldLGU9MTtlPGk7KytlKW9bZV0tPW49cltlXS9vW2UtMV0sYVtlXS09biphW2UtMV07Zm9yKHJbaS0xXT1hW2ktMV0vb1tpLTFdLGU9aS0yO2U+PTA7LS1lKXJbZV09KGFbZV0tcltlKzFdKS9vW2VdO2ZvcihvW2ktMV09KHRbaV0rcltpLTFdKS8yLGU9MDtlPGktMTsrK2Upb1tlXT0yKnRbZSsxXS1yW2UrMV07cmV0dXJuW3Isb119UV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOllfKHRoaXMsdGhpcy5fdDAsV18odGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1OYU47aWYoZT0rZSwodD0rdCkhPT10aGlzLl94MXx8ZSE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFlfKHRoaXMsV18odGhpcyxuPUdfKHRoaXMsdCxlKSksbik7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHRoaXMuX3QwLG49R18odGhpcyx0LGUpKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWUsdGhpcy5fdDA9bn19fSwoWl8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUV8ucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxlKXtRXy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLGUsdCl9LEtfLnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LGUsbixpLHIsbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUsdCxpLG4sbyxyKX19LEpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGg7aWYobilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sZVswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxlWzBdKSwyPT09bil0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLGVbMV0pO2Vsc2UgZm9yKHZhciBpPXR3KHQpLHI9dHcoZSksbz0wLGE9MTthPG47KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oaVswXVtvXSxyWzBdW29dLGlbMV1bb10sclsxXVtvXSx0W2FdLGVbYV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PW4pJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBldz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEpfKHQpfTtmdW5jdGlvbiBudyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl90PWV9bncucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxlKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2Vsc2V7dmFyIG49dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8obix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhuLGUpfX10aGlzLl94PXQsdGhpcy5feT1lfX07dmFyIGl3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbncodCwuNSl9O2Z1bmN0aW9uIHJ3KHQpe3JldHVybiBuZXcgbncodCwwKX1mdW5jdGlvbiBvdyh0KXtyZXR1cm4gbmV3IG53KHQsMSl9dmFyIGF3PWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvPTEsYT10W2VbMF1dLHM9YS5sZW5ndGg7bzxyOysrbylmb3IoaT1hLGE9dFtlW29dXSxuPTA7bjxzOysrbilhW25dWzFdKz1hW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX0sc3c9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49bmV3IEFycmF5KGUpOy0tZT49MDspbltlXT1lO3JldHVybiBufTtmdW5jdGlvbiB1dyh0LGUpe3JldHVybiB0W2VdfXZhciBjdz1mdW5jdGlvbigpe3ZhciB0PXViKFtdKSxlPXN3LG49YXcsaT11dztmdW5jdGlvbiByKHIpe3ZhciBvLGEscz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1PXIubGVuZ3RoLGM9cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyk7Zm9yKG89MDtvPGM7KytvKXtmb3IodmFyIGYsaD1zW29dLGQ9bFtvXT1uZXcgQXJyYXkodSkscD0wO3A8dTsrK3ApZFtwXT1mPVswLCtpKHJbcF0saCxwLHIpXSxmLmRhdGE9cltwXTtkLmtleT1ofWZvcihvPTAsYT1lKGwpO288YzsrK28pbFthW29dXS5pbmRleD1vO3JldHVybiBuKGwsYSksbH1yZXR1cm4gci5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6dWIocWIuY2FsbChlKSkscik6dH0sci52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnViKCt0KSxyKTppfSxyLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/c3c6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1YihxYi5jYWxsKHQpKSxyKTplfSxyLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P2F3OnQscik6bn0scn0sbHc9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT10WzBdLmxlbmd0aDtvPGE7KytvKXtmb3Iocj1uPTA7bjxpOysrbilyKz10W25dW29dWzFdfHwwO2lmKHIpZm9yKG49MDtuPGk7KytuKXRbbl1bb11bMV0vPXJ9YXcodCxlKX19LGZ3PWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjEpZm9yKHZhciBuLGkscixvLGEscyx1PTAsYz10W2VbMF1dLmxlbmd0aDt1PGM7Kyt1KWZvcihvPWE9MCxuPTA7bjxzOysrbikocj0oaT10W2Vbbl1dW3VdKVsxXS1pWzBdKT49MD8oaVswXT1vLGlbMV09bys9cik6cjwwPyhpWzFdPWEsaVswXT1hKz1yKTppWzBdPW99LGh3PWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixpPTAscj10W2VbMF1dLG89ci5sZW5ndGg7aTxvOysraSl7Zm9yKHZhciBhPTAscz0wO2E8bjsrK2Epcys9dFthXVtpXVsxXXx8MDtyW2ldWzFdKz1yW2ldWzBdPS1zLzJ9YXcodCxlKX19LGR3PWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjAmJihpPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLGkscixvPTAsYT0xO2E8aTsrK2Epe2Zvcih2YXIgcz0wLHU9MCxjPTA7czxyOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0sZj1sW2FdWzFdfHwwLGg9KGYtKGxbYS0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07aCs9KHBbYV1bMV18fDApLShwW2EtMV1bMV18fDApfXUrPWYsYys9aCpmfW5bYS0xXVsxXSs9blthLTFdWzBdPW8sdSYmKG8tPWMvdSl9blthLTFdWzFdKz1uW2EtMV1bMF09byxhdyh0LGUpfX0scHc9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAobXcpO3JldHVybiBzdyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGVbdF0tZVtuXX0pfTtmdW5jdGlvbiBtdyh0KXtmb3IodmFyIGUsbj0wLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspKGU9K3RbaV1bMV0pJiYobis9ZSk7cmV0dXJuIG59dmFyIHl3PWZ1bmN0aW9uKHQpe3JldHVybiBwdyh0KS5yZXZlcnNlKCl9LHZ3PWZ1bmN0aW9uKHQpe3ZhciBlLG4saT10Lmxlbmd0aCxyPXQubWFwKG13KSxvPXN3KHQpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gcltlXS1yW3RdfSksYT0wLHM9MCx1PVtdLGM9W107Zm9yKGU9MDtlPGk7KytlKW49b1tlXSxhPHM/KGErPXJbbl0sdS5wdXNoKG4pKToocys9cltuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQodSl9LGd3PWZ1bmN0aW9uKHQpe3JldHVybiBzdyh0KS5yZXZlcnNlKCl9LGJ3PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gX3codCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gd3codCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24geHcoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBTdyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIEV3KHQsZSl7dmFyIG49ZSxpPWUuUixyPW4uVTtyP3IuTD09PW4/ci5MPWk6ci5SPWk6dC5fPWksaS5VPXIsbi5VPWksbi5SPWkuTCxuLlImJihuLlIuVT1uKSxpLkw9bn1mdW5jdGlvbiBDdyh0LGUpe3ZhciBuPWUsaT1lLkwscj1uLlU7cj9yLkw9PT1uP3IuTD1pOnIuUj1pOnQuXz1pLGkuVT1yLG4uVT1pLG4uTD1pLlIsbi5MJiYobi5MLlU9biksaS5SPW59ZnVuY3Rpb24gT3codCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fXh3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eHcsaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Pdyh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KGk9bi5VKS5MPyhyPWkuUikmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uUiYmKEV3KHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLEN3KHRoaXMsaSkpOihyPWkuTCkmJnIuQz8obi5DPXIuQz0hMSxpLkM9ITAsdD1pKToodD09PW4uTCYmKEN3KHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsaS5DPSEwLEV3KHRoaXMsaSkpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLGkscj10LlUsbz10LkwsYT10LlI7aWYobj1vP2E/T3coYSk6bzphLHI/ci5MPT09dD9yLkw9bjpyLlI9bjp0aGlzLl89bixvJiZhPyhpPW4uQyxuLkM9dC5DLG4uTD1vLG8uVT1uLG4hPT1hPyhyPW4uVSxuLlU9dC5VLHIuTD10PW4uUixuLlI9YSxhLlU9bik6KG4uVT1yLHI9bix0PW4uUikpOihpPXQuQyx0PW4pLHQmJih0LlU9ciksIWkpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PXIuTCl7aWYoKGU9ci5SKS5DJiYoZS5DPSExLHIuQz0hMCxFdyh0aGlzLHIpLGU9ci5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLEN3KHRoaXMsZSksZT1yLlIpLGUuQz1yLkMsci5DPWUuUi5DPSExLEV3KHRoaXMsciksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9ci5MKS5DJiYoZS5DPSExLHIuQz0hMCxDdyh0aGlzLHIpLGU9ci5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLEV3KHRoaXMsZSksZT1yLkwpLGUuQz1yLkMsci5DPWUuTC5DPSExLEN3KHRoaXMsciksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9cixyPXIuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgVHc9eHc7ZnVuY3Rpb24ga3codCxlLG4saSl7dmFyIHI9W251bGwsbnVsbF0sbz1Ldy5wdXNoKHIpLTE7cmV0dXJuIHIubGVmdD10LHIucmlnaHQ9ZSxuJiZJdyhyLHQsZSxuKSxpJiZJdyhyLGUsdCxpKSxRd1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxRd1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxyfWZ1bmN0aW9uIEF3KHQsZSxuKXt2YXIgaT1bZSxuXTtyZXR1cm4gaS5sZWZ0PXQsaX1mdW5jdGlvbiBJdyh0LGUsbixpKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1pOnRbMF09aToodFswXT1pLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gancodCxlLG4saSxyKXt2YXIgbyxhPXRbMF0scz10WzFdLHU9YVswXSxjPWFbMV0sbD0wLGY9MSxoPXNbMF0tdSxkPXNbMV0tYztpZihvPWUtdSxofHwhKG8+MCkpe2lmKG8vPWgsaDwwKXtpZihvPGwpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihoPjApe2lmKG8+ZilyZXR1cm47bz5sJiYobD1vKX1pZihvPWktdSxofHwhKG88MCkpe2lmKG8vPWgsaDwwKXtpZihvPmYpcmV0dXJuO28+bCYmKGw9byl9ZWxzZSBpZihoPjApe2lmKG88bClyZXR1cm47bzxmJiYoZj1vKX1pZihvPW4tYyxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGwpcmV0dXJuO288ZiYmKGY9byl9ZWxzZSBpZihkPjApe2lmKG8+ZilyZXR1cm47bz5sJiYobD1vKX1pZihvPXItYyxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPmYpcmV0dXJuO28+bCYmKGw9byl9ZWxzZSBpZihkPjApe2lmKG88bClyZXR1cm47bzxmJiYoZj1vKX1yZXR1cm4hKGw+MHx8ZjwxKXx8KGw+MCYmKHRbMF09W3UrbCpoLGMrbCpkXSksZjwxJiYodFsxXT1bdStmKmgsYytmKmRdKSwhMCl9fX19fWZ1bmN0aW9uIE13KHQsZSxuLGkscil7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciBhLHMsdT10WzBdLGM9dC5sZWZ0LGw9dC5yaWdodCxmPWNbMF0saD1jWzFdLGQ9bFswXSxwPWxbMV0sbT0oZitkKS8yLHk9KGgrcCkvMjtpZihwPT09aCl7aWYobTxlfHxtPj1pKXJldHVybjtpZihmPmQpe2lmKHUpe2lmKHVbMV0+PXIpcmV0dXJufWVsc2UgdT1bbSxuXTtvPVttLHJdfWVsc2V7aWYodSl7aWYodVsxXTxuKXJldHVybn1lbHNlIHU9W20scl07bz1bbSxuXX19ZWxzZSBpZihzPXktKGE9KGYtZCkvKHAtaCkpKm0sYTwtMXx8YT4xKWlmKGY+ZCl7aWYodSl7aWYodVsxXT49cilyZXR1cm59ZWxzZSB1PVsobi1zKS9hLG5dO289WyhyLXMpL2Escl19ZWxzZXtpZih1KXtpZih1WzFdPG4pcmV0dXJufWVsc2UgdT1bKHItcykvYSxyXTtvPVsobi1zKS9hLG5dfWVsc2UgaWYoaDxwKXtpZih1KXtpZih1WzBdPj1pKXJldHVybn1lbHNlIHU9W2UsYSplK3NdO289W2ksYSppK3NdfWVsc2V7aWYodSl7aWYodVswXTxlKXJldHVybn1lbHNlIHU9W2ksYSppK3NdO289W2UsYSplK3NdfXJldHVybiB0WzBdPXUsdFsxXT1vLCEwfWZ1bmN0aW9uIFB3KHQsZSl7dmFyIG49dC5zaXRlLGk9ZS5sZWZ0LHI9ZS5yaWdodDtyZXR1cm4gbj09PXImJihyPWksaT1uKSxyP01hdGguYXRhbjIoclsxXS1pWzFdLHJbMF0taVswXSk6KG49PT1pPyhpPWVbMV0scj1lWzBdKTooaT1lWzBdLHI9ZVsxXSksTWF0aC5hdGFuMihpWzBdLXJbMF0sclsxXS1pWzFdKSl9ZnVuY3Rpb24gTncodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIFJ3KHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgRHcsTHc9W107ZnVuY3Rpb24gRncodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciBpPWUuc2l0ZSxyPXQuc2l0ZSxvPW4uc2l0ZTtpZihpIT09byl7dmFyIGE9clswXSxzPXJbMV0sdT1pWzBdLWEsYz1pWzFdLXMsbD1vWzBdLWEsZj1vWzFdLXMsaD0yKih1KmYtYypsKTtpZighKGg+PS0kdykpe3ZhciBkPXUqdStjKmMscD1sKmwrZipmLG09KGYqZC1jKnApL2gseT0odSpwLWwqZCkvaCx2PUx3LnBvcCgpfHxuZXcgZnVuY3Rpb24oKXtTdyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9O3YuYXJjPXQsdi5zaXRlPXIsdi54PW0rYSx2Lnk9KHYuY3k9eStzKStNYXRoLnNxcnQobSptK3kqeSksdC5jaXJjbGU9djtmb3IodmFyIGc9bnVsbCxiPVp3Ll87YjspaWYodi55PGIueXx8di55PT09Yi55JiZ2Lng8PWIueCl7aWYoIWIuTCl7Zz1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXtnPWI7YnJlYWt9Yj1iLlJ9WncuaW5zZXJ0KGcsdiksZ3x8KER3PXYpfX19fWZ1bmN0aW9uIHp3KHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChEdz1lLk4pLFp3LnJlbW92ZShlKSxMdy5wdXNoKGUpLFN3KGUpLHQuY2lyY2xlPW51bGwpfXZhciBWdz1bXTtmdW5jdGlvbiBCdyh0KXt2YXIgZT1Wdy5wb3AoKXx8bmV3IGZ1bmN0aW9uKCl7U3codGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBVdyh0KXt6dyh0KSxZdy5yZW1vdmUodCksVncucHVzaCh0KSxTdyh0KX1mdW5jdGlvbiBIdyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxpPWUuY3kscj1bbixpXSxvPXQuUCxhPXQuTixzPVt0XTtVdyh0KTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxYdyYmTWF0aC5hYnMoaS11LmNpcmNsZS5jeSk8WHc7KW89dS5QLHMudW5zaGlmdCh1KSxVdyh1KSx1PW87cy51bnNoaWZ0KHUpLHp3KHUpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhuLWMuY2lyY2xlLngpPFh3JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdzspYT1jLk4scy5wdXNoKGMpLFV3KGMpLGM9YTtzLnB1c2goYyksencoYyk7dmFyIGwsZj1zLmxlbmd0aDtmb3IobD0xO2w8ZjsrK2wpSXcoKGM9c1tsXSkuZWRnZSwodT1zW2wtMV0pLnNpdGUsYy5zaXRlLHIpOyhjPXNbZi0xXSkuZWRnZT1rdygodT1zWzBdKS5zaXRlLGMuc2l0ZSxudWxsLHIpLEZ3KHUpLEZ3KGMpfWZ1bmN0aW9uIHF3KHQpe2Zvcih2YXIgZSxuLGkscixvPXRbMF0sYT10WzFdLHM9WXcuXztzOylpZigoaT1HdyhzLGEpLW8pPlh3KXM9cy5MO2Vsc2V7aWYoISgocj1vLVd3KHMsYSkpPlh3KSl7aT4tWHc/KGU9cy5QLG49cyk6cj4tWHc/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtRd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciB1PUJ3KHQpO2lmKFl3Lmluc2VydChlLHUpLGV8fG4pe2lmKGU9PT1uKXJldHVybiB6dyhlKSxuPUJ3KGUuc2l0ZSksWXcuaW5zZXJ0KHUsbiksdS5lZGdlPW4uZWRnZT1rdyhlLnNpdGUsdS5zaXRlKSxGdyhlKSx2b2lkIEZ3KG4pO2lmKG4pe3p3KGUpLHp3KG4pO3ZhciBjPWUuc2l0ZSxsPWNbMF0sZj1jWzFdLGg9dFswXS1sLGQ9dFsxXS1mLHA9bi5zaXRlLG09cFswXS1sLHk9cFsxXS1mLHY9MiooaCp5LWQqbSksZz1oKmgrZCpkLGI9bSptK3kqeSxfPVsoeSpnLWQqYikvditsLChoKmItbSpnKS92K2ZdO0l3KG4uZWRnZSxjLHAsXyksdS5lZGdlPWt3KGMsdCxudWxsLF8pLG4uZWRnZT1rdyh0LHAsbnVsbCxfKSxGdyhlKSxGdyhuKX1lbHNlIHUuZWRnZT1rdyhlLnNpdGUsdS5zaXRlKX19ZnVuY3Rpb24gR3codCxlKXt2YXIgbj10LnNpdGUsaT1uWzBdLHI9blsxXSxvPXItZTtpZighbylyZXR1cm4gaTt2YXIgYT10LlA7aWYoIWEpcmV0dXJuLTEvMDt2YXIgcz0obj1hLnNpdGUpWzBdLHU9blsxXSxjPXUtZTtpZighYylyZXR1cm4gczt2YXIgbD1zLWksZj0xL28tMS9jLGg9bC9jO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioobCpsLygtMipjKS11K2MvMityLW8vMikpKS9mK2k6KGkrcykvMn1mdW5jdGlvbiBXdyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBHdyhuLGUpO3ZhciBpPXQuc2l0ZTtyZXR1cm4gaVsxXT09PWU/aVswXToxLzB9dmFyIFl3LFF3LFp3LEt3LFh3PTFlLTYsJHc9MWUtMTI7ZnVuY3Rpb24gSncodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gdHgodCxlKXt2YXIgbixpLHIsbz10LnNvcnQoSncpLnBvcCgpO2ZvcihLdz1bXSxRdz1uZXcgQXJyYXkodC5sZW5ndGgpLFl3PW5ldyBUdyxadz1uZXcgVHc7OylpZihyPUR3LG8mJighcnx8b1sxXTxyLnl8fG9bMV09PT1yLnkmJm9bMF08ci54KSlvWzBdPT09biYmb1sxXT09PWl8fChxdyhvKSxuPW9bMF0saT1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighcilicmVhaztIdyhyLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLGkscj0wLG89UXcubGVuZ3RoO3I8bzsrK3IpaWYoKHQ9UXdbcl0pJiYoaT0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilhW25dPW4sc1tuXT1Qdyh0LEt3W2Vbbl1dKTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNbZV0tc1t0XX0pLG49MDtuPGk7KytuKXNbbl09ZVthW25dXTtmb3Iobj0wO248aTsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgYT0rZVswXVswXSxzPStlWzBdWzFdLHU9K2VbMV1bMF0sYz0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4saSl7Zm9yKHZhciByLG89S3cubGVuZ3RoO28tLTspTXcocj1Ld1tvXSx0LGUsbixpKSYmancocix0LGUsbixpKSYmKE1hdGguYWJzKHJbMF1bMF0tclsxXVswXSk+WHd8fE1hdGguYWJzKHJbMF1bMV0tclsxXVsxXSk+WHcpfHxkZWxldGUgS3dbb119KGEscyx1LGMpLGZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByLG8sYSxzLHUsYyxsLGYsaCxkLHAsbSx5PVF3Lmxlbmd0aCx2PSEwO2ZvcihyPTA7cjx5OysrcilpZihvPVF3W3JdKXtmb3IoYT1vLnNpdGUscz0odT1vLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspS3dbdVtzXV18fHUuc3BsaWNlKHMsMSk7Zm9yKHM9MCxjPXUubGVuZ3RoO3M8YzspcD0oZD1SdyhvLEt3W3Vbc11dKSlbMF0sbT1kWzFdLGY9KGw9TncobyxLd1t1WysrcyVjXV0pKVswXSxoPWxbMV0sKE1hdGguYWJzKHAtZik+WHd8fE1hdGguYWJzKG0taCk+WHcpJiYodS5zcGxpY2UocywwLEt3LnB1c2goQXcoYSxkLE1hdGguYWJzKHAtdCk8WHcmJmktbT5Ydz9bdCxNYXRoLmFicyhmLXQpPFh3P2g6aV06TWF0aC5hYnMobS1pKTxYdyYmbi1wPlh3P1tNYXRoLmFicyhoLWkpPFh3P2Y6bixpXTpNYXRoLmFicyhwLW4pPFh3JiZtLWU+WHc/W24sTWF0aC5hYnMoZi1uKTxYdz9oOmVdOk1hdGguYWJzKG0tZSk8WHcmJnAtdD5Ydz9bTWF0aC5hYnMoaC1lKTxYdz9mOnQsZV06bnVsbCkpLTEpLCsrYyk7YyYmKHY9ITEpfWlmKHYpe3ZhciBnLGIsXyx3PTEvMDtmb3Iocj0wLHY9bnVsbDtyPHk7KytyKShvPVF3W3JdKSYmKF89KGc9KGE9by5zaXRlKVswXS10KSpnKyhiPWFbMV0tZSkqYik8dyYmKHc9Xyx2PW8pO2lmKHYpe3ZhciB4PVt0LGVdLFM9W3QsaV0sRT1bbixpXSxDPVtuLGVdO3YuaGFsZmVkZ2VzLnB1c2goS3cucHVzaChBdyhhPXYuc2l0ZSx4LFMpKS0xLEt3LnB1c2goQXcoYSxTLEUpKS0xLEt3LnB1c2goQXcoYSxFLEMpKS0xLEt3LnB1c2goQXcoYSxDLHgpKS0xKX19Zm9yKHI9MDtyPHk7KytyKShvPVF3W3JdKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIFF3W3JdKX0oYSxzLHUsYyl9dGhpcy5lZGdlcz1Ldyx0aGlzLmNlbGxzPVF3LFl3PVp3PUt3PVF3PW51bGx9dHgucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0eCxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTncoZSx0W25dKX0pO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihuLGkpe2lmKG89KHI9bi5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIHIsbyxhLHMsdSxjLGw9bi5zaXRlLGY9LTEsaD1lW3Jbby0xXV0sZD1oLmxlZnQ9PT1sP2gucmlnaHQ6aC5sZWZ0OysrZjxvOylhPWQsZD0oaD1lW3JbZl1dKS5sZWZ0PT09bD9oLnJpZ2h0OmgubGVmdCxhJiZkJiZpPGEuaW5kZXgmJmk8ZC5pbmRleCYmKChzPWwpWzBdLShjPWQpWzBdKSooKHU9YSlbMV0tc1sxXSktKHNbMF0tdVswXSkqKGNbMV0tc1sxXSk8MCYmdC5wdXNoKFtsLmRhdGEsYS5kYXRhLGQuZGF0YV0pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LmxlZnQuZGF0YSx0YXJnZXQ6dC5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGkscixvPXRoaXMsYT1vLl9mb3VuZHx8MCxzPW8uY2VsbHMubGVuZ3RoOyEocj1vLmNlbGxzW2FdKTspaWYoKythPj1zKXJldHVybiBudWxsO3ZhciB1PXQtci5zaXRlWzBdLGM9ZS1yLnNpdGVbMV0sbD11KnUrYypjO2Rve3I9by5jZWxsc1tpPWFdLGE9bnVsbCxyLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBpPW8uZWRnZXNbbl0scz1pLmxlZnQ7aWYocyE9PXIuc2l0ZSYmc3x8KHM9aS5yaWdodCkpe3ZhciB1PXQtc1swXSxjPWUtc1sxXSxmPXUqdStjKmM7ZjxsJiYobD1mLGE9cy5pbmRleCl9fSl9d2hpbGUobnVsbCE9PWEpO3JldHVybiBvLl9mb3VuZD1pLG51bGw9PW58fGw8PW4qbj9yLnNpdGU6bnVsbH19O3ZhciBleD1mdW5jdGlvbigpe3ZhciB0PV93LGU9d3csbj1udWxsO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIG5ldyB0eChpLm1hcChmdW5jdGlvbihuLHIpe3ZhciBvPVtNYXRoLnJvdW5kKHQobixyLGkpL1h3KSpYdyxNYXRoLnJvdW5kKGUobixyLGkpL1h3KSpYd107cmV0dXJuIG8uaW5kZXg9cixvLmRhdGE9bixvfSksbil9cmV0dXJuIGkucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkucG9seWdvbnMoKX0saS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5saW5rcygpfSxpLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KS50cmlhbmdsZXMoKX0saS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YncoK2UpLGkpOnR9LGkueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ3KCt0KSxpKTplfSxpLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0saSk6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0saSk6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxpfSxueD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGl4KHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn1peC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOml4LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBpeCh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IGl4KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHJ4PW5ldyBpeCgxLDAsMCk7ZnVuY3Rpb24gb3godCl7cmV0dXJuIHQuX196b29tfHxyeH1mdW5jdGlvbiBheCgpe1l0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfW94LnByb3RvdHlwZT1peC5wcm90b3R5cGU7dmFyIHN4PWZ1bmN0aW9uKCl7WXQucHJldmVudERlZmF1bHQoKSxZdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX07ZnVuY3Rpb24gdXgoKXtyZXR1cm4hWXQuYnV0dG9ufWZ1bmN0aW9uIGN4KCl7dmFyIHQsZSxuPXRoaXM7cmV0dXJuIG4gaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PShuPW4ub3duZXJTVkdFbGVtZW50fHxuKS53aWR0aC5iYXNlVmFsLnZhbHVlLGU9bi5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9bi5jbGllbnRXaWR0aCxlPW4uY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3QsZV1dfWZ1bmN0aW9uIGx4KCl7cmV0dXJuIHRoaXMuX196b29tfHxyeH1mdW5jdGlvbiBmeCgpe3JldHVybi1ZdC5kZWx0YVkqKFl0LmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIGh4KCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGR4KHQsZSxuKXt2YXIgaT10LmludmVydFgoZVswXVswXSktblswXVswXSxyPXQuaW52ZXJ0WChlWzFdWzBdKS1uWzFdWzBdLG89dC5pbnZlcnRZKGVbMF1bMV0pLW5bMF1bMV0sYT10LmludmVydFkoZVsxXVsxXSktblsxXVsxXTtyZXR1cm4gdC50cmFuc2xhdGUocj5pPyhpK3IpLzI6TWF0aC5taW4oMCxpKXx8TWF0aC5tYXgoMCxyKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX12YXIgcHg9ZnVuY3Rpb24oKXt2YXIgdCxlLG49dXgsaT1jeCxyPWR4LG89ZngsYT1oeCxzPVswLDEvMF0sdT1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxjPTI1MCxsPWFpLGY9W10saD1odCgic3RhcnQiLCJ6b29tIiwiZW5kIiksZD01MDAscD0xNTAsbT0wO2Z1bmN0aW9uIHkodCl7dC5wcm9wZXJ0eSgiX196b29tIixseCkub24oIndoZWVsLnpvb20iLFMpLm9uKCJtb3VzZWRvd24uem9vbSIsRSkub24oImRibGNsaWNrLnpvb20iLEMpLmZpbHRlcihhKS5vbigidG91Y2hzdGFydC56b29tIixPKS5vbigidG91Y2htb3ZlLnpvb20iLFQpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLGspLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuKGU9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUpKSk9PT10Lms/dDpuZXcgaXgoZSx0LngsdC55KX1mdW5jdGlvbiBnKHQsZSxuKXt2YXIgaT1lWzBdLW5bMF0qdC5rLHI9ZVsxXS1uWzFdKnQuaztyZXR1cm4gaT09PXQueCYmcj09PXQueT90Om5ldyBpeCh0LmssaSxyKX1mdW5jdGlvbiBiKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIF8odCxlLG4pe3Qub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7dyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXt3KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXcodGhpcyx0KSxvPWkuYXBwbHkodGhpcyx0KSxhPW58fGIobykscz1NYXRoLm1heChvWzFdWzBdLW9bMF1bMF0sb1sxXVsxXS1vWzBdWzFdKSx1PXRoaXMuX196b29tLGM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLHQpOmUsZj1sKHUuaW52ZXJ0KGEpLmNvbmNhdChzL3UuayksYy5pbnZlcnQoYSkuY29uY2F0KHMvYy5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9YztlbHNle3ZhciBlPWYodCksbj1zL2VbMl07dD1uZXcgaXgobixhWzBdLWVbMF0qbixhWzFdLWVbMV0qbil9ci56b29tKG51bGwsdCl9fSl9ZnVuY3Rpb24gdyh0LGUpe2Zvcih2YXIgbixpPTAscj1mLmxlbmd0aDtpPHI7KytpKWlmKChuPWZbaV0pLnRoYXQ9PT10KXJldHVybiBuO3JldHVybiBuZXcgeCh0LGUpfWZ1bmN0aW9uIHgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9aS5hcHBseSh0LGUpfWZ1bmN0aW9uIFMoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dyh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxpPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxhPWZlKHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PWFbMF0mJnQubW91c2VbMF1bMV09PT1hWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPWEpKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1pKXJldHVybjt0Lm1vdXNlPVthLGUuaW52ZXJ0KGEpXSxKaSh0aGlzKSx0LnN0YXJ0KCl9c3goKSx0LndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LndoZWVsPW51bGwsdC5lbmQoKX0scCksdC56b29tKCJtb3VzZSIscihnKHYoZSxpKSx0Lm1vdXNlWzBdLHQubW91c2VbMV0pLHQuZXh0ZW50LHUpKX19ZnVuY3Rpb24gRSgpe2lmKCFlJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dyh0aGlzLGFyZ3VtZW50cyksaT1yZShZdC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uKCl7aWYoc3goKSwhdC5tb3ZlZCl7dmFyIGU9WXQuY2xpZW50WC1hLG49WXQuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5tfXQuem9vbSgibW91c2UiLHIoZyh0LnRoYXQuX196b29tLHQubW91c2VbMF09ZmUodC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCx1KSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbigpe2kub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZ2UoWXQudmlldyx0Lm1vdmVkKSxzeCgpLHQuZW5kKCl9LCEwKSxvPWZlKHRoaXMpLGE9WXQuY2xpZW50WCxzPVl0LmNsaWVudFk7dmUoWXQudmlldyksYXgoKSx0Lm1vdXNlPVtvLHRoaXMuX196b29tLmludmVydChvKV0sSmkodGhpcyksdC5zdGFydCgpfX1mdW5jdGlvbiBDKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXRoaXMuX196b29tLGU9ZmUodGhpcyksbz10LmludmVydChlKSxhPXIoZyh2KHQsdC5rKihZdC5zaGlmdEtleT8uNToyKSksZSxvKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx1KTtzeCgpLGM+MD9yZSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYykuY2FsbChfLGEsZSk6cmUodGhpcykuY2FsbCh5LnRyYW5zZm9ybSxhKX19ZnVuY3Rpb24gTygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxpLHIsbyxhPXcodGhpcyxhcmd1bWVudHMpLHM9WXQuY2hhbmdlZFRvdWNoZXMsdT1zLmxlbmd0aDtmb3IoYXgoKSxpPTA7aTx1OysraSlvPVtvPWRlKHRoaXMscywocj1zW2ldKS5pZGVudGlmaWVyKSx0aGlzLl9fem9vbS5pbnZlcnQobyksci5pZGVudGlmaWVyXSxhLnRvdWNoMD9hLnRvdWNoMXx8KGEudG91Y2gxPW8pOihhLnRvdWNoMD1vLGU9ITApO2lmKHQmJih0PWNsZWFyVGltZW91dCh0KSwhYS50b3VjaDEpKXJldHVybiBhLmVuZCgpLHZvaWQoKG89cmUodGhpcykub24oImRibGNsaWNrLnpvb20iKSkmJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpKTtlJiYodD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dD1udWxsfSxkKSxKaSh0aGlzKSxhLnN0YXJ0KCkpfX1mdW5jdGlvbiBUKCl7dmFyIGUsbixpLG8sYT13KHRoaXMsYXJndW1lbnRzKSxzPVl0LmNoYW5nZWRUb3VjaGVzLGM9cy5sZW5ndGg7Zm9yKHN4KCksdCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxlPTA7ZTxjOysrZSlpPWRlKHRoaXMscywobj1zW2VdKS5pZGVudGlmaWVyKSxhLnRvdWNoMCYmYS50b3VjaDBbMl09PT1uLmlkZW50aWZpZXI/YS50b3VjaDBbMF09aTphLnRvdWNoMSYmYS50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJihhLnRvdWNoMVswXT1pKTtpZihuPWEudGhhdC5fX3pvb20sYS50b3VjaDEpe3ZhciBsPWEudG91Y2gwWzBdLGY9YS50b3VjaDBbMV0saD1hLnRvdWNoMVswXSxkPWEudG91Y2gxWzFdLHA9KHA9aFswXS1sWzBdKSpwKyhwPWhbMV0tbFsxXSkqcCxtPShtPWRbMF0tZlswXSkqbSsobT1kWzFdLWZbMV0pKm07bj12KG4sTWF0aC5zcXJ0KHAvbSkpLGk9WyhsWzBdK2hbMF0pLzIsKGxbMV0raFsxXSkvMl0sbz1bKGZbMF0rZFswXSkvMiwoZlsxXStkWzFdKS8yXX1lbHNle2lmKCFhLnRvdWNoMClyZXR1cm47aT1hLnRvdWNoMFswXSxvPWEudG91Y2gwWzFdfWEuem9vbSgidG91Y2giLHIoZyhuLGksbyksYS5leHRlbnQsdSkpfWZ1bmN0aW9uIGsoKXt2YXIgdCxuLGk9dyh0aGlzLGFyZ3VtZW50cykscj1ZdC5jaGFuZ2VkVG91Y2hlcyxvPXIubGVuZ3RoO2ZvcihheCgpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlPW51bGx9LGQpLHQ9MDt0PG87Kyt0KW49clt0XSxpLnRvdWNoMCYmaS50b3VjaDBbMl09PT1uLmlkZW50aWZpZXI/ZGVsZXRlIGkudG91Y2gwOmkudG91Y2gxJiZpLnRvdWNoMVsyXT09PW4uaWRlbnRpZmllciYmZGVsZXRlIGkudG91Y2gxO2kudG91Y2gxJiYhaS50b3VjaDAmJihpLnRvdWNoMD1pLnRvdWNoMSxkZWxldGUgaS50b3VjaDEpLGkudG91Y2gwP2kudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChpLnRvdWNoMFswXSk6aS5lbmQoKX1yZXR1cm4geS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgbj10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7bi5wcm9wZXJ0eSgiX196b29tIixseCksdCE9PW4/Xyh0LGUpOm4uaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe3codGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSl9LHkuc2NhbGVCeT1mdW5jdGlvbih0LGUpe3kuc2NhbGVUbyh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpfSl9LHkuc2NhbGVUbz1mdW5jdGlvbih0LGUpe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPXRoaXMuX196b29tLG89Yih0KSxhPW4uaW52ZXJ0KG8pLHM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gcihnKHYobixzKSxvLGEpLHQsdSl9KX0seS50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7eS50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3JldHVybiByKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHUpfSl9LHkudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4pe3kudHJhbnNmb3JtKHQsZnVuY3Rpb24oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLGE9Yih0KTtyZXR1cm4gcihyeC50cmFuc2xhdGUoYVswXSxhWzFdKS5zY2FsZShvLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT8tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWUsImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uKSx0LHUpfSl9LHgucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5pbmRleD1mLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZi5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7JHQobmV3IGZ1bmN0aW9uKHQsZSxuKXt0aGlzLnRhcmdldD15LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59KDAsdCx0aGlzLnRoYXQuX196b29tKSxoLmFwcGx5LGgsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0seS53aGVlbERlbHRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bngoK3QpLHkpOm99LHkuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bngoISF0KSx5KTpufSx5LnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om54KCEhdCkseSk6YX0seS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpueChbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSkseSk6aX0seS5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oc1swXT0rdFswXSxzWzFdPSt0WzFdLHkpOltzWzBdLHNbMV1dfSx5LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odVswXVswXT0rdFswXVswXSx1WzFdWzBdPSt0WzFdWzBdLHVbMF1bMV09K3RbMF1bMV0sdVsxXVsxXT0rdFsxXVsxXSx5KTpbW3VbMF1bMF0sdVswXVsxXV0sW3VbMV1bMF0sdVsxXVsxXV1dfSx5LmNvbnN0cmFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHkpOnJ9LHkuZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QseSk6Y30seS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LHkpOmx9LHkub249ZnVuY3Rpb24oKXt2YXIgdD1oLm9uLmFwcGx5KGgsYXJndW1lbnRzKTtyZXR1cm4gdD09PWg/eTp0fSx5LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09KHQ9K3QpKnQseSk6TWF0aC5zcXJ0KG0pfSx5fTtuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiI1LjUuMCJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gSX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gan0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiB4fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBrfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBydH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU299KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3b30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV299KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLb30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWm99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc2F9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWmV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdm59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdmF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4YX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGh0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQ2V9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2ZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGdlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1hfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHphfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHVyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHdyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRXJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6cn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQnJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSHJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFyfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlhfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUWF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBaYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEthfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJGF9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHYX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZXN9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gbnN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYnN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9zfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGtzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcXN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSHN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBNc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdzfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV3N9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZc30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHp1fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gamN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZmx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBobH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9sfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geWx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGbH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQmx9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVbH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlsfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gT2x9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBXZn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5aH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1ofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZ2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2aH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEVofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBUaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE9ofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQ2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBJaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTWh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBhaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX2h9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBiaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE5ofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUGh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRmh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gemh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYY30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGp1fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWWZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxaH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFdofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geWR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRofSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geGR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBrZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHdkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRGR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHpkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSGR9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gS259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSW59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV259KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFpufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUm59KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCbn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVufSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1pfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geWl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2aX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIF9pfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVm99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEdkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWmR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFhkfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbHN9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKZH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG5wfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBscH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gU3B9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4geHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGNwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBQcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE5wfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUnB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIExwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBOdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJ2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHp2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVnZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFV2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEd2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV3Z9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBadn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFF2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLdn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEp2fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJHZ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBlZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBuZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9nfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBzZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1Z30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geWd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBiZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGdnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBfZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4geGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBDZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEVnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4ga2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUGd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBNZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFJnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gemd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gR2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBxZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFlnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRnfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWmd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBLZ30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG5ifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGFifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc2J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc2V9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBFdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbXR9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBwdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxlfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaGV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpZX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGd0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX3R9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBNdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcGV9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBqdH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFl0fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gJHR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gVGJ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gUGJ9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gTWJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBEYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVWJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBCYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSGJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBYYn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuICRifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSmJ9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB2X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHlffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBlX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY199KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBTX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIENffSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHdffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBNX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE5ffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSV99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB6X30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEJffSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEFifSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWF99KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkX30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGV3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaXd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJ3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY3d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBsd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGZ3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYXd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBod30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGR3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcHd9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5d30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHZ3fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gc3d9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBnd30pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFZwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gVXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBIcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBZcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFFwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWXB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEtwfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWHB9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKcH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHRtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gbm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBpbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG9tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gaG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBvbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGhtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gYW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBkbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHNtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB1bX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG1tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gY219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB5bX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGxtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBmbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIGdtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB3bX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBPbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFRtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQW19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBJbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIE1tfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBSbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gUm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBVbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIERtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gSG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBMbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHFtfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gRm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBHbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHptfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gV219KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBWbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIFltfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gQm19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBRbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEttfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gWG19KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBKbX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHR5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gX3Z9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBheX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHN5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gdXl9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBjeX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHJ5fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gd3Z9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiB4dn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIElpfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFBpfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gTml9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBGaX0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIHppfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiAkcn0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIEppfSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gZXh9KSxuLmQoZSwhMSxmdW5jdGlvbigpe3JldHVybiBweH0pLG4uZChlLCExLGZ1bmN0aW9uKCl7cmV0dXJuIG94fSksbi5kKGUsITEsZnVuY3Rpb24oKXtyZXR1cm4gcnh9KX0sV2Y0cDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwidyIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKGUsInYiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gQ30pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBPfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gRX0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiBUfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGt9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gcX0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIEh9KSxuLmQoZSwibCIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBEfSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJwIixmdW5jdGlvbigpe3JldHVybiBGfSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KTt2YXIgaT1uKCJDY25HIikscj1uKCJtclNHIiksbz1uKCJuNmdHIiksYT1uKCJLOUlhIikscz0obigiNmJsRiIpLG4oImRXWmciKSksdT0obigiWllqdCIpLG4oIllTaDIiKSksYz1uZXcgaS5vKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9zYW5pdHlDaGVja3NFbmFibGVkPXQsdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMSx0aGlzLl9oYXNDaGVja2VkSGFtbWVyPSExLHRoaXMuX2RvY3VtZW50PSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50P2RvY3VtZW50Om51bGwsdGhpcy5fd2luZG93PSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3c/d2luZG93Om51bGwsdGhpcy5fYXJlQ2hlY2tzRW5hYmxlZCgpJiYhdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcyYmKHRoaXMuX2NoZWNrRG9jdHlwZUlzRGVmaW5lZCgpLHRoaXMuX2NoZWNrVGhlbWVJc1ByZXNlbnQoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSEwKX1yZXR1cm4gdC5wcm90b3R5cGUuX2FyZUNoZWNrc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZCYmT2JqZWN0KGkuWCkoKSYmIXRoaXMuX2lzVGVzdEVudigpfSx0LnByb3RvdHlwZS5faXNUZXN0RW52PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpbmRvdyYmKHRoaXMuX3dpbmRvdy5fX2thcm1hX198fHRoaXMuX3dpbmRvdy5qYXNtaW5lKX0sdC5wcm90b3R5cGUuX2NoZWNrRG9jdHlwZUlzRGVmaW5lZD1mdW5jdGlvbigpe3RoaXMuX2RvY3VtZW50JiYhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSYmY29uc29sZS53YXJuKCJDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSBzb21lIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLiIpfSx0LnByb3RvdHlwZS5fY2hlY2tUaGVtZUlzUHJlc2VudD1mdW5jdGlvbigpe2lmKHRoaXMuX2RvY3VtZW50JiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJtYXQtdGhlbWUtbG9hZGVkLW1hcmtlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZSh0KTtlJiYibm9uZSIhPT1lLmRpc3BsYXkmJmNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgQW5ndWxhciBNYXRlcmlhbCBjb3JlIHRoZW1lLiBNb3N0IE1hdGVyaWFsIGNvbXBvbmVudHMgbWF5IG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBGb3IgbW9yZSBpbmZvIHJlZmVyIHRvIHRoZSB0aGVtaW5nIGd1aWRlOiBodHRwczovL21hdGVyaWFsLmFuZ3VsYXIuaW8vZ3VpZGUvdGhlbWluZyIpLHRoaXMuX2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCl9fSx0LnByb3RvdHlwZS5fY2hlY2tIYW1tZXJJc0F2YWlsYWJsZT1mdW5jdGlvbigpeyF0aGlzLl9oYXNDaGVja2VkSGFtbWVyJiZ0aGlzLl93aW5kb3cmJih0aGlzLl9hcmVDaGVja3NFbmFibGVkKCkmJiF0aGlzLl93aW5kb3cuSGFtbWVyJiZjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIEhhbW1lckpTLiBDZXJ0YWluIEFuZ3VsYXIgTWF0ZXJpYWwgY29tcG9uZW50cyBtYXkgbm90IHdvcmsgY29ycmVjdGx5LiIpLHRoaXMuX2hhc0NoZWNrZWRIYW1tZXI9ITApfSx0fSgpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGU9W10sbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuXT1hcmd1bWVudHNbbl07dmFyIGk9dC5hcHBseSh0aGlzLGUpfHx0aGlzO3JldHVybiBpLl9kaXNhYmxlZD0hMSxpfXJldHVybiBPYmplY3Qoci5iKShlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoby5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlfSh0KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtmb3IodmFyIG49W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpXT1hcmd1bWVudHNbaV07dmFyIHI9dC5hcHBseSh0aGlzLG4pfHx0aGlzO3JldHVybiByLmNvbG9yPWUscn1yZXR1cm4gT2JqZWN0KHIuYikobix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsImNvbG9yIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIG49dHx8ZTtuIT09dGhpcy5fY29sb3ImJih0aGlzLl9jb2xvciYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hdC0iK3RoaXMuX2NvbG9yKSxuJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LSIrbiksdGhpcy5fY29sb3I9bil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksbn0odCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt2YXIgaT10LmFwcGx5KHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkuX2Rpc2FibGVSaXBwbGU9ITEsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImRpc2FibGVSaXBwbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9T2JqZWN0KG8uYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0odCl9dmFyIHA9bmV3IGkubygiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QoaS5XKShpLnMpfX0pLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbG9jYWxlQ2hhbmdlcz1uZXcgYS5hfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImxvY2FsZUNoYW5nZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9jYWxlQ2hhbmdlc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8dGhpcy5pc0RhdGVJbnN0YW5jZSh0KSYmdGhpcy5pc1ZhbGlkKHQpP3Q6dGhpcy5pbnZhbGlkKCl9LHQucHJvdG90eXBlLnNldExvY2FsZT1mdW5jdGlvbih0KXt0aGlzLmxvY2FsZT10LHRoaXMuX2xvY2FsZUNoYW5nZXMubmV4dCgpfSx0LnByb3RvdHlwZS5jb21wYXJlRGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFllYXIodCktdGhpcy5nZXRZZWFyKGUpfHx0aGlzLmdldE1vbnRoKHQpLXRoaXMuZ2V0TW9udGgoZSl8fHRoaXMuZ2V0RGF0ZSh0KS10aGlzLmdldERhdGUoZSl9LHQucHJvdG90eXBlLnNhbWVEYXRlPWZ1bmN0aW9uKHQsZSl7aWYodCYmZSl7dmFyIG49dGhpcy5pc1ZhbGlkKHQpLGk9dGhpcy5pc1ZhbGlkKGUpO3JldHVybiBuJiZpPyF0aGlzLmNvbXBhcmVEYXRlKHQsZSk6bj09aX1yZXR1cm4gdD09ZX0sdC5wcm90b3R5cGUuY2xhbXBEYXRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZSYmdGhpcy5jb21wYXJlRGF0ZSh0LGUpPDA/ZTpuJiZ0aGlzLmNvbXBhcmVEYXRlKHQsbik+MD9uOnR9LHR9KCkseT1uZXcgaS5vKCJtYXQtZGF0ZS1mb3JtYXRzIiksdj0idW5kZWZpbmVkIiE9dHlwZW9mIEludGwsZz17bG9uZzpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxuYXJyb3c6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXX0sYj14KDMxLGZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCsxKX0pLF89e2xvbmc6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbmFycm93OlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdfSx3PS9eXGR7NH0tXGR7Mn0tXGR7Mn0oPzpUXGR7Mn06XGR7Mn06XGR7Mn0oPzpcLlxkKyk/KD86WnwoPzooPzpcK3wtKVxkezJ9OlxkezJ9KSk/KT8kLztmdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciBuPUFycmF5KHQpLGk9MDtpPHQ7aSsrKW5baV09ZShpKTtyZXR1cm4gbn12YXIgUz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLnVzZVV0Y0ZvckRpc3BsYXk9ITAsdC5wcm90b3R5cGUuc2V0TG9jYWxlLmNhbGwoaSxlKSxpLnVzZVV0Y0ZvckRpc3BsYXk9IW4uVFJJREVOVCxpLl9jbGFtcERhdGU9bi5UUklERU5UfHxuLkVER0UsaX1yZXR1cm4gT2JqZWN0KHIuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9LGUucHJvdG90eXBlLmdldE1vbnRoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9LGUucHJvdG90eXBlLmdldERhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpfSxlLnByb3RvdHlwZS5nZXREYXlPZldlZWs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCl9LGUucHJvdG90eXBlLmdldE1vbnRoTmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2KXt2YXIgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7bW9udGg6dCx0aW1lWm9uZToidXRjIn0pO3JldHVybiB4KDEyLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycyhlLl9mb3JtYXQobixuZXcgRGF0ZSgyMDE3LHQsMSkpKX0pfXJldHVybiBnW3RdfSxlLnByb3RvdHlwZS5nZXREYXRlTmFtZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHYpe3ZhciBlPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLHtkYXk6Im51bWVyaWMiLHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHgoMzEsZnVuY3Rpb24obil7cmV0dXJuIHQuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHQuX2Zvcm1hdChlLG5ldyBEYXRlKDIwMTcsMCxuKzEpKSl9KX1yZXR1cm4gYn0sZS5wcm90b3R5cGUuZ2V0RGF5T2ZXZWVrTmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih2KXt2YXIgbj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7d2Vla2RheTp0LHRpbWVab25lOiJ1dGMifSk7cmV0dXJuIHgoNyxmdW5jdGlvbih0KXtyZXR1cm4gZS5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnMoZS5fZm9ybWF0KG4sbmV3IERhdGUoMjAxNywwLHQrMSkpKX0pfXJldHVybiBfW3RdfSxlLnByb3RvdHlwZS5nZXRZZWFyTmFtZT1mdW5jdGlvbih0KXtpZih2KXt2YXIgZT1uZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSx7eWVhcjoibnVtZXJpYyIsdGltZVpvbmU6InV0YyJ9KTtyZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModGhpcy5fZm9ybWF0KGUsdCkpfXJldHVybiBTdHJpbmcodGhpcy5nZXRZZWFyKHQpKX0sZS5wcm90b3R5cGUuZ2V0Rmlyc3REYXlPZldlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sZS5wcm90b3R5cGUuZ2V0TnVtRGF5c0luTW9udGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0RGF0ZSh0aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpKzEsMCkpfSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jcmVhdGVEYXRlKHRoaXMuZ2V0WWVhcih0KSx0aGlzLmdldE1vbnRoKHQpLHRoaXMuZ2V0RGF0ZSh0KSl9LGUucHJvdG90eXBlLmNyZWF0ZURhdGU9ZnVuY3Rpb24odCxlLG4pe2lmKGU8MHx8ZT4xMSl0aHJvdyBFcnJvcignSW52YWxpZCBtb250aCBpbmRleCAiJytlKyciLiBNb250aCBpbmRleCBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCAxMS4nKTtpZihuPDEpdGhyb3cgRXJyb3IoJ0ludmFsaWQgZGF0ZSAiJytuKyciLiBEYXRlIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4nKTt2YXIgaT10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHQsZSxuKTtpZihpLmdldE1vbnRoKCkhPWUpdGhyb3cgRXJyb3IoJ0ludmFsaWQgZGF0ZSAiJytuKyciIGZvciBtb250aCB3aXRoIGluZGV4ICInK2UrJyIuJyk7cmV0dXJuIGl9LGUucHJvdG90eXBlLnRvZGF5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlfSxlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/bmV3IERhdGUodCk6dD9uZXcgRGF0ZShEYXRlLnBhcnNlKHQpKTpudWxsfSxlLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5pc1ZhbGlkKHQpKXRocm93IEVycm9yKCJOYXRpdmVEYXRlQWRhcHRlcjogQ2Fubm90IGZvcm1hdCBpbnZhbGlkIGRhdGUuIik7aWYodil7dGhpcy5fY2xhbXBEYXRlJiYodC5nZXRGdWxsWWVhcigpPDF8fHQuZ2V0RnVsbFllYXIoKT45OTk5KSYmKHQ9dGhpcy5jbG9uZSh0KSkuc2V0RnVsbFllYXIoTWF0aC5tYXgoMSxNYXRoLm1pbig5OTk5LHQuZ2V0RnVsbFllYXIoKSkpKSxlPU9iamVjdChyLmEpKHt9LGUse3RpbWVab25lOiJ1dGMifSk7dmFyIG49bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5sb2NhbGUsZSk7cmV0dXJuIHRoaXMuX3N0cmlwRGlyZWN0aW9uYWxpdHlDaGFyYWN0ZXJzKHRoaXMuX2Zvcm1hdChuLHQpKX1yZXR1cm4gdGhpcy5fc3RyaXBEaXJlY3Rpb25hbGl0eUNoYXJhY3RlcnModC50b0RhdGVTdHJpbmcoKSl9LGUucHJvdG90eXBlLmFkZENhbGVuZGFyWWVhcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGRDYWxlbmRhck1vbnRocyh0LDEyKmUpfSxlLnByb3RvdHlwZS5hZGRDYWxlbmRhck1vbnRocz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2NyZWF0ZURhdGVXaXRoT3ZlcmZsb3codGhpcy5nZXRZZWFyKHQpLHRoaXMuZ2V0TW9udGgodCkrZSx0aGlzLmdldERhdGUodCkpO3JldHVybiB0aGlzLmdldE1vbnRoKG4pIT0oKHRoaXMuZ2V0TW9udGgodCkrZSklMTIrMTIpJTEyJiYobj10aGlzLl9jcmVhdGVEYXRlV2l0aE92ZXJmbG93KHRoaXMuZ2V0WWVhcihuKSx0aGlzLmdldE1vbnRoKG4pLDApKSxufSxlLnByb3RvdHlwZS5hZGRDYWxlbmRhckRheXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdyh0aGlzLmdldFllYXIodCksdGhpcy5nZXRNb250aCh0KSx0aGlzLmdldERhdGUodCkrZSl9LGUucHJvdG90eXBlLnRvSXNvODYwMT1mdW5jdGlvbih0KXtyZXR1cm5bdC5nZXRVVENGdWxsWWVhcigpLHRoaXMuXzJkaWdpdCh0LmdldFVUQ01vbnRoKCkrMSksdGhpcy5fMmRpZ2l0KHQuZ2V0VVRDRGF0ZSgpKV0uam9pbigiLSIpfSxlLnByb3RvdHlwZS5kZXNlcmlhbGl6ZT1mdW5jdGlvbihlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCFlKXJldHVybiBudWxsO2lmKHcudGVzdChlKSl7dmFyIG49bmV3IERhdGUoZSk7aWYodGhpcy5pc1ZhbGlkKG4pKXJldHVybiBufX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzZXJpYWxpemUuY2FsbCh0aGlzLGUpfSxlLnByb3RvdHlwZS5pc0RhdGVJbnN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGV9LGUucHJvdG90eXBlLmlzVmFsaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIWlzTmFOKHQuZ2V0VGltZSgpKX0sZS5wcm90b3R5cGUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZShOYU4pfSxlLnByb3RvdHlwZS5fY3JlYXRlRGF0ZVdpdGhPdmVyZmxvdz1mdW5jdGlvbih0LGUsbil7dmFyIGk9bmV3IERhdGUodCxlLG4pO3JldHVybiB0Pj0wJiZ0PDEwMCYmaS5zZXRGdWxsWWVhcih0aGlzLmdldFllYXIoaSktMTkwMCksaX0sZS5wcm90b3R5cGUuXzJkaWdpdD1mdW5jdGlvbih0KXtyZXR1cm4oIjAwIit0KS5zbGljZSgtMil9LGUucHJvdG90eXBlLl9zdHJpcERpcmVjdGlvbmFsaXR5Q2hhcmFjdGVycz1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXHUyMDBlXHUyMDBmXS9nLCIiKX0sZS5wcm90b3R5cGUuX2Zvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBEYXRlKERhdGUuVVRDKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCksZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpLGUuZ2V0U2Vjb25kcygpLGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtyZXR1cm4gdC5mb3JtYXQobil9LGV9KG0pLEU9e3BhcnNlOntkYXRlSW5wdXQ6bnVsbH0sZGlzcGxheTp7ZGF0ZUlucHV0Ont5ZWFyOiJudW1lcmljIixtb250aDoibnVtZXJpYyIsZGF5OiJudW1lcmljIn0sbW9udGhZZWFyTGFiZWw6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCJ9LGRhdGVBMTF5TGFiZWw6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMifSxtb250aFllYXJBMTF5TGFiZWw6e3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIn19fSxDPWZ1bmN0aW9uKCl7fSxPPWZ1bmN0aW9uKCl7fSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fbGluZXM9dCx0aGlzLl9lbGVtZW50PWUsdGhpcy5fc2V0TGluZUNsYXNzKHRoaXMuX2xpbmVzLmxlbmd0aCksdGhpcy5fbGluZXMuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24oKXtuLl9zZXRMaW5lQ2xhc3Mobi5fbGluZXMubGVuZ3RoKX0pfXJldHVybiB0LnByb3RvdHlwZS5fc2V0TGluZUNsYXNzPWZ1bmN0aW9uKHQpe3RoaXMuX3Jlc2V0Q2xhc3NlcygpLDI9PT10fHwzPT09dD90aGlzLl9zZXRDbGFzcygibWF0LSIrdCsiLWxpbmUiLCEwKTp0PjMmJnRoaXMuX3NldENsYXNzKCJtYXQtbXVsdGktbGluZSIsITApfSx0LnByb3RvdHlwZS5fcmVzZXRDbGFzc2VzPWZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2xhc3MoIm1hdC0yLWxpbmUiLCExKSx0aGlzLl9zZXRDbGFzcygibWF0LTMtbGluZSIsITEpLHRoaXMuX3NldENsYXNzKCJtYXQtbXVsdGktbGluZSIsITEpfSx0LnByb3RvdHlwZS5fc2V0Q2xhc3M9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHQpfSx0fSgpLGs9ZnVuY3Rpb24oKXt9LEE9ZnVuY3Rpb24oKXt2YXIgdD17RkFESU5HX0lOOjAsVklTSUJMRToxLEZBRElOR19PVVQ6MixISURERU46M307cmV0dXJuIHRbdC5GQURJTkdfSU5dPSJGQURJTkdfSU4iLHRbdC5WSVNJQkxFXT0iVklTSUJMRSIsdFt0LkZBRElOR19PVVRdPSJGQURJTkdfT1VUIix0W3QuSElEREVOXT0iSElEREVOIix0fSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPW4sdGhpcy5zdGF0ZT1BLkhJRERFTn1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZU91dD1mdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9LHR9KCksaj17ZW50ZXJEdXJhdGlvbjo0NTAsZXhpdER1cmF0aW9uOjQwMH0sTT04MDAsUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI9dGhpczt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX3RyaWdnZXJFdmVudHM9bmV3IE1hcCx0aGlzLl9hY3RpdmVSaXBwbGVzPW5ldyBTZXQsdGhpcy5fZXZlbnRPcHRpb25zPSEhT2JqZWN0KHMuYykoKSYme3Bhc3NpdmU6ITB9LHRoaXMub25Nb3VzZWRvd249ZnVuY3Rpb24odCl7dmFyIGU9ci5fbGFzdFRvdWNoU3RhcnRFdmVudCYmRGF0ZS5ub3coKTxyLl9sYXN0VG91Y2hTdGFydEV2ZW50K007ci5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHxlfHwoci5faXNQb2ludGVyRG93bj0hMCxyLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHIuX3RhcmdldC5yaXBwbGVDb25maWcpKX0sdGhpcy5vblRvdWNoU3RhcnQ9ZnVuY3Rpb24odCl7ci5fdGFyZ2V0LnJpcHBsZURpc2FibGVkfHwoci5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHIuX2lzUG9pbnRlckRvd249ITAsci5mYWRlSW5SaXBwbGUodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFksci5fdGFyZ2V0LnJpcHBsZUNvbmZpZykpfSx0aGlzLm9uUG9pbnRlclVwPWZ1bmN0aW9uKCl7ci5faXNQb2ludGVyRG93biYmKHIuX2lzUG9pbnRlckRvd249ITEsci5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpeyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYodC5zdGF0ZT09PUEuVklTSUJMRXx8dC5jb25maWcudGVybWluYXRlT25Qb2ludGVyVXAmJnQuc3RhdGU9PT1BLkZBRElOR19JTikmJnQuZmFkZU91dCgpfSkpfSxpLmlzQnJvd3NlciYmKHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9bi5uYXRpdmVFbGVtZW50LHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZWRvd24pLHRoaXMuX3RyaWdnZXJFdmVudHMuc2V0KCJtb3VzZXVwIix0aGlzLm9uUG9pbnRlclVwKSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgibW91c2VsZWF2ZSIsdGhpcy5vblBvaW50ZXJVcCksdGhpcy5fdHJpZ2dlckV2ZW50cy5zZXQoInRvdWNoc3RhcnQiLHRoaXMub25Ub3VjaFN0YXJ0KSx0aGlzLl90cmlnZ2VyRXZlbnRzLnNldCgidG91Y2hlbmQiLHRoaXMub25Qb2ludGVyVXApKX1yZXR1cm4gdC5wcm90b3R5cGUuZmFkZUluUmlwcGxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzO3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgbz10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1PYmplY3Qoci5hKSh7fSxqLG4uYW5pbWF0aW9uKTtuLmNlbnRlcmVkJiYodD1vLmxlZnQrby53aWR0aC8yLGU9by50b3Arby5oZWlnaHQvMik7dmFyIHM9bi5yYWRpdXN8fGZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1NYXRoLm1heChNYXRoLmFicyh0LW4ubGVmdCksTWF0aC5hYnModC1uLnJpZ2h0KSkscj1NYXRoLm1heChNYXRoLmFicyhlLW4udG9wKSxNYXRoLmFicyhlLW4uYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChpKmkrcipyKX0odCxlLG8pLHU9dC1vLmxlZnQsYz1lLW8udG9wLGw9YS5lbnRlckR1cmF0aW9uLyhuLnNwZWVkRmFjdG9yfHwxKSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2YuY2xhc3NMaXN0LmFkZCgibWF0LXJpcHBsZS1lbGVtZW50IiksZi5zdHlsZS5sZWZ0PXUtcysicHgiLGYuc3R5bGUudG9wPWMtcysicHgiLGYuc3R5bGUuaGVpZ2h0PTIqcysicHgiLGYuc3R5bGUud2lkdGg9MipzKyJweCIsZi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9bi5jb2xvcnx8bnVsbCxmLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1sKyJtcyIsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChmKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5IiksZi5zdHlsZS50cmFuc2Zvcm09InNjYWxlKDEpIjt2YXIgaD1uZXcgSSh0aGlzLGYsbik7cmV0dXJuIGguc3RhdGU9QS5GQURJTkdfSU4sdGhpcy5fYWN0aXZlUmlwcGxlcy5hZGQoaCksbi5wZXJzaXN0ZW50fHwodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1oKSx0aGlzLnJ1blRpbWVvdXRPdXRzaWRlWm9uZShmdW5jdGlvbigpe3ZhciB0PWg9PT1pLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlO2guc3RhdGU9QS5WSVNJQkxFLG4ucGVyc2lzdGVudHx8dCYmaS5faXNQb2ludGVyRG93bnx8aC5mYWRlT3V0KCl9LGwpLGh9LHQucHJvdG90eXBlLmZhZGVPdXRSaXBwbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYWN0aXZlUmlwcGxlcy5kZWxldGUodCk7aWYodD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksZSl7dmFyIG49dC5lbGVtZW50LGk9T2JqZWN0KHIuYSkoe30saix0LmNvbmZpZy5hbmltYXRpb24pO24uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWkuZXhpdER1cmF0aW9uKyJtcyIsbi5zdHlsZS5vcGFjaXR5PSIwIix0LnN0YXRlPUEuRkFESU5HX09VVCx0aGlzLnJ1blRpbWVvdXRPdXRzaWRlWm9uZShmdW5jdGlvbigpe3Quc3RhdGU9QS5ISURERU4sbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfSxpLmV4aXREdXJhdGlvbil9fSx0LnByb3RvdHlwZS5mYWRlT3V0QWxsPWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlUmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZhZGVPdXQoKX0pfSx0LnByb3RvdHlwZS5zZXR1cFRyaWdnZXJFdmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0JiZ0IT09dGhpcy5fdHJpZ2dlckVsZW1lbnQmJih0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7ZS5fdHJpZ2dlckV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihpLG4sZS5fZXZlbnRPcHRpb25zKX0pfSksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9dCl9LHQucHJvdG90eXBlLnJ1blRpbWVvdXRPdXRzaWRlWm9uZT1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTApLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KHQsZSl9KX0sdC5wcm90b3R5cGUuX3JlbW92ZVRyaWdnZXJFdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX3RyaWdnZXJFbGVtZW50JiZ0aGlzLl90cmlnZ2VyRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZSxuKXt0Ll90cmlnZ2VyRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG4sZSx0Ll9ldmVudE9wdGlvbnMpfSl9LHR9KCksTj1uZXcgaS5vKCJtYXQtcmlwcGxlLWdsb2JhbC1vcHRpb25zIiksUj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyKXt0aGlzLl9lbGVtZW50UmVmPXQsdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMucmFkaXVzPTAsdGhpcy5zcGVlZEZhY3Rvcj0xLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZ2xvYmFsT3B0aW9ucz1pfHx7fSx0aGlzLl9yaXBwbGVSZW5kZXJlcj1uZXcgUCh0aGlzLGUsdCxuKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2Rpc2FibGVkPXQsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ0cmlnZ2VyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXI9dCx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX0sdC5wcm90b3R5cGUuZmFkZU91dEFsbD1mdW5jdGlvbigpe3RoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVPdXRBbGwoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyaXBwbGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246Ik5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGU/e2VudGVyRHVyYXRpb246MCxleGl0RHVyYXRpb246MH06T2JqZWN0KHIuYSkoe30sdGhpcy5fZ2xvYmFsT3B0aW9ucy5hbmltYXRpb24sdGhpcy5hbmltYXRpb24pLHRlcm1pbmF0ZU9uUG9pbnRlclVwOnRoaXMuX2dsb2JhbE9wdGlvbnMudGVybWluYXRlT25Qb2ludGVyVXAsc3BlZWRGYWN0b3I6dGhpcy5zcGVlZEZhY3RvcioodGhpcy5fZ2xvYmFsT3B0aW9ucy5iYXNlU3BlZWRGYWN0b3J8fDEpfX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJpcHBsZURpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCEhdGhpcy5fZ2xvYmFsT3B0aW9ucy5kaXNhYmxlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkPWZ1bmN0aW9uKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2lzSW5pdGlhbGl6ZWQmJnRoaXMuX3JpcHBsZVJlbmRlcmVyLnNldHVwVHJpZ2dlckV2ZW50cyh0aGlzLnRyaWdnZXIpfSx0LnByb3RvdHlwZS5sYXVuY2g9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1lJiYoZT0wKSwibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKHQsZSxPYmplY3Qoci5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyxuKSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCxPYmplY3Qoci5hKSh7fSx0aGlzLnJpcHBsZUNvbmZpZyx0KSl9LHR9KCksRD1mdW5jdGlvbigpe30sTD1mdW5jdGlvbigpe3RoaXMuc3RhdGU9InVuY2hlY2tlZCIsdGhpcy5kaXNhYmxlZD0hMX0sRj1mdW5jdGlvbigpe30sej0wLFY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gZS5fbGFiZWxJZD0ibWF0LW9wdGdyb3VwLWxhYmVsLSIreisrLGV9cmV0dXJuIE9iamVjdChyLmIpKGUsdCksZX0oZihmdW5jdGlvbigpe30pKSxCPTAsVT1uZXcgaS5vKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxIPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9wYXJlbnQ9bix0aGlzLmdyb3VwPXIsdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX2lkPSJtYXQtb3B0aW9uLSIrQisrLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5vblNlbGVjdGlvbkNoYW5nZT1uZXcgaS5tLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgYS5hfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm11bHRpcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImRpc2FibGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXAmJnRoaXMuZ3JvdXAuZGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fZGlzYWJsZWQ9T2JqZWN0KG8uYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJkaXNhYmxlUmlwcGxlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwidmlld1ZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuX2dldEhvc3RFbGVtZW50KCkudGV4dENvbnRlbnR8fCIiKS50cmltKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCl9LHQucHJvdG90eXBlLmRlc2VsZWN0PWZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCl9LHQucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5zZXRBY3RpdmVTdHlsZXM9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSx0LnByb3RvdHlwZS5zZXRJbmFjdGl2ZVN0eWxlcz1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9LHQucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfSx0LnByb3RvdHlwZS5faGFuZGxlS2V5ZG93bj1mdW5jdGlvbih0KXt0LmtleUNvZGUhPT11LmQmJnQua2V5Q29kZSE9PXUuanx8KHRoaXMuX3NlbGVjdFZpYUludGVyYWN0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpKX0sdC5wcm90b3R5cGUuX3NlbGVjdFZpYUludGVyYWN0aW9uPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9LHQucHJvdG90eXBlLl9nZXRUYWJJbmRleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifSx0LnByb3RvdHlwZS5fZ2V0SG9zdEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fSx0LnByb3RvdHlwZS5uZ0FmdGVyVmlld0NoZWNrZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9zZWxlY3RlZCl7dmFyIHQ9dGhpcy52aWV3VmFsdWU7dCE9PXRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWUmJih0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPXQsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSl9fSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSExKSx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITEpLHRoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfSh0aGlzLHQpKX0sdH0oKSxxPWZ1bmN0aW9uKCl7fX0sWGxQdzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigiNmJsRiIpO2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gbmV3IGkuYShlP2Z1bmN0aW9uKG4pe3JldHVybiBlLnNjaGVkdWxlKG8sMCx7ZXJyb3I6dCxzdWJzY3JpYmVyOm59KX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IodCl9KX1mdW5jdGlvbiBvKHQpe3Quc3Vic2NyaWJlci5lcnJvcih0LmVycm9yKX19LFlTaDI6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiayIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJuIixmdW5jdGlvbigpe3JldHVybiBkfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiB5fSk7dmFyIGk9OSxyPTEzLG89MjcsYT0zMixzPTM1LHU9MzYsYz0zNyxsPTM4LGY9MzksaD00MCxkPTQ4LHA9NTcsbT02NSx5PTkwfSxZaGJPOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBmfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibjZnRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9MCx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX29wZW5DbG9zZUFsbEFjdGlvbnM9bmV3IG8uYSx0aGlzLmlkPSJjZGstYWNjb3JkaW9uLSIrcysrLHRoaXMuX211bHRpPSExfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm11bHRpIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fbXVsdGk9T2JqZWN0KHIuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUub3BlbkFsbD1mdW5jdGlvbigpe3RoaXMuX29wZW5DbG9zZUFsbCghMCl9LHQucHJvdG90eXBlLmNsb3NlQWxsPWZ1bmN0aW9uKCl7dGhpcy5fb3BlbkNsb3NlQWxsKCExKX0sdC5wcm90b3R5cGUuX29wZW5DbG9zZUFsbD1mdW5jdGlvbih0KXt0aGlzLm11bHRpJiZ0aGlzLl9vcGVuQ2xvc2VBbGxBY3Rpb25zLm5leHQodCl9LHR9KCksYz0wLGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgcj10aGlzO3RoaXMuYWNjb3JkaW9uPXQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyPW4sdGhpcy5fb3BlbkNsb3NlQWxsU3Vic2NyaXB0aW9uPWEuYS5FTVBUWSx0aGlzLmNsb3NlZD1uZXcgaS5tLHRoaXMub3BlbmVkPW5ldyBpLm0sdGhpcy5kZXN0cm95ZWQ9bmV3IGkubSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBpLm0sdGhpcy5pZD0iY2RrLWFjY29yZGlvbi1jaGlsZC0iK2MrKyx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcj1mdW5jdGlvbigpe30sdGhpcy5fcmVtb3ZlVW5pcXVlU2VsZWN0aW9uTGlzdGVuZXI9bi5saXN0ZW4oZnVuY3Rpb24odCxlKXtyLmFjY29yZGlvbiYmIXIuYWNjb3JkaW9uLm11bHRpJiZyLmFjY29yZGlvbi5pZD09PWUmJnIuaWQhPT10JiYoci5leHBhbmRlZD0hMSl9KSx0aGlzLmFjY29yZGlvbiYmKHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbj10aGlzLl9zdWJzY3JpYmVUb09wZW5DbG9zZUFsbEFjdGlvbnMoKSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZXhwYW5kZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9LHNldDpmdW5jdGlvbih0KXt0PU9iamVjdChyLmIpKHQpLHRoaXMuX2V4cGFuZGVkIT09dCYmKHRoaXMuX2V4cGFuZGVkPXQsdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHQpLHQ/KHRoaXMub3BlbmVkLmVtaXQoKSx0aGlzLl9leHBhbnNpb25EaXNwYXRjaGVyLm5vdGlmeSh0aGlzLmlkLHRoaXMuYWNjb3JkaW9uP3RoaXMuYWNjb3JkaW9uLmlkOnRoaXMuaWQpKTp0aGlzLmNsb3NlZC5lbWl0KCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGlzYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl9kaXNhYmxlZD1PYmplY3Qoci5iKSh0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMub3BlbmVkLmNvbXBsZXRlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKSx0aGlzLmRlc3Ryb3llZC5lbWl0KCksdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9yZW1vdmVVbmlxdWVTZWxlY3Rpb25MaXN0ZW5lcigpLHRoaXMuX29wZW5DbG9zZUFsbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCl9LHQucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITEpfSx0LnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZXhwYW5kZWQ9ITApfSx0LnByb3RvdHlwZS5fc3Vic2NyaWJlVG9PcGVuQ2xvc2VBbGxBY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5hY2NvcmRpb24uX29wZW5DbG9zZUFsbEFjdGlvbnMuc3Vic2NyaWJlKGZ1bmN0aW9uKGUpe3QuZGlzYWJsZWR8fCh0LmV4cGFuZGVkPWUpfSl9LHR9KCksZj1mdW5jdGlvbigpe319LFlsYlE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbigibXJTRyIpLG4oIjZibEYiKSxuKCJGL1hMIik7dmFyIGk9bigiSzlJYSIpLHI9bigiQ2NuRyIpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2b2lkIDA9PT10JiYodD0hMSksdm9pZCAwPT09biYmKG49ITApO3ZhciByPXRoaXM7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1uLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5vbkNoYW5nZT10aGlzLl9lbWl0Q2hhbmdlcz9uZXcgaS5hOm51bGwsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gci5fbWFya1NlbGVjdGVkKHQpfSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJzZWxlY3RlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPUFycmF5LmZyb20odGhpcy5fc2VsZWN0aW9uLnZhbHVlcygpKSksdGhpcy5fc2VsZWN0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW25dPWFyZ3VtZW50c1tuXTt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQoZSksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tYXJrU2VsZWN0ZWQoZSl9KSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuZGVzZWxlY3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudChlKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3VubWFya1NlbGVjdGVkKGUpfSksdGhpcy5fZW1pdENoYW5nZUV2ZW50KCl9LHQucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCk/dGhpcy5kZXNlbGVjdCh0KTp0aGlzLnNlbGVjdCh0KX0sdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl91bm1hcmtBbGwoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKX0sdC5wcm90b3R5cGUuaXNTZWxlY3RlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uLmhhcyh0KX0sdC5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9LHQucHJvdG90eXBlLmhhc1ZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfSx0LnByb3RvdHlwZS5zb3J0PWZ1bmN0aW9uKHQpe3RoaXMuX211bHRpcGxlJiZ0aGlzLl9zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX0sdC5wcm90b3R5cGUuX2VtaXRDaGFuZ2VFdmVudD1mdW5jdGlvbigpe3RoaXMuX3NlbGVjdGVkPW51bGwsKHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aHx8dGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgpJiYodGhpcy5vbkNoYW5nZSYmdGhpcy5vbkNoYW5nZS5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX0sdC5wcm90b3R5cGUuX21hcmtTZWxlY3RlZD1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5fc2VsZWN0aW9uLmFkZCh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fc2VsZWN0ZWRUb0VtaXQucHVzaCh0KSl9LHQucHJvdG90eXBlLl91bm1hcmtTZWxlY3RlZD1mdW5jdGlvbih0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfSx0LnByb3RvdHlwZS5fdW5tYXJrQWxsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuX3VubWFya1NlbGVjdGVkKGUpfSl9LHQucHJvdG90eXBlLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQ9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg+MSYmIXRoaXMuX211bHRpcGxlKXRocm93IEVycm9yKCJDYW5ub3QgcGFzcyBtdWx0aXBsZSB2YWx1ZXMgaW50byBTZWxlY3Rpb25Nb2RlbCB3aXRoIHNpbmdsZS12YWx1ZSBtb2RlLiIpfSx0fSgpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fbGlzdGVuZXJzPVtdfXJldHVybiB0LnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxpPXRoaXMuX2xpc3RlbmVycztuPGkubGVuZ3RoO24rKykoMCxpW25dKSh0LGUpfSx0LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5fbGlzdGVuZXJzLnB1c2godCksZnVuY3Rpb24oKXtlLl9saXN0ZW5lcnM9ZS5fbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdCE9PWV9KX19LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzPVtdfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdH0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCl9LFpZQ2k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJtclNHIikscj1uKCJDY25HIiksbz1uKCIyNkZVIiksYT1uKCIwL3VRIikscz1uKCJGL1hMIiksdT1uKCJLOUlhIiksYz1uKCI2YmxGIiksbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIG49dC5jYWxsKHRoaXMsIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIil8fHRoaXM7cmV0dXJuIG4ubmFtZT0iRW1wdHlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIGkuYihlLHQpLGV9KEVycm9yKSxmPW4oIlZuRC8iKSxoPW4oInQ5ZloiKSxkPW4oIkZGT28iKTtmdW5jdGlvbiBwKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBtKHQpKX19dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuZGVmYXVsdFZhbHVlPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHkodCx0aGlzLmRlZmF1bHRWYWx1ZSkpfSx0fSgpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmRlZmF1bHRWYWx1ZT1uLGkuaXNFbXB0eT0hMCxpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt0aGlzLmlzRW1wdHk9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW1wdHkmJnRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlfShkLmEpLHY9bigieE15RSIpLGc9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PWIpLE9iamVjdCh2LmEpKHtoYXNWYWx1ZTohMSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5oYXNWYWx1ZT0hMH0sY29tcGxldGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNWYWx1ZSl0aHJvdyB0KCl9fSl9O2Z1bmN0aW9uIGIoKXtyZXR1cm4gbmV3IGx9dmFyIF89bigibUNoRiIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5waXBlKHQ/T2JqZWN0KGYuYSkoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4saSl9KTpfLmEsT2JqZWN0KGguYSkoMSksbj9wKGUpOmcoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx9KSl9fXZhciB4PW4oInBzVzAiKSxTPW4oIjY3WS8iKSxFPW4oIlBoam4iKSxDPW4oImI3bVciKSxPPW4oIkc1SjEiKTtmdW5jdGlvbiBUKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gMD09PXQ/T2JqZWN0KE8uYikoKTplLmxpZnQobmV3IGsodCkpfX12YXIgaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7aWYodGhpcy50b3RhbD10LHRoaXMudG90YWw8MCl0aHJvdyBuZXcgQy5hfXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBBKHQsdGhpcy50b3RhbCkpfSx0fSgpLEE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnRvdGFsPW4saS5yaW5nPW5ldyBBcnJheSxpLmNvdW50PTAsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yaW5nLG49dGhpcy50b3RhbCxpPXRoaXMuY291bnQrKztlLmxlbmd0aDxuP2UucHVzaCh0KTplW2klbl09dH0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kZXN0aW5hdGlvbixlPXRoaXMuY291bnQ7aWYoZT4wKWZvcih2YXIgbj10aGlzLmNvdW50Pj10aGlzLnRvdGFsP3RoaXMudG90YWw6dGhpcy5jb3VudCxpPXRoaXMucmluZyxyPTA7cjxuO3IrKyl7dmFyIG89ZSsrJW47dC5uZXh0KGlbb10pfXQuY29tcGxldGUoKX0sZX0oZC5hKTtmdW5jdGlvbiBJKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGkucGlwZSh0P09iamVjdChmLmEpKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxuLGkpfSk6Xy5hLFQoMSksbj9wKGUpOmcoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGx9KSl9fWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ubGlmdChuZXcgTSh0LGUsbikpfX12YXIgTT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMucHJlZGljYXRlPXQsdGhpcy50aGlzQXJnPWUsdGhpcy5zb3VyY2U9bn1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgUCh0LHRoaXMucHJlZGljYXRlLHRoaXMudGhpc0FyZyx0aGlzLnNvdXJjZSkpfSx0fSgpLFA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gby5wcmVkaWNhdGU9bixvLnRoaXNBcmc9aSxvLnNvdXJjZT1yLG8uaW5kZXg9MCxvLnRoaXNBcmc9aXx8byxvfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbih0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT0hMTt0cnl7ZT10aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZyx0LHRoaXMuaW5kZXgrKyx0aGlzLnNvdXJjZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1lfHx0aGlzLm5vdGlmeUNvbXBsZXRlKCExKX0sZS5wcm90b3R5cGUuX2NvbXBsZXRlPWZ1bmN0aW9uKCl7dGhpcy5ub3RpZnlDb21wbGV0ZSghMCl9LGV9KGQuYSksTj1uKCI5WjFGIiksUj1uKCJUeGpnIiksRD1uKCJabjhEIik7ZnVuY3Rpb24gTCh0LGUpe3ZhciBuPSExO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yJiYobj0hMCksZnVuY3Rpb24oaSl7cmV0dXJuIGkubGlmdChuZXcgRih0LGUsbikpfX12YXIgRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZvaWQgMD09PW4mJihuPSExKSx0aGlzLmFjY3VtdWxhdG9yPXQsdGhpcy5zZWVkPWUsdGhpcy5oYXNTZWVkPW59cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IHoodCx0aGlzLmFjY3VtdWxhdG9yLHRoaXMuc2VlZCx0aGlzLmhhc1NlZWQpKX0sdH0oKSx6PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8uYWNjdW11bGF0b3I9bixvLl9zZWVkPWksby5oYXNTZWVkPXIsby5pbmRleD0wLG99cmV0dXJuIGkuYihlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2VlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5oYXNTZWVkPSEwLHRoaXMuX3NlZWQ9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXtpZih0aGlzLmhhc1NlZWQpcmV0dXJuIHRoaXMuX3RyeU5leHQodCk7dGhpcy5zZWVkPXQsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfSxlLnByb3RvdHlwZS5fdHJ5TmV4dD1mdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMuaW5kZXgrKzt0cnl7ZT10aGlzLmFjY3VtdWxhdG9yKHRoaXMuc2VlZCx0LG4pfWNhdGNoKHQpe3RoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5zZWVkPWUsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpfSxlfShkLmEpLFY9bigieTNCeSIpLEI9bigiSXAwUiIpLFU9bigiWllqdCIpO24uZChlLCJ0IixmdW5jdGlvbigpe3JldHVybiBhbn0pLG4uZChlLCJ6IixmdW5jdGlvbigpe3JldHVybiBtbn0pLG4uZChlLCJBIixmdW5jdGlvbigpe3JldHVybiB5bn0pLG4uZChlLCJCIixmdW5jdGlvbigpe3JldHVybiB2bn0pLG4uZChlLCJ3IixmdW5jdGlvbigpe3JldHVybiBmbn0pLG4uZChlLCJ2IixmdW5jdGlvbigpe3JldHVybiBsbn0pLG4uZChlLCJ5IixmdW5jdGlvbigpe3JldHVybiBwbn0pLG4uZChlLCJ1IixmdW5jdGlvbigpe3JldHVybiB1bn0pLG4uZChlLCJ4IixmdW5jdGlvbigpe3JldHVybiBkbn0pLG4uZChlLCJtIixmdW5jdGlvbigpe3JldHVybiBRZX0pLG4uZChlLCJvIixmdW5jdGlvbigpe3JldHVybiAkZX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBHfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIERlfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSksbi5kKGUsImoiLGZ1bmN0aW9uKCl7cmV0dXJuIEZlfSksbi5kKGUsImgiLGZ1bmN0aW9uKCl7cmV0dXJuIG9ufSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGdufSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIGNufSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIFhlfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ufSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGVufSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHRufSksbi5kKGUsInAiLGZ1bmN0aW9uKCl7cmV0dXJuIHJufSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lfSksbi5kKGUsInEiLGZ1bmN0aW9uKCl7cmV0dXJuIFZlfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSksbi5kKGUsInIiLGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSksbi5kKGUsInMiLGZ1bmN0aW9uKCl7cmV0dXJuIG90fSk7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQsdGhpcy51cmw9ZX0scT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZvaWQgMD09PWkmJihpPSJpbXBlcmF0aXZlIiksdm9pZCAwPT09ciYmKHI9bnVsbCk7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby5uYXZpZ2F0aW9uVHJpZ2dlcj1pLG8ucmVzdG9yZWRTdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iTmF2aWdhdGlvblN0YXJ0KGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxHPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIHIudXJsQWZ0ZXJSZWRpcmVjdHM9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FbmQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJykifSxlfShIKSxXPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIHIucmVhc29uPWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJykifSxlfShIKSxZPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIHIuZXJyb3I9aSxyfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIk5hdmlnYXRpb25FcnJvcihpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIGVycm9yOiAiK3RoaXMuZXJyb3IrIikifSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1pLG8uc3RhdGU9cixvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlc1JlY29nbml6ZWQoaWQ6ICIrdGhpcy5pZCsiLCB1cmw6ICciK3RoaXMudXJsKyInLCB1cmxBZnRlclJlZGlyZWN0czogJyIrdGhpcy51cmxBZnRlclJlZGlyZWN0cysiJywgc3RhdGU6ICIrdGhpcy5zdGF0ZSsiKSJ9LGV9KEgpLFo9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSxyKXt2YXIgbz10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBvLnVybEFmdGVyUmVkaXJlY3RzPWksby5zdGF0ZT1yLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iR3VhcmRzQ2hlY2tTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksSz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIsbyl7dmFyIGE9dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gYS51cmxBZnRlclJlZGlyZWN0cz1pLGEuc3RhdGU9cixhLnNob3VsZEFjdGl2YXRlPW8sYX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJHdWFyZHNDaGVja0VuZChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIsIHNob3VsZEFjdGl2YXRlOiAiK3RoaXMuc2hvdWxkQWN0aXZhdGUrIikifSxlfShIKSxYPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIG89dC5jYWxsKHRoaXMsZSxuKXx8dGhpcztyZXR1cm4gby51cmxBZnRlclJlZGlyZWN0cz1pLG8uc3RhdGU9cixvfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJlc29sdmVTdGFydChpZDogIit0aGlzLmlkKyIsIHVybDogJyIrdGhpcy51cmwrIicsIHVybEFmdGVyUmVkaXJlY3RzOiAnIit0aGlzLnVybEFmdGVyUmVkaXJlY3RzKyInLCBzdGF0ZTogIit0aGlzLnN0YXRlKyIpIn0sZX0oSCksJD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbil8fHRoaXM7cmV0dXJuIG8udXJsQWZ0ZXJSZWRpcmVjdHM9aSxvLnN0YXRlPXIsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSZXNvbHZlRW5kKGlkOiAiK3RoaXMuaWQrIiwgdXJsOiAnIit0aGlzLnVybCsiJywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICciK3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHMrIicsIHN0YXRlOiAiK3RoaXMuc3RhdGUrIikifSxlfShIKSxKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJvdXRlPXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICIrdGhpcy5yb3V0ZS5wYXRoKyIpIn0sdH0oKSx0dD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5yb3V0ZT10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogIit0aGlzLnJvdXRlLnBhdGgrIikifSx0fSgpLGV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICciKyh0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIiKSsiJykifSx0fSgpLG50PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnNuYXBzaG90PXR9cmV0dXJuIHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkNoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxpdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5zbmFwc2hvdD10fXJldHVybiB0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJBY3RpdmF0aW9uU3RhcnQocGF0aDogJyIrKHRoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiIpKyInKSJ9LHR9KCkscnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuc25hcHNob3Q9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iQWN0aXZhdGlvbkVuZChwYXRoOiAnIisodGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIikrIicpIn0sdH0oKSxvdD1mdW5jdGlvbigpe30sYXQ9InByaW1hcnkiLHN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBhcmFtcz10fHx7fX1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eSh0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKHRoaXMuaGFzKHQpKXt2YXIgZT10aGlzLnBhcmFtc1t0XTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lWzBdOmV9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXtpZih0aGlzLmhhcyh0KSl7dmFyIGU9dGhpcy5wYXJhbXNbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpbZV19cmV0dXJuW119LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwia2V5cyIse2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4gbmV3IHN0KHQpfWZ1bmN0aW9uIGN0KHQsZSxuKXt2YXIgaT1uLnBhdGguc3BsaXQoIi8iKTtpZihpLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiZnVsbCI9PT1uLnBhdGhNYXRjaCYmKGUuaGFzQ2hpbGRyZW4oKXx8aS5sZW5ndGg8dC5sZW5ndGgpKXJldHVybiBudWxsO2Zvcih2YXIgcj17fSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBhPWlbb10scz10W29dO2lmKGEuc3RhcnRzV2l0aCgiOiIpKXJbYS5zdWJzdHJpbmcoMSldPXM7ZWxzZSBpZihhIT09cy5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDp0LnNsaWNlKDAsaS5sZW5ndGgpLHBvc1BhcmFtczpyfX12YXIgbHQ9ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlcz10LHRoaXMubW9kdWxlPWV9O2Z1bmN0aW9uIGZ0KHQsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2h0KGksZHQoZSxpKSl9fWZ1bmN0aW9uIGh0KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJcbiAgICAgIEludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInOiBFbmNvdW50ZXJlZCB1bmRlZmluZWQgcm91dGUuXG4gICAgICBUaGUgcmVhc29uIG1pZ2h0IGJlIGFuIGV4dHJhIGNvbW1hLlxuXG4gICAgICBFeGFtcGxlOlxuICAgICAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gICAgICAgIHsgcGF0aDogJycsIHJlZGlyZWN0VG86ICcvZGFzaGJvYXJkJywgcGF0aE1hdGNoOiAnZnVsbCcgfSxcbiAgICAgICAgeyBwYXRoOiAnZGFzaGJvYXJkJywgIGNvbXBvbmVudDogRGFzaGJvYXJkQ29tcG9uZW50IH0sLCA8PCB0d28gY29tbWFzXG4gICAgICAgIHsgcGF0aDogJ2RldGFpbC86aWQnLCBjb21wb25lbnQ6IEhlcm9EZXRhaWxDb21wb25lbnQgfVxuICAgICAgXTtcbiAgICAiKTtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IEFycmF5IGNhbm5vdCBiZSBzcGVjaWZpZWQiKTtpZighdC5jb21wb25lbnQmJiF0LmNoaWxkcmVuJiYhdC5sb2FkQ2hpbGRyZW4mJnQub3V0bGV0JiZ0Lm91dGxldCE9PWF0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGEgY29tcG9uZW50bGVzcyByb3V0ZSB3aXRob3V0IGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiBjYW5ub3QgaGF2ZSBhIG5hbWVkIG91dGxldCBzZXQiKTtpZih0LnJlZGlyZWN0VG8mJnQuY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcmVkaXJlY3RUbyBhbmQgY2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGxvYWRDaGlsZHJlbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQuY2hpbGRyZW4mJnQubG9hZENoaWxkcmVuKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IGNoaWxkcmVuIGFuZCBsb2FkQ2hpbGRyZW4gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih0LnJlZGlyZWN0VG8mJnQuY29tcG9uZW50KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJlZGlyZWN0VG8gYW5kIGNvbXBvbmVudCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpO2lmKHQucGF0aCYmdC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGggYW5kIG1hdGNoZXIgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKTtpZih2b2lkIDA9PT10LnJlZGlyZWN0VG8mJiF0LmNvbXBvbmVudCYmIXQuY2hpbGRyZW4mJiF0LmxvYWRDaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29uZmlndXJhdGlvbiBvZiByb3V0ZSAnIitlKyInLiBPbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHByb3ZpZGVkOiBjb21wb25lbnQsIHJlZGlyZWN0VG8sIGNoaWxkcmVuIG9yIGxvYWRDaGlsZHJlbiIpO2lmKHZvaWQgMD09PXQucGF0aCYmdm9pZCAwPT09dC5tYXRjaGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHJvdXRlcyBtdXN0IGhhdmUgZWl0aGVyIGEgcGF0aCBvciBhIG1hdGNoZXIgc3BlY2lmaWVkIik7aWYoInN0cmluZyI9PXR5cGVvZiB0LnBhdGgmJiIvIj09PXQucGF0aC5jaGFyQXQoMCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJyIrZSsiJzogcGF0aCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHNsYXNoIik7aWYoIiI9PT10LnBhdGgmJnZvaWQgMCE9PXQucmVkaXJlY3RUbyYmdm9pZCAwPT09dC5wYXRoTWF0Y2gpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gb2Ygcm91dGUgJ3twYXRoOiBcIiIrZSsnIiwgcmVkaXJlY3RUbzogIicrdC5yZWRpcmVjdFRvKyJcIn0nOiBwbGVhc2UgcHJvdmlkZSAncGF0aE1hdGNoJy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgJ3BhdGhNYXRjaCcgaXMgJ3ByZWZpeCcsIGJ1dCBvZnRlbiB0aGUgaW50ZW50IGlzIHRvIHVzZSAnZnVsbCcuIik7aWYodm9pZCAwIT09dC5wYXRoTWF0Y2gmJiJmdWxsIiE9PXQucGF0aE1hdGNoJiYicHJlZml4IiE9PXQucGF0aE1hdGNoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb25maWd1cmF0aW9uIG9mIHJvdXRlICciK2UrIic6IHBhdGhNYXRjaCBjYW4gb25seSBiZSBzZXQgdG8gJ3ByZWZpeCcgb3IgJ2Z1bGwnIik7dC5jaGlsZHJlbiYmZnQodC5jaGlsZHJlbixlKX1mdW5jdGlvbiBkdCh0LGUpe3JldHVybiBlP3R8fGUucGF0aD90JiYhZS5wYXRoP3QrIi8iOiF0JiZlLnBhdGg/ZS5wYXRoOnQrIi8iK2UucGF0aDoiIjp0fWZ1bmN0aW9uIHB0KHQpe3ZhciBlPXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubWFwKHB0KSxuPWU/T2JqZWN0KGkuYSkoe30sdCx7Y2hpbGRyZW46ZX0pOk9iamVjdChpLmEpKHt9LHQpO3JldHVybiFuLmNvbXBvbmVudCYmKGV8fG4ubG9hZENoaWxkcmVuKSYmbi5vdXRsZXQmJm4ub3V0bGV0IT09YXQmJihuLmNvbXBvbmVudD1vdCksbn1mdW5jdGlvbiBtdCh0LGUpe3ZhciBuLGk9T2JqZWN0LmtleXModCkscj1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aCE9ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYodFtuPWlbb11dIT09ZVtuXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5dCh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4gdC5sZW5ndGg+MD90W3QubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZ3QodCxlKXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiZlKHRbbl0sbil9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIHQucGlwZShPYmplY3QoRC5hKSgpLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfWZ1bmN0aW9uIF90KHQpe3JldHVybiBPYmplY3Qoci5UYSkodCk/dDpPYmplY3Qoci5VYSkodCk/T2JqZWN0KGEuYSkoUHJvbWlzZS5yZXNvbHZlKHQpKTpPYmplY3Qocy5hKSh0KX1mdW5jdGlvbiB3dCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbXQodCxlKX0odC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKSYmZnVuY3Rpb24gdChlLG4pe2lmKCFDdChlLnNlZ21lbnRzLG4uc2VnbWVudHMpKXJldHVybiExO2lmKGUubnVtYmVyT2ZDaGlsZHJlbiE9PW4ubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IodmFyIGkgaW4gbi5jaGlsZHJlbil7aWYoIWUuY2hpbGRyZW5baV0pcmV0dXJuITE7aWYoIXQoZS5jaGlsZHJlbltpXSxuLmNoaWxkcmVuW2ldKSlyZXR1cm4hMX1yZXR1cm4hMH0odC5yb290LGUucm9vdCk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkubGVuZ3RoPD1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJk9iamVjdC5rZXlzKGUpLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBlW25dPT09dFtuXX0pfSh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpJiZmdW5jdGlvbiB0KGUsbil7cmV0dXJuIGZ1bmN0aW9uIGUobixpLHIpe2lmKG4uc2VnbWVudHMubGVuZ3RoPnIubGVuZ3RoKXJldHVybiEhQ3QoYT1uLnNlZ21lbnRzLnNsaWNlKDAsci5sZW5ndGgpLHIpJiYhaS5oYXNDaGlsZHJlbigpO2lmKG4uc2VnbWVudHMubGVuZ3RoPT09ci5sZW5ndGgpe2lmKCFDdChuLnNlZ21lbnRzLHIpKXJldHVybiExO2Zvcih2YXIgbyBpbiBpLmNoaWxkcmVuKXtpZighbi5jaGlsZHJlbltvXSlyZXR1cm4hMTtpZighdChuLmNoaWxkcmVuW29dLGkuY2hpbGRyZW5bb10pKXJldHVybiExfXJldHVybiEwfXZhciBhPXIuc2xpY2UoMCxuLnNlZ21lbnRzLmxlbmd0aCkscz1yLnNsaWNlKG4uc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIUN0KG4uc2VnbWVudHMsYSkmJiEhbi5jaGlsZHJlblthdF0mJmUobi5jaGlsZHJlblthdF0saSxzKX0oZSxuLG4uc2VnbWVudHMpfSh0LnJvb3QsZS5yb290KX12YXIgeHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvb3Q9dCx0aGlzLnF1ZXJ5UGFyYW1zPWUsdGhpcy5mcmFnbWVudD1ufXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQXQuc2VyaWFsaXplKHRoaXMpfSx0fSgpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5zZWdtZW50cz10LHRoaXMuY2hpbGRyZW49ZSx0aGlzLnBhcmVudD1udWxsLGd0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5wYXJlbnQ9bn0pfXJldHVybiB0LnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJudW1iZXJPZkNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pLmxlbmd0aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBJdCh0aGlzKX0sdH0oKSxFdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnBhcmFtZXRlcnM9ZX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbWV0ZXJNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwfHwodGhpcy5fcGFyYW1ldGVyTWFwPXV0KHRoaXMucGFyYW1ldGVycykpLHRoaXMuX3BhcmFtZXRlck1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBEdCh0aGlzKX0sdH0oKTtmdW5jdGlvbiBDdCh0LGUpe3JldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQucGF0aD09PWVbbl0ucGF0aH0pfWZ1bmN0aW9uIE90KHQsZSl7dmFyIG49W107cmV0dXJuIGd0KHQuY2hpbGRyZW4sZnVuY3Rpb24odCxpKXtpPT09YXQmJihuPW4uY29uY2F0KGUodCxpKSkpfSksZ3QodC5jaGlsZHJlbixmdW5jdGlvbih0LGkpe2khPT1hdCYmKG49bi5jb25jYXQoZSh0LGkpKSl9KSxufXZhciBUdD1mdW5jdGlvbigpe30sa3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQnQodCk7cmV0dXJuIG5ldyB4dChlLnBhcnNlUm9vdFNlZ21lbnQoKSxlLnBhcnNlUXVlcnlQYXJhbXMoKSxlLnBhcnNlRnJhZ21lbnQoKSl9LHQucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZSxuO3JldHVybiIvIitmdW5jdGlvbiB0KGUsbil7aWYoIWUuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gSXQoZSk7aWYobil7dmFyIGk9ZS5jaGlsZHJlblthdF0/dChlLmNoaWxkcmVuW2F0XSwhMSk6IiIscj1bXTtyZXR1cm4gZ3QoZS5jaGlsZHJlbixmdW5jdGlvbihlLG4pe24hPT1hdCYmci5wdXNoKG4rIjoiK3QoZSwhMSkpfSksci5sZW5ndGg+MD9pKyIoIityLmpvaW4oIi8vIikrIikiOml9dmFyIG89T3QoZSxmdW5jdGlvbihuLGkpe3JldHVybiBpPT09YXQ/W3QoZS5jaGlsZHJlblthdF0sITEpXTpbaSsiOiIrdChuLCExKV19KTtyZXR1cm4gSXQoZSkrIi8oIitvLmpvaW4oIi8vIikrIikifSh0LnJvb3QsITApKyhlPXQucXVlcnlQYXJhbXMsKG49T2JqZWN0LmtleXMoZSkubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPWVbdF07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIE10KHQpKyI9IitNdChlKX0pLmpvaW4oIiYiKTpNdCh0KSsiPSIrTXQobil9KSkubGVuZ3RoPyI/IituLmpvaW4oIiYiKToiIikrKCJzdHJpbmciPT10eXBlb2YgdC5mcmFnbWVudD8iIyIrZW5jb2RlVVJJKHQuZnJhZ21lbnQpOiIiKX0sdH0oKSxBdD1uZXcga3Q7ZnVuY3Rpb24gSXQodCl7cmV0dXJuIHQuc2VnbWVudHMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBEdCh0KX0pLmpvaW4oIi8iKX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4ganQodCkucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gUHQodCl7cmV0dXJuIGp0KHQpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpLnJlcGxhY2UoLyUyNi9naSwiJiIpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIE50KHQucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIER0KHQpe3JldHVybiIiK1B0KHQucGF0aCkrKGU9dC5wYXJhbWV0ZXJzLE9iamVjdC5rZXlzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iOyIrUHQodCkrIj0iK1B0KGVbdF0pfSkuam9pbigiIikpO3ZhciBlfXZhciBMdD0vXlteXC8oKT87PSNdKy87ZnVuY3Rpb24gRnQodCl7dmFyIGU9dC5tYXRjaChMdCk7cmV0dXJuIGU/ZVswXToiIn12YXIgenQ9L15bXj0/JiNdKy8sVnQ9L15bXj8mI10rLyxCdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy51cmw9dCx0aGlzLnJlbWFpbmluZz10fXJldHVybiB0LnByb3RvdHlwZS5wYXJzZVJvb3RTZWdtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRzV2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IFN0KFtdLHt9KTpuZXcgU3QoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKCl7dmFyIHQ9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbSh0KX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gdH0sdC5wcm90b3R5cGUucGFyc2VGcmFnbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH0sdC5wcm90b3R5cGUucGFyc2VDaGlsZHJlbj1mdW5jdGlvbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTt2YXIgdD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHx0LnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLHQucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTt2YXIgZT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksZT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7dmFyIG49e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKG49dGhpcy5wYXJzZVBhcmVucyghMSkpLCh0Lmxlbmd0aD4wfHxPYmplY3Qua2V5cyhlKS5sZW5ndGg+MCkmJihuW2F0XT1uZXcgU3QodCxlKSksbn0sdC5wcm90b3R5cGUucGFyc2VTZWdtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9RnQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09dCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBFcnJvcigiRW1wdHkgcGF0aCB1cmwgc2VnbWVudCBjYW5ub3QgaGF2ZSBwYXJhbWV0ZXJzOiAnIit0aGlzLnJlbWFpbmluZysiJy4iKTtyZXR1cm4gdGhpcy5jYXB0dXJlKHQpLG5ldyBFdChOdCh0KSx0aGlzLnBhcnNlTWF0cml4UGFyYW1zKCkpfSx0LnByb3RvdHlwZS5wYXJzZU1hdHJpeFBhcmFtcz1mdW5jdGlvbigpe2Zvcih2YXIgdD17fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0odCk7cmV0dXJuIHR9LHQucHJvdG90eXBlLnBhcnNlUGFyYW09ZnVuY3Rpb24odCl7dmFyIGU9RnQodGhpcy5yZW1haW5pbmcpO2lmKGUpe3RoaXMuY2FwdHVyZShlKTt2YXIgbj0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXt2YXIgaT1GdCh0aGlzLnJlbWFpbmluZyk7aSYmdGhpcy5jYXB0dXJlKG49aSl9dFtOdChlKV09TnQobil9fSx0LnByb3RvdHlwZS5wYXJzZVF1ZXJ5UGFyYW09ZnVuY3Rpb24odCl7dmFyIGUsbj0oZT10aGlzLnJlbWFpbmluZy5tYXRjaCh6dCkpP2VbMF06IiI7aWYobil7dGhpcy5jYXB0dXJlKG4pO3ZhciBpPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goVnQpO3JldHVybiBlP2VbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtyJiZ0aGlzLmNhcHR1cmUoaT1yKX12YXIgbz1SdChuKSxhPVJ0KGkpO2lmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBzPXRbb107QXJyYXkuaXNBcnJheShzKXx8KHRbb109cz1bc10pLHMucHVzaChhKX1lbHNlIHRbb109YX19LHQucHJvdG90eXBlLnBhcnNlUGFyZW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXt2YXIgbj1GdCh0aGlzLnJlbWFpbmluZyksaT10aGlzLnJlbWFpbmluZ1tuLmxlbmd0aF07aWYoIi8iIT09aSYmIikiIT09aSYmIjsiIT09aSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwYXJzZSB1cmwgJyIrdGhpcy51cmwrIiciKTt2YXIgcj12b2lkIDA7bi5pbmRleE9mKCI6Iik+LTE/KHI9bi5zdWJzdHIoMCxuLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKHIpLHRoaXMuY2FwdHVyZSgiOiIpKTp0JiYocj1hdCk7dmFyIG89dGhpcy5wYXJzZUNoaWxkcmVuKCk7ZVtyXT0xPT09T2JqZWN0LmtleXMobykubGVuZ3RoP29bYXRdOm5ldyBTdChbXSxvKSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gZX0sdC5wcm90b3R5cGUucGVla1N0YXJ0c1dpdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgodCl9LHQucHJvdG90eXBlLmNvbnN1bWVPcHRpb25hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgodCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcodC5sZW5ndGgpLCEwKX0sdC5wcm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbih0KXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwodCkpdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCAiJyt0KyciLicpfSx0fSgpLFV0PWZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9LEh0PWZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fTtmdW5jdGlvbiBxdCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgVXQodCkpfSl9ZnVuY3Rpb24gR3QodCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEh0KHQpKX0pfWZ1bmN0aW9uIFd0KHQpe3JldHVybiBuZXcgYy5hKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBFcnJvcigiT25seSBhYnNvbHV0ZSByZWRpcmVjdHMgY2FuIGhhdmUgbmFtZWQgb3V0bGV0cy4gcmVkaXJlY3RUbzogJyIrdCsiJyIpKX0pfXZhciBZdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1pLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KHIudil9cmV0dXJuIHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5leHBhbmRTZWdtZW50R3JvdXAodGhpcy5uZ01vZHVsZSx0aGlzLmNvbmZpZyx0aGlzLnVybFRyZWUucm9vdCxhdCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5jcmVhdGVVcmxUcmVlKGUsdC51cmxUcmVlLnF1ZXJ5UGFyYW1zLHQudXJsVHJlZS5mcmFnbWVudCl9KSkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgSHQpcmV0dXJuIHQuYWxsb3dSZWRpcmVjdHM9ITEsdC5tYXRjaChlLnVybFRyZWUpO2lmKGUgaW5zdGFuY2VvZiBVdCl0aHJvdyB0Lm5vTWF0Y2hFcnJvcihlKTt0aHJvdyBlfSkpfSx0LnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHQucm9vdCxhdCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5jcmVhdGVVcmxUcmVlKG4sdC5xdWVyeVBhcmFtcyx0LmZyYWdtZW50KX0pKS5waXBlKE9iamVjdChOLmEpKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBVdCl0aHJvdyBlLm5vTWF0Y2hFcnJvcih0KTt0aHJvdyB0fSkpfSx0LnByb3RvdHlwZS5ub01hdGNoRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBFcnJvcigiQ2Fubm90IG1hdGNoIGFueSByb3V0ZXMuIFVSTCBTZWdtZW50OiAnIit0LnNlZ21lbnRHcm91cCsiJyIpfSx0LnByb3RvdHlwZS5jcmVhdGVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxyPXQuc2VnbWVudHMubGVuZ3RoPjA/bmV3IFN0KFtdLCgoaT17fSlbYXRdPXQsaSkpOnQ7cmV0dXJuIG5ldyB4dChyLGUsbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gMD09PW4uc2VnbWVudHMubGVuZ3RoJiZuLmhhc0NoaWxkcmVuKCk/dGhpcy5leHBhbmRDaGlsZHJlbih0LGUsbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KFtdLHQpfSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLGksITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obixyKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBPYmplY3Qocy5hKSh7fSk7dmFyIG89W10sYT1bXSx1PXt9O3JldHVybiBndChuLGZ1bmN0aW9uKG4scil7dmFyIHMsYyxsPShzPXIsYz1uLGkuZXhwYW5kU2VnbWVudEdyb3VwKHQsZSxjLHMpKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1W3JdPXR9KSk7cj09PWF0P28ucHVzaChsKTphLnB1c2gobCl9KSxzLmEuYXBwbHkobnVsbCxvLmNvbmNhdChhKSkucGlwZShPYmplY3QoUi5hKSgpLEkoKSxPYmplY3QoUy5hKShmdW5jdGlvbigpe3JldHVybiB1fSkpfShuLmNoaWxkcmVuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudD1mdW5jdGlvbih0LGUsbixyLG8sYSl7dmFyIHU9dGhpcztyZXR1cm4gcy5hLmFwcGx5KHZvaWQgMCxPYmplY3QoaS5kKShuKSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihpKXtyZXR1cm4gdS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxuLGkscixvLGEpLnBpcGUoT2JqZWN0KE4uYSkoZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIFV0KXJldHVybiBPYmplY3Qocy5hKShudWxsKTt0aHJvdyB0fSkpfSksT2JqZWN0KFIuYSkoKSx3KGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLE9iamVjdChOLmEpKGZ1bmN0aW9uKHQsbil7aWYodCBpbnN0YW5jZW9mIGx8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUscixvKSlyZXR1cm4gT2JqZWN0KHMuYSkobmV3IFN0KFtdLHt9KSk7dGhyb3cgbmV3IFV0KGUpfXRocm93IHR9KSl9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEpe3JldHVybiBYdChpKSE9PW8/cXQoZSk6dm9pZCAwPT09aS5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKHQsZSxpLHIpOmEmJnRoaXMuYWxsb3dSZWRpcmVjdHM/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixpLHIsbyk6cXQoZSl9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLGkscixvKXtyZXR1cm4iKioiPT09aS5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LG4saSxvKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdCh0LGUsbixpLHIsbyl9LHQucHJvdG90eXBlLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3Q9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcyxvPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLG4ucmVkaXJlY3RUbyx7fSk7cmV0dXJuIG4ucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/R3Qobyk6dGhpcy5saW5lcmFsaXplU2VnbWVudHMobixvKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKG4pe3ZhciBvPW5ldyBTdChuLHt9KTtyZXR1cm4gci5leHBhbmRTZWdtZW50KHQsbyxlLG4saSwhMSl9KSl9LHQucHJvdG90eXBlLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixpLHIsbyl7dmFyIGE9dGhpcyxzPVF0KGUsaSxyKSx1PXMuY29uc3VtZWRTZWdtZW50cyxjPXMubGFzdENoaWxkLGw9cy5wb3NpdGlvbmFsUGFyYW1TZWdtZW50cztpZighcy5tYXRjaGVkKXJldHVybiBxdChlKTt2YXIgZj10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyh1LGkucmVkaXJlY3RUbyxsKTtyZXR1cm4gaS5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgoIi8iKT9HdChmKTp0aGlzLmxpbmVyYWxpemVTZWdtZW50cyhpLGYpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oaSl7cmV0dXJuIGEuZXhwYW5kU2VnbWVudCh0LGUsbixpLmNvbmNhdChyLnNsaWNlKGMpKSxvLCExKX0pKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBTdChyLHt9KX0pKTpPYmplY3Qocy5hKShuZXcgU3Qocix7fSkpO3ZhciBhPVF0KGUsbixyKSx1PWEuY29uc3VtZWRTZWdtZW50cyxjPWEubGFzdENoaWxkO2lmKCFhLm1hdGNoZWQpcmV0dXJuIHF0KGUpO3ZhciBsPXIuc2xpY2UoYyk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb25maWcodCxuKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLHI9dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIEt0KHQsZSxuKSYmWHQobikhPT1hdH0pfSh0LG4pP3tzZWdtZW50R3JvdXA6WnQobmV3IFN0KGUsZnVuY3Rpb24odCxlKXt2YXIgbixyLG89e307b1thdF09ZTt0cnl7Zm9yKHZhciBhPU9iamVjdChpLmUpKHQpLHM9YS5uZXh0KCk7IXMuZG9uZTtzPWEubmV4dCgpKXt2YXIgdT1zLnZhbHVlOyIiPT09dS5wYXRoJiZYdCh1KSE9PWF0JiYob1tYdCh1KV09bmV3IFN0KFtdLHt9KSl9fWNhdGNoKHQpe249e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihyPWEucmV0dXJuKSYmci5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gb30ocixuZXcgU3Qobix0LmNoaWxkcmVuKSkpKSxzbGljZWRTZWdtZW50czpbXX06MD09PW4ubGVuZ3RoJiZmdW5jdGlvbih0LGUsbil7cmV0dXJuIHIuc29tZShmdW5jdGlvbihuKXtyZXR1cm4gS3QodCxlLG4pfSl9KHQsbik/e3NlZ21lbnRHcm91cDpadChuZXcgU3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixyKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3QoaS5lKShuKSxjPXUubmV4dCgpOyFjLmRvbmU7Yz11Lm5leHQoKSl7dmFyIGw9Yy52YWx1ZTtLdCh0LGUsbCkmJiFyW1h0KGwpXSYmKHNbWHQobCldPW5ldyBTdChbXSx7fSkpfX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIE9iamVjdChpLmEpKHt9LHIscyl9KHQsbixyLHQuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6bn06e3NlZ21lbnRHcm91cDp0LHNsaWNlZFNlZ21lbnRzOm59fShlLHUsbCxyKSxjPWEuc2VnbWVudEdyb3VwLGY9YS5zbGljZWRTZWdtZW50cztyZXR1cm4gMD09PWYubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCk/by5leHBhbmRDaGlsZHJlbihuLHIsYykucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KHUsdCl9KSk6MD09PXIubGVuZ3RoJiYwPT09Zi5sZW5ndGg/T2JqZWN0KHMuYSkobmV3IFN0KHUse30pKTpvLmV4cGFuZFNlZ21lbnQobixjLHIsZixhdCwhMCkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFN0KHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpfSkpfSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbmZpZz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIGUuY2hpbGRyZW4/T2JqZWN0KHMuYSkobmV3IGx0KGUuY2hpbGRyZW4sdCkpOmUubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWUuX2xvYWRlZENvbmZpZz9PYmplY3Qocy5hKShlLl9sb2FkZWRDb25maWcpOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jYW5Mb2FkO3JldHVybiBuJiYwIT09bi5sZW5ndGg/YnQoT2JqZWN0KGEuYSkobikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihuKXt2YXIgaT10LmdldChuKTtyZXR1cm4gX3QoaS5jYW5Mb2FkP2kuY2FuTG9hZChlKTppKGUpKX0pKSk6T2JqZWN0KHMuYSkoITApfSh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oaSl7cmV0dXJuIGk/bi5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjLmEoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoKChuPUVycm9yKCJOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6IENhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yPSEwLG4pKTt2YXIgbn0pfShlKX0pKTpPYmplY3Qocy5hKShuZXcgbHQoW10sdCkpfSx0LnByb3RvdHlwZS5saW5lcmFsaXplU2VnbWVudHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10saT1lLnJvb3Q7Oyl7aWYobj1uLmNvbmNhdChpLnNlZ21lbnRzKSwwPT09aS5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBPYmplY3Qocy5hKShuKTtpZihpLm51bWJlck9mQ2hpbGRyZW4+MXx8IWkuY2hpbGRyZW5bYXRdKXJldHVybiBXdCh0LnJlZGlyZWN0VG8pO2k9aS5jaGlsZHJlblthdF19fSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q29tbWFuZHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0aGlzLmFwcGx5UmVkaXJlY3RDcmVhdHJlVXJsVHJlZShlLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShlKSx0LG4pfSx0LnByb3RvdHlwZS5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAodCxlLnJvb3QsbixpKTtyZXR1cm4gbmV3IHh0KHIsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksZS5mcmFnbWVudCl9LHQucHJvdG90eXBlLmNyZWF0ZVF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxpKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJnQuc3RhcnRzV2l0aCgiOiIpKXt2YXIgcj10LnN1YnN0cmluZygxKTtuW2ldPWVbcl19ZWxzZSBuW2ldPXR9KSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcyxvPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4saSksYT17fTtyZXR1cm4gZ3QoZS5jaGlsZHJlbixmdW5jdGlvbihlLG8pe2Fbb109ci5jcmVhdGVTZWdtZW50R3JvdXAodCxlLG4saSl9KSxuZXcgU3QobyxhKX0sdC5wcm90b3R5cGUuY3JlYXRlU2VnbWVudHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcztyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/ci5maW5kUG9zUGFyYW0odCxlLGkpOnIuZmluZE9yUmV0dXJuKGUsbil9KX0sdC5wcm90b3R5cGUuZmluZFBvc1BhcmFtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uW2UucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlZGlyZWN0IHRvICciK3QrIicuIENhbm5vdCBmaW5kICciK2UucGF0aCsiJy4iKTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuZmluZE9yUmV0dXJuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixvPTA7dHJ5e2Zvcih2YXIgYT1PYmplY3QoaS5lKShlKSxzPWEubmV4dCgpOyFzLmRvbmU7cz1hLm5leHQoKSl7dmFyIHU9cy52YWx1ZTtpZih1LnBhdGg9PT10LnBhdGgpcmV0dXJuIGUuc3BsaWNlKG8pLHU7bysrfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtzJiYhcy5kb25lJiYocj1hLnJldHVybikmJnIuY2FsbChhKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gUXQodCxlLG4pe2lmKCIiPT09ZS5wYXRoKXJldHVybiJmdWxsIj09PWUucGF0aE1hdGNoJiYodC5oYXNDaGlsZHJlbigpfHxuLmxlbmd0aD4wKT97bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLGxhc3RDaGlsZDowLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fTt2YXIgaT0oZS5tYXRjaGVyfHxjdCkobix0LGUpO3JldHVybiBpP3ttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aS5jb25zdW1lZCxsYXN0Q2hpbGQ6aS5jb25zdW1lZC5sZW5ndGgscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aS5wb3NQYXJhbXN9OnttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fWZ1bmN0aW9uIFp0KHQpe2lmKDE9PT10Lm51bWJlck9mQ2hpbGRyZW4mJnQuY2hpbGRyZW5bYXRdKXt2YXIgZT10LmNoaWxkcmVuW2F0XTtyZXR1cm4gbmV3IFN0KHQuc2VnbWVudHMuY29uY2F0KGUuc2VnbWVudHMpLGUuY2hpbGRyZW4pfXJldHVybiB0fWZ1bmN0aW9uIEt0KHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDAhPT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gWHQodCl7cmV0dXJuIHQub3V0bGV0fHxhdH12YXIgJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3Jvb3Q9dH1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGF0aEZyb21Sb290KHQpO3JldHVybiBlLmxlbmd0aD4xP2VbZS5sZW5ndGgtMl06bnVsbH0sdC5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9SnQodCx0aGlzLl9yb290KTtyZXR1cm4gZT9lLmNoaWxkcmVuLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pOltdfSx0LnByb3RvdHlwZS5maXJzdENoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPUp0KHQsdGhpcy5fcm9vdCk7cmV0dXJuIGUmJmUuY2hpbGRyZW4ubGVuZ3RoPjA/ZS5jaGlsZHJlblswXS52YWx1ZTpudWxsfSx0LnByb3RvdHlwZS5zaWJsaW5ncz1mdW5jdGlvbih0KXt2YXIgZT10ZSh0LHRoaXMuX3Jvb3QpO3JldHVybiBlLmxlbmd0aDwyP1tdOmVbZS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfSx0LnByb3RvdHlwZS5wYXRoRnJvbVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRlKHQsdGhpcy5fcm9vdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSl9LHR9KCk7ZnVuY3Rpb24gSnQodCxlKXtpZih0PT09ZS52YWx1ZSlyZXR1cm4gZTt0cnl7Zm9yKHZhciBuPU9iamVjdChpLmUpKGUuY2hpbGRyZW4pLHI9bi5uZXh0KCk7IXIuZG9uZTtyPW4ubmV4dCgpKXt2YXIgbz1KdCh0LHIudmFsdWUpO2lmKG8pcmV0dXJuIG99fWNhdGNoKHQpe2E9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihzPW4ucmV0dXJuKSYmcy5jYWxsKG4pfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gbnVsbDt2YXIgYSxzfWZ1bmN0aW9uIHRlKHQsZSl7aWYodD09PWUudmFsdWUpcmV0dXJuW2VdO3RyeXtmb3IodmFyIG49T2JqZWN0KGkuZSkoZS5jaGlsZHJlbikscj1uLm5leHQoKTshci5kb25lO3I9bi5uZXh0KCkpe3ZhciBvPXRlKHQsci52YWx1ZSk7aWYoby5sZW5ndGgpcmV0dXJuIG8udW5zaGlmdChlKSxvfX1jYXRjaCh0KXthPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYocz1uLnJldHVybikmJnMuY2FsbChuKX1maW5hbGx5e2lmKGEpdGhyb3cgYS5lcnJvcn19cmV0dXJuW107dmFyIGEsc312YXIgZWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuY2hpbGRyZW49ZX1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iVHJlZU5vZGUoIit0aGlzLnZhbHVlKyIpIn0sdH0oKTtmdW5jdGlvbiBuZSh0KXt2YXIgZT17fTtyZXR1cm4gdCYmdC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3QudmFsdWUub3V0bGV0XT10fSksZX12YXIgaWU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLnNuYXBzaG90PW4sY2UoaSxlKSxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX0sZX0oJHQpO2Z1bmN0aW9uIHJlKHQsZSl7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgc2UoW10se30se30sIiIse30sYXQsZSxudWxsLHQucm9vdCwtMSx7fSk7cmV0dXJuIG5ldyB1ZSgiIixuZXcgZWUobixbXSkpfSh0LGUpLGk9bmV3IG8uYShbbmV3IEV0KCIiLHt9KV0pLHI9bmV3IG8uYSh7fSksYT1uZXcgby5hKHt9KSxzPW5ldyBvLmEoe30pLHU9bmV3IG8uYSgiIiksYz1uZXcgb2UoaSxyLHMsdSxhLGF0LGUsbi5yb290KTtyZXR1cm4gYy5zbmFwc2hvdD1uLnJvb3QsbmV3IGllKG5ldyBlZShjLFtdKSxuKX12YXIgb2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEscyl7dGhpcy51cmw9dCx0aGlzLnBhcmFtcz1lLHRoaXMucXVlcnlQYXJhbXM9bix0aGlzLmZyYWdtZW50PWksdGhpcy5kYXRhPXIsdGhpcy5vdXRsZXQ9byx0aGlzLmNvbXBvbmVudD1hLHRoaXMuX2Z1dHVyZVNuYXBzaG90PXN9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZmlyc3RDaGlsZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiY2hpbGRyZW4iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXRoRnJvbVJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD10aGlzLnBhcmFtcy5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiB1dCh0KX0pKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPXRoaXMucXVlcnlQYXJhbXMucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gdXQodCl9KSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6IkZ1dHVyZSgiK3RoaXMuX2Z1dHVyZVNuYXBzaG90KyIpIn0sdH0oKTtmdW5jdGlvbiBhZSh0LGUpe3ZvaWQgMD09PWUmJihlPSJlbXB0eU9ubHkiKTt2YXIgbj10LnBhdGhGcm9tUm9vdCxyPTA7aWYoImFsd2F5cyIhPT1lKWZvcihyPW4ubGVuZ3RoLTE7cj49MTspe3ZhciBvPW5bcl0sYT1uW3ItMV07aWYoby5yb3V0ZUNvbmZpZyYmIiI9PT1vLnJvdXRlQ29uZmlnLnBhdGgpci0tO2Vsc2V7aWYoYS5jb21wb25lbnQpYnJlYWs7ci0tfX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3QoaS5hKSh7fSx0LnBhcmFtcyxlLnBhcmFtcyksZGF0YTpPYmplY3QoaS5hKSh7fSx0LmRhdGEsZS5kYXRhKSxyZXNvbHZlOk9iamVjdChpLmEpKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0se3BhcmFtczp7fSxkYXRhOnt9LHJlc29sdmU6e319KX0obi5zbGljZShyKSl9dmFyIHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIsbyxhLHMsdSxjLGwpe3RoaXMudXJsPXQsdGhpcy5wYXJhbXM9ZSx0aGlzLnF1ZXJ5UGFyYW1zPW4sdGhpcy5mcmFnbWVudD1pLHRoaXMuZGF0YT1yLHRoaXMub3V0bGV0PW8sdGhpcy5jb21wb25lbnQ9YSx0aGlzLnJvdXRlQ29uZmlnPXMsdGhpcy5fdXJsU2VnbWVudD11LHRoaXMuX2xhc3RQYXRoSW5kZXg9Yyx0aGlzLl9yZXNvbHZlPWx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImZpcnN0Q2hpbGQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImNoaWxkcmVuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGF0aEZyb21Sb290Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dXQodGhpcy5wYXJhbXMpKSx0aGlzLl9wYXJhbU1hcH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInF1ZXJ5UGFyYW1NYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcHx8KHRoaXMuX3F1ZXJ5UGFyYW1NYXA9dXQodGhpcy5xdWVyeVBhcmFtcykpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iUm91dGUodXJsOiciK3RoaXMudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSx1ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIGkudXJsPWUsY2UoaSxuKSxpfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGxlKHRoaXMuX3Jvb3QpfSxlfSgkdCk7ZnVuY3Rpb24gY2UodCxlKXtlLnZhbHVlLl9yb3V0ZXJTdGF0ZT10LGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gY2UodCxlKX0pfWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXQuY2hpbGRyZW4ubGVuZ3RoPjA/IiB7ICIrdC5jaGlsZHJlbi5tYXAobGUpLmpvaW4oIiwgIikrIiB9ICI6IiI7cmV0dXJuIiIrdC52YWx1ZStlfWZ1bmN0aW9uIGZlKHQpe2lmKHQuc25hcHNob3Qpe3ZhciBlPXQuc25hcHNob3Qsbj10Ll9mdXR1cmVTbmFwc2hvdDt0LnNuYXBzaG90PW4sbXQoZS5xdWVyeVBhcmFtcyxuLnF1ZXJ5UGFyYW1zKXx8dC5xdWVyeVBhcmFtcy5uZXh0KG4ucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQhPT1uLmZyYWdtZW50JiZ0LmZyYWdtZW50Lm5leHQobi5mcmFnbWVudCksbXQoZS5wYXJhbXMsbi5wYXJhbXMpfHx0LnBhcmFtcy5uZXh0KG4ucGFyYW1zKSxmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24paWYoIW10KHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9KGUudXJsLG4udXJsKXx8dC51cmwubmV4dChuLnVybCksbXQoZS5kYXRhLG4uZGF0YSl8fHQuZGF0YS5uZXh0KG4uZGF0YSl9ZWxzZSB0LnNuYXBzaG90PXQuX2Z1dHVyZVNuYXBzaG90LHQuZGF0YS5uZXh0KHQuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIGhlKHQsZSl7dmFyIG4saTtyZXR1cm4gbXQodC5wYXJhbXMsZS5wYXJhbXMpJiZDdChuPXQudXJsLGk9ZS51cmwpJiZuLmV2ZXJ5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG10KHQucGFyYW1ldGVycyxpW2VdLnBhcmFtZXRlcnMpfSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxoZSh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gcGUodCxlLG4saSxyKXt2YXIgbz17fTtyZXR1cm4gaSYmZ3QoaSxmdW5jdGlvbih0LGUpe29bZV09QXJyYXkuaXNBcnJheSh0KT90Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIit0fSk6IiIrdH0pLG5ldyB4dChuLnJvb3Q9PT10P2U6ZnVuY3Rpb24gdChlLG4saSl7dmFyIHI9e307cmV0dXJuIGd0KGUuY2hpbGRyZW4sZnVuY3Rpb24oZSxvKXtyW29dPWU9PT1uP2k6dChlLG4saSl9KSxuZXcgU3QoZS5zZWdtZW50cyxyKX0obi5yb290LHQsZSksbyxyKX12YXIgbWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZkZShuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciBpPW4uZmluZChmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0c30pO2lmKGkmJmkhPT12dChuKSl0aHJvdyBuZXcgRXJyb3IoIntvdXRsZXRzOnt9fSBoYXMgdG8gYmUgdGhlIGxhc3QgY29tbWFuZCIpfXJldHVybiB0LnByb3RvdHlwZS50b1Jvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fic29sdXRlJiYxPT09dGhpcy5jb21tYW5kcy5sZW5ndGgmJiIvIj09dGhpcy5jb21tYW5kc1swXX0sdH0oKSx5ZT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZWdtZW50R3JvdXA9dCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1lLHRoaXMuaW5kZXg9bn07ZnVuY3Rpb24gdmUodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHM/dC5vdXRsZXRzW2F0XToiIit0fWZ1bmN0aW9uIGdlKHQsZSxuKXtpZih0fHwodD1uZXcgU3QoW10se30pKSwwPT09dC5zZWdtZW50cy5sZW5ndGgmJnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYmUodCxlLG4pO3ZhciBpPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9MCxyPWUsbz17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O3I8dC5zZWdtZW50cy5sZW5ndGg7KXtpZihpPj1uLmxlbmd0aClyZXR1cm4gbzt2YXIgYT10LnNlZ21lbnRzW3JdLHM9dmUobltpXSksdT1pPG4ubGVuZ3RoLTE/bltpKzFdOm51bGw7aWYocj4wJiZ2b2lkIDA9PT1zKWJyZWFrO2lmKHMmJnUmJiJvYmplY3QiPT10eXBlb2YgdSYmdm9pZCAwPT09dS5vdXRsZXRzKXtpZighU2Uocyx1LGEpKXJldHVybiBvO2krPTJ9ZWxzZXtpZighU2Uocyx7fSxhKSlyZXR1cm4gbztpKyt9cisrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6cixjb21tYW5kSW5kZXg6aX19KHQsZSxuKSxyPW4uc2xpY2UoaS5jb21tYW5kSW5kZXgpO2lmKGkubWF0Y2gmJmkucGF0aEluZGV4PHQuc2VnbWVudHMubGVuZ3RoKXt2YXIgbz1uZXcgU3QodC5zZWdtZW50cy5zbGljZSgwLGkucGF0aEluZGV4KSx7fSk7cmV0dXJuIG8uY2hpbGRyZW5bYXRdPW5ldyBTdCh0LnNlZ21lbnRzLnNsaWNlKGkucGF0aEluZGV4KSx0LmNoaWxkcmVuKSxiZShvLDAscil9cmV0dXJuIGkubWF0Y2gmJjA9PT1yLmxlbmd0aD9uZXcgU3QodC5zZWdtZW50cyx7fSk6aS5tYXRjaCYmIXQuaGFzQ2hpbGRyZW4oKT9fZSh0LGUsbik6aS5tYXRjaD9iZSh0LDAscik6X2UodCxlLG4pfWZ1bmN0aW9uIGJlKHQsZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG5ldyBTdCh0LnNlZ21lbnRzLHt9KTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIHRbMF0/KChlPXt9KVthdF09dCxlKTp2b2lkIDA9PT10WzBdLm91dGxldHM/KChuPXt9KVthdF09dCxuKTp0WzBdLm91dGxldHM7dmFyIGUsbn0obikscj17fTtyZXR1cm4gZ3QoaSxmdW5jdGlvbihuLGkpe251bGwhPT1uJiYocltpXT1nZSh0LmNoaWxkcmVuW2ldLGUsbikpfSksZ3QodC5jaGlsZHJlbixmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWlbZV0mJihyW2VdPXQpfSksbmV3IFN0KHQuc2VnbWVudHMscil9ZnVuY3Rpb24gX2UodCxlLG4pe2Zvcih2YXIgaT10LnNlZ21lbnRzLnNsaWNlKDAsZSkscj0wO3I8bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bcl0mJnZvaWQgMCE9PW5bcl0ub3V0bGV0cyl7dmFyIG89d2UobltyXS5vdXRsZXRzKTtyZXR1cm4gbmV3IFN0KGksbyl9aWYoMD09PXImJmRlKG5bMF0pKWkucHVzaChuZXcgRXQodC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxyKys7ZWxzZXt2YXIgYT12ZShuW3JdKSxzPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDthJiZzJiZkZShzKT8oaS5wdXNoKG5ldyBFdChhLHhlKHMpKSkscis9Mik6KGkucHVzaChuZXcgRXQoYSx7fSkpLHIrKyl9fXJldHVybiBuZXcgU3QoaSx7fSl9ZnVuY3Rpb24gd2UodCl7dmFyIGU9e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxuKXtudWxsIT09dCYmKGVbbl09X2UobmV3IFN0KFtdLHt9KSwwLHQpKX0pLGV9ZnVuY3Rpb24geGUodCl7dmFyIGU9e307cmV0dXJuIGd0KHQsZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSksZX1mdW5jdGlvbiBTZSh0LGUsbil7cmV0dXJuIHQ9PW4ucGF0aCYmbXQoZSxuLnBhcmFtZXRlcnMpfXZhciBFZT1mdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfSxDZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfSxPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5mdXR1cmU9dCx0aGlzLmN1cnI9ZSx0aGlzLm1vZHVsZUluamVjdG9yPW4sdGhpcy5mb3J3YXJkRXZlbnQ9aSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzPVtdLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcz1bXX1yZXR1cm4gdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZS5fcm9vdDt0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyhlLHRoaXMuY3Vycj90aGlzLmN1cnIuX3Jvb3Q6bnVsbCx0LFtlLnZhbHVlXSl9LHQucHJvdG90eXBlLmNoZWNrR3VhcmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pc0RlYWN0aXZhdGluZygpfHx0aGlzLmlzQWN0aXZhdGluZygpP3RoaXMucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcygpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/dC5ydW5DYW5BY3RpdmF0ZUNoZWNrcygpOk9iamVjdChzLmEpKCExKX0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJlc29sdmVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaXNBY3RpdmF0aW5nKCk/T2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoRS5hKShmdW5jdGlvbihuKXtyZXR1cm4gZS5ydW5SZXNvbHZlKG4ucm91dGUsdCl9KSxmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0yP2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3QoVi5hKShMKHQsZSksVCgxKSxwKGUpKShuKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChWLmEpKEwoZnVuY3Rpb24oZSxuLGkpe3JldHVybiB0KGUsbixpKzEpfSksVCgxKSkoZSl9fShmdW5jdGlvbih0LGUpe3JldHVybiB0fSkpOk9iamVjdChzLmEpKG51bGwpfSx0LnByb3RvdHlwZS5pc0RlYWN0aXZhdGluZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5jYW5EZWFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuaXNBY3RpdmF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aH0sdC5wcm90b3R5cGUuc2V0dXBDaGlsZFJvdXRlR3VhcmRzPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPXRoaXMsbz1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7ci5zZXR1cFJvdXRlR3VhcmRzKHQsb1t0LnZhbHVlLm91dGxldF0sbixpLmNvbmNhdChbdC52YWx1ZV0pKSxkZWxldGUgb1t0LnZhbHVlLm91dGxldF19KSxndChvLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odCxuLmdldENvbnRleHQoZSkpfSl9LHQucHJvdG90eXBlLnNldHVwUm91dGVHdWFyZHM9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsLGE9bj9uLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpOm51bGw7aWYobyYmci5yb3V0ZUNvbmZpZz09PW8ucm91dGVDb25maWcpe3ZhciBzPXRoaXMuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzKG8scixyLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7cz90aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEVlKGkpKTooci5kYXRhPW8uZGF0YSxyLl9yZXNvbHZlZERhdGE9by5fcmVzb2x2ZWREYXRhKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LGUsci5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixpKSxzJiZ0aGlzLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgQ2UoYS5vdXRsZXQuY29tcG9uZW50LG8pKX1lbHNlIG8mJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxhKSx0aGlzLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEVlKGkpKSx0aGlzLnNldHVwQ2hpbGRSb3V0ZUd1YXJkcyh0LG51bGwsci5jb21wb25lbnQ/YT9hLmNoaWxkcmVuOm51bGw6bixpKX0sdC5wcm90b3R5cGUuc2hvdWxkUnVuR3VhcmRzQW5kUmVzb2x2ZXJzPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2gobil7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIWhlKHQsZSl8fCFtdCh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UicGFyYW1zQ2hhbmdlIjpkZWZhdWx0OnJldHVybiFoZSh0LGUpfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9bmUodCkscj10LnZhbHVlO2d0KGksZnVuY3Rpb24odCxpKXtuLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsci5jb21wb25lbnQ/ZT9lLmNoaWxkcmVuLmdldENvbnRleHQoaSk6bnVsbDplKX0pLHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBDZShyLmNvbXBvbmVudCYmZSYmZS5vdXRsZXQmJmUub3V0bGV0LmlzQWN0aXZhdGVkP2Uub3V0bGV0LmNvbXBvbmVudDpudWxsLHIpKX0sdC5wcm90b3R5cGUucnVuQ2FuRGVhY3RpdmF0ZUNoZWNrcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIE9iamVjdChhLmEpKHRoaXMuY2FuRGVhY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbihlKXtyZXR1cm4gdC5ydW5DYW5EZWFjdGl2YXRlKGUuY29tcG9uZW50LGUucm91dGUpfSksaihmdW5jdGlvbih0KXtyZXR1cm4hMD09PXR9KSl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hlY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gT2JqZWN0KGEuYSkodGhpcy5jYW5BY3RpdmF0ZUNoZWNrcykucGlwZShPYmplY3QoRS5hKShmdW5jdGlvbihlKXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkoW3QuZmlyZUNoaWxkQWN0aXZhdGlvblN0YXJ0KGUucm91dGUucGFyZW50KSx0LmZpcmVBY3RpdmF0aW9uU3RhcnQoZS5yb3V0ZSksdC5ydW5DYW5BY3RpdmF0ZUNoaWxkKGUucGF0aCksdC5ydW5DYW5BY3RpdmF0ZShlLnJvdXRlKV0pKX0pLGooZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fSkpfSx0LnByb3RvdHlwZS5maXJlQWN0aXZhdGlvblN0YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dCYmdGhpcy5mb3J3YXJkRXZlbnQmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBpdCh0KSksT2JqZWN0KHMuYSkoITApfSx0LnByb3RvdHlwZS5maXJlQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT10JiZ0aGlzLmZvcndhcmRFdmVudCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGV0KHQpKSxPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LnJvdXRlQ29uZmlnP3Qucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtyZXR1cm4gbiYmMCE9PW4ubGVuZ3RoP2J0KE9iamVjdChhLmEpKG4pLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7dmFyIGk9ZS5nZXRUb2tlbihuLHQpO3JldHVybiBfdChpLmNhbkFjdGl2YXRlP2kuY2FuQWN0aXZhdGUodCxlLmZ1dHVyZSk6aSh0LGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1bkNhbkFjdGl2YXRlQ2hpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRbdC5sZW5ndGgtMV0saT10LnNsaWNlKDAsdC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZS5leHRyYWN0Q2FuQWN0aXZhdGVDaGlsZCh0KX0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9PXR9KTtyZXR1cm4gYnQoT2JqZWN0KGEuYSkoaSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtyZXR1cm4gYnQoT2JqZWN0KGEuYSkodC5ndWFyZHMpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oaSl7dmFyIHI9ZS5nZXRUb2tlbihpLHQubm9kZSk7cmV0dXJuIF90KHIuY2FuQWN0aXZhdGVDaGlsZD9yLmNhbkFjdGl2YXRlQ2hpbGQobixlLmZ1dHVyZSk6cihuLGUuZnV0dXJlKSkucGlwZSh3KCkpfSkpKX0pKSl9LHQucHJvdG90eXBlLmV4dHJhY3RDYW5BY3RpdmF0ZUNoaWxkPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm91dGVDb25maWc/dC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZUNoaWxkOm51bGw7cmV0dXJuIGUmJjAhPT1lLmxlbmd0aD97bm9kZTp0LGd1YXJkczplfTpudWxsfSx0LnByb3RvdHlwZS5ydW5DYW5EZWFjdGl2YXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWUmJmUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIGkmJjAhPT1pLmxlbmd0aD9PYmplY3QoYS5hKShpKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGkpe3ZhciByPW4uZ2V0VG9rZW4oaSxlKTtyZXR1cm4gX3Qoci5jYW5EZWFjdGl2YXRlP3IuY2FuRGVhY3RpdmF0ZSh0LGUsbi5jdXJyLG4uZnV0dXJlKTpyKHQsZSxuLmN1cnIsbi5mdXR1cmUpKS5waXBlKHcoKSl9KSkucGlwZShqKGZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0pKTpPYmplY3Qocy5hKSghMCl9LHQucHJvdG90eXBlLnJ1blJlc29sdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXNvbHZlTm9kZSh0Ll9yZXNvbHZlLHQpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7cmV0dXJuIHQuX3Jlc29sdmVkRGF0YT1uLHQuZGF0YT1PYmplY3QoaS5hKSh7fSx0LmRhdGEsYWUodCxlKS5yZXNvbHZlKSxudWxsfSkpfSx0LnByb3RvdHlwZS5yZXNvbHZlTm9kZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1PYmplY3Qua2V5cyh0KTtpZigwPT09aS5sZW5ndGgpcmV0dXJuIE9iamVjdChzLmEpKHt9KTtpZigxPT09aS5sZW5ndGgpe3ZhciByPWlbMF07cmV0dXJuIHRoaXMuZ2V0UmVzb2x2ZXIodFtyXSxlKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybihlPXt9KVtyXT10LGU7dmFyIGV9KSl9dmFyIG89e307cmV0dXJuIE9iamVjdChhLmEpKGkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oaSl7cmV0dXJuIG4uZ2V0UmVzb2x2ZXIodFtpXSxlKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBvW2ldPXQsdH0pKX0pKS5waXBlKEkoKSxPYmplY3QoUy5hKShmdW5jdGlvbigpe3JldHVybiBvfSkpfSx0LnByb3RvdHlwZS5nZXRSZXNvbHZlcj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuZ2V0VG9rZW4odCxlKTtyZXR1cm4gX3Qobi5yZXNvbHZlP24ucmVzb2x2ZShlLHRoaXMuZnV0dXJlKTpuKGUsdGhpcy5mdXR1cmUpKX0sdC5wcm90b3R5cGUuZ2V0VG9rZW49ZnVuY3Rpb24odCxlKXt2YXIgbj1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnfXJldHVybiBudWxsfShlKTtyZXR1cm4obj9uLm1vZHVsZS5pbmplY3Rvcjp0aGlzLm1vZHVsZUluamVjdG9yKS5nZXQodCl9LHR9KCksVGU9ZnVuY3Rpb24oKXt9LGtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLHIpe3RoaXMucm9vdENvbXBvbmVudFR5cGU9dCx0aGlzLmNvbmZpZz1lLHRoaXMudXJsVHJlZT1uLHRoaXMudXJsPWksdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXJ9cmV0dXJuIHQucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1qZSh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwLGU9dGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuY29uZmlnLHQsYXQpLG49bmV3IHNlKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoT2JqZWN0KGkuYSkoe30sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGF0LHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx0aGlzLnVybFRyZWUucm9vdCwtMSx7fSkscj1uZXcgZWUobixlKSxvPW5ldyB1ZSh0aGlzLnVybCxyKTtyZXR1cm4gdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShvLl9yb290KSxPYmplY3Qocy5hKShvKX1jYXRjaCh0KXtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcih0KX0pfX0sdC5wcm90b3R5cGUuaW5oZXJpdFBhcmFtc0FuZERhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQudmFsdWUsaT1hZShuLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7bi5wYXJhbXM9T2JqZWN0LmZyZWV6ZShpLnBhcmFtcyksbi5kYXRhPU9iamVjdC5mcmVlemUoaS5kYXRhKSx0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuaW5oZXJpdFBhcmFtc0FuZERhdGEodCl9KX0sdC5wcm90b3R5cGUucHJvY2Vzc1NlZ21lbnRHcm91cD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDA9PT1lLnNlZ21lbnRzLmxlbmd0aCYmZS5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKHQsZSk6dGhpcy5wcm9jZXNzU2VnbWVudCh0LGUsZS5zZWdtZW50cyxuKX0sdC5wcm90b3R5cGUucHJvY2Vzc0NoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dmFyIG4saT10aGlzLHI9T3QoZSxmdW5jdGlvbihlLG4pe3JldHVybiBpLnByb2Nlc3NTZWdtZW50R3JvdXAodCxlLG4pfSk7cmV0dXJuIG49e30sci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52YWx1ZS5vdXRsZXRdO2lmKGUpe3ZhciBpPWUudXJsLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZygpfSkuam9pbigiLyIpLHI9dC52YWx1ZS51cmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KS5qb2luKCIvIik7dGhyb3cgbmV3IEVycm9yKCJUd28gc2VnbWVudHMgY2Fubm90IGhhdmUgdGhlIHNhbWUgb3V0bGV0IG5hbWU6ICciK2krIicgYW5kICciK3IrIicuIil9blt0LnZhbHVlLm91dGxldF09dC52YWx1ZX0pLHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnZhbHVlLm91dGxldD09PWF0Py0xOmUudmFsdWUub3V0bGV0PT09YXQ/MTp0LnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGUudmFsdWUub3V0bGV0KX0pLHJ9LHQucHJvdG90eXBlLnByb2Nlc3NTZWdtZW50PWZ1bmN0aW9uKHQsZSxuLHIpe3RyeXtmb3IodmFyIG89T2JqZWN0KGkuZSkodCksYT1vLm5leHQoKTshYS5kb25lO2E9by5uZXh0KCkpe3ZhciBzPWEudmFsdWU7dHJ5e3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKHMsZSxuLHIpfWNhdGNoKHQpe2lmKCEodCBpbnN0YW5jZW9mIFRlKSl0aHJvdyB0fX19Y2F0Y2godCl7dT17ZXJyb3I6dH19ZmluYWxseXt0cnl7YSYmIWEuZG9uZSYmKGM9by5yZXR1cm4pJiZjLmNhbGwobyl9ZmluYWxseXtpZih1KXRocm93IHUuZXJyb3J9fWlmKHRoaXMubm9MZWZ0b3ZlcnNJblVybChlLG4scikpcmV0dXJuW107dGhyb3cgbmV3IFRlO3ZhciB1LGN9LHQucHJvdG90eXBlLm5vTGVmdG92ZXJzSW5Vcmw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiAwPT09ZS5sZW5ndGgmJiF0LmNoaWxkcmVuW25dfSx0LnByb3RvdHlwZS5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyKXtpZih0LnJlZGlyZWN0VG8pdGhyb3cgbmV3IFRlO2lmKCh0Lm91dGxldHx8YXQpIT09cil0aHJvdyBuZXcgVGU7dmFyIG8sYT1bXSxzPVtdO2lmKCIqKiI9PT10LnBhdGgpe3ZhciB1PW4ubGVuZ3RoPjA/dnQobikucGFyYW1ldGVyczp7fTtvPW5ldyBzZShuLHUsT2JqZWN0LmZyZWV6ZShPYmplY3QoaS5hKSh7fSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpKSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsTmUodCkscix0LmNvbXBvbmVudCx0LEFlKGUpLEllKGUpK24ubGVuZ3RoLFJlKHQpKX1lbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxuKXtpZigiIj09PWUucGF0aCl7aWYoImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApKXRocm93IG5ldyBUZTtyZXR1cm57Y29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwYXJhbWV0ZXJzOnt9fX12YXIgcj0oZS5tYXRjaGVyfHxjdCkobix0LGUpO2lmKCFyKXRocm93IG5ldyBUZTt2YXIgbz17fTtndChyLnBvc1BhcmFtcyxmdW5jdGlvbih0LGUpe29bZV09dC5wYXRofSk7dmFyIGE9ci5jb25zdW1lZC5sZW5ndGg+MD9PYmplY3QoaS5hKSh7fSxvLHIuY29uc3VtZWRbci5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVycyk6bztyZXR1cm57Y29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwYXJhbWV0ZXJzOmF9fShlLHQsbik7YT1jLmNvbnN1bWVkU2VnbWVudHMscz1uLnNsaWNlKGMubGFzdENoaWxkKSxvPW5ldyBzZShhLGMucGFyYW1ldGVycyxPYmplY3QuZnJlZXplKE9iamVjdChpLmEpKHt9LHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcykpLHRoaXMudXJsVHJlZS5mcmFnbWVudCxOZSh0KSxyLHQuY29tcG9uZW50LHQsQWUoZSksSWUoZSkrYS5sZW5ndGgsUmUodCkpfXZhciBsPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoaWxkcmVuP3QuY2hpbGRyZW46dC5sb2FkQ2hpbGRyZW4/dC5fbG9hZGVkQ29uZmlnLnJvdXRlczpbXX0odCksZj1qZShlLGEscyxsKSxoPWYuc2VnbWVudEdyb3VwLGQ9Zi5zbGljZWRTZWdtZW50cztpZigwPT09ZC5sZW5ndGgmJmguaGFzQ2hpbGRyZW4oKSl7dmFyIHA9dGhpcy5wcm9jZXNzQ2hpbGRyZW4obCxoKTtyZXR1cm5bbmV3IGVlKG8scCldfWlmKDA9PT1sLmxlbmd0aCYmMD09PWQubGVuZ3RoKXJldHVybltuZXcgZWUobyxbXSldO3ZhciBtPXRoaXMucHJvY2Vzc1NlZ21lbnQobCxoLGQsYXQpO3JldHVybltuZXcgZWUobyxtKV19LHR9KCk7ZnVuY3Rpb24gQWUodCl7Zm9yKHZhciBlPXQ7ZS5fc291cmNlU2VnbWVudDspZT1lLl9zb3VyY2VTZWdtZW50O3JldHVybiBlfWZ1bmN0aW9uIEllKHQpe2Zvcih2YXIgZT10LG49ZS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtlLl9zb3VyY2VTZWdtZW50OyluKz0oZT1lLl9zb3VyY2VTZWdtZW50KS5fc2VnbWVudEluZGV4U2hpZnQ/ZS5fc2VnbWVudEluZGV4U2hpZnQ6MDtyZXR1cm4gbi0xfWZ1bmN0aW9uIGplKHQsZSxuLHIpe2lmKG4ubGVuZ3RoPjAmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBNZSh0LGUsbikmJlBlKG4pIT09YXR9KX0odCxuKSl7dmFyIG89bmV3IFN0KGUsZnVuY3Rpb24odCxlLG4scil7dmFyIG8sYSxzPXt9O3NbYXRdPXIsci5fc291cmNlU2VnbWVudD10LHIuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoO3RyeXtmb3IodmFyIHU9T2JqZWN0KGkuZSkobiksYz11Lm5leHQoKTshYy5kb25lO2M9dS5uZXh0KCkpe3ZhciBsPWMudmFsdWU7aWYoIiI9PT1sLnBhdGgmJlBlKGwpIT09YXQpe3ZhciBmPW5ldyBTdChbXSx7fSk7Zi5fc291cmNlU2VnbWVudD10LGYuX3NlZ21lbnRJbmRleFNoaWZ0PWUubGVuZ3RoLHNbUGUobCldPWZ9fX1jYXRjaCh0KXtvPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtjJiYhYy5kb25lJiYoYT11LnJldHVybikmJmEuY2FsbCh1KX1maW5hbGx5e2lmKG8pdGhyb3cgby5lcnJvcn19cmV0dXJuIHN9KHQsZSxyLG5ldyBTdChuLHQuY2hpbGRyZW4pKSk7cmV0dXJuIG8uX3NvdXJjZVNlZ21lbnQ9dCxvLl9zZWdtZW50SW5kZXhTaGlmdD1lLmxlbmd0aCx7c2VnbWVudEdyb3VwOm8sc2xpY2VkU2VnbWVudHM6W119fWlmKDA9PT1uLmxlbmd0aCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiByLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIE1lKHQsZSxuKX0pfSh0LG4pKXt2YXIgYT1uZXcgU3QodC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixyKXt2YXIgbyxhLHM9e307dHJ5e2Zvcih2YXIgdT1PYmplY3QoaS5lKShuKSxjPXUubmV4dCgpOyFjLmRvbmU7Yz11Lm5leHQoKSl7dmFyIGw9Yy52YWx1ZTtpZihNZSh0LGUsbCkmJiFyW1BlKGwpXSl7dmFyIGY9bmV3IFN0KFtdLHt9KTtmLl9zb3VyY2VTZWdtZW50PXQsZi5fc2VnbWVudEluZGV4U2hpZnQ9dC5zZWdtZW50cy5sZW5ndGgsc1tQZShsKV09Zn19fWNhdGNoKHQpe289e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2MmJiFjLmRvbmUmJihhPXUucmV0dXJuKSYmYS5jYWxsKHUpfWZpbmFsbHl7aWYobyl0aHJvdyBvLmVycm9yfX1yZXR1cm4gT2JqZWN0KGkuYSkoe30scixzKX0odCxuLHIsdC5jaGlsZHJlbikpO3JldHVybiBhLl9zb3VyY2VTZWdtZW50PXQsYS5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDphLHNsaWNlZFNlZ21lbnRzOm59fXZhciBzPW5ldyBTdCh0LnNlZ21lbnRzLHQuY2hpbGRyZW4pO3JldHVybiBzLl9zb3VyY2VTZWdtZW50PXQscy5fc2VnbWVudEluZGV4U2hpZnQ9ZS5sZW5ndGgse3NlZ21lbnRHcm91cDpzLHNsaWNlZFNlZ21lbnRzOm59fWZ1bmN0aW9uIE1lKHQsZSxuKXtyZXR1cm4oISh0Lmhhc0NoaWxkcmVuKCl8fGUubGVuZ3RoPjApfHwiZnVsbCIhPT1uLnBhdGhNYXRjaCkmJiIiPT09bi5wYXRoJiZ2b2lkIDA9PT1uLnJlZGlyZWN0VG99ZnVuY3Rpb24gUGUodCl7cmV0dXJuIHQub3V0bGV0fHxhdH1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdC5kYXRhfHx7fX1mdW5jdGlvbiBSZSh0KXtyZXR1cm4gdC5yZXNvbHZlfHx7fX12YXIgRGU9ZnVuY3Rpb24oKXt9LExlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuc2hvdWxkRGV0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5zdG9yZT1mdW5jdGlvbih0LGUpe30sdC5wcm90b3R5cGUuc2hvdWxkQXR0YWNoPWZ1bmN0aW9uKHQpe3JldHVybiExfSx0LnByb3RvdHlwZS5yZXRyaWV2ZT1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuc2hvdWxkUmV1c2VSb3V0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJvdXRlQ29uZmlnPT09ZS5yb3V0ZUNvbmZpZ30sdH0oKSxGZT1uZXcgci5vKCJST1VURVMiKSx6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5sb2FkZXI9dCx0aGlzLmNvbXBpbGVyPWUsdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyPW4sdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcj1pfXJldHVybiB0LnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZSksdGhpcy5sb2FkTW9kdWxlRmFjdG9yeShlLmxvYWRDaGlsZHJlbikucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbihpKXtuLm9uTG9hZEVuZExpc3RlbmVyJiZuLm9uTG9hZEVuZExpc3RlbmVyKGUpO3ZhciByPWkuY3JlYXRlKHQpO3JldHVybiBuZXcgbHQoeXQoci5pbmplY3Rvci5nZXQoRmUpKS5tYXAocHQpLHIpfSkpfSx0LnByb3RvdHlwZS5sb2FkTW9kdWxlRmFjdG9yeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9PYmplY3QoYS5hKSh0aGlzLmxvYWRlci5sb2FkKHQpKTpfdCh0KCkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiByLnQ/T2JqZWN0KHMuYSkodCk6T2JqZWN0KGEuYSkoZS5jb21waWxlci5jb21waWxlTW9kdWxlQXN5bmModCkpfSkpfSx0fSgpLFZlPWZ1bmN0aW9uKCl7fSxCZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnNob3VsZFByb2Nlc3NVcmw9ZnVuY3Rpb24odCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmV4dHJhY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHQucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHR9KCk7ZnVuY3Rpb24gVWUodCl7dGhyb3cgdH1mdW5jdGlvbiBIZSh0LGUsbil7cmV0dXJuIGUucGFyc2UoIi8iKX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9dmFyIEdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpLGEscyxjLGwpe3ZhciBmPXRoaXM7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMudXJsU2VyaWFsaXplcj1lLHRoaXMucm9vdENvbnRleHRzPW4sdGhpcy5sb2NhdGlvbj1pLHRoaXMuY29uZmlnPWwsdGhpcy5uYXZpZ2F0aW9ucz1uZXcgby5hKG51bGwpLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5ldmVudHM9bmV3IHUuYSx0aGlzLmVycm9ySGFuZGxlcj1VZSx0aGlzLm1hbGZvcm1lZFVyaUVycm9ySGFuZGxlcj1IZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy5ob29rcz17YmVmb3JlUHJlYWN0aXZhdGlvbjpxZSxhZnRlclByZWFjdGl2YXRpb246cWV9LHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1uZXcgQmUsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bmV3IExlLHRoaXMub25TYW1lVXJsTmF2aWdhdGlvbj0iaWdub3JlIix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9ImVtcHR5T25seSIsdGhpcy5uZ01vZHVsZT1hLmdldChyLnYpLHRoaXMucmVzZXRDb25maWcobCksdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgeHQobmV3IFN0KFtdLHt9KSx7fSxudWxsKSx0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmNvbmZpZ0xvYWRlcj1uZXcgemUocyxjLGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgSih0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiBmLnRyaWdnZXJFdmVudChuZXcgdHQodCkpfSksdGhpcy5yb3V0ZXJTdGF0ZT1yZSh0aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLHRoaXMucHJvY2Vzc05hdmlnYXRpb25zKCl9cmV0dXJuIHQucHJvdG90eXBlLnJlc2V0Um9vdENvbXBvbmVudFR5cGU9ZnVuY3Rpb24odCl7dGhpcy5yb290Q29tcG9uZW50VHlwZT10LHRoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9dGhpcy5yb290Q29tcG9uZW50VHlwZX0sdC5wcm90b3R5cGUuaW5pdGlhbE5hdmlnYXRpb249ZnVuY3Rpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLDA9PT10aGlzLm5hdmlnYXRpb25JZCYmdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMubG9jYXRpb24ucGF0aCghMCkse3JlcGxhY2VVcmw6ITB9KX0sdC5wcm90b3R5cGUuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9ufHwodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj10aGlzLmxvY2F0aW9uLnN1YnNjcmliZShmdW5jdGlvbihlKXt2YXIgbj10LnBhcnNlVXJsKGUudXJsKSxpPSJwb3BzdGF0ZSI9PT1lLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSIscj1lLnN0YXRlJiZlLnN0YXRlLm5hdmlnYXRpb25JZD97bmF2aWdhdGlvbklkOmUuc3RhdGUubmF2aWdhdGlvbklkfTpudWxsO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LnNjaGVkdWxlTmF2aWdhdGlvbihuLGkscix7cmVwbGFjZVVybDohMH0pfSwwKX0pKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKHQpe3RoaXMuZXZlbnRzLm5leHQodCl9LHQucHJvdG90eXBlLnJlc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2Z0KHQpLHRoaXMuY29uZmlnPXQubWFwKHB0KSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTF9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb249bnVsbCl9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49ZS5yZWxhdGl2ZVRvLG89ZS5xdWVyeVBhcmFtcyxhPWUuZnJhZ21lbnQscz1lLnByZXNlcnZlUXVlcnlQYXJhbXMsdT1lLnF1ZXJ5UGFyYW1zSGFuZGxpbmcsYz1lLnByZXNlcnZlRnJhZ21lbnQ7T2JqZWN0KHIuWCkoKSYmcyYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKTt2YXIgbD1ufHx0aGlzLnJvdXRlclN0YXRlLnJvb3QsZj1jP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6YSxoPW51bGw7aWYodSlzd2l0Y2godSl7Y2FzZSJtZXJnZSI6aD1PYmplY3QoaS5hKSh7fSx0aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLG8pO2JyZWFrO2Nhc2UicHJlc2VydmUiOmg9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0Omg9b3x8bnVsbH1lbHNlIGg9cz90aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zOm98fG51bGw7cmV0dXJuIG51bGwhPT1oJiYoaD10aGlzLnJlbW92ZUVtcHR5UHJvcHMoaCkpLGZ1bmN0aW9uKHQsZSxuLHIsbyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBwZShlLnJvb3QsZS5yb290LGUscixvKTt2YXIgYT1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHRbMF0mJjE9PT10Lmxlbmd0aCYmIi8iPT09dFswXSlyZXR1cm4gbmV3IG1lKCEwLDAsdCk7dmFyIGU9MCxuPSExLHI9dC5yZWR1Y2UoZnVuY3Rpb24odCxyLG8pe2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9cil7aWYoci5vdXRsZXRzKXt2YXIgYT17fTtyZXR1cm4gZ3Qoci5vdXRsZXRzLGZ1bmN0aW9uKHQsZSl7YVtlXT0ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgiLyIpOnR9KSxPYmplY3QoaS5kKSh0LFt7b3V0bGV0czphfV0pfWlmKHIuc2VnbWVudFBhdGgpcmV0dXJuIE9iamVjdChpLmQpKHQsW3Iuc2VnbWVudFBhdGhdKX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHI/T2JqZWN0KGkuZCkodCxbcl0pOjA9PT1vPyhyLnNwbGl0KCIvIikuZm9yRWFjaChmdW5jdGlvbihpLHIpezA9PXImJiIuIj09PWl8fCgwPT1yJiYiIj09PWk/bj0hMDoiLi4iPT09aT9lKys6IiIhPWkmJnQucHVzaChpKSl9KSx0KTpPYmplY3QoaS5kKSh0LFtyXSl9LFtdKTtyZXR1cm4gbmV3IG1lKG4sZSxyKX0obik7aWYoYS50b1Jvb3QoKSlyZXR1cm4gcGUoZS5yb290LG5ldyBTdChbXSx7fSksZSxyLG8pO3ZhciBzPWZ1bmN0aW9uKHQsbixpKXtpZih0LmlzQWJzb2x1dGUpcmV0dXJuIG5ldyB5ZShlLnJvb3QsITAsMCk7aWYoLTE9PT1pLnNuYXBzaG90Ll9sYXN0UGF0aEluZGV4KXJldHVybiBuZXcgeWUoaS5zbmFwc2hvdC5fdXJsU2VnbWVudCwhMCwwKTt2YXIgcj1kZSh0LmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtmb3IodmFyIGE9aS5zbmFwc2hvdC5fdXJsU2VnbWVudCxzPWkuc25hcHNob3QuX2xhc3RQYXRoSW5kZXgrcix1PXQubnVtYmVyT2ZEb3VibGVEb3RzO3U+czspe2lmKHUtPXMsIShhPWEucGFyZW50KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbnVtYmVyIG9mICcuLi8nIik7cz1hLnNlZ21lbnRzLmxlbmd0aH1yZXR1cm4gbmV3IHllKGEsITEscy11KX0oKX0oYSwwLHQpLHU9cy5wcm9jZXNzQ2hpbGRyZW4/YmUocy5zZWdtZW50R3JvdXAscy5pbmRleCxhLmNvbW1hbmRzKTpnZShzLnNlZ21lbnRHcm91cCxzLmluZGV4LGEuY29tbWFuZHMpO3JldHVybiBwZShzLnNlZ21lbnRHcm91cCx1LGUscixvKX0obCx0aGlzLmN1cnJlbnRVcmxUcmVlLHQsaCxmKX0sdC5wcm90b3R5cGUubmF2aWdhdGVCeVVybD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KTt2YXIgbj10IGluc3RhbmNlb2YgeHQ/dDp0aGlzLnBhcnNlVXJsKHQpLGk9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKG4sdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oaSwiaW1wZXJhdGl2ZSIsbnVsbCxlKX0sdC5wcm90b3R5cGUubmF2aWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgbj10W2VdO2lmKG51bGw9PW4pdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVxdWVzdGVkIHBhdGggY29udGFpbnMgIituKyIgc2VnbWVudCBhdCBpbmRleCAiK2UpfX0odCksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZSh0LGUpLGUpfSx0LnByb3RvdHlwZS5zZXJpYWxpemVVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodCl9LHQucHJvdG90eXBlLnBhcnNlVXJsPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXRoaXMudXJsU2VyaWFsaXplci5wYXJzZSh0KX1jYXRjaChuKXtlPXRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyKG4sdGhpcy51cmxTZXJpYWxpemVyLHQpfXJldHVybiBlfSx0LnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiB4dClyZXR1cm4gd3QodGhpcy5jdXJyZW50VXJsVHJlZSx0LGUpO3ZhciBuPXRoaXMucGFyc2VVcmwodCk7cmV0dXJuIHd0KHRoaXMuY3VycmVudFVybFRyZWUsbixlKX0sdC5wcm90b3R5cGUucmVtb3ZlRW1wdHlQcm9wcz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkucmVkdWNlKGZ1bmN0aW9uKGUsbil7dmFyIGk9dFtuXTtyZXR1cm4gbnVsbCE9PWkmJnZvaWQgMCE9PWkmJihlW25dPWkpLGV9LHt9KX0sdC5wcm90b3R5cGUucHJvY2Vzc05hdmlnYXRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5hdmlnYXRpb25zLnBpcGUoT2JqZWN0KEUuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGU/KHQuZXhlY3V0ZVNjaGVkdWxlZE5hdmlnYXRpb24oZSksZS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSkpOk9iamVjdChzLmEpKG51bGwpfSkpLnN1YnNjcmliZShmdW5jdGlvbigpe30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZU5hdmlnYXRpb249ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dGhpcy5uYXZpZ2F0aW9ucy52YWx1ZTtpZihyJiYiaW1wZXJhdGl2ZSIhPT1lJiYiaW1wZXJhdGl2ZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihyJiYiaGFzaGNoYW5nZSI9PWUmJiJwb3BzdGF0ZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTtpZihyJiYicG9wc3RhdGUiPT1lJiYiaGFzaGNoYW5nZSI9PT1yLnNvdXJjZSYmci5yYXdVcmwudG9TdHJpbmcoKT09PXQudG9TdHJpbmcoKSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCEwKTt2YXIgbz1udWxsLGE9bnVsbCxzPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQsZSl7bz10LGE9ZX0pLHU9Kyt0aGlzLm5hdmlnYXRpb25JZDtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9ucy5uZXh0KHtpZDp1LHNvdXJjZTplLHN0YXRlOm4scmF3VXJsOnQsZXh0cmFzOmkscmVzb2x2ZTpvLHJlamVjdDphLHByb21pc2U6c30pLHMuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UucmVqZWN0KHQpfSl9LHQucHJvdG90eXBlLmV4ZWN1dGVTY2hlZHVsZWROYXZpZ2F0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10LmlkLGk9dC5yYXdVcmwscj10LmV4dHJhcyxvPXQucmVzb2x2ZSxhPXQucmVqZWN0LHM9dC5zb3VyY2UsdT10LnN0YXRlLGM9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoaSksbD0hdGhpcy5uYXZpZ2F0ZWR8fGMudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTsoInJlbG9hZCI9PT10aGlzLm9uU2FtZVVybE5hdmlnYXRpb258fGwpJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChpKT8odGhpcy5ldmVudHMubmV4dChuZXcgcShuLHRoaXMuc2VyaWFsaXplVXJsKGMpLHMsdSkpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIGUucnVuTmF2aWdhdGUoYyxpLCEhci5za2lwTG9jYXRpb25DaGFuZ2UsISFyLnJlcGxhY2VVcmwsbixudWxsKX0pLnRoZW4obyxhKSk6bCYmdGhpcy5yYXdVcmxUcmVlJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh0aGlzLnJhd1VybFRyZWUpPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBxKG4sdGhpcy5zZXJpYWxpemVVcmwoYykscyx1KSksUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5ydW5OYXZpZ2F0ZShjLGksITEsITEsbixyZShjLGUucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90KX0pLnRoZW4obyxhKSk6KHRoaXMucmF3VXJsVHJlZT1pLG8obnVsbCkpfSx0LnByb3RvdHlwZS5ydW5OYXZpZ2F0ZT1mdW5jdGlvbih0LGUsbixyLGEsdSl7dmFyIGM9dGhpcztyZXR1cm4gYSE9PXRoaXMubmF2aWdhdGlvbklkPyh0aGlzLmV2ZW50cy5uZXh0KG5ldyBXKGEsdGhpcy5zZXJpYWxpemVVcmwodCksIk5hdmlnYXRpb24gSUQgIithKyIgaXMgbm90IGVxdWFsIHRvIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaWQgIit0aGlzLm5hdmlnYXRpb25JZCkpLFByb21pc2UucmVzb2x2ZSghMSkpOm5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsZil7dmFyIGgsZD0odT9PYmplY3Qocy5hKSh7YXBwbGllZFVybDp0LHNuYXBzaG90OnV9KTpuZXcgWXQoYy5uZ01vZHVsZS5pbmplY3RvcixjLmNvbmZpZ0xvYWRlcixjLnVybFNlcmlhbGl6ZXIsdCxjLmNvbmZpZykuYXBwbHkoKS5waXBlKE9iamVjdCh4LmEpKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUsbixpLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj0iZW1wdHlPbmx5IiksbmV3IGtlKHQsZSxuLGkscikucmVjb2duaXplKCl9KGMucm9vdENvbXBvbmVudFR5cGUsYy5jb25maWcsZSxjLnNlcmlhbGl6ZVVybChlKSxjLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24obil7cmV0dXJuIGMuZXZlbnRzLm5leHQobmV3IFEoYSxjLnNlcmlhbGl6ZVVybCh0KSxjLnNlcmlhbGl6ZVVybChlKSxuKSkse2FwcGxpZWRVcmw6ZSxzbmFwc2hvdDpufX0pKX0pKSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0P09iamVjdChzLmEpKHQpOmMuaG9va3MuYmVmb3JlUHJlYWN0aXZhdGlvbih0LnNuYXBzaG90KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSkucGlwZShPYmplY3QoUy5hKShmdW5jdGlvbih0KXtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXQuYXBwbGllZFVybCxuPXQuc25hcHNob3Q7cmV0dXJuKGg9bmV3IE9lKG4sYy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjLm5nTW9kdWxlLmluamVjdG9yLGZ1bmN0aW9uKHQpe3JldHVybiBjLnRyaWdnZXJFdmVudCh0KX0pKS5pbml0aWFsaXplKGMucm9vdENvbnRleHRzKSx7YXBwbGllZFVybDplLHNuYXBzaG90Om59fSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iPT10eXBlb2YgZXx8Yy5uYXZpZ2F0aW9uSWQhPT1hKXJldHVybiBPYmplY3Qocy5hKSghMSk7dmFyIG49ZS5hcHBsaWVkVXJsLGk9ZS5zbmFwc2hvdDtyZXR1cm4gYy50cmlnZ2VyRXZlbnQobmV3IFooYSxjLnNlcmlhbGl6ZVVybCh0KSxjLnNlcmlhbGl6ZVVybChuKSxpKSksaC5jaGVja0d1YXJkcygpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oZSl7cmV0dXJuIGMudHJpZ2dlckV2ZW50KG5ldyBLKGEsYy5zZXJpYWxpemVVcmwodCksYy5zZXJpYWxpemVVcmwobiksaSxlKSkse2FwcGxpZWRVcmw6bixzbmFwc2hvdDppLHNob3VsZEFjdGl2YXRlOmV9fSkpfSkpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZXx8Yy5uYXZpZ2F0aW9uSWQhPT1hP09iamVjdChzLmEpKCExKTplLnNob3VsZEFjdGl2YXRlJiZoLmlzQWN0aXZhdGluZygpPyhjLnRyaWdnZXJFdmVudChuZXcgWChhLGMuc2VyaWFsaXplVXJsKHQpLGMuc2VyaWFsaXplVXJsKGUuYXBwbGllZFVybCksZS5zbmFwc2hvdCkpLGgucmVzb2x2ZURhdGEoYy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIGMudHJpZ2dlckV2ZW50KG5ldyAkKGEsYy5zZXJpYWxpemVVcmwodCksYy5zZXJpYWxpemVVcmwoZS5hcHBsaWVkVXJsKSxlLnNuYXBzaG90KSksZX0pKSk6T2JqZWN0KHMuYSkoZSl9KSkucGlwZShPYmplY3QoeC5hKShmdW5jdGlvbih0KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0fHxjLm5hdmlnYXRpb25JZCE9PWE/T2JqZWN0KHMuYSkoITEpOmMuaG9va3MuYWZ0ZXJQcmVhY3RpdmF0aW9uKHQuc25hcHNob3QpLnBpcGUoT2JqZWN0KFMuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKS5waXBlKE9iamVjdChTLmEpKGZ1bmN0aW9uKHQpe2lmKCJib29sZWFuIj09dHlwZW9mIHR8fGMubmF2aWdhdGlvbklkIT09YSlyZXR1cm4hMTt2YXIgZSxuLHIscz10LmFwcGxpZWRVcmwsdT10LnNob3VsZEFjdGl2YXRlO3JldHVybiB1P3thcHBsaWVkVXJsOnMsc3RhdGU6KHI9ZnVuY3Rpb24gdChlLG4scil7aWYociYmZS5zaG91bGRSZXVzZVJvdXRlKG4udmFsdWUsci52YWx1ZS5zbmFwc2hvdCkpeyhsPXIudmFsdWUpLl9mdXR1cmVTbmFwc2hvdD1uLnZhbHVlO3ZhciBhPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gbi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7dHJ5e2Zvcih2YXIgbz1PYmplY3QoaS5lKShyLmNoaWxkcmVuKSxhPW8ubmV4dCgpOyFhLmRvbmU7YT1vLm5leHQoKSl7dmFyIHM9YS52YWx1ZTtpZihlLnNob3VsZFJldXNlUm91dGUocy52YWx1ZS5zbmFwc2hvdCxuLnZhbHVlKSlyZXR1cm4gdChlLG4scyl9fWNhdGNoKHQpe3U9e2Vycm9yOnR9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihjPW8ucmV0dXJuKSYmYy5jYWxsKG8pfWZpbmFsbHl7aWYodSl0aHJvdyB1LmVycm9yfX1yZXR1cm4gdChlLG4pO3ZhciB1LGN9KX0oZSxuLHIpO3JldHVybiBuZXcgZWUobCxhKX12YXIgcz1lLnJldHJpZXZlKG4udmFsdWUpO2lmKHMpe3ZhciB1PXMucm91dGU7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZihlLnZhbHVlLnJvdXRlQ29uZmlnIT09bi52YWx1ZS5yb3V0ZUNvbmZpZyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWF0dGFjaCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCByb3V0ZSIpO2lmKGUuY2hpbGRyZW4ubGVuZ3RoIT09bi5jaGlsZHJlbi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVhdHRhY2ggQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB3aXRoIGEgZGlmZmVyZW50IG51bWJlciBvZiBjaGlsZHJlbiIpO24udmFsdWUuX2Z1dHVyZVNuYXBzaG90PWUudmFsdWU7Zm9yKHZhciBpPTA7aTxlLmNoaWxkcmVuLmxlbmd0aDsrK2kpdChlLmNoaWxkcmVuW2ldLG4uY2hpbGRyZW5baV0pfShuLHUpLHV9dmFyIGMsbD1uZXcgb2UobmV3IG8uYSgoYz1uLnZhbHVlKS51cmwpLG5ldyBvLmEoYy5wYXJhbXMpLG5ldyBvLmEoYy5xdWVyeVBhcmFtcyksbmV3IG8uYShjLmZyYWdtZW50KSxuZXcgby5hKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyk7cmV0dXJuIGE9bi5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0pLG5ldyBlZShsLGEpfShjLnJvdXRlUmV1c2VTdHJhdGVneSwoZT10LnNuYXBzaG90KS5fcm9vdCwobj1jLnJvdXRlclN0YXRlKT9uLl9yb290OnZvaWQgMCksbmV3IGllKHIsZSkpLHNob3VsZEFjdGl2YXRlOnV9OnthcHBsaWVkVXJsOnMsc3RhdGU6bnVsbCxzaG91bGRBY3RpdmF0ZTp1fX0pKTtjLmFjdGl2YXRlUm91dGVzKGQsYy5yb3V0ZXJTdGF0ZSxjLmN1cnJlbnRVcmxUcmVlLGEsdCxlLG4scixsLGYpfSl9LHQucHJvdG90eXBlLmFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuLGkscixvLGEscyx1LGMpe3ZhciBsLGY9dGhpczt0LmZvckVhY2goZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iIT10eXBlb2YgdCYmdC5zaG91bGRBY3RpdmF0ZSYmaT09PWYubmF2aWdhdGlvbklkJiZ0LnN0YXRlKXt2YXIgbj10LnN0YXRlO2lmKGYuY3VycmVudFVybFRyZWU9dC5hcHBsaWVkVXJsLGYucmF3VXJsVHJlZT1mLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZi5jdXJyZW50VXJsVHJlZSxvKSxmLnJvdXRlclN0YXRlPW4sIWEpe3ZhciByPWYudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5yYXdVcmxUcmVlKTtmLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKHIpfHxzP2YubG9jYXRpb24ucmVwbGFjZVN0YXRlKHIsIiIse25hdmlnYXRpb25JZDppfSk6Zi5sb2NhdGlvbi5nbyhyLCIiLHtuYXZpZ2F0aW9uSWQ6aX0pfW5ldyBXZShmLnJvdXRlUmV1c2VTdHJhdGVneSxuLGUsZnVuY3Rpb24odCl7cmV0dXJuIGYudHJpZ2dlckV2ZW50KHQpfSkuYWN0aXZhdGUoZi5yb290Q29udGV4dHMpLGw9ITB9ZWxzZSBsPSExfSkudGhlbihmdW5jdGlvbigpe2w/KGYubmF2aWdhdGVkPSEwLGYubGFzdFN1Y2Nlc3NmdWxJZD1pLGYuZXZlbnRzLm5leHQobmV3IEcoaSxmLnNlcmlhbGl6ZVVybChyKSxmLnNlcmlhbGl6ZVVybChmLmN1cnJlbnRVcmxUcmVlKSkpLHUoITApKTooZi5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSxmLmV2ZW50cy5uZXh0KG5ldyBXKGksZi5zZXJpYWxpemVVcmwociksIiIpKSx1KCExKSl9LGZ1bmN0aW9uKHQpe2lmKChhPXQpJiZhLm5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKWYubmF2aWdhdGVkPSEwLGYucmVzZXRTdGF0ZUFuZFVybChlLG4sbyksZi5ldmVudHMubmV4dChuZXcgVyhpLGYuc2VyaWFsaXplVXJsKHIpLHQubWVzc2FnZSkpLHUoITEpO2Vsc2V7Zi5yZXNldFN0YXRlQW5kVXJsKGUsbixvKSxmLmV2ZW50cy5uZXh0KG5ldyBZKGksZi5zZXJpYWxpemVVcmwociksdCkpO3RyeXt1KGYuZXJyb3JIYW5kbGVyKHQpKX1jYXRjaCh0KXtjKHQpfX12YXIgYX0pfSx0LnByb3RvdHlwZS5yZXNldFN0YXRlQW5kVXJsPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLnJvdXRlclN0YXRlPXQsdGhpcy5jdXJyZW50VXJsVHJlZT1lLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxuKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpfSx0LnByb3RvdHlwZS5yZXNldFVybFRvQ3VycmVudFVybFRyZWU9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIse25hdmlnYXRpb25JZDp0aGlzLmxhc3RTdWNjZXNzZnVsSWR9KX0sdH0oKSxXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9dCx0aGlzLmZ1dHVyZVN0YXRlPWUsdGhpcy5jdXJyU3RhdGU9bix0aGlzLmZvcndhcmRFdmVudD1pfXJldHVybiB0LnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LG49dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhlLG4sdCksZmUodGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMscj1uZShlKTt0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZS5vdXRsZXQ7aS5kZWFjdGl2YXRlUm91dGVzKHQscltlXSxuKSxkZWxldGUgcltlXX0pLGd0KHIsZnVuY3Rpb24odCxlKXtpLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKHQsbil9KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC52YWx1ZSxyPWU/ZS52YWx1ZTpudWxsO2lmKGk9PT1yKWlmKGkuY29tcG9uZW50KXt2YXIgbz1uLmdldENvbnRleHQoaS5vdXRsZXQpO28mJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxuKTtlbHNlIHImJnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZSxuKX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW49ZnVuY3Rpb24odCxlKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2godC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZSh0LGUpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KHQsZSl9LHQucHJvdG90eXBlLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTtpZihuJiZuLm91dGxldCl7dmFyIGk9bi5vdXRsZXQuZGV0YWNoKCkscj1uLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKTt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zdG9yZSh0LnZhbHVlLnNuYXBzaG90LHtjb21wb25lbnRSZWY6aSxyb3V0ZTp0LGNvbnRleHRzOnJ9KX19LHQucHJvdG90eXBlLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKGkpe3ZhciByPW5lKHQpLG89dC52YWx1ZS5jb21wb25lbnQ/aS5jaGlsZHJlbjplO2d0KHIsZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG8pfSksaS5vdXRsZXQmJihpLm91dGxldC5kZWFjdGl2YXRlKCksaS5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpfX0sdC5wcm90b3R5cGUuYWN0aXZhdGVDaGlsZFJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPW5lKGUpO3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbih0KXtpLmFjdGl2YXRlUm91dGVzKHQsclt0LnZhbHVlLm91dGxldF0sbiksaS5mb3J3YXJkRXZlbnQobmV3IHJ0KHQudmFsdWUuc25hcHNob3QpKX0pLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgbnQodC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC52YWx1ZSxyPWU/ZS52YWx1ZTpudWxsO2lmKGZlKGkpLGk9PT1yKWlmKGkuY29tcG9uZW50KXt2YXIgbz1uLmdldE9yQ3JlYXRlQ29udGV4dChpLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxvLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihpLmNvbXBvbmVudClpZihvPW4uZ2V0T3JDcmVhdGVDb250ZXh0KGkub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goaS5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGkuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGkuc25hcHNob3QsbnVsbCksby5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksby5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsby5yb3V0ZT1hLnJvdXRlLnZhbHVlLG8ub3V0bGV0JiZvLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksWWUoYS5yb3V0ZSl9ZWxzZXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aS5zbmFwc2hvdC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfSgpLHU9cz9zLm1vZHVsZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6bnVsbDtvLnJvdXRlPWksby5yZXNvbHZlcj11LG8ub3V0bGV0JiZvLm91dGxldC5hY3RpdmF0ZVdpdGgoaSx1KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLG8uY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBZZSh0KXtmZSh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2goWWUpfXZhciBRZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3ZhciBpPXRoaXM7dGhpcy5yb3V0ZXI9dCx0aGlzLnJvdXRlPWUsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PW4sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbj10LmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7dCBpbnN0YW5jZW9mIEcmJmkudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZigpfSl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicm91dGVyTGluayIse3NldDpmdW5jdGlvbih0KXt0aGlzLmNvbW1hbmRzPW51bGwhPXQ/QXJyYXkuaXNBcnJheSh0KT90Olt0XTpbXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInByZXNlcnZlUXVlcnlQYXJhbXMiLHtzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0KHIuWCkoKSYmY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oInByZXNlcnZlUXVlcnlQYXJhbXMgaXMgZGVwcmVjYXRlZCwgdXNlIHF1ZXJ5UGFyYW1zSGFuZGxpbmcgaW5zdGVhZC4iKSx0aGlzLnByZXNlcnZlPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUubmdPbkNoYW5nZXM9ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVUYXJnZXRVcmxBbmRIcmVmKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX0sdC5wcm90b3R5cGUub25DbGljaz1mdW5jdGlvbih0LGUsbixpKXtpZigwIT09dHx8ZXx8bnx8aSlyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldClyZXR1cm4hMDt2YXIgcj17c2tpcExvY2F0aW9uQ2hhbmdlOlplKHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlKSxyZXBsYWNlVXJsOlplKHRoaXMucmVwbGFjZVVybCl9O3JldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMudXJsVHJlZSxyKSwhMX0sdC5wcm90b3R5cGUudXBkYXRlVGFyZ2V0VXJsQW5kSHJlZj1mdW5jdGlvbigpe3RoaXMuaHJlZj10aGlzLmxvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJ1cmxUcmVlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5jb21tYW5kcyx7cmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxwcmVzZXJ2ZVF1ZXJ5UGFyYW1zOlplKHRoaXMucHJlc2VydmUpLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6dGhpcy5xdWVyeVBhcmFtc0hhbmRsaW5nLHByZXNlcnZlRnJhZ21lbnQ6WmUodGhpcy5wcmVzZXJ2ZUZyYWdtZW50KX0pfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHR9KCk7ZnVuY3Rpb24gWmUodCl7cmV0dXJuIiI9PT10fHwhIXR9dmFyIEtlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5yZXNvbHZlcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3IFhlLHRoaXMuYXR0YWNoUmVmPW51bGx9fSgpLFhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUub25DaGlsZE91dGxldENyZWF0ZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldE9yQ3JlYXRlQ29udGV4dCh0KTtuLm91dGxldD1lLHRoaXMuY29udGV4dHMuc2V0KHQsbil9LHQucHJvdG90eXBlLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO2UmJihlLm91dGxldD1udWxsKX0sdC5wcm90b3R5cGUub25PdXRsZXREZWFjdGl2YXRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCx0fSx0LnByb3RvdHlwZS5vbk91dGxldFJlQXR0YWNoZWQ9ZnVuY3Rpb24odCl7dGhpcy5jb250ZXh0cz10fSx0LnByb3RvdHlwZS5nZXRPckNyZWF0ZUNvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRDb250ZXh0KHQpO3JldHVybiBlfHwoZT1uZXcgS2UsdGhpcy5jb250ZXh0cy5zZXQodCxlKSksZX0sdC5wcm90b3R5cGUuZ2V0Q29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQodCl8fG51bGx9LHR9KCksJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksbyl7dGhpcy5wYXJlbnRDb250ZXh0cz10LHRoaXMubG9jYXRpb249ZSx0aGlzLnJlc29sdmVyPW4sdGhpcy5jaGFuZ2VEZXRlY3Rvcj1vLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyByLm0sdGhpcy5kZWFjdGl2YXRlRXZlbnRzPW5ldyByLm0sdGhpcy5uYW1lPWl8fGF0LHQub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLHRoaXMpfXJldHVybiB0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlzLm5hbWUpfSx0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe2lmKCF0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7dCYmdC5yb3V0ZSYmKHQuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKHQuYXR0YWNoUmVmLHQucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKHQucm91dGUsdC5yZXNvbHZlcnx8bnVsbCkpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJpc0FjdGl2YXRlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjb21wb25lbnQiLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImFjdGl2YXRlZFJvdXRlIix7Z2V0OmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBFcnJvcigiT3V0bGV0IGlzIG5vdCBhY3RpdmF0ZWQiKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmF0ZWRSb3V0ZURhdGEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJPdXRsZXQgaXMgbm90IGFjdGl2YXRlZCIpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7dmFyIHQ9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0fSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2YXRlZD10LHRoaXMuX2FjdGl2YXRlZFJvdXRlPWUsdGhpcy5sb2NhdGlvbi5pbnNlcnQodC5ob3N0Vmlldyl9LHQucHJvdG90eXBlLmRlYWN0aXZhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2YXRlZCl7dmFyIHQ9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdCh0KX19LHQucHJvdG90eXBlLmFjdGl2YXRlV2l0aD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgYWN0aXZhdGUgYW4gYWxyZWFkeSBhY3RpdmF0ZWQgb3V0bGV0Iik7dGhpcy5fYWN0aXZhdGVkUm91dGU9dDt2YXIgbj0oZT1lfHx0aGlzLnJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0Ll9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZy5jb21wb25lbnQpLGk9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixyPW5ldyBKZSh0LGksdGhpcy5sb2NhdGlvbi5pbmplY3Rvcik7dGhpcy5hY3RpdmF0ZWQ9dGhpcy5sb2NhdGlvbi5jcmVhdGVDb21wb25lbnQobix0aGlzLmxvY2F0aW9uLmxlbmd0aCxyKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9LHR9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLnJvdXRlPXQsdGhpcy5jaGlsZENvbnRleHRzPWUsdGhpcy5wYXJlbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1vZT90aGlzLnJvdXRlOnQ9PT1YZT90aGlzLmNoaWxkQ29udGV4dHM6dGhpcy5wYXJlbnQuZ2V0KHQsZSl9LHR9KCksdG49ZnVuY3Rpb24oKXt9LGVuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUucHJlbG9hZD1mdW5jdGlvbih0LGUpe3JldHVybiBlKCkucGlwZShPYmplY3QoTi5hKShmdW5jdGlvbigpe3JldHVybiBPYmplY3Qocy5hKShudWxsKX0pKX0sdH0oKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCl9LHR9KCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscil7dGhpcy5yb3V0ZXI9dCx0aGlzLmluamVjdG9yPWksdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9cix0aGlzLmxvYWRlcj1uZXcgemUoZSxuLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgSihlKSl9LGZ1bmN0aW9uKGUpe3JldHVybiB0LnRyaWdnZXJFdmVudChuZXcgdHQoZSkpfSl9cmV0dXJuIHQucHJvdG90eXBlLnNldFVwUHJlbG9hZGluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoT2JqZWN0KGYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBHfSksT2JqZWN0KEUuYSkoZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmVsb2FkKCl9KSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7fSl9LHQucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmluamVjdG9yLmdldChyLnYpO3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModCx0aGlzLnJvdXRlci5jb25maWcpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLnByb2Nlc3NSb3V0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbixyLG89W107dHJ5e2Zvcih2YXIgcz1PYmplY3QoaS5lKShlKSx1PXMubmV4dCgpOyF1LmRvbmU7dT1zLm5leHQoKSl7dmFyIGM9dS52YWx1ZTtpZihjLmxvYWRDaGlsZHJlbiYmIWMuY2FuTG9hZCYmYy5fbG9hZGVkQ29uZmlnKXt2YXIgbD1jLl9sb2FkZWRDb25maWc7by5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhsLm1vZHVsZSxsLnJvdXRlcykpfWVsc2UgYy5sb2FkQ2hpbGRyZW4mJiFjLmNhbkxvYWQ/by5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh0LGMpKTpjLmNoaWxkcmVuJiZvLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKHQsYy5jaGlsZHJlbikpfX1jYXRjaCh0KXtuPXtlcnJvcjp0fX1maW5hbGx5e3RyeXt1JiYhdS5kb25lJiYocj1zLnJldHVybikmJnIuY2FsbChzKX1maW5hbGx5e2lmKG4pdGhyb3cgbi5lcnJvcn19cmV0dXJuIE9iamVjdChhLmEpKG8pLnBpcGUoT2JqZWN0KEQuYSkoKSxPYmplY3QoUy5hKShmdW5jdGlvbih0KXt9KSl9LHQucHJvdG90eXBlLnByZWxvYWRDb25maWc9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGUsZnVuY3Rpb24oKXtyZXR1cm4gbi5sb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoT2JqZWN0KHguYSkoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LG4ucHJvY2Vzc1JvdXRlcyh0Lm1vZHVsZSx0LnJvdXRlcyl9KSl9KX0sdH0oKSxvbj1uZXcgci5vKCJST1VURVJfQ09ORklHVVJBVElPTiIpLGFuPW5ldyByLm8oIlJPVVRFUl9GT1JST09UX0dVQVJEIiksc249W0IuZyx7cHJvdmlkZTpUdCx1c2VDbGFzczprdH0se3Byb3ZpZGU6R2UsdXNlRmFjdG9yeTpkbixkZXBzOltyLmcsVHQsWGUsQi5nLHIucCxyLnUsci5pLEZlLG9uLFtWZSxuZXcgci55XSxbRGUsbmV3IHIueV1dfSxYZSx7cHJvdmlkZTpvZSx1c2VGYWN0b3J5OnBuLGRlcHM6W0dlXX0se3Byb3ZpZGU6ci51LHVzZUNsYXNzOnIuSn0scm4sbm4sZW4se3Byb3ZpZGU6b24sdXNlVmFsdWU6e2VuYWJsZVRyYWNpbmc6ITF9fV07ZnVuY3Rpb24gdW4oKXtyZXR1cm4gbmV3IHIudygiUm91dGVyIixHZSl9dmFyIGNuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe31yZXR1cm4gdC5mb3JSb290PWZ1bmN0aW9uKGUsbil7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOltzbixobihlKSx7cHJvdmlkZTphbix1c2VGYWN0b3J5OmZuLGRlcHM6W1tHZSxuZXcgci55LG5ldyByLkldXX0se3Byb3ZpZGU6b24sdXNlVmFsdWU6bnx8e319LHtwcm92aWRlOkIuaCx1c2VGYWN0b3J5OmxuLGRlcHM6W0IucCxbbmV3IHIubihCLmEpLG5ldyByLnldLG9uXX0se3Byb3ZpZGU6dG4sdXNlRXhpc3Rpbmc6biYmbi5wcmVsb2FkaW5nU3RyYXRlZ3k/bi5wcmVsb2FkaW5nU3RyYXRlZ3k6bm59LHtwcm92aWRlOnIudyxtdWx0aTohMCx1c2VGYWN0b3J5OnVufSxbbW4se3Byb3ZpZGU6ci5kLG11bHRpOiEwLHVzZUZhY3Rvcnk6eW4sZGVwczpbbW5dfSx7cHJvdmlkZTpnbix1c2VGYWN0b3J5OnZuLGRlcHM6W21uXX0se3Byb3ZpZGU6ci5iLG11bHRpOiEwLHVzZUV4aXN0aW5nOmdufV1dfX0sdC5mb3JDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6dCxwcm92aWRlcnM6W2huKGUpXX19LHR9KCk7ZnVuY3Rpb24gbG4odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksbi51c2VIYXNoP25ldyBCLmUodCxlKTpuZXcgQi5vKHQsZSl9ZnVuY3Rpb24gZm4odCl7aWYodCl0aHJvdyBuZXcgRXJyb3IoIlJvdXRlck1vZHVsZS5mb3JSb290KCkgY2FsbGVkIHR3aWNlLiBMYXp5IGxvYWRlZCBtb2R1bGVzIHNob3VsZCB1c2UgUm91dGVyTW9kdWxlLmZvckNoaWxkKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gaG4odCl7cmV0dXJuW3twcm92aWRlOnIuYSxtdWx0aTohMCx1c2VWYWx1ZTp0fSx7cHJvdmlkZTpGZSxtdWx0aTohMCx1c2VWYWx1ZTp0fV19ZnVuY3Rpb24gZG4odCxlLG4saSxyLG8sYSxzLHUsYyxsKXt2b2lkIDA9PT11JiYodT17fSk7dmFyIGY9bmV3IEdlKG51bGwsZSxuLGkscixvLGEseXQocykpO2lmKGMmJihmLnVybEhhbmRsaW5nU3RyYXRlZ3k9YyksbCYmKGYucm91dGVSZXVzZVN0cmF0ZWd5PWwpLHUuZXJyb3JIYW5kbGVyJiYoZi5lcnJvckhhbmRsZXI9dS5lcnJvckhhbmRsZXIpLHUubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyJiYoZi5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXI9dS5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIpLHUuZW5hYmxlVHJhY2luZyl7dmFyIGg9T2JqZWN0KFUudCkoKTtmLmV2ZW50cy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aC5sb2dHcm91cCgiUm91dGVyIEV2ZW50OiAiK3QuY29uc3RydWN0b3IubmFtZSksaC5sb2codC50b1N0cmluZygpKSxoLmxvZyh0KSxoLmxvZ0dyb3VwRW5kKCl9KX1yZXR1cm4gdS5vblNhbWVVcmxOYXZpZ2F0aW9uJiYoZi5vblNhbWVVcmxOYXZpZ2F0aW9uPXUub25TYW1lVXJsTmF2aWdhdGlvbiksdS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5JiYoZi5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXUucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksZn1mdW5jdGlvbiBwbih0KXtyZXR1cm4gdC5yb3V0ZXJTdGF0ZS5yb290fXZhciBtbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5pbmplY3Rvcj10LHRoaXMuaW5pdE5hdmlnYXRpb249ITEsdGhpcy5yZXN1bHRPZlByZWFjdGl2YXRpb25Eb25lPW5ldyB1LmF9cmV0dXJuIHQucHJvdG90eXBlLmFwcEluaXRpYWxpemVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbmplY3Rvci5nZXQoQi5mLFByb21pc2UucmVzb2x2ZShudWxsKSkudGhlbihmdW5jdGlvbigpe3ZhciBlPW51bGwsbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0KXtyZXR1cm4gZT10fSksaT10LmluamVjdG9yLmdldChHZSkscj10LmluamVjdG9yLmdldChvbik7aWYodC5pc0xlZ2FjeURpc2FibGVkKHIpfHx0LmlzTGVnYWN5RW5hYmxlZChyKSllKCEwKTtlbHNlIGlmKCJkaXNhYmxlZCI9PT1yLmluaXRpYWxOYXZpZ2F0aW9uKWkuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksZSghMCk7ZWxzZXtpZigiZW5hYmxlZCIhPT1yLmluaXRpYWxOYXZpZ2F0aW9uKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbml0aWFsTmF2aWdhdGlvbiBvcHRpb25zOiAnIityLmluaXRpYWxOYXZpZ2F0aW9uKyInIik7aS5ob29rcy5hZnRlclByZWFjdGl2YXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5pbml0TmF2aWdhdGlvbj9PYmplY3Qocy5hKShudWxsKToodC5pbml0TmF2aWdhdGlvbj0hMCxlKCEwKSx0LnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUpfSxpLmluaXRpYWxOYXZpZ2F0aW9uKCl9cmV0dXJuIG59KX0sdC5wcm90b3R5cGUuYm9vdHN0cmFwTGlzdGVuZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmplY3Rvci5nZXQob24pLG49dGhpcy5pbmplY3Rvci5nZXQocm4pLGk9dGhpcy5pbmplY3Rvci5nZXQoR2UpLG89dGhpcy5pbmplY3Rvci5nZXQoci5nKTt0PT09by5jb21wb25lbnRzWzBdJiYodGhpcy5pc0xlZ2FjeUVuYWJsZWQoZSk/aS5pbml0aWFsTmF2aWdhdGlvbigpOnRoaXMuaXNMZWdhY3lEaXNhYmxlZChlKSYmaS5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSxuLnNldFVwUHJlbG9hZGluZygpLGkucmVzZXRSb290Q29tcG9uZW50VHlwZShvLmNvbXBvbmVudFR5cGVzWzBdKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUubmV4dChudWxsKSx0aGlzLnJlc3VsdE9mUHJlYWN0aXZhdGlvbkRvbmUuY29tcGxldGUoKSl9LHQucHJvdG90eXBlLmlzTGVnYWN5RW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4ibGVnYWN5X2VuYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufHx2b2lkIDA9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0LnByb3RvdHlwZS5pc0xlZ2FjeURpc2FibGVkPWZ1bmN0aW9uKHQpe3JldHVybiJsZWdhY3lfZGlzYWJsZWQiPT09dC5pbml0aWFsTmF2aWdhdGlvbnx8ITE9PT10LmluaXRpYWxOYXZpZ2F0aW9ufSx0fSgpO2Z1bmN0aW9uIHluKHQpe3JldHVybiB0LmFwcEluaXRpYWxpemVyLmJpbmQodCl9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIHQuYm9vdHN0cmFwTGlzdGVuZXIuYmluZCh0KX12YXIgZ249bmV3IHIubygiUm91dGVyIEluaXRpYWxpemVyIil9LFpZanQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwicSIsZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSxuLmQoZSwicyIsZnVuY3Rpb24oKXtyZXR1cm4ga30pLG4uZChlLCJyIixmdW5jdGlvbigpe3JldHVybiBjdH0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBidH0pLG4uZChlLCJqIixmdW5jdGlvbigpe3JldHVybiB2dH0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBBfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gbnR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gdXR9KSxuLmQoZSwidCIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKGUsImsiLGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIHN0fSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSxuLmQoZSwicCIsZnVuY3Rpb24oKXtyZXR1cm4gTX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIklwMFIiKSxvPW4oIkNjbkciKSxhPW51bGw7ZnVuY3Rpb24gcygpe3JldHVybiBhfXZhciB1LGM9e2NsYXNzOiJjbGFzc05hbWUiLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9LGw9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGY9e0E6IjEiLEI6IjIiLEM6IjMiLEQ6IjQiLEU6IjUiLEY6IjYiLEc6IjciLEg6IjgiLEk6IjkiLEo6IioiLEs6IisiLE06Ii0iLE46Ii4iLE86Ii8iLCJgIjoiMCIsIlx4OTAiOiJOdW1Mb2NrIn07by5RYS5Ob2RlJiYodT1vLlFhLk5vZGUucHJvdG90eXBlLmNvbnRhaW5zfHxmdW5jdGlvbih0KXtyZXR1cm4hISgxNiZ0aGlzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpKX0pO3ZhciBoLGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwYXJzZSBub3QgaW1wbGVtZW50ZWQiKX0sZS5tYWtlQ3VycmVudD1mdW5jdGlvbigpe3ZhciB0O3Q9bmV3IGUsYXx8KGE9dCl9LGUucHJvdG90eXBlLmhhc1Byb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW4gdH0sZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe3RbZV09bn0sZS5wcm90b3R5cGUuZ2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXX0sZS5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjsocj10KVtlXS5hcHBseShyLE9iamVjdChpLmQpKG4pKX0sZS5wcm90b3R5cGUubG9nRXJyb3I9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IodCk6Y29uc29sZS5sb2codCkpfSxlLnByb3RvdHlwZS5sb2c9ZnVuY3Rpb24odCl7d2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cD1mdW5jdGlvbih0KXt3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuZ3JvdXAmJndpbmRvdy5jb25zb2xlLmdyb3VwKHQpfSxlLnByb3RvdHlwZS5sb2dHcm91cEVuZD1mdW5jdGlvbigpe3dpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5ncm91cEVuZCYmd2luZG93LmNvbnNvbGUuZ3JvdXBFbmQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJhdHRyVG9Qcm9wTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5jYWxsKHQsZSl9LGUucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKGUpfSxlLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChlKX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlLG4pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpfSxlLnByb3RvdHlwZS5vbkFuZENhbmNlbD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITEpLGZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMSl9fSxlLnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKHQsZSl7dC5kaXNwYXRjaEV2ZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVNb3VzZUV2ZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUuY3JlYXRlRXZlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQodCwhMCwhMCksZX0sZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITF9LGUucHJvdG90eXBlLmlzUHJldmVudGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRlZmF1bHRQcmV2ZW50ZWR8fG51bGwhPXQucmV0dXJuVmFsdWUmJiF0LnJldHVyblZhbHVlfSxlLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MfSxlLnByb3RvdHlwZS5nZXRUZW1wbGF0ZUNvbnRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuImNvbnRlbnQiaW4gdCYmdGhpcy5pc1RlbXBsYXRlRWxlbWVudCh0KT90LmNvbnRlbnQ6bnVsbH0sZS5wcm90b3R5cGUuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dGVySFRNTH0sZS5wcm90b3R5cGUubm9kZU5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWV9LGUucHJvdG90eXBlLm5vZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVmFsdWV9LGUucHJvdG90eXBlLnR5cGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNQcm9wZXJ0eSh0LCJjb250ZW50Iik/dC5jb250ZW50OnR9LGUucHJvdG90eXBlLmZpcnN0Q2hpbGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZmlyc3RDaGlsZH0sZS5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuY2hpbGROb2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jaGlsZE5vZGVzfSxlLnByb3RvdHlwZS5jaGlsZE5vZGVzQXNMaXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNoaWxkTm9kZXMsbj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9MDtpPGUubGVuZ3RoO2krKyluW2ldPWVbaV07cmV0dXJuIG59LGUucHJvdG90eXBlLmNsZWFyTm9kZXM9ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZENoaWxkKGUpfSxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZD1mdW5jdGlvbih0LGUsbil7dC5yZXBsYWNlQ2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0fSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24odCxlLG4pe3QuaW5zZXJ0QmVmb3JlKG4sZSl9LGUucHJvdG90eXBlLmluc2VydEFsbEJlZm9yZT1mdW5jdGlvbih0LGUsbil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0Lmluc2VydEJlZm9yZShuLGUpfSl9LGUucHJvdG90eXBlLmluc2VydEFmdGVyPWZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShuLGUubmV4dFNpYmxpbmcpfSxlLnByb3RvdHlwZS5zZXRJbm5lckhUTUw9ZnVuY3Rpb24odCxlKXt0LmlubmVySFRNTD1lfSxlLnByb3RvdHlwZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHRDb250ZW50fSxlLnByb3RvdHlwZS5zZXRUZXh0PWZ1bmN0aW9uKHQsZSl7dC50ZXh0Q29udGVudD1lfSxlLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24odCxlKXt0LnZhbHVlPWV9LGUucHJvdG90eXBlLmdldENoZWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2hlY2tlZH0sZS5wcm90b3R5cGUuc2V0Q2hlY2tlZD1mdW5jdGlvbih0LGUpe3QuY2hlY2tlZD1lfSxlLnByb3RvdHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldERlZmF1bHREb2N1bWVudCgpLmNyZWF0ZUNvbW1lbnQodCl9LGUucHJvdG90eXBlLmNyZWF0ZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZS5pbm5lckhUTUw9dCxlfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8dGhpcy5nZXREZWZhdWx0RG9jdW1lbnQoKSkuY3JlYXRlRWxlbWVudCh0KX0sZS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudE5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50TlModCxlKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVUZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY3JlYXRlU2NyaXB0VGFnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0obj1ufHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJTQ1JJUFQiKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUodCxlKSxpfSxlLnByb3RvdHlwZS5jcmVhdGVTdHlsZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4sdGhpcy5jcmVhdGVUZXh0Tm9kZSh0LGUpKSxufSxlLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290PWZ1bmN0aW9uKHQpe3JldHVybiB0LmNyZWF0ZVNoYWRvd1Jvb3QoKX0sZS5wcm90b3R5cGUuZ2V0U2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zaGFkb3dSb290fSxlLnByb3RvdHlwZS5nZXRIb3N0PWZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvc3R9LGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb25lTm9kZSghMCl9LGUucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxlLnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfSxlLnByb3RvdHlwZS5jbGFzc0xpc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuY2xhc3NMaXN0LDApfSxlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbih0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LGUucHJvdG90eXBlLmhhc0NsYXNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY2xhc3NMaXN0LmNvbnRhaW5zKGUpfSxlLnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbil7dC5zdHlsZVtlXT1ufSxlLnByb3RvdHlwZS5yZW1vdmVTdHlsZT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbZV09IiJ9LGUucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc3R5bGVbZV19LGUucHJvdG90eXBlLmhhc1N0eWxlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLmdldFN0eWxlKHQsZSl8fCIiO3JldHVybiBuP2k9PW46aS5sZW5ndGg+MH0sZS5wcm90b3R5cGUudGFnTmFtZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVNYXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBNYXAsbj10LmF0dHJpYnV0ZXMsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcj1uLml0ZW0oaSk7ZS5zZXQoci5uYW1lLHIudmFsdWUpfXJldHVybiBlfSxlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmhhc0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5oYXNBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSl9LGUucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGVOUyhlLG4pfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe3Quc2V0QXR0cmlidXRlKGUsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxuLGkpe3Quc2V0QXR0cmlidXRlTlMoZSxuLGkpfSxlLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXt0LnJlbW92ZUF0dHJpYnV0ZShlKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24odCxlLG4pe3QucmVtb3ZlQXR0cmlidXRlTlMoZSxuKX0sZS5wcm90b3R5cGUudGVtcGxhdGVBd2FyZVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNUZW1wbGF0ZUVsZW1lbnQodCk/dGhpcy5jb250ZW50KHQpOnR9LGUucHJvdG90eXBlLmNyZWF0ZUh0bWxEb2N1bWVudD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0RG9jdW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnR9LGUucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2godCl7cmV0dXJue3RvcDowLGJvdHRvbTowLGxlZnQ6MCxyaWdodDowLHdpZHRoOjAsaGVpZ2h0OjB9fX0sZS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGl0bGV9LGUucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKHQsZSl7dC50aXRsZT1lfHwiIn0sZS5wcm90b3R5cGUuZWxlbWVudE1hdGNoZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXRoaXMuaXNFbGVtZW50Tm9kZSh0KSYmKHQubWF0Y2hlcyYmdC5tYXRjaGVzKGUpfHx0Lm1zTWF0Y2hlc1NlbGVjdG9yJiZ0Lm1zTWF0Y2hlc1NlbGVjdG9yKGUpfHx0LndlYmtpdE1hdGNoZXNTZWxlY3RvciYmdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IoZSkpfSxlLnByb3RvdHlwZS5pc1RlbXBsYXRlRWxlbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0VsZW1lbnROb2RlKHQpJiYiVEVNUExBVEUiPT09dC5ub2RlTmFtZX0sZS5wcm90b3R5cGUuaXNUZXh0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFfSxlLnByb3RvdHlwZS5pc0NvbW1lbnROb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5DT01NRU5UX05PREV9LGUucHJvdG90eXBlLmlzRWxlbWVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0sZS5wcm90b3R5cGUuaGFzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dC5zaGFkb3dSb290JiZ0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LGUucHJvdG90eXBlLmlzU2hhZG93Um9vdD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnR9LGUucHJvdG90eXBlLmltcG9ydEludG9Eb2M9ZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmltcG9ydE5vZGUodGhpcy50ZW1wbGF0ZUF3YXJlUm9vdCh0KSwhMCl9LGUucHJvdG90eXBlLmFkb3B0Tm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYWRvcHROb2RlKHQpfSxlLnByb3RvdHlwZS5nZXRIcmVmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSxlLnByb3RvdHlwZS5nZXRFdmVudEtleT1mdW5jdGlvbih0KXt2YXIgZT10LmtleTtpZihudWxsPT1lKXtpZihudWxsPT0oZT10LmtleUlkZW50aWZpZXIpKXJldHVybiJVbmlkZW50aWZpZWQiO2Uuc3RhcnRzV2l0aCgiVSsiKSYmKGU9U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLnN1YnN0cmluZygyKSwxNikpLDM9PT10LmxvY2F0aW9uJiZmLmhhc093blByb3BlcnR5KGUpJiYoZT1mW2VdKSl9cmV0dXJuIGxbZV18fGV9LGUucHJvdG90eXBlLmdldEdsb2JhbEV2ZW50VGFyZ2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9LGUucHJvdG90eXBlLmdldEhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93Lmhpc3Rvcnl9LGUucHJvdG90eXBlLmdldExvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbn0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWY9ZnVuY3Rpb24odCl7dmFyIGUsbj1wfHwocD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3AuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbDtyZXR1cm4gbnVsbD09bj9udWxsOihlPW4saHx8KGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSxoLnNldEF0dHJpYnV0ZSgiaHJlZiIsZSksIi8iPT09aC5wYXRobmFtZS5jaGFyQXQoMCk/aC5wYXRobmFtZToiLyIraC5wYXRobmFtZSl9LGUucHJvdG90eXBlLnJlc2V0QmFzZUVsZW1lbnQ9ZnVuY3Rpb24oKXtwPW51bGx9LGUucHJvdG90eXBlLmdldFVzZXJBZ2VudD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH0sZS5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbih0LGUsbil7dGhpcy5zZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2Usbil9LGUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUodCwiZGF0YS0iK2UpfSxlLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBnZXRDb21wdXRlZFN0eWxlKHQpfSxlLnByb3RvdHlwZS5zdXBwb3J0c1dlYkFuaW1hdGlvbj1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlfSxlLnByb3RvdHlwZS5wZXJmb3JtYW5jZU5vdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdygpOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxlLnByb3RvdHlwZS5zdXBwb3J0c0Nvb2tpZXM9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuZ2V0Q29va2llPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qoci51KShkb2N1bWVudC5jb29raWUsdCl9LGUucHJvdG90eXBlLnNldENvb2tpZT1mdW5jdGlvbih0LGUpe2RvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQodCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKX0sZX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXQuY2FsbCh0aGlzKXx8dGhpcztlLl9hbmltYXRpb25QcmVmaXg9bnVsbCxlLl90cmFuc2l0aW9uRW5kPW51bGw7dHJ5e3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiZGl2Iixkb2N1bWVudCk7aWYobnVsbCE9ZS5nZXRTdHlsZShuLCJhbmltYXRpb25OYW1lIikpZS5fYW5pbWF0aW9uUHJlZml4PSIiO2Vsc2UgZm9yKHZhciBpPVsiV2Via2l0IiwiTW96IiwiTyIsIm1zIl0scj0wO3I8aS5sZW5ndGg7cisrKWlmKG51bGwhPWUuZ2V0U3R5bGUobixpW3JdKyJBbmltYXRpb25OYW1lIikpe2UuX2FuaW1hdGlvblByZWZpeD0iLSIraVtyXS50b0xvd2VyQ2FzZSgpKyItIjticmVha312YXIgbz17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07T2JqZWN0LmtleXMobykuZm9yRWFjaChmdW5jdGlvbih0KXtudWxsIT1lLmdldFN0eWxlKG4sdCkmJihlLl90cmFuc2l0aW9uRW5kPW9bdF0pfSl9Y2F0Y2godCl7ZS5fYW5pbWF0aW9uUHJlZml4PW51bGwsZS5fdHJhbnNpdGlvbkVuZD1udWxsfXJldHVybiBlfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGlzdHJpYnV0ZWROb2RlcygpfSxlLnByb3RvdHlwZS5yZXNvbHZlQW5kU2V0SHJlZj1mdW5jdGlvbih0LGUsbil7dC5ocmVmPW51bGw9PW4/ZTplKyIvLi4vIitufSxlLnByb3RvdHlwZS5zdXBwb3J0c0RPTUV2ZW50cz1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5zdXBwb3J0c05hdGl2ZVNoYWRvd0RPTT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3R9LGUucHJvdG90eXBlLmdldEFuaW1hdGlvblByZWZpeD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRpb25QcmVmaXg/dGhpcy5fYW5pbWF0aW9uUHJlZml4OiIifSxlLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmQ/dGhpcy5fdHJhbnNpdGlvbkVuZDoiIn0sZS5wcm90b3R5cGUuc3VwcG9ydHNBbmltYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5fYW5pbWF0aW9uUHJlZml4JiZudWxsIT10aGlzLl90cmFuc2l0aW9uRW5kfSxlfShmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLnJlc291cmNlTG9hZGVyVHlwZT1udWxsfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImF0dHJUb1Byb3BNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0clRvUHJvcE1hcH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2F0dHJUb1Byb3BNYXA9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpKSkscD1udWxsLG09ci5kO2Z1bmN0aW9uIHkoKXtyZXR1cm4hIXdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZX12YXIgdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faW5pdCgpLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt0aGlzLmxvY2F0aW9uPXMoKS5nZXRMb2NhdGlvbigpLHRoaXMuX2hpc3Rvcnk9cygpLmdldEhpc3RvcnkoKX0sZS5wcm90b3R5cGUuZ2V0QmFzZUhyZWZGcm9tRE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfSxlLnByb3RvdHlwZS5vblBvcFN0YXRlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIix0LCExKX0sZS5wcm90b3R5cGUub25IYXNoQ2hhbmdlPWZ1bmN0aW9uKHQpe3MoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLHQsITEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsInBhdGhuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aG5hbWV9LHNldDpmdW5jdGlvbih0KXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJzZWFyY2giLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJoYXNoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5wdXNoU3RhdGU9ZnVuY3Rpb24odCxlLG4pe3koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZSh0LGUsbik6dGhpcy5sb2NhdGlvbi5oYXNoPW59LGUucHJvdG90eXBlLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbih0LGUsbil7eSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKHQsZSxuKTp0aGlzLmxvY2F0aW9uLmhhc2g9bn0sZS5wcm90b3R5cGUuZm9yd2FyZD1mdW5jdGlvbigpe3RoaXMuX2hpc3RvcnkuZm9yd2FyZCgpfSxlLnByb3RvdHlwZS5iYWNrPWZ1bmN0aW9uKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9LGUuY3RvclBhcmFtZXRlcnM9ZnVuY3Rpb24oKXtyZXR1cm5be3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOm8ubixhcmdzOlttXX1dfV19LGV9KHIucCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXQsdGhpcy5fZG9tPXMoKX1yZXR1cm4gdC5wcm90b3R5cGUuYWRkVGFnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSx0P3RoaXMuX2dldE9yQ3JlYXRlRWxlbWVudCh0LGUpOm51bGx9LHQucHJvdG90eXBlLmFkZFRhZ3M9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiB2b2lkIDA9PT1lJiYoZT0hMSksdD90LnJlZHVjZShmdW5jdGlvbih0LGkpe3JldHVybiBpJiZ0LnB1c2gobi5fZ2V0T3JDcmVhdGVFbGVtZW50KGksZSkpLHR9LFtdKTpbXX0sdC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9kb20ucXVlcnlTZWxlY3Rvcih0aGlzLl9kb2MsIm1ldGFbIit0KyJdIil8fG51bGx9LHQucHJvdG90eXBlLmdldFRhZ3M9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuW107dmFyIGU9dGhpcy5fZG9tLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fZG9jLCJtZXRhWyIrdCsiXSIpO3JldHVybiBlP1tdLnNsaWNlLmNhbGwoZSk6W119LHQucHJvdG90eXBlLnVwZGF0ZVRhZz1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBudWxsO2U9ZXx8dGhpcy5fcGFyc2VTZWxlY3Rvcih0KTt2YXIgbj10aGlzLmdldFRhZyhlKTtyZXR1cm4gbj90aGlzLl9zZXRNZXRhRWxlbWVudEF0dHJpYnV0ZXModCxuKTp0aGlzLl9nZXRPckNyZWF0ZUVsZW1lbnQodCwhMCl9LHQucHJvdG90eXBlLnJlbW92ZVRhZz1mdW5jdGlvbih0KXt0aGlzLnJlbW92ZVRhZ0VsZW1lbnQodGhpcy5nZXRUYWcodCkpfSx0LnByb3RvdHlwZS5yZW1vdmVUYWdFbGVtZW50PWZ1bmN0aW9uKHQpe3QmJnRoaXMuX2RvbS5yZW1vdmUodCl9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lJiYoZT0hMSksIWUpe3ZhciBuPXRoaXMuX3BhcnNlU2VsZWN0b3IodCksaT10aGlzLmdldFRhZyhuKTtpZihpJiZ0aGlzLl9jb250YWluc0F0dHJpYnV0ZXModCxpKSlyZXR1cm4gaX12YXIgcj10aGlzLl9kb20uY3JlYXRlRWxlbWVudCgibWV0YSIpO3RoaXMuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcyh0LHIpO3ZhciBvPXRoaXMuX2RvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0aGlzLl9kb2MsImhlYWQiKVswXTtyZXR1cm4gdGhpcy5fZG9tLmFwcGVuZENoaWxkKG8scikscn0sdC5wcm90b3R5cGUuX3NldE1ldGFFbGVtZW50QXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2RvbS5zZXRBdHRyaWJ1dGUoZSxpLHRbaV0pfSksZX0sdC5wcm90b3R5cGUuX3BhcnNlU2VsZWN0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lPyJuYW1lIjoicHJvcGVydHkiO3JldHVybiBlKyc9IicrdFtlXSsnIid9LHQucHJvdG90eXBlLl9jb250YWluc0F0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3JldHVybiBPYmplY3Qua2V5cyh0KS5ldmVyeShmdW5jdGlvbihpKXtyZXR1cm4gbi5fZG9tLmdldEF0dHJpYnV0ZShlLGkpPT09dFtpXX0pfSx0fSgpLGI9bmV3IG8ubygiVFJBTlNJVElPTl9JRCIpLF89W3twcm92aWRlOm8uZCx1c2VGYWN0b3J5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXtuLmdldChvLmUpLmRvbmVQcm9taXNlLnRoZW4oZnVuY3Rpb24oKXt2YXIgbj1zKCk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4ucXVlcnlTZWxlY3RvckFsbChlLCJzdHlsZVtuZy10cmFuc2l0aW9uXSIpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZ2V0QXR0cmlidXRlKGUsIm5nLXRyYW5zaXRpb24iKT09PXR9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnJlbW92ZSh0KX0pfSl9fSxkZXBzOltiLG0sby5wXSxtdWx0aTohMH1dLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LmluaXQ9ZnVuY3Rpb24oKXtPYmplY3Qoby5aKShuZXcgdCl9LHQucHJvdG90eXBlLmFkZFRvV2luZG93PWZ1bmN0aW9uKHQpe28uUWEuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PWZ1bmN0aW9uKGUsbil7dm9pZCAwPT09biYmKG49ITApO3ZhciBpPXQuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGUsbik7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHRlc3RhYmlsaXR5IGZvciBlbGVtZW50LiIpO3JldHVybiBpfSxvLlFhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZ2V0QWxsVGVzdGFiaWxpdGllcygpfSxvLlFhLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5nZXRBbGxSb290RWxlbWVudHMoKX0sby5RYS5mcmFtZXdvcmtTdGFiaWxpemVyc3x8KG8uUWEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLG8uUWEuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChmdW5jdGlvbih0KXt2YXIgZT1vLlFhLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbj1lLmxlbmd0aCxpPSExLHI9ZnVuY3Rpb24oZSl7aT1pfHxlLDA9PS0tbiYmdChpKX07ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2hlblN0YWJsZShyKX0pfSl9LHQucHJvdG90eXBlLmZpbmRUZXN0YWJpbGl0eUluVHJlZT1mdW5jdGlvbih0LGUsbil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDt2YXIgaT10LmdldFRlc3RhYmlsaXR5KGUpO3JldHVybiBudWxsIT1pP2k6bj9zKCkuaXNTaGFkb3dSb290KGUpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLmdldEhvc3QoZSksITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQscygpLnBhcmVudEVsZW1lbnQoZSksITApOm51bGx9LHR9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jPXR9cmV0dXJuIHQucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHMoKS5nZXRUaXRsZSh0aGlzLl9kb2MpfSx0LnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbih0KXtzKCkuc2V0VGl0bGUodGhpcy5fZG9jLHQpfSx0fSgpO2Z1bmN0aW9uIFModCxlKXsidW5kZWZpbmVkIiE9dHlwZW9mIENPTVBJTEVEJiZDT01QSUxFRHx8KChvLlFhLm5nPW8uUWEubmd8fHt9KVt0XT1lKX12YXIgRT17QXBwbGljYXRpb25SZWY6by5nLE5nWm9uZTpvLnh9LEM9InByb2JlIixPPSJjb3JlVG9rZW5zIjtmdW5jdGlvbiBUKHQpe3JldHVybiBPYmplY3Qoby5WKSh0KX1mdW5jdGlvbiBrKHQpe3JldHVybiBTKEMsVCksUyhPLE9iamVjdChpLmEpKHt9LEUsKHR8fFtdKS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlLm5hbWVdPWUudG9rZW4sdH0se30pKSksZnVuY3Rpb24oKXtyZXR1cm4gVH19dmFyIEE9bmV3IG8ubygiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl96b25lPWUsdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCx0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQubWFuYWdlcj1ufSksdGhpcy5fcGx1Z2lucz10LnNsaWNlKCkucmV2ZXJzZSgpfXJldHVybiB0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihlKS5hZGRFdmVudExpc3RlbmVyKHQsZSxuKX0sdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZSkuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsbil9LHQucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sdC5wcm90b3R5cGUuX2ZpbmRQbHVnaW5Gb3I9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KHQpO2lmKGUpcmV0dXJuIGU7Zm9yKHZhciBuPXRoaXMuX3BsdWdpbnMsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcj1uW2ldO2lmKHIuc3VwcG9ydHModCkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldCh0LHIpLHJ9dGhyb3cgbmV3IEVycm9yKCJObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgIit0KX0sdH0oKSxqPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9kb2M9dH1yZXR1cm4gdC5wcm90b3R5cGUuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9cygpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYyx0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAiK2krIiBmb3IgZXZlbnQgIitlKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKGksZSxuKX0sdH0oKSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fXJldHVybiB0LnByb3RvdHlwZS5hZGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPW5ldyBTZXQ7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuX3N0eWxlc1NldC5oYXModCl8fChlLl9zdHlsZXNTZXQuYWRkKHQpLG4uYWRkKHQpKX0pLHRoaXMub25TdHlsZXNBZGRlZChuKX0sdC5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt9LHQucHJvdG90eXBlLmdldEFsbFN0eWxlcz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9LHR9KCksUD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3ZhciBuPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZG9jPWUsbi5faG9zdE5vZGVzPW5ldyBTZXQsbi5fc3R5bGVOb2Rlcz1uZXcgU2V0LG4uX2hvc3ROb2Rlcy5hZGQoZS5oZWFkKSxufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLl9hZGRTdHlsZXNUb0hvc3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaT1uLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnRleHRDb250ZW50PXQsbi5fc3R5bGVOb2Rlcy5hZGQoZS5hcHBlbmRDaGlsZChpKSl9KX0sZS5wcm90b3R5cGUuYWRkSG9zdD1mdW5jdGlvbih0KXt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LHQpLHRoaXMuX2hvc3ROb2Rlcy5hZGQodCl9LGUucHJvdG90eXBlLnJlbW92ZUhvc3Q9ZnVuY3Rpb24odCl7dGhpcy5faG9zdE5vZGVzLmRlbGV0ZSh0KX0sZS5wcm90b3R5cGUub25TdHlsZXNBZGRlZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9hZGRTdHlsZXNUb0hvc3QodCxuKX0pfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0eWxlTm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gcygpLnJlbW92ZSh0KX0pfSxlfShNKSxOPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxSPS8lQ09NUCUvZyxEPSJfbmdob3N0LSVDT01QJSIsTD0iX25nY29udGVudC0lQ09NUCUiO2Z1bmN0aW9uIEYodCxlLG4pe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgcj1lW2ldO0FycmF5LmlzQXJyYXkocik/Rih0LHIsbik6KHI9ci5yZXBsYWNlKFIsdCksbi5wdXNoKHIpKX1yZXR1cm4gbn1mdW5jdGlvbiB6KHQpe3JldHVybiBmdW5jdGlvbihlKXshMT09PXQoZSkmJihlLnByZXZlbnREZWZhdWx0KCksZS5yZXR1cm5WYWx1ZT0hMSl9fXZhciBWPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuZXZlbnRNYW5hZ2VyPXQsdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IEIodCl9cmV0dXJuIHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmVyPWZ1bmN0aW9uKHQsZSl7aWYoIXR8fCFlKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goZS5lbmNhcHN1bGF0aW9uKXtjYXNlIG8uUC5FbXVsYXRlZDp2YXIgbj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGUuaWQpO3JldHVybiBufHwobj1uZXcgRyh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChlLmlkLG4pKSxuLmFwcGx5VG9Ib3N0KHQpLG47Y2FzZSBvLlAuTmF0aXZlOmNhc2Ugby5QLlNoYWRvd0RvbTpyZXR1cm4gbmV3IFcodGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LHQsZSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhlLmlkKSl7dmFyIGk9RihlLmlkLGUuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKGkpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoZS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX0sdC5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sdH0oKSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5bZV0sdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0sdC5wcm90b3R5cGUuY3JlYXRlVGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0JiZ0Lmluc2VydEJlZm9yZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3QmJnQucmVtb3ZlQ2hpbGQoZSl9LHQucHJvdG90eXBlLnNlbGVjdFJvb3RFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdUaGUgc2VsZWN0b3IgIicrdCsnIiBkaWQgbm90IG1hdGNoIGFueSBlbGVtZW50cycpO3JldHVybiBlLnRleHRDb250ZW50PSIiLGV9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQubmV4dFNpYmxpbmd9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixpKXtpZihpKXtlPWkrIjoiK2U7dmFyIHI9TltpXTtyP3Quc2V0QXR0cmlidXRlTlMocixlLG4pOnQuc2V0QXR0cmlidXRlKGUsbil9ZWxzZSB0LnNldEF0dHJpYnV0ZShlLG4pfSx0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlLG4pe2lmKG4pe3ZhciBpPU5bbl07aT90LnJlbW92ZUF0dHJpYnV0ZU5TKGksZSk6dC5yZW1vdmVBdHRyaWJ1dGUobisiOiIrZSl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX0sdC5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdC5hZGQoZSl9LHQucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfSx0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbih0LGUsbixpKXtpJm8uRS5EYXNoQ2FzZT90LnN0eWxlLnNldFByb3BlcnR5KGUsbixpJm8uRS5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09bn0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe24mby5FLkRhc2hDYXNlP3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dC5zdHlsZVtlXT0iIn0sdC5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4pe0goZSwicHJvcGVydHkiKSx0W2VdPW59LHQucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dC5ub2RlVmFsdWU9ZX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gSChlLCJsaXN0ZW5lciIpLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLmV2ZW50TWFuYWdlci5hZGRHbG9iYWxFdmVudExpc3RlbmVyKHQsZSx6KG4pKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSx6KG4pKX0sdH0oKSxVPSJAIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIEgodCxlKXtpZih0LmNoYXJDb2RlQXQoMCk9PT1VKXRocm93IG5ldyBFcnJvcigiRm91bmQgdGhlIHN5bnRoZXRpYyAiK2UrIiAiK3QrJy4gUGxlYXNlIGluY2x1ZGUgZWl0aGVyICJCcm93c2VyQW5pbWF0aW9uc01vZHVsZSIgb3IgIk5vb3BBbmltYXRpb25zTW9kdWxlIiBpbiB5b3VyIGFwcGxpY2F0aW9uLicpfXZhciBxLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7ci5jb21wb25lbnQ9aTt2YXIgbz1GKGkuaWQsaS5zdHlsZXMsW10pO3JldHVybiBuLmFkZFN0eWxlcyhvKSxyLmNvbnRlbnRBdHRyPUwucmVwbGFjZShSLGkuaWQpLHIuaG9zdEF0dHI9RC5yZXBsYWNlKFIsaS5pZCkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5hcHBseVRvSG9zdD1mdW5jdGlvbihlKXt0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLGUsdGhpcy5ob3N0QXR0ciwiIil9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSxuKXt2YXIgaT10LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50LmNhbGwodGhpcyxlLG4pO3JldHVybiB0LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLGksdGhpcy5jb250ZW50QXR0ciwiIiksaX0sZX0oQiksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBhPXQuY2FsbCh0aGlzLGUpfHx0aGlzO2Euc2hhcmVkU3R5bGVzSG9zdD1uLGEuaG9zdEVsPWksYS5jb21wb25lbnQ9cixhLnNoYWRvd1Jvb3Q9ci5lbmNhcHN1bGF0aW9uPT09by5QLlNoYWRvd0RvbT9pLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KTppLmNyZWF0ZVNoYWRvd1Jvb3QoKSxhLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdChhLnNoYWRvd1Jvb3QpO2Zvcih2YXIgcz1GKHIuaWQsci5zdHlsZXMsW10pLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtjLnRleHRDb250ZW50PXNbdV0sYS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGMpfXJldHVybiBhfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLm5vZGVPclNoYWRvd1Jvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT10aGlzLmhvc3RFbD90aGlzLnNoYWRvd1Jvb3Q6dH0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9LGUucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLmFwcGVuZENoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLmluc2VydEJlZm9yZT1mdW5jdGlvbihlLG4saSl7cmV0dXJuIHQucHJvdG90eXBlLmluc2VydEJlZm9yZS5jYWxsKHRoaXMsdGhpcy5ub2RlT3JTaGFkb3dSb290KGUpLG4saSl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSksbil9LGUucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdCh0LnByb3RvdHlwZS5wYXJlbnROb2RlLmNhbGwodGhpcyx0aGlzLm5vZGVPclNoYWRvd1Jvb3QoZSkpKX0sZX0oQiksWT0idW5kZWZpbmVkIiE9dHlwZW9mIFpvbmUmJlpvbmUuX19zeW1ib2xfX3x8ZnVuY3Rpb24odCl7cmV0dXJuIl9fem9uZV9zeW1ib2xfXyIrdH0sUT1ZKCJhZGRFdmVudExpc3RlbmVyIiksWj1ZKCJyZW1vdmVFdmVudExpc3RlbmVyIiksSz17fSxYPSJfX3pvbmVfc3ltYm9sX19wcm9wYWdhdGlvblN0b3BwZWQiOyJ1bmRlZmluZWQiIT10eXBlb2YgWm9uZSYmWm9uZVtZKCJCTEFDS19MSVNURURfRVZFTlRTIildJiYocT17fSk7dmFyICQ9ZnVuY3Rpb24odCl7cmV0dXJuISFxJiZxLmhhc093blByb3BlcnR5KHQpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPUtbdC50eXBlXTtpZihlKXt2YXIgbj10aGlzW2VdO2lmKG4pe3ZhciBpPVt0XTtpZigxPT09bi5sZW5ndGgpcmV0dXJuKGE9blswXSkuem9uZSE9PVpvbmUuY3VycmVudD9hLnpvbmUucnVuKGEuaGFuZGxlcix0aGlzLGkpOmEuaGFuZGxlci5hcHBseSh0aGlzLGkpO2Zvcih2YXIgcj1uLnNsaWNlKCksbz0wO288ci5sZW5ndGgmJiEwIT09dFtYXTtvKyspe3ZhciBhOyhhPXJbb10pLnpvbmUhPT1ab25lLmN1cnJlbnQ/YS56b25lLnJ1bihhLmhhbmRsZXIsdGhpcyxpKTphLmhhbmRsZXIuYXBwbHkodGhpcyxpKX19fX0sdHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7dmFyIG89dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG8ubmdab25lPW4saSYmT2JqZWN0KHIucikoaSl8fG8ucGF0Y2hFdmVudCgpLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUucGF0Y2hFdmVudD1mdW5jdGlvbigpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRXZlbnQmJkV2ZW50JiZFdmVudC5wcm90b3R5cGUmJiFFdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKXt2YXIgdD1FdmVudC5wcm90b3R5cGUuX196b25lX3N5bWJvbF9fc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPUV2ZW50LnByb3RvdHlwZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3RoaXMmJih0aGlzW1hdPSEwKSx0JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUsbil7dmFyIGk9dGhpcyxyPW47aWYoIXRbUV18fG8ueC5pc0luQW5ndWxhclpvbmUoKSYmISQoZSkpdC5hZGRFdmVudExpc3RlbmVyKGUsciwhMSk7ZWxzZXt2YXIgYT1LW2VdO2F8fChhPUtbZV09WSgiQU5HVUxBUiIrZSsiRkFMU0UiKSk7dmFyIHM9dFthXSx1PXMmJnMubGVuZ3RoPjA7c3x8KHM9dFthXT1bXSk7dmFyIGM9JChlKT9ab25lLnJvb3Q6Wm9uZS5jdXJyZW50O2lmKDA9PT1zLmxlbmd0aClzLnB1c2goe3pvbmU6YyxoYW5kbGVyOnJ9KTtlbHNle2Zvcih2YXIgbD0hMSxmPTA7ZjxzLmxlbmd0aDtmKyspaWYoc1tmXS5oYW5kbGVyPT09cil7bD0hMDticmVha31sfHxzLnB1c2goe3pvbmU6YyxoYW5kbGVyOnJ9KX11fHx0W1FdKGUsSiwhMSl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUscil9fSxlLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10W1pdO2lmKCFpKXJldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSk7dmFyIHI9S1tlXSxvPXImJnRbcl07aWYoIW8pcmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lci5hcHBseSh0LFtlLG4sITFdKTtmb3IodmFyIGE9ITEscz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uaGFuZGxlcj09PW4pe2E9ITAsby5zcGxpY2UocywxKTticmVha31hPzA9PT1vLmxlbmd0aCYmaS5hcHBseSh0LFtlLEosITFdKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYXBwbHkodCxbZSxuLCExXSl9LGV9KGopLGV0PXtwYW46ITAscGFuc3RhcnQ6ITAscGFubW92ZTohMCxwYW5lbmQ6ITAscGFuY2FuY2VsOiEwLHBhbmxlZnQ6ITAscGFucmlnaHQ6ITAscGFudXA6ITAscGFuZG93bjohMCxwaW5jaDohMCxwaW5jaHN0YXJ0OiEwLHBpbmNobW92ZTohMCxwaW5jaGVuZDohMCxwaW5jaGNhbmNlbDohMCxwaW5jaGluOiEwLHBpbmNob3V0OiEwLHByZXNzOiEwLHByZXNzdXA6ITAscm90YXRlOiEwLHJvdGF0ZXN0YXJ0OiEwLHJvdGF0ZW1vdmU6ITAscm90YXRlZW5kOiEwLHJvdGF0ZWNhbmNlbDohMCxzd2lwZTohMCxzd2lwZWxlZnQ6ITAsc3dpcGVyaWdodDohMCxzd2lwZXVwOiEwLHN3aXBlZG93bjohMCx0YXA6ITB9LG50PW5ldyBvLm8oIkhhbW1lckdlc3R1cmVDb25maWciKSxpdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLmV2ZW50cz1bXSx0aGlzLm92ZXJyaWRlcz17fX1yZXR1cm4gdC5wcm90b3R5cGUuYnVpbGRIYW1tZXI9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEhhbW1lcih0LHRoaXMub3B0aW9ucyk7Zm9yKHZhciBuIGluIGUuZ2V0KCJwaW5jaCIpLnNldCh7ZW5hYmxlOiEwfSksZS5nZXQoInJvdGF0ZSIpLnNldCh7ZW5hYmxlOiEwfSksdGhpcy5vdmVycmlkZXMpZS5nZXQobikuc2V0KHRoaXMub3ZlcnJpZGVzW25dKTtyZXR1cm4gZX0sdH0oKSxydD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpKXt2YXIgcj10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gci5fY29uZmlnPW4sci5jb25zb2xlPWkscn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFldC5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpJiYhdGhpcy5pc0N1c3RvbUV2ZW50KHQpfHwhd2luZG93LkhhbW1lciYmKHRoaXMuY29uc29sZS53YXJuKCJIYW1tZXIuanMgaXMgbm90IGxvYWRlZCwgY2FuIG5vdCBiaW5kICciK3QrIicgZXZlbnQuIiksMSkpfSxlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLHI9dGhpcy5tYW5hZ2VyLmdldFpvbmUoKTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksci5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3ZhciBvPWkuX2NvbmZpZy5idWlsZEhhbW1lcih0KSxhPWZ1bmN0aW9uKHQpe3IucnVuR3VhcmRlZChmdW5jdGlvbigpe24odCl9KX07cmV0dXJuIG8ub24oZSxhKSxmdW5jdGlvbigpe3JldHVybiBvLm9mZihlLGEpfX0pfSxlLnByb3RvdHlwZS5pc0N1c3RvbUV2ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb25maWcuZXZlbnRzLmluZGV4T2YodCk+LTF9LGV9KGopLG90PVsiYWx0IiwiY29udHJvbCIsIm1ldGEiLCJzaGlmdCJdLGF0PXthbHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5fSxjb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmN0cmxLZXl9LG1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWV0YUtleX0sc2hpZnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2hpZnRLZXl9fSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB0LmNhbGwodGhpcyxlKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5zdXBwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9ZS5wYXJzZUV2ZW50TmFtZSh0KX0sZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LG4saSl7dmFyIHI9ZS5wYXJzZUV2ZW50TmFtZShuKSxvPWUuZXZlbnRDYWxsYmFjayhyLmZ1bGxLZXksaSx0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBzKCkub25BbmRDYW5jZWwodCxyLmRvbUV2ZW50TmFtZSxvKX0pfSxlLnBhcnNlRXZlbnROYW1lPWZ1bmN0aW9uKHQpe3ZhciBuPXQudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLGk9bi5zaGlmdCgpO2lmKDA9PT1uLmxlbmd0aHx8ImtleWRvd24iIT09aSYmImtleXVwIiE9PWkpcmV0dXJuIG51bGw7dmFyIHI9ZS5fbm9ybWFsaXplS2V5KG4ucG9wKCkpLG89IiI7aWYob3QuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLmluZGV4T2YodCk7ZT4tMSYmKG4uc3BsaWNlKGUsMSksbys9dCsiLiIpfSksbys9ciwwIT1uLmxlbmd0aHx8MD09PXIubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXt9O3JldHVybiBhLmRvbUV2ZW50TmFtZT1pLGEuZnVsbEtleT1vLGF9LGUuZ2V0RXZlbnRGdWxsS2V5PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49cygpLmdldEV2ZW50S2V5KHQpO3JldHVybiIgIj09PShuPW4udG9Mb3dlckNhc2UoKSk/bj0ic3BhY2UiOiIuIj09PW4mJihuPSJkb3QiKSxvdC5mb3JFYWNoKGZ1bmN0aW9uKGkpe2khPW4mJigwLGF0W2ldKSh0KSYmKGUrPWkrIi4iKX0pLGUrPW59LGUuZXZlbnRDYWxsYmFjaz1mdW5jdGlvbih0LG4saSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2UuZ2V0RXZlbnRGdWxsS2V5KHIpPT09dCYmaS5ydW5HdWFyZGVkKGZ1bmN0aW9uKCl7cmV0dXJuIG4ocil9KX19LGUuX25vcm1hbGl6ZUtleT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJlc2MiOnJldHVybiJlc2NhcGUiO2RlZmF1bHQ6cmV0dXJuIHR9fSxlfShqKSx1dD1mdW5jdGlvbigpe30sY3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2RvYz1lLG59cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuc2FuaXRpemU9ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKXJldHVybiBudWxsO3N3aXRjaCh0KXtjYXNlIG8uRy5OT05FOnJldHVybiBlO2Nhc2Ugby5HLkhUTUw6cmV0dXJuIGUgaW5zdGFuY2VvZiBmdD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiSFRNTCIpLE9iamVjdChvLkRhKSh0aGlzLl9kb2MsU3RyaW5nKGUpKSk7Y2FzZSBvLkcuU1RZTEU6cmV0dXJuIGUgaW5zdGFuY2VvZiBodD9lLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6KHRoaXMuY2hlY2tOb3RTYWZlVmFsdWUoZSwiU3R5bGUiKSxPYmplY3Qoby5FYSkoZSkpO2Nhc2Ugby5HLlNDUklQVDppZihlIGluc3RhbmNlb2YgZHQpcmV0dXJuIGUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTt0aHJvdyB0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlNjcmlwdCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2Ugby5HLlVSTDpyZXR1cm4gZSBpbnN0YW5jZW9mIG10fHxlIGluc3RhbmNlb2YgcHQ/ZS5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5Oih0aGlzLmNoZWNrTm90U2FmZVZhbHVlKGUsIlVSTCIpLE9iamVjdChvLkZhKShTdHJpbmcoZSkpKTtjYXNlIG8uRy5SRVNPVVJDRV9VUkw6aWYoZSBpbnN0YW5jZW9mIG10KXJldHVybiBlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7dGhyb3cgdGhpcy5jaGVja05vdFNhZmVWYWx1ZShlLCJSZXNvdXJjZVVSTCIpLG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgIit0KyIgKHNlZSBodHRwOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIil9fSxlLnByb3RvdHlwZS5jaGVja05vdFNhZmVWYWx1ZT1mdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBsdCl0aHJvdyBuZXcgRXJyb3IoIlJlcXVpcmVkIGEgc2FmZSAiK2UrIiwgZ290IGEgIit0LmdldFR5cGVOYW1lKCkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBmdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9LGUucHJvdG90eXBlLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdCh0KX0sZS5wcm90b3R5cGUuYnlwYXNzU2VjdXJpdHlUcnVzdFVybD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfSxlLnByb3RvdHlwZS5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtdCh0KX0sZX0odXQpLGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9dH1yZXR1cm4gdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogIit0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHkrIiAoc2VlIGh0dHA6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykifSx0fSgpLGZ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIkhUTUwifSxlfShsdCksaHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU3R5bGUifSxlfShsdCksZHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBudWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4iU2NyaXB0In0sZX0obHQpLHB0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmdldFR5cGVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIlVSTCJ9LGV9KGx0KSxtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT10JiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybiJSZXNvdXJjZVVSTCJ9LGV9KGx0KSx5dD1be3Byb3ZpZGU6by56LHVzZVZhbHVlOnIuc30se3Byb3ZpZGU6by5BLHVzZVZhbHVlOmZ1bmN0aW9uKCl7ZC5tYWtlQ3VycmVudCgpLHcuaW5pdCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6ci5wLHVzZUNsYXNzOnYsZGVwczpbbV19LHtwcm92aWRlOm0sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sZGVwczpbXX1dLHZ0PU9iamVjdChvLlIpKG8uWSwiYnJvd3NlciIseXQpO2Z1bmN0aW9uIGd0KCl7cmV0dXJuIG5ldyBvLmx9dmFyIGJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtpZih0KXRocm93IG5ldyBFcnJvcigiQnJvd3Nlck1vZHVsZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSWYgeW91IG5lZWQgYWNjZXNzIHRvIGNvbW1vbiBkaXJlY3RpdmVzIHN1Y2ggYXMgTmdJZiBhbmQgTmdGb3IgZnJvbSBhIGxhenkgbG9hZGVkIG1vZHVsZSwgaW1wb3J0IENvbW1vbk1vZHVsZSBpbnN0ZWFkLiIpfXJldHVybiB0LndpdGhTZXJ2ZXJUcmFuc2l0aW9uPWZ1bmN0aW9uKGUpe3JldHVybntuZ01vZHVsZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6by5jLHVzZVZhbHVlOmUuYXBwSWR9LHtwcm92aWRlOmIsdXNlRXhpc3Rpbmc6by5jfSxfXX19LHR9KCk7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvd30sWm44RDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSk7dmFyIGk9bigicHNXMCIpLHI9bigibUNoRiIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSksT2JqZWN0KGkuYSkoci5hLHQpfX0sYjdtVzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3ZhciBuPXQuY2FsbCh0aGlzLCJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJBcmd1bWVudE91dE9mUmFuZ2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKG4sZS5wcm90b3R5cGUpLG59cmV0dXJuIGkuYihlLHQpLGV9KEVycm9yKX0sYm5lNTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiNmJsRiIpLHI9bigiaXNieSIpLG89bigiMkJkaiIpLGE9bigiNjdZLyIpO2Z1bmN0aW9uIHModCxlLG4sdSl7cmV0dXJuIE9iamVjdChvLmEpKG4pJiYodT1uLG49dm9pZCAwKSx1P3ModCxlLG4pLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyLmEpKHQpP3UuYXBwbHkodm9pZCAwLHQpOnUodCl9KSk6bmV3IGkuYShmdW5jdGlvbihpKXshZnVuY3Rpb24gdChlLG4saSxyLG8pe3ZhciBhO2lmKGZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVFdmVudExpc3RlbmVyfShlKSl7dmFyIHM9ZTtlLmFkZEV2ZW50TGlzdGVuZXIobixpLG8pLGE9ZnVuY3Rpb24oKXtyZXR1cm4gcy5yZW1vdmVFdmVudExpc3RlbmVyKG4saSxvKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQub24mJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9mZn0oZSkpe3ZhciB1PWU7ZS5vbihuLGkpLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdS5vZmYobixpKX19ZWxzZSBpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWRkTGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyfShlKSl7dmFyIGM9ZTtlLmFkZExpc3RlbmVyKG4saSksYT1mdW5jdGlvbigpe3JldHVybiBjLnJlbW92ZUxpc3RlbmVyKG4saSl9fWVsc2V7aWYoIWV8fCFlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO2Zvcih2YXIgbD0wLGY9ZS5sZW5ndGg7bDxmO2wrKyl0KGVbbF0sbixpLHIsbyl9ci5hZGQoYSl9KHQsZSxmdW5jdGlvbih0KXtpLm5leHQoYXJndW1lbnRzLmxlbmd0aD4xP0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk6dCl9LGksbil9KX1PYmplY3R9LGJ1anQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oIlVvZEgiKSxuKCJJcDBSIiksbigiRnpxYyIpLG4oIldmNHAiKSksbz1uKCJkV1pnIiksYT1uKCJ3RncxIikscz0obigibExBUCIpLGkuTmEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1mbGF0LWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0sLm1hdC1zdHJva2VkLWJ1dHRvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZTtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXIgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo4OHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czoycHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgY3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LXJhaXNlZC1idXR0b257dHJhbnNpdGlvbjpub25lO2FuaW1hdGlvbjpub25lfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwuMTQpLDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LXJhaXNlZC1idXR0b25bZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgMCAwIDAgcmdiYSgwLDAsMCwuMiksMCAwIDAgMCByZ2JhKDAsMCwwLC4xNCksMCAwIDAgMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LWZhYnt0cmFuc2l0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9Lm1hdC1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsLjE0KSwwIDNweCAxNHB4IDJweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsLjIpLDAgNnB4IDEwcHggMCByZ2JhKDAsMCwwLC4xNCksMCAxcHggMThweCAwIHJnYmEoMCwwLDAsLjEyKX0ubWF0LWZhYjpub3QoW2Rpc2FibGVkXSk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwuMiksMCAxMnB4IDE3cHggMnB4IHJnYmEoMCwwLDAsLjE0KSwwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6ODhweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6MnB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjRzIGN1YmljLWJlemllciguMjUsLjgsLjI1LDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwuMiksMCAycHggMnB4IDAgcmdiYSgwLDAsMCwuMTQpLDAgMXB4IDVweCAwIHJnYmEoMCwwLDAsLjEyKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUubWF0LW1pbmktZmFie3RyYW5zaXRpb246bm9uZTthbmltYXRpb246bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbZGlzYWJsZWRdKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAxMHB4IDFweCByZ2JhKDAsMCwwLC4xNCksMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWJbZGlzYWJsZWRde2JveC1zaGFkb3c6bm9uZX0ubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwuMiksMCA2cHggMTBweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCAxOHB4IDAgcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWI6bm90KFtkaXNhYmxlZF0pOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgN3B4IDhweCAtNHB4IHJnYmEoMCwwLDAsLjIpLDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA1cHggMjJweCA0cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1pY29uLWJ1dHRvbiBpe2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmFkaXVzOmluaGVyaXQ7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgY3ViaWMtYmV6aWVyKC4zNSwwLC4yNSwxKSxiYWNrZ3JvdW5kLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjM1LDAsLjI1LDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9fS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTpibG9jaztmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1idXR0b24sLm1hdC1mYWIsLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtbWluaS1mYWIsLm1hdC1yYWlzZWQtYnV0dG9ue291dGxpbmU6c29saWQgMXB4fX0iXSxkYXRhOnt9fSkpO2Z1bmN0aW9uIHUodCl7cmV0dXJuIGkuamIoMixbaS5mYig0MDI2NTMxODQsMSx7cmlwcGxlOjB9KSwodCgpKCksaS5QYSgxLDAsbnVsbCxudWxsLDEsInNwYW4iLFtbImNsYXNzIiwibWF0LWJ1dHRvbi13cmFwcGVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuWWEobnVsbCwwKSwodCgpKCksaS5QYSgzLDAsbnVsbCxudWxsLDEsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLXJpcHBsZSBtYXQtcmlwcGxlIl0sWyJtYXRSaXBwbGUiLCIiXV0sW1syLCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsbnVsbF0sWzIsIm1hdC1yaXBwbGUtdW5ib3VuZGVkIixudWxsXV0sbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuT2EoNCwyMTI5OTIsW1sxLDRdXSwwLHIucSxbaS5rLGkueCxvLmEsWzIsci5nXSxbMixhLmFdXSx7Y2VudGVyZWQ6WzAsImNlbnRlcmVkIl0sZGlzYWJsZWQ6WzEsImRpc2FibGVkIl0sdHJpZ2dlcjpbMiwidHJpZ2dlciJdfSxudWxsKSwodCgpKCksaS5QYSg1LDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSldLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDQsMCxuLmlzSWNvbkJ1dHRvbixuLl9pc1JpcHBsZURpc2FibGVkKCksbi5fZ2V0SG9zdEVsZW1lbnQoKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5jb21wb25lbnQ7dChlLDMsMCxuLmlzUm91bmRCdXR0b258fG4uaXNJY29uQnV0dG9uLGkuWmEoZSw0KS51bmJvdW5kZWQpfSl9fSxjNFdtOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBjfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBwfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigiTnNoNSIpLG89bigiSXAwUiIpLGE9KG4oIkZ6cWMiKSxuKCJXZjRwIiksbigiZFdaZyIpLG4oInFBbFMiKSk7bigibExBUCIpLG4oIndGdzEiKTt2YXIgcz1pLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e319KTtmdW5jdGlvbiB1KHQpe3JldHVybiBpLmpiKDIsW2kuWWEobnVsbCwwKV0sbnVsbCxudWxsKX12YXIgYz1pLk5hKHtlbmNhcHN1bGF0aW9uOjIsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbe3R5cGU6NyxuYW1lOiJ0cmFuc2Zvcm0iLGRlZmluaXRpb25zOlt7dHlwZTowLG5hbWU6Im9wZW4sIG9wZW4taW5zdGFudCIsc3R5bGVzOnt0eXBlOjYsc3R5bGVzOnt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDAsIDAsIDApIix2aXNpYmlsaXR5OiJ2aXNpYmxlIn0sb2Zmc2V0Om51bGx9LG9wdGlvbnM6dm9pZCAwfSx7dHlwZTowLG5hbWU6InZvaWQiLHN0eWxlczp7dHlwZTo2LHN0eWxlczp7ImJveC1zaGFkb3ciOiJub25lIix2aXNpYmlsaXR5OiJoaWRkZW4ifSxvZmZzZXQ6bnVsbH0sb3B0aW9uczp2b2lkIDB9LHt0eXBlOjEsZXhwcjoidm9pZCA9PiBvcGVuLWluc3RhbnQiLGFuaW1hdGlvbjp7dHlwZTo0LHN0eWxlczpudWxsLHRpbWluZ3M6IjBtcyJ9LG9wdGlvbnM6bnVsbH0se3R5cGU6MSxleHByOiJ2b2lkIDw9PiBvcGVuLCBvcGVuLWluc3RhbnQgPT4gdm9pZCIsYW5pbWF0aW9uOnt0eXBlOjQsc3R5bGVzOm51bGwsdGltaW5nczoiNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSkifSxvcHRpb25zOm51bGx9XSxvcHRpb25zOnt9fV19fSk7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gaS5qYigyLFtpLllhKG51bGwsMCldLG51bGwsbnVsbCl9dmFyIGY9aS5OYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbIi5tYXQtZHJhd2VyLWNvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjE7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lcltmdWxsc2NyZWVuXXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LWRyYXdlci1jb250YWluZXJbZnVsbHNjcmVlbl0ubWF0LWRyYXdlci1vcGVuZWR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZHJhd2VyLWNvbnRhaW5lci5tYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCAubWF0LWRyYXdlci1zaWRle3otaW5kZXg6M30ubWF0LWRyYXdlci1iYWNrZHJvcHt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6Mzt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWJhY2tkcm9we3RyYW5zaXRpb24tZHVyYXRpb246LjRzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjUsLjgsLjI1LDEpO3RyYW5zaXRpb24tcHJvcGVydHk6YmFja2dyb3VuZC1jb2xvcix2aXNpYmlsaXR5fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLWJhY2tkcm9we29wYWNpdHk6LjV9fS5tYXQtZHJhd2VyLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LWRyYXdlci10cmFuc2l0aW9uIC5tYXQtZHJhd2VyLWNvbnRlbnR7dHJhbnNpdGlvbi1kdXJhdGlvbjouNHM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yNSwuOCwuMjUsMSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm0sbWFyZ2luLWxlZnQsbWFyZ2luLXJpZ2h0fS5tYXQtZHJhd2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6NDtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3otaW5kZXg6MztvdXRsaW5lOjA7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93LXk6YXV0bzt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6YWN0aXZlKXsubWF0LWRyYXdlcixbZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCBjdXJyZW50Q29sb3J9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpey5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5kLFtkaXI9cnRsXSAubWF0LWRyYXdlcntib3JkZXItbGVmdDpzb2xpZCAxcHggY3VycmVudENvbG9yO2JvcmRlci1yaWdodDpub25lfX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXNpZGV7ei1pbmRleDoyfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItZW5ke3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXIubWF0LWRyYXdlci1lbmR7bGVmdDowO3JpZ2h0OmF1dG87dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtc2lkZW5hdi1maXhlZHtwb3NpdGlvbjpmaXhlZH0iXSxkYXRhOnt9fSk7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gaS5qYigwLFsodCgpKCksaS5QYSgwLDAsbnVsbCxudWxsLDAsImRpdiIsW1siY2xhc3MiLCJtYXQtZHJhd2VyLWJhY2tkcm9wIl1dLFtbMiwibWF0LWRyYXdlci1zaG93biIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24odCxlLG4pe3ZhciBpPSEwO3JldHVybiJjbGljayI9PT1lJiYoaT0hMSE9PXQuY29tcG9uZW50Ll9vbkJhY2tkcm9wQ2xpY2tlZCgpJiZpKSxpfSxudWxsLG51bGwpKV0sbnVsbCxmdW5jdGlvbih0LGUpe3QoZSwwLDAsZS5jb21wb25lbnQuX2lzU2hvd2luZ0JhY2tkcm9wKCkpfSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gaS5qYigwLFsodCgpKCksaS5QYSgwLDAsbnVsbCxudWxsLDMsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNka1Njcm9sbGFibGUiLCIiXSxbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXV0sW1s0LCJtYXJnaW4tbGVmdCIsInB4Il0sWzQsIm1hcmdpbi1yaWdodCIsInB4Il1dLG51bGwsbnVsbCx1LHMpKSxpLk9hKDEsMjEyOTkyLFtbMSw0XV0sMCxhLmEsW2kuayxhLmMsaS54XSxudWxsLG51bGwpLGkuT2EoMiwxMDk3NzI4LG51bGwsMCxyLmcsW2kuaCxyLmZdLG51bGwsbnVsbCksaS5ZYSgwLDIpXSxmdW5jdGlvbih0LGUpe3QoZSwxLDApfSxmdW5jdGlvbih0LGUpe3QoZSwwLDAsaS5aYShlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQsaS5aYShlLDIpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGkuamIoMixbaS5mYig2NzEwODg2NDAsMSx7c2Nyb2xsYWJsZTowfSksKHQoKSgpLGkuR2EoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxoKSksaS5PYSgyLDE2Mzg0LG51bGwsMCxvLmssW2kuTyxpLkxdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpLGkuWWEobnVsbCwwKSxpLllhKG51bGwsMSksKHQoKSgpLGkuR2EoMTY3NzcyMTYsbnVsbCxudWxsLDEsbnVsbCxkKSksaS5PYSg2LDE2Mzg0LG51bGwsMCxvLmssW2kuTyxpLkxdLHtuZ0lmOlswLCJuZ0lmIl19LG51bGwpXSxmdW5jdGlvbih0LGUpe3ZhciBuPWUuY29tcG9uZW50O3QoZSwyLDAsbi5oYXNCYWNrZHJvcCksdChlLDYsMCwhbi5fY29udGVudCl9LG51bGwpfX0sZFdaZzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pO3ZhciBpLHI9bigiQ2NuRyIpLG89bigiSXAwUiIpLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBJbnRsJiZJbnRsLnY4QnJlYWtJdGVyYXRvcixzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLl9wbGF0Zm9ybUlkPXQsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9PYmplY3Qoby5xKSh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFhKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBDU1MmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXJldHVybiB0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5XKShyLnosOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiB1KCl7aWYobnVsbD09aSYmInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBpPSEwfX0pKX1maW5hbGx5e2k9aXx8ITF9cmV0dXJuIGl9dmFyIGM9ZnVuY3Rpb24oKXt9fSxlRGtQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gT30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBDfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEx9KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gUn0pLG4uZChlLCJpIixmdW5jdGlvbigpe3JldHVybiBEfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigibjZnRyIpLG89bigicUFsUyIpLGE9bigiSXAwUiIpLHM9bigibXJTRyIpLHU9bigiSzlJYSIpLGM9bigicHVnVCIpLGw9bigiNmJsRiIpLGY9bigidDlmWiIpLGg9bigiZFdaZyIpLGQ9bigiNGMzNSIpLHA9KG4oIllTaDIiKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0fSgpKSxtPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5zY3JvbGxTdHJhdGVneT1uZXcgcCx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHQmJk9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dFtlXX0pLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGVbbl09dFtuXX0pfX0oKTtmdW5jdGlvbiB5KHQsZSl7aWYoInRvcCIhPT1lJiYiYm90dG9tIiE9PWUmJiJjZW50ZXIiIT09ZSl0aHJvdyBFcnJvcigiQ29ubmVjdGVkUG9zaXRpb246IEludmFsaWQgIit0KycgIicrZSsnIi4gRXhwZWN0ZWQgInRvcCIsICJib3R0b20iIG9yICJjZW50ZXIiLicpfWZ1bmN0aW9uIHYodCxlKXtpZigic3RhcnQiIT09ZSYmImVuZCIhPT1lJiYiY2VudGVyIiE9PWUpdGhyb3cgRXJyb3IoIkNvbm5lY3RlZFBvc2l0aW9uOiBJbnZhbGlkICIrdCsnICInK2UrJyIuIEV4cGVjdGVkICJzdGFydCIsICJlbmQiIG9yICJjZW50ZXIiLicpfXZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9T2JqZWN0KHIuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9T2JqZWN0KHIuYykoLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fSx0LnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5faXNFbmFibGVkKXt2YXIgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT10aGlzLl9kb2N1bWVudC5ib2R5LG49dC5zdHlsZS5zY3JvbGxCZWhhdmlvcnx8IiIsaT1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsdC5zdHlsZS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LHQuc3R5bGUudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1lLnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIix3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5zdHlsZS5zY3JvbGxCZWhhdmlvcj1uLGUuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9aX19LHQucHJvdG90eXBlLl9jYW5CZUVuYWJsZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIil8fHRoaXMuX2lzRW5hYmxlZClyZXR1cm4hMTt2YXIgdD10aGlzLl9kb2N1bWVudC5ib2R5LGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm4gdC5zY3JvbGxIZWlnaHQ+ZS5oZWlnaHR8fHQuc2Nyb2xsV2lkdGg+ZS53aWR0aH0sdH0oKTtmdW5jdGlvbiBiKCl7cmV0dXJuIEVycm9yKCJTY3JvbGwgc3RyYXRlZ3kgaGFzIGFscmVhZHkgYmVlbiBhdHRhY2hlZC4iKX12YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dmFyIHI9dGhpczt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1uLHRoaXMuX2NvbmZpZz1pLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD1mdW5jdGlvbigpe3IuZGlzYWJsZSgpLHIuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmci5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiByLl9vdmVybGF5UmVmLmRldGFjaCgpfSl9fXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7aWYodGhpcy5fb3ZlcmxheVJlZil0aHJvdyBiKCk7dGhpcy5fb3ZlcmxheVJlZj10fSx0LnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pe3ZhciBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWUuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGU9dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdC5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50Ll9jb25maWcudGhyZXNob2xkP3QuX2RldGFjaCgpOnQuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX19LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9LHR9KCk7ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYm90dG9tPGUudG9wfHx0LnRvcD5lLmJvdHRvbXx8dC5yaWdodDxlLmxlZnR8fHQubGVmdD5lLnJpZ2h0fSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiBlLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQudG9wPGUudG9wfHx0LmJvdHRvbT5lLmJvdHRvbXx8dC5sZWZ0PGUubGVmdHx8dC5yaWdodD5lLnJpZ2h0fSl9dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fY29uZmlnPWksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9cmV0dXJuIHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXtpZih0aGlzLl9vdmVybGF5UmVmKXRocm93IGIoKTt0aGlzLl9vdmVybGF5UmVmPXR9LHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9ufHwodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQodGhpcy5fY29uZmlnP3RoaXMuX2NvbmZpZy5zY3JvbGxUaHJvdHRsZTowKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtpZih0Ll9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdC5fY29uZmlnJiZ0Ll9jb25maWcuYXV0b0Nsb3NlKXt2YXIgZT10Ll9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dC5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxpPW4ud2lkdGgscj1uLmhlaWdodDt3KGUsW3t3aWR0aDppLGhlaWdodDpyLGJvdHRvbTpyLHJpZ2h0OmksdG9wOjAsbGVmdDowfV0pJiYodC5kaXNhYmxlKCksdC5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Ll9vdmVybGF5UmVmLmRldGFjaCgpfSkpfX0pKX0sdC5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX0sdH0oKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2YXIgcj10aGlzO3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5ub29wPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwfSx0aGlzLmNsb3NlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgXyhyLl9zY3JvbGxEaXNwYXRjaGVyLHIuX25nWm9uZSxyLl92aWV3cG9ydFJ1bGVyLHQpfSx0aGlzLmJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnKHIuX3ZpZXdwb3J0UnVsZXIsci5fZG9jdW1lbnQpfSx0aGlzLnJlcG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBTKHIuX3Njcm9sbERpc3BhdGNoZXIsci5fdmlld3BvcnRSdWxlcixyLl9uZ1pvbmUsdCl9LHRoaXMuX2RvY3VtZW50PWl9cmV0dXJuIHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlcpKG8uYyksT2JqZWN0KGkuVykoby5lKSxPYmplY3QoaS5XKShpLngpLE9iamVjdChpLlcpKGEuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fa2V5ZG93bkxpc3RlbmVyPWZ1bmN0aW9uKHQpe2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZlLl9hdHRhY2hlZE92ZXJsYXlzW2UuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoLTFdLl9rZXlkb3duRXZlbnRzLm5leHQodCl9LHRoaXMuX2RvY3VtZW50PXR9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt0aGlzLl9pc0F0dGFjaGVkfHwodGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITApLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaCh0KX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZih0KTtlPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShlLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5fZGV0YWNoKCl9LHQucHJvdG90eXBlLl9kZXRhY2g9ZnVuY3Rpb24oKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIsITApLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3QoaS5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3QoaS5XKShhLmQpKX0sdG9rZW46dCxwcm92aWRlZEluOiJyb290In0pLHR9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZG9jdW1lbnQ9dH1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJFbGVtZW50JiZ0aGlzLl9jb250YWluZXJFbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2NvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXJFbGVtZW50KX0sdC5wcm90b3R5cGUuZ2V0Q29udGFpbmVyRWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fSx0LnByb3RvdHlwZS5fY3JlYXRlQ29udGFpbmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb250YWluZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHRoaXMuX2NvbnRhaW5lckVsZW1lbnQ9dH0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUykoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVykoYS5kKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvLGEpe3RoaXMuX3BvcnRhbE91dGxldD10LHRoaXMuX2hvc3Q9ZSx0aGlzLl9wYW5lPW4sdGhpcy5fY29uZmlnPWksdGhpcy5fbmdab25lPXIsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPW8sdGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCx0aGlzLl9iYWNrZHJvcENsaWNrPW5ldyB1LmEsdGhpcy5fYXR0YWNobWVudHM9bmV3IHUuYSx0aGlzLl9kZXRhY2htZW50cz1uZXcgdS5hLHRoaXMuX2tleWRvd25FdmVudHM9bmV3IHUuYSxpLnNjcm9sbFN0cmF0ZWd5JiZpLnNjcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvdmVybGF5RWxlbWVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYmFja2Ryb3BFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tkcm9wRWxlbWVudH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImhvc3RFbGVtZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hvc3R9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuYXR0YWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuX3VwZGF0ZVN0YWNraW5nT3JkZXIoKSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5lbmFibGUoKSx0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZi5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7ZS5oYXNBdHRhY2hlZCgpJiZlLnVwZGF0ZVBvc2l0aW9uKCl9KSx0aGlzLl90b2dnbGVQb2ludGVyRXZlbnRzKCEwKSx0aGlzLl9jb25maWcuaGFzQmFja2Ryb3AmJnRoaXMuX2F0dGFjaEJhY2tkcm9wKCksdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMCksdGhpcy5fYXR0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5hZGQodGhpcyksbn0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7aWYodGhpcy5oYXNBdHRhY2hlZCgpKXt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRldGFjaCYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fY29uZmlnLnNjcm9sbFN0cmF0ZWd5JiZ0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kuZGlzYWJsZSgpO3ZhciB0PXRoaXMuX3BvcnRhbE91dGxldC5kZXRhY2goKTtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH19LHQucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhhc0F0dGFjaGVkKCk7dGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9jb25maWcuc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX2NvbmZpZy5zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCksdGhpcy5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnROb2RlJiYodGhpcy5faG9zdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2hvc3QpLHRoaXMuX2hvc3Q9bnVsbCksdGhpcy5fcGFuZT1udWxsLHQmJnRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9kZXRhY2htZW50cy5jb21wbGV0ZSgpfSx0LnByb3RvdHlwZS5oYXNBdHRhY2hlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKX0sdC5wcm90b3R5cGUuYmFja2Ryb3BDbGljaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrLmFzT2JzZXJ2YWJsZSgpfSx0LnByb3RvdHlwZS5hdHRhY2htZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdHRhY2htZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZGV0YWNobWVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGV0YWNobWVudHMuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLmtleWRvd25FdmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50cy5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbmZpZ30sdC5wcm90b3R5cGUudXBkYXRlUG9zaXRpb249ZnVuY3Rpb24oKXt0aGlzLl9jb25maWcucG9zaXRpb25TdHJhdGVneSYmdGhpcy5fY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kuYXBwbHkoKX0sdC5wcm90b3R5cGUudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHQpLHRoaXMuX3VwZGF0ZUVsZW1lbnRTaXplKCl9LHQucHJvdG90eXBlLnNldERpcmVjdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb25maWc9T2JqZWN0KHMuYSkoe30sdGhpcy5fY29uZmlnLHtkaXJlY3Rpb246dH0pLHRoaXMuX3VwZGF0ZUVsZW1lbnREaXJlY3Rpb24oKX0sdC5wcm90b3R5cGUuZ2V0RGlyZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29uZmlnLmRpcmVjdGlvbjtyZXR1cm4gdD8ic3RyaW5nIj09dHlwZW9mIHQ/dDp0LnZhbHVlOiJsdHIifSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudERpcmVjdGlvbj1mdW5jdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfSx0LnByb3RvdHlwZS5fdXBkYXRlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXsodGhpcy5fY29uZmlnLndpZHRofHwwPT09dGhpcy5fY29uZmlnLndpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUud2lkdGg9T2JqZWN0KHIuYykodGhpcy5fY29uZmlnLndpZHRoKSksKHRoaXMuX2NvbmZpZy5oZWlnaHR8fDA9PT10aGlzLl9jb25maWcuaGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUuaGVpZ2h0PU9iamVjdChyLmMpKHRoaXMuX2NvbmZpZy5oZWlnaHQpKSwodGhpcy5fY29uZmlnLm1pbldpZHRofHwwPT09dGhpcy5fY29uZmlnLm1pbldpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWluV2lkdGg9T2JqZWN0KHIuYykodGhpcy5fY29uZmlnLm1pbldpZHRoKSksKHRoaXMuX2NvbmZpZy5taW5IZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWluSGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWluSGVpZ2h0PU9iamVjdChyLmMpKHRoaXMuX2NvbmZpZy5taW5IZWlnaHQpKSwodGhpcy5fY29uZmlnLm1heFdpZHRofHwwPT09dGhpcy5fY29uZmlnLm1heFdpZHRoKSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4V2lkdGg9T2JqZWN0KHIuYykodGhpcy5fY29uZmlnLm1heFdpZHRoKSksKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHR8fDA9PT10aGlzLl9jb25maWcubWF4SGVpZ2h0KSYmKHRoaXMuX3BhbmUuc3R5bGUubWF4SGVpZ2h0PU9iamVjdChyLmMpKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpKX0sdC5wcm90b3R5cGUuX3RvZ2dsZVBvaW50ZXJFdmVudHM9ZnVuY3Rpb24odCl7dGhpcy5fcGFuZS5zdHlsZS5wb2ludGVyRXZlbnRzPXQ/ImF1dG8iOiJub25lIn0sdC5wcm90b3R5cGUuX2F0dGFjaEJhY2tkcm9wPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9iYWNrZHJvcENsaWNrLm5leHQoZSl9KSwidW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0Ll9iYWNrZHJvcEVsZW1lbnQmJnQuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9KX0pOnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIil9LHQucHJvdG90eXBlLl91cGRhdGVTdGFja2luZ09yZGVyPWZ1bmN0aW9uKCl7dGhpcy5faG9zdC5uZXh0U2libGluZyYmdGhpcy5faG9zdC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2hvc3QpfSx0LnByb3RvdHlwZS5kZXRhY2hCYWNrZHJvcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl9iYWNrZHJvcEVsZW1lbnQ7aWYoZSl7dmFyIG49ZnVuY3Rpb24oKXtlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSx0Ll9iYWNrZHJvcEVsZW1lbnQ9PWUmJih0Ll9iYWNrZHJvcEVsZW1lbnQ9bnVsbCl9O2UuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzJiZ0aGlzLl90b2dnbGVDbGFzc2VzKGUsdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsbiksZS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIix0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChuLDUwMCl9KX19LHQucHJvdG90eXBlLl90b2dnbGVDbGFzc2VzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LmNsYXNzTGlzdDtPYmplY3Qoci5hKShlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe24/aS5hZGQodCk6aS5yZW1vdmUodCl9KX0sdH0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixpKXt2YXIgcj10aGlzO3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1uLHRoaXMuX3BsYXRmb3JtPWksdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuX2lzUHVzaGVkPSExLHRoaXMuX2NhblB1c2g9ITAsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9ITAsdGhpcy5fcG9zaXRpb25Mb2NrZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49MCx0aGlzLnNjcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IHUuYSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249Yy5hLkVNUFRZLHRoaXMuX29mZnNldFg9MCx0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPTAsdGhpcy5wb3NpdGlvbkNoYW5nZXM9bC5hLmNyZWF0ZShmdW5jdGlvbih0KXt2YXIgZT1yLl9wb3NpdGlvbkNoYW5nZXMuc3Vic2NyaWJlKHQpO3JldHVybiByLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMrKyxmdW5jdGlvbigpe2UudW5zdWJzY3JpYmUoKSxyLl9wb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbnMtLX19KSx0aGlzLnNldE9yaWdpbih0KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwb3NpdGlvbnMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLmF0dGFjaD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX292ZXJsYXlSZWYmJnQhPT10aGlzLl9vdmVybGF5UmVmKXRocm93IEVycm9yKCJUaGlzIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gYW4gb3ZlcmxheSIpO3RoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94IiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KCl9KX0sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZighKHRoaXMuX2lzRGlzcG9zZWR8fHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSlpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO2Vsc2V7dGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Zvcih2YXIgdCxlPXRoaXMuX29yaWdpblJlY3Qsbj10aGlzLl9vdmVybGF5UmVjdCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPVtdLG89MCxhPXRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucztvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSx1PXRoaXMuX2dldE9yaWdpblBvaW50KGUscyksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQodSxuLHMpLGw9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLG4saSxzKTtpZihsLmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24ocyx1KTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKGwsYyxpKT9yLnB1c2goe3Bvc2l0aW9uOnMsb3JpZ2luOnUsb3ZlcmxheVJlY3Q6bixib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KHUscyl9KTooIXR8fHQub3ZlcmxheUZpdC52aXNpYmxlQXJlYTxsLnZpc2libGVBcmVhKSYmKHQ9e292ZXJsYXlGaXQ6bCxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDp1LHBvc2l0aW9uOnMsb3ZlcmxheVJlY3Q6bn0pfWlmKHIubGVuZ3RoKXtmb3IodmFyIGY9bnVsbCxoPS0xLGQ9MCxwPXI7ZDxwLmxlbmd0aDtkKyspe3ZhciBtPXBbZF0seT1tLmJvdW5kaW5nQm94UmVjdC53aWR0aCptLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKG0ucG9zaXRpb24ud2VpZ2h0fHwxKTt5PmgmJihoPXksZj1tKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGYucG9zaXRpb24sZi5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbih0LnBvc2l0aW9uLHQub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24odC5wb3NpdGlvbix0Lm9yaWdpblBvaW50KX19LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuZGV0YWNoKCksdGhpcy5fYm91bmRpbmdCb3g9bnVsbCx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9pc0Rpc3Bvc2VkPSEwKX0sdC5wcm90b3R5cGUucmVhcHBseUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9pc0Rpc3Bvc2VkJiYoIXRoaXMuX3BsYXRmb3JtfHx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpKXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX29yaWdpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpO3ZhciB0PXRoaXMuX2xhc3RQb3NpdGlvbnx8dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zWzBdLGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9fSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5zY3JvbGxhYmxlcz10fSx0LnByb3RvdHlwZS53aXRoUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUud2l0aFZpZXdwb3J0TWFyZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9LHQucHJvdG90eXBlLndpdGhGbGV4aWJsZURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoR3Jvd0FmdGVyT3Blbj1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2dyb3dBZnRlck9wZW49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoUHVzaD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ITApLHRoaXMuX2NhblB1c2g9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSEwKSx0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9LHQucHJvdG90eXBlLnNldE9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQgaW5zdGFuY2VvZiBpLms/dC5uYXRpdmVFbGVtZW50OnQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRYPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aERlZmF1bHRPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFRyYW5zZm9ybU9yaWdpbk9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9LHQucHJvdG90eXBlLl9nZXRPcmlnaW5Qb2ludD1mdW5jdGlvbih0LGUpe3ZhciBuO2lmKCJjZW50ZXIiPT1lLm9yaWdpblgpbj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7dmFyIGk9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxyPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7bj0ic3RhcnQiPT1lLm9yaWdpblg/aTpyfXJldHVybnt4Om4seToiY2VudGVyIj09ZS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWUub3JpZ2luWT90LnRvcDp0LmJvdHRvbX19LHQucHJvdG90eXBlLl9nZXRPdmVybGF5UG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpO3JldHVybiBpPSJjZW50ZXIiPT1uLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PW4ub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCx7eDp0LngraSx5OnQueSsoImNlbnRlciI9PW4ub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PW4ub3ZlcmxheVk/MDotZS5oZWlnaHQpfX0sdC5wcm90b3R5cGUuX2dldE92ZXJsYXlGaXQ9ZnVuY3Rpb24odCxlLG4saSl7dmFyIHI9dC54LG89dC55LGE9dGhpcy5fZ2V0T2Zmc2V0KGksIngiKSxzPXRoaXMuX2dldE9mZnNldChpLCJ5Iik7YSYmKHIrPWEpLHMmJihvKz1zKTt2YXIgdT0wLW8sYz1vK2UuaGVpZ2h0LW4uaGVpZ2h0LGw9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS53aWR0aCwwLXIscitlLndpZHRoLW4ud2lkdGgpLGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3MoZS5oZWlnaHQsdSxjKSxoPWwqZjtyZXR1cm57dmlzaWJsZUFyZWE6aCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDplLndpZHRoKmUuaGVpZ2h0PT09aCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6Zj09PWUuaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5Omw9PWUud2lkdGh9fSx0LnByb3RvdHlwZS5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zKXt2YXIgaT1uLmJvdHRvbS1lLnkscj1uLnJpZ2h0LWUueCxvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0LGE9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aDtyZXR1cm4odC5maXRzSW5WaWV3cG9ydFZlcnRpY2FsbHl8fG51bGwhPW8mJm88PWkpJiYodC5maXRzSW5WaWV3cG9ydEhvcml6b250YWxseXx8bnVsbCE9YSYmYTw9cil9fSx0LnByb3RvdHlwZS5fcHVzaE92ZXJsYXlPblNjcmVlbj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3ZpZXdwb3J0UmVjdCxpPU1hdGgubWF4KHQueCtlLndpZHRoLW4ucmlnaHQsMCkscj1NYXRoLm1heCh0LnkrZS5oZWlnaHQtbi5ib3R0b20sMCksbz1NYXRoLm1heChuLnRvcC10LnksMCksYT1NYXRoLm1heChuLmxlZnQtdC54LDApO3JldHVybnt4OnQueCsoZS53aWR0aDw9bi53aWR0aD9hfHwtaTpuLmxlZnQtdC54KSx5OnQueSsoZS5oZWlnaHQ8PW4uaGVpZ2h0P298fC1yOm4udG9wLXQueSl9fSx0LnByb3RvdHlwZS5fYXBwbHlQb3NpdGlvbj1mdW5jdGlvbih0LGUpe2lmKHRoaXMuX3NldFRyYW5zZm9ybU9yaWdpbih0KSx0aGlzLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcyhlLHQpLHRoaXMuX3NldEJvdW5kaW5nQm94U3R5bGVzKGUsdCksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb25zPjApe3ZhciBuPW5ldyBmdW5jdGlvbih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfSh0LHRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSk7dGhpcy5fcG9zaXRpb25DaGFuZ2VzLm5leHQobil9dGhpcy5faXNJbml0aWFsUmVuZGVyPSExfSx0LnByb3RvdHlwZS5fc2V0VHJhbnNmb3JtT3JpZ2luPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yKXt2YXIgZSxuPXRoaXMuX2JvdW5kaW5nQm94LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpLGk9dC5vdmVybGF5WTtlPSJjZW50ZXIiPT09dC5vdmVybGF5WD8iY2VudGVyIjp0aGlzLl9pc1J0bCgpPyJzdGFydCI9PT10Lm92ZXJsYXlYPyJyaWdodCI6ImxlZnQiOiJzdGFydCI9PT10Lm92ZXJsYXlYPyJsZWZ0IjoicmlnaHQiO2Zvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW5bcl0uc3R5bGUudHJhbnNmb3JtT3JpZ2luPWUrIiAiK2l9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLG8sYSxzLHU9dGhpcy5fdmlld3BvcnRSZWN0LGM9dGhpcy5faXNSdGwoKTtpZigidG9wIj09PWUub3ZlcmxheVkpaT10Lnksbj11LmJvdHRvbS10Lnk7ZWxzZSBpZigiYm90dG9tIj09PWUub3ZlcmxheVkpbj11LmhlaWdodC0ocj11LmhlaWdodC10LnkrMip0aGlzLl92aWV3cG9ydE1hcmdpbikrdGhpcy5fdmlld3BvcnRNYXJnaW47ZWxzZXt2YXIgbD1NYXRoLm1pbih1LmJvdHRvbS10LnksdC55LXUubGVmdCksZj10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodDtpPXQueS1sLChuPTIqbCk+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihpPXQueS1mLzIpfWlmKCJlbmQiPT09ZS5vdmVybGF5WCYmIWN8fCJzdGFydCI9PT1lLm92ZXJsYXlYJiZjKXM9dS5yaWdodC10LngrdGhpcy5fdmlld3BvcnRNYXJnaW4sbz10LngtdS5sZWZ0O2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFjfHwiZW5kIj09PWUub3ZlcmxheVgmJmMpYT10Lngsbz11LnJpZ2h0LXQueDtlbHNle2w9TWF0aC5taW4odS5yaWdodC10LngsdC54LXUudG9wKTt2YXIgaD10aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLndpZHRoO2E9dC54LWwsKG89MipsKT5oJiYhdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGE9dC54LWgvMil9cmV0dXJue3RvcDppLGxlZnQ6YSxib3R0b206cixyaWdodDpzLHdpZHRoOm8saGVpZ2h0Om59fSx0LnByb3RvdHlwZS5fc2V0Qm91bmRpbmdCb3hTdHlsZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTt0aGlzLl9pc0luaXRpYWxSZW5kZXJ8fHRoaXMuX2dyb3dBZnRlck9wZW58fChuLmhlaWdodD1NYXRoLm1pbihuLmhlaWdodCx0aGlzLl9sYXN0Qm91bmRpbmdCb3hTaXplLmhlaWdodCksbi53aWR0aD1NYXRoLm1pbihuLndpZHRoLHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUud2lkdGgpKTt2YXIgaT17fTtpZih0aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCkpaS50b3A9aS5sZWZ0PSIwIixpLmJvdHRvbT1pLnJpZ2h0PSIiLGkud2lkdGg9aS5oZWlnaHQ9IjEwMCUiO2Vsc2V7dmFyIG89dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhIZWlnaHQsYT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heFdpZHRoO2kuaGVpZ2h0PU9iamVjdChyLmMpKG4uaGVpZ2h0KSxpLnRvcD1PYmplY3Qoci5jKShuLnRvcCksaS5ib3R0b209T2JqZWN0KHIuYykobi5ib3R0b20pLGkud2lkdGg9T2JqZWN0KHIuYykobi53aWR0aCksaS5sZWZ0PU9iamVjdChyLmMpKG4ubGVmdCksaS5yaWdodD1PYmplY3Qoci5jKShuLnJpZ2h0KSxpLmFsaWduSXRlbXM9ImNlbnRlciI9PT1lLm92ZXJsYXlYPyJjZW50ZXIiOiJlbmQiPT09ZS5vdmVybGF5WD8iZmxleC1lbmQiOiJmbGV4LXN0YXJ0IixpLmp1c3RpZnlDb250ZW50PSJjZW50ZXIiPT09ZS5vdmVybGF5WT8iY2VudGVyIjoiYm90dG9tIj09PWUub3ZlcmxheVk/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsbyYmKGkubWF4SGVpZ2h0PU9iamVjdChyLmMpKG8pKSxhJiYoaS5tYXhXaWR0aD1PYmplY3Qoci5jKShhKSl9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT1uLEEodGhpcy5fYm91bmRpbmdCb3guc3R5bGUsaSl9LHQucHJvdG90eXBlLl9yZXNldEJvdW5kaW5nQm94U3R5bGVzPWZ1bmN0aW9uKCl7QSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSx7dG9wOiIwIixsZWZ0OiIwIixyaWdodDoiMCIsYm90dG9tOiIwIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pfSx0LnByb3RvdHlwZS5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbigpe0EodGhpcy5fcGFuZS5zdHlsZSx7dG9wOiIiLGxlZnQ6IiIsYm90dG9tOiIiLHJpZ2h0OiIiLHBvc2l0aW9uOiIifSl9LHQucHJvdG90eXBlLl9zZXRPdmVybGF5RWxlbWVudFN0eWxlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3RoaXMuX2hhc0V4YWN0UG9zaXRpb24oKT8oQShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVkoZSx0KSksQShuLHRoaXMuX2dldEV4YWN0T3ZlcmxheVgoZSx0KSkpOm4ucG9zaXRpb249InN0YXRpYyI7dmFyIGk9IiIscj10aGlzLl9nZXRPZmZzZXQoZSwieCIpLG89dGhpcy5fZ2V0T2Zmc2V0KGUsInkiKTtyJiYoaSs9InRyYW5zbGF0ZVgoIityKyJweCkgIiksbyYmKGkrPSJ0cmFuc2xhdGVZKCIrbysicHgpIiksbi50cmFuc2Zvcm09aS50cmltKCksdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zJiZ0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1heEhlaWdodCYmKG4ubWF4SGVpZ2h0PSIiKSx0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMmJnRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4V2lkdGgmJihuLm1heFdpZHRoPSIiKSxBKHRoaXMuX3BhbmUuc3R5bGUsbil9LHQucHJvdG90eXBlLl9nZXRFeGFjdE92ZXJsYXlZPWZ1bmN0aW9uKHQsZSl7dmFyIG49e3RvcDpudWxsLGJvdHRvbTpudWxsfSxpPXRoaXMuX2dldE92ZXJsYXlQb2ludChlLHRoaXMuX292ZXJsYXlSZWN0LHQpO3JldHVybiB0aGlzLl9pc1B1c2hlZCYmKGk9dGhpcy5fcHVzaE92ZXJsYXlPblNjcmVlbihpLHRoaXMuX292ZXJsYXlSZWN0KSksImJvdHRvbSI9PT10Lm92ZXJsYXlZP24uYm90dG9tPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQtKGkueSt0aGlzLl9vdmVybGF5UmVjdC5oZWlnaHQpKyJweCI6bi50b3A9T2JqZWN0KHIuYykoaS55KSxufSx0LnByb3RvdHlwZS5fZ2V0RXhhY3RPdmVybGF5WD1mdW5jdGlvbih0LGUpe3ZhciBuPXtsZWZ0Om51bGwscmlnaHQ6bnVsbH0saT10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihpPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4oaSx0aGlzLl9vdmVybGF5UmVjdCkpLCJyaWdodCI9PSh0aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIpP24ucmlnaHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLShpLngrdGhpcy5fb3ZlcmxheVJlY3Qud2lkdGgpKyJweCI6bi5sZWZ0PU9iamVjdChyLmMpKGkueCksbn0sdC5wcm90b3R5cGUuX2dldFNjcm9sbFZpc2liaWxpdHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9vcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5zY3JvbGxhYmxlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOngodCxuKSxpc09yaWdpbk91dHNpZGVWaWV3OncodCxuKSxpc092ZXJsYXlDbGlwcGVkOngoZSxuKSxpc092ZXJsYXlPdXRzaWRlVmlldzp3KGUsbil9fSx0LnByb3RvdHlwZS5fc3VidHJhY3RPdmVyZmxvd3M9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtTWF0aC5tYXgoZSwwKX0sdCl9LHQucHJvdG90eXBlLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOm4udG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6bi5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0Om4ubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTpuLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX0sdC5wcm90b3R5cGUuX2lzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfSx0LnByb3RvdHlwZS5faGFzRXhhY3RQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnN8fHRoaXMuX2lzUHVzaGVkfSx0LnByb3RvdHlwZS5fZ2V0T2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfSx0LnByb3RvdHlwZS5fdmFsaWRhdGVQb3NpdGlvbnM9ZnVuY3Rpb24oKXtpZighdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmxlbmd0aCl0aHJvdyBFcnJvcigiRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5OiBBdCBsZWFzdCBvbmUgcG9zaXRpb24gaXMgcmVxdWlyZWQuIik7dGhpcy5fcHJlZmVycmVkUG9zaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7digib3JpZ2luWCIsdC5vcmlnaW5YKSx5KCJvcmlnaW5ZIix0Lm9yaWdpblkpLHYoIm92ZXJsYXlYIix0Lm92ZXJsYXlYKSx5KCJvdmVybGF5WSIsdC5vdmVybGF5WSl9KX0sdH0oKTtmdW5jdGlvbiBBKHQsZSl7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9dmFyIEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscixvKXt0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9W10sdGhpcy5fcG9zaXRpb25TdHJhdGVneT1uZXcgayhuLGkscixvKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSkud2l0aFZpZXdwb3J0TWFyZ2luKDApLHRoaXMud2l0aEZhbGxiYWNrUG9zaXRpb24odCxlKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfaXNSdGwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJvblBvc2l0aW9uQ2hhbmdlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucG9zaXRpb25DaGFuZ2VzfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicG9zaXRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9uc30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuYXR0YWNoKHQpLHRoaXMuX2RpcmVjdGlvbiYmKHQuc2V0RGlyZWN0aW9uKHRoaXMuX2RpcmVjdGlvbiksdGhpcy5fZGlyZWN0aW9uPW51bGwpfSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5kaXNwb3NlKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCl9LHQucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfSx0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZUxhc3RQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kucmVhcHBseUxhc3RQb3NpdGlvbigpfSx0LnByb3RvdHlwZS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnM9ZnVuY3Rpb24odCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl9LHQucHJvdG90eXBlLndpdGhGYWxsYmFja1Bvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciByPW5ldyBmdW5jdGlvbih0LGUsbixpKXt0aGlzLm9mZnNldFg9bix0aGlzLm9mZnNldFk9aSx0aGlzLm9yaWdpblg9dC5vcmlnaW5YLHRoaXMub3JpZ2luWT10Lm9yaWdpblksdGhpcy5vdmVybGF5WD1lLm92ZXJsYXlYLHRoaXMub3ZlcmxheVk9ZS5vdmVybGF5WX0odCxlLG4saSk7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucy5wdXNoKHIpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyh0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnMpLHRoaXN9LHQucHJvdG90eXBlLndpdGhEaXJlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5zZXREaXJlY3Rpb24odCk6dGhpcy5fZGlyZWN0aW9uPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aE9mZnNldFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aERlZmF1bHRPZmZzZXRYKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhPZmZzZXRZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LndpdGhEZWZhdWx0T2Zmc2V0WSh0KSx0aGlzfSx0LnByb3RvdHlwZS53aXRoTG9ja2VkUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kud2l0aExvY2tlZFBvc2l0aW9uKHQpLHRoaXN9LHQucHJvdG90eXBlLndpdGhQb3NpdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz10LnNsaWNlKCksdGhpcy5fcG9zaXRpb25TdHJhdGVneS53aXRoUG9zaXRpb25zKHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyksdGhpc30sdC5wcm90b3R5cGUuc2V0T3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0KSx0aGlzfSx0fSgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5fanVzdGlmeUNvbnRlbnQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIifXJldHVybiB0LnByb3RvdHlwZS5hdHRhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDb25maWcoKTt0aGlzLl9vdmVybGF5UmVmPXQsdGhpcy5fd2lkdGgmJiFlLndpZHRoJiZ0LnVwZGF0ZVNpemUoe3dpZHRoOnRoaXMuX3dpZHRofSksdGhpcy5faGVpZ2h0JiYhZS5oZWlnaHQmJnQudXBkYXRlU2l6ZSh7aGVpZ2h0OnRoaXMuX2hlaWdodH0pLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiKX0sdC5wcm90b3R5cGUudG9wPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0iIiksdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX3RvcE9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9yaWdodE9mZnNldD0iIix0aGlzLl9sZWZ0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtc3RhcnQiLHRoaXN9LHQucHJvdG90eXBlLmJvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX3RvcE9mZnNldD0iIix0aGlzLl9ib3R0b21PZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LWVuZCIsdGhpc30sdC5wcm90b3R5cGUucmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9sZWZ0T2Zmc2V0PSIiLHRoaXMuX3JpZ2h0T2Zmc2V0PXQsdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImZsZXgtZW5kIix0aGlzfSx0LnByb3RvdHlwZS53aWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfSx0LnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfSx0LnByb3RvdHlwZS5jZW50ZXJIb3Jpem9udGFsbHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PSIiKSx0aGlzLmxlZnQodCksdGhpcy5fanVzdGlmeUNvbnRlbnQ9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuY2VudGVyVmVydGljYWxseT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9IiIpLHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc30sdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpe3ZhciB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LnN0eWxlLG49dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKTt0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD0iMTAwJSI9PT1uLndpZHRoPyIwIjp0aGlzLl9sZWZ0T2Zmc2V0LHQubWFyZ2luVG9wPSIxMDAlIj09PW4uaGVpZ2h0PyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9dGhpcy5fcmlnaHRPZmZzZXQsZS5qdXN0aWZ5Q29udGVudD0iMTAwJSI9PT1uLndpZHRoPyJmbGV4LXN0YXJ0Ijp0aGlzLl9qdXN0aWZ5Q29udGVudCxlLmFsaWduSXRlbXM9IjEwMCUiPT09bi5oZWlnaHQ/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9fSx0LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7fSx0fSgpLE09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl92aWV3cG9ydFJ1bGVyPXQsdGhpcy5fZG9jdW1lbnQ9ZSx0aGlzLl9wbGF0Zm9ybT1ufXJldHVybiB0LnByb3RvdHlwZS5nbG9iYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGp9LHQucHJvdG90eXBlLmNvbm5lY3RlZFRvPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbmV3IEkoZSxuLHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCl9LHQucHJvdG90eXBlLmZsZXhpYmxlQ29ubmVjdGVkVG89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9wbGF0Zm9ybSl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlcpKG8uZSksT2JqZWN0KGkuVykoYS5kKSxPYmplY3QoaS5XKShoLmEsOCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSxQPTAsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxyLG8sYSxzLHUpe3RoaXMuc2Nyb2xsU3RyYXRlZ2llcz10LHRoaXMuX292ZXJsYXlDb250YWluZXI9ZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bix0aGlzLl9wb3NpdGlvbkJ1aWxkZXI9aSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXI9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMuX25nWm9uZT1hLHRoaXMuX2RvY3VtZW50PXMsdGhpcy5fZGlyZWN0aW9uYWxpdHk9dX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCksbj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChlKSxpPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChuKSxyPW5ldyBtKHQpO3JldHVybiByLmRpcmVjdGlvbj1yLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IFQoaSxlLG4scix0aGlzLl9uZ1pvbmUsdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLHRoaXMuX2RvY3VtZW50KX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfSx0LnByb3RvdHlwZS5fY3JlYXRlUGFuZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuaWQ9ImNkay1vdmVybGF5LSIrUCsrLGUuY2xhc3NMaXN0LmFkZCgiY2RrLW92ZXJsYXktcGFuZSIpLHQuYXBwZW5kQ2hpbGQoZSksZX0sdC5wcm90b3R5cGUuX2NyZWF0ZUhvc3RFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKHQpLHR9LHQucHJvdG90eXBlLl9jcmVhdGVQb3J0YWxPdXRsZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoaS5nKSksbmV3IGQuYih0LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IpfSx0fSgpLFI9bmV3IGkubygiY2RrLWNvbm5lY3RlZC1vdmVybGF5LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIEQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBMPWZ1bmN0aW9uKCl7fX0sZWloczpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSk7dmFyIGk9e2U6e319fSxnSTNCOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNmJsRiIpLHI9bigiVDFETSIpLG89bigiaXNieSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIU9iamVjdChvLmEpKHQpJiZ0LXBhcnNlRmxvYXQodCkrMT49MH12YXIgcz1uKCJua1k3Iik7ZnVuY3Rpb24gdSh0LGUsbil7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIG89LTE7cmV0dXJuIGEoZSk/bz1OdW1iZXIoZSk8MT8xOk51bWJlcihlKTpPYmplY3Qocy5hKShlKSYmKG49ZSksT2JqZWN0KHMuYSkobil8fChuPXIuYSksbmV3IGkuYShmdW5jdGlvbihlKXt2YXIgaT1hKHQpP3Q6K3Qtbi5ub3coKTtyZXR1cm4gbi5zY2hlZHVsZShjLGkse2luZGV4OjAscGVyaW9kOm8sc3Vic2NyaWJlcjplfSl9KX1mdW5jdGlvbiBjKHQpe3ZhciBlPXQuaW5kZXgsbj10LnBlcmlvZCxpPXQuc3Vic2NyaWJlcjtpZihpLm5leHQoZSksIWkuY2xvc2VkKXtpZigtMT09PW4pcmV0dXJuIGkuY29tcGxldGUoKTt0LmluZGV4PWUrMSx0aGlzLnNjaGVkdWxlKHQsbil9fW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSl9LGdJY1k6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4oIm1yU0ciKTt2YXIgaT1uKCJDY25HIik7bigiVk5yNCIpLG4oIjAvdVEiKSxuKCI2N1kvIiksbigiWllqdCIpO3ZhciByPW5ldyBpLm8oIk5nVmFsdWVBY2Nlc3NvciIpfSxoOURxOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiB0LmNhbGwodGhpcyl8fHRoaXN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLHRoaXN9LGV9KG4oInB1Z1QiKS5hKTtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciBvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlLG4pfHx0aGlzO3JldHVybiBpLnNjaGVkdWxlcj1lLGkud29yaz1uLGkucGVuZGluZz0hMSxpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5zY2hlZHVsZT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PWUmJihlPTApLHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDt2YXIgbj10aGlzLmlkLGk9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPW4mJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoaSxuLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9dGhpcy5pZHx8dGhpcy5yZXF1ZXN0QXN5bmNJZChpLHRoaXMuaWQsZSksdGhpc30sZS5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj0wKSxzZXRJbnRlcnZhbCh0LmZsdXNoLmJpbmQodCx0aGlzKSxuKX0sZS5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQ9ZnVuY3Rpb24odCxlLG4pe2lmKHZvaWQgMD09PW4mJihuPTApLG51bGwhPT1uJiZ0aGlzLmRlbGF5PT09biYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJuIGU7Y2xlYXJJbnRlcnZhbChlKX0sZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7dmFyIG49dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKG4pcmV0dXJuIG47ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9LGUucHJvdG90eXBlLl9leGVjdXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ITEsaT12b2lkIDA7dHJ5e3RoaXMud29yayh0KX1jYXRjaCh0KXtuPSEwLGk9ISF0JiZ0fHxuZXcgRXJyb3IodCl9aWYobilyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGl9LGUucHJvdG90eXBlLl91bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaWQsZT10aGlzLnNjaGVkdWxlcixuPWUuYWN0aW9ucyxpPW4uaW5kZXhPZih0aGlzKTt0aGlzLndvcms9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5wZW5kaW5nPSExLHRoaXMuc2NoZWR1bGVyPW51bGwsLTEhPT1pJiZuLnNwbGljZShpLDEpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGx9LGV9KHIpfSxoVVdQOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuKCJtclNHIiksbigiQ2NuRyIpLG4oIklwMFIiKSxuKCJPemZCIik7dmFyIGk9ZnVuY3Rpb24oKXt9fSxpTHhROmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTt2YXIgaT0hMSxyPXtQcm9taXNlOnZvaWQgMCxzZXQgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyh0KXtpPXR9LGdldCB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKCl7cmV0dXJuIGl9fX0saWhZWTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBpfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gb30pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KSxuLmQoZSwiZyIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLG4uZChlLCJoIixmdW5jdGlvbigpe3JldHVybiBwfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBsfSksbi5kKGUsImwiLGZ1bmN0aW9uKCl7cmV0dXJuIGh9KSxuLmQoZSwibSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsIm8iLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwibiIsZnVuY3Rpb24oKXtyZXR1cm4gdn0pO3ZhciBpPWZ1bmN0aW9uKCl7fSxyPWZ1bmN0aW9uKCl7fSxvPSIqIjtmdW5jdGlvbiBhKHQsZSl7cmV0dXJue3R5cGU6NyxuYW1lOnQsZGVmaW5pdGlvbnM6ZSxvcHRpb25zOnt9fX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjQsc3R5bGVzOmUsdGltaW5nczp0fX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPW51bGwpLHt0eXBlOjMsc3RlcHM6dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9bnVsbCkse3R5cGU6MixzdGVwczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gbCh0KXtyZXR1cm57dHlwZTo2LHN0eWxlczp0LG9mZnNldDpudWxsfX1mdW5jdGlvbiBmKHQsZSxuKXtyZXR1cm57dHlwZTowLG5hbWU6dCxzdHlsZXM6ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGgodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1udWxsKSx7dHlwZToxLGV4cHI6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PW51bGwpLHt0eXBlOjksb3B0aW9uczp0fX1mdW5jdGlvbiBwKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49bnVsbCkse3R5cGU6MTEsc2VsZWN0b3I6dCxhbmltYXRpb246ZSxvcHRpb25zOm59fWZ1bmN0aW9uIG0odCl7UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4odCl9dmFyIHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9dCtlfXJldHVybiB0LnByb3RvdHlwZS5fb25GaW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRvbmVGbnM9W10pfSx0LnByb3RvdHlwZS5vblN0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX29uRG9uZUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5vbkRlc3Ryb3k9ZnVuY3Rpb24odCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLmhhc1N0YXJ0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe30sdC5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfSx0LnByb3RvdHlwZS50cmlnZ2VyTWljcm90YXNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczttKGZ1bmN0aW9uKCl7cmV0dXJuIHQuX29uRmluaXNoKCl9KX0sdC5wcm90b3R5cGUuX29uU3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uU3RhcnRGbnM9W119LHQucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7fSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9LHQucHJvdG90eXBlLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQpe30sdC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdC5wcm90b3R5cGUudHJpZ2dlckNhbGxiYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSxlLmxlbmd0aD0wfSx0fSgpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDt2YXIgbj0wLGk9MCxyPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/bShmdW5jdGlvbigpe3JldHVybiBlLl9vbkZpbmlzaCgpfSk6dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5vbkRvbmUoZnVuY3Rpb24oKXsrK249PW8mJmUuX29uRmluaXNoKCl9KSx0Lm9uRGVzdHJveShmdW5jdGlvbigpeysraT09byYmZS5fb25EZXN0cm95KCl9KSx0Lm9uU3RhcnQoZnVuY3Rpb24oKXsrK3I9PW8mJmUuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUudG90YWxUaW1lKX0sMCl9cmV0dXJuIHQucHJvdG90eXBlLl9vbkZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLHRoaXMuX29uRG9uZUZucz1bXSl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5pbml0KCl9KX0sdC5wcm90b3R5cGUub25TdGFydD1mdW5jdGlvbih0KXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9LHQucHJvdG90eXBlLl9vblN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSksdGhpcy5fb25TdGFydEZucz1bXSl9LHQucHJvdG90eXBlLm9uRG9uZT1mdW5jdGlvbih0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX0sdC5wcm90b3R5cGUub25EZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBsYXkoKX0pfSx0LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhdXNlKCl9KX0sdC5wcm90b3R5cGUucmVzdGFydD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3RhcnQoKX0pfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbmlzaCgpfSl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9vbkRlc3Ryb3koKX0sdC5wcm90b3R5cGUuX29uRGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRlc3Ryb3koKX0pLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc2V0KCl9KSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX0sdC5wcm90b3R5cGUuc2V0UG9zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LnRvdGFsVGltZT9NYXRoLm1pbigxLGUvdC50b3RhbFRpbWUpOjE7dC5zZXRQb3NpdGlvbihuKX0pfSx0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMucGxheWVycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0UG9zaXRpb24oKTt0PU1hdGgubWluKG4sdCl9KSx0fSx0LnByb3RvdHlwZS5iZWZvcmVEZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS50cmlnZ2VyQ2FsbGJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pLGUubGVuZ3RoPTB9LHR9KCksZz0iISJ9LGlzYnk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RofX0samxabTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBffSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHB9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZChlLCJlIixmdW5jdGlvbigpe3JldHVybiB2fSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYn0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIm42Z0ciKSxvPW4oIlloYk8iKSxhPShuKCJpaFlZIiksbigiNGMzNSIpKSxzPW4oIks5SWEiKSx1PW4oInB1Z1QiKSxjPW4oInAwaWIiKSxsPW4oInAwU2oiKSxmPW4oIlZuRC8iKSxoPW4oInQ5ZloiKSxkPW4oIllTaDIiKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt2YXIgZT1udWxsIT09dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIGUuX2hpZGVUb2dnbGU9ITEsZS5kaXNwbGF5TW9kZT0iZGVmYXVsdCIsZX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KHIuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZX0oby5hKSxtPTAseT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLGUsbixpKXx8dGhpcztyZXR1cm4gby5fdmlld0NvbnRhaW5lclJlZj1yLG8uX2hpZGVUb2dnbGU9ITEsby5faW5wdXRDaGFuZ2VzPW5ldyBzLmEsby5faGVhZGVySWQ9Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLSIrbSsrLG8uYWNjb3JkaW9uPWUsb31yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsImhpZGVUb2dnbGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGlkZVRvZ2dsZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2hpZGVUb2dnbGU9T2JqZWN0KHIuYikodCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuX2dldEhpZGVUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY2NvcmRpb24/dGhpcy5hY2NvcmRpb24uaGlkZVRvZ2dsZTp0aGlzLmhpZGVUb2dnbGV9LGUucHJvdG90eXBlLl9oYXNTcGFjaW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmFjY29yZGlvbiYmImRlZmF1bHQiPT09KHRoaXMuZXhwYW5kZWQ/dGhpcy5hY2NvcmRpb24uZGlzcGxheU1vZGU6dGhpcy5fZ2V0RXhwYW5kZWRTdGF0ZSgpKX0sZS5wcm90b3R5cGUuX2dldEV4cGFuZGVkU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQifSxlLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2xhenlDb250ZW50JiZ0aGlzLm9wZW5lZC5waXBlKE9iamVjdChsLmEpKG51bGwpLE9iamVjdChmLmEpKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZXhwYW5kZWQmJiF0Ll9wb3J0YWx9KSxPYmplY3QoaC5hKSgxKSkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dC5fcG9ydGFsPW5ldyBhLmQodC5fbGF6eUNvbnRlbnQuX3RlbXBsYXRlLHQuX3ZpZXdDb250YWluZXJSZWYpfSl9LGUucHJvdG90eXBlLm5nT25DaGFuZ2VzPWZ1bmN0aW9uKHQpe3RoaXMuX2lucHV0Q2hhbmdlcy5uZXh0KHQpfSxlLnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3QucHJvdG90eXBlLm5nT25EZXN0cm95LmNhbGwodGhpcyksdGhpcy5faW5wdXRDaGFuZ2VzLmNvbXBsZXRlKCl9LGUucHJvdG90eXBlLl9ib2R5QW5pbWF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWxlbWVudC5jbGFzc0xpc3Qsbj10LnBoYXNlTmFtZSxpPXQudG9TdGF0ZTsiZG9uZSI9PT1uJiYiZXhwYW5kZWQiPT09aT9lLmFkZCgibWF0LWV4cGFuZGVkIik6InN0YXJ0Ij09PW4mJiJjb2xsYXBzZWQiPT09aSYmZS5yZW1vdmUoIm1hdC1leHBhbmRlZCIpfSxlfShvLmIpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3ZhciByPXRoaXM7dGhpcy5wYW5lbD10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9mb2N1c01vbml0b3I9bix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3BhcmVudENoYW5nZVN1YnNjcmlwdGlvbj11LmEuRU1QVFksdGhpcy5fcGFyZW50Q2hhbmdlU3Vic2NyaXB0aW9uPU9iamVjdChjLmEpKHQub3BlbmVkLHQuY2xvc2VkLHQuX2lucHV0Q2hhbmdlcy5waXBlKE9iamVjdChmLmEpKGZ1bmN0aW9uKHQpe3JldHVybiEoIXQuaGlkZVRvZ2dsZSYmIXQuZGlzYWJsZWQpfSkpKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gci5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxuLm1vbml0b3IoZS5uYXRpdmVFbGVtZW50KX1yZXR1cm4gdC5wcm90b3R5cGUuX3RvZ2dsZT1mdW5jdGlvbigpe3RoaXMucGFuZWwudG9nZ2xlKCl9LHQucHJvdG90eXBlLl9pc0V4cGFuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuZXhwYW5kZWR9LHQucHJvdG90eXBlLl9nZXRFeHBhbmRlZFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFuZWwuX2dldEV4cGFuZGVkU3RhdGUoKX0sdC5wcm90b3R5cGUuX2dldFBhbmVsSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYW5lbC5pZH0sdC5wcm90b3R5cGUuX3Nob3dUb2dnbGU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5wYW5lbC5oaWRlVG9nZ2xlJiYhdGhpcy5wYW5lbC5kaXNhYmxlZH0sdC5wcm90b3R5cGUuX2tleWRvd249ZnVuY3Rpb24odCl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBkLmo6Y2FzZSBkLmQ6dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZSgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KX0sdH0oKSxnPWZ1bmN0aW9uKCl7fSxiPWZ1bmN0aW9uKCl7fSxfPWZ1bmN0aW9uKCl7fX0sbExBUDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4geH0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBTfSk7dmFyIGk9bigiSXAwUiIpLHI9bigiQ2NuRyIpLG89bigiSzlJYSIpLGE9bigicHVnVCIpLHM9bigiRi9YTCIpLHU9bigiWVNoMiIpLGM9bigieE15RSIpLGw9bigiR2kzaSIpLGY9bigiVm5ELyIpLGg9bigiNjdZLyIpLGQ9bigidDlmWiIpLHA9bigibXJTRyIpLG09bigiZFdaZyIpO24oIm42Z0ciKTt2YXIgeT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9bnVsbCE9PXQmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiBlLl9vcmlnaW49InByb2dyYW0iLGV9cmV0dXJuIE9iamVjdChwLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0Rm9jdXNPcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9LGUucHJvdG90eXBlLnNldEFjdGl2ZUl0ZW09ZnVuY3Rpb24oZSl7dC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbS5jYWxsKHRoaXMsZSksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uZm9jdXModGhpcy5fb3JpZ2luKX0sZX0oZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXRoaXM7dGhpcy5faXRlbXM9dCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9LTEsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IG8uYSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249YS5hLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX3NraXBQcmVkaWNhdGVGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNhYmxlZH0sdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IG8uYSx0aGlzLmNoYW5nZT1uZXcgby5hLHQgaW5zdGFuY2VvZiByLkImJnQuY2hhbmdlcy5zdWJzY3JpYmUoZnVuY3Rpb24odCl7aWYoZS5fYWN0aXZlSXRlbSl7dmFyIG49dC50b0FycmF5KCkuaW5kZXhPZihlLl9hY3RpdmVJdGVtKTtuPi0xJiZuIT09ZS5fYWN0aXZlSXRlbUluZGV4JiYoZS5fYWN0aXZlSXRlbUluZGV4PW4pfX0pfXJldHVybiB0LnByb3RvdHlwZS5za2lwUHJlZGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoV3JhcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwPSEwLHRoaXN9LHQucHJvdG90eXBlLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD0hMCksdGhpcy5fdmVydGljYWw9dCx0aGlzfSx0LnByb3RvdHlwZS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ob3Jpem9udGFsPXQsdGhpc30sdC5wcm90b3R5cGUud2l0aFR5cGVBaGVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHZvaWQgMD09PXQmJih0PTIwMCksdGhpcy5faXRlbXMubGVuZ3RoJiZ0aGlzLl9pdGVtcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmdldExhYmVsfSkpdGhyb3cgRXJyb3IoIkxpc3RLZXlNYW5hZ2VyIGl0ZW1zIGluIHR5cGVhaGVhZCBtb2RlIG11c3QgaW1wbGVtZW50IHRoZSBgZ2V0TGFiZWxgIG1ldGhvZC4iKTtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5wdXNoKHQpfSksT2JqZWN0KGwuYSkodCksT2JqZWN0KGYuYSkoZnVuY3Rpb24oKXtyZXR1cm4gZS5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9KSxPYmplY3QoaC5hKShmdW5jdGlvbigpe3JldHVybiBlLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKX0pKS5zdWJzY3JpYmUoZnVuY3Rpb24odCl7Zm9yKHZhciBuPWUuX2dldEl0ZW1zQXJyYXkoKSxpPTE7aTxuLmxlbmd0aCsxO2krKyl7dmFyIHI9KGUuX2FjdGl2ZUl0ZW1JbmRleCtpKSVuLmxlbmd0aCxvPW5bcl07aWYoIWUuX3NraXBQcmVkaWNhdGVGbihvKSYmMD09PW8uZ2V0TGFiZWwoKS50b1VwcGVyQ2FzZSgpLnRyaW0oKS5pbmRleE9mKHQpKXtlLnNldEFjdGl2ZUl0ZW0ocik7YnJlYWt9fWUuX3ByZXNzZWRMZXR0ZXJzPVtdfSksdGhpc30sdC5wcm90b3R5cGUuc2V0QWN0aXZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3RpdmVJdGVtSW5kZXg7dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX0sdC5wcm90b3R5cGUub25LZXlkb3duPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZTtzd2l0Y2goZSl7Y2FzZSB1Lms6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgdS5iOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5sOmlmKHRoaXMuX3ZlcnRpY2FsKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIHUuaTppZigibHRyIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgdS5nOmlmKCJsdHIiPT09dGhpcy5faG9yaXpvbnRhbCl7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31pZigicnRsIj09PXRoaXMuX2hvcml6b250YWwpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47ZGVmYXVsdDpyZXR1cm4gdm9pZCh0LmtleSYmMT09PXQua2V5Lmxlbmd0aD90aGlzLl9sZXR0ZXJLZXlTdHJlYW0ubmV4dCh0LmtleS50b0xvY2FsZVVwcGVyQ2FzZSgpKTooZT49dS5hJiZlPD11Lm18fGU+PXUubiYmZTw9dS5oKSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpfXRoaXMuX3ByZXNzZWRMZXR0ZXJzPVtdLHQucHJldmVudERlZmF1bHQoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhY3RpdmVJdGVtSW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYWN0aXZlSXRlbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnNldEZpcnN0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KDAsMSl9LHQucHJvdG90eXBlLnNldExhc3RJdGVtQWN0aXZlPWZ1bmN0aW9uKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfSx0LnByb3RvdHlwZS5zZXROZXh0SXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9LHQucHJvdG90eXBlLnNldFByZXZpb3VzSXRlbUFjdGl2ZT1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwJiZ0aGlzLl93cmFwP3RoaXMuc2V0TGFzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgtMSl9LHQucHJvdG90eXBlLnVwZGF0ZUFjdGl2ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW1JbmRleD1uLHRoaXMuX2FjdGl2ZUl0ZW09ZVtuXX0sdC5wcm90b3R5cGUudXBkYXRlQWN0aXZlSXRlbUluZGV4PWZ1bmN0aW9uKHQpe3RoaXMudXBkYXRlQWN0aXZlSXRlbSh0KX0sdC5wcm90b3R5cGUuX3NldEFjdGl2ZUl0ZW1CeURlbHRhPWZ1bmN0aW9uKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSW5XcmFwTW9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLG49MTtuPD1lLmxlbmd0aDtuKyspe3ZhciBpPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCpuK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbaV0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShpKX19LHQucHJvdG90eXBlLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlPWZ1bmN0aW9uKHQpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0LHQpfSx0LnByb3RvdHlwZS5fc2V0QWN0aXZlSXRlbUJ5SW5kZXg9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoblt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oblt0XSk7KWlmKCFuW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fSx0LnByb3RvdHlwZS5fZ2V0SXRlbXNBcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIHIuQj90aGlzLl9pdGVtcy50b0FycmF5KCk6dGhpcy5faXRlbXN9LHR9KCkpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX3BsYXRmb3JtPXR9cmV0dXJuIHQucHJvdG90eXBlLmlzRGlzYWJsZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfSx0LnByb3RvdHlwZS5pc1Zpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRDbGllbnRSZWN0cyYmdC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9KHQpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHl9LHQucHJvdG90eXBlLmlzVGFiYmFibGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTt2YXIgZT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fWNhdGNoKHQpe3JldHVybiBudWxsfX0odC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpO2lmKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZigtMT09PWIoZSkpcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYib2JqZWN0Ij09PW4pcmV0dXJuITE7aWYoKHRoaXMuX3BsYXRmb3JtLkJMSU5LfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQpJiYhdGhpcy5pc1Zpc2libGUoZSkpcmV0dXJuITF9dmFyIGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHI9Yih0KTtpZih0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpcmV0dXJuLTEhPT1yO2lmKCJpZnJhbWUiPT09aSlyZXR1cm4hMTtpZigiYXVkaW8iPT09aSl7aWYoIXQuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKXJldHVybiExO2lmKHRoaXMuX3BsYXRmb3JtLkJMSU5LKXJldHVybiEwfWlmKCJ2aWRlbyI9PT1pKXtpZighdC5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJnRoaXMuX3BsYXRmb3JtLlRSSURFTlQpcmV0dXJuITE7aWYodGhpcy5fcGxhdGZvcm0uQkxJTkt8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gpcmV0dXJuITB9cmV0dXJuKCJvYmplY3QiIT09aXx8IXRoaXMuX3BsYXRmb3JtLkJMSU5LJiYhdGhpcy5fcGxhdGZvcm0uV0VCS0lUKSYmISh0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPSJpbnB1dCI9PT1lJiZ0LnR5cGU7cmV0dXJuInRleHQiPT09bnx8InBhc3N3b3JkIj09PW58fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9KHQpKSYmdC50YWJJbmRleD49MH0sdC5wcm90b3R5cGUuaXNGb2N1c2FibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiFmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImlucHV0Ij09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSh0KSYmImhpZGRlbiI9PXQudHlwZX0odCkmJihmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8ImJ1dHRvbiI9PT1lfHwidGV4dGFyZWEiPT09ZX0odCl8fGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4iYSI9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0odCkmJnQuaGFzQXR0cmlidXRlKCJocmVmIil9KHQpfHx0Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGcodCkpfSh0KSYmIXRoaXMuaXNEaXNhYmxlZCh0KSYmdGhpcy5pc1Zpc2libGUodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlcpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBnKHQpe2lmKCF0Lmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09dC50YWJJbmRleClyZXR1cm4hMTt2YXIgZT10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4iLTMyNzY4IiE9ZSYmISghZXx8aXNOYU4ocGFyc2VJbnQoZSwxMCkpKX1mdW5jdGlvbiBiKHQpe2lmKCFnKHQpKXJldHVybiBudWxsO3ZhciBlPXBhcnNlSW50KHQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGUpPy0xOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkscil7dm9pZCAwPT09ciYmKHI9ITEpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPW4sdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9lbmFibGVkPSEwLHJ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImVuYWJsZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fc3RhcnRBbmNob3IudGFiSW5kZXg9dGhpcy5fZW5kQW5jaG9yLnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9zdGFydEFuY2hvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl9lbmRBbmNob3ImJnRoaXMuX2VuZEFuY2hvci5wYXJlbnROb2RlJiZ0aGlzLl9lbmRBbmNob3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbmRBbmNob3IpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsfSx0LnByb3RvdHlwZS5hdHRhY2hBbmNob3JzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixmdW5jdGlvbigpe3QuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLGZ1bmN0aW9uKCl7dC5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCl9KSx0Ll9lbGVtZW50LnBhcmVudE5vZGUmJih0Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQuX3N0YXJ0QW5jaG9yLHQuX2VsZW1lbnQpLHQuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodC5fZW5kQW5jaG9yLHQuX2VsZW1lbnQubmV4dFNpYmxpbmcpKX0pfSx0LnByb3RvdHlwZS5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7dC5fZXhlY3V0ZU9uU3RhYmxlKGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5mb2N1c0luaXRpYWxFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpKX0pfSl9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3QuX2V4ZWN1dGVPblN0YWJsZShmdW5jdGlvbigpe3JldHVybiBlKHQuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCkpfSl9KX0sdC5wcm90b3R5cGUuX2dldFJlZ2lvbkJvdW5kYXJ5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltjZGstZm9jdXMtcmVnaW9uLSIrdCsiXSwgW2Nka0ZvY3VzUmVnaW9uIit0KyJdLCBbY2RrLWZvY3VzLSIrdCsiXSIpLG49MDtuPGUubGVuZ3RoO24rKyllW25dLmhhc0F0dHJpYnV0ZSgiY2RrLWZvY3VzLSIrdCk/Y29uc29sZS53YXJuKCJGb3VuZCB1c2Ugb2YgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgJ2Nkay1mb2N1cy0iK3QrIicsIHVzZSAnY2RrRm9jdXNSZWdpb24iK3QrIicgaW5zdGVhZC4gVGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuMC4iLGVbbl0pOmVbbl0uaGFzQXR0cmlidXRlKCJjZGstZm9jdXMtcmVnaW9uLSIrdCkmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtcmVnaW9uLSIrdCsiJywgdXNlICdjZGtGb2N1c1JlZ2lvbiIrdCsiJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wLiIsZVtuXSk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX0sdC5wcm90b3R5cGUuZm9jdXNJbml0aWFsRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtyZXR1cm4gdD8odC5oYXNBdHRyaWJ1dGUoImNkay1mb2N1cy1pbml0aWFsIikmJmNvbnNvbGUud2FybigiRm91bmQgdXNlIG9mIGRlcHJlY2F0ZWQgYXR0cmlidXRlICdjZGstZm9jdXMtaW5pdGlhbCcsIHVzZSAnY2RrRm9jdXNJbml0aWFsJyBpbnN0ZWFkLiBUaGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIDcuMC4wIix0KSx0LmZvY3VzKCksITApOnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpfSx0LnByb3RvdHlwZS5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIHQmJnQuZm9jdXMoKSwhIXR9LHQucHJvdG90eXBlLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gdCYmdC5mb2N1cygpLCEhdH0sdC5wcm90b3R5cGUuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW25dKTpudWxsO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9ZVtuXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbbl0pOm51bGw7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX2NyZWF0ZUFuY2hvcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnRhYkluZGV4PXRoaXMuX2VuYWJsZWQ/MDotMSx0LmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSx0LmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10cmFwLWFuY2hvciIpLHR9LHQucHJvdG90eXBlLl9leGVjdXRlT25TdGFibGU9ZnVuY3Rpb24odCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZShPYmplY3QoZC5hKSgxKSkuc3Vic2NyaWJlKHQpfSx0fSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt0aGlzLl9jaGVja2VyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fZG9jdW1lbnQ9bn1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgXyh0LHRoaXMuX2NoZWNrZXIsdGhpcy5fbmdab25lLHRoaXMuX2RvY3VtZW50LGUpfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5XKSh2KSxPYmplY3Qoci5XKShyLngpLE9iamVjdChyLlcpKGkuZCkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX25nWm9uZT10LHRoaXMuX3BsYXRmb3JtPWUsdGhpcy5fb3JpZ2luPW51bGwsdGhpcy5fd2luZG93Rm9jdXNlZD0hMSx0aGlzLl9lbGVtZW50SW5mbz1uZXcgTWFwLHRoaXMuX3VucmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt9LHRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5tb25pdG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZih2b2lkIDA9PT1lJiYoZT0hMSksIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gT2JqZWN0KHMuYSkobnVsbCk7aWYodGhpcy5fZWxlbWVudEluZm8uaGFzKHQpKXt2YXIgaT10aGlzLl9lbGVtZW50SW5mby5nZXQodCk7cmV0dXJuIGkuY2hlY2tDaGlsZHJlbj1lLGkuc3ViamVjdC5hc09ic2VydmFibGUoKX12YXIgcj17dW5saXN0ZW46ZnVuY3Rpb24oKXt9LGNoZWNrQ2hpbGRyZW46ZSxzdWJqZWN0Om5ldyBvLmF9O3RoaXMuX2VsZW1lbnRJbmZvLnNldCh0LHIpLHRoaXMuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpO3ZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBuLl9vbkZvY3VzKGUsdCl9LHU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uX29uQmx1cihlLHQpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsYSwhMCksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix1LCEwKX0pLHIudW5saXN0ZW49ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixhLCEwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHUsITApfSxyLnN1YmplY3QuYXNPYnNlcnZhYmxlKCl9LHQucHJvdG90eXBlLnN0b3BNb25pdG9yaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2VsZW1lbnRJbmZvLmdldCh0KTtlJiYoZS51bmxpc3RlbigpLGUuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXModCksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKHQpLHRoaXMuX2RlY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudCgpKX0sdC5wcm90b3R5cGUuZm9jdXNWaWE9ZnVuY3Rpb24odCxlKXt0aGlzLl9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZShlKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5mb2N1cyYmdC5mb2N1cygpfSx0LnByb3RvdHlwZS5uZ09uRGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaChmdW5jdGlvbihlLG4pe3JldHVybiB0LnN0b3BNb25pdG9yaW5nKG4pfSl9LHQucHJvdG90eXBlLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXt2YXIgZT1mdW5jdGlvbigpe3QuX2xhc3RUb3VjaFRhcmdldD1udWxsLHQuX3NldE9yaWdpbkZvckN1cnJlbnRFdmVudFF1ZXVlKCJrZXlib2FyZCIpfSxuPWZ1bmN0aW9uKCl7dC5fbGFzdFRvdWNoVGFyZ2V0fHx0Ll9zZXRPcmlnaW5Gb3JDdXJyZW50RXZlbnRRdWV1ZSgibW91c2UiKX0saT1mdW5jdGlvbihlKXtudWxsIT10Ll90b3VjaFRpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHQuX3RvdWNoVGltZW91dElkKSx0Ll9sYXN0VG91Y2hUYXJnZXQ9ZS50YXJnZXQsdC5fdG91Y2hUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll9sYXN0VG91Y2hUYXJnZXQ9bnVsbH0sNjUwKX0scj1mdW5jdGlvbigpe3QuX3dpbmRvd0ZvY3VzZWQ9ITAsdC5fd2luZG93Rm9jdXNUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0Ll93aW5kb3dGb2N1c2VkPSExfSl9O3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsaSwhT2JqZWN0KG0uYykoKXx8e3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIscil9KSx0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZSwhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixuLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixpLCFPYmplY3QobS5jKSgpfHx7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIixyKSxjbGVhclRpbWVvdXQodC5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0Ll90b3VjaFRpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHQuX29yaWdpblRpbWVvdXRJZCl9fX0sdC5wcm90b3R5cGUuX3RvZ2dsZUNsYXNzPWZ1bmN0aW9uKHQsZSxuKXtuP3QuY2xhc3NMaXN0LmFkZChlKTp0LmNsYXNzTGlzdC5yZW1vdmUoZSl9LHQucHJvdG90eXBlLl9zZXRDbGFzc2VzPWZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudEluZm8uZ2V0KHQpJiYodGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLWZvY3VzZWQiLCEhZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1lKSx0aGlzLl90b2dnbGVDbGFzcyh0LCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWUpLHRoaXMuX3RvZ2dsZUNsYXNzKHQsImNkay1tb3VzZS1mb2N1c2VkIiwibW91c2UiPT09ZSksdGhpcy5fdG9nZ2xlQ2xhc3ModCwiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09ZSkpfSx0LnByb3RvdHlwZS5fc2V0T3JpZ2luRm9yQ3VycmVudEV2ZW50UXVldWU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoZnVuY3Rpb24oKXtlLl9vcmlnaW49dCxlLl9vcmlnaW5UaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLl9vcmlnaW49bnVsbH0pfSl9LHQucHJvdG90eXBlLl93YXNDYXVzZWRCeVRvdWNoPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGFyZ2V0O3JldHVybiB0aGlzLl9sYXN0VG91Y2hUYXJnZXQgaW5zdGFuY2VvZiBOb2RlJiZlIGluc3RhbmNlb2YgTm9kZSYmKGU9PT10aGlzLl9sYXN0VG91Y2hUYXJnZXR8fGUuY29udGFpbnModGhpcy5fbGFzdFRvdWNoVGFyZ2V0KSl9LHQucHJvdG90eXBlLl9vbkZvY3VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZWxlbWVudEluZm8uZ2V0KGUpO2lmKG4mJihuLmNoZWNrQ2hpbGRyZW58fGU9PT10LnRhcmdldCkpe3ZhciBpPXRoaXMuX29yaWdpbjtpfHwoaT10aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOnRoaXMuX3dhc0NhdXNlZEJ5VG91Y2godCk/InRvdWNoIjoicHJvZ3JhbSIpLHRoaXMuX3NldENsYXNzZXMoZSxpKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxpKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49aX19LHQucHJvdG90eXBlLl9vbkJsdXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9lbGVtZW50SW5mby5nZXQoZSk7IW58fG4uY2hlY2tDaGlsZHJlbiYmdC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmZS5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhlKSx0aGlzLl9lbWl0T3JpZ2luKG4uc3ViamVjdCxudWxsKSl9LHQucHJvdG90eXBlLl9lbWl0T3JpZ2luPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbmdab25lLnJ1bihmdW5jdGlvbigpe3JldHVybiB0Lm5leHQoZSl9KX0sdC5wcm90b3R5cGUuX2luY3JlbWVudE1vbml0b3JlZEVsZW1lbnRDb3VudD1mdW5jdGlvbigpezE9PSsrdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50JiZ0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycygpfSx0LnByb3RvdHlwZS5fZGVjcmVtZW50TW9uaXRvcmVkRWxlbWVudENvdW50PWZ1bmN0aW9uKCl7LS10aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnR8fCh0aGlzLl91bnJlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5fdW5yZWdpc3Rlckdsb2JhbExpc3RlbmVycz1mdW5jdGlvbigpe30pfSx0Lm5nSW5qZWN0YWJsZURlZj1PYmplY3Qoci5TKSh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgdChPYmplY3Qoci5XKShyLngpLE9iamVjdChyLlcpKG0uYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBTKHQpe3JldHVybiAwPT09dC5idXR0b25zfX0sbHpsajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiQ2NuRyIpLHI9KG4oIkZWU3kiKSxuKCJGenFjIiksbigiV2Y0cCIpLGkuTmEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6WyIubWF0LWNhcmR7dHJhbnNpdGlvbjpib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllciguNCwwLC4yLDEpO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6MnB4fS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsLjIpLDAgMnB4IDJweCAwIHJnYmEoMCwwLDAsLjE0KSwwIDFweCA1cHggMCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlfVtkaXI9cnRsXSAubWF0LWNhcmQgLm1hdC1kaXZpZGVyLWhvcml6b250YWx7bGVmdDphdXRvO3JpZ2h0OjB9Lm1hdC1jYXJkIC5tYXQtZGl2aWRlci1ob3Jpem9udGFsLm1hdC1kaXZpZGVyLWluc2V0e3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46MH0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdHtib3gtc2hhZG93Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OmFjdGl2ZSl7Lm1hdC1jYXJke291dGxpbmU6c29saWQgMXB4fX0ubWF0LWNhcmQtYWN0aW9ucywubWF0LWNhcmQtY29udGVudCwubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLXRpdGxle2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxNnB4fS5tYXQtY2FyZC1hY3Rpb25ze21hcmdpbi1sZWZ0Oi0xNnB4O21hcmdpbi1yaWdodDotMTZweDtwYWRkaW5nOjhweCAwfS5tYXQtY2FyZC1hY3Rpb25zLWFsaWduLWVuZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtY2FyZC1pbWFnZXt3aWR0aDpjYWxjKDEwMCUgKyA0OHB4KTttYXJnaW46MCAtMjRweCAxNnB4IC0yNHB4fS5tYXQtY2FyZC14bC1pbWFnZXt3aWR0aDoyNDBweDtoZWlnaHQ6MjQwcHg7bWFyZ2luOi04cHh9Lm1hdC1jYXJkLWZvb3RlcntkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4IC0yNHB4IC0yNHB4fS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbnttYXJnaW46MCA0cHh9Lm1hdC1jYXJkLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tYXQtY2FyZC1oZWFkZXItdGV4dHttYXJnaW46MCA4cHh9Lm1hdC1jYXJkLWF2YXRhcntoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2ZsZXgtc2hyaW5rOjB9Lm1hdC1jYXJkLWxnLWltYWdlLC5tYXQtY2FyZC1tZC1pbWFnZSwubWF0LWNhcmQtc20taW1hZ2V7bWFyZ2luOi04cHggMH0ubWF0LWNhcmQtdGl0bGUtZ3JvdXB7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbjowIC04cHh9Lm1hdC1jYXJkLXNtLWltYWdle3dpZHRoOjgwcHg7aGVpZ2h0OjgwcHh9Lm1hdC1jYXJkLW1kLWltYWdle3dpZHRoOjExMnB4O2hlaWdodDoxMTJweH0ubWF0LWNhcmQtbGctaW1hZ2V7d2lkdGg6MTUycHg7aGVpZ2h0OjE1MnB4fUBtZWRpYSAobWF4LXdpZHRoOjU5OXB4KXsubWF0LWNhcmR7cGFkZGluZzoyNHB4IDE2cHh9Lm1hdC1jYXJkLWFjdGlvbnN7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tcmlnaHQ6LThweH0ubWF0LWNhcmQtaW1hZ2V7d2lkdGg6Y2FsYygxMDAlICsgMzJweCk7bWFyZ2luOjE2cHggLTE2cHh9Lm1hdC1jYXJkLXRpdGxlLWdyb3Vwe21hcmdpbjowfS5tYXQtY2FyZC14bC1pbWFnZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1oZWFkZXJ7bWFyZ2luOi04cHggMCAwIDB9Lm1hdC1jYXJkLWZvb3RlcnttYXJnaW4tbGVmdDotMTZweDttYXJnaW4tcmlnaHQ6LTE2cHh9fS5tYXQtY2FyZC1jb250ZW50PjpmaXJzdC1jaGlsZCwubWF0LWNhcmQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubWF0LWNhcmQtY29udGVudD46bGFzdC1jaGlsZDpub3QoLm1hdC1jYXJkLWZvb3RlciksLm1hdC1jYXJkPjpsYXN0LWNoaWxkOm5vdCgubWF0LWNhcmQtZm9vdGVyKXttYXJnaW4tYm90dG9tOjB9Lm1hdC1jYXJkLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LTI0cHh9Lm1hdC1jYXJkPi5tYXQtY2FyZC1hY3Rpb25zOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMTZweDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtYnV0dG9uOmZpcnN0LWNoaWxkLC5tYXQtY2FyZC1hY3Rpb25zIC5tYXQtcmFpc2VkLWJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5tYXQtY2FyZC1zdWJ0aXRsZTpub3QoOmZpcnN0LWNoaWxkKSwubWF0LWNhcmQtdGl0bGU6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLXRvcDotNHB4fS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXN1YnRpdGxlOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmZpcnN0LWNoaWxke21hcmdpbi10b3A6LThweH0ubWF0LWNhcmQ+Lm1hdC1jYXJkLXhsLWltYWdlOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotOHB4fSJdLGRhdGE6e319KSk7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gaS5qYigyLFtpLllhKG51bGwsMCksaS5ZYShudWxsLDEpXSxudWxsLG51bGwpfXZhciBhPWkuTmEoe2VuY2Fwc3VsYXRpb246MixzdHlsZXM6W10sZGF0YTp7fX0pO2Z1bmN0aW9uIHModCl7cmV0dXJuIGkuamIoMixbaS5ZYShudWxsLDApLCh0KCkoKSxpLlBhKDEsMCxudWxsLG51bGwsMSwiZGl2IixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlci10ZXh0Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLGkuWWEobnVsbCwxKSxpLllhKG51bGwsMildLG51bGwsbnVsbCl9fSxtQ2hGOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdH1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pfSxtVnNhOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiQ2NuRyIpO24oIjRjMzUiKSxuKCJpaFlZIiksbigibXJTRyIpLG4oImxMQVAiKSxuKCJXZjRwIiksbigiSzlJYSIpLG4oInAwaWIiKSxuKCJGL1hMIiksbigiaDlEcSIpLG4oInB1Z1QiKSxuKCJuNmdHIiksbigiWVNoMiIpLG4oIlZuRC8iKSxuKCJ0OWZaIiksbigiTUdCUyIpLG4oInpvdG0iKSxuKCI2N1kvIiksbigiMC91USIpLG4oInAwU2oiKSxuKCJueTI0IiksbigiVDFETSIpLG4oIkZGT28iKSxuKCI2MGlVIiksbigiZURrUCIpLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPW5ldyBpLm8oIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fXZhciBhPWZ1bmN0aW9uKCl7fX0sbXJTRzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLG4uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBzfSksbi5kKGUsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIHV9KTt2YXIgaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1lW25dKX07ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9aSh0LGUpLHQucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KG4ucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBuKX12YXIgbz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDtuPGk7bisrKWZvcih2YXIgciBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09ZVtyXSk7cmV0dXJuIHR9O2Z1bmN0aW9uIGEodCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdLG49MDtyZXR1cm4gZT9lLmNhbGwodCk6e25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCYmbj49dC5sZW5ndGgmJih0PXZvaWQgMCkse3ZhbHVlOnQmJnRbbisrXSxkb25lOiF0fX19fWZ1bmN0aW9uIHModCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl07aWYoIW4pcmV0dXJuIHQ7dmFyIGkscixvPW4uY2FsbCh0KSxhPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1lfHxlLS0gPjApJiYhKGk9by5uZXh0KCkpLmRvbmU7KWEucHVzaChpLnZhbHVlKX1jYXRjaCh0KXtyPXtlcnJvcjp0fX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobj1vLnJldHVybikmJm4uY2FsbChvKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19cmV0dXJuIGF9ZnVuY3Rpb24gdSgpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0PXQuY29uY2F0KHMoYXJndW1lbnRzW2VdKSk7cmV0dXJuIHR9fSxuNmdHOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbnVsbCE9dCYmIiIrdCE9ImZhbHNlIn1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTApLGZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKSYmIWlzTmFOKE51bWJlcih0KSl9KHQpP051bWJlcih0KTplfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpbdF19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbnVsbD09dD8iIjoic3RyaW5nIj09dHlwZW9mIHQ/dDp0KyJweCJ9bi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pLG4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KX0sbmtZNzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LnNjaGVkdWxlfW4uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBpfSl9LG55MjQ6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIk1HQlMiKSxvPW4oInpvdG0iKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBzKHQpKX19dmFyIHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMubm90aWZpZXI9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyB1KHQpLGk9T2JqZWN0KG8uYSkobix0aGlzLm5vdGlmaWVyKTtyZXR1cm4gaSYmIWkuY2xvc2VkPyhuLmFkZChpKSxlLnN1YnNjcmliZShuKSk6bn0sdH0oKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUpfHx0aGlzfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dGhpcy5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZT1mdW5jdGlvbigpe30sZX0oci5hKX0scDBTajpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIklVVGIiKSxyPW4oIlBVOEwiKSxvPW4oIkc1SjEiKSxhPW4oIm5rWTciKSxzPW4oIkYvWEwiKSx1PW4oIjAvdVEiKSxjPW4oIlR4amciKTtmdW5jdGlvbiBsKCl7Zm9yKHZhciB0PVtdLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10W3QubGVuZ3RoLTFdO09iamVjdChhLmEpKG4pP3QucG9wKCk6bj1udWxsO3ZhciBsPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gMT09PXQubGVuZ3RofHwyPT09dC5sZW5ndGgmJk9iamVjdChhLmEpKHRbMV0pP09iamVjdCh1LmEpKHRbMF0pOk9iamVjdChjLmEpKCkocy5hLmFwcGx5KHZvaWQgMCx0KSl9KDEhPT1sfHxuP2w+MD9PYmplY3QoaS5hKSh0LG4pOk9iamVjdChvLmIpKG4pOk9iamVjdChyLmEpKHRbMF0pLGUpfX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pfSxwMGliOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCI2YmxGIikscj1uKCJua1k3Iiksbz1uKCJabjhEIiksYT1uKCJJVVRiIik7ZnVuY3Rpb24gcygpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1udWxsLHU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gT2JqZWN0KHIuYSkodSk/KHM9dC5wb3AoKSx0Lmxlbmd0aD4xJiYibnVtYmVyIj09dHlwZW9mIHRbdC5sZW5ndGgtMV0mJihuPXQucG9wKCkpKToibnVtYmVyIj09dHlwZW9mIHUmJihuPXQucG9wKCkpLG51bGw9PT1zJiYxPT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIGkuYT90WzBdOk9iamVjdChvLmEpKG4pKE9iamVjdChhLmEpKHQscykpfX0scE1uUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIGk9bigiQ2NuRyIpLHI9bigiWllDaSIpLG89aS5OYSh7ZW5jYXBzdWxhdGlvbjoyLHN0eWxlczpbXSxkYXRhOnt9fSk7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaS5qYigwLFsodCgpKCksaS5QYSgwLDE2Nzc3MjE2LG51bGwsbnVsbCwxLCJyb3V0ZXItb3V0bGV0IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSxpLk9hKDEsMjEyOTkyLG51bGwsMCxyLm8sW3IuYixpLk8saS5qLFs4LG51bGxdLGkuaF0sbnVsbCxudWxsKV0sZnVuY3Rpb24odCxlKXt0KGUsMSwwKX0sbnVsbCl9dmFyIHM9aS5MYSgibmctY29tcG9uZW50IixyLnMsZnVuY3Rpb24odCl7cmV0dXJuIGkuamIoMCxbKHQoKSgpLGkuUGEoMCwwLG51bGwsbnVsbCwxLCJuZy1jb21wb25lbnQiLFtdLG51bGwsbnVsbCxudWxsLGEsbykpLGkuT2EoMSw0OTE1MixudWxsLDAsci5zLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9LHt9LHt9LFtdKX0scHNXMDpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiB1fSk7dmFyIGk9bigibXJTRyIpLHI9bigiem90bSIpLG89bigiTUdCUyIpLGE9bigiNjdZLyIpLHM9bigiMC91USIpO2Z1bmN0aW9uIHUodCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKGkpe3JldHVybiBpLnBpcGUodShmdW5jdGlvbihuLGkpe3JldHVybiBPYmplY3Qocy5hKSh0KG4saSkpLnBpcGUoT2JqZWN0KGEuYSkoZnVuY3Rpb24odCxyKXtyZXR1cm4gZShuLHQsaSxyKX0pKX0sbikpfTooIm51bWJlciI9PXR5cGVvZiBlJiYobj1lKSxmdW5jdGlvbihlKXtyZXR1cm4gZS5saWZ0KG5ldyBjKHQsbikpfSl9dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dm9pZCAwPT09ZSYmKGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSx0aGlzLnByb2plY3Q9dCx0aGlzLmNvbmN1cnJlbnQ9ZX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgbCh0LHRoaXMucHJvamVjdCx0aGlzLmNvbmN1cnJlbnQpKX0sdH0oKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZvaWQgMD09PWkmJihpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7dmFyIHI9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHIucHJvamVjdD1uLHIuY29uY3VycmVudD1pLHIuaGFzQ29tcGxldGVkPSExLHIuYnVmZmVyPVtdLHIuYWN0aXZlPTAsci5pbmRleD0wLHJ9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RoaXMuYWN0aXZlPHRoaXMuY29uY3VycmVudD90aGlzLl90cnlOZXh0KHQpOnRoaXMuYnVmZmVyLnB1c2godCl9LGUucHJvdG90eXBlLl90cnlOZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLG49dGhpcy5pbmRleCsrO3RyeXtlPXRoaXMucHJvamVjdCh0LG4pfWNhdGNoKHQpe3JldHVybiB2b2lkIHRoaXMuZGVzdGluYXRpb24uZXJyb3IodCl9dGhpcy5hY3RpdmUrKyx0aGlzLl9pbm5lclN1YihlLHQsbil9LGUucHJvdG90eXBlLl9pbm5lclN1Yj1mdW5jdGlvbih0LGUsbil7dGhpcy5hZGQoT2JqZWN0KHIuYSkodGhpcyx0LGUsbikpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmhhc0NvbXBsZXRlZD0hMCwwPT09dGhpcy5hY3RpdmUmJjA9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJnRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixpLHIpe3RoaXMuZGVzdGluYXRpb24ubmV4dChlKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idWZmZXI7dGhpcy5yZW1vdmUodCksdGhpcy5hY3RpdmUtLSxlLmxlbmd0aD4wP3RoaXMuX25leHQoZS5zaGlmdCgpKTowPT09dGhpcy5hY3RpdmUmJnRoaXMuaGFzQ29tcGxldGVkJiZ0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KG8uYSl9LHB1Z1Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJpc2J5Iikscj1uKCJNY1NvIiksbz1uKCIyQmRqIiksYT1uKCJFaG1rIikscz1uKCJlaWhzIiksdT1uKCJtclNHIiksYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2FsbCh0aGlzLG4/bi5sZW5ndGgrIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuICAiK24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUrMSsiKSAiK3QudG9TdHJpbmcoKX0pLmpvaW4oIlxuICAiKToiIil8fHRoaXM7cmV0dXJuIGkuZXJyb3JzPW4saS5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoaSxlLnByb3RvdHlwZSksaX1yZXR1cm4gdS5iKGUsdCksZX0oRXJyb3IpO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBsfSk7dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGwsdCYmKHRoaXMuX3Vuc3Vic2NyaWJlPXQpfXZhciBlO3JldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciB0LGU9ITE7aWYoIXRoaXMuY2xvc2VkKXt2YXIgbj10aGlzLl9wYXJlbnQsdT10aGlzLl9wYXJlbnRzLGw9dGhpcy5fdW5zdWJzY3JpYmUsaD10aGlzLl9zdWJzY3JpcHRpb25zO3RoaXMuY2xvc2VkPSEwLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuX3BhcmVudHM9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb25zPW51bGw7Zm9yKHZhciBkPS0xLHA9dT91Lmxlbmd0aDowO247KW4ucmVtb3ZlKHRoaXMpLG49KytkPHAmJnVbZF18fG51bGw7aWYoT2JqZWN0KG8uYSkobCkmJk9iamVjdChhLmEpKGwpLmNhbGwodGhpcyk9PT1zLmEmJihlPSEwLHQ9dHx8KHMuYS5lIGluc3RhbmNlb2YgYz9mKHMuYS5lLmVycm9ycyk6W3MuYS5lXSkpLE9iamVjdChpLmEpKGgpKWZvcihkPS0xLHA9aC5sZW5ndGg7KytkPHA7KXt2YXIgbT1oW2RdO2lmKE9iamVjdChyLmEpKG0pJiZPYmplY3QoYS5hKShtLnVuc3Vic2NyaWJlKS5jYWxsKG0pPT09cy5hKXtlPSEwLHQ9dHx8W107dmFyIHk9cy5hLmU7eSBpbnN0YW5jZW9mIGM/dD10LmNvbmNhdChmKHkuZXJyb3JzKSk6dC5wdXNoKHkpfX1pZihlKXRocm93IG5ldyBjKHQpfX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKCFlfHxlPT09dC5FTVBUWSlyZXR1cm4gdC5FTVBUWTtpZihlPT09dGhpcylyZXR1cm4gdGhpczt2YXIgbj1lO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6bj1uZXcgdChlKTtjYXNlIm9iamVjdCI6aWYobi5jbG9zZWR8fCJmdW5jdGlvbiIhPXR5cGVvZiBuLnVuc3Vic2NyaWJlKXJldHVybiBuO2lmKHRoaXMuY2xvc2VkKXJldHVybiBuLnVuc3Vic2NyaWJlKCksbjtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5fYWRkUGFyZW50KXt2YXIgaT1uOyhuPW5ldyB0KS5fc3Vic2NyaXB0aW9ucz1baV19YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0ZWFyZG93biAiK2UrIiBhZGRlZCB0byBTdWJzY3JpcHRpb24uIil9cmV0dXJuKHRoaXMuX3N1YnNjcmlwdGlvbnN8fCh0aGlzLl9zdWJzY3JpcHRpb25zPVtdKSkucHVzaChuKSxuLl9hZGRQYXJlbnQodGhpcyksbn0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N1YnNjcmlwdGlvbnM7aWYoZSl7dmFyIG49ZS5pbmRleE9mKHQpOy0xIT09biYmZS5zcGxpY2UobiwxKX19LHQucHJvdG90eXBlLl9hZGRQYXJlbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFyZW50LG49dGhpcy5fcGFyZW50cztlJiZlIT09dD9uPy0xPT09bi5pbmRleE9mKHQpJiZuLnB1c2godCk6dGhpcy5fcGFyZW50cz1bdF06dGhpcy5fcGFyZW50PXR9LHQuRU1QVFk9KChlPW5ldyB0KS5jbG9zZWQ9ITAsZSksdH0oKTtmdW5jdGlvbiBmKHQpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbmNhdChlIGluc3RhbmNlb2YgYz9lLmVycm9yczplKX0sW10pfX0scUFsUzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImRXWmciKSxyPW4oIkNjbkciKSxvPW4oImJuZTUiKSxhPW4oIkYvWEwiKSxzPW4oIks5SWEiKSx1PW4oIjZibEYiKSxjPW4oInAwaWIiKSxsPW4oIlQxRE0iKSxmPW4oIm1yU0ciKSxoPW4oIkVobWsiKSxkPW4oImVpaHMiKSxwPW4oIk1HQlMiKSxtPW4oInpvdG0iKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLmR1cmF0aW9uU2VsZWN0b3I9dH1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgdih0LHRoaXMuZHVyYXRpb25TZWxlY3RvcikpfSx0fSgpLHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBpLmR1cmF0aW9uU2VsZWN0b3I9bixpLmhhc1ZhbHVlPSExLGl9cmV0dXJuIGYuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmFsdWU9dCx0aGlzLmhhc1ZhbHVlPSEwLCF0aGlzLnRocm90dGxlZCl7dmFyIGU9T2JqZWN0KGguYSkodGhpcy5kdXJhdGlvblNlbGVjdG9yKSh0KTtpZihlPT09ZC5hKXRoaXMuZGVzdGluYXRpb24uZXJyb3IoZC5hLmUpO2Vsc2V7dmFyIG49T2JqZWN0KG0uYSkodGhpcyxlKTshbnx8bi5jbG9zZWQ/dGhpcy5jbGVhclRocm90dGxlKCk6dGhpcy5hZGQodGhpcy50aHJvdHRsZWQ9bil9fX0sZS5wcm90b3R5cGUuY2xlYXJUaHJvdHRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWUsZT10aGlzLmhhc1ZhbHVlLG49dGhpcy50aHJvdHRsZWQ7biYmKHRoaXMucmVtb3ZlKG4pLHRoaXMudGhyb3R0bGVkPW51bGwsbi51bnN1YnNjcmliZSgpKSxlJiYodGhpcy52YWx1ZT1udWxsLHRoaXMuaGFzVmFsdWU9ITEsdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpKX0sZS5wcm90b3R5cGUubm90aWZ5TmV4dD1mdW5jdGlvbih0LGUsbixpKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyVGhyb3R0bGUoKX0sZX0ocC5hKSxnPW4oImdJM0IiKTtmdW5jdGlvbiBiKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWwuYSksbj1mdW5jdGlvbigpe3JldHVybiBPYmplY3QoZy5hKSh0LGUpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5saWZ0KG5ldyB5KG4pKX07dmFyIG59dmFyIF89bigiVm5ELyIpO24uZChlLCJjIixmdW5jdGlvbigpe3JldHVybiB3fSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBFfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KTt2YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9uZ1pvbmU9dCx0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX3Njcm9sbGVkPW5ldyBzLmEsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwfXJldHVybiB0LnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dC5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2Nyb2xsZWQubmV4dCh0KX0pO3RoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQodCxuKX0sdC5wcm90b3R5cGUuZGVyZWdpc3Rlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KHQpO2UmJihlLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZSh0KSl9LHQucHJvdG90eXBlLnNjcm9sbGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHZvaWQgMD09PXQmJih0PTIwKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/dS5hLmNyZWF0ZShmdW5jdGlvbihuKXtlLl9nbG9iYWxTdWJzY3JpcHRpb258fGUuX2FkZEdsb2JhbExpc3RlbmVyKCk7dmFyIGk9dD4wP2UuX3Njcm9sbGVkLnBpcGUoYih0KSkuc3Vic2NyaWJlKG4pOmUuX3Njcm9sbGVkLnN1YnNjcmliZShuKTtyZXR1cm4gZS5fc2Nyb2xsZWRDb3VudCsrLGZ1bmN0aW9uKCl7aS51bnN1YnNjcmliZSgpLGUuX3Njcm9sbGVkQ291bnQtLSxlLl9zY3JvbGxlZENvdW50fHxlLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpfX0pOk9iamVjdChhLmEpKCl9LHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQuZGVyZWdpc3RlcihuKX0pLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9LHQucHJvdG90eXBlLmFuY2VzdG9yU2Nyb2xsZWQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0KTtyZXR1cm4gdGhpcy5zY3JvbGxlZChlKS5waXBlKE9iamVjdChfLmEpKGZ1bmN0aW9uKHQpe3JldHVybiF0fHxuLmluZGV4T2YodCk+LTF9KSl9LHQucHJvdG90eXBlLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKGZ1bmN0aW9uKGkscil7ZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChyLHQpJiZuLnB1c2gocil9KSxufSx0LnByb3RvdHlwZS5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudD1mdW5jdGlvbih0LGUpe3ZhciBuPWUubmF0aXZlRWxlbWVudCxpPXQuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYobj09aSlyZXR1cm4hMH13aGlsZShuPW4ucGFyZW50RWxlbWVudCk7cmV0dXJuITF9LHQucHJvdG90eXBlLl9hZGRHbG9iYWxMaXN0ZW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3JldHVybiBPYmplY3Qoby5hKSh3aW5kb3cuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZShmdW5jdGlvbigpe3JldHVybiB0Ll9zY3JvbGxlZC5uZXh0KCl9KX0pfSx0LnByb3RvdHlwZS5fcmVtb3ZlR2xvYmFsTGlzdGVuZXI9ZnVuY3Rpb24oKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlcpKHIueCksT2JqZWN0KHIuVykoaS5hKSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXt2YXIgaT10aGlzO3RoaXMuX2VsZW1lbnRSZWY9dCx0aGlzLl9zY3JvbGw9ZSx0aGlzLl9uZ1pvbmU9bix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IHMuYSx0aGlzLl9zY3JvbGxMaXN0ZW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gaS5fZWxlbWVudFNjcm9sbGVkLm5leHQodCl9fXJldHVybiB0LnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7dC5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHQuX3Njcm9sbExpc3RlbmVyKX0pLHRoaXMuX3Njcm9sbC5yZWdpc3Rlcih0aGlzKX0sdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwuZGVyZWdpc3Rlcih0aGlzKSx0aGlzLl9zY3JvbGxMaXN0ZW5lciYmdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX3Njcm9sbExpc3RlbmVyKX0sdC5wcm90b3R5cGUuZWxlbWVudFNjcm9sbGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZC5hc09ic2VydmFibGUoKX0sdC5wcm90b3R5cGUuZ2V0RWxlbWVudFJlZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmfSx0fSgpLFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dmFyIG49dGhpczt0aGlzLl9wbGF0Zm9ybT10LHRoaXMuX2NoYW5nZT10LmlzQnJvd3Nlcj9lLnJ1bk91dHNpZGVBbmd1bGFyKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChjLmEpKE9iamVjdChvLmEpKHdpbmRvdywicmVzaXplIiksT2JqZWN0KG8uYSkod2luZG93LCJvcmllbnRhdGlvbmNoYW5nZSIpKX0pOk9iamVjdChhLmEpKCksdGhpcy5faW52YWxpZGF0ZUNhY2hlPXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpfSl9cmV0dXJuIHQucHJvdG90eXBlLm5nT25EZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5faW52YWxpZGF0ZUNhY2hlLnVuc3Vic2NyaWJlKCl9LHQucHJvdG90eXBlLmdldFZpZXdwb3J0U2l6ZT1mdW5jdGlvbigpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7dmFyIHQ9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSx0fSx0LnByb3RvdHlwZS5nZXRWaWV3cG9ydFJlY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxlPXRoaXMuZ2V0Vmlld3BvcnRTaXplKCksbj1lLndpZHRoLGk9ZS5oZWlnaHQ7cmV0dXJue3RvcDp0LnRvcCxsZWZ0OnQubGVmdCxib3R0b206dC50b3AraSxyaWdodDp0LmxlZnQrbixoZWlnaHQ6aSx3aWR0aDpufX0sdC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LXQudG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fDAsbGVmdDotdC5sZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8MH19LHQucHJvdG90eXBlLmNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9MjApLHQ+MD90aGlzLl9jaGFuZ2UucGlwZShiKHQpKTp0aGlzLl9jaGFuZ2V9LHQucHJvdG90eXBlLl91cGRhdGVWaWV3cG9ydFNpemU9ZnVuY3Rpb24oKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChyLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChyLlcpKGkuYSksT2JqZWN0KHIuVykoci54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpLEU9e3Byb3ZpZGU6UyxkZXBzOltbbmV3IHIueSxuZXcgci5JLFNdLGkuYSxyLnhdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0fHxuZXcgUyhlLG4pfX0sQz1mdW5jdGlvbigpe319LCJ0L05hIjpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJrIixmdW5jdGlvbigpe3JldHVybiBQfSksbi5kKGUsIm4iLGZ1bmN0aW9uKCl7cmV0dXJuIEZ9KSxuLmQoZSwibyIsZnVuY3Rpb24oKXtyZXR1cm4gen0pLG4uZChlLCJsIixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKGUsIm0iLGZ1bmN0aW9uKCl7cmV0dXJuIER9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gaH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiBmfSksbi5kKGUsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIFR9KSxuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZChlLCJkIixmdW5jdGlvbigpe3JldHVybiBVfSksbi5kKGUsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSxuLmQoZSwiaiIsZnVuY3Rpb24oKXtyZXR1cm4gVn0pLG4uZChlLCJnIixmdW5jdGlvbigpe3JldHVybiBOfSksbi5kKGUsImkiLGZ1bmN0aW9uKCl7cmV0dXJuIE19KSxuLmQoZSwiaCIsZnVuY3Rpb24oKXtyZXR1cm4gTH0pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkNjbkciKSxvPW4oIkYvWEwiKSxhPW4oIjZibEYiKSxzPW4oIlBoam4iKSx1PW4oIlZuRC8iKSxjPW4oIjY3WS8iKSxsPW4oIklwMFIiKSxmPWZ1bmN0aW9uKCl7fSxoPWZ1bmN0aW9uKCl7fSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgZT10aGlzO3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD9mdW5jdGlvbigpe2UuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIjoiKTtpZihuPjApe3ZhciBpPXQuc2xpY2UoMCxuKSxyPWkudG9Mb3dlckNhc2UoKSxvPXQuc2xpY2UobisxKS50cmltKCk7ZS5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGksciksZS5oZWFkZXJzLmhhcyhyKT9lLmhlYWRlcnMuZ2V0KHIpLnB1c2gobyk6ZS5oZWFkZXJzLnNldChyLFtvXSl9fSl9OmZ1bmN0aW9uKCl7ZS5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT10W25dLHI9bi50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSxpLmxlbmd0aD4wJiYoZS5oZWFkZXJzLnNldChyLGkpLGUubWF5YmVTZXROb3JtYWxpemVkTmFtZShuLHIpKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKHQudG9Mb3dlckNhc2UoKSl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt0aGlzLmluaXQoKTt2YXIgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQodC50b0xvd2VyQ2FzZSgpKXx8bnVsbH0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiZCJ9KX0sdC5wcm90b3R5cGUubWF5YmVTZXROb3JtYWxpemVkTmFtZT1mdW5jdGlvbih0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9LHQucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdD90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHlVcGRhdGUodCl9KSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfSx0LnByb3RvdHlwZS5jb3B5RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChmdW5jdGlvbihuKXtlLmhlYWRlcnMuc2V0KG4sdC5oZWFkZXJzLmdldChuKSksZS5ub3JtYWxpemVkTmFtZXMuc2V0KG4sdC5ub3JtYWxpemVkTmFtZXMuZ2V0KG4pKX0pfSx0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbihlKXt2YXIgbj1uZXcgdDtyZXR1cm4gbi5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdD90aGlzLmxhenlJbml0OnRoaXMsbi5sYXp5VXBkYXRlPSh0aGlzLmxhenlVcGRhdGV8fFtdKS5jb25jYXQoW2VdKSxufSx0LnByb3RvdHlwZS5hcHBseVVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOnZhciBuPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYobj1bbl0pLDA9PT1uLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTt2YXIgcj0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO3IucHVzaC5hcHBseShyLE9iamVjdChpLmQpKG4pKSx0aGlzLmhlYWRlcnMuc2V0KGUscik7YnJlYWs7Y2FzZSJkIjp2YXIgbz10LnZhbHVlO2lmKG8pe3ZhciBhPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIWEpcmV0dXJuOzA9PT0oYT1hLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4tMT09PW8uaW5kZXhPZih0KX0pKS5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUsYSl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19LHQucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gdChlLm5vcm1hbGl6ZWROYW1lcy5nZXQobiksZS5oZWFkZXJzLmdldChuKSl9KX0sdH0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuZW5jb2RlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQpfSx0LnByb3RvdHlwZS5lbmNvZGVWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gbSh0KX0sdC5wcm90b3R5cGUuZGVjb2RlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9LHQucHJvdG90eXBlLmRlY29kZVZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9LHR9KCk7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoLyU0MC9naSwiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9naSwiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUzQi9naSwiOyIpLnJlcGxhY2UoLyUyQi9naSwiKyIpLnJlcGxhY2UoLyUzRC9naSwiPSIpLnJlcGxhY2UoLyUzRi9naSwiPyIpLnJlcGxhY2UoLyUyRi9naSwiLyIpfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGUsbixyLG89dGhpcztpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBwLHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPShlPXQuZnJvbVN0cmluZyxuPXRoaXMuZW5jb2RlcixyPW5ldyBNYXAsZS5sZW5ndGg+MCYmZS5zcGxpdCgiJiIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI9Iiksbz1PYmplY3QoaS5jKSgtMT09ZT9bbi5kZWNvZGVLZXkodCksIiJdOltuLmRlY29kZUtleSh0LnNsaWNlKDAsZSkpLG4uZGVjb2RlVmFsdWUodC5zbGljZShlKzEpKV0sMiksYT1vWzBdLHM9b1sxXSx1PXIuZ2V0KGEpfHxbXTt1LnB1c2gocyksci5zZXQoYSx1KX0pLHIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmZyb21PYmplY3RbZV07by5tYXAuc2V0KGUsQXJyYXkuaXNBcnJheShuKT9uOltuXSl9KSk6dGhpcy5tYXA9bnVsbH1yZXR1cm4gdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt0aGlzLmluaXQoKTt2YXIgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfSx0LnByb3RvdHlwZS5nZXRBbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldCh0KXx8bnVsbH0sdC5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZW5jb2Rlci5lbmNvZGVLZXkoZSk7cmV0dXJuIHQubWFwLmdldChlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG4rIj0iK3QuZW5jb2Rlci5lbmNvZGVWYWx1ZShlKX0pLmpvaW4oIiYiKX0pLmpvaW4oIiYiKX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dmFyIG49bmV3IHQoe2VuY29kZXI6dGhpcy5lbmNvZGVyfSk7cmV0dXJuIG4uY2xvbmVGcm9tPXRoaXMuY2xvbmVGcm9tfHx0aGlzLG4udXBkYXRlcz0odGhpcy51cGRhdGVzfHxbXSkuY29uY2F0KFtlXSksbn0sdC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1hcC5zZXQoZSx0LmNsb25lRnJvbS5tYXAuZ2V0KGUpKX0pLHRoaXMudXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3N3aXRjaChlLm9wKXtjYXNlImEiOmNhc2UicyI6dmFyIG49KCJhIj09PWUub3A/dC5tYXAuZ2V0KGUucGFyYW0pOnZvaWQgMCl8fFtdO24ucHVzaChlLnZhbHVlKSx0Lm1hcC5zZXQoZS5wYXJhbSxuKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PWUudmFsdWUpe3QubWFwLmRlbGV0ZShlLnBhcmFtKTticmVha312YXIgaT10Lm1hcC5nZXQoZS5wYXJhbSl8fFtdLHI9aS5pbmRleE9mKGUudmFsdWUpOy0xIT09ciYmaS5zcGxpY2UociwxKSxpLmxlbmd0aD4wP3QubWFwLnNldChlLnBhcmFtLGkpOnQubWFwLmRlbGV0ZShlLnBhcmFtKX19KSx0aGlzLmNsb25lRnJvbT1udWxsKX0sdH0oKTtmdW5jdGlvbiB2KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBnKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmdCBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gYih0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEZvcm1EYXRhJiZ0IGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGkpe3ZhciByO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxpPyh0aGlzLmJvZHk9dm9pZCAwIT09bj9uOm51bGwscj1pKTpyPW4sciYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFyLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhci53aXRoQ3JlZGVudGlhbHMsci5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1yLnJlc3BvbnNlVHlwZSksci5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPXIuaGVhZGVycyksci5wYXJhbXMmJih0aGlzLnBhcmFtcz1yLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgZCksdGhpcy5wYXJhbXMpe3ZhciBvPXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PW8ubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1lO2Vsc2V7dmFyIGE9ZS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWUrKC0xPT09YT8iPyI6YTxlLmxlbmd0aC0xPyImIjoiIikrb319ZWxzZSB0aGlzLnBhcmFtcz1uZXcgeSx0aGlzLnVybFdpdGhQYXJhbXM9ZX1yZXR1cm4gdC5wcm90b3R5cGUuc2VyaWFsaXplQm9keT1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6dih0aGlzLmJvZHkpfHxnKHRoaXMuYm9keSl8fGIodGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIHk/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9LHQucHJvdG90eXBlLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpiKHRoaXMuYm9keSk/bnVsbDpnKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6dih0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHk/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPWUubWV0aG9kfHx0aGlzLm1ldGhvZCxpPWUudXJsfHx0aGlzLnVybCxyPWUucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxvPXZvaWQgMCE9PWUuYm9keT9lLmJvZHk6dGhpcy5ib2R5LGE9dm9pZCAwIT09ZS53aXRoQ3JlZGVudGlhbHM/ZS53aXRoQ3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHMscz12b2lkIDAhPT1lLnJlcG9ydFByb2dyZXNzP2UucmVwb3J0UHJvZ3Jlc3M6dGhpcy5yZXBvcnRQcm9ncmVzcyx1PWUuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLGM9ZS5wYXJhbXN8fHRoaXMucGFyYW1zO3JldHVybiB2b2lkIDAhPT1lLnNldEhlYWRlcnMmJih1PU9iamVjdC5rZXlzKGUuc2V0SGVhZGVycykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRIZWFkZXJzW25dKX0sdSkpLGUuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyhlLnNldFBhcmFtcykucmVkdWNlKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuc2V0KG4sZS5zZXRQYXJhbXNbbl0pfSxjKSksbmV3IHQobixpLG8se3BhcmFtczpjLGhlYWRlcnM6dSxyZXBvcnRQcm9ncmVzczpzLHJlc3BvbnNlVHlwZTpyLHdpdGhDcmVkZW50aWFsczphfSl9LHR9KCksdz1mdW5jdGlvbih0KXtyZXR1cm4gdFt0LlNlbnQ9MF09IlNlbnQiLHRbdC5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLHRbdC5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLHRbdC5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIix0W3QuUmVzcG9uc2U9NF09IlJlc3BvbnNlIix0W3QuVXNlcj01XT0iVXNlciIsdH0oe30pLHg9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PWUmJihlPTIwMCksdm9pZCAwPT09biYmKG49Ik9LIiksdGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IGQsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxuLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0oKSxTPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXQuY2FsbCh0aGlzLGUpfHx0aGlzO3JldHVybiBuLnR5cGU9dy5SZXNwb25zZUhlYWRlcixufXJldHVybiBPYmplY3QoaS5iKShlLHQpLGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD17fSksbmV3IGUoe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9LGV9KHgpLEU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIG4udHlwZT13LlJlc3BvbnNlLG4uYm9keT12b2lkIDAhPT1lLmJvZHk/ZS5ib2R5Om51bGwsbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9e30pLG5ldyBlKHtib2R5OnZvaWQgMCE9PXQuYm9keT90LmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9LGV9KHgpLEM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10LmNhbGwodGhpcyxlLDAsIlVua25vd24gRXJyb3IiKXx8dGhpcztyZXR1cm4gbi5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsbi5vaz0hMSxuLm1lc3NhZ2U9bi5zdGF0dXM+PTIwMCYmbi5zdGF0dXM8MzAwPyJIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICIrKGUudXJsfHwiKHVua25vd24gdXJsKSIpOiJIdHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICIrKGUudXJsfHwiKHVua25vd24gdXJsKSIpKyI6ICIrZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCxuLmVycm9yPWUuZXJyb3J8fG51bGwsbn1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlfSh4KTtmdW5jdGlvbiBPKHQsZSl7cmV0dXJue2JvZHk6ZSxoZWFkZXJzOnQuaGVhZGVycyxvYnNlcnZlOnQub2JzZXJ2ZSxwYXJhbXM6dC5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6dC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOnQud2l0aENyZWRlbnRpYWxzfX12YXIgVD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5oYW5kbGVyPXR9cmV0dXJuIHQucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHI9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdCBpbnN0YW5jZW9mIF8paT10O2Vsc2V7dmFyIGE7YT1uLmhlYWRlcnMgaW5zdGFuY2VvZiBkP24uaGVhZGVyczpuZXcgZChuLmhlYWRlcnMpO3ZhciBsPXZvaWQgMDtuLnBhcmFtcyYmKGw9bi5wYXJhbXMgaW5zdGFuY2VvZiB5P24ucGFyYW1zOm5ldyB5KHtmcm9tT2JqZWN0Om4ucGFyYW1zfSkpLGk9bmV3IF8odCxlLHZvaWQgMCE9PW4uYm9keT9uLmJvZHk6bnVsbCx7aGVhZGVyczphLHBhcmFtczpsLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOm4ud2l0aENyZWRlbnRpYWxzfSl9dmFyIGY9T2JqZWN0KG8uYSkoaSkucGlwZShPYmplY3Qocy5hKShmdW5jdGlvbih0KXtyZXR1cm4gci5oYW5kbGVyLmhhbmRsZSh0KX0pKTtpZih0IGluc3RhbmNlb2YgX3x8ImV2ZW50cyI9PT1uLm9ic2VydmUpcmV0dXJuIGY7dmFyIGg9Zi5waXBlKE9iamVjdCh1LmEpKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRX0pKTtzd2l0Y2gobi5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKGkucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiEodC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiEodC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gaC5waXBlKE9iamVjdChjLmEpKGZ1bmN0aW9uKHQpe2lmKG51bGwhPT10LmJvZHkmJiJzdHJpbmciIT10eXBlb2YgdC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiB0LmJvZHl9KSk7Y2FzZSJqc29uIjpkZWZhdWx0OnJldHVybiBoLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24odCl7cmV0dXJuIHQuYm9keX0pKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gaDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgIituLm9ic2VydmUrIn0iKX19LHQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJERUxFVEUiLHQsZSl9LHQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5yZXF1ZXN0KCJHRVQiLHQsZSl9LHQucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLHRoaXMucmVxdWVzdCgiSEVBRCIsdCxlKX0sdC5wcm90b3R5cGUuanNvbnA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsdCx7cGFyYW1zOihuZXcgeSkuYXBwZW5kKGUsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfSx0LnByb3RvdHlwZS5vcHRpb25zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLnJlcXVlc3QoIk9QVElPTlMiLHQsZSl9LHQucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUEFUQ0giLHQsTyhuLGUpKX0sdC5wcm90b3R5cGUucG9zdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHZvaWQgMD09PW4mJihuPXt9KSx0aGlzLnJlcXVlc3QoIlBPU1QiLHQsTyhuLGUpKX0sdC5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMucmVxdWVzdCgiUFVUIix0LE8obixlKSl9LHR9KCksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLm5leHQ9dCx0aGlzLmludGVyY2VwdG9yPWV9cmV0dXJuIHQucHJvdG90eXBlLmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5pbnRlcmNlcHQodCx0aGlzLm5leHQpfSx0fSgpLEE9bmV3IHIubygiSFRUUF9JTlRFUkNFUFRPUlMiKSxJPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuaW50ZXJjZXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuaGFuZGxlKHQpfSx0fSgpLGo9L15cKVxdXH0nLD9cbi8sTT1mdW5jdGlvbigpe30sUD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLmJ1aWxkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH0sdH0oKSxOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnhockZhY3Rvcnk9dH1yZXR1cm4gdC5wcm90b3R5cGUuaGFuZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIkpTT05QIj09PXQubWV0aG9kKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNvbnN0cnVjdCBKc29ucCByZXF1ZXN0IHdpdGhvdXQgSnNvbnBDbGllbnRNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgYS5hKGZ1bmN0aW9uKG4pe3ZhciBpPWUueGhyRmFjdG9yeS5idWlsZCgpO2lmKGkub3Blbih0Lm1ldGhvZCx0LnVybFdpdGhQYXJhbXMpLHQud2l0aENyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9ITApLHQuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuc2V0UmVxdWVzdEhlYWRlcih0LGUuam9pbigiLCIpKX0pLHQuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxpLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCF0LmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7dmFyIHI9dC5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1yJiZpLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIscil9aWYodC5yZXNwb25zZVR5cGUpe3ZhciBvPXQucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7aS5yZXNwb25zZVR5cGU9Impzb24iIT09bz9vOiJ0ZXh0In12YXIgYT10LnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsdT1mdW5jdGlvbigpe2lmKG51bGwhPT1zKXJldHVybiBzO3ZhciBlPTEyMjM9PT1pLnN0YXR1cz8yMDQ6aS5zdGF0dXMsbj1pLnN0YXR1c1RleHR8fCJPSyIscj1uZXcgZChpLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxvPWZ1bmN0aW9uKHQpe3JldHVybiJyZXNwb25zZVVSTCJpbiB0JiZ0LnJlc3BvbnNlVVJMP3QucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QodC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/dC5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KGkpfHx0LnVybDtyZXR1cm4gcz1uZXcgUyh7aGVhZGVyczpyLHN0YXR1czplLHN0YXR1c1RleHQ6bix1cmw6b30pfSxjPWZ1bmN0aW9uKCl7dmFyIGU9dSgpLHI9ZS5oZWFkZXJzLG89ZS5zdGF0dXMsYT1lLnN0YXR1c1RleHQscz1lLnVybCxjPW51bGw7MjA0IT09byYmKGM9dm9pZCAwPT09aS5yZXNwb25zZT9pLnJlc3BvbnNlVGV4dDppLnJlc3BvbnNlKSwwPT09byYmKG89Yz8yMDA6MCk7dmFyIGw9bz49MjAwJiZvPDMwMDtpZigianNvbiI9PT10LnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBjKXt2YXIgZj1jO2M9Yy5yZXBsYWNlKGosIiIpO3RyeXtjPSIiIT09Yz9KU09OLnBhcnNlKGMpOm51bGx9Y2F0Y2godCl7Yz1mLGwmJihsPSExLGM9e2Vycm9yOnQsdGV4dDpjfSl9fWw/KG4ubmV4dChuZXcgRSh7Ym9keTpjLGhlYWRlcnM6cixzdGF0dXM6byxzdGF0dXNUZXh0OmEsdXJsOnN8fHZvaWQgMH0pKSxuLmNvbXBsZXRlKCkpOm4uZXJyb3IobmV3IEMoe2Vycm9yOmMsaGVhZGVyczpyLHN0YXR1czpvLHN0YXR1c1RleHQ6YSx1cmw6c3x8dm9pZCAwfSkpfSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBDKHtlcnJvcjp0LHN0YXR1czppLnN0YXR1c3x8MCxzdGF0dXNUZXh0Omkuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IifSk7bi5lcnJvcihlKX0sZj0hMSxoPWZ1bmN0aW9uKGUpe2Z8fChuLm5leHQodSgpKSxmPSEwKTt2YXIgcj17dHlwZTp3LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmUubG9hZGVkfTtlLmxlbmd0aENvbXB1dGFibGUmJihyLnRvdGFsPWUudG90YWwpLCJ0ZXh0Ij09PXQucmVzcG9uc2VUeXBlJiZpLnJlc3BvbnNlVGV4dCYmKHIucGFydGlhbFRleHQ9aS5yZXNwb25zZVRleHQpLG4ubmV4dChyKX0scD1mdW5jdGlvbih0KXt2YXIgZT17dHlwZTp3LlVwbG9hZFByb2dyZXNzLGxvYWRlZDp0LmxvYWRlZH07dC5sZW5ndGhDb21wdXRhYmxlJiYoZS50b3RhbD10LnRvdGFsKSxuLm5leHQoZSl9O3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGMpLGkuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLHQucmVwb3J0UHJvZ3Jlc3MmJihpLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixoKSxudWxsIT09YSYmaS51cGxvYWQmJmkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksaS5zZW5kKGEpLG4ubmV4dCh7dHlwZTp3LlNlbnR9KSxmdW5jdGlvbigpe2kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGwpLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsYyksdC5yZXBvcnRQcm9ncmVzcyYmKGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGgpLG51bGwhPT1hJiZpLnVwbG9hZCYmaS51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxpLmFib3J0KCl9fSl9LHR9KCksUj1uZXcgci5vKCJYU1JGX0NPT0tJRV9OQU1FIiksRD1uZXcgci5vKCJYU1JGX0hFQURFUl9OQU1FIiksTD1mdW5jdGlvbigpe30sRj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMuZG9jPXQsdGhpcy5wbGF0Zm9ybT1lLHRoaXMuY29va2llTmFtZT1uLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfXJldHVybiB0LnByb3RvdHlwZS5nZXRUb2tlbj1mdW5jdGlvbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDt2YXIgdD10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiB0IT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49T2JqZWN0KGwudSkodCx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz10KSx0aGlzLmxhc3RUb2tlbn0sdH0oKSx6PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMudG9rZW5TZXJ2aWNlPXQsdGhpcy5oZWFkZXJOYW1lPWV9cmV0dXJuIHQucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQudXJsLnRvTG93ZXJDYXNlKCk7aWYoIkdFVCI9PT10Lm1ldGhvZHx8IkhFQUQiPT09dC5tZXRob2R8fG4uc3RhcnRzV2l0aCgiaHR0cDovLyIpfHxuLnN0YXJ0c1dpdGgoImh0dHBzOi8vIikpcmV0dXJuIGUuaGFuZGxlKHQpO3ZhciBpPXRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuKCk7cmV0dXJuIG51bGw9PT1pfHx0LmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSl8fCh0PXQuY2xvbmUoe2hlYWRlcnM6dC5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUsaSl9KSksZS5oYW5kbGUodCl9LHR9KCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmJhY2tlbmQ9dCx0aGlzLmluamVjdG9yPWUsdGhpcy5jaGFpbj1udWxsfXJldHVybiB0LnByb3RvdHlwZS5oYW5kbGU9ZnVuY3Rpb24odCl7aWYobnVsbD09PXRoaXMuY2hhaW4pe3ZhciBlPXRoaXMuaW5qZWN0b3IuZ2V0KEEsW10pO3RoaXMuY2hhaW49ZS5yZWR1Y2VSaWdodChmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgayh0LGUpfSx0aGlzLmJhY2tlbmQpfXJldHVybiB0aGlzLmNoYWluLmhhbmRsZSh0KX0sdH0oKSxCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5kaXNhYmxlPWZ1bmN0aW9uKCl7cmV0dXJue25nTW9kdWxlOnQscHJvdmlkZXJzOlt7cHJvdmlkZTp6LHVzZUNsYXNzOkl9XX19LHQud2l0aE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx7bmdNb2R1bGU6dCxwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTpSLHVzZVZhbHVlOmUuY29va2llTmFtZX06W10sZS5oZWFkZXJOYW1lP3twcm92aWRlOkQsdXNlVmFsdWU6ZS5oZWFkZXJOYW1lfTpbXV19fSx0fSgpLFU9ZnVuY3Rpb24oKXt9fSx0OWZaOmZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KTt2YXIgaT1uKCJtclNHIikscj1uKCJGRk9vIiksbz1uKCJiN21XIiksYT1uKCJHNUoxIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10P09iamVjdChhLmIpKCk6ZS5saWZ0KG5ldyB1KHQpKX19dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe2lmKHRoaXMudG90YWw9dCx0aGlzLnRvdGFsPDApdGhyb3cgbmV3IG8uYX1yZXR1cm4gdC5wcm90b3R5cGUuY2FsbD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnN1YnNjcmliZShuZXcgYyh0LHRoaXMudG90YWwpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyxlKXx8dGhpcztyZXR1cm4gaS50b3RhbD1uLGkuY291bnQ9MCxpfXJldHVybiBpLmIoZSx0KSxlLnByb3RvdHlwZS5fbmV4dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnRvdGFsLG49Kyt0aGlzLmNvdW50O248PWUmJih0aGlzLmRlc3RpbmF0aW9uLm5leHQodCksbj09PWUmJih0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCksdGhpcy51bnN1YnNjcmliZSgpKSl9LGV9KHIuYSl9LHU2N0Q6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3ZhciBpPW4oIkVuOCsiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49dFtpLmFdKCk7Oyl7dmFyIHI9bi5uZXh0KCk7aWYoci5kb25lKXtlLmNvbXBsZXRlKCk7YnJlYWt9aWYoZS5uZXh0KHIudmFsdWUpLGUuY2xvc2VkKWJyZWFrfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJldHVybiYmZS5hZGQoZnVuY3Rpb24oKXtuLnJldHVybiYmbi5yZXR1cm4oKX0pLGV9fX0sdU1hTzpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSk7dmFyIGk9bigibXJTRyIpLHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBpPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5zdWJqZWN0PWUsaS5zdWJzY3JpYmVyPW4saS5jbG9zZWQ9ITEsaX1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUudW5zdWJzY3JpYmU9ZnVuY3Rpb24oKXtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xvc2VkPSEwO3ZhciB0PXRoaXMuc3ViamVjdCxlPXQub2JzZXJ2ZXJzO2lmKHRoaXMuc3ViamVjdD1udWxsLGUmJjAhPT1lLmxlbmd0aCYmIXQuaXNTdG9wcGVkJiYhdC5jbG9zZWQpe3ZhciBuPWUuaW5kZXhPZih0aGlzLnN1YnNjcmliZXIpOy0xIT09biYmZS5zcGxpY2UobiwxKX19fSxlfShuKCJwdWdUIikuYSl9LHZHWFk6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJDY25HIikscj1uKCJkV1pnIiksbz1uKCJtclNHIiksYT1uKCJua1k3Iikscz1uKCJpc2J5IiksdT1uKCJNR0JTIiksYz1uKCJ6b3RtIiksbD1uKCJJVVRiIiksZj17fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnJlc3VsdFNlbGVjdG9yPXR9cmV0dXJuIHQucHJvdG90eXBlLmNhbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5zdWJzY3JpYmUobmV3IGQodCx0aGlzLnJlc3VsdFNlbGVjdG9yKSl9LHR9KCksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIGkucmVzdWx0U2VsZWN0b3I9bixpLmFjdGl2ZT0wLGkudmFsdWVzPVtdLGkub2JzZXJ2YWJsZXM9W10saX1yZXR1cm4gby5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy52YWx1ZXMucHVzaChmKSx0aGlzLm9ic2VydmFibGVzLnB1c2godCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMub2JzZXJ2YWJsZXMsZT10Lmxlbmd0aDtpZigwPT09ZSl0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7ZWxzZXt0aGlzLmFjdGl2ZT1lLHRoaXMudG9SZXNwb25kPWU7Zm9yKHZhciBuPTA7bjxlO24rKyl7dmFyIGk9dFtuXTt0aGlzLmFkZChPYmplY3QoYy5hKSh0aGlzLGksaSxuKSl9fX0sZS5wcm90b3R5cGUubm90aWZ5Q29tcGxldGU9ZnVuY3Rpb24odCl7MD09KHRoaXMuYWN0aXZlLT0xKSYmdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfSxlLnByb3RvdHlwZS5ub3RpZnlOZXh0PWZ1bmN0aW9uKHQsZSxuLGkscil7dmFyIG89dGhpcy52YWx1ZXMsYT10aGlzLnRvUmVzcG9uZD9vW25dPT09Zj8tLXRoaXMudG9SZXNwb25kOnRoaXMudG9SZXNwb25kOjA7b1tuXT1lLDA9PT1hJiYodGhpcy5yZXN1bHRTZWxlY3Rvcj90aGlzLl90cnlSZXN1bHRTZWxlY3RvcihvKTp0aGlzLmRlc3RpbmF0aW9uLm5leHQoby5zbGljZSgpKSl9LGUucHJvdG90eXBlLl90cnlSZXN1bHRTZWxlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLm5leHQoZSl9LGV9KHUuYSkscD1uKCJLOUlhIiksbT1uKCI2YmxGIikseT1uKCIyQmRqIiksdj1uKCI2N1kvIiksZz1uKCJueTI0IiksYj1uKCJwMFNqIiksXz1uKCJuNmdHIik7bi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSxuLmQoZSwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pO3ZhciB3LHg9bmV3IFNldCxTPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLnBsYXRmb3JtPXQsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLnBsYXRmb3JtLmlzQnJvd3NlciYmd2luZG93Lm1hdGNoTWVkaWE/d2luZG93Lm1hdGNoTWVkaWEuYmluZCh3aW5kb3cpOkV9cmV0dXJuIHQucHJvdG90eXBlLm1hdGNoTWVkaWE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhdGZvcm0uV0VCS0lUJiZmdW5jdGlvbih0KXtpZigheC5oYXModCkpdHJ5e3d8fCgodz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodykpLHcuc2hlZXQmJih3LnNoZWV0Lmluc2VydFJ1bGUoIkBtZWRpYSAiK3QrIiB7LmZ4LXF1ZXJ5LXRlc3R7IH19IiwwKSx4LmFkZCh0KSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KHQpLHRoaXMuX21hdGNoTWVkaWEodCl9LHQubmdJbmplY3RhYmxlRGVmPU9iamVjdChpLlMpKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0KE9iamVjdChpLlcpKHIuYSkpfSx0b2tlbjp0LHByb3ZpZGVkSW46InJvb3QifSksdH0oKTtmdW5jdGlvbiBFKHQpe3JldHVybnttYXRjaGVzOiJhbGwiPT09dHx8IiI9PT10LG1lZGlhOnQsYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7fX19dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5tZWRpYU1hdGNoZXI9dCx0aGlzLnpvbmU9ZSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IHAuYX1yZXR1cm4gdC5wcm90b3R5cGUubmdPbkRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX0sdC5wcm90b3R5cGUuaXNNYXRjaGVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIE8oT2JqZWN0KF8uYSkodCkpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkubXFsLm1hdGNoZXN9KX0sdC5wcm90b3R5cGUub2JzZXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgbj1udWxsLGk9bnVsbDtyZXR1cm4gT2JqZWN0KGEuYSkodFt0Lmxlbmd0aC0xXSkmJihpPXQucG9wKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobj10LnBvcCgpKSwxPT09dC5sZW5ndGgmJk9iamVjdChzLmEpKHRbMF0pJiYodD10WzBdKSxPYmplY3QobC5hKSh0LGkpLmxpZnQobmV3IGgobikpfShPKE9iamVjdChfLmEpKHQpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuX3JlZ2lzdGVyUXVlcnkodCkub2JzZXJ2YWJsZX0pKS5waXBlKE9iamVjdCh2LmEpKGZ1bmN0aW9uKHQpe3JldHVybnttYXRjaGVzOnQuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5tYXRjaGVzfSl9fSkpfSx0LnByb3RvdHlwZS5fcmVnaXN0ZXJRdWVyeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX3F1ZXJpZXMuaGFzKHQpKXJldHVybiB0aGlzLl9xdWVyaWVzLmdldCh0KTt2YXIgbj10aGlzLm1lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKHQpLGk9e29ic2VydmFibGU6ZnVuY3Rpb24gdChlLG4saSl7cmV0dXJuIGk/dChlLG4pLnBpcGUoT2JqZWN0KHYuYSkoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChzLmEpKHQpP2kuYXBwbHkodm9pZCAwLHQpOmkodCl9KSk6bmV3IG0uYShmdW5jdGlvbih0KXt2YXIgaSxyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLG49MDtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiB0Lm5leHQoMT09PWUubGVuZ3RoP2VbMF06ZSl9O3RyeXtpPWUocil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX1pZihPYmplY3QoeS5hKShuKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbihyLGkpfX0pfShmdW5jdGlvbih0KXtuLmFkZExpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSxmdW5jdGlvbih0KXtuLnJlbW92ZUxpc3RlbmVyKGZ1bmN0aW9uKG4pe3JldHVybiBlLnpvbmUucnVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQobil9KX0pfSkucGlwZShPYmplY3QoZy5hKSh0aGlzLl9kZXN0cm95U3ViamVjdCksT2JqZWN0KGIuYSkobiksT2JqZWN0KHYuYSkoZnVuY3Rpb24odCl7cmV0dXJue21hdGNoZXM6dC5tYXRjaGVzfX0pKSxtcWw6bn07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KHQsaSksaX0sdC5uZ0luamVjdGFibGVEZWY9T2JqZWN0KGkuUykoe2ZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHQoT2JqZWN0KGkuVykoUyksT2JqZWN0KGkuVykoaS54KSl9LHRva2VuOnQscHJvdmlkZWRJbjoicm9vdCJ9KSx0fSgpO2Z1bmN0aW9uIE8odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCIsIil9KS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jb25jYXQoZSl9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSl9dmFyIFQ9e1hTbWFsbDoiKG1heC13aWR0aDogNTk5cHgpIixTbWFsbDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA5NTlweCkiLE1lZGl1bToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIixMYXJnZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG1heC13aWR0aDogMTkxOXB4KSIsWExhcmdlOiIobWluLXdpZHRoOiAxOTIwcHgpIixIYW5kc2V0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTlweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsVGFibGV0OiIobWluLXdpZHRoOiA2MDBweCkgYW5kIChtYXgtd2lkdGg6IDgzOXB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDk2MHB4KSBhbmQgKG1heC13aWR0aDogMTI3OXB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIixXZWI6IihtaW4td2lkdGg6IDg0MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBwb3J0cmFpdCksIChtaW4td2lkdGg6IDEyODBweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIsSGFuZHNldFBvcnRyYWl0OiIobWF4LXdpZHRoOiA1OTlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixUYWJsZXRQb3J0cmFpdDoiKG1pbi13aWR0aDogNjAwcHgpIGFuZCAobWF4LXdpZHRoOiA4MzlweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIixXZWJQb3J0cmFpdDoiKG1pbi13aWR0aDogODQwcHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIsSGFuZHNldExhbmRzY2FwZToiKG1heC13aWR0aDogOTU5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFRhYmxldExhbmRzY2FwZToiKG1pbi13aWR0aDogOTYwcHgpIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiLFdlYkxhbmRzY2FwZToiKG1pbi13aWR0aDogMTI4MHB4KSBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIn19LHdGdzE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gcH0pLG4uZChlLCJmIixmdW5jdGlvbigpe3JldHVybiB5fSksbi5kKGUsImciLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KSxuLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gbX0pLG4uZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oImloWVkiKSxvPW4oIkNjbkciKSxhPShuKCJaWWp0IiksbigiTlNZTCIpKSxzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXt2YXIgaT10LmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuX25leHRBbmltYXRpb25JZD0wLGkuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIobi5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjpvLlAuTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pLGl9cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7dmFyIG49QXJyYXkuaXNBcnJheSh0KT9PYmplY3Qoci5pKSh0KTp0O3JldHVybiBsKHRoaXMuX3JlbmRlcmVyLG51bGwsZSwicmVnaXN0ZXIiLFtuXSksbmV3IHUoZSx0aGlzLl9yZW5kZXJlcil9LGV9KHIuYiksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIGk9dC5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl9pZD1lLGkuX3JlbmRlcmVyPW4saX1yZXR1cm4gT2JqZWN0KGkuYikoZSx0KSxlLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGModGhpcy5faWQsdCxlfHx7fSx0aGlzLl9yZW5kZXJlcil9LGV9KHIuYyksYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSl7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixuKX1yZXR1cm4gdC5wcm90b3R5cGUuX2xpc3Rlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCJAQCIrdGhpcy5pZCsiOiIrdCxlKX0sdC5wcm90b3R5cGUuX2NvbW1hbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWVbbi0xXT1hcmd1bWVudHNbbl07cmV0dXJuIGwodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsdCxlKX0sdC5wcm90b3R5cGUub25Eb25lPWZ1bmN0aW9uKHQpe3RoaXMuX2xpc3RlbigiZG9uZSIsdCl9LHQucHJvdG90eXBlLm9uU3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9LHQucHJvdG90eXBlLm9uRGVzdHJveT1mdW5jdGlvbih0KXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLHQpfSx0LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfSx0LnByb3RvdHlwZS5oYXNTdGFydGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9LHQucHJvdG90eXBlLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH0sdC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfSx0LnByb3RvdHlwZS5yZXN0YXJ0PWZ1bmN0aW9uKCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfSx0LnByb3RvdHlwZS5maW5pc2g9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpfSx0LnByb3RvdHlwZS5zZXRQb3NpdGlvbj1mdW5jdGlvbih0KXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsdCl9LHQucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHR9KCk7ZnVuY3Rpb24gbCh0LGUsbixpLHIpe3JldHVybiB0LnNldFByb3BlcnR5KGUsIkBAIituKyI6IitpLHIpfXZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7dGhpcy5kZWxlZ2F0ZT10LHRoaXMuZW5naW5lPWUsdGhpcy5fem9uZT1uLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1hcCx0aGlzLl9jZFJlY3VyRGVwdGg9MCx0aGlzLnByb21pc2U9UHJvbWlzZS5yZXNvbHZlKDApLGUub25SZW1vdmFsQ29tcGxldGU9ZnVuY3Rpb24odCxlKXtlJiZlLnBhcmVudE5vZGUodCkmJmUucmVtb3ZlQ2hpbGQodC5wYXJlbnROb2RlLHQpfX1yZXR1cm4gdC5wcm90b3R5cGUuY3JlYXRlUmVuZGVyZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLGk9dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcih0LGUpO2lmKCEodCYmZSYmZS5kYXRhJiZlLmRhdGEuYW5pbWF0aW9uKSl7dmFyIHI9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQoaSk7cmV0dXJuIHJ8fChyPW5ldyBoKCIiLGksdGhpcy5lbmdpbmUpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KGkscikpLHJ9dmFyIG89ZS5pZCxhPWUuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDtyZXR1cm4gdGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIoYSx0KSxlLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4uZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihvLGEsdCxlLm5hbWUsZSl9KSxuZXcgZCh0aGlzLGEsaSx0aGlzLmVuZ2luZSl9LHQucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5fY2RSZWN1ckRlcHRoKyssdGhpcy5kZWxlZ2F0ZS5iZWdpbiYmdGhpcy5kZWxlZ2F0ZS5iZWdpbigpfSx0LnByb3RvdHlwZS5fc2NoZWR1bGVDb3VudFRhc2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7dC5fbWljcm90YXNrSWQrK30pfSx0LnByb3RvdHlwZS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2s9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7dD49MCYmdDx0aGlzLl9taWNyb3Rhc2tJZD90aGlzLl96b25lLnJ1bihmdW5jdGlvbigpe3JldHVybiBlKG4pfSk6KDA9PXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5sZW5ndGgmJlByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKGZ1bmN0aW9uKCl7ci5fem9uZS5ydW4oZnVuY3Rpb24oKXtyLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaS5jKSh0LDIpOygwLGVbMF0pKGVbMV0pfSksci5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbZSxuXSkpfSx0LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMuX2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcihmdW5jdGlvbigpe3QuX3NjaGVkdWxlQ291bnRUYXNrKCksdC5lbmdpbmUuZmx1c2godC5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9LHQucHJvdG90eXBlLndoZW5SZW5kZXJpbmdEb25lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9LHR9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmFtZXNwYWNlSWQ9dCx0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9bix0aGlzLmRlc3Ryb3lOb2RlPXRoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVzdHJveU5vZGUodCl9Om51bGx9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZGF0YSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKX0sdC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQodCxlKX0sdC5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfSx0LnByb3RvdHlwZS5jcmVhdGVUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9LHQucHJvdG90eXBlLmFwcGVuZENoaWxkPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZCh0LGUpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsZSx0LCExKX0sdC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsbiksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITApfSx0LnByb3RvdHlwZS5yZW1vdmVDaGlsZD1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlKX0sdC5wcm90b3R5cGUuc2VsZWN0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCl9LHQucHJvdG90eXBlLnBhcmVudE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX0sdC5wcm90b3R5cGUubmV4dFNpYmxpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9LHQucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixpKXt0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZSh0LGUsbixpKX0sdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsbil9LHQucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfSx0LnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUucmVtb3ZlQ2xhc3ModCxlKX0sdC5wcm90b3R5cGUuc2V0U3R5bGU9ZnVuY3Rpb24odCxlLG4saSl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsbixpKX0sdC5wcm90b3R5cGUucmVtb3ZlU3R5bGU9ZnVuY3Rpb24odCxlLG4pe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbil7IkAiPT1lLmNoYXJBdCgwKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIW4pOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLG4pfSx0LnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX0sdC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odCxlLG4pfSx0LnByb3RvdHlwZS5kaXNhYmxlQW5pbWF0aW9ucz1mdW5jdGlvbih0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9LHR9KCksZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbixpLHIpe3ZhciBvPXQuY2FsbCh0aGlzLG4saSxyKXx8dGhpcztyZXR1cm4gby5mYWN0b3J5PWUsby5uYW1lc3BhY2VJZD1uLG99cmV0dXJuIE9iamVjdChpLmIpKGUsdCksZS5wcm90b3R5cGUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLG4peyJAIj09ZS5jaGFyQXQoMCk/Ii4iPT1lLmNoYXJBdCgxKSYmIkAuZGlzYWJsZWQiPT1lP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxuPXZvaWQgMD09PW58fCEhbik6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zdWJzdHIoMSksbik6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsbil9LGUucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbih0LGUsbil7dmFyIHIsbyxhLHM9dGhpcztpZigiQCI9PWUuY2hhckF0KDApKXt2YXIgdT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gdH19KHQpLGM9ZS5zdWJzdHIoMSksbD0iIjtyZXR1cm4iQCIhPWMuY2hhckF0KDApJiYoYz0ocj1PYmplY3QoaS5jKSgobz1jLGE9by5pbmRleE9mKCIuIiksW28uc3Vic3RyaW5nKDAsYSksby5zdWJzdHIoYSsxKV0pLDIpKVswXSxsPXJbMV0pLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLHUsYyxsLGZ1bmN0aW9uKHQpe3MuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sodC5fZGF0YXx8LTEsbix0KX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsbil9LGV9KGgpLHA9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4saSl7cmV0dXJuIHQuY2FsbCh0aGlzLGUuYm9keSxuLGkpfHx0aGlzfXJldHVybiBPYmplY3QoaS5iKShlLHQpLGV9KGEuYik7ZnVuY3Rpb24gbSgpe3JldHVybiBPYmplY3QoYS5oKSgpP25ldyBhLmY6bmV3IGEuZH1mdW5jdGlvbiB5KCl7cmV0dXJuIG5ldyBhLmd9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIG5ldyBmKHQsZSxuKX12YXIgZz1uZXcgby5vKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksYj1mdW5jdGlvbigpe319LHhNeUU6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gc30pO3ZhciBpPW4oIm1yU0ciKSxyPW4oIkZGT28iKSxvPW4oIit1bUsiKSxhPW4oIjJCZGoiKTtmdW5jdGlvbiBzKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGkubGlmdChuZXcgdSh0LGUsbikpfX12YXIgdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3RoaXMubmV4dE9yT2JzZXJ2ZXI9dCx0aGlzLmVycm9yPWUsdGhpcy5jb21wbGV0ZT1ufXJldHVybiB0LnByb3RvdHlwZS5jYWxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuc3Vic2NyaWJlKG5ldyBjKHQsdGhpcy5uZXh0T3JPYnNlcnZlcix0aGlzLmVycm9yLHRoaXMuY29tcGxldGUpKX0sdH0oKSxjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkscil7dmFyIHM9dC5jYWxsKHRoaXMsZSl8fHRoaXM7cmV0dXJuIHMuX3RhcE5leHQ9by5hLHMuX3RhcEVycm9yPW8uYSxzLl90YXBDb21wbGV0ZT1vLmEscy5fdGFwRXJyb3I9aXx8by5hLHMuX3RhcENvbXBsZXRlPXJ8fG8uYSxPYmplY3QoYS5hKShuKT8ocy5fY29udGV4dD1zLHMuX3RhcE5leHQ9bik6biYmKHMuX2NvbnRleHQ9bixzLl90YXBOZXh0PW4ubmV4dHx8by5hLHMuX3RhcEVycm9yPW4uZXJyb3J8fG8uYSxzLl90YXBDb21wbGV0ZT1uLmNvbXBsZXRlfHxvLmEpLHN9cmV0dXJuIGkuYihlLHQpLGUucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHQpe3RyeXt0aGlzLl90YXBOZXh0LmNhbGwodGhpcy5fY29udGV4dCx0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXRoaXMuZGVzdGluYXRpb24ubmV4dCh0KX0sZS5wcm90b3R5cGUuX2Vycm9yPWZ1bmN0aW9uKHQpe3RyeXt0aGlzLl90YXBFcnJvci5jYWxsKHRoaXMuX2NvbnRleHQsdCl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX10aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfSxlLnByb3RvdHlwZS5fY29tcGxldGU9ZnVuY3Rpb24oKXt0cnl7dGhpcy5fdGFwQ29tcGxldGUuY2FsbCh0aGlzLl9jb250ZXh0KX1jYXRjaCh0KXtyZXR1cm4gdm9pZCB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfXJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9LGV9KHIuYSl9LHhUbGE6ZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtuLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gaX0pO3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIn0seTNCeTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24uZChlLCJhIixmdW5jdGlvbigpe3JldHVybiByfSksbi5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgaT1uKCIrdW1LIik7ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1bXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbyh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PzE9PT10Lmxlbmd0aD90WzBdOmZ1bmN0aW9uKGUpe3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBlKHQpfSxlKX06aS5hfX0sem90bTpmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIm1yU0ciKSxyPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuLGkpe3ZhciByPXQuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5wYXJlbnQ9ZSxyLm91dGVyVmFsdWU9bixyLm91dGVySW5kZXg9aSxyLmluZGV4PTAscn1yZXR1cm4gaS5iKGUsdCksZS5wcm90b3R5cGUuX25leHQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsdCx0aGlzLm91dGVySW5kZXgsdGhpcy5pbmRleCsrLHRoaXMpfSxlLnByb3RvdHlwZS5fZXJyb3I9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQubm90aWZ5RXJyb3IodCx0aGlzKSx0aGlzLnVuc3Vic2NyaWJlKCl9LGUucHJvdG90eXBlLl9jb21wbGV0ZT1mdW5jdGlvbigpe3RoaXMucGFyZW50Lm5vdGlmeUNvbXBsZXRlKHRoaXMpLHRoaXMudW5zdWJzY3JpYmUoKX0sZX0obigiRkZPbyIpLmEpLG89bigiRnhiMSIpO2Z1bmN0aW9uIGEodCxlLG4saSl7dmFyIGE9bmV3IHIodCxuLGkpO3JldHVybiBPYmplY3Qoby5hKShlKShhKX1uLmQoZSwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pfX1dKTsod2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSkucHVzaChbWzhdLHs0OmZ1bmN0aW9uKG4sbCxhKXtuLmV4cG9ydHM9YSgielVuYiIpfSxBeXRSOmZ1bmN0aW9uKG4sbCxhKXsidXNlIHN0cmljdCI7YS5kKGwsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHR9KTt2YXIgdD17cHJvZHVjdGlvbjohMH19LCJNaG0rIjpmdW5jdGlvbihtb2R1bGUsX193ZWJwYWNrX2V4cG9ydHNfXyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7X193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sImEiLGZ1bmN0aW9uKCl7cmV0dXJuIENodW5rTG9hZGVyU2VydmljZX0pO3ZhciByeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX189X193ZWJwYWNrX3JlcXVpcmVfXygiMC91USIpLF9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oInJmMzAiKSxfZW52aXJvbm1lbnRzX2Vudmlyb25tZW50X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQXl0UiIpLF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJDY25HIiksX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJ0L05hIiksQ2h1bmtMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2h1bmtMb2FkZXJTZXJ2aWNlKG4pe3ZhciBsPXRoaXM7dGhpcy5odHRwPW4sdGhpcy5yZWNvcmRzPV9wYWdlX2NodW5rX3JlY29yZF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fLmEsMCE9X2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLmEucHJvZHVjdGlvbiYmdGhpcy5yZWNvcmRzLmZvckVhY2goZnVuY3Rpb24obil7c2V0VGltZW91dChmdW5jdGlvbigpe2wubG9hZFBhZ2VDaHVuayhuLnBhZ2VOYW1lLGZ1bmN0aW9uKCl7fSl9KX0pfXJldHVybiBDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZFBhZ2VDaHVuaz1mdW5jdGlvbihuKXt2YXIgbD10aGlzLGE9bmV3IFByb21pc2UoZnVuY3Rpb24oYSx0KXt2YXIgZT1sLnJlY29yZHMuZmluZChmdW5jdGlvbihsKXtyZXR1cm4gbC5wYWdlTmFtZT09bn0pO3ZvaWQgMCE9ZT8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK2UucGFnZU5hbWUrIiAoIitlLmNodW5rVVJMKyIsICIrZS5jaHVua0xvYWRlZCsiKSBbQXN5bmNdIiksMD09ZS5jaHVua0xvYWRlZD9sLmh0dHAuZ2V0KGUuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24obil7cmV0dXJuIGwuYXN5bmNMb2FkRGF0YUNodW5rKG4sZSxhKX0sZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUubG9nKG4pfSk6YSghMCkpOmEoITApfSk7cmV0dXJuIE9iamVjdChyeGpzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uYSkoYSl9LENodW5rTG9hZGVyU2VydmljZS5wcm90b3R5cGUubG9hZFBhZ2VDaHVuaz1mdW5jdGlvbihuLGwpe3ZhciBhPXRoaXMsdD10aGlzLnJlY29yZHMuZmluZChmdW5jdGlvbihsKXtyZXR1cm4gbC5wYWdlTmFtZT09bn0pO3ZvaWQgMCE9dD8oY29uc29sZS5sb2coIkxvYWRpbmcgOiAiK3QucGFnZU5hbWUrIiAoIit0LmNodW5rVVJMKyIpIiksMD09dC5jaHVua0xvYWRlZD90aGlzLmh0dHAuZ2V0KHQuY2h1bmtVUkwse3Jlc3BvbnNlVHlwZToidGV4dCJ9KS5zdWJzY3JpYmUoZnVuY3Rpb24obil7cmV0dXJuIGEubG9hZERhdGFDaHVuayhuLGwsdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLmxvZyhuKX0pOmwoKSk6bCgpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmxvYWREYXRhQ2h1bms9ZnVuY3Rpb24oYmFzZTY0ZGF0YSxjYWxsYmFjayxyZWNvcmQpe3ZhciBkZWNvZGVkRGF0YT1hdG9iKGJhc2U2NGRhdGEpO2V2YWwoZGVjb2RlZERhdGEpLHJlY29yZC5jaHVua0xvYWRlZD0hMCxjb25zb2xlLmxvZygiTG9hZGVkIDogIityZWNvcmQucGFnZU5hbWUrIiAoIityZWNvcmQuY2h1bmtVUkwrIikiKSxjYWxsYmFjaygpfSxDaHVua0xvYWRlclNlcnZpY2UucHJvdG90eXBlLmFzeW5jTG9hZERhdGFDaHVuaz1mdW5jdGlvbihiYXNlNjRkYXRhLHJlY29yZCxyZXNvbHZlKXt2YXIgZGVjb2RlZERhdGE9YXRvYihiYXNlNjRkYXRhKTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIkxvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIFtBc3luY10iKSxyZXNvbHZlKCEwKX0sQ2h1bmtMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18uUyh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgQ2h1bmtMb2FkZXJTZXJ2aWNlKF9hbmd1bGFyX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5XKF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18uYykpfSx0b2tlbjpDaHVua0xvYWRlclNlcnZpY2UscHJvdmlkZWRJbjoicm9vdCJ9KSxDaHVua0xvYWRlclNlcnZpY2V9KCl9LGFlY2Q6ZnVuY3Rpb24obW9kdWxlLF9fd2VicGFja19leHBvcnRzX18sX193ZWJwYWNrX3JlcXVpcmVfXyl7InVzZSBzdHJpY3QiO19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCJhIixmdW5jdGlvbigpe3JldHVybiBQcmVJbml0TG9hZGVyU2VydmljZX0pO3ZhciBfcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXz1fX3dlYnBhY2tfcmVxdWlyZV9fKCJyZjMwIiksX2Vudmlyb25tZW50c19lbnZpcm9ubWVudF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fPV9fd2VicGFja19yZXF1aXJlX18oIkF5dFIiKSxfYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX189X193ZWJwYWNrX3JlcXVpcmVfXygiQ2NuRyIpLF9hbmd1bGFyX2NvbW1vbl9odHRwX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX189X193ZWJwYWNrX3JlcXVpcmVfXygidC9OYSIpLFByZUluaXRMb2FkZXJTZXJ2aWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJlSW5pdExvYWRlclNlcnZpY2Uobil7dGhpcy5odHRwPW59cmV0dXJuIFByZUluaXRMb2FkZXJTZXJ2aWNlLnByb3RvdHlwZS5sb2FkUGFnZUF0SW5pdD1mdW5jdGlvbigpe2lmKDAhPV9lbnZpcm9ubWVudHNfZW52aXJvbm1lbnRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXy5hLnByb2R1Y3Rpb24pe2NvbnNvbGUubG9nKCJJUEwgOiBJbml0aWFsIHBhZ2UgbG9hZGVyIFtBUFBfSU5JVElBTElaRVJdIik7dmFyIGN1cnJVcmw9d2luZG93LmxvY2F0aW9uLmhyZWYscmVnZXg9bmV3IFJlZ0V4cCgiI1xcLy4qIiksbWF0Y2hBcnJheT1jdXJyVXJsLm1hdGNoKHJlZ2V4KTtpZihBcnJheS5pc0FycmF5KG1hdGNoQXJyYXkpJiZtYXRjaEFycmF5Lmxlbmd0aCl7dmFyIGN1cnJQYXRoXzE9bWF0Y2hBcnJheVswXS5zbGljZSgxKTtjb25zb2xlLmxvZygiVVJMIDogIitjdXJyVXJsKSxjb25zb2xlLmxvZygiUGF0aCA6ICIrY3VyclBhdGhfMSk7dmFyIHJlY29yZD1fcGFnZV9jaHVua19yZWNvcmRfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5hLmZpbmQoZnVuY3Rpb24obil7cmV0dXJuIG4ucGFnZU5hbWU9PWN1cnJQYXRoXzF9KTtpZih2b2lkIDA9PXJlY29yZClyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiSVBMIDogTm8gcmVjb3JkIGZvdW5kLCBwYWdlIGNhbid0IGJlIGxvYWRlZCBpbml0aWFsbHkuXG5JUEwgOiBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgcGF0aCBpcyBub3QgcGFydCBvZiB0aGUgbWFpbiBjaHVuayB0aGF0IGlzIGVtYmVkZGVkIGluIHRoZSBodG1sIHBhZ2UiKTtpZihjb25zb2xlLmxvZygiSVBMIDogQ29ycmVzcG9uZGluZyByZWNvcmQgZm91bmQgOiAiK3JlY29yZC5wYWdlTmFtZSsiICgiK3JlY29yZC5jaHVua1VSTCsiKSIpLDA9PXJlY29yZC5jaHVua0xvYWRlZCl7dmFyIHJlcT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYocmVxLm9wZW4oIkdFVCIscmVjb3JkLmNodW5rVVJMLCExKSxyZXEuc2VuZChudWxsKSwyMDA9PT1yZXEuc3RhdHVzKXt2YXIgZGVjb2RlZERhdGE9YXRvYihyZXEucmVzcG9uc2VUZXh0KTtldmFsKGRlY29kZWREYXRhKSxyZWNvcmQuY2h1bmtMb2FkZWQ9ITAsY29uc29sZS5sb2coIklQTCA6IExvYWRlZCA6ICIrcmVjb3JkLnBhZ2VOYW1lKyIgKCIrcmVjb3JkLmNodW5rVVJMKyIpIil9ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogRXJyb3Igd2hpbGUgZ2V0dGluZyBkYXRhOiAlZCAoJXMpIixyZXEuc3RhdHVzLHJlcS5zdGF0dXNUZXh0KX19ZWxzZSBjb25zb2xlLmxvZygiSVBMIDogTWFpbiBwYWdlLCBvciB1bmNhdWdodCBlcnJvci4iKX19LFByZUluaXRMb2FkZXJTZXJ2aWNlLm5nSW5qZWN0YWJsZURlZj1fYW5ndWxhcl9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18uUyh7ZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUHJlSW5pdExvYWRlclNlcnZpY2UoX2FuZ3VsYXJfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fLlcoX2FuZ3VsYXJfY29tbW9uX2h0dHBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXy5jKSl9LHRva2VuOlByZUluaXRMb2FkZXJTZXJ2aWNlLHByb3ZpZGVkSW46InJvb3QifSksUHJlSW5pdExvYWRlclNlcnZpY2V9KCl9LGNybmQ6ZnVuY3Rpb24obixsLGEpe3ZhciB0PXsiLi9hdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbIm5ybHEiLDFdLCIuL3N1cHBvcnQtc2VjdGlvbi9zdXBwb3J0LXNlY3Rpb24tbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJONGxwIiwwXSwiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUubmdmYWN0b3J5IjpbIlRrWWsiLDJdLCIuL3dpa2ktbGlnaHRwcm94eS93aWtpLWxpZ2h0cHJveHktbGF5ZXIubW9kdWxlLm5nZmFjdG9yeSI6WyJnRGpjIiwzXX07ZnVuY3Rpb24gZShuKXt2YXIgbD10W25dO3JldHVybiBsP2EuZShsWzFdKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGEobFswXSl9KTpQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGw9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgIicrbisnIi4nKTt0aHJvdyBsLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGx9KX1lLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModCl9LGUuaWQ9ImNybmQiLG4uZXhwb3J0cz1lfSxwWmhNOmZ1bmN0aW9uKG4sbCxhKXsidXNlIHN0cmljdCI7YS5kKGwsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIHR9KTt2YXIgdD1mdW5jdGlvbigpe319LHJmMzA6ZnVuY3Rpb24obixsLGEpeyJ1c2Ugc3RyaWN0IjthLmQobCwiYSIsZnVuY3Rpb24oKXtyZXR1cm4gZX0pO3ZhciB0PWZ1bmN0aW9uKG4sbCl7dGhpcy5wYWdlTmFtZT1uLHRoaXMuY2h1bmtVUkw9bCx0aGlzLmNodW5rTG9hZGVkPSExfSxlPVtuZXcgdCgiL3N1cHBvcnQiLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy85LzkxL1QtLUdPX1BhcmlzLVNhY2xheS0tc3VwcG9ydF9jaHVuay5iYXNlNjQudHh0IiksbmV3IHQoIi90ZWFtIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvNy83NC9ULS1HT19QYXJpcy1TYWNsYXktLXRlYW1fY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyB0KCIvbGFibm90ZWJvb2siLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy8wLzAyL1QtLUdPX1BhcmlzLVNhY2xheS0tbGFibm90ZWJvb2tfY2h1bmsuYmFzZTY0LnR4dCIpLG5ldyB0KCIvYXR0cmlidXRpb24iLCJodHRwOi8vMjAxOC5pZ2VtLm9yZy93aWtpL2ltYWdlcy81LzVhL1QtLUdPX1BhcmlzLVNhY2xheS0tYXR0cmlidXRpb25fY2h1bmsuYmFzZTY0LnR4dCIpXX0selVuYjpmdW5jdGlvbihuLGwsYSl7InVzZSBzdHJpY3QiO2EucihsKTt2YXIgdD1hKCJDY25HIiksZT1hKCJBeXRSIiksdT1hKCJJcDBSIikscj1hKCJhZWNkIiksbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuLGwpe3RoaXMucGxhdGZvcm1JZD1uLHRoaXMuYXBwSWQ9bDt2YXIgYT1PYmplY3QodS5xKShuKT8iaW4gdGhlIGJyb3dzZXIiOiJvbiB0aGUgc2VydmVyIjtjb25zb2xlLmxvZygiUnVubmluZyAiK2ErIiB3aXRoIGFwcElkPSIrbCl9fSgpLGk9YSgidkdYWSIpLGM9YSgiNjdZLyIpLHM9YSgiTWhtKyIpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sbCxhKXt2YXIgdD10aGlzO3RoaXMuYnJlYWtwb2ludE9ic2VydmVyPW4sdGhpcy5yb3V0ZXI9bCx0aGlzLmNodW5rTG9hZGVyPWEsdGhpcy5zaG93U3VibWVudT0hMSx0aGlzLm9wZW5lZFNpZGVOYXY9ITAsdGhpcy5pc0hhbmRzZXQkPXRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUoaS5iLkhhbmRzZXQpLnBpcGUoT2JqZWN0KGMuYSkoZnVuY3Rpb24obil7cmV0dXJuIG4ubWF0Y2hlc30pKSx0aGlzLnNpZGVNZW51Q29uZmlnPXtwYWRkaW5nQXRTdGFydDohMCxzZWxlY3RlZExpc3RGb250Q29sb3I6InJnYigxMTEsMTcyLDkzKSJ9LHRoaXMuc2lkZU1lbnVMaXN0PVt7bGFiZWw6Ik1haW4gcGFnZSIsaWNvbjoiZGFzaGJvYXJkIixsaW5rOiIvZGFzaGJvYXJkIn0se2xhYmVsOiJQcm9qZWN0IERlc2lnbiIsaWNvbjoiYXNzZXNzbWVudCIsbGluazoiL3Byb2plY3QifSx7bGFiZWw6IkJpb2xvZ3kiLGljb246ImJsdXJfY2lyY3VsYXIiLGl0ZW1zOlt7bGFiZWw6Ik92ZXJ2aWV3IixpY29uOiJleHBsb3JlIixsaW5rOiIvYmlvbG9neSJ9LHtsYWJlbDoiUGFydHMiLGljb246InZpZXdfY29tZnkiLGxpbms6Ii9wYXJ0cyJ9XX0se2xhYmVsOiJDb21wdXRpbmciLGljb246ImRlc2t0b3BfbWFjIixpdGVtczpbe2xhYmVsOiJNb2RlbGluZyIsaWNvbjoidGltZWxpbmUiLGxpbms6Ii9tb2RlbGluZyJ9LHtsYWJlbDoiU29mdHdhcmUiLGljb246Im1lbW9yeSIsbGluazoiL3NvZnR3YXJlIn1dfSx7bGFiZWw6Ikh1bWFuIFByYWN0aWNlcyIsaWNvbjoiYWNjZXNzaWJpbGl0eV9uZXciLGxpbms6Ii9odW1hbi1wcmFjdGljZXMifSx7bGFiZWw6IkNvbGxhYm9yYXRpb25zIixpY29uOiJwdWJsaWMiLGxpbms6Ii9jb2xsYWJvcmF0aW9ucyJ9LHtsYWJlbDoiT3VyIHRlYW0iLGljb246InBlb3BsZSIsbGluazoiL3RlYW0ifSx7bGFiZWw6IlN1cHBvcnQiLGljb246ImZvbGRlcl9zcGVjaWFsIixpdGVtczpbe2xhYmVsOiJTcG9uc29ycyIsaWNvbjoiYXR0YWNoX21vbmV5IixsaW5rOiIvc3VwcG9ydCJ9LHtsYWJlbDoiQXR0cmlidXRpb24iLGljb246InBlcnNvbl9waW4iLGxpbms6Ii9hdHRyaWJ1dGlvbiJ9XX0se2xhYmVsOiJMYWIgTm90ZWJvb2siLGljb246ImJsdXJfY2lyY3VsYXIiLGxpbms6Ii9sYWJub3RlYm9vayJ9XSx0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3Npbmc9ZnVuY3Rpb24obil7dC5yb3V0ZXJMaW5rQ2h1bmtQcm9jZXNzaW5nVW5ib3VuZChuLHQpfX1yZXR1cm4gbi5wcm90b3R5cGUucm91dGVyTGlua0NodW5rUHJvY2Vzc2luZ1VuYm91bmQ9ZnVuY3Rpb24obixsKXtsLmNodW5rTG9hZGVyLmxvYWRQYWdlQ2h1bmsobixmdW5jdGlvbigpe2wucm91dGVyLm5hdmlnYXRlQnlVcmwobil9KX0sbi5wcm90b3R5cGUub3BlblNpZGVOYXY9ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZFNpZGVOYXY9ITAhPT10aGlzLm9wZW5lZFNpZGVOYXZ9LG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5zZWxlY3RlZFNpZGVNZW51SXRlbT1mdW5jdGlvbihuKXt0aGlzLnJvdXRlckxpbmtDaHVua1Byb2Nlc3Npbmcobi5saW5rKX0sbn0oKSxwPWEoInBNblMiKSxoPWEoImx6bGoiKSxtPWEoIkZWU3kiKSxnPWEoImdJM0IiKSxmPWEoIlZwaFoiKTtmdW5jdGlvbiBiKG4sbCxhKXt2YXIgdCxlPWYuayhuKSx1PU1hdGgubWluKHBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpLHBhcnNlSW50KGUuc3R5bGUoImhlaWdodCIpKSkvMixyPXBhcnNlSW50KGUuc3R5bGUoIndpZHRoIikpLzItdSxvPXBhcnNlSW50KGUuc3R5bGUoImhlaWdodCIpKS8yLXUsaT1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbCkpL2EubWF4VmFsdWUsYz1NYXRoLmZsb29yKDEwMCpNYXRoLnJhbmRvbSgpKSsxO3Q9YS53YXZlSGVpZ2h0U2NhbGluZz9mLmooKS5yYW5nZShbMCxhLndhdmVIZWlnaHQsMF0pLmRvbWFpbihbMCw1MCwxMDBdKTpmLmooKS5yYW5nZShbYS53YXZlSGVpZ2h0LGEud2F2ZUhlaWdodF0pLmRvbWFpbihbMCwxMDBdKTt2YXIgcz1hLnRleHRTaXplKnUvMixkPXBhcnNlRmxvYXQobCkudG9GaXhlZCgyKSxwPWEudmFsdWVDb3VudFVwP2EubWluVmFsdWU6ZCxoPWEuZGlzcGxheVBlcmNlbnQ/YS5jdXN0b21QZXJjZW50OiIiLG09YS5jaXJjbGVUaGlja25lc3MqdSxnPW0rYS5jaXJjbGVGaWxsR2FwKnUsYj11LWcsXz1iKnQoMTAwKmkpLHY9MSthLndhdmVDb3VudCxQPTIqYi9hLndhdmVDb3VudCp2LHg9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobil9O3BhcnNlRmxvYXQoZCkhPXBhcnNlRmxvYXQoeChkKSkmJih4PWZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGQpIT1wYXJzZUZsb2F0KHgoZCkpJiYoeD1mdW5jdGlvbihuKXtyZXR1cm4gcGFyc2VGbG9hdChuKS50b0ZpeGVkKDIpfSk7Zm9yKHZhciB3PVtdLGs9MDtrPD00MCp2O2srKyl3LnB1c2goe3g6ay8oNDAqdikseTprLzQwfSk7dmFyIHk9Zi5qKCkucmFuZ2UoWzAsMipNYXRoLlBJXSkuZG9tYWluKFswLDFdKSxPPWYuaigpLnJhbmdlKFswLHVdKS5kb21haW4oWzAsdV0pLEM9Zi5qKCkucmFuZ2UoWzAsUF0pLmRvbWFpbihbMCwxXSksTT1mLmooKS5yYW5nZShbMCxfXSkuZG9tYWluKFswLDFdKSxBPWYuaigpLnJhbmdlKFtnKzIqYitfLGctX10pLmRvbWFpbihbMCwxXSksTD1mLmooKS5yYW5nZShbMCxQLTIqYl0pLmRvbWFpbihbMCwxXSksWD1mLmooKS5yYW5nZShbZysyKmIsZysuNypzXSkuZG9tYWluKFswLDFdKSxJPWUuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcisiLCIrbysiKSIpLFQ9Zi5hKCkuc3RhcnRBbmdsZSh5KDApKS5lbmRBbmdsZSh5KDEpKS5vdXRlclJhZGl1cyhPKHUpKS5pbm5lclJhZGl1cyhPKHUtbSkpO0kuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsVCkuc3R5bGUoImZpbGwiLGEuY2lyY2xlQ29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK3UrIikiKTt2YXIgRT1JLmFwcGVuZCgidGV4dCIpLnRleHQoeChwKStoKS5hdHRyKCJjbGFzcyIsImxpcXVpZEZpbGxHYXVnZVRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZvbnQtc2l6ZSIscysicHgiKS5zdHlsZSgiZmlsbCIsYS50ZXh0Q29sb3IpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK1goYS50ZXh0VmVydFBvc2l0aW9uKSsiKSIpLGo9Zi5iKCkueChmdW5jdGlvbihuKXtyZXR1cm4gQyhuLngpfSkueTAoZnVuY3Rpb24obil7cmV0dXJuIE0oTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbi55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKG4pe3JldHVybiAyKmIrX30pLFM9SS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLCJjbGlwV2F2ZSIrYy50b1N0cmluZygpKSxaPVMuYXBwZW5kKCJwYXRoIikuZGF0dW0odykuYXR0cigiZCIsaikuYXR0cigiVCIsMCksUj1JLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsInVybCgjY2xpcFdhdmUiK2MudG9TdHJpbmcoKSsiKSIpO1IuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsdSkuYXR0cigiY3kiLHUpLmF0dHIoInIiLGIpLnN0eWxlKCJmaWxsIixhLndhdmVDb2xvcik7dmFyIEQ9Ui5hcHBlbmQoInRleHQiKS50ZXh0KHgocCkraCkuYXR0cigiY2xhc3MiLCJsaXF1aWRGaWxsR2F1Z2VUZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmb250LXNpemUiLHMrInB4Iikuc3R5bGUoImZpbGwiLGEud2F2ZVRleHRDb2xvcikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCIrWChhLnRleHRWZXJ0UG9zaXRpb24pKyIpIik7aWYoYS52YWx1ZUNvdW50VXApe3ZhciBVPWZ1bmN0aW9uKCl7dmFyIG49Zi5mKHAsZCk7cmV0dXJuIGZ1bmN0aW9uKGwpe0UudGV4dCh4KG4obCkpK2gpLEQudGV4dCh4KG4obCkpK2gpfX07RS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLnR3ZWVuKCJ0ZXh0IixVKSxELnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLFUpfXZhciBGPWcrMipiLVA7ZnVuY3Rpb24gTigpe1ouYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrTChaLmF0dHIoIlQiKSkrIiwwKSIpLFoudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGVUaW1lKigxLVouYXR0cigiVCIpKSkuZWFzZShmLmQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0woMSkrIiwwKSIpLmF0dHIoIlQiLDEpLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Wi5hdHRyKCJUIiwwKSxOKCl9KX1yZXR1cm4gYS53YXZlUmlzZT9TLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0YrIiwiK0EoMCkrIikiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS53YXZlUmlzZVRpbWUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0YrIiwiK0EoaSkrIikiKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Wi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMSwwKSIpfSk6Uy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitGKyIsIitBKGkpKyIpIiksYS53YXZlQW5pbWF0ZSYmTigpLHt1cGRhdGUobil7dmFyIGw9cGFyc2VGbG9hdChuKS50b0ZpeGVkKDIpLGU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobil9O3BhcnNlRmxvYXQobCkhPXBhcnNlRmxvYXQoZShsKSkmJihlPWZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pLnRvRml4ZWQoMSl9KSxwYXJzZUZsb2F0KGwpIT1wYXJzZUZsb2F0KGUobCkpJiYoZT1mdW5jdGlvbihuKXtyZXR1cm4gcGFyc2VGbG9hdChuKS50b0ZpeGVkKDIpfSk7dmFyIHU9ZnVuY3Rpb24oKXt2YXIgbD1mLmYoRS50ZXh0KCkscGFyc2VGbG9hdChuKS50b0ZpeGVkKDIpKTtyZXR1cm4gZnVuY3Rpb24obil7RS50ZXh0KGUobChuKSkraCksRC50ZXh0KGUobChuKSkraCl9fTtFLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkudHdlZW4oInRleHQiLHUpLEQudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZVJpc2VUaW1lKS50d2VlbigidGV4dCIsdSk7dmFyIHIsbz1NYXRoLm1heChhLm1pblZhbHVlLE1hdGgubWluKGEubWF4VmFsdWUsbikpL2EubWF4VmFsdWUsaT1iKnQoMTAwKm8pLGM9Zi5qKCkucmFuZ2UoW2crMipiK2ksZy1pXSkuZG9tYWluKFswLDFdKShvKSxzPWYuaigpLnJhbmdlKFswLFBdKS5kb21haW4oWzAsMV0pLGQ9Zi5qKCkucmFuZ2UoWzAsaV0pLmRvbWFpbihbMCwxXSk7cj1hLndhdmVIZWlnaHRTY2FsaW5nP2YubC5hcmVhKCkueChmdW5jdGlvbihuKXtyZXR1cm4gcyhuLngpfSkueTAoZnVuY3Rpb24obil7cmV0dXJuIGQoTWF0aC5zaW4oMipNYXRoLlBJKmEud2F2ZU9mZnNldCotMSsyKk1hdGguUEkqKDEtYS53YXZlQ291bnQpKzIqbi55Kk1hdGguUEkpKX0pLnkxKGZ1bmN0aW9uKG4pe3JldHVybiAyKmIraX0pOmo7dmFyIHA9YS53YXZlQW5pbWF0ZT9MKDEpOjA7Wi50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEud2F2ZUFuaW1hdGU/YS53YXZlQW5pbWF0ZVRpbWUqKDEtWi5hdHRyKCJUIikpOmEud2F2ZVJpc2VUaW1lKS5lYXNlKGYuZCkuYXR0cigiZCIscikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcCsiLDApIikuYXR0cigiVCIsIjEiKS5vbigiZW5kIixmdW5jdGlvbigpe2Eud2F2ZUFuaW1hdGUmJihaLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0woMCkrIiwwKSIpLE4oKSl9KSxTLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLndhdmVSaXNlVGltZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrRisiLCIrYysiKSIpfX19dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcy5keW5fd2lkdGg9NTAwfXJldHVybiBuLnByb3RvdHlwZS5uZ0FmdGVyQ29udGVudEluaXQ9ZnVuY3Rpb24oKXt2YXIgbixsO3RoaXMuZHluX3dpZHRoPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkM2NvbnRhaW5lciIpLmNsaWVudFdpZHRoLG49Zi5rKCIjZDN0YXJnZXQiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cigiaWQiLCJhbmltYXRlLWdyYWRpZW50IikuYXR0cigieDEiLCIwJSIpLmF0dHIoInkxIiwiMCUiKS5hdHRyKCJ4MiIsIjEwMCUiKS5hdHRyKCJ5MiIsIjAiKS5hdHRyKCJzcHJlYWRNZXRob2QiLCJyZWZsZWN0IiksbD1bIiMwMDFhZmQiLCIjNmI2N2ZjIiwiIzUzOTBlMyIsIiMzNTZjYzYiLCIjNTM5MGUzIiwiIzZiNjdmYyIsIiMwMDFhZmQiXSxuLnNlbGVjdEFsbCgiLnN0b3AiKS5kYXRhKGwpLmVudGVyKCkuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixmdW5jdGlvbihuLGEpe3JldHVybiBhLyhsLmxlbmd0aC0xKX0pLmF0dHIoInN0b3AtY29sb3IiLGZ1bmN0aW9uKG4pe3JldHVybiBufSksbi5hcHBlbmQoImFuaW1hdGUiKS5hdHRyKCJhdHRyaWJ1dGVOYW1lIiwieDEiKS5hdHRyKCJ2YWx1ZXMiLCIwJTsxMDAlIikuYXR0cigiZHVyIiwiN3MiKS5hdHRyKCJyZXBlYXRDb3VudCIsImluZGVmaW5pdGUiKSxuLmFwcGVuZCgiYW5pbWF0ZSIpLmF0dHIoImF0dHJpYnV0ZU5hbWUiLCJ4MiIpLmF0dHIoInZhbHVlcyIsIjEwMCU7MjAwJSIpLmF0dHIoImR1ciIsIjdzIikuYXR0cigicmVwZWF0Q291bnQiLCJpbmRlZmluaXRlIiksZnVuY3Rpb24obil7dmFyIGw9MTgwL01hdGguUEksYT1mLmkoNTApLm1hcChmdW5jdGlvbigpe3ZhciBuPTE1MCpNYXRoLnJhbmRvbSgpLGw9MTUwKk1hdGgucmFuZG9tKCk7cmV0dXJue3Z4OjIqTWF0aC5yYW5kb20oKS0xLHZ5OjIqTWF0aC5yYW5kb20oKS0xLHBhdGg6Zi5pKDEyKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bbixsXX0pLGNvdW50OjB9fSksdD1mLmsoIiNiYWN0ZXJpYWNvbnRhaW5lciIpLnNlbGVjdEFsbCgiZyIpLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoImciKSxlPXQuYXBwZW5kKCJlbGxpcHNlIikuYXR0cigicngiLDIpLmF0dHIoInJ5IiwzKTt0LmFwcGVuZCgicGF0aCIpLmRhdHVtKGZ1bmN0aW9uKG4pe3JldHVybiBuLnBhdGguc2xpY2UoMCwzKX0pLmF0dHIoImNsYXNzIiwibWlkIiksdC5hcHBlbmQoInBhdGgiKS5kYXR1bShmdW5jdGlvbihuKXtyZXR1cm4gbi5wYXRofSkuYXR0cigiY2xhc3MiLCJ0YWlsIik7dmFyIHU9dC5zZWxlY3RBbGwoInBhdGgiKTtmdW5jdGlvbiByKG4pe3JldHVybiJ0cmFuc2xhdGUoIituLnBhdGhbMF0rIilyb3RhdGUoIitNYXRoLmF0YW4yKG4udnksbi52eCkqbCsiKSJ9ZnVuY3Rpb24gbyhuKXtyZXR1cm4iTSIrbi5qb2luKCJMIil9Zi5tKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xOysrbjw1MDspe3ZhciBsPWFbbl0sdD1sLnBhdGgsaT1sLnZ4LGM9bC52eSxzPXRbMF1bMF0rPWksZD10WzBdWzFdKz1jO01hdGguc3FydChpKmkrYypjKSwoczwwfHxzPjE1MCkmJihsLnZ4Kj0tMSksKGQ8MHx8ZD4xNTApJiYobC52eSo9LTEpfWUuYXR0cigidHJhbnNmb3JtIixyKSx1LmF0dHIoImQiLG8pfSl9KCk7dmFyIGE9e21pblZhbHVlOjAsbWF4VmFsdWU6MTAwLGNpcmNsZVRoaWNrbmVzczouMDUsY2lyY2xlRmlsbEdhcDouMDUsY2lyY2xlQ29sb3I6IiMxNzhCQ0EiLHdhdmVIZWlnaHQ6LjA1LHdhdmVDb3VudDoxLHdhdmVSaXNlVGltZToxZTMsd2F2ZUFuaW1hdGVUaW1lOjE4ZTMsd2F2ZVJpc2U6ITAsd2F2ZUhlaWdodFNjYWxpbmc6ITAsd2F2ZUFuaW1hdGU6ITAsd2F2ZUNvbG9yOiIjMTc4QkNBIix3YXZlT2Zmc2V0OjAsdGV4dFZlcnRQb3NpdGlvbjouNSx0ZXh0U2l6ZToxLHZhbHVlQ291bnRVcDohMCxkaXNwbGF5UGVyY2VudDohMCx0ZXh0Q29sb3I6IiMwNDU2ODEiLHdhdmVUZXh0Q29sb3I6IiNBNERCZjgiLGN1c3RvbVBlcmNlbnQ6IiUifTthLnZhbHVlQ291bnRVcD0hMCxhLmNpcmNsZVRoaWNrbmVzcz0uMTUsYS5jaXJjbGVDb2xvcj0iIzgwODAxNSIsYS50ZXh0Q29sb3I9IiM1NTU1MDAiLGEud2F2ZVRleHRDb2xvcj0iI0ZGRkZBQSIsYS53YXZlQ29sb3I9IiNBQUFBMzkiLGEudGV4dFZlcnRQb3NpdGlvbj0uOCxhLndhdmVBbmltYXRlVGltZT0xZTMsYS53YXZlSGVpZ2h0PS4wNSxhLndhdmVBbmltYXRlPSEwLGEud2F2ZVJpc2U9ITEsYS53YXZlSGVpZ2h0U2NhbGluZz0hMSxhLndhdmVPZmZzZXQ9LjI1LGEudGV4dFNpemU9LjUsYS53YXZlQ291bnQ9MyxhLmRpc3BsYXlQZXJjZW50PSEwLGEubWluVmFsdWU9MCxhLm1heFZhbHVlPTYwMCxhLmN1c3RvbVBlcmNlbnQ9IiBubW9sL0wiO3ZhciB0PWIoIiNkM2lucHV0Z2F1Z2UiLDIyMCxhKTtPYmplY3QoZy5hKSgxNTAwLDE1MDApLnN1YnNjcmliZShmdW5jdGlvbihuKXtyZXR1cm4gdC51cGRhdGUoTWF0aC5mbG9vcigxMDAqTWF0aC5yYW5kb20oKSkrMjUwKX0pO3ZhciBlPXttaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxjaXJjbGVUaGlja25lc3M6LjA1LGNpcmNsZUZpbGxHYXA6LjA1LGNpcmNsZUNvbG9yOiIjMTc4QkNBIix3YXZlSGVpZ2h0Oi4wNSx3YXZlQ291bnQ6MSx3YXZlUmlzZVRpbWU6MWUzLHdhdmVBbmltYXRlVGltZToxOGUzLHdhdmVSaXNlOiEwLHdhdmVIZWlnaHRTY2FsaW5nOiEwLHdhdmVBbmltYXRlOiEwLHdhdmVDb2xvcjoiIzE3OEJDQSIsd2F2ZU9mZnNldDowLHRleHRWZXJ0UG9zaXRpb246LjUsdGV4dFNpemU6MSx2YWx1ZUNvdW50VXA6ITAsZGlzcGxheVBlcmNlbnQ6ITAsdGV4dENvbG9yOiIjMDQ1NjgxIix3YXZlVGV4dENvbG9yOiIjQTREQmY4IixjdXN0b21QZXJjZW50OiIlIn07ZS52YWx1ZUNvdW50VXA9ITAsZS5jaXJjbGVUaGlja25lc3M9LjE1LGUuY2lyY2xlQ29sb3I9IiM4MDM1N2MiLGUudGV4dENvbG9yPSIjNTU1NTAwIixlLndhdmVUZXh0Q29sb3I9IiNGRkZGQUEiLGUud2F2ZUNvbG9yPSIjQUFBQTM5IixlLnRleHRWZXJ0UG9zaXRpb249LjgsZS53YXZlQW5pbWF0ZVRpbWU9MWUzLGUud2F2ZUhlaWdodD0uMDUsZS53YXZlQW5pbWF0ZT0hMCxlLndhdmVSaXNlPSExLGUud2F2ZUhlaWdodFNjYWxpbmc9ITEsZS53YXZlT2Zmc2V0PS4yNSxlLnRleHRTaXplPS41LGUud2F2ZUNvdW50PTMsZS5kaXNwbGF5UGVyY2VudD0hMCxlLm1pblZhbHVlPTAsZS5tYXhWYWx1ZT02MDAsZS5jdXN0b21QZXJjZW50PSIgbm1vbC9MIjt2YXIgdSxyLG8saSxjLHMsZCxwLGgsbT1iKCIjZDNvdXRnYXVnZSIsNDUsZSk7T2JqZWN0KGcuYSkoMTUwMCwxNTAwKS5zdWJzY3JpYmUoZnVuY3Rpb24obil7cmV0dXJuIG0udXBkYXRlKE1hdGguZmxvb3IoNDAqTWF0aC5yYW5kb20oKSkrNTApfSksbz1mLmsoIiNkM2JpbW9kYWwiKSxpPWYuaigpLmRvbWFpbihbMzAsMTEwXSkucmFuZ2UoWzQwLDI3MF0pLGM9Zi5qKCkuZG9tYWluKFswLC4xXSkucmFuZ2UoWzE1MCwyMF0pLGQ9KHM9Wzc5LDU0LDc0LDYyLDg1LDU1LDg4LDg1LDUxLDg1LDU0LDg0LDc4LDQ3LDgzLDUyLDYyLDg0LDUyLDc5LDUxLDQ3LDc4LDY5LDc0LDgzLDU1LDc2LDc4LDc5LDczLDc3LDY2LDgwLDc0LDUyLDQ4LDgwLDU5LDkwLDgwLDU4LDg0LDU4LDczLDgzLDY0LDUzLDgyLDU5LDc1LDkwLDU0LDgwLDU0LDgzLDcxLDY0LDc3LDgxLDU5LDg0LDQ4LDgyLDYwLDkyLDc4LDc4LDY1LDczLDgyLDU2LDc5LDcxLDYyLDc2LDYwLDc4LDc2LDgzLDc1LDgyLDcwLDY1LDczLDg4LDc2LDgwLDQ4LDg2LDYwLDkwLDUwLDc4LDYzLDcyLDg0LDc1LDUxLDgyLDYyLDg4LDQ5LDgzLDgxLDQ3LDg0LDUyLDg2LDgxLDc1LDU5LDg5LDc5LDU5LDgxLDUwLDg1LDU5LDg3LDUzLDY5LDc3LDU2LDg4LDgxLDQ1LDgyLDU1LDkwLDQ1LDgzLDU2LDg5LDQ2LDgyLDUxLDg2LDUzLDc5LDgxLDYwLDgyLDc3LDc2LDU5LDgwLDQ5LDk2LDUzLDc3LDc3LDY1LDgxLDcxLDcwLDgxLDkzLDUzLDg5LDQ1LDg2LDU4LDc4LDY2LDc2LDYzLDg4LDUyLDkzLDQ5LDU3LDc3LDY4LDgxLDgxLDczLDUwLDg1LDc0LDU1LDc3LDgzLDgzLDUxLDc4LDg0LDQ2LDgzLDU1LDgxLDU3LDc2LDg0LDc3LDgxLDg3LDc3LDUxLDc4LDYwLDgyLDkxLDUzLDc4LDQ2LDc3LDg0LDQ5LDgzLDcxLDgwLDQ5LDc1LDY0LDc2LDUzLDk0LDU1LDc2LDUwLDgyLDU0LDc1LDc4LDc5LDc4LDc4LDcwLDc5LDcwLDU0LDg2LDUwLDkwLDU0LDU0LDc3LDc5LDY0LDc1LDQ3LDg2LDYzLDg1LDgyLDU3LDgyLDY3LDc0LDU0LDgzLDczLDczLDg4LDgwLDcxLDgzLDU2LDc5LDc4LDg0LDU4LDgzLDQzLDYwLDc1LDgxLDQ2LDkwLDQ2LDc0XSkubGVuZ3RoLHA9Zi5lKCkuZG9tYWluKGkuZG9tYWluKCkpLnRocmVzaG9sZHMoNDApKHMpLGg9KHU9ZnVuY3Rpb24obil7cmV0dXJuIE1hdGguYWJzKG4vPTcpPD0xPy43NSooMS1uKm4pLzc6MH0scj1pLnRpY2tzKDQwKSxmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obCl7cmV0dXJuW2wsZi5oKG4sZnVuY3Rpb24obil7cmV0dXJuIHUobC1uKX0pXX0pfSkocyksby5pbnNlcnQoImciLCIqIikuYXR0cigiZmlsbCIsIiNiYmIiKS5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKHApLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24obil7cmV0dXJuIGkobi54MCkrMX0pLmF0dHIoInkiLGZ1bmN0aW9uKG4pe3JldHVybiBjKG4ubGVuZ3RoL2QpfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKG4pe3JldHVybiBpKG4ueDEpLWkobi54MCktMX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24obil7cmV0dXJuIGMoMCktYyhuLmxlbmd0aC9kKX0pLG8uYXBwZW5kKCJwYXRoIikuZGF0dW0oaCkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxLjUpLmF0dHIoInN0cm9rZS1saW5lam9pbiIsInJvdW5kIikuYXR0cigiZCIsZi5nKCkuY3VydmUoZi5jKS54KGZ1bmN0aW9uKG4pe3JldHVybiBpKG5bMF0pfSkueShmdW5jdGlvbihuKXtyZXR1cm4gYyhuWzFdKX0pKX0sbn0oKSx2PXQuTmEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siLmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31tYXQtY2FyZC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwfS5wcm9qZWN0LXByZXNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB0fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gUChuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDUyLCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMSwwLG51bGwsbnVsbCw1LCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMiwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAjNjIwMDNjOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiTWV0aG90ciJdKSksKG4oKSgpLHQuUGEoNCwwLG51bGwsbnVsbCwxLCJzcGFuIixbWyJzdHlsZSIsImNvbG9yOiAgcmVkOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiRXhpdCJdKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIiA6IENsZWFuaW5nIGhvc3BpdGFsIGVmZmx1ZW50IHNpbmNlIDIwMTgiXSkpLChuKCkoKSx0LlBhKDcsMCxudWxsLG51bGwsNDUsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLGguZCxoLmEpKSx0Lk9hKDgsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpLChuKCkoKSx0LlBhKDksMCxudWxsLDAsNCwibWF0LWNhcmQtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1jYXJkLWhlYWRlciJdXSxudWxsLG51bGwsbnVsbCxoLmMsaC5iKSksdC5PYSgxMCw0OTE1MixudWxsLDAsbS5jLFtdLG51bGwsbnVsbCksKG4oKSgpLHQuUGEoMTEsMCxudWxsLDEsMiwibWF0LWNhcmQtdGl0bGUiLFtbImNsYXNzIiwibWF0LWNhcmQtdGl0bGUiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5PYSgxMiwxNjM4NCxudWxsLDAsbS5lLFtdLG51bGwsbnVsbCksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIiBPdXIgUHJvamVjdCAiXSkpLChuKCkoKSx0LlBhKDE0LDAsbnVsbCwwLDM4LCJtYXQtY2FyZC1jb250ZW50IixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkLWNvbnRlbnQgbWF0LWNhcmQtY29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSx0Lk9hKDE1LDE2Mzg0LG51bGwsMCxtLmIsW10sbnVsbCxudWxsKSwobigpKCksdC5QYSgxNiwwLG51bGwsbnVsbCwzNiwiZGl2IixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgxNywwLG51bGwsbnVsbCwyMCwiZGl2IixbWyJpZCIsImQzY29udGFpbmVyIl0sWyJzdHlsZSIsIm1hcmdpbjogYXV0bzsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMTgsMCxudWxsLG51bGwsMTksIjpzdmc6c3ZnIixbWyJoZWlnaHQiLCI1MDAiXSxbImlkIiwiZDN0YXJnZXQiXSxbInN0eWxlIiwiZGlzcGxheTogYmxvY2s7bWFyZ2luOiBhdXRvOyJdLFsid2lkdGgiLCI2NzQiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMTksMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMTAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgyMCwwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDcwLC01KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiSG9zcGl0YWwgZWZmbHVlbnRzIl0pKSwobigpKCksdC5QYSgyMiwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNpbnB1dGdhdWdlIl0sWyJzdHlsZSIsImhlaWdodDogMTUwcHg7d2lkdGg6IDE1MHB4OyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgyMywwLG51bGwsbnVsbCwwLCI6c3ZnOnBvbHlnb24iLFtbInBvaW50cyIsIjUsMjcwIDI1MCwyNzAgMjUwLDIwMCA0MDAsMjAwIDQwMCwyNzAgNjUwLDI3MCA2NTAsMzIwIDQwMCwzMjAgNDAwLDM1MCAyNTAsMzUwIDI1MCwzMjAgNSwzMjAiXSxbInN0eWxlIiwiZmlsbDogdXJsKCcjYW5pbWF0ZS1ncmFkaWVudCcpO3N0cm9rZTogIzVhMDAzNkZGOyBzdHJva2Utd2lkdGg6IDVweCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgyNCwwLG51bGwsbnVsbCwxLCI6c3ZnOmciLFtbImlkIiwiYmFjdGVyaWFjb250YWluZXIiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyNTAsMjAwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgyNSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDI2LDAsbnVsbCxudWxsLDAsIjpzdmc6bGluZSIsW1sic3R5bGUiLCJmaWxsOiB0cmFuc3BhcmVudDsgc3Ryb2tlOiAjMDAwMDAwZmY7IHN0cm9rZS1kYXNoYXJyYXk6IDIsMjsgc3Ryb2tlLXdpZHRoOiAycHg7Il0sWyJ4MSIsIjI1MCJdLFsieDIiLCIyNTAiXSxbInkxIiwiMjcwIl0sWyJ5MiIsIjMyMCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgyNywwLG51bGwsbnVsbCwwLCI6c3ZnOmxpbmUiLFtbInN0eWxlIiwiZmlsbDogdHJhbnNwYXJlbnQ7IHN0cm9rZTogIzAwMDAwMGZmOyBzdHJva2UtZGFzaGFycmF5OiAyLDI7IHN0cm9rZS13aWR0aDogMnB4OyJdLFsieDEiLCI0MDAiXSxbIngyIiwiNDAwIl0sWyJ5MSIsIjI3MCJdLFsieTIiLCIzMjAiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMjgsMCxudWxsLG51bGwsMywiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoNDcwLDEwMCkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMjksMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxNSJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg3MCwtNSkiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIldhc3Rld2F0ZXIgb3V0cHV0Il0pKSwobigpKCksdC5QYSgzMSwwLG51bGwsbnVsbCwwLCI6c3ZnOmciLFtbImlkIiwiZDNvdXRnYXVnZSJdLFsic3R5bGUiLCJoZWlnaHQ6IDE1MHB4O3dpZHRoOiAxNTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMzIsMCxudWxsLG51bGwsNSwiOnN2ZzpnIixbWyJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMTgwLDIwKSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgzMywwLG51bGwsbnVsbCwxLCI6c3ZnOnRleHQiLFtbImZvbnQtc2l6ZSIsIjE1Il0sWyJ0ZXh0LWFuY2hvciIsIm1pZGRsZSJdLFsidHJhbnNmb3JtIiwidHJhbnNsYXRlKDE0NSwxNjMpIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJCYWN0ZXJpYWwgcG9wdWxhdGlvbiJdKSksKG4oKSgpLHQuUGEoMzUsMCxudWxsLG51bGwsMSwiOnN2Zzp0ZXh0IixbWyJmb250LXNpemUiLCIxMCJdLFsidGV4dC1hbmNob3IiLCJtaWRkbGUiXSxbInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgxNDUsMTc1KSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiQmltb2RhbCBkaXN0cmlidXRpb24iXSkpLChuKCkoKSx0LlBhKDM3LDAsbnVsbCxudWxsLDAsIjpzdmc6ZyIsW1siaWQiLCJkM2JpbW9kYWwiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMzgsMCxudWxsLG51bGwsMTQsImRpdiIsW1siY2xhc3MiLCJwcm9qZWN0LXByZXMiXSxbInN0eWxlIiwicGFkZGluZzogMTBweDsiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIiBPdXIgcHJvamVjdCBpcyBhIGdlbmVyYWwtcHVycG9zZSBiYWN0ZXJpYWwgcGxhdGZvcm0gZm9yIGRydWcgZGVncmFkYXRpb24uIEFzIGEgcHJvb2Ygb2YgY29uY2VwdCwgd2UgaGF2ZSBjaG9zZW4gdG8gZm9jdXMgb24gdGhlIGN5dG90b3hpYyBkcnVncyB1c2VkIGluIHRoZSB0cmVhdG1lbnQgb2YgY2FuY2VyLCBhcyB0aGVpciBjb25jZW50cmF0aW9ucyBhcmUgYWxhcm1pbmdseSBoaWdoIGluIGhvc3BpdGFsIHdhc3Rld2F0ZXIgZWZmbHVlbnRzLiBUaHJvdWdoIGEgdG9vbGtpdCBvZiBicm9hZC0gYW5kIG5hcnJvdy1zcGVjdHJ1bSBlbnp5bWVzLCB3ZSBhaW0gdG8gYWNoaWV2ZSBjbGVhcmFuY2Ugb2YgdGhlIG1haW4gY2hlbW90aGVyYXBldXRpYyBhZ2VudHMsIGxpa2UgbWV0aG90cmV4YXRlLCA1LWZsdW9yb3VyYWNpbCBvciBkb3hvcnViaWNpbi4gIl0pKSwobigpKCksdC5QYSg0MCwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoNDEsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWycgV2UgYXJlIHRha2luZyBvbiB0aHJlZSBtYWluIGNoYWxsZW5nZXMgOiBlZmZpY2llbnQgZW50cnkgb2YgdGhlc2UgbW9sZWN1bGVzIGluIHRoZSBiYWN0ZXJpYWwgY2VsbCwgdGhyb3VnaCBjaGFubmVscyBhbmQgdHJhbnNwb3J0ZXJzICh1cmFjaWwtbGlrZSB0cmFuc3BvcnRlciB1cmFBLCBjcnlwdGljIGZvbGF0ZS1hbmFsb2d1ZSB0cmFuc3BvcnRlciBhYmdUIC4uLiksIHByb3BlciBkZWdyYWRhdGlvbiB0aHJvdWdoIG1ldGFib2xpemluZyBlbnp5bWVzIChjYXJib3h5cGVwdGlkYXNlIEcyLCBjeXRvY2hyb21lIFA0NTAgXHUyMDI2KSwgYW5kIGxvbmcgdGVybSBvcGVyYXRpb24gb2YgdGhlIGJpb3JlYWN0b3IgdGhvdWdoIGEgYmlzdGFibGUsICJzdGVtLWNlbGwgbGlrZSIsIHBvcHVsYXRpb24gb2YgYmFjdGVyaWEsIGFsbGV2aWF0aW5nIHRoZSBuZWVkIGZvciByZWd1bGFyIHJlc2VlZGluZyB3aXRoIGZyZXNoIGNsb25lcy4gJ10pKSwobigpKCksdC5QYSg0MywwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoNDQsMCxudWxsLG51bGwsMSwiaDMiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJQcm9qZWN0IHNpZ25pZmljYW5jZSJdKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIiBQaGFybWFjZXV0aWNhbCBkcnVncyBhcmUgYSBwYXJ0aWN1bGFybHkgY29uY2VybmluZyBzb3VyY2Ugb2YgcG9sbHV0aW9uIDogc2VsZWN0ZWQgdG8gYmUgYmlvbG9naWNhbGx5IGFjdGl2ZSBhdCBsb3cgY29uY2VudHJhdGlvbiAmIGRlc2lnbmVkIHRvIHJlc2lzdCBiaW9kZWdyYWRhdGlvbiwgZHJ1Z3MgY29uc3RpdHV0ZSBhIGNsYXNzIG9mIGhpZ2ggcmVtYW5lbmNlIHBvbGx1dGFudHMgcm91dGluZWx5IGZvdW5kIGluIHRoZSBlbnZpcm9ubWVudCwgZXZlbiBpbiBvdXIgZHJpbmtpbmcgd2F0ZXIuICJdKSksKG4oKSgpLHQuUGEoNDcsMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDQ4LDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiIFRob3VnaCBwaHlzaWNhbCAmIGNoZW1pY2FsIHNvbHV0aW9ucyBleGlzdCwgaW4gdGhlIGZvcm0gb2Ygb3pvbmUgYW5kIFVWIHRyZWF0bWVudCwgb3VyIHNvbHV0aW9uIGNhbiBvZmZlciB0aGUgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kgb2YgYSBiaW9yZWFjdG9yLWJhc2VkIGFwcHJvYWNoLiAiXSkpLChuKCkoKSx0LlBhKDUwLDAsbnVsbCxudWxsLDAsImJyIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSg1MSwwLG51bGwsbnVsbCwwLCJiciIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbJyBPdXIgInN0ZW0tY2VsbCBsaWtlIiBhcHByb2FjaCB0byBiYWN0ZXJpYWwgcG9wdWxhdGlvbiBtYWtlcyBpdCBhbiBvcHRpb24gd2l0aCBwb3RlbnRpYWxseSBsb3dlciBvbmdvaW5nIGNvc3RzLCBhbmQgb3VyIGRlZ3JhZGF0aW9uIGVuenltZXMgYWxsb3cgdGFyZ2V0ZWQgZGVncmFkYXRpb24gb2YgcGFydGljdWxhcmx5IHJlc2lsaWVudCBtb2xlY3VsZXMgOiBib3RoIHdlYWtuZXNzZXMgb2YgY29udmVudGlvbmFsIG1ldGhvZHMgb2Ygd2FzdGV3YXRlciB0cmVhdG1lbnQuICddKSldLG51bGwsbnVsbCl9dmFyIHg9dC5MYSgiZGFzaGJvYXJkIixfLGZ1bmN0aW9uKG4pe3JldHVybiB0LmpiKDAsWyhuKCkoKSx0LlBhKDAsMCxudWxsLG51bGwsMSwiZGFzaGJvYXJkIixbXSxudWxsLG51bGwsbnVsbCxQLHYpKSx0Lk9hKDEsMTA5NzcyOCxudWxsLDAsXyxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfSx7fSx7fSxbXSksdz1hKCJqbFptIiksaz1hKCJBeUpxIikseT1hKCJZbGJRIiksTz1hKCJsTEFQIiksQz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxufSgpLE09dC5OYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBBKG4pe3JldHVybiB0LmpiKDAsWyhuKCkoKSx0LlBhKDAsMCxudWxsLG51bGwsMzUsImRpdiIsW1siaWQiLCJnY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJTaXRlIG1hcHMiXSkpLChuKCkoKSx0LlBhKDMsMCxudWxsLG51bGwsMzIsIm1hdC1hY2NvcmRpb24iLFtbImNsYXNzIiwibWF0LWFjY29yZGlvbiJdLFsibXVsdGkiLCJ0cnVlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHQuT2EoNCwxNjM4NCxudWxsLDAsdy5hLFtdLHttdWx0aTpbMCwibXVsdGkiXX0sbnVsbCksKG4oKSgpLHQuUGEoNSwxNjc3NzIxNixudWxsLG51bGwsMTQsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxrLmQsay5hKSksdC5PYSg2LDE3NTMwODgsbnVsbCwxLHcuYyxbWzMsdy5hXSx0LmgseS5iLHQuT10sbnVsbCxudWxsKSx0LmZiKDMzNTU0NDMyMCwxLHtfbGF6eUNvbnRlbnQ6MH0pLHQuZWIoMjU2LG51bGwsdy5hLHZvaWQgMCxbXSksKG4oKSgpLHQuUGEoOSwwLG51bGwsMCw5LCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciJdLFsicm9sZSIsImJ1dHRvbiJdXSxbWzEsImlkIiwwXSxbMSwidGFiaW5kZXgiLDBdLFsxLCJhcmlhLWNvbnRyb2xzIiwwXSxbMSwiYXJpYS1leHBhbmRlZCIsMF0sWzEsImFyaWEtZGlzYWJsZWQiLDBdLFsyLCJtYXQtZXhwYW5kZWQiLG51bGxdLFs0MCwiQGV4cGFuc2lvbkhlaWdodCIsMF1dLFtbbnVsbCwiY2xpY2siXSxbbnVsbCwia2V5ZG93biJdXSxmdW5jdGlvbihuLGwsYSl7dmFyIGU9ITA7cmV0dXJuImNsaWNrIj09PWwmJihlPSExIT09dC5aYShuLDEwKS5fdG9nZ2xlKCkmJmUpLCJrZXlkb3duIj09PWwmJihlPSExIT09dC5aYShuLDEwKS5fa2V5ZG93bihhKSYmZSksZX0say5jLGsuYikpLHQuT2EoMTAsMTgwMjI0LG51bGwsMCx3LmUsW3cuYyx0LmssTy5iLHQuaF0sbnVsbCxudWxsKSx0LmNiKDExLHtjb2xsYXBzZWRIZWlnaHQ6MCxleHBhbmRlZEhlaWdodDoxfSksdC5jYigxMix7dmFsdWU6MCxwYXJhbXM6MX0pLChuKCkoKSx0LlBhKDEzLDAsbnVsbCwwLDIsIm1hdC1wYW5lbC10aXRsZSIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSx0Lk9hKDE0LDE2Mzg0LG51bGwsMCx3LmYsW10sbnVsbCxudWxsKSwobigpKCksdC5oYigtMSxudWxsLFsiIFByb2plY3QgZGVzaWduICJdKSksKG4oKSgpLHQuUGEoMTYsMCxudWxsLDEsMiwibWF0LXBhbmVsLWRlc2NyaXB0aW9uIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHQuT2EoMTcsMTYzODQsbnVsbCwwLHcuZCxbXSxudWxsLG51bGwpLChuKCkoKSx0LmhiKC0xLG51bGwsWyIgVGhlb3JldGljYWwgdW5kZXJwaW5uaW5nIG9mIG91ciBwcm9qZWN0ICJdKSksKG4oKSgpLHQuaGIoLTEsMSxbIiBBQUFBQUFBQUFBQWEgIl0pKSwobigpKCksdC5QYSgyMCwxNjc3NzIxNixudWxsLG51bGwsMTUsIm1hdC1leHBhbnNpb24tcGFuZWwiLFtbImNsYXNzIiwibWF0LWV4cGFuc2lvbi1wYW5lbCJdXSxbWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzIsIm1hdC1leHBhbnNpb24tcGFuZWwtc3BhY2luZyIsbnVsbF1dLG51bGwsbnVsbCxrLmQsay5hKSksdC5PYSgyMSwxNzUzMDg4LG51bGwsMSx3LmMsW1szLHcuYV0sdC5oLHkuYix0Lk9dLG51bGwsbnVsbCksdC5mYigzMzU1NDQzMjAsMix7X2xhenlDb250ZW50OjB9KSx0LmViKDI1NixudWxsLHcuYSx2b2lkIDAsW10pLChuKCkoKSx0LlBhKDI0LDAsbnVsbCwwLDksIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIl0sWyJyb2xlIiwiYnV0dG9uIl1dLFtbMSwiaWQiLDBdLFsxLCJ0YWJpbmRleCIsMF0sWzEsImFyaWEtY29udHJvbHMiLDBdLFsxLCJhcmlhLWV4cGFuZGVkIiwwXSxbMSwiYXJpYS1kaXNhYmxlZCIsMF0sWzIsIm1hdC1leHBhbmRlZCIsbnVsbF0sWzQwLCJAZXhwYW5zaW9uSGVpZ2h0IiwwXV0sW1tudWxsLCJjbGljayJdLFtudWxsLCJrZXlkb3duIl1dLGZ1bmN0aW9uKG4sbCxhKXt2YXIgZT0hMDtyZXR1cm4iY2xpY2siPT09bCYmKGU9ITEhPT10LlphKG4sMjUpLl90b2dnbGUoKSYmZSksImtleWRvd24iPT09bCYmKGU9ITEhPT10LlphKG4sMjUpLl9rZXlkb3duKGEpJiZlKSxlfSxrLmMsay5iKSksdC5PYSgyNSwxODAyMjQsbnVsbCwwLHcuZSxbdy5jLHQuayxPLmIsdC5oXSxudWxsLG51bGwpLHQuY2IoMjYse2NvbGxhcHNlZEhlaWdodDowLGV4cGFuZGVkSGVpZ2h0OjF9KSx0LmNiKDI3LHt2YWx1ZTowLHBhcmFtczoxfSksKG4oKSgpLHQuUGEoMjgsMCxudWxsLDAsMiwibWF0LXBhbmVsLXRpdGxlIixbWyJjbGFzcyIsIm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLHQuT2EoMjksMTYzODQsbnVsbCwwLHcuZixbXSxudWxsLG51bGwpLChuKCkoKSx0LmhiKC0xLG51bGwsWyIgTWF0ZXJpYWwgYW5kIG1ldGhvZCAiXSkpLChuKCkoKSx0LlBhKDMxLDAsbnVsbCwxLDIsIm1hdC1wYW5lbC1kZXNjcmlwdGlvbiIsW1siY2xhc3MiLCJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSx0Lk9hKDMyLDE2Mzg0LG51bGwsMCx3LmQsW10sbnVsbCxudWxsKSwobigpKCksdC5oYigtMSxudWxsLFsiIE91ciBleHBlcmltZW50YWwgZGVzaWducyAmIHJlc3VsdHMgIl0pKSwobigpKCksdC5QYSgzNCwwLG51bGwsMSwxLCJwIixbXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiSSdtIHZpc2libGUgYmVjYXVzZSBJIGFtIG9wZW4iXSkpXSxmdW5jdGlvbihuLGwpe24obCw0LDAsInRydWUiKX0sZnVuY3Rpb24obixsKXtuKGwsNSwwLHQuWmEobCw2KS5leHBhbmRlZCx0LlphKGwsNikuX2hhc1NwYWNpbmcoKSksbihsLDksMCx0LlphKGwsMTApLnBhbmVsLl9oZWFkZXJJZCx0LlphKGwsMTApLnBhbmVsLmRpc2FibGVkPy0xOjAsdC5aYShsLDEwKS5fZ2V0UGFuZWxJZCgpLHQuWmEobCwxMCkuX2lzRXhwYW5kZWQoKSx0LlphKGwsMTApLnBhbmVsLmRpc2FibGVkLHQuWmEobCwxMCkuX2lzRXhwYW5kZWQoKSxuKGwsMTIsMCx0LlphKGwsMTApLl9nZXRFeHBhbmRlZFN0YXRlKCksbihsLDExLDAsdC5aYShsLDEwKS5jb2xsYXBzZWRIZWlnaHQsdC5aYShsLDEwKS5leHBhbmRlZEhlaWdodCkpKSxuKGwsMjAsMCx0LlphKGwsMjEpLmV4cGFuZGVkLHQuWmEobCwyMSkuX2hhc1NwYWNpbmcoKSksbihsLDI0LDAsdC5aYShsLDI1KS5wYW5lbC5faGVhZGVySWQsdC5aYShsLDI1KS5wYW5lbC5kaXNhYmxlZD8tMTowLHQuWmEobCwyNSkuX2dldFBhbmVsSWQoKSx0LlphKGwsMjUpLl9pc0V4cGFuZGVkKCksdC5aYShsLDI1KS5wYW5lbC5kaXNhYmxlZCx0LlphKGwsMjUpLl9pc0V4cGFuZGVkKCksbihsLDI3LDAsdC5aYShsLDI1KS5fZ2V0RXhwYW5kZWRTdGF0ZSgpLG4obCwyNiwwLHQuWmEobCwyNSkuY29sbGFwc2VkSGVpZ2h0LHQuWmEobCwyNSkuZXhwYW5kZWRIZWlnaHQpKSl9KX12YXIgTD10LkxhKCJhcHAtc2l0ZW1hcCIsQyxmdW5jdGlvbihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDEsImFwcC1zaXRlbWFwIixbXSxudWxsLG51bGwsbnVsbCxBLE0pKSx0Lk9hKDEsMTE0Njg4LG51bGwsMCxDLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7bihsLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksWD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxufSgpLEk9dC5OYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFQobil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIlByb2plY3QgRGVzaWduIl0pKSwobigpKCksdC5QYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLGguZCxoLmEpKSx0Lk9hKDQsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBFPXQuTGEoImFwcC1wcm9qZWN0LWRldGFpbHMiLFgsZnVuY3Rpb24obil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCwxLCJhcHAtcHJvamVjdC1kZXRhaWxzIixbXSxudWxsLG51bGwsbnVsbCxULEkpKSx0Lk9hKDEsMTE0Njg4LG51bGwsMCxYLFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7bihsLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxufSgpLFM9dC5OYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIFoobil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIkJpb2xvZ3kiXSkpLChuKCkoKSx0LlBhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsaC5kLGguYSkpLHQuT2EoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIFI9dC5MYSgiYXBwLWJpb2xvZ3ktc2VjdGlvbiIsaixmdW5jdGlvbihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDEsImFwcC1iaW9sb2d5LXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFosUykpLHQuT2EoMSwxMTQ2ODgsbnVsbCwwLGosW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obixsKXtuKGwsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm4gbi5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LG59KCksVT10Lk5hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gRihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiUGFydHMiXSkpLChuKCkoKSx0LlBhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsaC5kLGguYSkpLHQuT2EoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIE49dC5MYSgiYXBwLXBhcnRzIixELGZ1bmN0aW9uKG4pe3JldHVybiB0LmpiKDAsWyhuKCkoKSx0LlBhKDAsMCxudWxsLG51bGwsMSwiYXBwLXBhcnRzIixbXSxudWxsLG51bGwsbnVsbCxGLFUpKSx0Lk9hKDEsMTE0Njg4LG51bGwsMCxELFtdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7bihsLDEsMCl9LG51bGwpfSx7fSx7fSxbXSksQj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxufSgpLFc9dC5OYSh7ZW5jYXBzdWxhdGlvbjowLHN0eWxlczpbWyIjZ2NvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9LmRhc2hib2FyZC1jYXJkLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZGFzaGJvYXJkLWNhcmRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99LmdyaWQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0iXV0sZGF0YTp7fX0pO2Z1bmN0aW9uIHoobil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCw0LCJkaXYiLFtbImNsYXNzIiwiZ3JpZC1jb250YWluZXIiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMSwwLG51bGwsbnVsbCwxLCJoMSIsW1siY2xhc3MiLCJtYXQtaDEiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIlNvZnR3YXJlIl0pKSwobigpKCksdC5QYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLGguZCxoLmEpKSx0Lk9hKDQsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciBIPXQuTGEoImFwcC1jb21wdXRpbmctc2VjdGlvbiIsQixmdW5jdGlvbihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDEsImFwcC1jb21wdXRpbmctc2VjdGlvbiIsW10sbnVsbCxudWxsLG51bGwseixXKSksdC5PYSgxLDExNDY4OCxudWxsLDAsQixbXSxudWxsLG51bGwpXSxmdW5jdGlvbihuLGwpe24obCwxLDApfSxudWxsKX0se30se30sW10pLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXJldHVybiBuLnByb3RvdHlwZS5uZ09uSW5pdD1mdW5jdGlvbigpe30sbn0oKSxWPXQuTmEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBLKG4pe3JldHVybiB0LmpiKDAsWyhuKCkoKSx0LlBhKDAsMCxudWxsLG51bGwsNCwiZGl2IixbWyJjbGFzcyIsImdyaWQtY29udGFpbmVyIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDEsMCxudWxsLG51bGwsMSwiaDEiLFtbImNsYXNzIiwibWF0LWgxIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJNb2RlbGluZyJdKSksKG4oKSgpLHQuUGEoMywwLG51bGwsbnVsbCwxLCJtYXQtY2FyZCIsW1siY2xhc3MiLCJkYXNoYm9hcmQtY2FyZCBtYXQtY2FyZCJdXSxudWxsLG51bGwsbnVsbCxoLmQsaC5hKSksdC5PYSg0LDQ5MTUyLG51bGwsMCxtLmEsW10sbnVsbCxudWxsKV0sbnVsbCxudWxsKX12YXIgRz10LkxhKCJhcHAtbW9kZWxpbmciLHEsZnVuY3Rpb24obil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCwxLCJhcHAtbW9kZWxpbmciLFtdLG51bGwsbnVsbCxudWxsLEssVikpLHQuT2EoMSwxMTQ2ODgsbnVsbCwwLHEsW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obixsKXtuKGwsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxZPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm4gbi5wcm90b3R5cGUubmdPbkluaXQ9ZnVuY3Rpb24oKXt9LG59KCksSj10Lk5hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbIiNnY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweH0uZGFzaGJvYXJkLWNhcmQtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0fS5kYXNoYm9hcmQtY2FyZFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b30uZ3JpZC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fSJdXSxkYXRhOnt9fSk7ZnVuY3Rpb24gUShuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiSHVtYW4gUHJhY3RpY2VzIl0pKSwobigpKCksdC5QYSgzLDAsbnVsbCxudWxsLDEsIm1hdC1jYXJkIixbWyJjbGFzcyIsImRhc2hib2FyZC1jYXJkIG1hdC1jYXJkIl1dLG51bGwsbnVsbCxudWxsLGguZCxoLmEpKSx0Lk9hKDQsNDkxNTIsbnVsbCwwLG0uYSxbXSxudWxsLG51bGwpXSxudWxsLG51bGwpfXZhciAkPXQuTGEoImFwcC1odW1hbi1wcmFjdGljZS1zZWN0aW9uIixZLGZ1bmN0aW9uKG4pe3JldHVybiB0LmpiKDAsWyhuKCkoKSx0LlBhKDAsMCxudWxsLG51bGwsMSwiYXBwLWh1bWFuLXByYWN0aWNlLXNlY3Rpb24iLFtdLG51bGwsbnVsbCxudWxsLFEsSikpLHQuT2EoMSwxMTQ2ODgsbnVsbCwwLFksW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obixsKXtuKGwsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxubj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJuIG4ucHJvdG90eXBlLm5nT25Jbml0PWZ1bmN0aW9uKCl7fSxufSgpLGxuPXQuTmEoe2VuY2Fwc3VsYXRpb246MCxzdHlsZXM6W1siI2djb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4fS5kYXNoYm9hcmQtY2FyZC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmRhc2hib2FyZC1jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfS5ncmlkLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiBhbihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDQsImRpdiIsW1siY2xhc3MiLCJncmlkLWNvbnRhaW5lciJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgxLDAsbnVsbCxudWxsLDEsImgxIixbWyJjbGFzcyIsIm1hdC1oMSJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiQ29sbGFib3JhdGlvbnMiXSkpLChuKCkoKSx0LlBhKDMsMCxudWxsLG51bGwsMSwibWF0LWNhcmQiLFtbImNsYXNzIiwiZGFzaGJvYXJkLWNhcmQgbWF0LWNhcmQiXV0sbnVsbCxudWxsLG51bGwsaC5kLGguYSkpLHQuT2EoNCw0OTE1MixudWxsLDAsbS5hLFtdLG51bGwsbnVsbCldLG51bGwsbnVsbCl9dmFyIHRuPXQuTGEoImFwcC1jb2xsYWJvcmF0aW9ucyIsbm4sZnVuY3Rpb24obil7cmV0dXJuIHQuamIoMCxbKG4oKSgpLHQuUGEoMCwwLG51bGwsbnVsbCwxLCJhcHAtY29sbGFib3JhdGlvbnMiLFtdLG51bGwsbnVsbCxudWxsLGFuLGxuKSksdC5PYSgxLDExNDY4OCxudWxsLDAsbm4sW10sbnVsbCxudWxsKV0sZnVuY3Rpb24obixsKXtuKGwsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxlbj1hKCJGYk45IiksdW49YSgiOG1NciIpLHJuPWEoImRXWmciKSxvbj1hKCJidWp0IiksY249YSgiVW9kSCIpLHNuPWEoIndGdzEiKSxkbj1hKCJNcitYIikscG49YSgiU01zbSIpLGhuPWEoImM0V20iKSxtbj1hKCJOc2g1IiksZ249YSgiRnpxYyIpLGZuPWEoIkpPajkiKSxibj1hKCJQVC9YIiksX249YSgiWllDaSIpLHZuPWEoIjZVTXgiKSxQbj1hKCIwL1E2IikseG49YSgiMjFMYiIpLHduPWEoIk96ZkIiKSxrbj10Lk5hKHtlbmNhcHN1bGF0aW9uOjAsc3R5bGVzOltbImJvZHlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyZW19LmZpbGwtdG9vbGJhci1zcGFjZVtfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDEgYXV0b30uc2lkZW5hdi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5zaWRlbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMDBweDtib3gtc2hhZG93OjNweCAwIDZweCByZ2JhKDAsMCwwLC4yNCl9I3NpdGVtYXBidXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3dpZHRoOjEwMCV9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4fSNzaWRlbmF2ZmxleGNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAwcHh9Il1dLGRhdGE6e319KTtmdW5jdGlvbiB5bihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDYwLCJkaXYiLFtbImNsYXNzIiwibWF0LWFwcC1iYWNrZ3JvdW5kIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDEsMCxudWxsLG51bGwsMTksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsImFjY2VudCJdXSxbWzIsIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLG51bGxdLFsyLCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IixudWxsXV0sbnVsbCxudWxsLGVuLmIsZW4uYSkpLHQuT2EoMiw0MjQzNDU2LG51bGwsMSx1bi5hLFt0Lmsscm4uYSx1LmRdLHtjb2xvcjpbMCwiY29sb3IiXX0sbnVsbCksdC5mYig2MDM5Nzk3NzYsMSx7X3Rvb2xiYXJSb3dzOjF9KSwobigpKCksdC5QYSg0LDAsbnVsbCwwLDQsImJ1dHRvbiIsW1sibWF0LWljb24tYnV0dG9uIiwiIl1dLFtbOCwiZGlzYWJsZWQiLDBdLFsyLCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsbnVsbF1dLFtbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obixsLGEpe3ZhciB0PSEwO3JldHVybiJjbGljayI9PT1sJiYodD0hMSE9PW4uY29tcG9uZW50Lm9wZW5TaWRlTmF2KCkmJnQpLHR9LG9uLmIsb24uYSkpLHQuT2EoNSwxODAyMjQsbnVsbCwwLGNuLmIsW3Quayxybi5hLE8uYixbMixzbi5hXV0sbnVsbCxudWxsKSwobigpKCksdC5QYSg2LDAsbnVsbCwwLDIsIm1hdC1pY29uIixbWyJjbGFzcyIsIm1hdC1pY29uIl0sWyJyb2xlIiwiaW1nIl1dLFtbMiwibWF0LWljb24taW5saW5lIixudWxsXV0sbnVsbCxudWxsLGRuLmIsZG4uYSkpLHQuT2EoNyw2Mzg5NzYsbnVsbCwwLHBuLmEsW3Quayxwbi5jLFs4LG51bGxdXSxudWxsLG51bGwpLChuKCkoKSx0LmhiKC0xLDAsWyJtZW51Il0pKSwobigpKCksdC5QYSg5LDAsbnVsbCwwLDAsInNwYW4iLFtbImNsYXNzIiwiZmlsbC10b29sYmFyLXNwYWNlIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDEwLDAsbnVsbCwwLDEsImRpdiIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuaGIoLTEsbnVsbCxbIk1ldGhvdHIiXSkpLChuKCkoKSx0LlBhKDEyLDAsbnVsbCwwLDEsImRpdiIsW1sic3R5bGUiLCJjb2xvcjogICNlY2UwZTg7Il1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJFeGl0Il0pKSwobigpKCksdC5QYSgxNCwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDE1LDAsbnVsbCwwLDAsImltZyIsW1sic3JjIiwiaHR0cDovLzIwMTguaWdlbS5vcmcvd2lraS9pbWFnZXMvYy9jMC9ULS1HT19QYXJpcy1TYWNsYXktLWdvLXBzLXdoaXRlLnBuZyJdLFsic3R5bGUiLCJtYXgtaGVpZ2h0OjEwMCU7IHdpZHRoOmF1dG87IHBhZGRpbmc6MWVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5QYSgxNiwwLG51bGwsMCwwLCJzcGFuIixbWyJzdHlsZSIsIndpZHRoOjAuMmVtIl1dLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LlBhKDE3LDAsbnVsbCwwLDMsInNwYW4iLFtbInN0eWxlIiwidGV4dC1hbGlnbjogY2VudGVyO2xpbmUtaGVpZ2h0OiA4NSU7IGZvbnQtc2l6ZTogbWVkaXVtOyJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSwobigpKCksdC5oYigtMSxudWxsLFsiVGVhbSBHTyJdKSksKG4oKSgpLHQuUGEoMTksMCxudWxsLG51bGwsMCwiYnIiLFtdLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCkpLChuKCkoKSx0LmhiKC0xLG51bGwsWyJQYXJpc1NhY2xheSJdKSksKG4oKSgpLHQuUGEoMjEsMCxudWxsLG51bGwsMzksIm1hdC1zaWRlbmF2LWNvbnRhaW5lciIsW1siY2xhc3MiLCJzaWRlbmF2LWNvbnRhaW5lciBtYXQtZHJhd2VyLWNvbnRhaW5lciBtYXQtc2lkZW5hdi1jb250YWluZXIiXV0sW1syLCJtYXQtZHJhd2VyLWNvbnRhaW5lci1leHBsaWNpdC1iYWNrZHJvcCIsbnVsbF1dLG51bGwsbnVsbCxobi5kLGhuLmIpKSx0Lk9hKDIyLDE0OTA5NDQsbnVsbCwyLG1uLmYsW1syLGduLmJdLHQuayx0LngsdC5oLG1uLmEsWzIsc24uYV1dLG51bGwsbnVsbCksdC5mYig2MDM5Nzk3NzYsMix7X2RyYXdlcnM6MX0pLHQuZmIoMzM1NTQ0MzIwLDMse19jb250ZW50OjB9KSwobigpKCksdC5QYSgyNSwwLG51bGwsMCwyNywibWF0LXNpZGVuYXYiLFtbImNsYXNzIiwic2lkZW5hdiBtYXQtZHJhd2VyIG1hdC1zaWRlbmF2Il0sWyJmaXhlZEluVmlld3BvcnQiLCJ0cnVlIl0sWyJ0YWJJbmRleCIsIi0xIl1dLFtbMSwicm9sZSIsMF0sWzQwLCJAdHJhbnNmb3JtIiwwXSxbMSwiYWxpZ24iLDBdLFsyLCJtYXQtZHJhd2VyLWVuZCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItb3ZlciIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItcHVzaCIsbnVsbF0sWzIsIm1hdC1kcmF3ZXItc2lkZSIsbnVsbF0sWzIsIm1hdC1zaWRlbmF2LWZpeGVkIixudWxsXSxbNCwidG9wIiwicHgiXSxbNCwiYm90dG9tIiwicHgiXV0sW1siY29tcG9uZW50IiwiQHRyYW5zZm9ybS5zdGFydCJdLFsiY29tcG9uZW50IiwiQHRyYW5zZm9ybS5kb25lIl1dLGZ1bmN0aW9uKG4sbCxhKXt2YXIgZT0hMDtyZXR1cm4iY29tcG9uZW50OkB0cmFuc2Zvcm0uc3RhcnQiPT09bCYmKGU9ITEhPT10LlphKG4sMjYpLl9vbkFuaW1hdGlvblN0YXJ0KGEpJiZlKSwiY29tcG9uZW50OkB0cmFuc2Zvcm0uZG9uZSI9PT1sJiYoZT0hMSE9PXQuWmEobiwyNikuX29uQW5pbWF0aW9uRW5kKGEpJiZlKSxlfSxobi5mLGhuLmEpKSx0Lk9hKDI2LDMzMjU5NTIsW1syLDRdLFsiZHJhd2VyIiw0XV0sMCxtbi5lLFt0LmssTy5jLE8uYixybi5hLHQueCxbMix1LmRdXSx7bW9kZTpbMCwibW9kZSJdLG9wZW5lZDpbMSwib3BlbmVkIl0sZml4ZWRJblZpZXdwb3J0OlsyLCJmaXhlZEluVmlld3BvcnQiXX0sbnVsbCksdC5iYigxMzEwNzIsdS5iLFt0LmhdKSx0LmJiKDEzMTA3Mix1LmIsW3QuaF0pLChuKCkoKSx0LlBhKDI5LDAsbnVsbCwwLDksIm1hdC10b29sYmFyIixbWyJjbGFzcyIsIm1hdC10b29sYmFyIl0sWyJjb2xvciIsInByaW1hcnkiXSxbInN0eWxlIiwibWFyZ2luLXRvcDogMTVweDsiXV0sW1syLCJtYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dzIixudWxsXSxbMiwibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsbnVsbF1dLG51bGwsbnVsbCxlbi5iLGVuLmEpKSx0Lk9hKDMwLDQyNDM0NTYsbnVsbCwxLHVuLmEsW3Quayxybi5hLHUuZF0se2NvbG9yOlswLCJjb2xvciJdfSxudWxsKSx0LmZiKDYwMzk3OTc3Niw0LHtfdG9vbGJhclJvd3M6MX0pLChuKCkoKSx0LmhiKC0xLDAsWyJOYXZpZ2F0aW9uICJdKSksKG4oKSgpLHQuUGEoMzMsMCxudWxsLDAsMCwic3BhbiIsW1siY2xhc3MiLCJmaWxsLXRvb2xiYXItc3BhY2UiXV0sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksKG4oKSgpLHQuUGEoMzQsMCxudWxsLDAsNCwiYnV0dG9uIixbWyJtYXQtaWNvbi1idXR0b24iLCIiXV0sW1s4LCJkaXNhYmxlZCIsMF0sWzIsIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixudWxsXV0sW1tudWxsLCJjbGljayJdXSxmdW5jdGlvbihuLGwsYSl7dmFyIHQ9ITA7cmV0dXJuImNsaWNrIj09PWwmJih0PSExIT09bi5jb21wb25lbnQub3BlblNpZGVOYXYoKSYmdCksdH0sb24uYixvbi5hKSksdC5PYSgzNSwxODAyMjQsbnVsbCwwLGNuLmIsW3Quayxybi5hLE8uYixbMixzbi5hXV0sbnVsbCxudWxsKSwobigpKCksdC5QYSgzNiwwLG51bGwsMCwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxkbi5iLGRuLmEpKSx0Lk9hKDM3LDYzODk3NixudWxsLDAscG4uYSxbdC5rLHBuLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKG4oKSgpLHQuaGIoLTEsMCxbImtleWJvYXJkX2Fycm93X2xlZnQiXSkpLChuKCkoKSx0LlBhKDM5LDAsbnVsbCwwLDEsIm5nLW1hdGVyaWFsLW11bHRpbGV2ZWwtbWVudSIsW10sbnVsbCxbW251bGwsInNlbGVjdGVkSXRlbSJdXSxmdW5jdGlvbihuLGwsYSl7dmFyIHQ9ITA7cmV0dXJuInNlbGVjdGVkSXRlbSI9PT1sJiYodD0hMSE9PW4uY29tcG9uZW50LnNlbGVjdGVkU2lkZU1lbnVJdGVtKGEpJiZ0KSx0fSxmbi5iLGZuLmEpKSx0Lk9hKDQwLDYzODk3NixudWxsLDAsYm4uYyxbX24ubCxibi5kXSx7aXRlbXM6WzAsIml0ZW1zIl0sY29uZmlndXJhdGlvbjpbMSwiY29uZmlndXJhdGlvbiJdfSx7c2VsZWN0ZWRJdGVtOiJzZWxlY3RlZEl0ZW0ifSksKG4oKSgpLHQuUGEoNDEsMCxudWxsLDAsMTEsIm1hdC1uYXYtbGlzdCIsW1siY2xhc3MiLCJtYXQtbmF2LWxpc3QiXSxbInJvbGUiLCJuYXZpZ2F0aW9uIl1dLG51bGwsbnVsbCxudWxsLHZuLmYsdm4uYykpLHQuT2EoNDIsNDkxNTIsbnVsbCwwLFBuLmUsW10sbnVsbCxudWxsKSwobigpKCksdC5QYSg0MywwLG51bGwsMCw5LCJhIixbWyJjbGFzcyIsIm1hdC1saXN0LWl0ZW0iXSxbImlkIiwic2l0ZW1hcGJ1dCJdLFsibWF0LWxpc3QtaXRlbSIsIiJdXSxbWzIsIm1hdC1saXN0LWl0ZW0tYXZhdGFyIixudWxsXSxbMiwibWF0LWxpc3QtaXRlbS13aXRoLWF2YXRhciIsbnVsbF0sWzEsInRhcmdldCIsMF0sWzgsImhyZWYiLDRdXSxbW251bGwsImZvY3VzIl0sW251bGwsImJsdXIiXSxbbnVsbCwiY2xpY2siXV0sZnVuY3Rpb24obixsLGEpe3ZhciBlPSEwO3JldHVybiJmb2N1cyI9PT1sJiYoZT0hMSE9PXQuWmEobiw0NCkuX2hhbmRsZUZvY3VzKCkmJmUpLCJibHVyIj09PWwmJihlPSExIT09dC5aYShuLDQ0KS5faGFuZGxlQmx1cigpJiZlKSwiY2xpY2siPT09bCYmKGU9ITEhPT10LlphKG4sNDcpLm9uQ2xpY2soYS5idXR0b24sYS5jdHJsS2V5LGEubWV0YUtleSxhLnNoaWZ0S2V5KSYmZSksZX0sdm4uZCx2bi5iKSksdC5PYSg0NCwxMDk3NzI4LG51bGwsMixQbi5iLFt0LmssWzIsUG4uZV1dLG51bGwsbnVsbCksdC5mYig2MDM5Nzk3NzYsNSx7X2xpbmVzOjF9KSx0LmZiKDMzNTU0NDMyMCw2LHtfYXZhdGFyOjB9KSx0Lk9hKDQ3LDY3MTc0NCxudWxsLDAsX24ubSxbX24ubCxfbi5hLHUuaF0se3JvdXRlckxpbms6WzAsInJvdXRlckxpbmsiXX0sbnVsbCksdC5hYig0OCwxKSwobigpKCksdC5QYSg0OSwwLG51bGwsMiwyLCJtYXQtaWNvbiIsW1siY2xhc3MiLCJtYXQtaWNvbiJdLFsicm9sZSIsImltZyJdXSxbWzIsIm1hdC1pY29uLWlubGluZSIsbnVsbF1dLG51bGwsbnVsbCxkbi5iLGRuLmEpKSx0Lk9hKDUwLDYzODk3NixudWxsLDAscG4uYSxbdC5rLHBuLmMsWzgsbnVsbF1dLG51bGwsbnVsbCksKG4oKSgpLHQuaGIoLTEsMCxbImFwcHMiXSkpLChuKCkoKSx0LmhiKC0xLDIsWyIgU2l0ZSBtYXAiXSkpLChuKCkoKSx0LlBhKDUzLDAsbnVsbCwxLDcsIm1hdC1zaWRlbmF2LWNvbnRlbnQiLFtbImNsYXNzIiwibWF0LWRyYXdlci1jb250ZW50IG1hdC1zaWRlbmF2LWNvbnRlbnQiXSxbImZ4TGF5b3V0Iiwicm93Il0sWyJmeExheW91dEFsaWduIiwiY2VudGVyIl1dLFtbNCwibWFyZ2luLWxlZnQiLCJweCJdLFs0LCJtYXJnaW4tcmlnaHQiLCJweCJdXSxudWxsLG51bGwsaG4uZSxobi5jKSksdC5PYSg1NCwxMDk3NzI4LFtbMyw0XV0sMCxtbi5nLFt0LmgsbW4uZl0sbnVsbCxudWxsKSx0Lk9hKDU1LDczNzI4MCxudWxsLDAseG4uZSxbd24uaSx0Lmssd24ubV0se2xheW91dDpbMCwibGF5b3V0Il19LG51bGwpLHQuT2EoNTYsNzM3MjgwLG51bGwsMCx4bi5kLFt3bi5pLHQuayxbNix4bi5lXSx3bi5tXSx7YWxpZ246WzAsImFsaWduIl19LG51bGwpLChuKCkoKSx0LlBhKDU3LDAsbnVsbCwwLDMsImRpdiIsW1siZnhGbGV4IiwiMSAwIDUwMHB4Il0sWyJpZCIsInNpZGVuYXZmbGV4Y29udGVudCJdXSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpKSx0Lk9hKDU4LDczNzI4MCxudWxsLDAseG4uYSxbd24uaSx0LmssWzMseG4uZV0sd24ubSx3bi5nXSx7ZmxleDpbMCwiZmxleCJdfSxudWxsKSwobigpKCksdC5QYSg1OSwxNjc3NzIxNixudWxsLG51bGwsMSwicm91dGVyLW91dGxldCIsW10sbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSksdC5PYSg2MCwyMTI5OTIsbnVsbCwwLF9uLm8sW19uLmIsdC5PLHQuaixbOCxudWxsXSx0LmhdLG51bGwsbnVsbCldLGZ1bmN0aW9uKG4sbCl7dmFyIGE9bC5jb21wb25lbnQ7bihsLDIsMCwiYWNjZW50IiksbihsLDcsMCksbihsLDIyLDApLG4obCwyNiwwLHQuaWIobCwyNiwwLHQuWmEobCwyNykudHJhbnNmb3JtKGEuaXNIYW5kc2V0JCkpPyJvdmVyIjoic2lkZSIsYS5vcGVuZWRTaWRlTmF2LCJ0cnVlIiksbihsLDMwLDAsInByaW1hcnkiKSxuKGwsMzcsMCksbihsLDQwLDAsYS5zaWRlTWVudUxpc3QsYS5zaWRlTWVudUNvbmZpZyksbihsLDQ3LDAsbihsLDQ4LDAsIi4uL3NpdGVtYXAiKSksbihsLDUwLDApLG4obCw1NSwwLCJyb3ciKSxuKGwsNTYsMCwiY2VudGVyIiksbihsLDU4LDAsIjEgMCA1MDBweCIpLG4obCw2MCwwKX0sZnVuY3Rpb24obixsKXt2YXIgYT1sLmNvbXBvbmVudDtuKGwsMSwwLHQuWmEobCwyKS5fdG9vbGJhclJvd3MubGVuZ3RoLCF0LlphKGwsMikuX3Rvb2xiYXJSb3dzLmxlbmd0aCksbihsLDQsMCx0LlphKGwsNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PXQuWmEobCw1KS5fYW5pbWF0aW9uTW9kZSksbihsLDYsMCx0LlphKGwsNykuaW5saW5lKSxuKGwsMjEsMCx0LlphKGwsMjIpLl9iYWNrZHJvcE92ZXJyaWRlKSxuKGwsMjUsMCx0LmliKGwsMjUsMCx0LlphKGwsMjgpLnRyYW5zZm9ybShhLmlzSGFuZHNldCQpKT8iZGlhbG9nIjoibmF2aWdhdGlvbiIsdC5aYShsLDI2KS5fYW5pbWF0aW9uU3RhdGUsbnVsbCwiZW5kIj09PXQuWmEobCwyNikucG9zaXRpb24sIm92ZXIiPT09dC5aYShsLDI2KS5tb2RlLCJwdXNoIj09PXQuWmEobCwyNikubW9kZSwic2lkZSI9PT10LlphKGwsMjYpLm1vZGUsdC5aYShsLDI2KS5maXhlZEluVmlld3BvcnQsdC5aYShsLDI2KS5maXhlZEluVmlld3BvcnQ/dC5aYShsLDI2KS5maXhlZFRvcEdhcDpudWxsLHQuWmEobCwyNikuZml4ZWRJblZpZXdwb3J0P3QuWmEobCwyNikuZml4ZWRCb3R0b21HYXA6bnVsbCksbihsLDI5LDAsdC5aYShsLDMwKS5fdG9vbGJhclJvd3MubGVuZ3RoLCF0LlphKGwsMzApLl90b29sYmFyUm93cy5sZW5ndGgpLG4obCwzNCwwLHQuWmEobCwzNSkuZGlzYWJsZWR8fG51bGwsIk5vb3BBbmltYXRpb25zIj09PXQuWmEobCwzNSkuX2FuaW1hdGlvbk1vZGUpLG4obCwzNiwwLHQuWmEobCwzNykuaW5saW5lKSxuKGwsNDMsMCx0LlphKGwsNDQpLl9hdmF0YXIsdC5aYShsLDQ0KS5fYXZhdGFyLHQuWmEobCw0NykudGFyZ2V0LHQuWmEobCw0NykuaHJlZiksbihsLDQ5LDAsdC5aYShsLDUwKS5pbmxpbmUpLG4obCw1MywwLHQuWmEobCw1NCkuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbnMubGVmdCx0LlphKGwsNTQpLl9jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLnJpZ2h0KX0pfXZhciBPbj10LkxhKCJhcHAtcm9vdCIsZCxmdW5jdGlvbihuKXtyZXR1cm4gdC5qYigwLFsobigpKCksdC5QYSgwLDAsbnVsbCxudWxsLDEsImFwcC1yb290IixbXSxudWxsLG51bGwsbnVsbCx5bixrbikpLHQuT2EoMSwxMTQ2ODgsbnVsbCwwLGQsW2kuYSxfbi5sLHMuYV0sbnVsbCxudWxsKV0sZnVuY3Rpb24obixsKXtuKGwsMSwwKX0sbnVsbCl9LHt9LHt9LFtdKSxDbj1hKCJaWWp0IiksTW49YSgiTlNZTCIpLEFuPWEoImloWVkiKSxMbj1hKCJlRGtQIiksWG49YSgibVZzYSIpLEluPWEoInQvTmEiKSxUbj1hKCJXZjRwIiksRW49YSgicUFsUyIpLGpuPWEoIkxDNXAiKSxTbj1hKCJZaGJPIiksWm49YSgiNGMzNSIpLFJuPWEoImhVV1AiKSxEbj1hKCIzcEpRIiksVW49YSgiVjlxKyIpLEZuPWEoIjAvdVEiKSxObj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixsKXt0aGlzLnJvdXRlcj1uLHRoaXMuY2h1bmtMb2FkZXI9bH1yZXR1cm4gbi5wcm90b3R5cGUuY2FuQWN0aXZhdGU9ZnVuY3Rpb24obixsKXtpZigwPT1lLmEucHJvZHVjdGlvbilyZXR1cm4gT2JqZWN0KEZuLmEpKG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4sbCl7bighMCl9KSk7dmFyIGE9bC51cmw7cmV0dXJuIGNvbnNvbGUubG9nKCJDaHVua0d1YXJkIDogIithKSx0aGlzLmNodW5rTG9hZGVyLmFzeW5jTG9hZFBhZ2VDaHVuayhhKX0sbi5uZ0luamVjdGFibGVEZWY9dC5TKHtmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHQuVyhfbi5sKSx0Llcocy5hKSl9LHRva2VuOm4scHJvdmlkZWRJbjoicm9vdCJ9KSxufSgpLEJuPWZ1bmN0aW9uKCl7fSxXbj1hKCJwWmhNIiksem49dC5NYShvLFtkXSxmdW5jdGlvbihuKXtyZXR1cm4gdC5XYShbdC5YYSg1MTIsdC5qLHQuQmEsW1s4LFtwLmEseCxMLEUsUixOLEgsRywkLHRuLE9uXV0sWzMsdC5qXSx0LnZdKSx0LlhhKDUxMjAsdC5zLHQuS2EsW1szLHQuc11dKSx0LlhhKDQ2MDgsdS5tLHUubCxbdC5zLFsyLHUudF1dKSx0LlhhKDUxMjAsdC5xLHQuSWEsW10pLHQuWGEoNTEyMCx0LnIsdC5KYSxbXSksdC5YYSg0NjA4LENuLmMsQ24ucixbdS5kXSksdC5YYSg2MTQ0LHQuRixudWxsLFtDbi5jXSksdC5YYSg0NjA4LENuLmYsQ24uZyxbXSksdC5YYSg1MTIwLENuLmQsZnVuY3Rpb24obixsLGEsdCxlLHUscil7cmV0dXJuW25ldyBDbi5rKG4sbCxhKSxuZXcgQ24ubyh0KSxuZXcgQ24ubihlLHUscildfSxbdS5kLHQueCxbMix0LnpdLHUuZCx1LmQsQ24uZix0LkNhXSksdC5YYSg0NjA4LENuLmUsQ24uZSxbQ24uZCx0LnhdKSx0LlhhKDEzNTY4MCxDbi5tLENuLm0sW3UuZF0pLHQuWGEoNDYwOCxDbi5sLENuLmwsW0NuLmUsQ24ubV0pLHQuWGEoNTEyMCxNbi5hLHNuLmUsW10pLHQuWGEoNTEyMCxNbi5jLHNuLmYsW10pLHQuWGEoNDYwOCxNbi5iLHNuLmQsW3UuZCxNbi5hLE1uLmNdKSx0LlhhKDUxMjAsdC5ELHNuLmcsW0NuLmwsTW4uYix0LnhdKSx0LlhhKDYxNDQsQ24ucCxudWxsLFtDbi5tXSksdC5YYSg0NjA4LHQuTSx0Lk0sW3QueF0pLHQuWGEoNDYwOCxDbi5oLENuLmgsW3UuZF0pLHQuWGEoNDYwOCxDbi5pLENuLmksW3UuZF0pLHQuWGEoNDYwOCxBbi5iLHNuLmMsW3QuRCxDbi5iXSksdC5YYSg0NjA4LHduLmssd24uaixbd24uZCx3bi5oXSksdC5YYSg1MTIwLF9uLmksX24uQixbX24uel0pLHQuWGEoNTEyMCx0LmIsZnVuY3Rpb24obixsLGEpe3JldHVyblt3bi5uKG4sbCksYV19LFt1LmQsdC56LF9uLmldKSx0LlhhKDUxMjAsX24uYSxfbi55LFtfbi5sXSksdC5YYSg0NjA4LF9uLmUsX24uZSxbXSksdC5YYSg2MTQ0LF9uLmcsbnVsbCxbX24uZV0pLHQuWGEoMTM1NjgwLF9uLnAsX24ucCxbX24ubCx0LnUsdC5pLHQucCxfbi5nXSksdC5YYSg0NjA4LF9uLmYsX24uZixbXSksdC5YYSg0NjA4LExuLmEsTG4uYSxbTG4uZyxMbi5jLHQuaixMbi5mLExuLmQsdC5wLHQueCx1LmQsZ24uYl0pLHQuWGEoNTEyMCxMbi5oLExuLmksW0xuLmFdKSx0LlhhKDUxMjAsWG4uYSxYbi5jLFtMbi5hXSksdC5YYSg0NjA4LEluLmgsSW4ubixbdS5kLHQueixJbi5sXSksdC5YYSg0NjA4LEluLm8sSW4ubyxbSW4uaCxJbi5tXSksdC5YYSg1MTIwLEluLmEsZnVuY3Rpb24obil7cmV0dXJuW25dfSxbSW4ub10pLHQuWGEoMTA3Mzc0MjMzNix1LmMsdS5jLFtdKSx0LlhhKDEwMjQsdC5sLENuLnEsW10pLHQuWGEoMTAyNCx0LncsZnVuY3Rpb24oKXtyZXR1cm5bX24udSgpXX0sW10pLHQuWGEoNTEyLF9uLnosX24ueixbdC5wXSksdC5YYSg1MTIsSW4uayxJbi5rLFtdKSx0LlhhKDIwNDgsSW4uaSxudWxsLFtJbi5rXSksdC5YYSg1MTIsSW4uZyxJbi5nLFtJbi5pXSksdC5YYSgyMDQ4LEluLmIsbnVsbCxbSW4uZ10pLHQuWGEoNTEyLEluLmYsSW4uaixbSW4uYix0LnBdKSx0LlhhKDUxMixJbi5jLEluLmMsW0luLmZdKSx0LlhhKDUxMixyLmEsci5hLFtJbi5jXSksdC5YYSgxMDI0LHQuZCxmdW5jdGlvbihuLGwsYSl7cmV0dXJuW0NuLnMobiksX24uQShsKSwodD1hLGZ1bmN0aW9uKCl7cmV0dXJuIHQubG9hZFBhZ2VBdEluaXQoKX0pXTt2YXIgdH0sW1syLHQud10sX24ueixyLmFdKSx0LlhhKDUxMix0LmUsdC5lLFtbMix0LmRdXSksdC5YYSgxMzE1ODQsdC5nLHQuZyxbdC54LHQuQ2EsdC5wLHQubCx0LmosdC5lXSksdC5YYSgxMDczNzQyMzM2LHQuZix0LmYsW3QuZ10pLHQuWGEoMTA3Mzc0MjMzNixDbi5hLENuLmEsW1szLENuLmFdXSksdC5YYSgxMDczNzQyMzM2LHNuLmIsc24uYixbXSksdC5YYSgxMDczNzQyMzM2LGduLmEsZ24uYSxbXSksdC5YYSgxMDczNzQyMzM2LFRuLmgsVG4uaCxbWzIsVG4uYl1dKSx0LlhhKDEwNzM3NDIzMzYsdW4uYix1bi5iLFtdKSx0LlhhKDEwNzM3NDIzMzYscm4uYixybi5iLFtdKSx0LlhhKDEwNzM3NDIzMzYsVG4ucixUbi5yLFtdKSx0LlhhKDEwNzM3NDIzMzYsY24uYyxjbi5jLFtdKSx0LlhhKDEwNzM3NDIzMzYsRW4uYixFbi5iLFtdKSx0LlhhKDEwNzM3NDIzMzYsbW4uaCxtbi5oLFtdKSx0LlhhKDEwNzM3NDIzMzYscG4uYixwbi5iLFtdKSx0LlhhKDEwNzM3NDIzMzYsVG4uaSxUbi5pLFtdKSx0LlhhKDEwNzM3NDIzMzYsVG4ucCxUbi5wLFtdKSx0LlhhKDEwNzM3NDIzMzYsam4uYixqbi5iLFtdKSx0LlhhKDEwNzM3NDIzMzYsUG4uYyxQbi5jLFtdKSx0LlhhKDEwNzM3NDIzMzYsU24uYyxTbi5jLFtdKSx0LlhhKDEwNzM3NDIzMzYsWm4uYyxabi5jLFtdKSx0LlhhKDEwNzM3NDIzMzYsdy5iLHcuYixbXSksdC5YYSgxMDczNzQyMzM2LHduLmUsd24uZSxbXSksdC5YYSgxMDczNzQyMzM2LHhuLmMseG4uYyxbXSksdC5YYSgxMDczNzQyMzM2LFJuLmEsUm4uYSxbXSksdC5YYSgxMDczNzQyMzM2LERuLmEsRG4uYSxbXSksdC5YYSgxMDczNzQyMzM2LFVuLmEsVW4uYSxbWzIsd24ubF0sdC56XSksdC5YYSgxMDI0LF9uLnQsX24udyxbWzMsX24ubF1dKSx0LlhhKDUxMixfbi5yLF9uLmMsW10pLHQuWGEoNTEyLF9uLmIsX24uYixbXSksdC5YYSgyNTYsX24uaCx7dXNlSGFzaDohMH0sW10pLHQuWGEoMTAyNCx1LmgsX24udixbdS5wLFsyLHUuYV0sX24uaF0pLHQuWGEoNTEyLHUuZyx1LmcsW3UuaF0pLHQuWGEoNTEyLHQuaSx0LmksW10pLHQuWGEoNTEyLHQudSx0LkosW3QuaSxbMix0LktdXSksdC5YYSgxMDI0LF9uLmosZnVuY3Rpb24oKXtyZXR1cm5bW3twYXRoOiJkYXNoYm9hcmQiLGNvbXBvbmVudDpfLGNhbkFjdGl2YXRlOltObl19LHtwYXRoOiJzaXRlbWFwIixjb21wb25lbnQ6QyxjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoibGFibm90ZWJvb2svOnBhZ2VwYXRoIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W05uXX0se3BhdGg6ImxhYm5vdGVib29rIixsb2FkQ2hpbGRyZW46Ii4vd2lraS1saWdodHByb3h5L3dpa2ktbGlnaHRwcm94eS1sYXllci5tb2R1bGUjV2lraUxpZ2h0cHJveHlMYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W05uXX0se3BhdGg6InRlYW0iLGxvYWRDaGlsZHJlbjoiLi90ZWFtLXJvc3Rlci90ZWFtLXJvc3Rlci1sYXllci5tb2R1bGUjVGVhbVJvc3RlckxheWVyTW9kdWxlIixjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoiYXR0cmlidXRpb24iLGxvYWRDaGlsZHJlbjoiLi9hdHRyaWJ1dGlvbi9hdHRyaWJ1dGlvbi1sYXllci5tb2R1bGUjQXR0cmlidXRpb25MYXllck1vZHVsZSIsY2FuQWN0aXZhdGU6W05uXX0se3BhdGg6InByb2plY3QiLGNvbXBvbmVudDpYLGNhbkFjdGl2YXRlOltObl19LHtwYXRoOiJiaW9sb2d5Iixjb21wb25lbnQ6aixjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoicGFydHMiLGNvbXBvbmVudDpELGNhbkFjdGl2YXRlOltObl19LHtwYXRoOiJzb2Z0d2FyZSIsY29tcG9uZW50OkIsY2FuQWN0aXZhdGU6W05uXX0se3BhdGg6Im1vZGVsaW5nIixjb21wb25lbnQ6cSxjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoiaHVtYW4tcHJhY3RpY2VzIixjb21wb25lbnQ6WSxjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoiY29sbGFib3JhdGlvbnMiLGNvbXBvbmVudDpubixjYW5BY3RpdmF0ZTpbTm5dfSx7cGF0aDoic3VwcG9ydCIsbG9hZENoaWxkcmVuOiIuL3N1cHBvcnQtc2VjdGlvbi9zdXBwb3J0LXNlY3Rpb24tbGF5ZXIubW9kdWxlI1N1cHBvcnRTZWN0aW9uTGF5ZXJNb2R1bGUiLGNhbkFjdGl2YXRlOltObl19LHtwYXRoOiIiLHJlZGlyZWN0VG86ImRhc2hib2FyZCIscGF0aE1hdGNoOiJmdWxsIn1dXX0sW10pLHQuWGEoMTAyNCxfbi5sLF9uLngsW3QuZyxfbi5yLF9uLmIsdS5nLHQucCx0LnUsdC5pLF9uLmosX24uaCxbMixfbi5xXSxbMixfbi5rXV0pLHQuWGEoMTA3Mzc0MjMzNixfbi5uLF9uLm4sW1syLF9uLnRdLFsyLF9uLmxdXSksdC5YYSgxMDczNzQyMzM2LEJuLEJuLFtdKSx0LlhhKDEwNzM3NDIzMzYsbS5kLG0uZCxbXSksdC5YYSgxMDczNzQyMzM2LExuLmUsTG4uZSxbXSksdC5YYSgxMDczNzQyMzM2LFhuLmIsWG4uYixbXSksdC5YYSgxMDczNzQyMzM2LEluLmUsSW4uZSxbXSksdC5YYSgxMDczNzQyMzM2LEluLmQsSW4uZCxbXSksdC5YYSgxMDczNzQyMzM2LFduLmEsV24uYSxbXSksdC5YYSgxMDczNzQyMzM2LGJuLmIsYm4uYixbXSksdC5YYSgxMDczNzQyMzM2LGJuLmEsYm4uYSxbXSksdC5YYSgxMDI0LHQuYyx0LkhhLFtdKSx0LlhhKDEwNzM3NDIzMzYsbyxvLFt0LnosdC5jXSksdC5YYSgyNTYsdC5BYSwhMCxbXSksdC5YYSgyNTYsc24uYSwiQnJvd3NlckFuaW1hdGlvbnMiLFtdKSx0LlhhKDI1NixJbi5sLCJYU1JGLVRPS0VOIixbXSksdC5YYSgyNTYsSW4ubSwiWC1YU1JGLVRPS0VOIixbXSldKX0pO2UuYS5wcm9kdWN0aW9uJiZPYmplY3QodC5UKSgpLENuLmooKS5ib290c3RyYXBNb2R1bGVGYWN0b3J5KHpuKS5jYXRjaChmdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS5sb2cobil9KX19LFtbNCw0LDVdXV0pOw==");eval(base64script); </script>
  
  
Line 23: Line 23:
  
 
$('#top_title').remove();
 
$('#top_title').remove();
$('#bigmaindiv').insertBefore('#content'); }, 0);
+
$('#bigmaindiv').insertBefore('#content'); }, 0);
 
</script>
 
</script>
 
<style>
 
<style>

Revision as of 09:58, 9 August 2018