edna.alda
edna.core
edna.examples
edna.parse
intro-4-length-shorthand
Example
A shorthand way of changing the note length is simply to write the number.
[
:piano
:c
:d
1/2
:e
:f
]
Source
(
def
intro-4-length-shorthand
(
edna->data-uri
[
:piano
:c
:d
1/2
:e
:f
]
)
)
ezpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHRydWUsIDpkeW5hZG9jLmNvbW1vbi90eXBlIDpjbGpzLCA6ZHluYWRvYy5jb21tb24vbnNlcyAoezp2YXItc3ltcyBbZ2V0LWluc3RydW1lbnRzXSwgOnR5cGUgOmNsaiwgOnN5bSBlZG5hLmFsZGF9IHs6dmFyLXN5bXMgW2VkbmEtPmRhdGEtdXJpIGV4cG9ydCEgZWRuYS0+YWxkYSBzdG9wISBwbGF5ISBlZG5hLT5hbGRhKl0sIDp0eXBlIDpjbGosIDpzeW0gZWRuYS5jb3JlfSB7OnZhci1zeW1zIFthZXJpdGhzLXRoZW1lIGR1ZWxpbmctYmFuam9zIGludHJvLTEtc2luZ2xlLW5vdGVzIGludHJvLTItYXR0cmlidXRlcyBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQgaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kIGludHJvLTUtY2hvcmRdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLmV4YW1wbGVzfSB7OnZhci1zeW1zIFthY2NpZGVudGFscyBhY2NpZGVudGFsLT5rZXl3b3JkIG5vdGU/IGRpZ2l0cyBpbnN0cnVtZW50cyBwYXJzZSBub3RlcyBvY3RhdmUtb3BlcmF0b3JzIHBhcnNlLW5vdGVdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLnBhcnNlfSksIDpkeW5hZG9jLmNvbW1vbi92YXJzIFt7OnN5bSBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmRcclxuIChlZG5hLT5kYXRhLXVyaSBbOnBpYW5vIDpjIDpkIDEvMiA6ZSA6Zl0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJBIHNob3J0aGFuZCB3YXkgb2YgY2hhbmdpbmcgdGhlIG5vdGUgbGVuZ3RoIGlzIHNpbXBseSB0byB3cml0ZSB0aGUgbnVtYmVyLiIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyA6YyA6ZCAxLzIgOmUgOmZdfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kKSwgOmJvZHktc3RyICJbOnBpYW5vIDpjIDpkIDEvMiA6ZSA6Zl1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTQtbGVuZ3RoLXNob3J0aGFuZC8wIn1dfV0sIDpkeW5hZG9jLmNvbW1vbi9ucy1tZXRhIG5pbCwgOmR5bmFkb2MuY29tbW9uL25zLXN5bSBlZG5hLmV4YW1wbGVzLCA6ZHluYWRvYy5jb21tb24vcmVsLXBhdGggIi4uLy4uLyIsIDpkeW5hZG9jLmNvbW1vbi9oaWRlLWJhZGdlPyB0cnVlLCA6ZHluYWRvYy5jb21tb24vY2xqcy1uc2VzLWFuZC12YXJzIHtldmFsLXNvdXAuY29yZSAoezpzeW0gY29kZS0+cmVzdWx0cywgOm1ldGEgezpkb2MgIkV2YWx1YXRlcyBlYWNoIGZvcm0sIHByb3ZpZGluZyB0aGUgcmVzdWx0cyBpbiBhIGNhbGxiYWNrLlxuICBJZiBhbnkgb2YgdGhlIGZvcm1zIGFyZSBzdHJpbmdzLCBpdCB3aWxsIHJlYWQgdGhlbSBmaXJzdC4iLCA6YXJnbGlzdHMgW1tmb3JtcyBjYl0gW2Zvcm1zIGNiIHs6a2V5cyBbKmN1cnJlbnQtbnMgKnN0YXRlIGN1c3RvbS1sb2FkIHRpbWVvdXQgZGlzYWJsZS10aW1lb3V0P10sIDpvciB7KmN1cnJlbnQtbnMgKGF0b20gKHF1b3RlIGNsanMudXNlcikpLCAqc3RhdGUgKmNsanMtc3RhdGUsIGN1c3RvbS1sb2FkIGN1c3RvbS1sb2FkISwgdGltZW91dCA0MDAwLCBkaXNhYmxlLXRpbWVvdXQ/IGZhbHNlfSwgOmFzIG9wdHN9XV19LCA6c291cmNlICIoZGVmblxyXG4gY29kZS0+cmVzdWx0c1xyXG4gXCJFdmFsdWF0ZXMgZWFjaCBmb3JtLCBwcm92aWRpbmcgdGhlIHJlc3VsdHMgaW4gYSBjYWxsYmFjay5cXG4gIElmIGFueSBvZiB0aGUgZm9ybXMgYXJlIHN0cmluZ3MsIGl0IHdpbGwgcmVhZCB0aGVtIGZpcnN0LlwiXHJcbiAoW2Zvcm1zIGNiXSAoY29kZS0+cmVzdWx0cyBmb3JtcyBjYiB7fSkpXHJcbiAoW2Zvcm1zXHJcbiAgIGNiXHJcbiAgIHs6a2V5cyBbKmN1cnJlbnQtbnMgKnN0YXRlIGN1c3RvbS1sb2FkIHRpbWVvdXQgZGlzYWJsZS10aW1lb3V0P10sXHJcbiAgICA6b3JcclxuICAgIHsqY3VycmVudC1ucyAoYXRvbSAnY2xqcy51c2VyKSxcclxuICAgICAqc3RhdGUgKmNsanMtc3RhdGUsXHJcbiAgICAgY3VzdG9tLWxvYWQgY3VzdG9tLWxvYWQhLFxyXG4gICAgIHRpbWVvdXQgNDAwMCxcclxuICAgICBkaXNhYmxlLXRpbWVvdXQ/IGZhbHNlfSxcclxuICAgIDphcyBvcHRzfV1cclxuICAobGV0XHJcbiAgIFtmb3Jtc1xyXG4gICAgKG1hcHZcclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDg5OTYjXVxyXG4gICAgICAoaWZcclxuICAgICAgIChzdHJpbmc/IHAxX180ODk5NiMpXHJcbiAgICAgICAoc3RyLT5mb3JtIEAqY3VycmVudC1ucyBwMV9fNDg5OTYjKVxyXG4gICAgICAgcDFfXzQ4OTk2IykpXHJcbiAgICAgZm9ybXMpXHJcbiAgICBpbml0LWZvcm1zXHJcbiAgICAodmVjXHJcbiAgICAgKGNvbmNhdFxyXG4gICAgICBbJyhucyBjbGpzLnVzZXIpXVxyXG4gICAgICAod2hlbi1ub3RcclxuICAgICAgIGRpc2FibGUtdGltZW91dD9cclxuICAgICAgIFsnKGRlZiBwcy1sYXN0LXRpbWUgKGF0b20gMCkpXHJcbiAgICAgICAgJyhkZWZuXHJcbiAgICAgICAgICBwcy1yZXNldC10aW1lb3V0IVxyXG4gICAgICAgICAgW11cclxuICAgICAgICAgIChyZXNldCEgcHMtbGFzdC10aW1lICguZ2V0VGltZSAoanMvRGF0ZS4pKSkpXHJcbiAgICAgICAgJyhkZWZuXHJcbiAgICAgICAgICBwcy1jaGVjay1mb3ItdGltZW91dCFcclxuICAgICAgICAgIFt0aW1lb3V0XVxyXG4gICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAoPiAoLSAoLmdldFRpbWUgKGpzL0RhdGUuKSkgQHBzLWxhc3QtdGltZSkgdGltZW91dClcclxuICAgICAgICAgICAodGhyb3cgKGpzL0Vycm9yLiBcIkV4ZWN1dGlvbiB0aW1lZCBvdXQuXCIpKSkpXSlcclxuICAgICAgWycoc2V0ISAqcHJpbnQtZXJyLWZuKiAoZm4gW19dKSkgKGxpc3QgJ25zIEAqY3VycmVudC1ucyldKSlcclxuICAgIHRpbWVvdXQtY2JcclxuICAgIChmblxyXG4gICAgIFtyZXN1bHRzXVxyXG4gICAgIChldmFsLWZvcm1zXHJcbiAgICAgIChhZGQtdGltZW91dHMtaWYtbmVjZXNzYXJ5IHRpbWVvdXQgZm9ybXMgcmVzdWx0cylcclxuICAgICAgY2JcclxuICAgICAgKnN0YXRlXHJcbiAgICAgICpjdXJyZW50LW5zXHJcbiAgICAgIGN1c3RvbS1sb2FkKSlcclxuICAgIGluaXQtY2JcclxuICAgIChmblxyXG4gICAgIFtyZXN1bHRzXVxyXG4gICAgIChldmFsLWZvcm1zXHJcbiAgICAgIChpZiBkaXNhYmxlLXRpbWVvdXQ/IGZvcm1zIChtYXAgd3JhcC1tYWNyb2V4cGFuZCBmb3JtcykpXHJcbiAgICAgIChpZiBkaXNhYmxlLXRpbWVvdXQ/IGNiIHRpbWVvdXQtY2IpXHJcbiAgICAgICpzdGF0ZVxyXG4gICAgICAqY3VycmVudC1uc1xyXG4gICAgICBjdXN0b20tbG9hZCkpXVxyXG4gICAoZXZhbC1mb3JtcyBpbml0LWZvcm1zIGluaXQtY2IgKnN0YXRlICpjdXJyZW50LW5zIGN1c3RvbS1sb2FkKSkpKVxyXG4ifSksIGNsanMuY29tcGlsZXIgKHs6c3ltIHByb3RvY29sLXByZWZpeCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJvdG9jb2wtcHJlZml4XHJcbiBbcHN5bV1cclxuIChzeW1ib2xcclxuICAoc3RyXHJcbiAgICgtPlxyXG4gICAgKHN0ciBwc3ltKVxyXG4gICAgKC5yZXBsYWNlICM/KDpjbGogXFwuIDpjbGpzIChqcy9SZWdFeHAuIFwiXFxcXC5cIiBcImdcIikpIFxcJClcclxuICAgICgucmVwbGFjZSBcXC8gXFwkKSlcclxuICAgXCIkXCIpKSlcclxuIn0gezpzeW0gZW1pdC1hcmd1bWVudHMtdG8tYXJyYXksIDptZXRhIHs6ZG9jICJFbWl0IGNvZGUgdGhhdCBjb3BpZXMgZnVuY3Rpb24gYXJndW1lbnRzIGludG8gYW4gYXJyYXkgc3RhcnRpbmcgYXQgYW4gaW5kZXguXG4gIFJldHVybnMgbmFtZSBvZiB2YXIgaG9sZGluZyB0aGUgYXJyYXkuIiwgOmFyZ2xpc3RzIChbc3RhcnRzbGljZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtYXJndW1lbnRzLXRvLWFycmF5XHJcbiBcIkVtaXQgY29kZSB0aGF0IGNvcGllcyBmdW5jdGlvbiBhcmd1bWVudHMgaW50byBhbiBhcnJheSBzdGFydGluZyBhdCBhbiBpbmRleC5cXG4gIFJldHVybnMgbmFtZSBvZiB2YXIgaG9sZGluZyB0aGUgYXJyYXkuXCJcclxuIFtzdGFydHNsaWNlXVxyXG4gKGFzc2VydCAoYW5kICg+PSBzdGFydHNsaWNlIDApIChpbnRlZ2VyPyBzdGFydHNsaWNlKSkpXHJcbiAobGV0XHJcbiAgW21uYW1lIChtdW5nZSAoZ2Vuc3ltKSkgaSAoc3RyIG1uYW1lIFwiX19pXCIpIGEgKHN0ciBtbmFtZSBcIl9fYVwiKV1cclxuICAoZW1pdGxuXHJcbiAgIFwidmFyIFwiXHJcbiAgIGlcclxuICAgXCIgPSAwLCBcIlxyXG4gICBhXHJcbiAgIFwiID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAgXCJcclxuICAgc3RhcnRzbGljZVxyXG4gICBcIik7XCIpXHJcbiAgKGVtaXRsblxyXG4gICBcIndoaWxlIChcIlxyXG4gICBpXHJcbiAgIFwiIDwgXCJcclxuICAgYVxyXG4gICBcIi5sZW5ndGgpIHtcIlxyXG4gICBhXHJcbiAgIFwiW1wiXHJcbiAgIGlcclxuICAgXCJdID0gYXJndW1lbnRzW1wiXHJcbiAgIGlcclxuICAgXCIgKyBcIlxyXG4gICBzdGFydHNsaWNlXHJcbiAgIFwiXTsgKytcIlxyXG4gICBpXHJcbiAgIFwiO31cIilcclxuICBhKSlcclxuIn0gezpzeW0gZW1pdC1qcy1vYmplY3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXMgZW1pdC1qcy1vYmplY3QtdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1qcy1vYmplY3RcclxuIFtpdGVtcyBlbWl0LWpzLW9iamVjdC12YWxdXHJcbiAoZW1pdHMgXCIoe1wiKVxyXG4gKHdoZW4tbGV0XHJcbiAgW2l0ZW1zIChzZXEgaXRlbXMpXVxyXG4gIChsZXRcclxuICAgW1tbayB2XSAmIHJdIGl0ZW1zXVxyXG4gICAoZW1pdHMgXCJcXFwiXCIgKG5hbWUgaykgXCJcXFwiOiBcIiAoZW1pdC1qcy1vYmplY3QtdmFsIHYpKVxyXG4gICAoZG9zZXFcclxuICAgIFtbayB2XSByXVxyXG4gICAgKGVtaXRzIFwiLCBcXFwiXCIgKG5hbWUgaykgXCJcXFwiOiBcIiAoZW1pdC1qcy1vYmplY3QtdmFsIHYpKSkpKVxyXG4gKGVtaXRzIFwifSlcIikpXHJcbiJ9IHs6c3ltIGRpc3RpbmN0LWtleXM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXN0aW5jdC1rZXlzP1xyXG4gW2tleXNdXHJcbiAobGV0XHJcbiAgW2tleXMgKG1hcCBhbmEvdW53cmFwLXF1b3RlIGtleXMpXVxyXG4gIChhbmRcclxuICAgKGV2ZXJ5PyAoZm4qIFtwMV9fNDg2NTAjXSAoPSAoOm9wIHAxX180ODY1MCMpIDpjb25zdCkpIGtleXMpXHJcbiAgICg9IChjb3VudCAoaW50byAje30ga2V5cykpIChjb3VudCBrZXlzKSkpKSlcclxuIn0gezpzeW0gbXVuZ2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbc10gW3MgcmVzZXJ2ZWRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZVxyXG4gKFtzXSAobXVuZ2UgcyBqcy1yZXNlcnZlZCkpXHJcbiAoW3MgcmVzZXJ2ZWRdXHJcbiAgKGlmXHJcbiAgICM/KDpjbGogKG1hcD8gcykgOmNsanMgKGFuYS9jbGpzLW1hcD8gcykpXHJcbiAgIChsZXRcclxuICAgIFtuYW1lLXZhclxyXG4gICAgIHNcclxuICAgICBuYW1lXHJcbiAgICAgKDpuYW1lIG5hbWUtdmFyKVxyXG4gICAgIGZpZWxkXHJcbiAgICAgKDpmaWVsZCBuYW1lLXZhcilcclxuICAgICBpbmZvXHJcbiAgICAgKDppbmZvIG5hbWUtdmFyKV1cclxuICAgIChpZi1ub3RcclxuICAgICAobmlsPyAoOmZuLXNlbGYtbmFtZSBpbmZvKSlcclxuICAgICAoZm4tc2VsZi1uYW1lIHMpXHJcbiAgICAgKGxldFxyXG4gICAgICBbZGVwdGhcclxuICAgICAgIChzaGFkb3ctZGVwdGggcylcclxuICAgICAgIGNvZGVcclxuICAgICAgIChoYXNoLXNjb3BlIHMpXHJcbiAgICAgICByZW5hbWVkXHJcbiAgICAgICAoZ2V0ICpsZXhpY2FsLXJlbmFtZXMqIGNvZGUpXHJcbiAgICAgICBuYW1lXHJcbiAgICAgICAoY29uZFxyXG4gICAgICAgICh0cnVlPyBmaWVsZClcclxuICAgICAgICAoc3RyIFwic2VsZl9fLlwiIG5hbWUpXHJcbiAgICAgICAgKG5vdCAobmlsPyByZW5hbWVkKSlcclxuICAgICAgICByZW5hbWVkXHJcbiAgICAgICAgOmVsc2VcclxuICAgICAgICBuYW1lKVxyXG4gICAgICAgbXVuZ2VkLW5hbWVcclxuICAgICAgIChtdW5nZSBuYW1lIHJlc2VydmVkKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAob3IgKHRydWU/IGZpZWxkKSAoemVybz8gZGVwdGgpKVxyXG4gICAgICAgbXVuZ2VkLW5hbWVcclxuICAgICAgIChzeW1ib2wgKHN0ciBtdW5nZWQtbmFtZSBcIl9fJFwiIGRlcHRoKSkpKSkpXHJcbiAgIChsZXRcclxuICAgIFtzc1xyXG4gICAgIChzdHJpbmcvcmVwbGFjZSAoc3RyIHMpIFwiLi5cIiBcIl9ET1RfX0RPVF9cIilcclxuICAgICBzc1xyXG4gICAgIChzdHJpbmcvcmVwbGFjZVxyXG4gICAgICBzc1xyXG4gICAgICAjPyg6Y2xqICNcIlxcLyguKVwiIDpjbGpzIChqcy9SZWdFeHAuIFwiXFxcXC8oLilcIikpXHJcbiAgICAgIFwiLiQxXCIpXHJcbiAgICAgcmZcclxuICAgICAobXVuZ2UtcmVzZXJ2ZWQgcmVzZXJ2ZWQpXHJcbiAgICAgc3NcclxuICAgICAobWFwIHJmIChzdHJpbmcvc3BsaXQgc3MgI1wiXFwuXCIpKVxyXG4gICAgIHNzXHJcbiAgICAgKHN0cmluZy9qb2luIFwiLlwiIHNzKVxyXG4gICAgIG1zXHJcbiAgICAgIz8oOmNsaiAoY2xvanVyZS5sYW5nLkNvbXBpbGVyL211bmdlIHNzKSA6Y2xqcyAoKHZhciBjbGpzLmNvcmUvbXVuZ2Utc3RyKSBzcykpXVxyXG4gICAgKGlmIChzeW1ib2w/IHMpIChzeW1ib2wgbXMpIG1zKSkpKSlcclxuIn0gezpzeW0gZ2V0LWRlZmluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttbmFtZSBqc2RvY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1kZWZpbmVcclxuIFttbmFtZSBqc2RvY11cclxuIChsZXRcclxuICBbb3B0cyAoZ2V0IEBlbnYvKmNvbXBpbGVyKiA6b3B0aW9ucyldXHJcbiAgKGFuZFxyXG4gICAoc29tZVxyXG4gICAgIz8oOmNsaiAoZm4qIFtwMV9fNDg2NTUjXSAoLnN0YXJ0c1dpdGggcDFfXzQ4NjU1IyBcIkBkZWZpbmVcIikpIDpjbGpzIChmbiogW3AxX180ODY1NiNdIChnc3RyaW5nL3N0YXJ0c1dpdGggcDFfXzQ4NjU2IyBcIkBkZWZpbmVcIikpKVxyXG4gICAganNkb2MpXHJcbiAgIG9wdHNcclxuICAgKD0gKDpvcHRpbWl6YXRpb25zIG9wdHMpIDpub25lKVxyXG4gICAobGV0XHJcbiAgICBbZGVmaW5lIChnZXQtaW4gb3B0cyBbOmNsb3N1cmUtZGVmaW5lcyAoc3RyIG1uYW1lKV0pXVxyXG4gICAgKHdoZW4gKHZhbGlkLWRlZmluZS12YWx1ZT8gZGVmaW5lKSAocHItc3RyIGRlZmluZSkpKSkpKVxyXG4ifSB7OnN5bSB2YWxpZC1kZWZpbmUtdmFsdWU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWxpZC1kZWZpbmUtdmFsdWU/XHJcbiBbeF1cclxuIChvciAoc3RyaW5nPyB4KSAodHJ1ZT8geCkgKGZhbHNlPyB4KSAobnVtYmVyPyB4KSkpXHJcbiJ9IHs6c3ltIGVtaXQtc2V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zIGNvbW1hLXNlcCBkaXN0aW5jdC1jb25zdGFudHM/XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1zZXRcclxuIFtpdGVtcyBjb21tYS1zZXAgZGlzdGluY3QtY29uc3RhbnRzP11cclxuIChjb25kXHJcbiAgKGVtcHR5PyBpdGVtcylcclxuICAoZW1pdHMgXCJjbGpzLmNvcmUuUGVyc2lzdGVudEhhc2hTZXQuRU1QVFlcIilcclxuICAoZGlzdGluY3QtY29uc3RhbnRzPyBpdGVtcylcclxuICAoZW1pdHNcclxuICAgXCJuZXcgY2xqcy5jb3JlLlBlcnNpc3RlbnRIYXNoU2V0KG51bGwsIG5ldyBjbGpzLmNvcmUuUGVyc2lzdGVudEFycmF5TWFwKG51bGwsIFwiXHJcbiAgIChjb3VudCBpdGVtcylcclxuICAgXCIsIFtcIlxyXG4gICAoY29tbWEtc2VwIChpbnRlcmxlYXZlIGl0ZW1zIChyZXBlYXQgXCJudWxsXCIpKSlcclxuICAgXCJdLCBudWxsKSwgbnVsbClcIilcclxuICA6ZWxzZVxyXG4gIChlbWl0c1xyXG4gICBcImNsanMuY29yZS5QZXJzaXN0ZW50SGFzaFNldC5jcmVhdGVBc0lmQnlBc3NvYyhbXCJcclxuICAgKGNvbW1hLXNlcCBpdGVtcylcclxuICAgXCJdKVwiKSkpXHJcbiJ9IHs6c3ltIGVtaXRzLWtleXdvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba3ddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0cy1rZXl3b3JkXHJcbiBba3ddXHJcbiAobGV0XHJcbiAgW25zIChuYW1lc3BhY2Uga3cpIG5hbWUgKG5hbWUga3cpXVxyXG4gIChlbWl0cyBcIm5ldyBjbGpzLmNvcmUuS2V5d29yZChcIilcclxuICAoZW1pdC1jb25zdGFudCBucylcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgbmFtZSlcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgKGlmIG5zIChzdHIgbnMgXCIvXCIgbmFtZSkgbmFtZSkpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IChoYXNoIGt3KSlcclxuICAoZW1pdHMgXCIpXCIpKSlcclxuIn0gezpzeW0gKmxleGljYWwtcmVuYW1lcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpsZXhpY2FsLXJlbmFtZXMqIHt9KVxyXG4ifSB7OnN5bSBlbWl0LWxldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7ZXhwciA6Ym9keSwgOmtleXMgW2JpbmRpbmdzIGVudl19IGlzLWxvb3BdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWxldFxyXG4gW3tleHByIDpib2R5LCA6a2V5cyBbYmluZGluZ3MgZW52XX0gaXMtbG9vcF1cclxuIChsZXRcclxuICBbY29udGV4dCAoOmNvbnRleHQgZW52KV1cclxuICAod2hlbiAoPSA6ZXhwciBjb250ZXh0KSAoZW1pdHMgXCIoZnVuY3Rpb24gKCl7XCIpKVxyXG4gIChiaW5kaW5nXHJcbiAgIFsqbGV4aWNhbC1yZW5hbWVzKlxyXG4gICAgKGludG9cclxuICAgICAqbGV4aWNhbC1yZW5hbWVzKlxyXG4gICAgICh3aGVuXHJcbiAgICAgICg9IDpzdGF0ZW1lbnQgY29udGV4dClcclxuICAgICAgKG1hcFxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW2JpbmRpbmddXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbbmFtZSAoOm5hbWUgYmluZGluZyldXHJcbiAgICAgICAgICh2ZWN0b3IgKGhhc2gtc2NvcGUgYmluZGluZykgKGdlbnN5bSAoc3RyIG5hbWUgXCItXCIpKSkpKVxyXG4gICAgICAgYmluZGluZ3MpKSldXHJcbiAgIChkb3NlcVxyXG4gICAgW3s6a2V5cyBbaW5pdF0sIDphcyBiaW5kaW5nfSBiaW5kaW5nc11cclxuICAgIChlbWl0cyBcInZhciBcIilcclxuICAgIChlbWl0IGJpbmRpbmcpXHJcbiAgICAoZW1pdGxuIFwiID0gXCIgaW5pdCBcIjtcIikpXHJcbiAgICh3aGVuIGlzLWxvb3AgKGVtaXRsbiBcIndoaWxlKHRydWUpe1wiKSlcclxuICAgKGVtaXRzIGV4cHIpXHJcbiAgICh3aGVuIGlzLWxvb3AgKGVtaXRsbiBcImJyZWFrO1wiKSAoZW1pdGxuIFwifVwiKSkpXHJcbiAgKHdoZW4gKD0gOmV4cHIgY29udGV4dCkgKGVtaXRzIFwifSkoKVwiKSkpKVxyXG4ifSB7OnN5bSBhbGwtZGlzdGluY3Q/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hzXSl9LCA6c291cmNlICIoZGVmbiBhbGwtZGlzdGluY3Q/IFt4c10gKGFwcGx5IGRpc3RpbmN0PyB4cykpXHJcbiJ9IHs6c3ltIGNsanMtcmVzZXJ2ZWQtZmlsZS1uYW1lcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgY2xqcy1yZXNlcnZlZC1maWxlLW5hbWVzICN7XCJkZXBzLmNsanNcIn0pXHJcbiJ9IHs6c3ltIGJhc2UtdHlwZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBiYXNlLXR5cGVzXHJcbiAje1wiYm9vbGVhblwiIFwib2JqZWN0XCIgXCIqXCIgXCJzdHJpbmdcIiBcIk9iamVjdFwiIFwiTnVtYmVyXCIgXCJudWxsXCIgXCJEYXRlXCJcclxuICAgXCJudW1iZXJcIiBcIlN0cmluZ1wiIFwiUmVnRXhwXCIgXCIuLi4qXCIgXCJBcnJheVwiIFwiYXJyYXlcIiBcIkJvb2xlYW5cIn0pXHJcbiJ9IHs6c3ltIHJlc29sdmUtdHlwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtdHlwZVxyXG4gW2VudiB0XVxyXG4gKGNvbmRcclxuICAoZ2V0IGJhc2UtdHlwZXMgdClcclxuICB0XHJcbiAgKGdldCBtYXBwZWQtdHlwZXMgdClcclxuICAoZ2V0IG1hcHBlZC10eXBlcyB0KVxyXG4gICM/KDpjbGogKC5zdGFydHNXaXRoIHQgXCIhXCIpIDpjbGpzIChnc3RyaW5nL3N0YXJ0c1dpdGggdCBcIiFcIikpXHJcbiAgKHN0ciBcIiFcIiAocmVzb2x2ZS10eXBlIGVudiAoc3VicyB0IDEpKSlcclxuICAjPyg6Y2xqICguc3RhcnRzV2l0aCB0IFwie1wiKSA6Y2xqcyAoZ3N0cmluZy9zdGFydHNXaXRoIHQgXCJ7XCIpKVxyXG4gIHRcclxuICAjPyg6Y2xqICguc3RhcnRzV2l0aCB0IFwiZnVuY3Rpb25cIikgOmNsanMgKGdzdHJpbmcvc3RhcnRzV2l0aCB0IFwiZnVuY3Rpb25cIikpXHJcbiAgKGxldFxyXG4gICBbaWR4XHJcbiAgICAoLmxhc3RJbmRleE9mIHQgXCI6XCIpXHJcbiAgICBbZnN0ciByc3RyXVxyXG4gICAgKGlmLW5vdFxyXG4gICAgICg9PSAtMSBpZHgpXHJcbiAgICAgWyhzdWJzIHQgMCBpZHgpIChzdWJzIHQgKGluYyBpZHgpIChjb3VudCB0KSldXHJcbiAgICAgW3QgbmlsXSlcclxuICAgIHJldC10XHJcbiAgICAod2hlbiByc3RyIChyZXNvbHZlLXR5cGUgZW52IHJzdHIpKVxyXG4gICAgYXhzdHJcclxuICAgIChzdWJzIGZzdHIgOSAoZGVjIChjb3VudCBmc3RyKSkpXHJcbiAgICBhcmdzLXRzXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoc3RyaW5nL2JsYW5rPyBheHN0cilcclxuICAgICAobWFwXHJcbiAgICAgIChjb21wXHJcbiAgICAgICAoZm4qIFtwMV9fNDg2NTIjXSAocmVzb2x2ZS10eXBlIGVudiBwMV9fNDg2NTIjKSlcclxuICAgICAgIHN0cmluZy90cmltKVxyXG4gICAgICAoc3RyaW5nL3NwbGl0IGF4c3RyICNcIixcIikpKV1cclxuICAgKGNvbmQtPlxyXG4gICAgKHN0ciBcImZ1bmN0aW9uKFwiIChzdHJpbmcvam9pbiBcIixcIiBhcmdzLXRzKSBcIilcIilcclxuICAgIHJldC10XHJcbiAgICAoc3RyIFwiOlwiIHJldC10KSkpXHJcbiAgIz8oOmNsaiAoLmVuZHNXaXRoIHQgXCI9XCIpIDpjbGpzIChnc3RyaW5nL2VuZHNXaXRoIHQgXCI9XCIpKVxyXG4gIChzdHIgKHJlc29sdmUtdHlwZSBlbnYgKHN1YnMgdCAwIChkZWMgKGNvdW50IHQpKSkpIFwiPVwiKVxyXG4gIDplbHNlXHJcbiAgKG11bmdlIChzdHIgKDpuYW1lIChhbmEvcmVzb2x2ZS12YXIgZW52IChzeW1ib2wgdCkpKSkpKSlcclxuIn0gezpzeW0gKnNvdXJjZS1tYXAtZGF0YS1nZW4tY29sKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnNvdXJjZS1tYXAtZGF0YS1nZW4tY29sKiBuaWwpXHJcbiJ9IHs6c3ltIGVtaXQtd2l0aC1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cHIgbWV0YV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtd2l0aC1tZXRhXHJcbiBbZXhwciBtZXRhXVxyXG4gKGVtaXRzIFwiY2xqcy5jb3JlLndpdGhfbWV0YShcIiBleHByIFwiLFwiIG1ldGEgXCIpXCIpKVxyXG4ifSB7OnN5bSBlbWl0LXZhcmlhZGljLWZuLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7ZXhwciA6Ym9keSwgbWF4LWZpeGVkLWFyaXR5IDpmaXhlZC1hcml0eSwgdmFyaWFkaWMgOnZhcmlhZGljPywgOmtleXMgW3R5cGUgbmFtZSBwYXJhbXMgZW52IHJlY3Vyc10sIDphcyBmfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtdmFyaWFkaWMtZm4tbWV0aG9kXHJcbiBbe2V4cHIgOmJvZHksXHJcbiAgIG1heC1maXhlZC1hcml0eSA6Zml4ZWQtYXJpdHksXHJcbiAgIHZhcmlhZGljIDp2YXJpYWRpYz8sXHJcbiAgIDprZXlzIFt0eXBlIG5hbWUgcGFyYW1zIGVudiByZWN1cnNdLFxyXG4gICA6YXMgZn1dXHJcbiAoZW1pdC13cmFwXHJcbiAgZW52XHJcbiAgKGxldFxyXG4gICBbbmFtZVxyXG4gICAgKG9yIG5hbWUgKGdlbnN5bSkpXHJcbiAgICBtbmFtZVxyXG4gICAgKG11bmdlIG5hbWUpXHJcbiAgICBkZWxlZ2F0ZS1uYW1lXHJcbiAgICAoc3RyIG1uYW1lIFwiX19kZWxlZ2F0ZVwiKV1cclxuICAgKGVtaXRsbiBcIihmdW5jdGlvbigpIHsgXCIpXHJcbiAgIChlbWl0cyBcInZhciBcIiBkZWxlZ2F0ZS1uYW1lIFwiID0gZnVuY3Rpb24gKFwiKVxyXG4gICAoZG9zZXFcclxuICAgIFtwYXJhbSBwYXJhbXNdXHJcbiAgICAoZW1pdCBwYXJhbSlcclxuICAgICh3aGVuLW5vdCAoPSBwYXJhbSAobGFzdCBwYXJhbXMpKSAoZW1pdHMgXCIsXCIpKSlcclxuICAgKGVtaXRsbiBcIil7XCIpXHJcbiAgICh3aGVuIHR5cGUgKGVtaXRsbiBcInZhciBzZWxmX18gPSB0aGlzO1wiKSlcclxuICAgKHdoZW4gcmVjdXJzIChlbWl0bG4gXCJ3aGlsZSh0cnVlKXtcIikpXHJcbiAgIChlbWl0cyBleHByKVxyXG4gICAod2hlbiByZWN1cnMgKGVtaXRsbiBcImJyZWFrO1wiKSAoZW1pdGxuIFwifVwiKSlcclxuICAgKGVtaXRsbiBcIn07XCIpXHJcbiAgIChlbWl0bG5cclxuICAgIFwidmFyIFwiXHJcbiAgICBtbmFtZVxyXG4gICAgXCIgPSBmdW5jdGlvbiAoXCJcclxuICAgIChjb21tYS1zZXBcclxuICAgICAoaWYgdmFyaWFkaWMgKGNvbmNhdCAoYnV0bGFzdCBwYXJhbXMpIFsndmFyX2FyZ3NdKSBwYXJhbXMpKVxyXG4gICAgXCIpe1wiKVxyXG4gICAod2hlbiB0eXBlIChlbWl0bG4gXCJ2YXIgc2VsZl9fID0gdGhpcztcIikpXHJcbiAgICh3aGVuXHJcbiAgICB2YXJpYWRpY1xyXG4gICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAgKGVtaXQgKGxhc3QgcGFyYW1zKSlcclxuICAgIChlbWl0bG4gXCIgPSBudWxsO1wiKVxyXG4gICAgKGVtaXRsbiBcImlmIChhcmd1bWVudHMubGVuZ3RoID4gXCIgKGRlYyAoY291bnQgcGFyYW1zKSkgXCIpIHtcIilcclxuICAgIChsZXRcclxuICAgICBbYSAoZW1pdC1hcmd1bWVudHMtdG8tYXJyYXkgKGRlYyAoY291bnQgcGFyYW1zKSkpXVxyXG4gICAgIChlbWl0bG5cclxuICAgICAgXCIgIFwiXHJcbiAgICAgIChsYXN0IHBhcmFtcylcclxuICAgICAgXCIgPSBuZXcgY2xqcy5jb3JlLkluZGV4ZWRTZXEoXCJcclxuICAgICAgYVxyXG4gICAgICBcIiwwLG51bGwpO1wiKSlcclxuICAgIChlbWl0bG4gXCJ9IFwiKSlcclxuICAgKGVtaXRzIFwicmV0dXJuIFwiIGRlbGVnYXRlLW5hbWUgXCIuY2FsbCh0aGlzLFwiKVxyXG4gICAoZG9zZXFcclxuICAgIFtwYXJhbSBwYXJhbXNdXHJcbiAgICAoZW1pdCBwYXJhbSlcclxuICAgICh3aGVuLW5vdCAoPSBwYXJhbSAobGFzdCBwYXJhbXMpKSAoZW1pdHMgXCIsXCIpKSlcclxuICAgKGVtaXRzIFwiKTtcIilcclxuICAgKGVtaXRsbiBcIn07XCIpXHJcbiAgIChlbWl0bG4gbW5hbWUgXCIuY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgPSBcIiBtYXgtZml4ZWQtYXJpdHkgXCI7XCIpXHJcbiAgIChlbWl0cyBtbmFtZSBcIi5jbGpzJGxhbmckYXBwbHlUbyA9IFwiKVxyXG4gICAoZW1pdC1hcHBseS10byAoYXNzb2MgZiA6bmFtZSBuYW1lKSlcclxuICAgKGVtaXRsbiBcIjtcIilcclxuICAgKGVtaXRsblxyXG4gICAgbW5hbWVcclxuICAgIFwiLmNsanMkY29yZSRJRm4kX2ludm9rZSRhcml0eSR2YXJpYWRpYyA9IFwiXHJcbiAgICBkZWxlZ2F0ZS1uYW1lXHJcbiAgICBcIjtcIilcclxuICAgKGVtaXRsbiBcInJldHVybiBcIiBtbmFtZSBcIjtcIilcclxuICAgKGVtaXRsbiBcIn0pKClcIikpKSlcclxuIn0gezpzeW0ganMtcmVzZXJ2ZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGpzLXJlc2VydmVkIGFuYS9qcy1yZXNlcnZlZClcclxuIn0gezpzeW0gKnJlY29tcGlsZWQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcmVjb21waWxlZCogbmlsKVxyXG4ifSB7OnN5bSBlbWl0cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tdIFthXSBbYSBiXSBbYSBiIGNdIFthIGIgYyBkXSBbYSBiIGMgZCBlXSBbYSBiIGMgZCBlICYgeHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0c1xyXG4gKFtdKVxyXG4gKFthXVxyXG4gIChjb25kXHJcbiAgIChuaWw/IGEpXHJcbiAgIG5pbFxyXG4gICAjPyg6Y2xqIChtYXA/IGEpIDpjbGpzIChhbmEvY2xqcy1tYXA/IGEpKVxyXG4gICAoZW1pdCBhKVxyXG4gICAjPyg6Y2xqIChzZXE/IGEpIDpjbGpzIChhbmEvY2xqcy1zZXE/IGEpKVxyXG4gICAoYXBwbHkgZW1pdHMgYSlcclxuICAgIz8oOmNsaiAoZm4/IGEpIDpjbGpzIChnb29nL2lzRnVuY3Rpb24gYSkpXHJcbiAgIChhKVxyXG4gICA6ZWxzZVxyXG4gICAobGV0XHJcbiAgICBbcyAoY29uZC0+IGEgKG5vdCAoc3RyaW5nPyBhKSkgLnRvU3RyaW5nKV1cclxuICAgICM/KDpjbGogKHdoZW4tc29tZSBbZ2VuLWNvbCAqc291cmNlLW1hcC1kYXRhLWdlbi1jb2wqXSAoLmFkZEFuZEdldCBnZW4tY29sICgubGVuZ3RoIHMpKSkgOmNsanMgKHdoZW4tc29tZSBbc20tZGF0YSAqc291cmNlLW1hcC1kYXRhKl0gKHN3YXAhIHNtLWRhdGEgdXBkYXRlIDpnZW4tY29sIChmbiogW3AxX180ODY0NyNdICgrIHAxX180ODY0NyMgKC4tbGVuZ3RoIHMpKSkpKSlcclxuICAgICM/KDpjbGogKC53cml0ZSAqb3V0KiBzKSA6Y2xqcyAocHJpbnQgcykpKSlcclxuICBuaWwpXHJcbiAoW2EgYl0gKGVtaXRzIGEpIChlbWl0cyBiKSlcclxuIChbYSBiIGNdIChlbWl0cyBhKSAoZW1pdHMgYikgKGVtaXRzIGMpKVxyXG4gKFthIGIgYyBkXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChlbWl0cyBjKSAoZW1pdHMgZCkpXHJcbiAoW2EgYiBjIGQgZV0gKGVtaXRzIGEpIChlbWl0cyBiKSAoZW1pdHMgYykgKGVtaXRzIGQpIChlbWl0cyBlKSlcclxuIChbYSBiIGMgZCBlICYgeHNdXHJcbiAgKGVtaXRzIGEpXHJcbiAgKGVtaXRzIGIpXHJcbiAgKGVtaXRzIGMpXHJcbiAgKGVtaXRzIGQpXHJcbiAgKGVtaXRzIGUpXHJcbiAgKGRvc2VxIFt4IHhzXSAoZW1pdHMgeCkpKSlcclxuIn0gezpzeW0gZW1pdC1jb25zdGFudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1jb25zdGFudFxyXG4gW3ZdXHJcbiAobGV0XHJcbiAgW20gKGFuYS9lbGlkZS1pcnJlbGV2YW50LW1ldGEgKG1ldGEgdikpXVxyXG4gIChpZlxyXG4gICAoc29tZT8gKHNlcSBtKSlcclxuICAgKGVtaXQtd2l0aC1tZXRhXHJcbiAgICAoZm4qIFtdIChlbWl0LWNvbnN0YW50LW5vLW1ldGEgdikpXHJcbiAgICAoZm4qIFtdIChlbWl0LWNvbnN0YW50LW5vLW1ldGEgbSkpKVxyXG4gICAoZW1pdC1jb25zdGFudC1uby1tZXRhIHYpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtZG90LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbdGFyZ2V0IGZpZWxkIG1ldGhvZCBhcmdzIGVudl19XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1kb3RcclxuIFt7OmtleXMgW3RhcmdldCBmaWVsZCBtZXRob2QgYXJncyBlbnZdfV1cclxuIChlbWl0LXdyYXBcclxuICBlbnZcclxuICAoaWZcclxuICAgZmllbGRcclxuICAgKGVtaXRzIHRhcmdldCBcIi5cIiAobXVuZ2UgZmllbGQgI3t9KSlcclxuICAgKGVtaXRzIHRhcmdldCBcIi5cIiAobXVuZ2UgbWV0aG9kICN7fSkgXCIoXCIgKGNvbW1hLXNlcCBhcmdzKSBcIilcIikpKSlcclxuIn0gezpzeW0gZW1pdC1jb25zdGFudHMtdGFibGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGFibGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWNvbnN0YW50cy10YWJsZVxyXG4gW3RhYmxlXVxyXG4gKGVtaXRsbiBcImdvb2cucHJvdmlkZSgnXCIgKG11bmdlIGFuYS9jb25zdGFudHMtbnMtc3ltKSBcIicpO1wiKVxyXG4gKGVtaXRsbiBcImdvb2cucmVxdWlyZSgnY2xqcy5jb3JlJyk7XCIpXHJcbiAoZG9zZXFcclxuICBbW3N5bSB2YWx1ZV0gdGFibGVdXHJcbiAgKGxldFxyXG4gICBbbnMgKG5hbWVzcGFjZSBzeW0pIG5hbWUgKG5hbWUgc3ltKV1cclxuICAgKGVtaXRzIFwiY2xqcy5jb3JlLlwiIHZhbHVlIFwiID0gXCIpXHJcbiAgIChjb25kXHJcbiAgICAoa2V5d29yZD8gc3ltKVxyXG4gICAgKGVtaXRzLWtleXdvcmQgc3ltKVxyXG4gICAgKHN5bWJvbD8gc3ltKVxyXG4gICAgKGVtaXRzLXN5bWJvbCBzeW0pXHJcbiAgICA6ZWxzZVxyXG4gICAgKHRocm93XHJcbiAgICAgKGV4LWluZm9cclxuICAgICAgKHN0ciBcIkNhbm5vdCBlbWl0IGNvbnN0YW50IGZvciB0eXBlIFwiICh0eXBlIHN5bSkpXHJcbiAgICAgIHs6ZXJyb3IgOmludmFsaWQtY29uc3RhbnQtdHlwZSxcclxuICAgICAgIDpjbG9qdXJlLmVycm9yL3BoYXNlIDpjb21waWxhdGlvbn0pKSlcclxuICAgKGVtaXRzIFwiO1xcblwiKSkpKVxyXG4ifSB7OnN5bSBlbWl0LWxpc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXMgY29tbWEtc2VwXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1saXN0XHJcbiBbaXRlbXMgY29tbWEtc2VwXVxyXG4gKGlmXHJcbiAgKGVtcHR5PyBpdGVtcylcclxuICAoZW1pdHMgXCJjbGpzLmNvcmUuTGlzdC5FTVBUWVwiKVxyXG4gIChlbWl0cyBcImNsanMuY29yZS5saXN0KFwiIChjb21tYS1zZXAgaXRlbXMpIFwiKVwiKSkpXHJcbiJ9IHs6c3ltIGdldC1maXJzdC1ucy1zZWdtZW50LCA6bWV0YSB7OmRvYyAiR2V0cyB0aGUgcGFydCB1cCB0byB0aGUgZmlyc3QgYC5gIG9mIGEgbmFtZXNwYWNlLlxuICAgUmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nIGZvciBuaWwuXG4gICBSZXR1cm5zIHRoZSBlbnRpcmUgc3RyaW5nIGlmIG5vIGAuYCBpbiBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1maXJzdC1ucy1zZWdtZW50XHJcbiBcIkdldHMgdGhlIHBhcnQgdXAgdG8gdGhlIGZpcnN0IGAuYCBvZiBhIG5hbWVzcGFjZS5cXG4gICBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgZm9yIG5pbC5cXG4gICBSZXR1cm5zIHRoZSBlbnRpcmUgc3RyaW5nIGlmIG5vIGAuYCBpbiBuYW1lc3BhY2VcIlxyXG4gW25zXVxyXG4gKGxldFxyXG4gIFtucyAoc3RyIG5zKSBpZHggKC5pbmRleE9mIG5zIFwiLlwiKV1cclxuICAoaWYgKD09IC0xIGlkeCkgbnMgKHN1YnMgbnMgMCBpZHgpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtZm4tcGFyYW1zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BhcmFtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtZm4tcGFyYW1zXHJcbiBbcGFyYW1zXVxyXG4gKGRvc2VxXHJcbiAgW3BhcmFtIHBhcmFtc11cclxuICAoZW1pdCBwYXJhbSlcclxuICAod2hlbi1ub3QgKD0gcGFyYW0gKGxhc3QgcGFyYW1zKSkgKGVtaXRzIFwiLFwiKSkpKVxyXG4ifSB7OnN5bSBtdW5nZS1yZXNlcnZlZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZXNlcnZlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlLXJlc2VydmVkXHJcbiBbcmVzZXJ2ZWRdXHJcbiAoZm4gW3NdIChpZi1ub3QgKG5pbD8gKGdldCByZXNlcnZlZCBzKSkgKHN0ciBzIFwiJFwiKSBzKSkpXHJcbiJ9IHs6c3ltIGZuLXNlbGYtbmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW25hbWUgaW5mb10sIDphcyBuYW1lLXZhcn1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbi1zZWxmLW5hbWVcclxuIFt7OmtleXMgW25hbWUgaW5mb10sIDphcyBuYW1lLXZhcn1dXHJcbiAobGV0XHJcbiAgW25hbWVcclxuICAgKHN0cmluZy9yZXBsYWNlIChzdHIgbmFtZSkgXCIuLlwiIFwiX0RPVF9fRE9UX1wiKVxyXG4gICB7OmtleXMgW25zIGZuLXNjb3BlXX1cclxuICAgaW5mb1xyXG4gICBzY29wZWQtbmFtZVxyXG4gICAoYXBwbHlcclxuICAgIHN0clxyXG4gICAgKGludGVycG9zZSBcIl8kX1wiIChjb25jYXQgKG1hcCAoY29tcCBzdHIgOm5hbWUpIGZuLXNjb3BlKSBbbmFtZV0pKSldXHJcbiAgKHN5bWJvbFxyXG4gICAobXVuZ2UgKHN0ciAoc3RyaW5nL3JlcGxhY2UgKHN0ciBucykgXCIuXCIgXCIkXCIpIFwiJFwiIHNjb3BlZC1uYW1lKSkpKSlcclxuIn0gezpzeW0gbG9hZC1saWJzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2xpYnMgc2VlbiByZWxvYWRzIGRlcHMgbnMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvYWQtbGlic1xyXG4gW2xpYnMgc2VlbiByZWxvYWRzIGRlcHMgbnMtbmFtZV1cclxuIChsZXRcclxuICBbezprZXlzIFtvcHRpb25zIGpzLWRlcGVuZGVuY3ktaW5kZXhdfVxyXG4gICBAZW52Lypjb21waWxlcipcclxuICAgezprZXlzIFt0YXJnZXQgbm9kZWpzLXJ0IG9wdGltaXphdGlvbnNdfVxyXG4gICBvcHRpb25zXHJcbiAgIGxvYWRlZC1saWJzXHJcbiAgIChtdW5nZSAnY2xqcy5jb3JlLipsb2FkZWQtbGlicyopXHJcbiAgIGxvYWRlZC1saWJzLXRlbXBcclxuICAgKG11bmdlIChnZW5zeW0gJ2NsanMuY29yZS4qbG9hZGVkLWxpYnMqKSlcclxuICAgW25vZGUtbGlicyBsaWJzLXRvLWxvYWRdXHJcbiAgIChsZXRcclxuICAgIFtsaWJzIChyZW1vdmUgKHNldCAodmFscyBzZWVuKSkgKGZpbHRlciAoc2V0ICh2YWxzIGxpYnMpKSBkZXBzKSldXHJcbiAgICAoaWZcclxuICAgICAoPSA6bm9kZWpzIHRhcmdldClcclxuICAgICAobGV0XHJcbiAgICAgIFt7bm9kZS1saWJzIHRydWUsIGxpYnMtdG8tbG9hZCBmYWxzZX1cclxuICAgICAgIChncm91cC1ieSBhbmEvbm9kZS1tb2R1bGUtZGVwPyBsaWJzKV1cclxuICAgICAgW25vZGUtbGlicyBsaWJzLXRvLWxvYWRdKVxyXG4gICAgIFtuaWwgbGlic10pKVxyXG4gICBnbG9iYWwtZXhwb3J0cy1saWJzXHJcbiAgIChmaWx0ZXIgYW5hL2RlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/IGxpYnMtdG8tbG9hZCldXHJcbiAgKHdoZW5cclxuICAgKC0+IGxpYnMgbWV0YSA6cmVsb2FkLWFsbClcclxuICAgKGVtaXRsblxyXG4gICAgXCJpZighQ09NUElMRUQpIFwiXHJcbiAgICBsb2FkZWQtbGlicy10ZW1wXHJcbiAgICBcIiA9IFwiXHJcbiAgICBsb2FkZWQtbGlic1xyXG4gICAgXCIgfHwgY2xqcy5jb3JlLnNldChbXFxcImNsanMuY29yZVxcXCJdKTtcIilcclxuICAgKGVtaXRsblxyXG4gICAgXCJpZighQ09NUElMRUQpIFwiXHJcbiAgICBsb2FkZWQtbGlic1xyXG4gICAgXCIgPSBjbGpzLmNvcmUuc2V0KFtcXFwiY2xqcy5jb3JlXFxcIl0pO1wiKSlcclxuICAoZG9zZXFcclxuICAgW2xpYiBsaWJzLXRvLWxvYWRdXHJcbiAgIChjb25kXHJcbiAgICAjP0AoOmNsaiBbKGFuYS9mb3JlaWduLWRlcD8gbGliKSAod2hlbiAoYW5kICg9IDpub25lIG9wdGltaXphdGlvbnMpIChub3QgKGNvbnRhaW5zPyBvcHRpb25zIDptb2R1bGVzKSkpIChpZiBub2RlanMtcnQgKGxldCBbaWpzIChnZXQganMtZGVwZW5kZW5jeS1pbmRleCAobmFtZSBsaWIpKV0gKGVtaXRsbiBcImNsanMuY29yZS5sb2FkX2ZpbGUoXCIgKC0+IChpby9maWxlICh1dGlsL291dHB1dC1kaXJlY3Rvcnkgb3B0aW9ucykgKG9yIChkZXBzLy1yZWxhdGl2ZS1wYXRoIGlqcykgKHV0aWwvcmVsYXRpdmUtbmFtZSAoOnVybCBpanMpKSkpIHN0ciBlc2NhcGUtc3RyaW5nIHdyYXAtaW4tZG91YmxlLXF1b3RlcykgXCIpO1wiKSkgKGVtaXRsbiBcImdvb2cucmVxdWlyZSgnXCIgKG11bmdlIGxpYikgXCInKTtcIikpKV0gOmNsanMgWyhhbmQgKGFuYS9mb3JlaWduLWRlcD8gbGliKSAobm90IChrZXl3b3JkLWlkZW50aWNhbD8gb3B0aW1pemF0aW9ucyA6bm9uZSkpKSBuaWxdKVxyXG4gICAgKG9yICgtPiBsaWJzIG1ldGEgOnJlbG9hZCkgKD0gKGdldCByZWxvYWRzIGxpYikgOnJlbG9hZCkpXHJcbiAgICAoZW1pdGxuIFwiZ29vZy5yZXF1aXJlKCdcIiAobXVuZ2UgbGliKSBcIicsICdyZWxvYWQnKTtcIilcclxuICAgIChvciAoLT4gbGlicyBtZXRhIDpyZWxvYWQtYWxsKSAoPSAoZ2V0IHJlbG9hZHMgbGliKSA6cmVsb2FkLWFsbCkpXHJcbiAgICAoZW1pdGxuIFwiZ29vZy5yZXF1aXJlKCdcIiAobXVuZ2UgbGliKSBcIicsICdyZWxvYWQtYWxsJyk7XCIpXHJcbiAgICA6ZWxzZVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKD0gbGliICdnb29nKVxyXG4gICAgIChlbWl0bG4gXCJnb29nLnJlcXVpcmUoJ1wiIChtdW5nZSBsaWIpIFwiJyk7XCIpKSkpXHJcbiAgKGRvc2VxXHJcbiAgIFtsaWIgbm9kZS1saWJzXVxyXG4gICAoZW1pdGxuXHJcbiAgICAobXVuZ2UgbnMtbmFtZSlcclxuICAgIFwiLlwiXHJcbiAgICAoYW5hL211bmdlLW5vZGUtbGliIGxpYilcclxuICAgIFwiID0gcmVxdWlyZSgnXCJcclxuICAgIGxpYlxyXG4gICAgXCInKTtcIikpXHJcbiAgKGRvc2VxXHJcbiAgIFtsaWIgZ2xvYmFsLWV4cG9ydHMtbGlic11cclxuICAgKGxldFxyXG4gICAgW3s6a2V5cyBbZ2xvYmFsLWV4cG9ydHNdfSAoZ2V0IGpzLWRlcGVuZGVuY3ktaW5kZXggKG5hbWUgbGliKSldXHJcbiAgICAoZW1pdC1nbG9iYWwtZXhwb3J0IG5zLW5hbWUgZ2xvYmFsLWV4cG9ydHMgbGliKSkpXHJcbiAgKHdoZW5cclxuICAgKC0+IGxpYnMgbWV0YSA6cmVsb2FkLWFsbClcclxuICAgKGVtaXRsblxyXG4gICAgXCJpZighQ09NUElMRUQpIFwiXHJcbiAgICBsb2FkZWQtbGlic1xyXG4gICAgXCIgPSBjbGpzLmNvcmUuaW50byhcIlxyXG4gICAgbG9hZGVkLWxpYnMtdGVtcFxyXG4gICAgXCIsIFwiXHJcbiAgICBsb2FkZWQtbGlic1xyXG4gICAgXCIpO1wiKSkpKVxyXG4ifSB7OnN5bSBtdW5nZS1wYXJhbS1yZXR1cm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZS1wYXJhbS1yZXR1cm5cclxuIFtlbnYgbGluZV1cclxuIChjb25kXHJcbiAgKHJlLWZpbmQgI1wiQHBhcmFtXCIgbGluZSlcclxuICAobGV0XHJcbiAgIFtbcCB0cyBuICYgeHNdXHJcbiAgICAobWFwIHN0cmluZy90cmltIChzdHJpbmcvc3BsaXQgKHN0cmluZy90cmltIGxpbmUpICNcIiBcIikpXVxyXG4gICAoaWZcclxuICAgIChhbmRcclxuICAgICAoPSBcIkBwYXJhbVwiIHApXHJcbiAgICAgdHNcclxuICAgICAjPyg6Y2xqICguc3RhcnRzV2l0aCB0cyBcIntcIikgOmNsanMgKGdzdHJpbmcvc3RhcnRzV2l0aCB0cyBcIntcIikpKVxyXG4gICAgKHN0cmluZy9qb2luIFwiIFwiIChjb25jYXQgW3AgKHJlc29sdmUtdHlwZXMgZW52IHRzKSAobXVuZ2UgbildIHhzKSlcclxuICAgIGxpbmUpKVxyXG4gIChyZS1maW5kICNcIkByZXR1cm5cIiBsaW5lKVxyXG4gIChsZXRcclxuICAgW1twIHRzICYgeHNdXHJcbiAgICAobWFwIHN0cmluZy90cmltIChzdHJpbmcvc3BsaXQgKHN0cmluZy90cmltIGxpbmUpICNcIiBcIikpXVxyXG4gICAoaWZcclxuICAgIChhbmRcclxuICAgICAoPSBcIkByZXR1cm5cIiBwKVxyXG4gICAgIHRzXHJcbiAgICAgIz8oOmNsaiAoLnN0YXJ0c1dpdGggdHMgXCJ7XCIpIDpjbGpzIChnc3RyaW5nL3N0YXJ0c1dpdGggdHMgXCJ7XCIpKSlcclxuICAgIChzdHJpbmcvam9pbiBcIiBcIiAoY29uY2F0IFtwIChyZXNvbHZlLXR5cGVzIGVudiB0cyldIHhzKSlcclxuICAgIGxpbmUpKVxyXG4gIDplbHNlXHJcbiAgbGluZSkpXHJcbiJ9IHs6c3ltIGVtaXQtanMtYXJyYXksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXMgY29tbWEtc2VwXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1qcy1hcnJheVxyXG4gW2l0ZW1zIGNvbW1hLXNlcF1cclxuIChlbWl0cyBcIltcIiAoY29tbWEtc2VwIGl0ZW1zKSBcIl1cIikpXHJcbiJ9IHs6c3ltIGZpbmQtbnMtc3RhcnRzLXdpdGgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmVlZGxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1ucy1zdGFydHMtd2l0aFxyXG4gW25lZWRsZV1cclxuIChyZWR1Y2Uta3ZcclxuICAoZm5cclxuICAgW3hzIG5zIF9dXHJcbiAgICh3aGVuICg9IG5lZWRsZSAoZ2V0LWZpcnN0LW5zLXNlZ21lbnQgbnMpKSAocmVkdWNlZCBuZWVkbGUpKSlcclxuICBuaWxcclxuICAoOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBAZW52Lypjb21waWxlciopKSlcclxuIn0gezpzeW0gY2hlY2tpbmctdHlwZXM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNraW5nLXR5cGVzP1xyXG4gW11cclxuICgjezp3YXJuaW5nIDplcnJvcn1cclxuICAoZ2V0LWluIEBlbnYvKmNvbXBpbGVyKiBbOm9wdGlvbnMgOmNsb3N1cmUtd2FybmluZ3MgOmNoZWNrLXR5cGVzXSkpKVxyXG4ifSB7OnN5bSBlbWl0LWZuLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7ZXhwciA6Ym9keSwgOmtleXMgW3R5cGUgbmFtZSBwYXJhbXMgZW52IHJlY3Vyc119XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1mbi1tZXRob2RcclxuIFt7ZXhwciA6Ym9keSwgOmtleXMgW3R5cGUgbmFtZSBwYXJhbXMgZW52IHJlY3Vyc119XVxyXG4gKGVtaXQtd3JhcFxyXG4gIGVudlxyXG4gIChlbWl0cyBcIihmdW5jdGlvbiBcIiAobXVuZ2UgbmFtZSkgXCIoXCIpXHJcbiAgKGVtaXQtZm4tcGFyYW1zIHBhcmFtcylcclxuICAoZW1pdGxuIFwiKXtcIilcclxuICAod2hlbiB0eXBlIChlbWl0bG4gXCJ2YXIgc2VsZl9fID0gdGhpcztcIikpXHJcbiAgKHdoZW4gcmVjdXJzIChlbWl0bG4gXCJ3aGlsZSh0cnVlKXtcIikpXHJcbiAgKGVtaXRzIGV4cHIpXHJcbiAgKHdoZW4gcmVjdXJzIChlbWl0bG4gXCJicmVhaztcIikgKGVtaXRsbiBcIn1cIikpXHJcbiAgKGVtaXRzIFwifSlcIikpKVxyXG4ifSB7OnN5bSBlbWl0LWNvbW1lbnQsIDptZXRhIHs6ZG9jICJFbWl0IGEgbmljZWx5IGZvcm1hdHRlZCBjb21tZW50IHN0cmluZy4iLCA6YXJnbGlzdHMgW1tkb2MganNkb2NdIFtlbnYgZG9jIGpzZG9jXV19LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1jb21tZW50XHJcbiBcIkVtaXQgYSBuaWNlbHkgZm9ybWF0dGVkIGNvbW1lbnQgc3RyaW5nLlwiXHJcbiAoW2RvYyBqc2RvY10gKGVtaXQtY29tbWVudCBuaWwgZG9jIGpzZG9jKSlcclxuIChbZW52IGRvYyBqc2RvY11cclxuICAobGV0XHJcbiAgIFtkb2NzXHJcbiAgICAod2hlbiBkb2MgW2RvY10pXHJcbiAgICBkb2NzXHJcbiAgICAoaWYganNkb2MgKGNvbmNhdCBkb2NzIGpzZG9jKSBkb2NzKVxyXG4gICAgZG9jc1xyXG4gICAgKHJlbW92ZSBuaWw/IGRvY3MpXVxyXG4gICAobGV0Zm5cclxuICAgIFsocHJpbnQtY29tbWVudC1saW5lc1xyXG4gICAgICBbZV1cclxuICAgICAgKGxldFxyXG4gICAgICAgW1t4ICYgeXNdXHJcbiAgICAgICAgKG1hcFxyXG4gICAgICAgICAoZm4qXHJcbiAgICAgICAgICBbcDFfXzQ4NjU0I11cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChjaGVja2luZy10eXBlcz8pXHJcbiAgICAgICAgICAgKG11bmdlLXBhcmFtLXJldHVybiBlbnYgcDFfXzQ4NjU0IylcclxuICAgICAgICAgICBwMV9fNDg2NTQjKSlcclxuICAgICAgICAgKHN0cmluZy9zcGxpdC1saW5lcyBlKSldXHJcbiAgICAgICAoZW1pdGxuIFwiICogXCIgKHN0cmluZy9yZXBsYWNlIHggXCIqL1wiIFwiKiAvXCIpKVxyXG4gICAgICAgKGRvc2VxXHJcbiAgICAgICAgW25leHQtbGluZSB5c11cclxuICAgICAgICAoZW1pdGxuXHJcbiAgICAgICAgIFwiICogXCJcclxuICAgICAgICAgKC0+XHJcbiAgICAgICAgICBuZXh0LWxpbmVcclxuICAgICAgICAgIChzdHJpbmcvcmVwbGFjZSAjXCJeICAgXCIgXCJcIilcclxuICAgICAgICAgIChzdHJpbmcvcmVwbGFjZSBcIiovXCIgXCIqIC9cIikpKSkpKV1cclxuICAgICh3aGVuXHJcbiAgICAgKHNlcSBkb2NzKVxyXG4gICAgIChlbWl0bG4gXCIvKipcIilcclxuICAgICAoZG9zZXEgW2UgZG9jc10gKHdoZW4gZSAocHJpbnQtY29tbWVudC1saW5lcyBlKSkpXHJcbiAgICAgKGVtaXRsbiBcIiAqL1wiKSkpKSkpXHJcbiJ9IHs6c3ltIGhhc2gtc2NvcGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtc2NvcGVcclxuIFtzXVxyXG4gKGhhc2gtY29tYmluZVxyXG4gICM/KDpjbGogKGhhc2ggKDpuYW1lIHMpKSA6Y2xqcyAoLWhhc2ggKDpuYW1lIHMpKSlcclxuICAoc2hhZG93LWRlcHRoIHMpKSlcclxuIn0gezpzeW0gZW1pdC1hcHBseS10bywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW25hbWUgcGFyYW1zIGVudl19XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1hcHBseS10b1xyXG4gW3s6a2V5cyBbbmFtZSBwYXJhbXMgZW52XX1dXHJcbiAobGV0XHJcbiAgW2FyZ2xpc3RcclxuICAgKGdlbnN5bSBcImFyZ2xpc3RfX1wiKVxyXG4gICBkZWxlZ2F0ZS1uYW1lXHJcbiAgIChzdHIgKG11bmdlIG5hbWUpIFwiX19kZWxlZ2F0ZVwiKV1cclxuICAoZW1pdGxuIFwiKGZ1bmN0aW9uIChcIiBhcmdsaXN0IFwiKXtcIilcclxuICAoZG9zZXFcclxuICAgW1tpIHBhcmFtXSAobWFwLWluZGV4ZWQgdmVjdG9yIChkcm9wLWxhc3QgMiBwYXJhbXMpKV1cclxuICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAoZW1pdCBwYXJhbSlcclxuICAgKGVtaXRzIFwiID0gY2xqcy5jb3JlLmZpcnN0KFwiKVxyXG4gICAoZW1pdGxuIGFyZ2xpc3QgXCIpO1wiKVxyXG4gICAoZW1pdGxuIGFyZ2xpc3QgXCIgPSBjbGpzLmNvcmUubmV4dChcIiBhcmdsaXN0IFwiKTtcIikpXHJcbiAgKGlmXHJcbiAgICg8IDEgKGNvdW50IHBhcmFtcykpXHJcbiAgIChkb1xyXG4gICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAgKGVtaXQgKGxhc3QgKGJ1dGxhc3QgcGFyYW1zKSkpXHJcbiAgICAoZW1pdGxuIFwiID0gY2xqcy5jb3JlLmZpcnN0KFwiIGFyZ2xpc3QgXCIpO1wiKVxyXG4gICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAgKGVtaXQgKGxhc3QgcGFyYW1zKSlcclxuICAgIChlbWl0bG4gXCIgPSBjbGpzLmNvcmUucmVzdChcIiBhcmdsaXN0IFwiKTtcIilcclxuICAgIChlbWl0cyBcInJldHVybiBcIiBkZWxlZ2F0ZS1uYW1lIFwiKFwiKVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW3BhcmFtIHBhcmFtc11cclxuICAgICAoZW1pdCBwYXJhbSlcclxuICAgICAod2hlbi1ub3QgKD0gcGFyYW0gKGxhc3QgcGFyYW1zKSkgKGVtaXRzIFwiLFwiKSkpXHJcbiAgICAoZW1pdGxuIFwiKTtcIikpXHJcbiAgIChkb1xyXG4gICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAgKGVtaXQgKGxhc3QgcGFyYW1zKSlcclxuICAgIChlbWl0bG4gXCIgPSBjbGpzLmNvcmUuc2VxKFwiIGFyZ2xpc3QgXCIpO1wiKVxyXG4gICAgKGVtaXRzIFwicmV0dXJuIFwiIGRlbGVnYXRlLW5hbWUgXCIoXCIpXHJcbiAgICAoZG9zZXFcclxuICAgICBbcGFyYW0gcGFyYW1zXVxyXG4gICAgIChlbWl0IHBhcmFtKVxyXG4gICAgICh3aGVuLW5vdCAoPSBwYXJhbSAobGFzdCBwYXJhbXMpKSAoZW1pdHMgXCIsXCIpKSlcclxuICAgIChlbWl0bG4gXCIpO1wiKSkpXHJcbiAgKGVtaXRzIFwifSlcIikpKVxyXG4ifSB7OnN5bSBlbWl0cy1zeW1ib2wsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdHMtc3ltYm9sXHJcbiBbc3ltXVxyXG4gKGxldFxyXG4gIFtuc1xyXG4gICAobmFtZXNwYWNlIHN5bSlcclxuICAgbmFtZVxyXG4gICAobmFtZSBzeW0pXHJcbiAgIHN5bXN0clxyXG4gICAoaWYtbm90IChuaWw/IG5zKSAoc3RyIG5zIFwiL1wiIG5hbWUpIG5hbWUpXVxyXG4gIChlbWl0cyBcIm5ldyBjbGpzLmNvcmUuU3ltYm9sKFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IG5zKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCBuYW1lKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCBzeW1zdHIpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IChoYXNoIHN5bSkpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IG5pbClcclxuICAoZW1pdHMgXCIpXCIpKSlcclxuIn0gezpzeW0gZmFsc2V5LWNvbnN0YW50PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHByXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmFsc2V5LWNvbnN0YW50P1xyXG4gW2V4cHJdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbb3AgZm9ybSBjb25zdC1leHByXX0gKGFuYS91bndyYXAtcXVvdGUgZXhwcildXHJcbiAgKG9yXHJcbiAgIChhbmQgKD0gb3AgOmNvbnN0KSAob3IgKGZhbHNlPyBmb3JtKSAobmlsPyBmb3JtKSkpXHJcbiAgIChhbmQgKHNvbWU/IGNvbnN0LWV4cHIpIChmYWxzZXktY29uc3RhbnQ/IGNvbnN0LWV4cHIpKSkpKVxyXG4ifSB7OnN5bSBlbWl0LWNvbnN0YW50cy1jb21tYS1zZXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWNvbnN0YW50cy1jb21tYS1zZXBcclxuIFtjc11cclxuIChmblxyXG4gIFtdXHJcbiAgKGRvYWxsXHJcbiAgIChtYXAtaW5kZXhlZFxyXG4gICAgKGZuIFtpIG1dIChpZiAoZXZlbj8gaSkgKGVtaXQtY29uc3RhbnQgbSkgKGVtaXRzIG0pKSlcclxuICAgIChjb21tYS1zZXAgY3MpKSkpKVxyXG4ifSB7OnN5bSAqc291cmNlLW1hcC1kYXRhKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnNvdXJjZS1tYXAtZGF0YSogbmlsKVxyXG4ifSB7OnN5bSBlbWl0LXJlY29yZC12YWx1ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucyBuYW1lIGl0ZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1yZWNvcmQtdmFsdWVcclxuIFtucyBuYW1lIGl0ZW1zXVxyXG4gKGVtaXRzIG5zIFwiLm1hcF9fR1RfXCIgbmFtZSBcIihcIiBpdGVtcyBcIilcIikpXHJcbiJ9IHs6c3ltIGVtaXQtdmFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbaW5mbyBlbnYgZm9ybV0sIDphcyBhc3R9XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC12YXJcclxuIFt7OmtleXMgW2luZm8gZW52IGZvcm1dLCA6YXMgYXN0fV1cclxuIChpZi1sZXRcclxuICBbY29uc3QtZXhwciAoOmNvbnN0LWV4cHIgYXN0KV1cclxuICAoZW1pdCAoYXNzb2MgY29uc3QtZXhwciA6ZW52IGVudikpXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtvcHRpb25zXSwgOmFzIGNlbnZ9XHJcbiAgICBAZW52Lypjb21waWxlcipcclxuICAgIHZhci1uYW1lXHJcbiAgICAoOm5hbWUgaW5mbylcclxuICAgIGluZm9cclxuICAgIChpZlxyXG4gICAgICg9IChuYW1lc3BhY2UgdmFyLW5hbWUpIFwianNcIilcclxuICAgICAobGV0XHJcbiAgICAgIFtqcy1tb2R1bGUtbmFtZVxyXG4gICAgICAgKGdldC1pbiBjZW52IFs6anMtbW9kdWxlLWluZGV4IChuYW1lIHZhci1uYW1lKSA6bmFtZV0pXVxyXG4gICAgICAob3IganMtbW9kdWxlLW5hbWUgKG5hbWUgdmFyLW5hbWUpKSlcclxuICAgICBpbmZvKV1cclxuICAgKGlmXHJcbiAgICAoOmJpbmRpbmctZm9ybT8gYXN0KVxyXG4gICAgKGVtaXRzIChtdW5nZSBhc3QpKVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKD0gOnN0YXRlbWVudCAoOmNvbnRleHQgZW52KSlcclxuICAgICAobGV0XHJcbiAgICAgIFtyZXNlcnZlZFxyXG4gICAgICAgKGNvbmQtPlxyXG4gICAgICAgIGpzLXJlc2VydmVkXHJcbiAgICAgICAgKGFuZFxyXG4gICAgICAgICAoZXM1Pj0gKDpsYW5ndWFnZS1vdXQgb3B0aW9ucykpXHJcbiAgICAgICAgIChzb21lPyAobmFtZXNwYWNlIHZhci1uYW1lKSkpXHJcbiAgICAgICAgKHNldC9kaWZmZXJlbmNlIGFuYS9lczUtYWxsb3dlZCkpXHJcbiAgICAgICBqcy1tb2R1bGVcclxuICAgICAgIChnZXQtaW5cclxuICAgICAgICBjZW52XHJcbiAgICAgICAgWzpqcy1uYW1lc3BhY2VzIChvciAobmFtZXNwYWNlIHZhci1uYW1lKSAobmFtZSB2YXItbmFtZSkpXSlcclxuICAgICAgIGluZm9cclxuICAgICAgIChjb25kLT4gaW5mbyAobm90PSBmb3JtICdqcy8tSW5maW5pdHkpIChtdW5nZSByZXNlcnZlZCkpXVxyXG4gICAgICAoZW1pdC13cmFwXHJcbiAgICAgICBlbnZcclxuICAgICAgIChjYXNlXHJcbiAgICAgICAgKDptb2R1bGUtdHlwZSBqcy1tb2R1bGUpXHJcbiAgICAgICAgOmNvbW1vbmpzXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChuYW1lc3BhY2UgdmFyLW5hbWUpXHJcbiAgICAgICAgIChlbWl0c1xyXG4gICAgICAgICAgKG11bmdlIChuYW1lc3BhY2UgdmFyLW5hbWUpIHJlc2VydmVkKVxyXG4gICAgICAgICAgXCJbXFxcImRlZmF1bHRcXFwiXS5cIlxyXG4gICAgICAgICAgKG11bmdlIChuYW1lIHZhci1uYW1lKSByZXNlcnZlZCkpXHJcbiAgICAgICAgIChlbWl0cyAobXVuZ2UgKG5hbWUgdmFyLW5hbWUpIHJlc2VydmVkKSBcIltcXFwiZGVmYXVsdFxcXCJdXCIpKVxyXG4gICAgICAgIDplczZcclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGFuZCAobmFtZXNwYWNlIHZhci1uYW1lKSAoPSBcImRlZmF1bHRcIiAobmFtZSB2YXItbmFtZSkpKVxyXG4gICAgICAgICAoZW1pdHMgKG11bmdlIChuYW1lc3BhY2UgdmFyLW5hbWUpIHJlc2VydmVkKSBcIltcXFwiZGVmYXVsdFxcXCJdXCIpXHJcbiAgICAgICAgIChlbWl0cyBpbmZvKSlcclxuICAgICAgICAoZW1pdHMgaW5mbykpKSkpKSkpKVxyXG4ifSB7OnN5bSBtYXBwZWQtdHlwZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG1hcHBlZC10eXBlcyB7XCJuaWxcIiBcIm51bGxcIn0pXHJcbiJ9IHs6c3ltIHJlc29sdmUtdHlwZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS10eXBlc1xyXG4gW2VudiB0c11cclxuIChsZXRcclxuICBbdHNcclxuICAgKC0+IHRzIHN0cmluZy90cmltIChzdWJzIDEgKGRlYyAoY291bnQgdHMpKSkpXHJcbiAgIHhzXHJcbiAgIChzdHJpbmcvc3BsaXQgdHMgI1wiXFx8XCIpXVxyXG4gIChzdHJcclxuICAgXCJ7XCJcclxuICAgKHN0cmluZy9qb2luXHJcbiAgICBcInxcIlxyXG4gICAgKG1hcCAoZm4qIFtwMV9fNDg2NTMjXSAocmVzb2x2ZS10eXBlIGVudiBwMV9fNDg2NTMjKSkgeHMpKVxyXG4gICBcIn1cIikpKVxyXG4ifSB7OnN5bSAqaW5wdXRzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmlucHV0cyogbmlsKVxyXG4ifSB7OnN5bSBlbWl0LXN0ciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHByXSl9LCA6c291cmNlICIoZGVmbiBlbWl0LXN0ciBbZXhwcl0gKHdpdGgtb3V0LXN0ciAoZW1pdCBleHByKSkpXHJcbiJ9IHs6c3ltIGVtaXQtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleXMgdmFscyBjb21tYS1zZXAgZGlzdGluY3Qta2V5cz9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LW1hcFxyXG4gW2tleXMgdmFscyBjb21tYS1zZXAgZGlzdGluY3Qta2V5cz9dXHJcbiAoY29uZFxyXG4gICh6ZXJvPyAoY291bnQga2V5cykpXHJcbiAgKGVtaXRzIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRBcnJheU1hcC5FTVBUWVwiKVxyXG4gICg8PSAoY291bnQga2V5cykgYXJyYXktbWFwLXRocmVzaG9sZClcclxuICAoaWZcclxuICAgKGRpc3RpbmN0LWtleXM/IGtleXMpXHJcbiAgIChlbWl0c1xyXG4gICAgXCJuZXcgY2xqcy5jb3JlLlBlcnNpc3RlbnRBcnJheU1hcChudWxsLCBcIlxyXG4gICAgKGNvdW50IGtleXMpXHJcbiAgICBcIiwgW1wiXHJcbiAgICAoY29tbWEtc2VwIChpbnRlcmxlYXZlIGtleXMgdmFscykpXHJcbiAgICBcIl0sIG51bGwpXCIpXHJcbiAgIChlbWl0c1xyXG4gICAgXCJjbGpzLmNvcmUuUGVyc2lzdGVudEFycmF5TWFwLmNyZWF0ZUFzSWZCeUFzc29jKFtcIlxyXG4gICAgKGNvbW1hLXNlcCAoaW50ZXJsZWF2ZSBrZXlzIHZhbHMpKVxyXG4gICAgXCJdKVwiKSlcclxuICA6ZWxzZVxyXG4gIChlbWl0c1xyXG4gICBcImNsanMuY29yZS5QZXJzaXN0ZW50SGFzaE1hcC5mcm9tQXJyYXlzKFtcIlxyXG4gICAoY29tbWEtc2VwIGtleXMpXHJcbiAgIFwiXSxbXCJcclxuICAgKGNvbW1hLXNlcCB2YWxzKVxyXG4gICBcIl0pXCIpKSlcclxuIn0gezpzeW0gZW1pdC12ZWN0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXMgY29tbWEtc2VwXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC12ZWN0b3JcclxuIFtpdGVtcyBjb21tYS1zZXBdXHJcbiAoaWZcclxuICAoZW1wdHk/IGl0ZW1zKVxyXG4gIChlbWl0cyBcImNsanMuY29yZS5QZXJzaXN0ZW50VmVjdG9yLkVNUFRZXCIpXHJcbiAgKGxldFxyXG4gICBbY250IChjb3VudCBpdGVtcyldXHJcbiAgIChpZlxyXG4gICAgKDwgY250IDMyKVxyXG4gICAgKGVtaXRzXHJcbiAgICAgXCJuZXcgY2xqcy5jb3JlLlBlcnNpc3RlbnRWZWN0b3IobnVsbCwgXCJcclxuICAgICBjbnRcclxuICAgICBcIiwgNSwgY2xqcy5jb3JlLlBlcnNpc3RlbnRWZWN0b3IuRU1QVFlfTk9ERSwgW1wiXHJcbiAgICAgKGNvbW1hLXNlcCBpdGVtcylcclxuICAgICBcIl0sIG51bGwpXCIpXHJcbiAgICAoZW1pdHNcclxuICAgICBcImNsanMuY29yZS5QZXJzaXN0ZW50VmVjdG9yLmZyb21BcnJheShbXCJcclxuICAgICAoY29tbWEtc2VwIGl0ZW1zKVxyXG4gICAgIFwiXSwgdHJ1ZSlcIikpKSkpXHJcbiJ9IHs6c3ltIHRydXRoeS1jb25zdGFudD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRydXRoeS1jb25zdGFudD9cclxuIFtleHByXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW29wIGZvcm0gY29uc3QtZXhwcl19IChhbmEvdW53cmFwLXF1b3RlIGV4cHIpXVxyXG4gIChvclxyXG4gICAoYW5kXHJcbiAgICAoPSBvcCA6Y29uc3QpXHJcbiAgICBmb3JtXHJcbiAgICAobm90XHJcbiAgICAgKG9yXHJcbiAgICAgIChhbmQgKHN0cmluZz8gZm9ybSkgKD0gZm9ybSBcIlwiKSlcclxuICAgICAgKGFuZCAobnVtYmVyPyBmb3JtKSAoemVybz8gZm9ybSkpKSkpXHJcbiAgIChhbmQgKHNvbWU/IGNvbnN0LWV4cHIpICh0cnV0aHktY29uc3RhbnQ/IGNvbnN0LWV4cHIpKSkpKVxyXG4ifSB7OnN5bSBlbWl0bG4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbXSBbYV0gW2EgYl0gW2EgYiBjXSBbYSBiIGMgZF0gW2EgYiBjIGQgZV0gW2EgYiBjIGQgZSAmIHhzXV19LCA6c291cmNlICIoZGVmblxyXG4gZW1pdGxuXHJcbiAoW10gKF9lbWl0bG4pKVxyXG4gKFthXSAoZW1pdHMgYSkgKF9lbWl0bG4pKVxyXG4gKFthIGJdIChlbWl0cyBhKSAoZW1pdHMgYikgKF9lbWl0bG4pKVxyXG4gKFthIGIgY10gKGVtaXRzIGEpIChlbWl0cyBiKSAoZW1pdHMgYykgKF9lbWl0bG4pKVxyXG4gKFthIGIgYyBkXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChlbWl0cyBjKSAoZW1pdHMgZCkgKF9lbWl0bG4pKVxyXG4gKFthIGIgYyBkIGVdXHJcbiAgKGVtaXRzIGEpXHJcbiAgKGVtaXRzIGIpXHJcbiAgKGVtaXRzIGMpXHJcbiAgKGVtaXRzIGQpXHJcbiAgKGVtaXRzIGUpXHJcbiAgKF9lbWl0bG4pKVxyXG4gKFthIGIgYyBkIGUgJiB4c11cclxuICAoZW1pdHMgYSlcclxuICAoZW1pdHMgYilcclxuICAoZW1pdHMgYylcclxuICAoZW1pdHMgZClcclxuICAoZW1pdHMgZSlcclxuICAoZG9zZXEgW3ggeHNdIChlbWl0cyB4KSlcclxuICAoX2VtaXRsbikpKVxyXG4ifSB7OnN5bSBlbWl0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FzdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXRcclxuIFthc3RdXHJcbiAod2hlblxyXG4gICpzb3VyY2UtbWFwLWRhdGEqXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtlbnZdfSBhc3RdXHJcbiAgICh3aGVuXHJcbiAgICAoOmxpbmUgZW52KVxyXG4gICAgKGxldFxyXG4gICAgIFt7OmtleXMgW2xpbmUgY29sdW1uXX0gZW52XVxyXG4gICAgIChzd2FwIVxyXG4gICAgICAqc291cmNlLW1hcC1kYXRhKlxyXG4gICAgICAoZm5cclxuICAgICAgIFttXVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFttaW5mb1xyXG4gICAgICAgICAoY29uZC0+XHJcbiAgICAgICAgICB7Omdjb2xcclxuICAgICAgICAgICAjPyg6Y2xqICguZ2V0ICpzb3VyY2UtbWFwLWRhdGEtZ2VuLWNvbCopIDpjbGpzICg6Z2VuLWNvbCBtKSksXHJcbiAgICAgICAgICAgOmdsaW5lICg6Z2VuLWxpbmUgbSl9XHJcbiAgICAgICAgICAoI3s6YmluZGluZyA6dmFyIDpqcy12YXIgOmxvY2FsfSAoOm9wIGFzdCkpXHJcbiAgICAgICAgICAoYXNzb2MgOm5hbWUgKHN0ciAoLT4gYXN0IDppbmZvIDpuYW1lKSkpKV1cclxuICAgICAgICAodXBkYXRlLWluXHJcbiAgICAgICAgIG1cclxuICAgICAgICAgWzpzb3VyY2UtbWFwIChkZWMgbGluZSldXHJcbiAgICAgICAgIChmbmlsXHJcbiAgICAgICAgICAoZm5cclxuICAgICAgICAgICBbbGluZV1cclxuICAgICAgICAgICAodXBkYXRlLWluXHJcbiAgICAgICAgICAgIGxpbmVcclxuICAgICAgICAgICAgWyhpZiBjb2x1bW4gKGRlYyBjb2x1bW4pIDApXVxyXG4gICAgICAgICAgICAoZm5pbCAoZm4gW2NvbHVtbl0gKGNvbmogY29sdW1uIG1pbmZvKSkgW10pKSlcclxuICAgICAgICAgIChzb3J0ZWQtbWFwKSkpKSkpKSkpKVxyXG4gKGVtaXQqIGFzdCkpXHJcbiJ9IHs6c3ltIHNhZmUtdGVzdD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzYWZlLXRlc3Q/XHJcbiBbZW52IGVdXHJcbiAobGV0XHJcbiAgW3RhZyAoYW5hL2luZmVyLXRhZyBlbnYgZSldXHJcbiAgKG9yICgjeydzZXEgJ2Jvb2xlYW59IHRhZykgKHRydXRoeS1jb25zdGFudD8gZSkpKSlcclxuIn0gezpzeW0gZW1pdC1leHRlcm5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2V4dGVybnNdIFtwcmVmaXggZXh0ZXJucyB0b3AtbGV2ZWwga25vd24tZXh0ZXJuc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtZXh0ZXJuc1xyXG4gKFtleHRlcm5zXVxyXG4gIChlbWl0LWV4dGVybnNcclxuICAgW11cclxuICAgZXh0ZXJuc1xyXG4gICAoYXRvbSAje30pXHJcbiAgICh3aGVuIGVudi8qY29tcGlsZXIqIChhbmEvZ2V0LWV4dGVybnMpKSkpXHJcbiAoW3ByZWZpeCBleHRlcm5zIHRvcC1sZXZlbCBrbm93bi1leHRlcm5zXVxyXG4gIChsb29wXHJcbiAgIFtrcyAoc2VxIChrZXlzIGV4dGVybnMpKV1cclxuICAgKHdoZW5cclxuICAgIGtzXHJcbiAgICAobGV0XHJcbiAgICAgW2sgKGZpcnN0IGtzKSBbdG9wIDphcyBwcmVmaXgnXSAoY29uaiBwcmVmaXggayldXHJcbiAgICAgKHdoZW5cclxuICAgICAgKGFuZCAobm90PSAncHJvdG90eXBlIGspIChuaWw/IChnZXQtaW4ga25vd24tZXh0ZXJucyBwcmVmaXgnKSkpXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgIChvciAoY29udGFpbnM/IEB0b3AtbGV2ZWwgdG9wKSAoY29udGFpbnM/IGtub3duLWV4dGVybnMgdG9wKSlcclxuICAgICAgIChkb1xyXG4gICAgICAgIChlbWl0bG4gXCJ2YXIgXCIgKHN0cmluZy9qb2luIFwiLlwiIChtYXAgbXVuZ2UgcHJlZml4JykpIFwiO1wiKVxyXG4gICAgICAgIChzd2FwISB0b3AtbGV2ZWwgY29uaiB0b3ApKVxyXG4gICAgICAgKGVtaXRsbiAoc3RyaW5nL2pvaW4gXCIuXCIgKG1hcCBtdW5nZSBwcmVmaXgnKSkgXCI7XCIpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFttIChnZXQgZXh0ZXJucyBrKV1cclxuICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAoZW1wdHk/IG0pXHJcbiAgICAgICAoZW1pdC1leHRlcm5zIHByZWZpeCcgbSB0b3AtbGV2ZWwga25vd24tZXh0ZXJucykpKSlcclxuICAgIChyZWN1ciAobmV4dCBrcykpKSkpKVxyXG4ifSB7OnN5bSBlbWl0LWdsb2JhbC1leHBvcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMtbmFtZSBnbG9iYWwtZXhwb3J0cyBsaWJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWdsb2JhbC1leHBvcnRcclxuIFtucy1uYW1lIGdsb2JhbC1leHBvcnRzIGxpYl1cclxuIChlbWl0bG5cclxuICAobXVuZ2UgbnMtbmFtZSlcclxuICBcIi5cIlxyXG4gIChhbmEvbXVuZ2UtZ2xvYmFsLWV4cG9ydCBsaWIpXHJcbiAgXCIgPSBnb29nLmdsb2JhbFwiXHJcbiAgKC0+PlxyXG4gICAoc3RyaW5nL3NwbGl0XHJcbiAgICAobmFtZVxyXG4gICAgIChvclxyXG4gICAgICAoZ2V0IGdsb2JhbC1leHBvcnRzIChzeW1ib2wgbGliKSlcclxuICAgICAgKGdldCBnbG9iYWwtZXhwb3J0cyAobmFtZSBsaWIpKSkpXHJcbiAgICAjXCJcXC5cIilcclxuICAgKG1hcCAoZm4gW3Byb3BdIChzdHIgXCJbXFxcIlwiIHByb3AgXCJcXFwiXVwiKSkpXHJcbiAgIChhcHBseSBzdHIpKVxyXG4gIFwiO1wiKSlcclxuIn0gezpzeW0gZGlzdGluY3QtY29uc3RhbnRzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3RpbmN0LWNvbnN0YW50cz9cclxuIFtpdGVtc11cclxuIChsZXRcclxuICBbaXRlbXMgKG1hcCBhbmEvdW53cmFwLXF1b3RlIGl0ZW1zKV1cclxuICAoYW5kXHJcbiAgIChldmVyeT8gKGZuKiBbcDFfXzQ4NjUxI10gKD0gKDpvcCBwMV9fNDg2NTEjKSA6Y29uc3QpKSBpdGVtcylcclxuICAgKD0gKGNvdW50IChpbnRvICN7fSBpdGVtcykpIChjb3VudCBpdGVtcykpKSkpXHJcbiJ9IHs6c3ltIHNoYWRvdy1kZXB0aCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2hhZG93LWRlcHRoXHJcbiBbc11cclxuIChsZXRcclxuICBbezprZXlzIFtuYW1lIGluZm9dfSBzXVxyXG4gIChsb29wXHJcbiAgIFtkIDAgezprZXlzIFtzaGFkb3ddfSBpbmZvXVxyXG4gICAoY29uZFxyXG4gICAgc2hhZG93XHJcbiAgICAocmVjdXIgKGluYyBkKSBzaGFkb3cpXHJcbiAgICAoZmluZC1ucy1zdGFydHMtd2l0aCAoc3RyIG5hbWUpKVxyXG4gICAgKGluYyBkKVxyXG4gICAgOmVsc2VcclxuICAgIGQpKSkpXHJcbiJ9KSwgY2xqcy5zb3VyY2UtbWFwLmJhc2U2NCAoezpzeW0gY2hhcnM2NCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGNoYXJzNjRcclxuIFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiKVxyXG4ifSB7OnN5bSBjaGFyLT5pbnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGNoYXItPmludCAoemlwbWFwIGNoYXJzNjQgKHJhbmdlIDAgNjQpKSlcclxuIn0gezpzeW0gaW50LT5jaGFyLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBpbnQtPmNoYXIgKHppcG1hcCAocmFuZ2UgMCA2NCkgY2hhcnM2NCkpXHJcbiJ9IHs6c3ltIGVuY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5jb2RlXHJcbiBbbl1cclxuIChsZXRcclxuICBbZSAoZmluZCBpbnQtPmNoYXIgbildXHJcbiAgKGlmXHJcbiAgIGVcclxuICAgKHNlY29uZCBlKVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiBuKSkpKSkpXHJcbiJ9IHs6c3ltIGRlY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVjb2RlXHJcbiBbY11cclxuIChsZXRcclxuICBbZSAoZmluZCBjaGFyLT5pbnQgYyldXHJcbiAgKGlmXHJcbiAgIGVcclxuICAgKHNlY29uZCBlKVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiTm90IGEgdmFsaWQgYmFzZSA2NCBkaWdpdDogXCIgYykpKSkpKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyLmltcGwudXRpbHMgKHs6c3ltIHJlYWRlci1jb25kaXRpb25hbCwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwuXG4gIElmIHRydWUsIHNwbGljaW5nPyBpbmRpY2F0ZXMgcmVhZC1jb25kLXNwbGljaW5nLiIsIDphcmdsaXN0cyAoW2Zvcm0gc3BsaWNpbmc/XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWNvbmRpdGlvbmFsXHJcbiBcIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwuXFxuICBJZiB0cnVlLCBzcGxpY2luZz8gaW5kaWNhdGVzIHJlYWQtY29uZC1zcGxpY2luZy5cIlxyXG4gW2Zvcm0gc3BsaWNpbmc/XVxyXG4gKFJlYWRlckNvbmRpdGlvbmFsLiBzcGxpY2luZz8gZm9ybSkpXHJcbiJ9IHs6c3ltIHdoaXRlc3BhY2U/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZSIsIDphcmdsaXN0cyAoW2NoXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2hpdGVzcGFjZT9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZVwiXHJcbiBbY2hdXHJcbiAod2hlbi1ub3QgKG5pbD8gY2gpIChpZiAoaWRlbnRpY2FsPyBjaCBcXCwpIHRydWUgKC50ZXN0IHdzLXJ4IGNoKSkpKVxyXG4ifSB7OnN5bSBjaGFyLWNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2ggYmFzZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYXItY29kZVxyXG4gW2NoIGJhc2VdXHJcbiAobGV0IFtjb2RlIChqcy9wYXJzZUludCBjaCBiYXNlKV0gKGlmIChqcy9pc05hTiBjb2RlKSAtMSBjb2RlKSkpXHJcbiJ9IHs6c3ltIGxhc3QtaWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGxhc3QtaWQgKGF0b20gMCkpXHJcbiJ9IHs6c3ltIGNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gY2hhciBbeF0gKHdoZW4tbm90IChuaWw/IHgpIChjbGpzLmNvcmUvY2hhciB4KSkpXHJcbiJ9IHs6c3ltIG51bWVyaWM/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgbnVtZXJpYyIsIDphcmdsaXN0cyAoW2NoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtZXJpYz9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgbnVtZXJpY1wiXHJcbiBbY2hdXHJcbiAod2hlbi1ub3QgKG5pbD8gY2gpIChnc3RyaW5nL2lzTnVtZXJpYyBjaCkpKVxyXG4ifSB7OnN5bSBzZWNvbmQnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW1thIGJdXSl9LCA6c291cmNlICIoZGVmbiBzZWNvbmQnIFtbYSBiXV0gKHdoZW4tbm90IGEgYikpXHJcbiJ9IHs6c3ltIGRlc3VnYXItbWV0YSwgOm1ldGEgezpkb2MgIlJlc29sdmVzIHN5bnRhY3RpY2FsIHN1Z2FyIGluIG1ldGFkYXRhIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc3VnYXItbWV0YVxyXG4gXCJSZXNvbHZlcyBzeW50YWN0aWNhbCBzdWdhciBpbiBtZXRhZGF0YVwiXHJcbiBbZl1cclxuIChjb25kXHJcbiAgKGtleXdvcmQ/IGYpXHJcbiAge2YgdHJ1ZX1cclxuICAoc3ltYm9sPyBmKVxyXG4gIHs6dGFnIGZ9XHJcbiAgKHN0cmluZz8gZilcclxuICB7OnRhZyBmfVxyXG4gIDplbHNlXHJcbiAgZikpXHJcbiJ9IHs6c3ltIG5leHQtaWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBuZXh0LWlkIFtdIChzd2FwISBsYXN0LWlkIGluYykpXHJcbiJ9IHs6c3ltIGV4LWluZm8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmbiBleC1pbmZvPyBbZXhdIChpbnN0YW5jZT8gY2xqcy5jb3JlLkV4Y2VwdGlvbkluZm8gZXgpKVxyXG4ifSB7OnN5bSByZWFkZXItY29uZGl0aW9uYWw/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItY29uZGl0aW9uYWw/XHJcbiBcIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbFwiXHJcbiBbdmFsdWVdXHJcbiAoaW5zdGFuY2U/IFJlYWRlckNvbmRpdGlvbmFsIHZhbHVlKSlcclxuIn0gezpzeW0gbmV3bGluZT8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZSIsIDphcmdsaXN0cyAoW2NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZXdsaW5lP1xyXG4gXCJDaGVja3Mgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVwiXHJcbiBbY11cclxuIChvciAoaWRlbnRpY2FsPyBcXG5ld2xpbmUgYykgKGlkZW50aWNhbD8gXCJcXG5cIiBjKSAobmlsPyBjKSkpXHJcbiJ9IHs6c3ltIG5hbWVzcGFjZS1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zIGtleXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYW1lc3BhY2Uta2V5c1xyXG4gW25zIGtleXNdXHJcbiAoZm9yXHJcbiAgW2tleSBrZXlzXVxyXG4gIChpZlxyXG4gICAob3IgKHN5bWJvbD8ga2V5KSAoa2V5d29yZD8ga2V5KSlcclxuICAgKGxldFxyXG4gICAgW1trZXktbnMga2V5LW5hbWVdXHJcbiAgICAgKChqdXh0IG5hbWVzcGFjZSBuYW1lKSBrZXkpXHJcbiAgICAgLT5rZXlcclxuICAgICAoaWYgKHN5bWJvbD8ga2V5KSBzeW1ib2wga2V5d29yZCldXHJcbiAgICAoY29uZFxyXG4gICAgIChuaWw/IGtleS1ucylcclxuICAgICAoLT5rZXkgbnMga2V5LW5hbWUpXHJcbiAgICAgKD0gXCJfXCIga2V5LW5zKVxyXG4gICAgICgtPmtleSBrZXktbmFtZSlcclxuICAgICA6ZWxzZVxyXG4gICAgIGtleSkpXHJcbiAgIGtleSkpKVxyXG4ifSB7OnN5bSB3cy1yeCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgd3MtcnggI1wiW1xcc11cIilcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC5jaGFubmVscyAoezpzeW0gYm94LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZhbF0pfSwgOnNvdXJjZSAiKGRlZm4gYm94IFt2YWxdIChyZWlmeSBjbGpzLmNvcmUvSURlcmVmICgtZGVyZWYgW19dIHZhbCkpKVxyXG4ifSB7OnN5bSBwdXQtYWN0aXZlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtib3hdKX0sIDpzb3VyY2UgIihkZWZuIHB1dC1hY3RpdmU/IFtib3hdIChpbXBsL2FjdGl2ZT8gKC4taGFuZGxlciBib3gpKSlcclxuIn0gezpzeW0gTUFYX0RJUlRZLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNQVhfRElSVFkgNjQpXHJcbiJ9IHs6c3ltIGFib3J0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBNTUN9IHs6c3ltIE1NQywgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGFib3J0KX0gezpzeW0gY2hhbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tidWZdIFtidWYgeGZvcm1dIFtidWYgeGZvcm0gZXhoXV19LCA6c291cmNlICIoZGVmblxyXG4gY2hhblxyXG4gKFtidWZdIChjaGFuIGJ1ZiBuaWwpKVxyXG4gKFtidWYgeGZvcm1dIChjaGFuIGJ1ZiB4Zm9ybSBuaWwpKVxyXG4gKFtidWYgeGZvcm0gZXhoXVxyXG4gIChNYW55VG9NYW55Q2hhbm5lbC5cclxuICAgKGJ1ZmZlcnMvcmluZy1idWZmZXIgMzIpXHJcbiAgIDBcclxuICAgKGJ1ZmZlcnMvcmluZy1idWZmZXIgMzIpXHJcbiAgIDBcclxuICAgYnVmXHJcbiAgIGZhbHNlXHJcbiAgIChsZXRcclxuICAgIFthZGQhIChpZiB4Zm9ybSAoeGZvcm0gaW1wbC9hZGQhKSBpbXBsL2FkZCEpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtidWZdICh0cnkgKGFkZCEgYnVmKSAoY2F0Y2ggOmRlZmF1bHQgdCAoaGFuZGxlIGJ1ZiBleGggdCkpKSlcclxuICAgICAoW2J1ZiB2YWxdXHJcbiAgICAgICh0cnkgKGFkZCEgYnVmIHZhbCkgKGNhdGNoIDpkZWZhdWx0IHQgKGhhbmRsZSBidWYgZXhoIHQpKSkpKSkpKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC5kaXNwYXRjaCAoezpzeW0gdGFza3MsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHRhc2tzIChidWZmZXJzL3JpbmctYnVmZmVyIDMyKSlcclxuIn0gezpzeW0gcnVubmluZz8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHJ1bm5pbmc/IGZhbHNlKVxyXG4ifSB7OnN5bSBxdWV1ZWQ/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBxdWV1ZWQ/IGZhbHNlKVxyXG4ifSB7OnN5bSBUQVNLX0JBVENIX1NJWkUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFRBU0tfQkFUQ0hfU0laRSAxMDI0KVxyXG4ifSB7OnN5bSBwcm9jZXNzLW1lc3NhZ2VzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByb2Nlc3MtbWVzc2FnZXNcclxuIFtdXHJcbiAoc2V0ISBydW5uaW5nPyB0cnVlKVxyXG4gKHNldCEgcXVldWVkPyBmYWxzZSlcclxuIChsb29wXHJcbiAgW2NvdW50IDBdXHJcbiAgKGxldFxyXG4gICBbbSAoLnBvcCB0YXNrcyldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKG5pbD8gbSlcclxuICAgIChtKVxyXG4gICAgKHdoZW4gKDwgY291bnQgVEFTS19CQVRDSF9TSVpFKSAocmVjdXIgKGluYyBjb3VudCkpKSkpKVxyXG4gKHNldCEgcnVubmluZz8gZmFsc2UpXHJcbiAod2hlbiAoPiAoLi1sZW5ndGggdGFza3MpIDApIChxdWV1ZS1kaXNwYXRjaGVyKSkpXHJcbiJ9IHs6c3ltIHF1ZXVlLWRpc3BhdGNoZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVldWUtZGlzcGF0Y2hlclxyXG4gW11cclxuICh3aGVuLW5vdFxyXG4gIChhbmQgcXVldWVkPyBydW5uaW5nPylcclxuICAoc2V0ISBxdWV1ZWQ/IHRydWUpXHJcbiAgKGdvb2cuYXN5bmMubmV4dFRpY2sgcHJvY2Vzcy1tZXNzYWdlcykpKVxyXG4ifSB7OnN5bSBydW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm4gcnVuIFtmXSAoLnVuYm91bmRlZC11bnNoaWZ0IHRhc2tzIGYpIChxdWV1ZS1kaXNwYXRjaGVyKSlcclxuIn0gezpzeW0gcXVldWUtZGVsYXksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZiBkZWxheV0pfSwgOnNvdXJjZSAiKGRlZm4gcXVldWUtZGVsYXkgW2YgZGVsYXldIChqcy9zZXRUaW1lb3V0IGYgZGVsYXkpKVxyXG4ifSksIHBhcmVuLXNvdXAuY29yZSAoezpzeW0gY2FuLXVuZG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yXSl9LCA6c291cmNlICIoZGVmbiBjYW4tdW5kbyBbZWRpdG9yXSAoY2FuLXVuZG8/IGVkaXRvcikpXHJcbiJ9IHs6c3ltIHNob3ctZXJyb3ItbWVzc2FnZSEsIDptZXRhIHs6ZG9jICJTaG93cyBhIHBvcHVwIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4iLCA6YXJnbGlzdHMgKFtwYXJlbnQtZWxlbSBldmVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNob3ctZXJyb3ItbWVzc2FnZSFcclxuIFwiU2hvd3MgYSBwb3B1cCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuXCJcclxuIFtwYXJlbnQtZWxlbSBldmVudF1cclxuIChsZXRcclxuICBbZWxlbVxyXG4gICAoLi10YXJnZXQgZXZlbnQpXHJcbiAgIHhcclxuICAgKC4tY2xpZW50WCBldmVudClcclxuICAgeVxyXG4gICAoLi1jbGllbnRZIGV2ZW50KVxyXG4gICBwb3B1cFxyXG4gICAoLmNyZWF0ZUVsZW1lbnQganMvZG9jdW1lbnQgXCJkaXZcIildXHJcbiAgKHNldCEgKC4tdGV4dENvbnRlbnQgcG9wdXApICgtPiBlbGVtIC4tZGF0YXNldCAuLW1lc3NhZ2UpKVxyXG4gIChzZXQhICguLXRvcCAoLi1zdHlsZSBwb3B1cCkpIChzdHIgeSBcInB4XCIpKVxyXG4gIChzZXQhICguLWxlZnQgKC4tc3R5bGUgcG9wdXApKSAoc3RyIHggXCJweFwiKSlcclxuICAoc2V0ISAoLi1jbGFzc05hbWUgcG9wdXApIFwiZXJyb3ItdGV4dFwiKVxyXG4gICguYXBwZW5kQ2hpbGQgcGFyZW50LWVsZW0gcG9wdXApKSlcclxuIn0gezpzeW0gZm9jdXNlZC10ZXh0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gZm9jdXNlZC10ZXh0IFtdIChzb21lLT4gKGRvbS9nZXQtZm9jdXNlZC1mb3JtKSAuLXRleHRDb250ZW50KSlcclxuIn0gezpzeW0gc2VsZWN0ZWQtdGV4dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZWxlY3RlZC10ZXh0XHJcbiBbXVxyXG4gKGxldFxyXG4gIFtzICgtPiBqcy93aW5kb3cgLmdldFNlbGVjdGlvbiAudG9TdHJpbmcpXVxyXG4gICh3aGVuLW5vdCAoZW1wdHk/IHMpIHMpKSlcclxuIn0gezpzeW0gY2FuLXJlZG8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGNhbi1yZWRvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvcl0pfSwgOnNvdXJjZSAiKGRlZm4gY2FuLXJlZG8gW2VkaXRvcl0gKGNhbi1yZWRvPyBlZGl0b3IpKVxyXG4ifSB7OnN5bSByYWluYm93LWRlbGltaXRlcnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIG9mIGVsZW1lbnRzIGFuZCBjbGFzcyBuYW1lcy4iLCA6YXJnbGlzdHMgW1twYXJlbnQgbGV2ZWxdIFtwYXJlbnQgbGV2ZWwgbV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhaW5ib3ctZGVsaW1pdGVyc1xyXG4gXCJSZXR1cm5zIGEgbWFwIG9mIGVsZW1lbnRzIGFuZCBjbGFzcyBuYW1lcy5cIlxyXG4gKFtwYXJlbnQgbGV2ZWxdXHJcbiAgKHBlcnNpc3RlbnQhIChyYWluYm93LWRlbGltaXRlcnMgcGFyZW50IGxldmVsICh0cmFuc2llbnQge30pKSkpXHJcbiAoW3BhcmVudCBsZXZlbCBtXVxyXG4gIChyZWR1Y2VcclxuICAgKGZuXHJcbiAgICBbbSBlbGVtXVxyXG4gICAgKGxldFxyXG4gICAgIFtjbGFzc2VzICguLWNsYXNzTGlzdCBlbGVtKV1cclxuICAgICAoY29uZFxyXG4gICAgICAoLmNvbnRhaW5zIGNsYXNzZXMgXCJkZWxpbWl0ZXJcIilcclxuICAgICAgKGFzc29jISBtIGVsZW0gKHN0ciBcInJhaW5ib3ctXCIgKG1vZCBsZXZlbCByYWluYm93LWNvdW50KSkpXHJcbiAgICAgICguY29udGFpbnMgY2xhc3NlcyBcImNvbGxlY3Rpb25cIilcclxuICAgICAgKHJhaW5ib3ctZGVsaW1pdGVycyBlbGVtIChpbmMgbGV2ZWwpIG0pXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIG0pKSlcclxuICAgbVxyXG4gICAoLT4gcGFyZW50IC4tY2hpbGRyZW4gYXJyYXktc2VxKSkpKVxyXG4ifSB7OnN5bSB1cCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBhbHQ/XSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSByZWZyZXNoISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIHN0YXRlXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSB1bmRvISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSByZWZyZXNoLWN1cnNvci1wb3NpdGlvbiEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCB7OmtleXMgW2Nyb3BwZWQtc3RhdGVdLCA6YXMgc3RhdGV9XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1jdXJzb3ItcG9zaXRpb24hXHJcbiBbY29udGVudCB7OmtleXMgW2Nyb3BwZWQtc3RhdGVdLCA6YXMgc3RhdGV9XVxyXG4gKGlmXHJcbiAgKHNvbWUtPj4gY3JvcHBlZC1zdGF0ZSA6ZWxlbWVudCAoLmNvbnRhaW5zIGNvbnRlbnQpKVxyXG4gIChzb21lLT5cclxuICAgY3JvcHBlZC1zdGF0ZVxyXG4gICA6ZWxlbWVudFxyXG4gICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hICg6Y3Vyc29yLXBvc2l0aW9uIGNyb3BwZWQtc3RhdGUpKSlcclxuICAoaWZcclxuICAgKGFuZCAoOnNlbGVjdGlvbi1jaGFuZ2U/IHN0YXRlKSAoOm9yaWdpbmFsLWN1cnNvci1wb3NpdGlvbiBzdGF0ZSkpXHJcbiAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgY29udGVudCAoOm9yaWdpbmFsLWN1cnNvci1wb3NpdGlvbiBzdGF0ZSkpXHJcbiAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgY29udGVudCAoOmN1cnNvci1wb3NpdGlvbiBzdGF0ZSkpKSkpXHJcbiJ9IHs6c3ltIGtleS1uYW1lPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB0aGUgc3VwcGxpZWQga2V5IGV2ZW50IGludm9sdmVzIHRoZSBrZXkocykgZGVzY3JpYmVkIGJ5IGtleS1uYW1lLiIsIDphcmdsaXN0cyAoW2V2ZW50IGtleS1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5LW5hbWU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB0aGUgc3VwcGxpZWQga2V5IGV2ZW50IGludm9sdmVzIHRoZSBrZXkocykgZGVzY3JpYmVkIGJ5IGtleS1uYW1lLlwiXHJcbiBbZXZlbnQga2V5LW5hbWVdXHJcbiAobGV0XHJcbiAgW2NvZGUgKGtleS1jb2RlIGV2ZW50KV1cclxuICAoY2FzZVxyXG4gICBrZXktbmFtZVxyXG4gICA6dW5kby1vci1yZWRvXHJcbiAgIChhbmQgKG9yICguLW1ldGFLZXkgZXZlbnQpICguLWN0cmxLZXkgZXZlbnQpKSAoPSBjb2RlIDkwKSlcclxuICAgOnRhYlxyXG4gICAoPSBjb2RlIDkpXHJcbiAgIDplbnRlclxyXG4gICAoPSBjb2RlIDEzKVxyXG4gICA6YXJyb3dzXHJcbiAgIChjb250YWlucz8gI3szOSA0MCAzOCAzN30gY29kZSlcclxuICAgOnVwLWFycm93XHJcbiAgICg9IGNvZGUgMzgpXHJcbiAgIDpkb3duLWFycm93XHJcbiAgICg9IGNvZGUgNDApXHJcbiAgIDpnZW5lcmFsXHJcbiAgIChub3RcclxuICAgIChvclxyXG4gICAgIChjb250YWlucz8gI3swIDkxIDkzIDE3IDE2IDE4fSBjb2RlKVxyXG4gICAgICguLWN0cmxLZXkgZXZlbnQpXHJcbiAgICAgKC4tbWV0YUtleSBldmVudCkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBldmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvciBmb3JtIGNhbGxiYWNrXSl9LCA6c291cmNlICIoZGVmbiBldmFsIFtlZGl0b3IgZm9ybSBjYWxsYmFja10gKGV2YWwhIGVkaXRvciBmb3JtIGNhbGxiYWNrKSlcclxuIn0gezpzeW0gY2hhbm5lbD8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBjaGFubmVsP1xyXG4gKGZuKlxyXG4gIFtwMV9fNDkwMjMjXVxyXG4gIChpbnN0YW5jZT9cclxuICAgY2xqcy5jb3JlLmFzeW5jLmltcGwuY2hhbm5lbHMuTWFueVRvTWFueUNoYW5uZWxcclxuICAgcDFfXzQ5MDIzIykpKVxyXG4ifSB7OnN5bSBjcmVhdGUtZWRpdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BzIGNvbnRlbnQgZXZlbnRzLWNoYW4gezprZXlzIFtoaXN0b3J5LWxpbWl0IGFwcGVuZC1saW1pdCBjb21waWxlci1mbiBjb25zb2xlLWNhbGxiYWNrIGRpc2FibGUtY2xqPyBlZGl0LWhpc3RvcnkgZm9jdXM/XSwgOm9yIHtoaXN0b3J5LWxpbWl0IDEwMCwgYXBwZW5kLWxpbWl0IDUwMDAsIGZvY3VzPyBmYWxzZX0sIDphcyBvcHRzfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNyZWF0ZS1lZGl0b3JcclxuIFtwc1xyXG4gIGNvbnRlbnRcclxuICBldmVudHMtY2hhblxyXG4gIHs6a2V5c1xyXG4gICBbaGlzdG9yeS1saW1pdFxyXG4gICAgYXBwZW5kLWxpbWl0XHJcbiAgICBjb21waWxlci1mblxyXG4gICAgY29uc29sZS1jYWxsYmFja1xyXG4gICAgZGlzYWJsZS1jbGo/XHJcbiAgICBlZGl0LWhpc3RvcnlcclxuICAgIGZvY3VzP10sXHJcbiAgIDpvciB7aGlzdG9yeS1saW1pdCAxMDAsIGFwcGVuZC1saW1pdCA1MDAwLCBmb2N1cz8gZmFsc2V9LFxyXG4gICA6YXMgb3B0c31dXHJcbiAobGV0XHJcbiAgW2Nsaj9cclxuICAgKG5vdCBkaXNhYmxlLWNsaj8pXHJcbiAgIGVkaXRvcj9cclxuICAgKG5vdCBjb25zb2xlLWNhbGxiYWNrKVxyXG4gICBjb21waWxlci1mblxyXG4gICAob3IgY29tcGlsZXItZm4gKGlyL2NyZWF0ZS1jb21waWxlci1mbiBvcHRzKSlcclxuICAgKmVkaXQtaGlzdG9yeVxyXG4gICAoZG90b1xyXG4gICAgKG9yIGVkaXQtaGlzdG9yeSAobXdtL2NyZWF0ZS1lZGl0LWhpc3RvcnkpKVxyXG4gICAgKHN3YXAhIGFzc29jIDpsaW1pdCBoaXN0b3J5LWxpbWl0KSlcclxuICAgcmVmcmVzaC1pbnN0YXJlcGwtd2l0aC1kZWxheSFcclxuICAgKGRlYm91bmNlIHJlZnJlc2gtaW5zdGFyZXBsISAzMDApXHJcbiAgICpjb25zb2xlLWhpc3RvcnlcclxuICAgKGNvbnNvbGUvY3JlYXRlLWNvbnNvbGUtaGlzdG9yeSlcclxuICAgKmxhc3QtaGlnaGxpZ2h0LWVsZW1cclxuICAgKGF0b20gbmlsKVxyXG4gICAqYWxsb3ctdGFiP1xyXG4gICAoYXRvbSBmYWxzZSlcclxuICAgKmZpcnN0LXJlZnJlc2g/XHJcbiAgIChhdG9tIHRydWUpXVxyXG4gICh3aGVuLW5vdFxyXG4gICBlZGl0b3I/XHJcbiAgIChzZXQtdmFsaWRhdG9yIVxyXG4gICAgKmVkaXQtaGlzdG9yeVxyXG4gICAgKGZuXHJcbiAgICAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZSBzdGF0ZXNdfV1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtzdGF0ZSAoZ2V0IHN0YXRlcyBjdXJyZW50LXN0YXRlKV1cclxuICAgICAgKC0+XHJcbiAgICAgICBzdGF0ZVxyXG4gICAgICAgOmN1cnNvci1wb3NpdGlvblxyXG4gICAgICAgZmlyc3RcclxuICAgICAgICg+PSAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KSkpXHJcbiAgICAgIHRydWUpKSkpXHJcbiAgKHJlaWZ5XHJcbiAgIEVkaXRvclxyXG4gICAodW5kbyFcclxuICAgIFt0aGlzXVxyXG4gICAgKHNvbWUtPj4gKmVkaXQtaGlzdG9yeSBtd20vdW5kbyEgKHJlZnJlc2ghIHRoaXMpKVxyXG4gICAgKGRvbS9zY3JvbGwtdG8tbmVhcmVzdC1lbGVtKSlcclxuICAgKHJlZG8hXHJcbiAgICBbdGhpc11cclxuICAgIChzb21lLT4+ICplZGl0LWhpc3RvcnkgbXdtL3JlZG8hIChyZWZyZXNoISB0aGlzKSlcclxuICAgIChkb20vc2Nyb2xsLXRvLW5lYXJlc3QtZWxlbSkpXHJcbiAgIChjYW4tdW5kbz8gW3RoaXNdIChtd20vY2FuLXVuZG8/ICplZGl0LWhpc3RvcnkpKVxyXG4gICAoY2FuLXJlZG8/IFt0aGlzXSAobXdtL2Nhbi1yZWRvPyAqZWRpdC1oaXN0b3J5KSlcclxuICAgKHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hXHJcbiAgICBbdGhpcyBwb3NpdGlvbl1cclxuICAgICh0cnlcclxuICAgICAobXdtL3VwZGF0ZS1jdXJzb3ItcG9zaXRpb24hICplZGl0LWhpc3RvcnkgcG9zaXRpb24pXHJcbiAgICAgKGNhdGNoXHJcbiAgICAgIGpzL0Vycm9yXHJcbiAgICAgIF9cclxuICAgICAgKHdoZW5cclxuICAgICAgIChhcHBseSA9IHBvc2l0aW9uKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtzdGFydCAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KV1cclxuICAgICAgICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hIGNvbnRlbnQgW3N0YXJ0IHN0YXJ0XSlcclxuICAgICAgICAobXdtL3VwZGF0ZS1jdXJzb3ItcG9zaXRpb24hICplZGl0LWhpc3RvcnkgW3N0YXJ0IHN0YXJ0XSkpKSkpXHJcbiAgICAodXBkYXRlLWhpZ2hsaWdodCEgY29udGVudCAqbGFzdC1oaWdobGlnaHQtZWxlbSkpXHJcbiAgIChyZXNldC1lZGl0LWhpc3RvcnkhXHJcbiAgICBbdGhpcyBzdGFydF1cclxuICAgIChjb25zb2xlL3VwZGF0ZS1jb25zb2xlLXN0YXJ0ISAqY29uc29sZS1oaXN0b3J5IHN0YXJ0KVxyXG4gICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISBjb250ZW50IFtzdGFydCBzdGFydF0pXHJcbiAgICAobGV0XHJcbiAgICAgWypuZXctZWRpdC1oaXN0b3J5XHJcbiAgICAgIChtd20vY3JlYXRlLWVkaXQtaGlzdG9yeSlcclxuICAgICAgc3RhdGVcclxuICAgICAgezpjdXJzb3ItcG9zaXRpb24gW3N0YXJ0IHN0YXJ0XSwgOnRleHQgKC4tdGV4dENvbnRlbnQgY29udGVudCl9XVxyXG4gICAgICh1cGRhdGUtZWRpdC1oaXN0b3J5ISAqbmV3LWVkaXQtaGlzdG9yeSBzdGF0ZSlcclxuICAgICAocmVzZXQhICplZGl0LWhpc3RvcnkgQCpuZXctZWRpdC1oaXN0b3J5KSkpXHJcbiAgIChhcHBlbmQtdGV4dCFcclxuICAgIFt0aGlzIHRleHRdXHJcbiAgICAobGV0XHJcbiAgICAgW25vZGVcclxuICAgICAgKC5jcmVhdGVUZXh0Tm9kZSBqcy9kb2N1bWVudCB0ZXh0KVxyXG4gICAgICBfXHJcbiAgICAgICguYXBwZW5kQ2hpbGQgY29udGVudCBub2RlKVxyXG4gICAgICBhbGwtdGV4dFxyXG4gICAgICAoLi10ZXh0Q29udGVudCBjb250ZW50KVxyXG4gICAgICBjaGFyLWNvdW50XHJcbiAgICAgIChtYXggMCAoLSAoY291bnQgYWxsLXRleHQpIGFwcGVuZC1saW1pdCkpXHJcbiAgICAgIG5ldy1hbGwtdGV4dFxyXG4gICAgICAoc3VicyBhbGwtdGV4dCBjaGFyLWNvdW50KVxyXG4gICAgICBjaGFyLWNvdW50XHJcbiAgICAgIChpZlxyXG4gICAgICAgKC5lbmRzV2l0aCBuZXctYWxsLXRleHQgXCJcXG5cIilcclxuICAgICAgIChkZWMgKGNvdW50IG5ldy1hbGwtdGV4dCkpXHJcbiAgICAgICAoY291bnQgbmV3LWFsbC10ZXh0KSldXHJcbiAgICAgKHdoZW5cclxuICAgICAgKG5vdD0gYWxsLXRleHQgbmV3LWFsbC10ZXh0KVxyXG4gICAgICAoc2V0ISAoLi10ZXh0Q29udGVudCBjb250ZW50KSBuZXctYWxsLXRleHQpKVxyXG4gICAgIChyZXNldC1lZGl0LWhpc3RvcnkhIHRoaXMgY2hhci1jb3VudCkpKVxyXG4gICAoZW50ZXIhXHJcbiAgICBbdGhpc11cclxuICAgIChpZlxyXG4gICAgIGVkaXRvcj9cclxuICAgICAoLmV4ZWNDb21tYW5kIGpzL2RvY3VtZW50IFwiaW5zZXJ0SFRNTFwiIGZhbHNlIFwiXFxuXCIpXHJcbiAgICAgKGxldFxyXG4gICAgICBbdGV4dFxyXG4gICAgICAgKHRyaW1yICguLXRleHRDb250ZW50IGNvbnRlbnQpKVxyXG4gICAgICAgcG9zdC10ZXh0XHJcbiAgICAgICAoc3VicyB0ZXh0IChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpKV1cclxuICAgICAgKHJlc2V0LWVkaXQtaGlzdG9yeSEgdGhpcyAoY291bnQgdGV4dCkpXHJcbiAgICAgIChjb25zb2xlL3VwZGF0ZS1jb25zb2xlLWhpc3RvcnkhICpjb25zb2xlLWhpc3RvcnkgcG9zdC10ZXh0KVxyXG4gICAgICAoY29uc29sZS1jYWxsYmFjayBwb3N0LXRleHQpKSkpXHJcbiAgICh1cCFcclxuICAgIFt0aGlzIGFsdD9dXHJcbiAgICAoaWZcclxuICAgICBhbHQ/XHJcbiAgICAgKHdoZW4tbGV0XHJcbiAgICAgIFtlbGVtIChkb20vZ2V0LWZvY3VzZWQtZm9ybSldXHJcbiAgICAgICh3aGVuLWxldFxyXG4gICAgICAgW3N0YXRlIChtd20vZ2V0LWN1cnJlbnQtc3RhdGUgKmVkaXQtaGlzdG9yeSldXHJcbiAgICAgICAod2hlbi1sZXRcclxuICAgICAgICBbZWxlbVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChhbmRcclxuICAgICAgICAgICAoOnNlbGVjdGlvbi1jaGFuZ2U/IHN0YXRlKVxyXG4gICAgICAgICAgICg9IGVsZW0gKHNvbWUtPiBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSA6ZWxlbWVudCkpKVxyXG4gICAgICAgICAgKGRvbS9nZXQtcGFyZW50IGVsZW0gXCJjb2xsZWN0aW9uXCIpXHJcbiAgICAgICAgICBlbGVtKV1cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFt0ZXh0ICguLXRleHRDb250ZW50IGVsZW0pIHBvcyBbMCAoY291bnQgdGV4dCldXVxyXG4gICAgICAgICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hIGVsZW0gcG9zKVxyXG4gICAgICAgICAodXBkYXRlLWVkaXQtaGlzdG9yeSFcclxuICAgICAgICAgICplZGl0LWhpc3RvcnlcclxuICAgICAgICAgIChhc3NvY1xyXG4gICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgICAgOnNlbGVjdGlvbi1jaGFuZ2U/XHJcbiAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgIDpjcm9wcGVkLXN0YXRlXHJcbiAgICAgICAgICAgezpjdXJzb3ItcG9zaXRpb24gcG9zLCA6dGV4dCB0ZXh0LCA6ZWxlbWVudCBlbGVtfSkpXHJcbiAgICAgICAgICh1cGRhdGUtaGlnaGxpZ2h0ISBjb250ZW50ICpsYXN0LWhpZ2hsaWdodC1lbGVtKSkpKSlcclxuICAgICAod2hlbi1ub3RcclxuICAgICAgZWRpdG9yP1xyXG4gICAgICAobGV0XHJcbiAgICAgICBbdGV4dFxyXG4gICAgICAgICguLXRleHRDb250ZW50IGNvbnRlbnQpXHJcbiAgICAgICAgc3RhcnRcclxuICAgICAgICAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KVxyXG4gICAgICAgIHByZS10ZXh0XHJcbiAgICAgICAgKHN1YnMgdGV4dCAwIChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpKVxyXG4gICAgICAgIGxpbmVcclxuICAgICAgICAob3IgKGNvbnNvbGUvdXAhICpjb25zb2xlLWhpc3RvcnkpIFwiXCIpXHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgICB7OmN1cnNvci1wb3NpdGlvbiBbc3RhcnQgc3RhcnRdLFxyXG4gICAgICAgICA6dGV4dCAoc3RyIHByZS10ZXh0IGxpbmUgXFxuZXdsaW5lKX1dXHJcbiAgICAgICAoLT4+XHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgICAodXBkYXRlLWVkaXQtaGlzdG9yeSEgKmVkaXQtaGlzdG9yeSlcclxuICAgICAgICAocmVmcmVzaCEgdGhpcykpKSkpKVxyXG4gICAoZG93biFcclxuICAgIFt0aGlzIGFsdD9dXHJcbiAgICAoaWZcclxuICAgICBhbHQ/XHJcbiAgICAgKHdoZW5cclxuICAgICAgKDpzZWxlY3Rpb24tY2hhbmdlPyAobXdtL2dldC1jdXJyZW50LXN0YXRlICplZGl0LWhpc3RvcnkpKVxyXG4gICAgICAodW5kbyEgdGhpcykpXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIGVkaXRvcj9cclxuICAgICAgKGxldFxyXG4gICAgICAgW3RleHRcclxuICAgICAgICAoLi10ZXh0Q29udGVudCBjb250ZW50KVxyXG4gICAgICAgIHN0YXJ0XHJcbiAgICAgICAgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSlcclxuICAgICAgICBwcmUtdGV4dFxyXG4gICAgICAgIChzdWJzIHRleHQgMCBzdGFydClcclxuICAgICAgICBsaW5lXHJcbiAgICAgICAgKG9yIChjb25zb2xlL2Rvd24hICpjb25zb2xlLWhpc3RvcnkpIFwiXCIpXHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgICB7OmN1cnNvci1wb3NpdGlvbiBbc3RhcnQgc3RhcnRdLFxyXG4gICAgICAgICA6dGV4dCAoc3RyIHByZS10ZXh0IGxpbmUgXFxuZXdsaW5lKX1dXHJcbiAgICAgICAoLT4+XHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgICAodXBkYXRlLWVkaXQtaGlzdG9yeSEgKmVkaXQtaGlzdG9yeSlcclxuICAgICAgICAocmVmcmVzaCEgdGhpcykpKSkpKVxyXG4gICAodGFiISBbdGhpc10gKHdoZW4gZWRpdG9yPyAocmVzZXQhICphbGxvdy10YWI/IHRydWUpKSlcclxuICAgKHJlZnJlc2ghXHJcbiAgICBbdGhpcyBzdGF0ZV1cclxuICAgIChsZXRcclxuICAgICBbc3RhdGVcclxuICAgICAgKGNvbmRcclxuICAgICAgICg6c2VsZWN0aW9uLWNoYW5nZT8gc3RhdGUpXHJcbiAgICAgICBzdGF0ZVxyXG4gICAgICAgZWRpdG9yP1xyXG4gICAgICAgKHJlZnJlc2gtY29udGVudCEgY29udGVudCBzdGF0ZSBjbGo/KVxyXG4gICAgICAgOmVsc2VcclxuICAgICAgIChyZWZyZXNoLWNvbnNvbGUtY29udGVudCFcclxuICAgICAgICBjb250ZW50XHJcbiAgICAgICAgc3RhdGVcclxuICAgICAgICAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KVxyXG4gICAgICAgIGNsaj8pKV1cclxuICAgICAod2hlblxyXG4gICAgICAob3IgZm9jdXM/IChub3QgQCpmaXJzdC1yZWZyZXNoPykpXHJcbiAgICAgIChyZWZyZXNoLWN1cnNvci1wb3NpdGlvbiEgY29udGVudCBzdGF0ZSkpXHJcbiAgICAgKHdoZW4gY2xqPyAocmVmcmVzaC1lcnJvcnMtYW5kLWRlbGltaXRlcnMhIGNvbnRlbnQgZXZlbnRzLWNoYW4pKVxyXG4gICAgICh3aGVuXHJcbiAgICAgIGVkaXRvcj9cclxuICAgICAgKHNvbWUtPlxyXG4gICAgICAgKC5xdWVyeVNlbGVjdG9yIHBzIFwiLm51bWJlcnNcIilcclxuICAgICAgIChyZWZyZXNoLW51bWJlcnMhIChjb3VudCAocmUtc2VxICNcIlxcblwiICg6dGV4dCBzdGF0ZSkpKSkpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBjbGo/XHJcbiAgICAgICAod2hlbi1sZXRcclxuICAgICAgICBbZWxlbSAoLnF1ZXJ5U2VsZWN0b3IgcHMgXCIuaW5zdGFyZXBsXCIpXVxyXG4gICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAoLT4gZWxlbSAuLXN0eWxlIC4tZGlzcGxheSAoPSBcIm5vbmVcIikpXHJcbiAgICAgICAgIChyZWZyZXNoLWluc3RhcmVwbC13aXRoLWRlbGF5IVxyXG4gICAgICAgICAgZWxlbVxyXG4gICAgICAgICAgY29udGVudFxyXG4gICAgICAgICAgY29tcGlsZXItZm5cclxuICAgICAgICAgIGFwcGVuZC1saW1pdCkpKSkpXHJcbiAgICAgKHVwZGF0ZS1oaWdobGlnaHQhIGNvbnRlbnQgKmxhc3QtaGlnaGxpZ2h0LWVsZW0pKSlcclxuICAgKGVkaXQtYW5kLXJlZnJlc2ghXHJcbiAgICBbdGhpcyBzdGF0ZV1cclxuICAgICgtPj5cclxuICAgICBzdGF0ZVxyXG4gICAgIChhZGQtbmV3bGluZSlcclxuICAgICAoYWRkLXBhcmluZmVyIGNsaj8gKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSkpXHJcbiAgICAgKHVwZGF0ZS1lZGl0LWhpc3RvcnkhICplZGl0LWhpc3RvcnkpXHJcbiAgICAgKHJlZnJlc2ghIHRoaXMpKSlcclxuICAgKGluaXRpYWxpemUhXHJcbiAgICBbdGhpc11cclxuICAgICh3aGVuXHJcbiAgICAgZWRpdG9yP1xyXG4gICAgICgtPj4gKGluaXQtc3RhdGUgY29udGVudCBmYWxzZSBmYWxzZSkgKGVkaXQtYW5kLXJlZnJlc2ghIHRoaXMpKSlcclxuICAgIChyZXNldCEgKmZpcnN0LXJlZnJlc2g/IGZhbHNlKSlcclxuICAgKHJlZnJlc2gtYWZ0ZXIta2V5LWV2ZW50IVxyXG4gICAgW3RoaXMgZXZlbnRdXHJcbiAgICAobGV0XHJcbiAgICAgW3RhYj9cclxuICAgICAgKGtleS1uYW1lPyBldmVudCA6dGFiKVxyXG4gICAgICBzdGF0ZVxyXG4gICAgICAoaW5pdC1zdGF0ZSBjb250ZW50IGVkaXRvcj8gdGFiPyldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIChhbmQgdGFiPyAobm90IEAqYWxsb3ctdGFiPykpXHJcbiAgICAgIChlZGl0LWFuZC1yZWZyZXNoIVxyXG4gICAgICAgdGhpc1xyXG4gICAgICAgKGNhc2VcclxuICAgICAgICAoa2V5LWNvZGUgZXZlbnQpXHJcbiAgICAgICAgMTNcclxuICAgICAgICAoYXNzb2Mgc3RhdGUgOmluZGVudC10eXBlIDpyZXR1cm4pXHJcbiAgICAgICAgOVxyXG4gICAgICAgIChhc3NvY1xyXG4gICAgICAgICBzdGF0ZVxyXG4gICAgICAgICA6aW5kZW50LXR5cGVcclxuICAgICAgICAgKGlmICguLXNoaWZ0S2V5IGV2ZW50KSA6YmFjayA6Zm9yd2FyZCkpXHJcbiAgICAgICAgKGFzc29jIHN0YXRlIDppbmRlbnQtdHlwZSA6bm9ybWFsKSkpKVxyXG4gICAgICh3aGVuIHRhYj8gKHJlc2V0ISAqYWxsb3ctdGFiPyBmYWxzZSkpKSlcclxuICAgKHJlZnJlc2gtYWZ0ZXItY3V0LXBhc3RlIVxyXG4gICAgW3RoaXNdXHJcbiAgICAoZWRpdC1hbmQtcmVmcmVzaCFcclxuICAgICB0aGlzXHJcbiAgICAgKGFzc29jIChpbml0LXN0YXRlIGNvbnRlbnQgZmFsc2UgZmFsc2UpIDppbmRlbnQtdHlwZSA6bm9ybWFsKSkpXHJcbiAgIChldmFsIVxyXG4gICAgW3RoaXMgZm9ybSBjYWxsYmFja11cclxuICAgIChjb21waWxlci1mblxyXG4gICAgIFtmb3JtXVxyXG4gICAgIChmbiogW3AxX180OTAzMiNdIChjYWxsYmFjayAoZmlyc3QgcDFfXzQ5MDMyIykpKSkpKSkpXHJcbiJ9IHs6c3ltIGtleS1jb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V2ZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5LWNvZGVcclxuIFtldmVudF1cclxuIChsZXQgW2NvZGUgKC4ta2V5Q29kZSBldmVudCldIChpZiAocG9zPyBjb2RlKSBjb2RlICguLXdoaWNoIGV2ZW50KSkpKVxyXG4ifSB7OnN5bSByZWRvISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSB0YWIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHRyYW5zaWVudC1tYXA/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gdHJhbnNpZW50LW1hcD9cclxuIChmbipcclxuICBbcDFfXzQ5MDI0I11cclxuICAob3JcclxuICAgKGluc3RhbmNlPyBjbGpzLmNvcmUvVHJhbnNpZW50QXJyYXlNYXAgcDFfXzQ5MDI0IylcclxuICAgKGluc3RhbmNlPyBjbGpzLmNvcmUvVHJhbnNpZW50SGFzaE1hcCBwMV9fNDkwMjQjKSkpKVxyXG4ifSB7OnN5bSByZWZyZXNoLWNvbnRlbnQtZWxlbWVudCEsIDptZXRhIHs6ZG9jICJSZXBsYWNlcyBhIHNpbmdsZSBub2RlIGluIHRoZSBjb250ZW50LCBhbmQgc2libGluZ3MgaWYgbmVjZXNzYXJ5LiIsIDphcmdsaXN0cyAoW3s6a2V5cyBbZWxlbWVudCB0ZXh0XSwgOmFzIGNyb3BwZWQtc3RhdGV9XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1jb250ZW50LWVsZW1lbnQhXHJcbiBcIlJlcGxhY2VzIGEgc2luZ2xlIG5vZGUgaW4gdGhlIGNvbnRlbnQsIGFuZCBzaWJsaW5ncyBpZiBuZWNlc3NhcnkuXCJcclxuIFt7OmtleXMgW2VsZW1lbnQgdGV4dF0sIDphcyBjcm9wcGVkLXN0YXRlfV1cclxuIChsZXRcclxuICBbcGFyZW50XHJcbiAgICguLXBhcmVudEVsZW1lbnQgZWxlbWVudClcclxuICAgbGFzdC1lbGVtXHJcbiAgICguLWxhc3RDaGlsZCBwYXJlbnQpXHJcbiAgIGxhc3QtZXJyb3JcclxuICAgKGxvb3BcclxuICAgIFtjdXJyZW50LWVsZW0gbGFzdC1lbGVtXVxyXG4gICAgKGNvbmRcclxuICAgICAoZG9tL2Vycm9yLW5vZGU/IGN1cnJlbnQtZWxlbSlcclxuICAgICBjdXJyZW50LWVsZW1cclxuICAgICAob3IgKG5pbD8gY3VycmVudC1lbGVtKSAoPSBlbGVtZW50IGN1cnJlbnQtZWxlbSkpXHJcbiAgICAgbmlsXHJcbiAgICAgOmVsc2VcclxuICAgICAocmVjdXIgKC4tcHJldmlvdXNTaWJsaW5nIGN1cnJlbnQtZWxlbSkpKSlcclxuICAgbGFzdC1lbGVtLXRvLXJlZnJlc2hcclxuICAgKHdoZW5cclxuICAgIGxhc3QtZXJyb3JcclxuICAgIChsb29wXHJcbiAgICAgW2N1cnJlbnQtZWxlbSBsYXN0LWVycm9yXVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3NpYmxpbmcgKC4tbmV4dFNpYmxpbmcgY3VycmVudC1lbGVtKV1cclxuICAgICAgKGlmIChkb20vY29sbC1ub2RlPyBzaWJsaW5nKSBjdXJyZW50LWVsZW0gKHJlY3VyIHNpYmxpbmcpKVxyXG4gICAgICBjdXJyZW50LWVsZW0pKSlcclxuICAgb2xkLWVsZW1zXHJcbiAgIChsb29wXHJcbiAgICBbZWxlbXMgW2VsZW1lbnRdIGN1cnJlbnQtZWxlbSBlbGVtZW50XVxyXG4gICAgKGNvbmRcclxuICAgICAoPSBsYXN0LWVsZW0tdG8tcmVmcmVzaCBjdXJyZW50LWVsZW0pXHJcbiAgICAgZWxlbXNcclxuICAgICAob3IgKHNvbWU/IGxhc3QtZWxlbS10by1yZWZyZXNoKSAoZG9tL3RleHQtbm9kZT8gY3VycmVudC1lbGVtKSlcclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtzaWJsaW5nICguLW5leHRTaWJsaW5nIGN1cnJlbnQtZWxlbSldXHJcbiAgICAgIChyZWN1ciAoY29uaiBlbGVtcyBzaWJsaW5nKSBzaWJsaW5nKVxyXG4gICAgICBlbGVtcylcclxuICAgICA6ZWxzZVxyXG4gICAgIGVsZW1zKSlcclxuICAgX1xyXG4gICAoc2V0ISAoLi10ZXh0Q29udGVudCBlbGVtZW50KSB0ZXh0KVxyXG4gICB0ZXh0XHJcbiAgIChqb2luIChtYXAgKGZuKiBbcDFfXzQ5MDMwI10gKC4tdGV4dENvbnRlbnQgcDFfXzQ5MDMwIykpIG9sZC1lbGVtcykpXHJcbiAgIHRlbXAtZWxlbVxyXG4gICAoLmNyZWF0ZUVsZW1lbnQganMvZG9jdW1lbnQgXCJzcGFuXCIpXHJcbiAgIF9cclxuICAgKHNldCEgKC4taW5uZXJIVE1MIHRlbXAtZWxlbSkgKGhzL2NvZGUtPmh0bWwgdGV4dCkpXHJcbiAgIG5ldy1lbGVtc1xyXG4gICAoZG9hbGxcclxuICAgIChmb3JcclxuICAgICBbaSAocmFuZ2UgKC0+IHRlbXAtZWxlbSAuLWNoaWxkTm9kZXMgLi1sZW5ndGgpKV1cclxuICAgICAoLT4gdGVtcC1lbGVtIC4tY2hpbGROb2RlcyAoLml0ZW0gaSkpKSldXHJcbiAgKGRvc2VxIFtuZXctZWxlbSBuZXctZWxlbXNdICguaW5zZXJ0QmVmb3JlIHBhcmVudCBuZXctZWxlbSBlbGVtZW50KSlcclxuICAoZG9zZXEgW29sZC1lbGVtIG9sZC1lbGVtc10gKC5yZW1vdmVDaGlsZCBwYXJlbnQgb2xkLWVsZW0pKVxyXG4gIChhc3NvYyBjcm9wcGVkLXN0YXRlIDplbGVtZW50IChmaXJzdCBuZXctZWxlbXMpKSkpXHJcbiJ9IHs6c3ltIGVsZW0/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBlbGVtPyAoZm4qIFtwMV9fNDkwMjUjXSAoaW5zdGFuY2U/IGpzL0VsZW1lbnQgcDFfXzQ5MDI1IykpKVxyXG4ifSB7OnN5bSBlbnRlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gYXBwZW5kLXRleHQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgdGV4dF0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gbGluZS1udW1iZXJzLCA6bWV0YSB7OmRvYyAiQWRkcyBsaW5lIG51bWJlcnMgdG8gdGhlIG51bWJlcnMuIiwgOmFyZ2xpc3RzIChbbGluZS1jb3VudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtbnVtYmVyc1xyXG4gXCJBZGRzIGxpbmUgbnVtYmVycyB0byB0aGUgbnVtYmVycy5cIlxyXG4gW2xpbmUtY291bnRdXHJcbiAoam9pbiAoZm9yIFtpIChyYW5nZSBsaW5lLWNvdW50KV0gKHN0ciBcIjxkaXY+XCIgKGluYyBpKSBcIjwvZGl2PlwiKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtaGlnaGxpZ2h0ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50ICpsYXN0LWVsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtaGlnaGxpZ2h0IVxyXG4gW2NvbnRlbnQgKmxhc3QtZWxlbV1cclxuICh3aGVuLWxldFxyXG4gIFtlbGVtIEAqbGFzdC1lbGVtXVxyXG4gIChzZXQhICguLWJhY2tncm91bmRDb2xvciAoLi1zdHlsZSBlbGVtKSkgbmlsKVxyXG4gIChyZXNldCEgKmxhc3QtZWxlbSBuaWwpKVxyXG4gKHdoZW4tbGV0XHJcbiAgW2VsZW0gKGRvbS9nZXQtZm9jdXNlZC1mb3JtKV1cclxuICAod2hlbi1sZXRcclxuICAgW2NvbG9yXHJcbiAgICAoLmdldFByb3BlcnR5VmFsdWVcclxuICAgICAoLmdldENvbXB1dGVkU3R5bGUganMvd2luZG93ICguLWZpcnN0Q2hpbGQgZWxlbSkpXHJcbiAgICAgXCJjb2xvclwiKV1cclxuICAgKGxldFxyXG4gICAgW25ldy1jb2xvciAoLT4gY29sb3IgKHJlcGxhY2UgI1wicmdiXFwoXCIgXCJcIikgKHJlcGxhY2UgI1wiXFwpXCIgXCJcIikpXVxyXG4gICAgKHNldCFcclxuICAgICAoLi1iYWNrZ3JvdW5kQ29sb3IgKC4tc3R5bGUgZWxlbSkpXHJcbiAgICAgKHN0ciBcInJnYmEoXCIgbmV3LWNvbG9yIFwiLCAwLjEpXCIpKVxyXG4gICAgKHJlc2V0ISAqbGFzdC1lbGVtIGVsZW0pKSkpKVxyXG4ifSB7OnN5bSBpbml0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BzIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0XHJcbiBbcHMgb3B0c11cclxuICguaW5pdCBqcy9yYW5neSlcclxuIChsZXRcclxuICBbb3B0c1xyXG4gICAoanMtPmNsaiBvcHRzIDprZXl3b3JkaXplLWtleXMgdHJ1ZSlcclxuICAgY29udGVudFxyXG4gICAoLnF1ZXJ5U2VsZWN0b3IgcHMgXCIuY29udGVudFwiKVxyXG4gICBldmVudHMtY2hhblxyXG4gICAoY2hhbilcclxuICAgZWRpdG9yXHJcbiAgIChjcmVhdGUtZWRpdG9yIHBzIGNvbnRlbnQgZXZlbnRzLWNoYW4gb3B0cyldXHJcbiAgKHNldCEgKC4tc3BlbGxjaGVjayBwcykgZmFsc2UpXHJcbiAgKHdoZW4tbm90XHJcbiAgIGNvbnRlbnRcclxuICAgKHRocm93IChqcy9FcnJvci4gXCJDYW4ndCBmaW5kIGEgZGl2IHdpdGggY2xhc3MgJ2NvbnRlbnQnXCIpKSlcclxuICAoaW5pdGlhbGl6ZSEgZWRpdG9yKVxyXG4gIChhZGQtZXZlbnQtbGlzdGVuZXJzISBjb250ZW50IGV2ZW50cy1jaGFuIG9wdHMpXHJcbiAgKGdvXHJcbiAgICh3aGlsZVxyXG4gICAgdHJ1ZVxyXG4gICAgKGxldFxyXG4gICAgIFtldmVudCAoPCEgZXZlbnRzLWNoYW4pXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAoc29tZS0+XHJcbiAgICAgICBvcHRzXHJcbiAgICAgICA6YmVmb3JlLWNoYW5nZS1jYWxsYmFja1xyXG4gICAgICAgKChmbiogW3AxX180OTAzNyNdIChwMV9fNDkwMzcjIGV2ZW50KSkpKVxyXG4gICAgICAoY2FzZVxyXG4gICAgICAgKC4tdHlwZSBldmVudClcclxuICAgICAgIFwia2V5ZG93blwiXHJcbiAgICAgICAoY29uZFxyXG4gICAgICAgIChhbmRcclxuICAgICAgICAgKGtleS1uYW1lPyBldmVudCA6dW5kby1vci1yZWRvKVxyXG4gICAgICAgICAoLT4gb3B0cyA6ZGlzYWJsZS11bmRvLXJlZG8/IG5vdCkpXHJcbiAgICAgICAgKGlmICguLXNoaWZ0S2V5IGV2ZW50KSAocmVkbyEgZWRpdG9yKSAodW5kbyEgZWRpdG9yKSlcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDplbnRlcilcclxuICAgICAgICAoZW50ZXIhIGVkaXRvcilcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDp1cC1hcnJvdylcclxuICAgICAgICAodXAhIGVkaXRvciAoLi1hbHRLZXkgZXZlbnQpKVxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOmRvd24tYXJyb3cpXHJcbiAgICAgICAgKGRvd24hIGVkaXRvciAoLi1hbHRLZXkgZXZlbnQpKVxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOnRhYilcclxuICAgICAgICAodGFiISBlZGl0b3IpKVxyXG4gICAgICAgXCJrZXl1cFwiXHJcbiAgICAgICAoY29uZFxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOmFycm93cylcclxuICAgICAgICAodXBkYXRlLWN1cnNvci1wb3NpdGlvbiFcclxuICAgICAgICAgZWRpdG9yXHJcbiAgICAgICAgIChkb20vZ2V0LWN1cnNvci1wb3NpdGlvbiBjb250ZW50IGZhbHNlKSlcclxuICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDpnZW5lcmFsKVxyXG4gICAgICAgIChyZWZyZXNoLWFmdGVyLWtleS1ldmVudCEgZWRpdG9yIGV2ZW50KSlcclxuICAgICAgIFwiY3V0XCJcclxuICAgICAgIChyZWZyZXNoLWFmdGVyLWN1dC1wYXN0ZSEgZWRpdG9yKVxyXG4gICAgICAgXCJwYXN0ZVwiXHJcbiAgICAgICAocmVmcmVzaC1hZnRlci1jdXQtcGFzdGUhIGVkaXRvcilcclxuICAgICAgIFwibW91c2V1cFwiXHJcbiAgICAgICAodXBkYXRlLWN1cnNvci1wb3NpdGlvbiFcclxuICAgICAgICBlZGl0b3JcclxuICAgICAgICAoZG9tL2dldC1jdXJzb3ItcG9zaXRpb25cclxuICAgICAgICAgY29udGVudFxyXG4gICAgICAgICAoc29tZT8gKDpjb25zb2xlLWNhbGxiYWNrIG9wdHMpKSkpXHJcbiAgICAgICBcIm1vdXNlZW50ZXJcIlxyXG4gICAgICAgKHNob3ctZXJyb3ItbWVzc2FnZSEgcHMgZXZlbnQpXHJcbiAgICAgICBcIm1vdXNlbGVhdmVcIlxyXG4gICAgICAgKGhpZGUtZXJyb3ItbWVzc2FnZXMhIHBzKVxyXG4gICAgICAgbmlsKVxyXG4gICAgICAoc29tZS0+XHJcbiAgICAgICBvcHRzXHJcbiAgICAgICA6Y2hhbmdlLWNhbGxiYWNrXHJcbiAgICAgICAoKGZuKiBbcDFfXzQ5MDM4I10gKHAxX180OTAzOCMgZXZlbnQpKSkpKSkpKVxyXG4gIGVkaXRvcikpXHJcbiJ9IHs6c3ltIGNhbi11bmRvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSByZWZyZXNoLWNvbnRlbnQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgc3RhdGUgY2xqP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtY29udGVudCFcclxuIFtjb250ZW50IHN0YXRlIGNsaj9dXHJcbiAoaWYtbm90XHJcbiAgY2xqP1xyXG4gIChkb1xyXG4gICAoc2V0ISAoLi1pbm5lckhUTUwgY29udGVudCkgKGhzL2VzY2FwZS1odG1sLXN0ciAoOnRleHQgc3RhdGUpKSlcclxuICAgc3RhdGUpXHJcbiAgKGlmLWxldFxyXG4gICBbY3JvcCAoc29tZS0+IHN0YXRlIDpjcm9wcGVkLXN0YXRlIHJlZnJlc2gtY29udGVudC1lbGVtZW50ISldXHJcbiAgIChpZlxyXG4gICAgKG5vdD0gKDp0ZXh0IHN0YXRlKSAoLi10ZXh0Q29udGVudCBjb250ZW50KSlcclxuICAgIChyZWZyZXNoLWNvbnRlbnQhIGNvbnRlbnQgKGRpc3NvYyBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSkgY2xqPylcclxuICAgIChhc3NvYyBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSBjcm9wKSlcclxuICAgKGRvXHJcbiAgICAoc2V0ISAoLi1pbm5lckhUTUwgY29udGVudCkgKGhzL2NvZGUtPmh0bWwgKDp0ZXh0IHN0YXRlKSkpXHJcbiAgICAoZGlzc29jIHN0YXRlIDpjcm9wcGVkLXN0YXRlKSkpKSlcclxuIn0gezpzeW0gcmVkbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3JdKX0sIDpzb3VyY2UgIihkZWZuIHJlZG8gW2VkaXRvcl0gKHJlZG8hIGVkaXRvcikpXHJcbiJ9IHs6c3ltIGRlYm91bmNlLWZ1bmN0aW9uLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2YgbWlsbGlzXSl9LCA6c291cmNlICIoZGVmbiBkZWJvdW5jZS1mdW5jdGlvbiBbZiBtaWxsaXNdIChkZWJvdW5jZSBmIG1pbGxpcykpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtaW5zdGFyZXBsISwgOm1ldGEgezpkb2MgIlJlZnJlc2hlcyB0aGUgSW5zdGFSRVBMLiIsIDphcmdsaXN0cyAoW2luc3RhcmVwbCBjb250ZW50IGNvbXBpbGVyLWZuIGxpbWl0XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1pbnN0YXJlcGwhXHJcbiBcIlJlZnJlc2hlcyB0aGUgSW5zdGFSRVBMLlwiXHJcbiBbaW5zdGFyZXBsIGNvbnRlbnQgY29tcGlsZXItZm4gbGltaXRdXHJcbiAobGV0XHJcbiAgW2VsZW1zXHJcbiAgIChpci9nZXQtY29sbGVjdGlvbnMgY29udGVudClcclxuICAgbG9jYXRpb25zXHJcbiAgIChpci9lbGVtcy0+bG9jYXRpb25zIGVsZW1zICguLW9mZnNldFRvcCBpbnN0YXJlcGwpKVxyXG4gICBmb3Jtc1xyXG4gICAoLT4+XHJcbiAgICBlbGVtc1xyXG4gICAgKG1hcCBpci9jb2xsZWN0aW9uLT5jb250ZW50KVxyXG4gICAgKG1hcCAoZm4qIFtwMV9fNDkwMjcjXSAocmVwbGFjZSBwMV9fNDkwMjcjIFxcwqAgXCIgXCIpKSkpXVxyXG4gIChjb21waWxlci1mblxyXG4gICBmb3Jtc1xyXG4gICAoZm5cclxuICAgIFtyZXN1bHRzXVxyXG4gICAgKHdoZW5cclxuICAgICAoLi1wYXJlbnRFbGVtZW50IGluc3RhcmVwbClcclxuICAgICAoc2V0IVxyXG4gICAgICAoLi1pbm5lckhUTUwgaW5zdGFyZXBsKVxyXG4gICAgICAoaXIvcmVzdWx0cy0+aHRtbCByZXN1bHRzIGxvY2F0aW9ucyBsaW1pdCkpKSkpKSlcclxuIn0gezpzeW0gZWRpdC1hbmQtcmVmcmVzaCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBzdGF0ZV0pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gcmFpbmJvdy1jb3VudCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcmFpbmJvdy1jb3VudCA1KVxyXG4ifSB7OnN5bSB1cGRhdGUtY3Vyc29yLXBvc2l0aW9uISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIHBvc2l0aW9uXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBpbml0LXN0YXRlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZWRpdG9yJ3Mgc3RhdGUuIElmIGZ1bGwtc2VsZWN0aW9uPyBpcyB0cnVlLCBpdCB3aWxsIHRyeSB0byBzYXZlXG50aGUgZW50aXJlIHNlbGVjdGlvbiByYXRoZXIgdGhhbiBqdXN0IHRoZSBjdXJzb3IgcG9zaXRpb24uIiwgOmFyZ2xpc3RzIChbY29udGVudCBjcm9wPyBmdWxsLXNlbGVjdGlvbj9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LXN0YXRlXHJcbiBcIlJldHVybnMgdGhlIGVkaXRvcidzIHN0YXRlLiBJZiBmdWxsLXNlbGVjdGlvbj8gaXMgdHJ1ZSwgaXQgd2lsbCB0cnkgdG8gc2F2ZVxcbnRoZSBlbnRpcmUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGp1c3QgdGhlIGN1cnNvciBwb3NpdGlvbi5cIlxyXG4gW2NvbnRlbnQgY3JvcD8gZnVsbC1zZWxlY3Rpb24/XVxyXG4gKGxldFxyXG4gIFtzZWxlY3Rpb25cclxuICAgKC5nZXRTZWxlY3Rpb24ganMvcmFuZ3kpXHJcbiAgIGFuY2hvclxyXG4gICAoLi1hbmNob3JOb2RlIHNlbGVjdGlvbilcclxuICAgZm9jdXNcclxuICAgKC4tZm9jdXNOb2RlIHNlbGVjdGlvbilcclxuICAgcGFyZW50XHJcbiAgICh3aGVuIChhbmQgYW5jaG9yIGZvY3VzKSAoZG9tL2NvbW1vbi1hbmNlc3RvciBhbmNob3IgZm9jdXMpKVxyXG4gICBzdGF0ZVxyXG4gICB7OmN1cnNvci1wb3NpdGlvblxyXG4gICAgKC0+IGNvbnRlbnQgKGRvbS9nZXQtc2VsZWN0aW9uIGZ1bGwtc2VsZWN0aW9uPykgOmN1cnNvci1wb3NpdGlvbiksXHJcbiAgICA6dGV4dCAoLi10ZXh0Q29udGVudCBjb250ZW50KX1dXHJcbiAgKGlmLWxldFxyXG4gICBbY3JvcHBlZC1zZWxlY3Rpb24gKHNvbWUtPiBwYXJlbnQgKGRvbS9nZXQtc2VsZWN0aW9uIGZhbHNlKSldXHJcbiAgIChpZlxyXG4gICAgY3JvcD9cclxuICAgIChhc3NvY1xyXG4gICAgIHN0YXRlXHJcbiAgICAgOmNyb3BwZWQtc3RhdGVcclxuICAgICAoYXNzb2MgY3JvcHBlZC1zZWxlY3Rpb24gOnRleHQgKC4tdGV4dENvbnRlbnQgcGFyZW50KSkpXHJcbiAgICBzdGF0ZSlcclxuICAgc3RhdGUpKSlcclxuIn0gezpzeW0gZXZhbCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBmb3JtIGNhbGxiYWNrXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBhZGQtcGFyaW5mZXItYWZ0ZXItY29uc29sZS1zdGFydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb25zb2xlLXN0YXJ0LW51bSBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1wYXJpbmZlci1hZnRlci1jb25zb2xlLXN0YXJ0XHJcbiBbY29uc29sZS1zdGFydC1udW0gc3RhdGVdXHJcbiAobGV0XHJcbiAgW3ByZS10ZXh0XHJcbiAgIChzdWJzICg6dGV4dCBzdGF0ZSkgMCBjb25zb2xlLXN0YXJ0LW51bSlcclxuICAgcG9zdC10ZXh0XHJcbiAgIChzdWJzICg6dGV4dCBzdGF0ZSkgY29uc29sZS1zdGFydC1udW0pXHJcbiAgIGNsZWFyZWQtdGV4dFxyXG4gICAoc3RyIChyZXBsYWNlIHByZS10ZXh0ICNcIlteXFxyXlxcbl1cIiBcIiBcIikgcG9zdC10ZXh0KVxyXG4gICB0ZW1wLXN0YXRlXHJcbiAgIChhc3NvYyBzdGF0ZSA6dGV4dCBjbGVhcmVkLXRleHQpXHJcbiAgIHRlbXAtc3RhdGVcclxuICAgKGNwL2FkZC1wYXJpbmZlciA6Ym90aCB0ZW1wLXN0YXRlKVxyXG4gICBuZXctdGV4dFxyXG4gICAoc3RyIHByZS10ZXh0IChzdWJzICg6dGV4dCB0ZW1wLXN0YXRlKSBjb25zb2xlLXN0YXJ0LW51bSkpXVxyXG4gIChhc3NvYyBzdGF0ZSA6dGV4dCBuZXctdGV4dCkpKVxyXG4ifSB7OnN5bSByZWZyZXNoLW51bWJlcnMhLCA6bWV0YSB7OmRvYyAiUmVmcmVzaGVzIHRoZSBsaW5lIG51bWJlcnMuIiwgOmFyZ2xpc3RzIChbbnVtYmVycyBsaW5lLWNvdW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1udW1iZXJzIVxyXG4gXCJSZWZyZXNoZXMgdGhlIGxpbmUgbnVtYmVycy5cIlxyXG4gW251bWJlcnMgbGluZS1jb3VudF1cclxuIChzZXQhICguLWlubmVySFRNTCBudW1iZXJzKSAobGluZS1udW1iZXJzIGxpbmUtY291bnQpKSlcclxuIn0gezpzeW0gcmVmcmVzaC1hZnRlci1jdXQtcGFzdGUhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHJlZnJlc2gtYWZ0ZXIta2V5LWV2ZW50ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIGV2ZW50XSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBhZGQtbmV3bGluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW3RleHRdLCA6YXMgc3RhdGV9XSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLW5ld2xpbmVcclxuIFt7OmtleXMgW3RleHRdLCA6YXMgc3RhdGV9XVxyXG4gKGlmLW5vdFxyXG4gICg9IFxcbmV3bGluZSAobGFzdCB0ZXh0KSlcclxuICAoYXNzb2Mgc3RhdGUgOnRleHQgKHN0ciB0ZXh0IFxcbmV3bGluZSkpXHJcbiAgc3RhdGUpKVxyXG4ifSB7OnN5bSB1cGRhdGUtZWRpdC1oaXN0b3J5ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5IHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWVkaXQtaGlzdG9yeSFcclxuIFsqZWRpdC1oaXN0b3J5IHN0YXRlXVxyXG4gKHRyeVxyXG4gIChtd20vdXBkYXRlLWVkaXQtaGlzdG9yeSFcclxuICAgKmVkaXQtaGlzdG9yeVxyXG4gICAoaWYgKDpzZWxlY3Rpb24tY2hhbmdlPyBzdGF0ZSkgc3RhdGUgKGRpc3NvYyBzdGF0ZSA6Y3JvcHBlZC1zdGF0ZSkpKVxyXG4gIHN0YXRlXHJcbiAgKGNhdGNoIGpzL0Vycm9yIF8gKG13bS9nZXQtY3VycmVudC1zdGF0ZSAqZWRpdC1oaXN0b3J5KSkpKVxyXG4ifSB7OnN5bSByZWZyZXNoLWNvbnNvbGUtY29udGVudCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCBzdGF0ZSBjb25zb2xlLXN0YXJ0LW51bSBjbGo/XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1jb25zb2xlLWNvbnRlbnQhXHJcbiBbY29udGVudCBzdGF0ZSBjb25zb2xlLXN0YXJ0LW51bSBjbGo/XVxyXG4gKHNldCFcclxuICAoLi1pbm5lckhUTUwgY29udGVudClcclxuICAoaWZcclxuICAgY2xqP1xyXG4gICAobGV0XHJcbiAgICBbcHJlLXRleHRcclxuICAgICAoc3VicyAoOnRleHQgc3RhdGUpIDAgY29uc29sZS1zdGFydC1udW0pXHJcbiAgICAgcG9zdC10ZXh0XHJcbiAgICAgKHN1YnMgKDp0ZXh0IHN0YXRlKSBjb25zb2xlLXN0YXJ0LW51bSldXHJcbiAgICAoc3RyIChocy9lc2NhcGUtaHRtbC1zdHIgcHJlLXRleHQpIChocy9jb2RlLT5odG1sIHBvc3QtdGV4dCkpKVxyXG4gICAoaHMvZXNjYXBlLWh0bWwtc3RyICg6dGV4dCBzdGF0ZSkpKSlcclxuIHN0YXRlKVxyXG4ifSB7OnN5bSByZWZyZXNoLWVycm9ycy1hbmQtZGVsaW1pdGVycyEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCBldmVudHMtY2hhbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZnJlc2gtZXJyb3JzLWFuZC1kZWxpbWl0ZXJzIVxyXG4gW2NvbnRlbnQgZXZlbnRzLWNoYW5dXHJcbiAoaGlkZS1lcnJvci1tZXNzYWdlcyEgKC4tcGFyZW50RWxlbWVudCBjb250ZW50KSlcclxuIChkb3NlcVxyXG4gIFtlbGVtICgtPiBjb250ZW50ICgucXVlcnlTZWxlY3RvckFsbCBcIi5lcnJvclwiKSBhcnJheS1zZXEpXVxyXG4gIChsZXRcclxuICAgW3Nob3ctZXJyb3ItaWNvbiFcclxuICAgIChmbiBbZWxlbV0gKHNldCEgKC4tZGlzcGxheSAoLi1zdHlsZSBlbGVtKSkgXCJpbmxpbmUtYmxvY2tcIikpXHJcbiAgICBzaG93LWVycm9yLWljb24hXHJcbiAgICAoZGVib3VuY2Ugc2hvdy1lcnJvci1pY29uISAxMDAwKV1cclxuICAgKHNob3ctZXJyb3ItaWNvbiEgZWxlbSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgZWxlbVxyXG4gICBcIm1vdXNlZW50ZXJcIlxyXG4gICAoZm4qIFtwMV9fNDkwMjgjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMjgjKSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgZWxlbVxyXG4gICBcIm1vdXNlbGVhdmVcIlxyXG4gICAoZm4qIFtwMV9fNDkwMjkjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMjkjKSkpKVxyXG4gKGRvc2VxXHJcbiAgW1tlbGVtIGNsYXNzLW5hbWVdIChyYWluYm93LWRlbGltaXRlcnMgY29udGVudCAtMSldXHJcbiAgKC5hZGQgKC4tY2xhc3NMaXN0IGVsZW0pIGNsYXNzLW5hbWUpKSlcclxuIn0gezpzeW0gYXBwZW5kLXRleHQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yIHRleHRdKX0sIDpzb3VyY2UgIihkZWZuIGFwcGVuZC10ZXh0IFtlZGl0b3IgdGV4dF0gKGFwcGVuZC10ZXh0ISBlZGl0b3IgdGV4dCkpXHJcbiJ9IHs6c3ltIHByZXZlbnQtZGVmYXVsdD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXZlbnQgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZXZlbnQtZGVmYXVsdD9cclxuIFtldmVudCBvcHRzXVxyXG4gKGJvb2xlYW5cclxuICAob3JcclxuICAgKGtleS1uYW1lPyBldmVudCA6dW5kby1vci1yZWRvKVxyXG4gICAoa2V5LW5hbWU/IGV2ZW50IDp0YWIpXHJcbiAgIChrZXktbmFtZT8gZXZlbnQgOmVudGVyKVxyXG4gICAoYW5kXHJcbiAgICAob3IgKDpjb25zb2xlLWNhbGxiYWNrIG9wdHMpICguLWFsdEtleSBldmVudCkpXHJcbiAgICAob3IgKGtleS1uYW1lPyBldmVudCA6dXAtYXJyb3cpIChrZXktbmFtZT8gZXZlbnQgOmRvd24tYXJyb3cpKSkpKSlcclxuIn0gezpzeW0gaW5pdGlhbGl6ZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gaW5pdC1hbGwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbJiBbb3B0c11dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LWFsbFxyXG4gWyYgW29wdHNdXVxyXG4gKGRvc2VxXHJcbiAgW3BzICgtPiBqcy9kb2N1bWVudCAoLnF1ZXJ5U2VsZWN0b3JBbGwgXCIucGFyZW4tc291cFwiKSBhcnJheS1zZXEpXVxyXG4gIChpbml0IHBzIChvciBvcHRzICNqcyB7fSkpKSlcclxuIn0gezpzeW0gYWRkLXBhcmluZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VuYWJsZT8gY29uc29sZS1zdGFydC1udW0gc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtcGFyaW5mZXJcclxuIFtlbmFibGU/IGNvbnNvbGUtc3RhcnQtbnVtIHN0YXRlXVxyXG4gKGlmXHJcbiAgZW5hYmxlP1xyXG4gIChsZXRcclxuICAgW2Nyb3BwZWQtc3RhdGVcclxuICAgICg6Y3JvcHBlZC1zdGF0ZSBzdGF0ZSlcclxuICAgIGluZGVudC10eXBlXHJcbiAgICAoOmluZGVudC10eXBlIHN0YXRlKVxyXG4gICAgc3RhdGVcclxuICAgIChjb25kXHJcbiAgICAgKHBvcz8gY29uc29sZS1zdGFydC1udW0pXHJcbiAgICAgKGFkZC1wYXJpbmZlci1hZnRlci1jb25zb2xlLXN0YXJ0IGNvbnNvbGUtc3RhcnQtbnVtIHN0YXRlKVxyXG4gICAgIGluZGVudC10eXBlXHJcbiAgICAgKGNwL2FkZC1pbmRlbnQgc3RhdGUpXHJcbiAgICAgOmVsc2VcclxuICAgICAoY3AvYWRkLXBhcmluZmVyIDpwYXJlbiBzdGF0ZSkpXVxyXG4gICAoaWZcclxuICAgIChhbmQgY3JvcHBlZC1zdGF0ZSBpbmRlbnQtdHlwZSlcclxuICAgIChhc3NvY1xyXG4gICAgIHN0YXRlXHJcbiAgICAgOmNyb3BwZWQtc3RhdGVcclxuICAgICAobWVyZ2VcclxuICAgICAgY3JvcHBlZC1zdGF0ZVxyXG4gICAgICAoY3AvYWRkLWluZGVudCAoYXNzb2MgY3JvcHBlZC1zdGF0ZSA6aW5kZW50LXR5cGUgaW5kZW50LXR5cGUpKSkpXHJcbiAgICBzdGF0ZSkpXHJcbiAgc3RhdGUpKVxyXG4ifSB7OnN5bSB1bmRvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvcl0pfSwgOnNvdXJjZSAiKGRlZm4gdW5kbyBbZWRpdG9yXSAodW5kbyEgZWRpdG9yKSlcclxuIn0gezpzeW0gb2JqPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgb2JqPyAoZm4qIFtwMV9fNDkwMjYjXSAoaW5zdGFuY2U/IGpzL09iamVjdCBwMV9fNDkwMjYjKSkpXHJcbiJ9IHs6c3ltIGRvd24hLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgYWx0P10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gYWRkLWV2ZW50LWxpc3RlbmVycyEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCBldmVudHMtY2hhbiBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWV2ZW50LWxpc3RlbmVycyFcclxuIFtjb250ZW50IGV2ZW50cy1jaGFuIG9wdHNdXHJcbiAoZG90b1xyXG4gIGNvbnRlbnRcclxuICAoZXZlbnRzL3JlbW92ZUFsbClcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBcImtleWRvd25cIlxyXG4gICAoZm5cclxuICAgIFtlXVxyXG4gICAgKHdoZW4gKHByZXZlbnQtZGVmYXVsdD8gZSBvcHRzKSAoLnByZXZlbnREZWZhdWx0IGUpKVxyXG4gICAgKHB1dCEgZXZlbnRzLWNoYW4gZSkpKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIFwia2V5dXBcIlxyXG4gICAoZm4qIFtwMV9fNDkwMzMjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMzMjKSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgXCJjdXRcIlxyXG4gICAoZm4qIFtwMV9fNDkwMzQjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMzQjKSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgXCJwYXN0ZVwiXHJcbiAgIChmbiogW3AxX180OTAzNSNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAzNSMpKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBcIm1vdXNldXBcIlxyXG4gICAoZm4qIFtwMV9fNDkwMzYjXSAocHV0ISBldmVudHMtY2hhbiBwMV9fNDkwMzYjKSkpKSlcclxuIn0gezpzeW0gcmVzZXQtZWRpdC1oaXN0b3J5ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIHN0YXJ0XSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBoaWRlLWVycm9yLW1lc3NhZ2VzISwgOm1ldGEgezpkb2MgIkhpZGVzIGFsbCBlcnJvciBwb3B1cHMuIiwgOmFyZ2xpc3RzIChbcGFyZW50LWVsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoaWRlLWVycm9yLW1lc3NhZ2VzIVxyXG4gXCJIaWRlcyBhbGwgZXJyb3IgcG9wdXBzLlwiXHJcbiBbcGFyZW50LWVsZW1dXHJcbiAoZG9zZXFcclxuICBbZWxlbSAoLT4gcGFyZW50LWVsZW0gKC5xdWVyeVNlbGVjdG9yQWxsIFwiLmVycm9yLXRleHRcIikgYXJyYXktc2VxKV1cclxuICAoLnJlbW92ZUNoaWxkIHBhcmVudC1lbGVtIGVsZW0pKSlcclxuIn0gezpzeW0gRWRpdG9yLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoYXBwZW5kLXRleHQhIGNhbi1yZWRvPyBjYW4tdW5kbz8gZG93biEgZWRpdC1hbmQtcmVmcmVzaCEgZW50ZXIhIGV2YWwhIGluaXRpYWxpemUhIHJlZG8hIHJlZnJlc2ghIHJlZnJlc2gtYWZ0ZXItY3V0LXBhc3RlISByZWZyZXNoLWFmdGVyLWtleS1ldmVudCEgcmVzZXQtZWRpdC1oaXN0b3J5ISB0YWIhIHVuZG8hIHVwISB1cGRhdGUtY3Vyc29yLXBvc2l0aW9uISl9KSwgY2xqcy50b29scy5yZWFkZXIuaW1wbC5jb21tb25zICh7OnN5bSBtYXRjaC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hdGNoLW51bWJlclxyXG4gW3NdXHJcbiAoaWZcclxuICAobWF0Y2hlcz8gaW50LXBhdHRlcm4gcylcclxuICAobWF0Y2gtaW50IHMpXHJcbiAgKGlmXHJcbiAgIChtYXRjaGVzPyBmbG9hdC1wYXR0ZXJuIHMpXHJcbiAgIChtYXRjaC1mbG9hdCBzKVxyXG4gICAod2hlbiAobWF0Y2hlcz8gcmF0aW8tcGF0dGVybiBzKSAobWF0Y2gtcmF0aW8gcykpKSkpXHJcbiJ9IHs6c3ltIHNraXAtbGluZSwgOm1ldGEgezpkb2MgIkFkdmFuY2VzIHRoZSByZWFkZXIgdG8gdGhlIGVuZCBvZiBhIGxpbmUuIFJldHVybnMgdGhlIHJlYWRlciIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNraXAtbGluZVxyXG4gXCJBZHZhbmNlcyB0aGUgcmVhZGVyIHRvIHRoZSBlbmQgb2YgYSBsaW5lLiBSZXR1cm5zIHRoZSByZWFkZXJcIlxyXG4gW3JlYWRlcl1cclxuIChsb29wIFtdICh3aGVuLW5vdCAobmV3bGluZT8gKHJlYWQtY2hhciByZWFkZXIpKSAocmVjdXIpKSlcclxuIHJlYWRlcilcclxuIn0gezpzeW0gaW50LXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnQtcGF0dGVyblxyXG4gI1wiXihbLStdPykoPzooMCl8KFsxLTldWzAtOV0qKXwwW3hYXShbMC05QS1GYS1mXSspfDAoWzAtN10rKXwoWzEtOV1bMC05XT8pW3JSXShbMC05QS1aYS16XSspfDBbMC05XSspKE4pPyRcIilcclxuIn0gezpzeW0gcmVhZC1jb21tZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciAmIF9dKX0sIDpzb3VyY2UgIihkZWZuIHJlYWQtY29tbWVudCBbcmRyICYgX10gKHNraXAtbGluZSByZHIpKVxyXG4ifSB7OnN5bSBwYXJzZS1zeW1ib2wsIDptZXRhIHs6ZG9jICJQYXJzZXMgYSBzdHJpbmcgaW50byBhIHZlY3RvciBvZiB0aGUgbmFtZXNwYWNlIGFuZCBzeW1ib2wiLCA6YXJnbGlzdHMgKFt0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLXN5bWJvbFxyXG4gXCJQYXJzZXMgYSBzdHJpbmcgaW50byBhIHZlY3RvciBvZiB0aGUgbmFtZXNwYWNlIGFuZCBzeW1ib2xcIlxyXG4gW3Rva2VuXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yXHJcbiAgIChpZGVudGljYWw/IFwiXCIgdG9rZW4pXHJcbiAgICh0cnVlPyAoLnRlc3QgI1wiOiRcIiB0b2tlbikpXHJcbiAgICh0cnVlPyAoLnRlc3QgI1wiXjo6XCIgdG9rZW4pKSlcclxuICAobGV0XHJcbiAgIFtucy1pZHhcclxuICAgICguaW5kZXhPZiB0b2tlbiBcIi9cIilcclxuICAgIG5zXHJcbiAgICAod2hlbiAocG9zPyBucy1pZHgpIChzdWJzIHRva2VuIDAgbnMtaWR4KSldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IG5zKVxyXG4gICAgKGxldFxyXG4gICAgIFtucy1pZHggKGluYyBucy1pZHgpXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAoPT0gbnMtaWR4IChjb3VudCB0b2tlbikpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtzeW0gKHN1YnMgdG9rZW4gbnMtaWR4KV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgKGFuZFxyXG4gICAgICAgICAobm90IChudW1lcmljPyAobnRoIHN5bSAwKSkpXHJcbiAgICAgICAgIChub3QgKGlkZW50aWNhbD8gXCJcIiBzeW0pKVxyXG4gICAgICAgICAoZmFsc2U/ICgudGVzdCAjXCI6JFwiIG5zKSlcclxuICAgICAgICAgKG9yIChpZGVudGljYWw/IHN5bSBcIi9cIikgKD09IC0xICguaW5kZXhPZiBzeW0gXCIvXCIpKSkpXHJcbiAgICAgICAgW25zIHN5bV0pKSkpXHJcbiAgICAod2hlblxyXG4gICAgIChvciAoaWRlbnRpY2FsPyB0b2tlbiBcIi9cIikgKD09IC0xICguaW5kZXhPZiB0b2tlbiBcIi9cIikpKVxyXG4gICAgIFtuaWwgdG9rZW5dKSkpKSlcclxuIn0gezpzeW0gbnVtYmVyLWxpdGVyYWw/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgdGhlIHJlYWRlciBpcyBhdCB0aGUgc3RhcnQgb2YgYSBudW1iZXIgbGl0ZXJhbCIsIDphcmdsaXN0cyAoW3JlYWRlciBpbml0Y2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1iZXItbGl0ZXJhbD9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgdGhlIHJlYWRlciBpcyBhdCB0aGUgc3RhcnQgb2YgYSBudW1iZXIgbGl0ZXJhbFwiXHJcbiBbcmVhZGVyIGluaXRjaF1cclxuIChvclxyXG4gIChudW1lcmljPyBpbml0Y2gpXHJcbiAgKGFuZFxyXG4gICAob3IgKGlkZW50aWNhbD8gXFwrIGluaXRjaCkgKGlkZW50aWNhbD8gXFwtIGluaXRjaCkpXHJcbiAgIChudW1lcmljPyAocGVlay1jaGFyIHJlYWRlcikpKSkpXHJcbiJ9IHs6c3ltIHJlYWQtcGFzdCwgOm1ldGEgezpkb2MgIlJlYWQgdW50aWwgZmlyc3QgY2hhcmFjdGVyIHRoYXQgZG9lc24ndCBtYXRjaCBwcmVkLCByZXR1cm5pbmdcbiAgIGNoYXIuIiwgOmFyZ2xpc3RzIChbcHJlZCByZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXBhc3RcclxuIFwiUmVhZCB1bnRpbCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IG1hdGNoIHByZWQsIHJldHVybmluZ1xcbiAgIGNoYXIuXCJcclxuIFtwcmVkIHJkcl1cclxuIChsb29wIFtjaCAocmVhZC1jaGFyIHJkcildIChpZiAocHJlZCBjaCkgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSkgY2gpKSlcclxuIn0gezpzeW0gZmxvYXQtcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZmxvYXQtcGF0dGVybiAjXCIoWy0rXT9bMC05XSsoXFwuWzAtOV0qKT8oW2VFXVstK10/WzAtOV0rKT8pKE0pP1wiKVxyXG4ifSB7OnN5bSBtYXRjaGVzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwYXR0ZXJuIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXRjaGVzP1xyXG4gW3BhdHRlcm4gc11cclxuIChsZXQgW1ttYXRjaF0gKHJlLWZpbmQgcGF0dGVybiBzKV0gKGlkZW50aWNhbD8gbWF0Y2ggcykpKVxyXG4ifSB7OnN5bSB0aHJvd2luZy1yZWFkZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbXNnXSl9LCA6c291cmNlICIoZGVmbiB0aHJvd2luZy1yZWFkZXIgW21zZ10gKGZuIFtyZHIgJiBfXSAocmVhZGVyLWVycm9yIHJkciBtc2cpKSlcclxuIn0gezpzeW0gcmF0aW8tcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcmF0aW8tcGF0dGVybiAjXCIoWy0rXT9bMC05XSspLyhbMC05XSspXCIpXHJcbiJ9KSwgY2xqcy50b29scy5yZWFkZXIuZWRuICh7OnN5bSByZWFkLCA6bWV0YSB7OmRvYyAiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUgb3RoZXJ3aXNlIHJldHVybnMgZW9mLlxuICAgSWYgbm8gcmVhZGVyIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cblxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcblxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQgZG9lc24ndCBkZXBlbmQgb24gZHluYW1pYyBWYXJzLCBhbGwgY29uZmlndXJhdGlvblxuICAgaXMgZG9uZSBieSBwYXNzaW5nIGFuIG9wdCBtYXAuXG5cbiAgIG9wdHMgaXMgYSBtYXAgdGhhdCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleXM6XG4gICA6ZW9mIC0gdmFsdWUgdG8gcmV0dXJuIG9uIGVuZC1vZi1maWxlLiBXaGVuIG5vdCBzdXBwbGllZCwgZW9mIHRocm93cyBhbiBleGNlcHRpb24uXG4gICA6cmVhZGVycyAgLSBhIG1hcCBvZiB0YWcgc3ltYm9scyB0byBkYXRhLXJlYWRlciBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZCBiZWZvcmUgZGVmYXVsdC1kYXRhLXJlYWRlcnMuXG4gICAgICAgICAgICAgIFdoZW4gbm90IHN1cHBsaWVkLCBvbmx5IHRoZSBkZWZhdWx0LWRhdGEtcmVhZGVycyB3aWxsIGJlIHVzZWQuXG4gICA6ZGVmYXVsdCAtIEEgZnVuY3Rpb24gb2YgdHdvIGFyZ3MsIHRoYXQgd2lsbCwgaWYgcHJlc2VudCBhbmQgbm8gcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyxcbiAgICAgICAgICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHRhZyBhbmQgdGhlIHZhbHVlLiIsIDphcmdsaXN0cyBbW3JlYWRlcl0gW3s6a2V5cyBbZW9mXSwgOmFzIG9wdHN9IHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IGVvZiBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZFxyXG4gXCJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxcbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUgb3RoZXJ3aXNlIHJldHVybnMgZW9mLlxcbiAgIElmIG5vIHJlYWRlciBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXFxuXFxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XFxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXFxuXFxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQgZG9lc24ndCBkZXBlbmQgb24gZHluYW1pYyBWYXJzLCBhbGwgY29uZmlndXJhdGlvblxcbiAgIGlzIGRvbmUgYnkgcGFzc2luZyBhbiBvcHQgbWFwLlxcblxcbiAgIG9wdHMgaXMgYSBtYXAgdGhhdCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleXM6XFxuICAgOmVvZiAtIHZhbHVlIHRvIHJldHVybiBvbiBlbmQtb2YtZmlsZS4gV2hlbiBub3Qgc3VwcGxpZWQsIGVvZiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxcbiAgIDpyZWFkZXJzICAtIGEgbWFwIG9mIHRhZyBzeW1ib2xzIHRvIGRhdGEtcmVhZGVyIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBkZWZhdWx0LWRhdGEtcmVhZGVycy5cXG4gICAgICAgICAgICAgIFdoZW4gbm90IHN1cHBsaWVkLCBvbmx5IHRoZSBkZWZhdWx0LWRhdGEtcmVhZGVycyB3aWxsIGJlIHVzZWQuXFxuICAgOmRlZmF1bHQgLSBBIGZ1bmN0aW9uIG9mIHR3byBhcmdzLCB0aGF0IHdpbGwsIGlmIHByZXNlbnQgYW5kIG5vIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcsXFxuICAgICAgICAgICAgICBiZSBjYWxsZWQgd2l0aCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuXCJcclxuIChbcmVhZGVyXSAocmVhZCB7fSByZWFkZXIpKVxyXG4gKFt7OmtleXMgW2VvZl0sIDphcyBvcHRzfSByZWFkZXJdXHJcbiAgKGxldFxyXG4gICBbZW9mLWVycm9yPyAobm90IChjb250YWlucz8gb3B0cyA6ZW9mKSldXHJcbiAgIChyZWFkIHJlYWRlciBlb2YtZXJyb3I/IGVvZiBvcHRzKSkpXHJcbiAoW3JlYWRlciBlb2YtZXJyb3I/IGVvZiBvcHRzXVxyXG4gICh0cnlcclxuICAgKGxvb3BcclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW2NoIChyZWFkLWNoYXIgcmVhZGVyKV1cclxuICAgICAoY29uZFxyXG4gICAgICAod2hpdGVzcGFjZT8gY2gpXHJcbiAgICAgIChyZWN1cilcclxuICAgICAgKG5pbD8gY2gpXHJcbiAgICAgIChpZiBlb2YtZXJyb3I/IChlcnIvdGhyb3ctZW9mLWVycm9yIHJlYWRlciBuaWwpIGVvZilcclxuICAgICAgKG51bWJlci1saXRlcmFsPyByZWFkZXIgY2gpXHJcbiAgICAgIChyZWFkLW51bWJlciByZWFkZXIgY2ggb3B0cylcclxuICAgICAgOmVsc2VcclxuICAgICAgKGxldFxyXG4gICAgICAgW2YgKG1hY3JvcyBjaCldXHJcbiAgICAgICAoaWZcclxuICAgICAgICBmXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbcmVzIChmIHJlYWRlciBjaCBvcHRzKV1cclxuICAgICAgICAgKGlmIChpZGVudGljYWw/IHJlcyByZWFkZXIpIChyZWN1cikgcmVzKSlcclxuICAgICAgICAocmVhZC1zeW1ib2wgcmVhZGVyIGNoKSkpKSkpXHJcbiAgIChjYXRjaFxyXG4gICAganMvRXJyb3JcclxuICAgIGVcclxuICAgIChpZlxyXG4gICAgIChleC1pbmZvPyBlKVxyXG4gICAgIChsZXRcclxuICAgICAgW2QgKGV4LWRhdGEgZSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD0gOnJlYWRlci1leGNlcHRpb24gKDp0eXBlIGQpKVxyXG4gICAgICAgKHRocm93IGUpXHJcbiAgICAgICAodGhyb3dcclxuICAgICAgICAoZXgtaW5mb1xyXG4gICAgICAgICAoLi1tZXNzYWdlIGUpXHJcbiAgICAgICAgIChtZXJnZVxyXG4gICAgICAgICAgezp0eXBlIDpyZWFkZXItZXhjZXB0aW9ufVxyXG4gICAgICAgICAgZFxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGluZGV4aW5nLXJlYWRlcj8gcmVhZGVyKVxyXG4gICAgICAgICAgIHs6bGluZSAoZ2V0LWxpbmUtbnVtYmVyIHJlYWRlciksXHJcbiAgICAgICAgICAgIDpjb2x1bW4gKGdldC1jb2x1bW4tbnVtYmVyIHJlYWRlciksXHJcbiAgICAgICAgICAgIDpmaWxlIChnZXQtZmlsZS1uYW1lIHJlYWRlcil9KSlcclxuICAgICAgICAgZSkpKSlcclxuICAgICAodGhyb3dcclxuICAgICAgKGV4LWluZm9cclxuICAgICAgICguLW1lc3NhZ2UgZSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIHs6dHlwZSA6cmVhZGVyLWV4Y2VwdGlvbn1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGluZGV4aW5nLXJlYWRlcj8gcmVhZGVyKVxyXG4gICAgICAgICB7OmxpbmUgKGdldC1saW5lLW51bWJlciByZWFkZXIpLFxyXG4gICAgICAgICAgOmNvbHVtbiAoZ2V0LWNvbHVtbi1udW1iZXIgcmVhZGVyKSxcclxuICAgICAgICAgIDpmaWxlIChnZXQtZmlsZS1uYW1lIHJlYWRlcil9KSlcclxuICAgICAgIGUpKSkpKSkpXHJcbiJ9IHs6c3ltIHJlYWQtc3RyaW5nLCA6bWV0YSB7OmRvYyAiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXG5cbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXG5cbiAgIG9wdHMgaXMgYSBtYXAgYXMgcGVyIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkIiwgOmFyZ2xpc3RzIFtbc10gW29wdHMgc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc3RyaW5nXHJcbiBcIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXFxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cXG5cXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcXG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcXG5cXG4gICBvcHRzIGlzIGEgbWFwIGFzIHBlciBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZFwiXHJcbiAoW3NdIChyZWFkLXN0cmluZyB7OmVvZiBuaWx9IHMpKVxyXG4gKFtvcHRzIHNdXHJcbiAgKHdoZW4gKGFuZCBzIChub3Q9IHMgXCJcIikpIChyZWFkIG9wdHMgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMpKSkpKVxyXG4ifSksIGNsanMuc291cmNlLW1hcC5iYXNlNjQtdmxxICh7OnN5bSBlbmNvZGUtdmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbmNvZGUtdmFsXHJcbiBbbl1cclxuIChsZXRcclxuICBbc2IgKFN0cmluZ0J1ZmZlci4pIHZscSAodG8tdmxxLXNpZ25lZCBuKV1cclxuICAobG9vcFxyXG4gICBbZGlnaXRcclxuICAgIChiaXQtYW5kIHZscSB2bHEtYmFzZS1tYXNrKVxyXG4gICAgdmxxXHJcbiAgICAoYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsbCB2bHEgdmxxLWJhc2Utc2hpZnQpXVxyXG4gICAoaWZcclxuICAgIChwb3M/IHZscSlcclxuICAgIChsZXRcclxuICAgICBbZGlnaXQgKGJpdC1vciBkaWdpdCB2bHEtY29udGludWF0aW9uLWJpdCldXHJcbiAgICAgKC5hcHBlbmQgc2IgKGJhc2U2NC9lbmNvZGUgZGlnaXQpKVxyXG4gICAgIChyZWN1clxyXG4gICAgICAoYml0LWFuZCB2bHEgdmxxLWJhc2UtbWFzaylcclxuICAgICAgKGJpdC1zaGlmdC1yaWdodC16ZXJvLWZpbGwgdmxxIHZscS1iYXNlLXNoaWZ0KSkpXHJcbiAgICAoLmFwcGVuZCBzYiAoYmFzZTY0L2VuY29kZSBkaWdpdCkpKSlcclxuICAoc3RyIHNiKSkpXHJcbiJ9IHs6c3ltIGVuY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmbiBlbmNvZGUgW3ZdIChhcHBseSBzdHIgKG1hcCBlbmNvZGUtdmFsIHYpKSlcclxuIn0gezpzeW0gdmxxLWNvbnRpbnVhdGlvbi1iaXQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHZscS1jb250aW51YXRpb24tYml0IHZscS1iYXNlKVxyXG4ifSB7OnN5bSB2bHEtYmFzZS1tYXNrLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB2bHEtYmFzZS1tYXNrIChkZWMgdmxxLWJhc2UpKVxyXG4ifSB7OnN5bSBkZWNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlY29kZVxyXG4gW3NdXHJcbiAobGV0XHJcbiAgW2wgKC4tbGVuZ3RoIHMpXVxyXG4gIChsb29wXHJcbiAgIFtpIDAgcmVzdWx0IDAgc2hpZnQgMF1cclxuICAgKHdoZW5cclxuICAgICg+PSBpIGwpXHJcbiAgICAodGhyb3cgKGpzL0Vycm9yLiBcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKSkpXHJcbiAgIChsZXRcclxuICAgIFtkaWdpdCAoYmFzZTY0L2RlY29kZSAoLmNoYXJBdCBzIGkpKV1cclxuICAgIChsZXRcclxuICAgICBbaVxyXG4gICAgICAoaW5jIGkpXHJcbiAgICAgIGNvbnRpbnVhdGlvbj9cclxuICAgICAgKHBvcz8gKGJpdC1hbmQgZGlnaXQgdmxxLWNvbnRpbnVhdGlvbi1iaXQpKVxyXG4gICAgICBkaWdpdFxyXG4gICAgICAoYml0LWFuZCBkaWdpdCB2bHEtYmFzZS1tYXNrKVxyXG4gICAgICByZXN1bHRcclxuICAgICAgKCsgcmVzdWx0IChiaXQtc2hpZnQtbGVmdCBkaWdpdCBzaGlmdCkpXHJcbiAgICAgIHNoaWZ0XHJcbiAgICAgICgrIHNoaWZ0IHZscS1iYXNlLXNoaWZ0KV1cclxuICAgICAoaWZcclxuICAgICAgY29udGludWF0aW9uP1xyXG4gICAgICAocmVjdXIgaSByZXN1bHQgc2hpZnQpXHJcbiAgICAgIChsYXp5LXNlcVxyXG4gICAgICAgKGNvbnNcclxuICAgICAgICAoZnJvbS12bHEtc2lnbmVkIHJlc3VsdClcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzICguc3Vic3RyaW5nIHMgaSldXHJcbiAgICAgICAgICh3aGVuLW5vdCAoc3RyaW5nL2JsYW5rPyBzKSAoZGVjb2RlIHMpKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSB2bHEtYmFzZS1zaGlmdCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdmxxLWJhc2Utc2hpZnQgNSlcclxuIn0gezpzeW0gZnJvbS12bHEtc2lnbmVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmcm9tLXZscS1zaWduZWRcclxuIFt2XVxyXG4gKGxldFxyXG4gIFtuZWc/ICg9IChiaXQtYW5kIHYgMSkgMSkgc2hpZnRlZCAoYml0LXNoaWZ0LXJpZ2h0IHYgMSldXHJcbiAgKGlmIG5lZz8gKC0gc2hpZnRlZCkgc2hpZnRlZCkpKVxyXG4ifSB7OnN5bSB0by12bHEtc2lnbmVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0by12bHEtc2lnbmVkXHJcbiBbdl1cclxuIChpZlxyXG4gIChuZWc/IHYpXHJcbiAgKGluYyAoYml0LXNoaWZ0LWxlZnQgKC0gdikgMSkpXHJcbiAgKCsgKGJpdC1zaGlmdC1sZWZ0IHYgMSkgMCkpKVxyXG4ifSB7OnN5bSB2bHEtYmFzZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdmxxLWJhc2UgKGJpdC1zaGlmdC1sZWZ0IDEgdmxxLWJhc2Utc2hpZnQpKVxyXG4ifSksIGV4cG91bmQuYW5zaSAoezpzeW0gKnByaW50LXN0eWxlcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqcHJpbnQtc3R5bGVzKlxyXG4gezpnb29kLWtleSBbOmdyZWVuXSxcclxuICA6d2FybmluZy1rZXkgWzpib2xkXSxcclxuICA6Y29ycmVjdC1rZXkgWzpncmVlbl0sXHJcbiAgOmhpZ2hsaWdodCBbOmJvbGRdLFxyXG4gIDpmb2N1cy1wYXRoIFs6bWFnZW50YV0sXHJcbiAgOmJhZC12YWx1ZSBbOnJlZF0sXHJcbiAgOmZvb3RlciBbOmN5YW5dLFxyXG4gIDpoZWFkZXIgWzpjeWFuXSxcclxuICA6Z29vZC1wcmVkIFs6Z3JlZW5dLFxyXG4gIDpnb29kIFs6Z3JlZW5dLFxyXG4gIDpmb2N1cy1rZXkgWzpib2xkXSxcclxuICA6cG9pbnRlciBbOm1hZ2VudGFdLFxyXG4gIDpiYWQgWzpyZWRdLFxyXG4gIDplcnJvci1rZXkgWzpyZWRdLFxyXG4gIDpub25lIFs6bm9uZV0sXHJcbiAgOm1lc3NhZ2UgWzptYWdlbnRhXX0pXHJcbiJ9IHs6c3ltICplbmFibGUtY29sb3IqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZW5hYmxlLWNvbG9yKiBmYWxzZSlcclxuIn0gezpzeW0gc2dyLWNvZGUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBzZ3ItY29kZVxyXG4gXCJNYXAgb2Ygc3ltYm9scyB0byBudW1lcmljIFNHUiAoc2VsZWN0IGdyYXBoaWMgcmVuZGl0aW9uKSBjb2Rlcy5cIlxyXG4gezpib2xkIDEsXHJcbiAgOmJsaW5rIDUsXHJcbiAgOndoaXRlIDM3LFxyXG4gIDp5ZWxsb3cgMzMsXHJcbiAgOmJnLXJlZCA0MSxcclxuICA6YmctY3lhbiA0NixcclxuICA6Z3JlZW4gMzIsXHJcbiAgOmJnLWdyZWVuIDQyLFxyXG4gIDpmZy1yZXNldCAzOSxcclxuICA6Y3lhbiAzNixcclxuICA6YmctYmxhY2sgNDAsXHJcbiAgOmZnLTI1NiAzOCxcclxuICA6dW5kZXJsaW5lIDMsXHJcbiAgOmJnLW1hZ2VudGEgNDUsXHJcbiAgOnN0cmlrZSA5LFxyXG4gIDpiZy15ZWxsb3cgNDMsXHJcbiAgOmhpZGRlbiA4LFxyXG4gIDpyZWQgMzEsXHJcbiAgOmJsdWUgMzQsXHJcbiAgOmJnLXdoaXRlIDQ3LFxyXG4gIDpiZy0yNTYgNDgsXHJcbiAgOm1hZ2VudGEgMzUsXHJcbiAgOmJnLWJsdWUgNDQsXHJcbiAgOmJnLXJlc2V0IDQ5LFxyXG4gIDpub25lIDAsXHJcbiAgOnJldmVyc2UgNyxcclxuICA6YmxhY2sgMzB9KVxyXG4ifSB7OnN5bSBlc2NhcGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIEFOU0kgZXNjb3BlIHN0cmluZyB3aGljaCB3aWxsIGVuYWN0IHRoZSBnaXZlbiBTR1IgY29kZXMuIiwgOmFyZ2xpc3RzIChbJiBjb2Rlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY2FwZVxyXG4gXCJSZXR1cm5zIGFuIEFOU0kgZXNjb3BlIHN0cmluZyB3aGljaCB3aWxsIGVuYWN0IHRoZSBnaXZlbiBTR1IgY29kZXMuXCJcclxuIFsmIGNvZGVzXVxyXG4gKGVzYyBjb2RlcykpXHJcbiJ9IHs6c3ltIGNvbG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3MgJiBzdHlsZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xvclxyXG4gW3MgJiBzdHlsZXNdXHJcbiAoaWYgKmVuYWJsZS1jb2xvciogKGFwcGx5IHNnciBzIChyZXNvbHZlLXN0eWxlcyBzdHlsZXMpKSBzKSlcclxuIn0gezpzeW0gZXNjLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBBTlNJIGVzY29wZSBzdHJpbmcgd2hpY2ggd2lsbCBhcHBseSB0aGUgZ2l2ZW4gY29sbGVjdGlvbiBvZiBTR1JcbiAgY29kZXMuIiwgOmFyZ2xpc3RzIChbY29kZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NcclxuIFwiUmV0dXJucyBhbiBBTlNJIGVzY29wZSBzdHJpbmcgd2hpY2ggd2lsbCBhcHBseSB0aGUgZ2l2ZW4gY29sbGVjdGlvbiBvZiBTR1JcXG4gIGNvZGVzLlwiXHJcbiBbY29kZXNdXHJcbiAobGV0XHJcbiAgW2NvZGVzIChtYXAgc2dyLWNvZGUgY29kZXMgY29kZXMpIGNvZGVzIChzdHIvam9pbiBcXDsgY29kZXMpXVxyXG4gIChzdHIgXFwbIFxcWyBjb2RlcyBcXG0pKSlcclxuIn0gezpzeW0gc2dyLCA6bWV0YSB7OmRvYyAiV3JhcHMgdGhlIGdpdmVuIHN0cmluZyB3aXRoIFNHUiBlc2NhcGVzIHRvIGFwcGx5IHRoZSBnaXZlbiBjb2RlcywgdGhlbiByZXNldFxuICB0aGUgZ3JhcGhpY3MuIiwgOmFyZ2xpc3RzIChbc3RyaW5nICYgY29kZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZ3JcclxuIFwiV3JhcHMgdGhlIGdpdmVuIHN0cmluZyB3aXRoIFNHUiBlc2NhcGVzIHRvIGFwcGx5IHRoZSBnaXZlbiBjb2RlcywgdGhlbiByZXNldFxcbiAgdGhlIGdyYXBoaWNzLlwiXHJcbiBbc3RyaW5nICYgY29kZXNdXHJcbiAoc3RyIChlc2MgY29kZXMpIHN0cmluZyAoZXNjYXBlIDpub25lKSkpXHJcbiJ9IHs6c3ltIGFuc2ktY29kZT8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGFuc2ktY29kZT8gc2dyLWNvZGUpXHJcbiJ9IHs6c3ltIHN0cmlwLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBjb2xvciBjb2RlcyBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc3RyaW5nXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RyaXBcclxuIFwiUmVtb3ZlcyBjb2xvciBjb2RlcyBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuXCJcclxuIFtzdHJpbmddXHJcbiAoc3RyL3JlcGxhY2Ugc3RyaW5nICNcIlxcdTAwMWJcXFtbMC05O10qW21LXVwiIFwiXCIpKVxyXG4ifSB7OnN5bSByZXNvbHZlLXN0eWxlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdHlsZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXN0eWxlc1xyXG4gW3N0eWxlc11cclxuIChpZi1sZXRcclxuICBbcmVzXHJcbiAgIChub3QtZW1wdHlcclxuICAgIChtYXBjYXRcclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDkwMDUjXVxyXG4gICAgICAob3JcclxuICAgICAgICh3aGVuLWxldCBbcmVzICgqcHJpbnQtc3R5bGVzKiBwMV9fNDkwMDUjKV0gcmVzKVxyXG4gICAgICAgW3AxX180OTAwNSNdKSlcclxuICAgICBzdHlsZXMpKV1cclxuICByZXNcclxuICBbOmJvbGRdKSlcclxuIn0pLCBleHBvdW5kLnByaW50ZXIgKHs6c3ltIG1pc3Npbmcta2V5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLWtleVxyXG4gW2Zvcm1dXHJcbiAobGV0XHJcbiAgW1ticmFuY2ggbWF0Y2hdXHJcbiAgIChzL2NvbmZvcm0gOmV4cG91bmQuc3BlYy9jb250YWlucy1rZXktcHJlZCAobnRoIGZvcm0gMikpXVxyXG4gIChjYXNlXHJcbiAgIGJyYW5jaFxyXG4gICA6c2ltcGxlXHJcbiAgICg6a3cgbWF0Y2gpXHJcbiAgIDpjb21wb3VuZFxyXG4gICAoc3VtbWFyaXplLWtleS1jbGF1c2UgW2JyYW5jaCBtYXRjaF0pKSkpXHJcbiJ9IHs6c3ltIGluZGVudC1sZXZlbCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgaW5kZW50LWxldmVsIDIpXHJcbiJ9IHs6c3ltIG1heC1zcGVjLXN0ci13aWR0aCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbWF4LXNwZWMtc3RyLXdpZHRoIDEwMClcclxuIn0gezpzeW0gYW5vbi1mbi1zdHIsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGFub24tZm4tc3RyIFwiPGFub255bW91cyBmdW5jdGlvbj5cIilcclxuIn0gezpzeW0gcHJpbnQtc3BlYy1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Byb2JsZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtc3BlYy1rZXlzXHJcbiBbcHJvYmxlbXNdXHJcbiAobGV0XHJcbiAgW2tleXNcclxuICAgKGtleXdvcmRzXHJcbiAgICAobWFwXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDA3I10gKG1pc3Npbmcta2V5ICg6cHJlZCBwMV9fNDkwMDcjKSkpXHJcbiAgICAgcHJvYmxlbXMpKV1cclxuICAoaWZcclxuICAgKGFuZFxyXG4gICAgKGVtcHR5PyAoOmV4cG91bmQvdmlhIChmaXJzdCBwcm9ibGVtcykpKVxyXG4gICAgKHNvbWUgc2ltcGxlLWtleXdvcmQ/IGtleXMpKVxyXG4gICBuaWxcclxuICAgKC0+PlxyXG4gICAgKGtleS0+c3BlYyBrZXlzIHByb2JsZW1zKVxyXG4gICAgKG1hcCAoZm4gW1trIHZdXSB7XCJrZXlcIiBrLCBcInNwZWNcIiAoc2ltcGxlLXNwZWMtb3ItbmFtZSB2KX0pKVxyXG4gICAgKHNvcnQtYnkgKGZuKiBbcDFfXzQ5MDA4I10gKGdldCBwMV9fNDkwMDgjIFwia2V5XCIpKSlcclxuICAgIChwcHJpbnQvcHJpbnQtdGFibGUgW1wia2V5XCIgXCJzcGVjXCJdKVxyXG4gICAgd2l0aC1vdXQtc3RyXHJcbiAgICBzdHJpbmcvdHJpbSkpKSlcclxuIn0gezpzeW0gc2luZ2xldG9uPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4c10pfSwgOnNvdXJjZSAiKGRlZm4gc2luZ2xldG9uPyBbeHNdICg9IDEgKGNvdW50IHhzKSkpXHJcbiJ9IHs6c3ltIGluZGVudCwgOm1ldGEgezpkb2MgIkdpdmVuIGFuIHBvdGVudGlhbGx5IG11bHRpLWxpbmUgc3RyaW5nLCByZXR1cm5zIHRoYXQgc3RyaW5nIGluZGVudGVkIGJ5XG4gICAnaW5kZW50LWxldmVsJyBzcGFjZXMuIE9wdGlvbmFsbHksIGNhbiBpbmRlbnQgZmlyc3QgbGluZSBhbmQgb3RoZXIgbGluZXNcbiAgIGRpZmZlcmVudCBhbW91bnRzLiIsIDphcmdsaXN0cyBbW3NdIFtpbmRlbnQtbGV2ZWwgc10gW2ZpcnN0LWxpbmUtaW5kZW50IHJlc3QtbGluZXMtaW5kZW50IHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRlbnRcclxuIFwiR2l2ZW4gYW4gcG90ZW50aWFsbHkgbXVsdGktbGluZSBzdHJpbmcsIHJldHVybnMgdGhhdCBzdHJpbmcgaW5kZW50ZWQgYnlcXG4gICAnaW5kZW50LWxldmVsJyBzcGFjZXMuIE9wdGlvbmFsbHksIGNhbiBpbmRlbnQgZmlyc3QgbGluZSBhbmQgb3RoZXIgbGluZXNcXG4gICBkaWZmZXJlbnQgYW1vdW50cy5cIlxyXG4gKFtzXSAoaW5kZW50IGluZGVudC1sZXZlbCBzKSlcclxuIChbaW5kZW50LWxldmVsIHNdIChpbmRlbnQgaW5kZW50LWxldmVsIGluZGVudC1sZXZlbCBzKSlcclxuIChbZmlyc3QtbGluZS1pbmRlbnQgcmVzdC1saW5lcy1pbmRlbnQgc11cclxuICAobGV0XHJcbiAgIFtbbGluZSAmIGxpbmVzXSAoc3RyaW5nL3NwbGl0LWxpbmVzIChzdHIgcykpXVxyXG4gICAoLT4+XHJcbiAgICBsaW5lc1xyXG4gICAgKG1hcFxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180OTAxMCNdXHJcbiAgICAgIChzdHIgKGFwcGx5IHN0ciAocmVwZWF0IHJlc3QtbGluZXMtaW5kZW50IFwiIFwiKSkgcDFfXzQ5MDEwIykpKVxyXG4gICAgKGludG8gWyhzdHIgKGFwcGx5IHN0ciAocmVwZWF0IGZpcnN0LWxpbmUtaW5kZW50IFwiIFwiKSkgbGluZSldKVxyXG4gICAgKHN0cmluZy9qb2luIFwiXFxuXCIpKSkpKVxyXG4ifSB7OnN5bSBzaW1wbGUtc3BlYy1vci1uYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNpbXBsZS1zcGVjLW9yLW5hbWVcclxuIFtzcGVjLW5hbWVdXHJcbiAobGV0XHJcbiAgW3NwZWMtc3RyXHJcbiAgIChlbGlkZS1zcGVjLW5zIChlbGlkZS1jb3JlLW5zIChwci1zdHIgKGV4cGFuZC1zcGVjIHNwZWMtbmFtZSkpKSldXHJcbiAgKGlmXHJcbiAgIChvclxyXG4gICAgKDwgbWF4LXNwZWMtc3RyLXdpZHRoIChjb3VudCBzcGVjLXN0cikpXHJcbiAgICAoc3RyaW5nL2luY2x1ZGVzPyBzcGVjLXN0ciBcIlxcblwiKSlcclxuICAgc3BlYy1uYW1lXHJcbiAgIHNwZWMtc3RyKSkpXHJcbiJ9IHs6c3ltIHNwZWNzLWZyb20tZm9ybSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2aWFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGVjcy1mcm9tLWZvcm1cclxuIFt2aWFdXHJcbiAobGV0XHJcbiAgW2Zvcm1cclxuICAgKHNvbWUtPiB2aWEgbGFzdCBzL2Zvcm0pXHJcbiAgIGNvbmZvcm1lZFxyXG4gICAocy9jb25mb3JtIDpleHBvdW5kLnNwZWMva2V5LXNwZWMgZm9ybSldXHJcbiAgKGlmXHJcbiAgIChhbmQgZm9ybSAobm90PSA6Y2xvanVyZS5zcGVjLmFscGhhL2ludmFsaWQgY29uZm9ybWVkKSlcclxuICAgKC0+PlxyXG4gICAgKDpjbGF1c2VzIGNvbmZvcm1lZClcclxuICAgIChtYXAgOnNwZWNzKVxyXG4gICAgKHRyZWUtc2VxIGNvbGw/IHNlcSlcclxuICAgIChmaWx0ZXIgKGZuIFt4XSAoYW5kICh2ZWN0b3I/IHgpICg9IDprdyAoZmlyc3QgeCkpKSkpXHJcbiAgICAobWFwIHNlY29uZClcclxuICAgIHNldClcclxuICAgW10pKSlcclxuIn0gezpzeW0gZWxpZGUtc3BlYy1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxpZGUtc3BlYy1uc1xyXG4gW3NdXHJcbiAjPyg6Y2xqcyAoLT4gcyAoc3RyaW5nL3JlcGxhY2UgXCJjbGpzLnNwZWMuYWxwaGEvXCIgXCJcIikgKHN0cmluZy9yZXBsYWNlIFwiY2xqcy9zcGVjL2FscGhhXCIgXCJcIikpIDpjbGogKHN0cmluZy9yZXBsYWNlIHMgXCJjbG9qdXJlLnNwZWMuYWxwaGEvXCIgXCJcIikpKVxyXG4ifSB7OnN5bSBrZXktPnNwZWMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5cyBwcm9ibGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleS0+c3BlY1xyXG4gW2tleXMgcHJvYmxlbXNdXHJcbiAoZG9zZXFcclxuICBbcCBwcm9ibGVtc11cclxuICAoYXNzZXJ0IChzb21lPyAoOmV4cG91bmQvdmlhIHApKSB1dGlsL2Fzc2VydC1tZXNzYWdlKSlcclxuIChsZXRcclxuICBbdmlhc1xyXG4gICAobWFwIDpleHBvdW5kL3ZpYSBwcm9ibGVtcylcclxuICAgc3BlY3NcclxuICAgKGlmXHJcbiAgICAoZXZlcnk/IHF1YWxpZmllZC1rZXl3b3JkPyBrZXlzKVxyXG4gICAga2V5c1xyXG4gICAgKGlmLWxldFxyXG4gICAgIFtzcGVjcyAoYXBwbHkgc2V0L3VuaW9uIChtYXAgc3BlY3MtZnJvbS1mb3JtIHZpYXMpKV1cclxuICAgICBzcGVjc1xyXG4gICAgIGtleXMpKV1cclxuICAocmVkdWNlXHJcbiAgIChmblxyXG4gICAgW20ga11cclxuICAgIChhc3NvY1xyXG4gICAgIG1cclxuICAgICBrXHJcbiAgICAgKGlmXHJcbiAgICAgIChxdWFsaWZpZWQta2V5d29yZD8gaylcclxuICAgICAga1xyXG4gICAgICAoLT4+XHJcbiAgICAgICBzcGVjc1xyXG4gICAgICAgKGZpbHRlciAoZm4qIFtwMV9fNDkwMDYjXSAoPSAobmFtZSBrKSAobmFtZSBwMV9fNDkwMDYjKSkpKVxyXG4gICAgICAgZmlyc3QpKSkpXHJcbiAgIHt9XHJcbiAgIGtleXMpKSlcclxuIn0gezpzeW0gZWxpZGUtY29yZS1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxpZGUtY29yZS1uc1xyXG4gW3NdXHJcbiAjPyg6Y2xqcyAoLT4gcyAoc3RyaW5nL3JlcGxhY2UgXCJjbGpzLmNvcmUvXCIgXCJcIikgKHN0cmluZy9yZXBsYWNlIFwiY2xqcy9jb3JlL1wiIFwiXCIpKSA6Y2xqIChzdHJpbmcvcmVwbGFjZSBzIFwiY2xvanVyZS5jb3JlL1wiIFwiXCIpKSlcclxuIn0gezpzeW0gcHJpbnQtbWlzc2luZy1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Byb2JsZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtbWlzc2luZy1rZXlzXHJcbiBbcHJvYmxlbXNdXHJcbiAobGV0XHJcbiAgW2tleXMtY2xhdXNlcyAoZGlzdGluY3QgKG1hcCAoY29tcCBtaXNzaW5nLWtleSA6cHJlZCkgcHJvYmxlbXMpKV1cclxuICAoaWZcclxuICAgKGV2ZXJ5PyBrZXl3b3JkPyBrZXlzLWNsYXVzZXMpXHJcbiAgIChzdHJpbmcvam9pblxyXG4gICAgXCIsIFwiXHJcbiAgICAobWFwXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDA5I10gKGFuc2kvY29sb3IgcDFfXzQ5MDA5IyA6Y29ycmVjdC1rZXkpKVxyXG4gICAgIChzb3J0IGtleXMtY2xhdXNlcykpKVxyXG4gICAoc3RyXHJcbiAgICBcIlxcblxcblwiXHJcbiAgICAoYW5zaS9jb2xvclxyXG4gICAgIChwcHJpbnQtc3RyXHJcbiAgICAgIChpZlxyXG4gICAgICAgKHNpbmdsZXRvbj8ga2V5cy1jbGF1c2VzKVxyXG4gICAgICAgKGZpcnN0IGtleXMtY2xhdXNlcylcclxuICAgICAgIChhcHBseSBsaXN0ICdhbmQga2V5cy1jbGF1c2VzKSkpXHJcbiAgICAgOmNvcnJlY3Qta2V5KSkpKSlcclxuIn0gezpzeW0gZXhwYW5kLXNwZWMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGFuZC1zcGVjXHJcbiBbc3BlY11cclxuIChsZXRcclxuICBbIXNlZW4tc3BlY3MgKGF0b20gI3t9KV1cclxuICAod2Fsay9wcmV3YWxrXHJcbiAgIChmblxyXG4gICAgW3hdXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKHF1YWxpZmllZC1rZXl3b3JkPyB4KVxyXG4gICAgIHhcclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtzcCAocy9nZXQtc3BlYyB4KV1cclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKGNvbnRhaW5zPyBAIXNlZW4tc3BlY3MgeClcclxuICAgICAgIChkbyAoc3dhcCEgIXNlZW4tc3BlY3MgY29uaiB4KSAocy9mb3JtIHNwKSlcclxuICAgICAgIHgpXHJcbiAgICAgIHgpKSlcclxuICAgKGlmIChzL2dldC1zcGVjIHNwZWMpIChzL2Zvcm0gc3BlYykgc3BlYykpKSlcclxuIn0gezpzeW0ga2V5d29yZHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXdvcmRzXHJcbiBbZm9ybV1cclxuICgtPj4gZm9ybSAodHJlZS1zZXEgY29sbD8gc2VxKSAoZmlsdGVyIGtleXdvcmQ/KSkpXHJcbiJ9IHs6c3ltIG5vLXRyYWlsaW5nLXdoaXRlc3BhY2UsIDptZXRhIHs6ZG9jICJHaXZlbiBhbiBwb3RlbnRpYWxseSBtdWx0aS1saW5lIHN0cmluZywgcmV0dXJucyB0aGF0IHN0cmluZyB3aXRoIGFsbFxuICB0cmFpbGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vLXRyYWlsaW5nLXdoaXRlc3BhY2VcclxuIFwiR2l2ZW4gYW4gcG90ZW50aWFsbHkgbXVsdGktbGluZSBzdHJpbmcsIHJldHVybnMgdGhhdCBzdHJpbmcgd2l0aCBhbGxcXG4gIHRyYWlsaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC5cIlxyXG4gW3NdXHJcbiAobGV0XHJcbiAgW3MnICgtPj4gcyBzdHJpbmcvc3BsaXQtbGluZXMgKG1hcCBzdHJpbmcvdHJpbXIpIChzdHJpbmcvam9pbiBcIlxcblwiKSldXHJcbiAgKGlmICg9IFxcbmV3bGluZSAobGFzdCBzKSkgKHN0ciBzJyBcIlxcblwiKSBzJykpKVxyXG4ifSB7OnN5bSBwcHJpbnQtc3RyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJldHR5LXByaW50ZWQgc3RyaW5nIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludC1zdHJcclxuIFwiUmV0dXJucyB0aGUgcHJldHR5LXByaW50ZWQgc3RyaW5nXCJcclxuIFt4XVxyXG4gKGlmIChmbj8geCkgKHBwcmludC1mbiB4KSAocHByaW50L3dyaXRlIHggOnN0cmVhbSBuaWwpKSlcclxuIn0gezpzeW0gc3VtbWFyaXplLWtleS1jbGF1c2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbW2JyYW5jaCBtYXRjaF1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdW1tYXJpemUta2V5LWNsYXVzZVxyXG4gW1ticmFuY2ggbWF0Y2hdXVxyXG4gKGNhc2VcclxuICBicmFuY2hcclxuICA6c2ltcGxlXHJcbiAgKDprdyBtYXRjaClcclxuICA6Y29tcG91bmRcclxuICAoYXBwbHlcclxuICAgbGlzdFxyXG4gICAoc3ltYm9sIChuYW1lICg6b3AgbWF0Y2gpKSlcclxuICAgKG1hcCBzdW1tYXJpemUta2V5LWNsYXVzZSAoOmNsYXVzZXMgbWF0Y2gpKSkpKVxyXG4ifSB7OnN5bSBwcHJpbnQtZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludC1mblxyXG4gW2ZdXHJcbiAoLT5cclxuICAjPyg6Y2xqIChsZXQgW1tfIG5zLW4gZi1uXSAocmUtbWF0Y2hlcyAjXCIoLiopXFwkKC4qPykoX19bMC05XSspP1wiIChzdHIgZikpXSAoaWYgKHJlLW1hdGNoZXMgI1wiXmZuX19cXGQrXFxALiokXCIgZi1uKSBhbm9uLWZuLXN0ciAoc3RyIChjbG9qdXJlLm1haW4vZGVtdW5nZSBucy1uKSBcIi9cIiAoY2xvanVyZS5tYWluL2RlbXVuZ2UgZi1uKSkpKSA6Y2xqcyAobGV0IFtmbi1wYXJ0cyAoc3RyaW5nL3NwbGl0IChzZWNvbmQgKHJlLWZpbmQgI1wib2JqZWN0XFxbKFteXFwoIFxcXV0rKS4qKFxcbnxcXF0pP1wiIChwci1zdHIgZikpKSAjXCJcXCRcIikgbnMtbiAoc3RyaW5nL2pvaW4gXCIuXCIgKGJ1dGxhc3QgZm4tcGFydHMpKSBmbi1uIChsYXN0IGZuLXBhcnRzKV0gKGlmIChlbXB0eT8gbnMtbikgYW5vbi1mbi1zdHIgKHN0ciAoZGVtdW5nZS1zdHIgbnMtbikgXCIvXCIgKGRlbXVuZ2Utc3RyIGZuLW4pKSkpKVxyXG4gIChlbGlkZS1jb3JlLW5zKVxyXG4gIChzdHJpbmcvcmVwbGFjZSAjXCItLVxcZCtcIiBcIlwiKVxyXG4gIChzdHJpbmcvcmVwbGFjZSAjXCJAW2EtekEtWjAtOV0rXCIgXCJcIikpKVxyXG4ifSksIGh0bWwtc291cC5jb3JlICh7OnN5bSBsaW5lLT5zZWdtZW50cywgOm1ldGEgezpkb2MgIlNwbGl0cyBhIGxpbmUgaW50byBzZWdtZW50cyB3aGVyZSB0YWdzIGFyZSBzdXBwb3NlZCB0byBhcHBlYXIuIiwgOmFyZ2xpc3RzIChbbGluZSB0YWdzLWZvci1saW5lIGVzY2FwZT9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLT5zZWdtZW50c1xyXG4gXCJTcGxpdHMgYSBsaW5lIGludG8gc2VnbWVudHMgd2hlcmUgdGFncyBhcmUgc3VwcG9zZWQgdG8gYXBwZWFyLlwiXHJcbiBbbGluZSB0YWdzLWZvci1saW5lIGVzY2FwZT9dXHJcbiAobGV0XHJcbiAgW2NvbHVtbnNcclxuICAgKHNldCAobWFwIDpjb2x1bW4gdGFncy1mb3ItbGluZSkpXHJcbiAgIGVzY2FwZS1odG1sLWNoYXJcclxuICAgKGlmIGVzY2FwZT8gZXNjYXBlLWh0bWwtY2hhciBpZGVudGl0eSldXHJcbiAgKGxvb3BcclxuICAgW2kgMCBzZWdtZW50cyAodHJhbnNpZW50IFtdKSBjdXJyZW50LXNlZ21lbnQgKHRyYW5zaWVudCBbXSldXHJcbiAgIChpZi1sZXRcclxuICAgIFtjIChzb21lLT4gbGluZSAoZ2V0IGkpIGVzY2FwZS1odG1sLWNoYXIpXVxyXG4gICAgKGlmXHJcbiAgICAgKGNvbnRhaW5zPyBjb2x1bW5zIChpbmMgaSkpXHJcbiAgICAgKHJlY3VyXHJcbiAgICAgIChpbmMgaSlcclxuICAgICAgKGNvbmohIHNlZ21lbnRzIChwZXJzaXN0ZW50ISBjdXJyZW50LXNlZ21lbnQpKVxyXG4gICAgICAodHJhbnNpZW50IFtjXSkpXHJcbiAgICAgKHJlY3VyIChpbmMgaSkgc2VnbWVudHMgKGNvbmohIGN1cnJlbnQtc2VnbWVudCBjKSkpXHJcbiAgICAoLT4+XHJcbiAgICAgKHBlcnNpc3RlbnQhIGN1cnJlbnQtc2VnbWVudClcclxuICAgICAoY29uaiEgc2VnbWVudHMpXHJcbiAgICAgcGVyc2lzdGVudCFcclxuICAgICAobWFwIHN0ci9qb2luKSkpKSkpXHJcbiJ9IHs6c3ltIHRhZy0+aGljY3VwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4gdGFnIGRlc2NyaXB0aW9uLiIsIDphcmdsaXN0cyAoW3RhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhZy0+aGljY3VwXHJcbiBcIlJldHVybnMgYSBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIGdpdmVuIHRhZyBkZXNjcmlwdGlvbi5cIlxyXG4gW3RhZ11cclxuIChjb25kXHJcbiAgKDpkZWxpbWl0ZXI/IHRhZylcclxuICBbOnNwYW4gezpjbGFzcyBcImRlbGltaXRlclwifV1cclxuICAoOmVycm9yPyB0YWcpXHJcbiAgWzpzcGFuIHs6Y2xhc3MgXCJlcnJvclwiLCA6ZGF0YS1tZXNzYWdlICg6bWVzc2FnZSB0YWcpfV1cclxuICAoOmJlZ2luPyB0YWcpXHJcbiAgKGxldFxyXG4gICBbdmFsdWUgKDp2YWx1ZSB0YWcpXVxyXG4gICAoY29uZFxyXG4gICAgKHN5bWJvbD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcInN5bWJvbFwifV1cclxuICAgIChsaXN0PyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwiY29sbGVjdGlvbiBsaXN0XCJ9XVxyXG4gICAgKHZlY3Rvcj8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImNvbGxlY3Rpb24gdmVjdG9yXCJ9XVxyXG4gICAgKG1hcD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImNvbGxlY3Rpb24gbWFwXCJ9XVxyXG4gICAgKHNldD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImNvbGxlY3Rpb24gc2V0XCJ9XVxyXG4gICAgKG51bWJlcj8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcIm51bWJlclwifV1cclxuICAgIChzdHJpbmc/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJzdHJpbmdcIn1dXHJcbiAgICAoa2V5d29yZD8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImtleXdvcmRcIn1dXHJcbiAgICAobmlsPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwibmlsXCJ9XVxyXG4gICAgKGNvbnRhaW5zPyAje3RydWUgZmFsc2V9IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJib29sZWFuXCJ9XVxyXG4gICAgOmVsc2VcclxuICAgIFs6c3Bhbl0pKVxyXG4gICg6ZW5kPyB0YWcpXHJcbiAgbmlsKSlcclxuIn0gezpzeW0gbGluZS0+aHRtbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGdpdmVuIGxpbmUgd2l0aCBodG1sIGFkZGVkLiIsIDphcmdsaXN0cyAoW2xpbmUgdGFncy1mb3ItbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtPmh0bWxcclxuIFwiUmV0dXJucyB0aGUgZ2l2ZW4gbGluZSB3aXRoIGh0bWwgYWRkZWQuXCJcclxuIFtsaW5lIHRhZ3MtZm9yLWxpbmVdXHJcbiAobGV0XHJcbiAgW2h0bWwtcGVyLWNvbHVtblxyXG4gICAoaW50byBbXSB0YWdzLWZvci1saW5lLT5odG1sIChzb3J0LWJ5IDpjb2x1bW4gdGFncy1mb3ItbGluZSkpXHJcbiAgIHNlZ21lbnRzXHJcbiAgIChsaW5lLT5zZWdtZW50cyBsaW5lIHRhZ3MtZm9yLWxpbmUgdHJ1ZSldXHJcbiAgKHN0ci9qb2luXHJcbiAgIChpbnRlcmxlYXZlIHNlZ21lbnRzIChjb25jYXQgaHRtbC1wZXItY29sdW1uIChyZXBlYXQgXCJcIikpKSkpKVxyXG4ifSB7OnN5bSBjb2RlLT5oaWNjdXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb2RlIGluIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMgYWRkZWQuIiwgOmFyZ2xpc3RzIChbY29kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvZGUtPmhpY2N1cFxyXG4gXCJSZXR1cm5zIHRoZSBjb2RlIGluIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMgYWRkZWQuXCJcclxuIFtjb2RlXVxyXG4gKGxldFxyXG4gIFtsaW5lc1xyXG4gICAoc3BsaXQtbGluZXMgY29kZSlcclxuICAgdGFnc1xyXG4gICAodHMvY29kZS0+dGFncyBjb2RlKVxyXG4gICBoaWNjdXBcclxuICAgKHBhcnNlLWxpbmVzIGxpbmUtPmhpY2N1cCBsaW5lcyB0YWdzKVxyXG4gICBoaWNjdXBcclxuICAgKGFwcGx5IGNvbmNhdCAoaW50ZXJwb3NlIFtcIlxcblwiXSBoaWNjdXApKV1cclxuICAoc3RydWN0dXJpemUtaGljY3VwIGhpY2N1cCkpKVxyXG4ifSB7OnN5bSBzcGxpdC1saW5lcywgOm1ldGEgezpkb2MgIlNwbGl0cyB0aGUgc3RyaW5nIGludG8gbGluZXMuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0LWxpbmVzXHJcbiBcIlNwbGl0cyB0aGUgc3RyaW5nIGludG8gbGluZXMuXCJcclxuIFtzXVxyXG4gKHZlYyAoLnNwbGl0IHMgXCJcXG5cIiAtMSkpKVxyXG4ifSB7OnN5bSBjb2RlLT5odG1sLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29kZSBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggaHRtbCBhZGRlZC4iLCA6YXJnbGlzdHMgKFtjb2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29kZS0+aHRtbFxyXG4gXCJSZXR1cm5zIHRoZSBjb2RlIGluIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBodG1sIGFkZGVkLlwiXHJcbiBbY29kZV1cclxuIChsZXRcclxuICBbbGluZXNcclxuICAgKHNwbGl0LWxpbmVzIGNvZGUpXHJcbiAgIHRhZ3NcclxuICAgKHRzL2NvZGUtPnRhZ3MgY29kZSlcclxuICAgbGluZXNcclxuICAgKHBhcnNlLWxpbmVzIGxpbmUtPmh0bWwgbGluZXMgdGFncyldXHJcbiAgKHN0ci9qb2luIFxcbmV3bGluZSBsaW5lcykpKVxyXG4ifSB7OnN5bSBsaW5lLT5oaWNjdXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBnaXZlbiBsaW5lIHdpdGggSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzIGFkZGVkLiIsIDphcmdsaXN0cyAoW2xpbmUgdGFncy1mb3ItbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtPmhpY2N1cFxyXG4gXCJSZXR1cm5zIHRoZSBnaXZlbiBsaW5lIHdpdGggSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmVzIGFkZGVkLlwiXHJcbiBbbGluZSB0YWdzLWZvci1saW5lXVxyXG4gKGxldFxyXG4gIFtoaWNjdXAtcGVyLWNvbHVtblxyXG4gICAoaW50byBbXSB0YWdzLWZvci1saW5lLT5oaWNjdXAgKHNvcnQtYnkgOmNvbHVtbiB0YWdzLWZvci1saW5lKSlcclxuICAgc2VnbWVudHNcclxuICAgKG1hcCBsaXN0IChsaW5lLT5zZWdtZW50cyBsaW5lIHRhZ3MtZm9yLWxpbmUgZmFsc2UpKV1cclxuICAoYXBwbHlcclxuICAgY29uY2F0XHJcbiAgIChpbnRlcmxlYXZlIHNlZ21lbnRzIChjb25jYXQgaGljY3VwLXBlci1jb2x1bW4gKHJlcGVhdCBuaWwpKSkpKSlcclxuIn0gezpzeW0gdGFncy1mb3ItbGluZS0+aGljY3VwLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gdGFncy1mb3ItbGluZS0+aGljY3VwXHJcbiAoY29tcFxyXG4gIChwYXJ0aXRpb24tYnkgOmNvbHVtbilcclxuICAobWFwIChmbiogW3AxX180OTAxNCNdIChtYXAgdGFnLT5oaWNjdXAgcDFfXzQ5MDE0IykpKSkpXHJcbiJ9IHs6c3ltIHRhZy0+aHRtbCwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gSFRNTCBzdHJpbmcgZm9yIHRoZSBnaXZlbiB0YWcgZGVzY3JpcHRpb24uIiwgOmFyZ2xpc3RzIChbdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFnLT5odG1sXHJcbiBcIlJldHVybnMgYW4gSFRNTCBzdHJpbmcgZm9yIHRoZSBnaXZlbiB0YWcgZGVzY3JpcHRpb24uXCJcclxuIFt0YWddXHJcbiAoY29uZFxyXG4gICg6ZGVsaW1pdGVyPyB0YWcpXHJcbiAgXCI8c3BhbiBjbGFzcz0nZGVsaW1pdGVyJz5cIlxyXG4gICg6ZXJyb3I/IHRhZylcclxuICAoZm9ybWF0XHJcbiAgIFwiPHNwYW4gY2xhc3M9J2Vycm9yJyBkYXRhLW1lc3NhZ2U9JyVzJz48L3NwYW4+XCJcclxuICAgKHNvbWUtPiAoOm1lc3NhZ2UgdGFnKSBlc2NhcGUtaHRtbC1zdHIpKVxyXG4gICg6YmVnaW4/IHRhZylcclxuICAobGV0XHJcbiAgIFt2YWx1ZSAoOnZhbHVlIHRhZyldXHJcbiAgIChjb25kXHJcbiAgICAoc3ltYm9sPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J3N5bWJvbCc+XCJcclxuICAgIChsaXN0PyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2NvbGxlY3Rpb24gbGlzdCc+XCJcclxuICAgICh2ZWN0b3I/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nY29sbGVjdGlvbiB2ZWN0b3InPlwiXHJcbiAgICAobWFwPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2NvbGxlY3Rpb24gbWFwJz5cIlxyXG4gICAgKHNldD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdjb2xsZWN0aW9uIHNldCc+XCJcclxuICAgIChudW1iZXI/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nbnVtYmVyJz5cIlxyXG4gICAgKHN0cmluZz8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdzdHJpbmcnPlwiXHJcbiAgICAoa2V5d29yZD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdrZXl3b3JkJz5cIlxyXG4gICAgKG5pbD8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSduaWwnPlwiXHJcbiAgICAoY29udGFpbnM/ICN7dHJ1ZSBmYWxzZX0gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdib29sZWFuJz5cIlxyXG4gICAgOmVsc2VcclxuICAgIFwiPHNwYW4+XCIpKVxyXG4gICg6ZW5kPyB0YWcpXHJcbiAgXCI8L3NwYW4+XCIpKVxyXG4ifSB7OnN5bSBlc2NhcGUtaHRtbC1zdHIsIDptZXRhIHs6ZG9jICJFc2NhcGVzIGFuIEhUTUwgc3RyaW5nIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY2FwZS1odG1sLXN0clxyXG4gXCJFc2NhcGVzIGFuIEhUTUwgc3RyaW5nXCJcclxuIFtzXVxyXG4gKHN0ci9lc2NhcGVcclxuICBzXHJcbiAge1xcPCBcIiZsdDtcIiwgXFw+IFwiJmd0O1wiLCBcXCYgXCImYW1wO1wiLCBcXFwiIFwiJnF1b3Q7XCIsIFxcJyBcIiZhcG9zO1wifSkpXHJcbiJ9IHs6c3ltIHRhZ3MtZm9yLWxpbmUtPmh0bWwsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiB0YWdzLWZvci1saW5lLT5odG1sXHJcbiAoY29tcFxyXG4gIChwYXJ0aXRpb24tYnkgOmNvbHVtbilcclxuICAobWFwIChmbiogW3AxX180OTAxMyNdIChzdHIvam9pbiAobWFwIHRhZy0+aHRtbCBwMV9fNDkwMTMjKSkpKSkpXHJcbiJ9IHs6c3ltIHN0cnVjdHVyaXplLWhpY2N1cCwgOm1ldGEgezpkb2MgIlRha2VzIGEgZmxhdCBsaXN0IG9mIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgYW5kIGFkZHMgc3RydWN0dXJlIHRvIGl0LiIsIDphcmdsaXN0cyBbW2ZsYXQtaGljY3VwXSBbZmxhdC1oaWNjdXAgc3RydWN0dXJlZC1oaWNjdXBdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJ1Y3R1cml6ZS1oaWNjdXBcclxuIFwiVGFrZXMgYSBmbGF0IGxpc3Qgb2YgSGljY3VwLWNvbXBhdGlibGUgZGF0YSBhbmQgYWRkcyBzdHJ1Y3R1cmUgdG8gaXQuXCJcclxuIChbZmxhdC1oaWNjdXBdIChzZWNvbmQgKHN0cnVjdHVyaXplLWhpY2N1cCBmbGF0LWhpY2N1cCBbOnNwYW5dKSkpXHJcbiAoW2ZsYXQtaGljY3VwIHN0cnVjdHVyZWQtaGljY3VwXVxyXG4gIChsb29wXHJcbiAgIFtmbGF0LWhpY2N1cCBmbGF0LWhpY2N1cCBzdHJ1Y3R1cmVkLWhpY2N1cCBzdHJ1Y3R1cmVkLWhpY2N1cF1cclxuICAgKGlmLWxldFxyXG4gICAgW3Rva2VuIChmaXJzdCBmbGF0LWhpY2N1cCldXHJcbiAgICAoY29uZFxyXG4gICAgIChzdHJpbmc/IHRva2VuKVxyXG4gICAgIChyZWN1ciAocmVzdCBmbGF0LWhpY2N1cCkgKGNvbmogc3RydWN0dXJlZC1oaWNjdXAgdG9rZW4pKVxyXG4gICAgICh2ZWN0b3I/IHRva2VuKVxyXG4gICAgIChsZXRcclxuICAgICAgW1tmbGF0IHN0cnVjdHVyZWRdIChzdHJ1Y3R1cml6ZS1oaWNjdXAgKHJlc3QgZmxhdC1oaWNjdXApIHRva2VuKV1cclxuICAgICAgKHJlY3VyIGZsYXQgKGNvbmogc3RydWN0dXJlZC1oaWNjdXAgc3RydWN0dXJlZCkpKSlcclxuICAgIFsocmVzdCBmbGF0LWhpY2N1cCkgc3RydWN0dXJlZC1oaWNjdXBdKSkpKVxyXG4ifSB7OnN5bSBlc2NhcGUtaHRtbC1jaGFyLCA6bWV0YSB7OmRvYyAiRXNjYXBlcyBhbiBIVE1MIGNoYXJhY3RlciIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NhcGUtaHRtbC1jaGFyXHJcbiBcIkVzY2FwZXMgYW4gSFRNTCBjaGFyYWN0ZXJcIlxyXG4gW3NdXHJcbiAoY2FzZSBzIFxcPCBcIiZsdDtcIiBcXD4gXCImZ3Q7XCIgXFwmIFwiJmFtcDtcIiBcXFwiIFwiJnF1b3Q7XCIgXFwnIFwiJmFwb3M7XCIgcykpXHJcbiJ9IHs6c3ltIHBhcnNlLWxpbmVzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbGluZXMgcGFyc2VkIHdpdGggdGhlIGdpdmVuIGZ1bmN0aW9uLiIsIDphcmdsaXN0cyAoW3BhcnNlLWZuIGxpbmVzIHRhZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1saW5lc1xyXG4gXCJSZXR1cm5zIHRoZSBsaW5lcyBwYXJzZWQgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uXCJcclxuIFtwYXJzZS1mbiBsaW5lcyB0YWdzXVxyXG4gKGxvb3BcclxuICBbaSAwIHJlc3VsdHMgKHRyYW5zaWVudCBbXSldXHJcbiAgKGlmLWxldFxyXG4gICBbbGluZSAoZ2V0IGxpbmVzIGkpXVxyXG4gICAocmVjdXIgKGluYyBpKSAoY29uaiEgcmVzdWx0cyAocGFyc2UtZm4gbGluZSAoZ2V0IHRhZ3MgKGluYyBpKSkpKSlcclxuICAgKHBlcnNpc3RlbnQhIHJlc3VsdHMpKSkpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIgKHs6c3ltIHJlYWQrc3RyaW5nLCA6bWV0YSB7OmRvYyAiTGlrZSByZWFkLCBhbmQgdGFraW5nIHRoZSBzYW1lIGFyZ3MuIHJlYWRlciBtdXN0IGJlIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxuICBSZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9iamVjdCByZWFkIGFuZCB0aGUgKHdoaXRlc3BhY2UtdHJpbW1lZCkgc3RyaW5nIHJlYWQuIiwgOmFyZ2xpc3RzIFtbc3RyZWFtXSBbc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlXSBbb3B0cyBzdHJlYW1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkK3N0cmluZ1xyXG4gXCJMaWtlIHJlYWQsIGFuZCB0YWtpbmcgdGhlIHNhbWUgYXJncy4gcmVhZGVyIG11c3QgYmUgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXFxuICBSZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9iamVjdCByZWFkIGFuZCB0aGUgKHdoaXRlc3BhY2UtdHJpbW1lZCkgc3RyaW5nIHJlYWQuXCJcclxuIChbc3RyZWFtXSAocmVhZCtzdHJpbmcgc3RyZWFtIHRydWUgbmlsKSlcclxuIChbc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlXVxyXG4gIChsZXRcclxuICAgW2J1ZlxyXG4gICAgKGZuIFtyZWFkZXJdIChzdHIgKDpidWZmZXIgQCguLWZyYW1lcyBzdHJlYW0pKSkpXHJcbiAgICBvZmZzZXRcclxuICAgIChjb3VudCAoYnVmIHN0cmVhbSkpXHJcbiAgICBvXHJcbiAgICAobG9nLXNvdXJjZSBzdHJlYW0gKHJlYWQgc3RyZWFtIGVvZi1lcnJvcj8gZW9mLXZhbHVlKSlcclxuICAgIHNcclxuICAgICgudHJpbSAoc3VicyAoYnVmIHN0cmVhbSkgb2Zmc2V0KSldXHJcbiAgIFtvIHNdKSlcclxuIChbb3B0cyBzdHJlYW1dXHJcbiAgKGxldFxyXG4gICBbYnVmXHJcbiAgICAoZm4gW3JlYWRlcl0gKHN0ciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHN0cmVhbSkpKSlcclxuICAgIG9mZnNldFxyXG4gICAgKGNvdW50IChidWYgc3RyZWFtKSlcclxuICAgIG9cclxuICAgIChsb2ctc291cmNlIHN0cmVhbSAocmVhZCBvcHRzIHN0cmVhbSkpXHJcbiAgICBzXHJcbiAgICAoLnRyaW0gKHN1YnMgKGJ1ZiBzdHJlYW0pIG9mZnNldCkpXVxyXG4gICBbbyBzXSkpKVxyXG4ifSB7OnN5bSBib29sPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBib29sPyBbeF0gKG9yIChpbnN0YW5jZT8ganMvQm9vbGVhbiB4KSAodHJ1ZT8geCkgKGZhbHNlPyB4KSkpXHJcbiJ9IHs6c3ltICpzdXBwcmVzcy1yZWFkKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnN1cHByZXNzLXJlYWQqIGZhbHNlKVxyXG4ifSB7OnN5bSAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipcclxuIFwiV2hlbiBubyBkYXRhIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcgYW5kICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKlxcbiAgaXMgbm9uLW5pbCwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzLCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuXFxuICBJZiAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiogaXMgbmlsICh0aGUgZGVmYXVsdCB2YWx1ZSksIGFuIGV4Y2VwdGlvblxcbiAgd2lsbCBiZSB0aHJvd24gZm9yIHRoZSB1bmtub3duIHRhZy5cIlxyXG4gKGZuIFt0YWcgdmFsdWVdKSlcclxuIn0gezpzeW0gcmVhZCwgOm1ldGEgezpkb2MgIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlLlxuICAgT3RoZXJ3aXNlIHJldHVybnMgc2VudGluZWwuIElmIG5vIHN0cmVhbSBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXG5cbiAgIE9wdHMgaXMgYSBwZXJzaXN0ZW50IG1hcCB3aXRoIHZhbGlkIGtleXM6XG4gICAgOnJlYWQtY29uZCAtIDphbGxvdyB0byBwcm9jZXNzIHJlYWRlciBjb25kaXRpb25hbHMsIG9yXG4gICAgICAgICAgICAgICAgIDpwcmVzZXJ2ZSB0byBrZWVwIGFsbCBicmFuY2hlc1xuICAgIDpmZWF0dXJlcyAtIHBlcnNpc3RlbnQgc2V0IG9mIGZlYXR1cmUga2V5d29yZHMgZm9yIHJlYWRlciBjb25kaXRpb25hbHNcbiAgICA6ZW9mIC0gb24gZW9mLCByZXR1cm4gdmFsdWUgdW5sZXNzIDplb2Z0aHJvdywgdGhlbiB0aHJvdy5cbiAgICAgICAgICAgaWYgbm90IHNwZWNpZmllZCwgd2lsbCB0aHJvd1xuXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWRcblxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xqcy50b29scy5yZWFkZXIvcmVhZCBhbmRcbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nIiwgOmFyZ2xpc3RzIFtbcmVhZGVyXSBbe2VvZiA6ZW9mLCA6YXMgb3B0cywgOm9yIHtlb2YgOmVvZnRocm93fX0gcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkXHJcbiBcIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXFxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZS5cXG4gICBPdGhlcndpc2UgcmV0dXJucyBzZW50aW5lbC4gSWYgbm8gc3RyZWFtIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cXG5cXG4gICBPcHRzIGlzIGEgcGVyc2lzdGVudCBtYXAgd2l0aCB2YWxpZCBrZXlzOlxcbiAgICA6cmVhZC1jb25kIC0gOmFsbG93IHRvIHByb2Nlc3MgcmVhZGVyIGNvbmRpdGlvbmFscywgb3JcXG4gICAgICAgICAgICAgICAgIDpwcmVzZXJ2ZSB0byBrZWVwIGFsbCBicmFuY2hlc1xcbiAgICA6ZmVhdHVyZXMgLSBwZXJzaXN0ZW50IHNldCBvZiBmZWF0dXJlIGtleXdvcmRzIGZvciByZWFkZXIgY29uZGl0aW9uYWxzXFxuICAgIDplb2YgLSBvbiBlb2YsIHJldHVybiB2YWx1ZSB1bmxlc3MgOmVvZnRocm93LCB0aGVuIHRocm93LlxcbiAgICAgICAgICAgaWYgbm90IHNwZWNpZmllZCwgd2lsbCB0aHJvd1xcblxcbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZFxcblxcbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsanMudG9vbHMucmVhZGVyL3JlYWQgYW5kXFxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmdcIlxyXG4gezphcmdsaXN0cyAnKFtyZWFkZXJdIFtvcHRzIHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IGVvZi12YWx1ZV0pfVxyXG4gKFtyZWFkZXJdIChyZWFkIHJlYWRlciB0cnVlIG5pbCkpXHJcbiAoW3tlb2YgOmVvZiwgOmFzIG9wdHMsIDpvciB7ZW9mIDplb2Z0aHJvd319IHJlYWRlcl1cclxuICAocmVhZCogcmVhZGVyICg9IGVvZiA6ZW9mdGhyb3cpIGVvZiBuaWwgb3B0cyAodG8tYXJyYXkgW10pKSlcclxuIChbcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWxdXHJcbiAgKHJlYWQqIHJlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsIG5pbCB7fSAodG8tYXJyYXkgW10pKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtZGF0YS1yZWFkZXJzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZGVmYXVsdC1kYXRhLXJlYWRlcnNcclxuIFwiRGVmYXVsdCBtYXAgb2YgZGF0YSByZWFkZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IENsb2p1cmUuXFxuICBNYXkgYmUgb3ZlcnJpZGRlbiBieSBiaW5kaW5nICpkYXRhLXJlYWRlcnMqXCJcclxuIHt9KVxyXG4ifSB7OnN5bSAqZGF0YS1yZWFkZXJzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpkYXRhLXJlYWRlcnMqXHJcbiBcIk1hcCBmcm9tIHJlYWRlciB0YWcgc3ltYm9scyB0byBkYXRhIHJlYWRlciBWYXJzLlxcbiAgUmVhZGVyIHRhZ3Mgd2l0aG91dCBuYW1lc3BhY2UgcXVhbGlmaWVycyBhcmUgcmVzZXJ2ZWQgZm9yIENsb2p1cmUuXFxuICBUaGlzIGxpZ2h0IHZlcnNpb24gb2YgdG9vbHMucmVhZGVyIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBmb3IgZGVmYXVsdFxcbiAgcmVhZGVyIHRhZ3Mgc3VjaCBhcyAjaW5zdCBhbmQgI3V1aWQuXCJcclxuIHt9KVxyXG4ifSB7OnN5bSAqcmVhZC1kZWxpbSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpyZWFkLWRlbGltKiBmYWxzZSlcclxuIn0gezpzeW0gcmVzb2x2ZS1zeW1ib2wsIDptZXRhIHs6ZG9jICJSZXNvbHZlIGEgc3ltYm9sIHMgaW50byBpdHMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzcGFjZSB2ZXJzaW9uIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtc3ltYm9sXHJcbiBcIlJlc29sdmUgYSBzeW1ib2wgcyBpbnRvIGl0cyBmdWxseSBxdWFsaWZpZWQgbmFtZXNwYWNlIHZlcnNpb25cIlxyXG4gW3NdXHJcbiBzKVxyXG4ifSB7OnN5bSAqYWxpYXMtbWFwKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICphbGlhcy1tYXAqXHJcbiBcIk1hcCBmcm9tIG5zIGFsaWFzIHRvIG5zLCBpZiBub24tbmlsLCBpdCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSByZWFkLXRpbWVcXG4gICBucyBhbGlhc2VzLlxcblxcbiAgIERlZmF1bHRzIHRvIG5pbFwiXHJcbiBuaWwpXHJcbiJ9IHs6c3ltICp3cmFwLXZhbHVlLWFuZC1hZGQtbWV0YWRhdGE/KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKndyYXAtdmFsdWUtYW5kLWFkZC1tZXRhZGF0YT8qIGZhbHNlKVxyXG4ifSB7OnN5bSByZWFkLXJlZ2V4LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaCBvcHRzIHBlbmRpbmctZm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXJlZ2V4XHJcbiBbcmRyIGNoIG9wdHMgcGVuZGluZy1mb3Jtc11cclxuIChsZXRcclxuICBbc2IgKFN0cmluZ0J1ZmZlci4pXVxyXG4gIChsb29wXHJcbiAgIFtjaCAocmVhZC1jaGFyIHJkcildXHJcbiAgIChpZlxyXG4gICAgKGlkZW50aWNhbD8gXFxcIiBjaClcclxuICAgIChzdHIgc2IpXHJcbiAgICAoaWZcclxuICAgICAobmlsPyBjaClcclxuICAgICAoZXJyL3Rocm93LWVvZi1yZWFkaW5nIHJkciA6cmVnZXggc2IpXHJcbiAgICAgKGRvXHJcbiAgICAgICguYXBwZW5kIHNiIGNoKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKGlkZW50aWNhbD8gXFxcXCBjaClcclxuICAgICAgIChsZXRcclxuICAgICAgICBbY2ggKHJlYWQtY2hhciByZHIpXVxyXG4gICAgICAgIChpZiAobmlsPyBjaCkgKGVyci90aHJvdy1lb2YtcmVhZGluZyByZHIgOnJlZ2V4IHNiKSlcclxuICAgICAgICAoLmFwcGVuZCBzYiBjaCkpKVxyXG4gICAgICAocmVjdXIgKHJlYWQtY2hhciByZHIpKSkpKSkpKVxyXG4ifSB7OnN5bSBzYiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgc2IgKFN0cmluZ0J1ZmZlci4pKVxyXG4ifSB7OnN5bSByZWFkLXN0cmluZywgOm1ldGEgezpkb2MgIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxuXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nXG5cbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsanMudG9vbHMucmVhZGVyL3JlYWQtc3RyaW5nIGFuZFxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nIiwgOmFyZ2xpc3RzIFtbc10gW29wdHMgc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc3RyaW5nXHJcbiBcIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXFxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cXG5cXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nXFxuXFxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xqcy50b29scy5yZWFkZXIvcmVhZC1zdHJpbmcgYW5kXFxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nXCJcclxuIChbc10gKHJlYWQtc3RyaW5nIHt9IHMpKVxyXG4gKFtvcHRzIHNdXHJcbiAgKHdoZW5cclxuICAgKGFuZCBzIChub3QgKGlkZW50aWNhbD8gcyBcIlwiKSkpXHJcbiAgIChyZWFkIG9wdHMgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMpKSkpKVxyXG4ifSB7OnN5bSBtYXAtZnVuYywgOm1ldGEgezpkb2MgIkRlY2lkZSB3aGljaCBtYXAgdHlwZSB0byB1c2UsIGFycmF5LW1hcCBpZiBsZXNzIHRoYW4gMTYgZWxlbWVudHMiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWZ1bmNcclxuIFwiRGVjaWRlIHdoaWNoIG1hcCB0eXBlIHRvIHVzZSwgYXJyYXktbWFwIGlmIGxlc3MgdGhhbiAxNiBlbGVtZW50c1wiXHJcbiBbY29sbF1cclxuIChpZiAoPj0gKGNvdW50IGNvbGwpIDE2KSAnY2xqcy5jb3JlL2hhc2gtbWFwICdjbGpzLmNvcmUvYXJyYXktbWFwKSlcclxuIn0pLCBjbGpzLnRvb2xzLnJlYWRlciAoezpzeW0gcmVhZCtzdHJpbmcsIDptZXRhIHs6ZG9jICJMaWtlIHJlYWQsIGFuZCB0YWtpbmcgdGhlIHNhbWUgYXJncy4gcmVhZGVyIG11c3QgYmUgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXG4gIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgb2JqZWN0IHJlYWQgYW5kIHRoZSAod2hpdGVzcGFjZS10cmltbWVkKSBzdHJpbmcgcmVhZC4iLCA6YXJnbGlzdHMgW1tzdHJlYW1dIFtzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWVdIFtvcHRzIHN0cmVhbV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQrc3RyaW5nXHJcbiBcIkxpa2UgcmVhZCwgYW5kIHRha2luZyB0aGUgc2FtZSBhcmdzLiByZWFkZXIgbXVzdCBiZSBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cXG4gIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgb2JqZWN0IHJlYWQgYW5kIHRoZSAod2hpdGVzcGFjZS10cmltbWVkKSBzdHJpbmcgcmVhZC5cIlxyXG4gKFtzdHJlYW1dIChyZWFkK3N0cmluZyBzdHJlYW0gdHJ1ZSBuaWwpKVxyXG4gKFtzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWVdXHJcbiAgKGxldFxyXG4gICBbYnVmXHJcbiAgICAoZm4gW3JlYWRlcl0gKHN0ciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHN0cmVhbSkpKSlcclxuICAgIG9mZnNldFxyXG4gICAgKGNvdW50IChidWYgc3RyZWFtKSlcclxuICAgIG9cclxuICAgIChsb2ctc291cmNlIHN0cmVhbSAocmVhZCBzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWUpKVxyXG4gICAgc1xyXG4gICAgKC50cmltIChzdWJzIChidWYgc3RyZWFtKSBvZmZzZXQpKV1cclxuICAgW28gc10pKVxyXG4gKFtvcHRzIHN0cmVhbV1cclxuICAobGV0XHJcbiAgIFtidWZcclxuICAgIChmbiBbcmVhZGVyXSAoc3RyICg6YnVmZmVyIEAoLi1mcmFtZXMgc3RyZWFtKSkpKVxyXG4gICAgb2Zmc2V0XHJcbiAgICAoY291bnQgKGJ1ZiBzdHJlYW0pKVxyXG4gICAgb1xyXG4gICAgKGxvZy1zb3VyY2Ugc3RyZWFtIChyZWFkIG9wdHMgc3RyZWFtKSlcclxuICAgIHNcclxuICAgICgudHJpbSAoc3VicyAoYnVmIHN0cmVhbSkgb2Zmc2V0KSldXHJcbiAgIFtvIHNdKSkpXHJcbiJ9IHs6c3ltIGJvb2w/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJvb2w/IFt4XSAob3IgKGluc3RhbmNlPyBqcy9Cb29sZWFuIHgpICh0cnVlPyB4KSAoZmFsc2U/IHgpKSlcclxuIn0gezpzeW0gKnN1cHByZXNzLXJlYWQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqc3VwcHJlc3MtcmVhZCogZmFsc2UpXHJcbiJ9IHs6c3ltICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKlxyXG4gXCJXaGVuIG5vIGRhdGEgcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyBhbmQgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXFxuICBpcyBub24tbmlsLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS5cXG4gIElmICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiBpcyBuaWwgKHRoZSBkZWZhdWx0IHZhbHVlKSwgYW4gZXhjZXB0aW9uXFxuICB3aWxsIGJlIHRocm93biBmb3IgdGhlIHVua25vd24gdGFnLlwiXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIHJlYWQsIDptZXRhIHs6ZG9jICJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZS5cbiAgIE90aGVyd2lzZSByZXR1cm5zIHNlbnRpbmVsLiBJZiBubyBzdHJlYW0gaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxuXG4gICBPcHRzIGlzIGEgcGVyc2lzdGVudCBtYXAgd2l0aCB2YWxpZCBrZXlzOlxuICAgIDpyZWFkLWNvbmQgLSA6YWxsb3cgdG8gcHJvY2VzcyByZWFkZXIgY29uZGl0aW9uYWxzLCBvclxuICAgICAgICAgICAgICAgICA6cHJlc2VydmUgdG8ga2VlcCBhbGwgYnJhbmNoZXNcbiAgICA6ZmVhdHVyZXMgLSBwZXJzaXN0ZW50IHNldCBvZiBmZWF0dXJlIGtleXdvcmRzIGZvciByZWFkZXIgY29uZGl0aW9uYWxzXG4gICAgOmVvZiAtIG9uIGVvZiwgcmV0dXJuIHZhbHVlIHVubGVzcyA6ZW9mdGhyb3csIHRoZW4gdGhyb3cuXG4gICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdGhyb3dcblxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkXG5cbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsb2p1cmUudG9vbHMucmVhZGVyL3JlYWQgYW5kXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZyIsIDphcmdsaXN0cyBbW3JlYWRlcl0gW3tlb2YgOmVvZiwgOmFzIG9wdHMsIDpvciB7ZW9mIDplb2Z0aHJvd319IHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZFxyXG4gXCJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxcbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUuXFxuICAgT3RoZXJ3aXNlIHJldHVybnMgc2VudGluZWwuIElmIG5vIHN0cmVhbSBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXFxuXFxuICAgT3B0cyBpcyBhIHBlcnNpc3RlbnQgbWFwIHdpdGggdmFsaWQga2V5czpcXG4gICAgOnJlYWQtY29uZCAtIDphbGxvdyB0byBwcm9jZXNzIHJlYWRlciBjb25kaXRpb25hbHMsIG9yXFxuICAgICAgICAgICAgICAgICA6cHJlc2VydmUgdG8ga2VlcCBhbGwgYnJhbmNoZXNcXG4gICAgOmZlYXR1cmVzIC0gcGVyc2lzdGVudCBzZXQgb2YgZmVhdHVyZSBrZXl3b3JkcyBmb3IgcmVhZGVyIGNvbmRpdGlvbmFsc1xcbiAgICA6ZW9mIC0gb24gZW9mLCByZXR1cm4gdmFsdWUgdW5sZXNzIDplb2Z0aHJvdywgdGhlbiB0aHJvdy5cXG4gICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdGhyb3dcXG5cXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWRcXG5cXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbG9qdXJlLnRvb2xzLnJlYWRlci9yZWFkIGFuZFxcbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nXCJcclxuIHs6YXJnbGlzdHMgJyhbcmVhZGVyXSBbb3B0cyByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBlb2YtdmFsdWVdKX1cclxuIChbcmVhZGVyXSAocmVhZCByZWFkZXIgdHJ1ZSBuaWwpKVxyXG4gKFt7ZW9mIDplb2YsIDphcyBvcHRzLCA6b3Ige2VvZiA6ZW9mdGhyb3d9fSByZWFkZXJdXHJcbiAgKHJlYWQqIHJlYWRlciAoPSBlb2YgOmVvZnRocm93KSBlb2YgbmlsIG9wdHMgKHRvLWFycmF5IFtdKSkpXHJcbiAoW3JlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsXVxyXG4gIChyZWFkKiByZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbCBuaWwge30gKHRvLWFycmF5IFtdKSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LWRhdGEtcmVhZGVycywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGRlZmF1bHQtZGF0YS1yZWFkZXJzXHJcbiBcIkRlZmF1bHQgbWFwIG9mIGRhdGEgcmVhZGVyIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBDbG9qdXJlLlxcbiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgYmluZGluZyAqZGF0YS1yZWFkZXJzKlwiXHJcbiB7fSlcclxuIn0gezpzeW0gKmRhdGEtcmVhZGVycyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqZGF0YS1yZWFkZXJzKlxyXG4gXCJNYXAgZnJvbSByZWFkZXIgdGFnIHN5bWJvbHMgdG8gZGF0YSByZWFkZXIgVmFycy5cXG4gIFJlYWRlciB0YWdzIHdpdGhvdXQgbmFtZXNwYWNlIHF1YWxpZmllcnMgYXJlIHJlc2VydmVkIGZvciBDbG9qdXJlLlxcbiAgVGhpcyBsaWdodCB2ZXJzaW9uIG9mIHRvb2xzLnJlYWRlciBoYXMgbm8gaW1wbGVtZW50YXRpb24gZm9yIGRlZmF1bHRcXG4gIHJlYWRlciB0YWdzIHN1Y2ggYXMgI2luc3QgYW5kICN1dWlkLlwiXHJcbiB7fSlcclxuIn0gezpzeW0gKnJlYWQtZGVsaW0qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcmVhZC1kZWxpbSogZmFsc2UpXHJcbiJ9IHs6c3ltIHJlc29sdmUtc3ltYm9sLCA6bWV0YSB7OmRvYyAiUmVzb2x2ZSBhIHN5bWJvbCBzIGludG8gaXRzIGZ1bGx5IHF1YWxpZmllZCBuYW1lc3BhY2UgdmVyc2lvbiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXN5bWJvbFxyXG4gXCJSZXNvbHZlIGEgc3ltYm9sIHMgaW50byBpdHMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzcGFjZSB2ZXJzaW9uXCJcclxuIFtzXVxyXG4gKHRocm93IChleC1pbmZvIFwicmVzb2x2ZS1zeW1ib2wgaXMgbm90IGltcGxlbWVudGVkXCIgezpzeW0gc30pKSlcclxuIn0gezpzeW0gKmFsaWFzLW1hcCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqYWxpYXMtbWFwKlxyXG4gXCJNYXAgZnJvbSBucyBhbGlhcyB0byBucywgaWYgbm9uLW5pbCwgaXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgcmVhZC10aW1lXFxuICAgbnMgYWxpYXNlcy5cXG5cXG4gICBEZWZhdWx0cyB0byBuaWxcIlxyXG4gbmlsKVxyXG4ifSB7OnN5bSByZWFkLXJlZ2V4LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaCBvcHRzIHBlbmRpbmctZm9ybXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXJlZ2V4XHJcbiBbcmRyIGNoIG9wdHMgcGVuZGluZy1mb3Jtc11cclxuIChsZXRcclxuICBbc2IgKFN0cmluZ0J1ZmZlci4pXVxyXG4gIChsb29wXHJcbiAgIFtjaCAocmVhZC1jaGFyIHJkcildXHJcbiAgIChpZlxyXG4gICAgKGlkZW50aWNhbD8gXFxcIiBjaClcclxuICAgIChyZS1wYXR0ZXJuIChzdHIgc2IpKVxyXG4gICAgKGlmXHJcbiAgICAgKG5pbD8gY2gpXHJcbiAgICAgKGVyci90aHJvdy1lb2YtcmVhZGluZyByZHIgOnJlZ2V4IHNiKVxyXG4gICAgIChkb1xyXG4gICAgICAoLmFwcGVuZCBzYiBjaClcclxuICAgICAgKHdoZW5cclxuICAgICAgIChpZGVudGljYWw/IFxcXFwgY2gpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW2NoIChyZWFkLWNoYXIgcmRyKV1cclxuICAgICAgICAoaWYgKG5pbD8gY2gpIChlcnIvdGhyb3ctZW9mLXJlYWRpbmcgcmRyIDpyZWdleCBzYikpXHJcbiAgICAgICAgKC5hcHBlbmQgc2IgY2gpKSlcclxuICAgICAgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSkpKSkpKSlcclxuIn0gezpzeW0gc2IsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHNiIChTdHJpbmdCdWZmZXIuKSlcclxuIn0gezpzeW0gcmVhZC1zdHJpbmcsIDptZXRhIHs6ZG9jICJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cblxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZ1xuXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbG9qdXJlLnRvb2xzLnJlYWRlci9yZWFkLXN0cmluZyBhbmRcbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZyBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZyIsIDphcmdsaXN0cyBbW3NdIFtvcHRzIHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXN0cmluZ1xyXG4gXCJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxcbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXFxuXFxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZ1xcblxcbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsb2p1cmUudG9vbHMucmVhZGVyL3JlYWQtc3RyaW5nIGFuZFxcbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkLXN0cmluZyBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZ1wiXHJcbiAoW3NdIChyZWFkLXN0cmluZyB7fSBzKSlcclxuIChbb3B0cyBzXVxyXG4gICh3aGVuXHJcbiAgIChhbmQgcyAobm90IChpZGVudGljYWw/IHMgXCJcIikpKVxyXG4gICAocmVhZCBvcHRzIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzKSkpKSlcclxuIn0gezpzeW0gbWFwLWZ1bmMsIDptZXRhIHs6ZG9jICJEZWNpZGUgd2hpY2ggbWFwIHR5cGUgdG8gdXNlLCBhcnJheS1tYXAgaWYgbGVzcyB0aGFuIDE2IGVsZW1lbnRzIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1mdW5jXHJcbiBcIkRlY2lkZSB3aGljaCBtYXAgdHlwZSB0byB1c2UsIGFycmF5LW1hcCBpZiBsZXNzIHRoYW4gMTYgZWxlbWVudHNcIlxyXG4gW2NvbGxdXHJcbiAoaWYgKD49IChjb3VudCBjb2xsKSAxNikgJ2NsanMuY29yZS9oYXNoLW1hcCAnY2xqcy5jb3JlL2FycmF5LW1hcCkpXHJcbiJ9KSwgc2FibG9uby51dGlsICh7OnN5bSBqb2luLWNsYXNzZXMsIDptZXRhIHs6ZG9jICJKb2luIHRoZSBgY2xhc3Nlc2Agd2l0aCBhIHdoaXRlc3BhY2UuIiwgOmFyZ2xpc3RzIChbY2xhc3Nlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpvaW4tY2xhc3Nlc1xyXG4gXCJKb2luIHRoZSBgY2xhc3Nlc2Agd2l0aCBhIHdoaXRlc3BhY2UuXCJcclxuIFtjbGFzc2VzXVxyXG4gKC0+PlxyXG4gIGNsYXNzZXNcclxuICAoaW50b1xyXG4gICBbXVxyXG4gICAoY29tcCAobWFwY2F0IChmbiBbeF0gKGlmIChzdHJpbmc/IHgpIFt4XSAoc2VxIHgpKSkpIChyZW1vdmUgbmlsPykpKVxyXG4gIChzdHIvam9pbiBcIiBcIikpKVxyXG4ifSB7OnN5bSB0by1zdHIsIDptZXRhIHs6ZG9jICJDb252ZXJ0IGEgdmFsdWUgaW50byBhIHN0cmluZy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgVG9TdHJpbmd9IHs6c3ltIHJlYWN0LWZuLCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRoZSBzeW1ib2wgb2YgYSBmbiB0aGF0IGJ1aWxkIGEgUmVhY3QgZWxlbWVudC4gIiwgOmFyZ2xpc3RzIChbdHlwZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWN0LWZuXHJcbiBcIlJldHVybiB0aGUgc3ltYm9sIG9mIGEgZm4gdGhhdCBidWlsZCBhIFJlYWN0IGVsZW1lbnQuIFwiXHJcbiBbdHlwZV1cclxuIChpZlxyXG4gIChjb250YWlucz8gI3s6dGV4dGFyZWEgOmlucHV0IDpzZWxlY3R9IChrZXl3b3JkIHR5cGUpKVxyXG4gICdzYWJsb25vLmludGVycHJldGVyL2NyZWF0ZS1lbGVtZW50XHJcbiAgJ2pzL1JlYWN0LmNyZWF0ZUVsZW1lbnQpKVxyXG4ifSB7OnN5bSBjYW1lbC1jYXNlLWtleXMsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBpbnRvIGNhbWVsIGNhc2UuIiwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbWVsLWNhc2Uta2V5c1xyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBpbnRvIGNhbWVsIGNhc2UuXCJcclxuIFttXVxyXG4gKGlmXHJcbiAgKG1hcD8gbSlcclxuICAobGV0XHJcbiAgIFttIChpbnRvIHt9IChtYXAgKGZuIFtbayB2XV0gWyhjYW1lbC1jYXNlIGspIHZdKSkgbSldXHJcbiAgIChjb25kLT4gbSAobWFwPyAoOnN0eWxlIG0pKSAodXBkYXRlIDpzdHlsZSBjYW1lbC1jYXNlLWtleXMpKSlcclxuICBtKSlcclxuIn0gezpzeW0gZWxlbWVudD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiBgeGAgaXMgYW4gSFRNTCBlbGVtZW50LiBUcnVlIHdoZW4gYHhgIGlzIGEgdmVjdG9yXG4gIGFuZCB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGtleXdvcmQsIGUuZy4gYFs6ZGl2XWAgb3IgYFs6ZGl2IFs6c3BhbiBcInhcIl1gLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGVtZW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiBgeGAgaXMgYW4gSFRNTCBlbGVtZW50LiBUcnVlIHdoZW4gYHhgIGlzIGEgdmVjdG9yXFxuICBhbmQgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBrZXl3b3JkLCBlLmcuIGBbOmRpdl1gIG9yIGBbOmRpdiBbOnNwYW4gXFxcInhcXFwiXWAuXCJcclxuIFt4XVxyXG4gKGFuZCAodmVjdG9yPyB4KSAoa2V5d29yZD8gKGZpcnN0IHgpKSkpXHJcbiJ9IHs6c3ltICpiYXNlLXVybCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpiYXNlLXVybCogbmlsKVxyXG4ifSB7OnN5bSBhcy1zdHIsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBpdHMgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgdXNpbmcgdG8tc3RyLiIsIDphcmdsaXN0cyAoWyYgeHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcy1zdHJcclxuIFwiQ29udmVydHMgaXRzIGFyZ3VtZW50cyBpbnRvIGEgc3RyaW5nIHVzaW5nIHRvLXN0ci5cIlxyXG4gWyYgeHNdXHJcbiAoc3RyL2pvaW4gKG1hcCB0by1zdHIgeHMpKSlcclxuIn0gezpzeW0gaHRtbC10by1kb20tYXR0cnMsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBhbGwgSFRNTCBhdHRyaWJ1dGVzIHRvIHRoZWlyIERPTSBlcXVpdmFsZW50cy4iLCA6YXJnbGlzdHMgKFthdHRyc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGh0bWwtdG8tZG9tLWF0dHJzXHJcbiBcIkNvbnZlcnRzIGFsbCBIVE1MIGF0dHJpYnV0ZXMgdG8gdGhlaXIgRE9NIGVxdWl2YWxlbnRzLlwiXHJcbiBbYXR0cnNdXHJcbiAocmVuYW1lLWtleXNcclxuICAoY2FtZWwtY2FzZS1rZXlzIGF0dHJzKVxyXG4gIHs6Y2xhc3MgOmNsYXNzTmFtZSwgOmZvciA6aHRtbEZvcn0pKVxyXG4ifSB7OnN5bSBUb1N0cmluZywgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHRvLXN0cil9IHs6c3ltIFRvVVJJLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodG8tdXJpKX0gezpzeW0gY2FtZWwtY2FzZSwgOm1ldGEgezpkb2MgIlJldHVybnMgY2FtZWwgY2FzZSB2ZXJzaW9uIG9mIHRoZSBrZXksIGUuZy4gOmh0dHAtZXF1aXYgYmVjb21lcyA6aHR0cEVxdWl2LiIsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW1lbC1jYXNlXHJcbiBcIlJldHVybnMgY2FtZWwgY2FzZSB2ZXJzaW9uIG9mIHRoZSBrZXksIGUuZy4gOmh0dHAtZXF1aXYgYmVjb21lcyA6aHR0cEVxdWl2LlwiXHJcbiBba11cclxuIChpZlxyXG4gIChvciAoa2V5d29yZD8gaykgKHN0cmluZz8gaykgKHN5bWJvbD8gaykpXHJcbiAgKGxldFxyXG4gICBbW2ZpcnN0LXdvcmQgJiB3b3Jkc10gKC5zcGxpdCAobmFtZSBrKSBcIi1cIildXHJcbiAgIChpZlxyXG4gICAgKG9yIChlbXB0eT8gd29yZHMpICg9IFwiYXJpYVwiIGZpcnN0LXdvcmQpICg9IFwiZGF0YVwiIGZpcnN0LXdvcmQpKVxyXG4gICAga1xyXG4gICAgKC0+XHJcbiAgICAgKG1hcCBzdHIvY2FwaXRhbGl6ZSB3b3JkcylcclxuICAgICAoY29uaiBmaXJzdC13b3JkKVxyXG4gICAgIHN0ci9qb2luXHJcbiAgICAga2V5d29yZCkpKVxyXG4gIGspKVxyXG4ifSB7OnN5bSB0by11cmksIDptZXRhIHs6ZG9jICJDb252ZXJ0IGEgdmFsdWUgaW50byBhIFVSSS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgVG9VUkl9KSwgZHluYWRvYy5jb21tb24gKHs6c3ltIHZhci1zeW0tPnVybCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltIHZhci1zeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YXItc3ltLT51cmxcclxuIFtyZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltIHZhci1zeW1dXHJcbiAoc3RyXHJcbiAgcmVsLXBhdGhcclxuICAobmFtZSB0eXBlKVxyXG4gIFwiL1wiXHJcbiAgbnMtc3ltXHJcbiAgXCIvXCJcclxuICAoaWZcclxuICAgc3RhdGljP1xyXG4gICAoLT5cclxuICAgIChzdHIgdmFyLXN5bSlcclxuICAgIChzdHIvcmVwbGFjZSBcIj9cIiBcIidxJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiIVwiIFwiJ2UnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCI8XCIgXCInbCdcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIj5cIiBcIidnJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiOlwiIFwiJ2MnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCIqXCIgXCInYSdcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIiZcIiBcIidtJ1wiKSlcclxuICAgIz8oOmNsanMgKGpzL2VuY29kZVVSSUNvbXBvbmVudCAoc3RyIHZhci1zeW0pKSA6Y2xqIChqYXZhLm5ldC5VUkxFbmNvZGVyL2VuY29kZSAoc3RyIHZhci1zeW0pIFwiVVRGLThcIikpKVxyXG4gICh3aGVuIHN0YXRpYz8gXCIuaHRtbFwiKSkpXHJcbiJ9IHs6c3ltIGluaXQtZWRpdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3J1bS1zdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtZWRpdG9yXHJcbiBbcnVtLXN0YXRlXVxyXG4gKGxldFxyXG4gIFtbc3RhdGVdICg6cnVtL2FyZ3MgcnVtLXN0YXRlKV1cclxuICAod2hlbi1sZXRcclxuICAgW2luaXQgKDppbml0LWVkaXRvciBzdGF0ZSldXHJcbiAgIChpbml0IChydW0vZG9tLW5vZGUgcnVtLXN0YXRlKSkpKVxyXG4gcnVtLXN0YXRlKVxyXG4ifSB7OnN5bSBucy1zeW0tPnVybCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnMtc3ltLT51cmxcclxuIFtyZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltXVxyXG4gKHN0ciByZWwtcGF0aCAobmFtZSB0eXBlKSBcIi9cIiBucy1zeW0gKHdoZW4gc3RhdGljPyBcIi5odG1sXCIpKSlcclxuIn0gezpzeW0gKnNlc3Npb24sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqc2Vzc2lvblxyXG4gKC0+XHJcbiAgKHJlZHVjZSBvL2FkZC1ydWxlIChvLy0+c2Vzc2lvbikgKGNvbmNhdCBydWxlcyBjb21wb25lbnRzKSlcclxuICAoby9pbnNlcnRcclxuICAgOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICB7OmR5bmFkb2MuY29tbW9uL3Byb2Q/IGZhbHNlLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydC1maWx0ZXIgXCJcIixcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9jbGpzLXN0YXJ0ZWQ/IGZhbHNlLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydGFibGU/IGZhbHNlLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2luaXQtZWRpdG9yIG5pbCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9pbml0LWV4YW1wbGUtZWRpdG9yIG5pbCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi93YXRjaGVyIG5pbH0pXHJcbiAgKG8vaW5zZXJ0XHJcbiAgIDpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXJcclxuICAgezpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gbmlsLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gbmlsLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL3R5cGUgbmlsLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2hpZGUtc2lkZWJhcj8gZmFsc2V9KVxyXG4gIGF0b20pKVxyXG4ifSB7OnN5bSBnZXQtc3RhdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXN0YXRlXHJcbiBbXVxyXG4gKC0+XHJcbiAgQCpzZXNzaW9uXHJcbiAgKG8vcXVlcnktYWxsIDpkeW5hZG9jLmNvbW1vbi9nZXQtc3RhdGUpXHJcbiAgZmlyc3RcclxuICAob3IgKHRocm93IChleC1pbmZvIFwiU3RhdGUgbm90IGZvdW5kXCIge30pKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtc2Vzc2lvbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzZXNzaW9uIGlkIHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLXNlc3Npb25cclxuIFtzZXNzaW9uIGlkIHN0YXRlXVxyXG4gKG8vZmlyZS1ydWxlcyAoby9pbnNlcnQgc2Vzc2lvbiBpZCBzdGF0ZSkpKVxyXG4ifSB7OnN5bSBydWxlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHJ1bGVzXHJcbiAoby9ydWxlc2V0XHJcbiAgezpkeW5hZG9jLmNvbW1vbi9nZXQtc3RhdGVcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtc3ltIG5zLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIHZhci1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdHlwZSB0eXBlXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL3dhdGNoZXIgd2F0Y2hlcl1dfSkpXHJcbiJ9IHs6c3ltIGNvbXBvbmVudHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBjb21wb25lbnRzXHJcbiAob3J1bS9ydWxlc2V0XHJcbiAge2FwcC1yb290XHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLXN5bSBucy1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtbWV0YSBucy1tZXRhXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gdmFyLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi92YXJzIHZhcnNdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9jbGpzLXN0YXJ0ZWQ/XHJcbiAgICAgY2xqcy1zdGFydGVkP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi9wcm9kPyBwcm9kP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHN0YXRpYz9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlclxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9oaWRlLXNpZGViYXI/XHJcbiAgICAgaGlkZS1zaWRlYmFyP11cclxuICAgIDp0aGVuXHJcbiAgICAobGV0XHJcbiAgICAgWypzZXNzaW9uIChvcnVtL3Byb3ApXVxyXG4gICAgIFs6ZGl2XHJcbiAgICAgICh3aGVuLW5vdCBoaWRlLXNpZGViYXI/IChzaWRlYmFyIHt9KSlcclxuICAgICAgKGNvbmpcclxuICAgICAgIChpZlxyXG4gICAgICAgIG5zLXN5bVxyXG4gICAgICAgIChpbnRvXHJcbiAgICAgICAgIFs6ZGl2XHJcbiAgICAgICAgICB7OmNsYXNzIFwidmFyc1wiLCA6c3R5bGUgezpsZWZ0IChpZiBoaWRlLXNpZGViYXI/IDAgMzAwKX19XHJcbiAgICAgICAgICAoZXhwb3J0ICpzZXNzaW9uKVxyXG4gICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAgdmFyLXN5bVxyXG4gICAgICAgICAgIFs6ZGl2XHJcbiAgICAgICAgICAgIFs6Y2VudGVyIFs6aDEgKHN0ciBucy1zeW0pXV1cclxuICAgICAgICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgICAgICBbZG9jICg6ZG9jIG5zLW1ldGEpXVxyXG4gICAgICAgICAgICAgWzpkaXYgezpjbGFzcyBcInNlY3Rpb24gZG9jXCJ9IGRvY10pXSldXHJcbiAgICAgICAgIChtYXB2IHZhci0+aHRtbCB2YXJzKSlcclxuICAgICAgICBbOmRpdiB7OmNsYXNzIFwidmFyc1wifSAoZXhwb3J0ICpzZXNzaW9uKV0pXHJcbiAgICAgICAoY29uZFxyXG4gICAgICAgIHN0YXRpYz9cclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICB7OmNsYXNzIFwiZm9vdGVyXCJ9XHJcbiAgICAgICAgIFwiR2VuZXJhdGVkIGJ5IFwiXHJcbiAgICAgICAgIFs6YVxyXG4gICAgICAgICAgezpocmVmIFwiaHR0cHM6Ly9naXRodWIuY29tL29ha2VzL0R5bmFkb2NcIiwgOnRhcmdldCBcIl9ibGFua1wifVxyXG4gICAgICAgICAgXCJEeW5hZG9jXCJdXVxyXG4gICAgICAgIChhbmQgY2xqcy1zdGFydGVkPyAobm90IHByb2Q/KSlcclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICB7OmNsYXNzIFwiZm9vdGVyXCJ9XHJcbiAgICAgICAgIFwiVGhpcyBpcyBhIGN1c3RvbSBidWlsZCBvZiBcIlxyXG4gICAgICAgICBbOmFcclxuICAgICAgICAgIHs6aHJlZiBcImh0dHBzOi8vZ2l0aHViLmNvbS9vYWtlcy9EeW5hZG9jXCIsIDp0YXJnZXQgXCJfYmxhbmtcIn1cclxuICAgICAgICAgIFwiRHluYWRvY1wiXV0pKV0pXSxcclxuICAgdmFyLT5odG1sXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLXN5bSBucy1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSB2YXItc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3R5cGUgdHlwZV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9yZWwtcGF0aCByZWwtcGF0aF1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHN0YXRpYz9dXHJcbiAgICA6dGhlblxyXG4gICAgKGxldFxyXG4gICAgIFt7OmtleXMgW3N5bSBtZXRhIHNvdXJjZSBzcGVjIGV4YW1wbGVzIG1ldGhvZHMgcHJvdG9jb2xdfVxyXG4gICAgICAob3J1bS9wcm9wKVxyXG4gICAgICB7OmtleXMgW2FyZ2xpc3RzIGRvY119XHJcbiAgICAgIG1ldGFcclxuICAgICAgdXJsXHJcbiAgICAgICh2YXItc3ltLT51cmwgcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bSBzeW0pXVxyXG4gICAgIFs6ZGl2XHJcbiAgICAgIHs6Y2xhc3MgXCJ2YXItaW5mb1wifVxyXG4gICAgICAoaW50b1xyXG4gICAgICAgKGlmIHZhci1zeW0gWzpkaXZdIFs6YSB7OmhyZWYgdXJsfV0pXHJcbiAgICAgICAoaWZcclxuICAgICAgICBhcmdsaXN0c1xyXG4gICAgICAgIChtYXBcclxuICAgICAgICAgKGZuIFthcmdsaXN0XSBbOmgyIChwci1zdHIgKGFwcGx5IGxpc3Qgc3ltIGFyZ2xpc3QpKV0pXHJcbiAgICAgICAgIGFyZ2xpc3RzKVxyXG4gICAgICAgIFtbOmgyIChzdHIgc3ltKV1dKSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIG1ldGhvZHNcclxuICAgICAgIFs6ZGl2XHJcbiAgICAgICAgezpjbGFzcyBcInNlY3Rpb25cIn1cclxuICAgICAgICBbOmgzIFwiTWV0aG9kcyBpbiB0aGlzIHByb3RvY29sXCJdXHJcbiAgICAgICAgKGludG9cclxuICAgICAgICAgWzp1bF1cclxuICAgICAgICAgKGZvclxyXG4gICAgICAgICAgW21ldGhvZC1zeW0gbWV0aG9kc11cclxuICAgICAgICAgIFs6bGlcclxuICAgICAgICAgICBbOmFcclxuICAgICAgICAgICAgezpocmVmXHJcbiAgICAgICAgICAgICAodmFyLXN5bS0+dXJsIHJlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW0gbWV0aG9kLXN5bSl9XHJcbiAgICAgICAgICAgIChzdHIgbWV0aG9kLXN5bSldXSkpXSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIHByb3RvY29sXHJcbiAgICAgICBbOmRpdlxyXG4gICAgICAgIHs6Y2xhc3MgXCJzZWN0aW9uXCJ9XHJcbiAgICAgICAgWzpoM1xyXG4gICAgICAgICBcIlBhcnQgb2YgdGhlIFwiXHJcbiAgICAgICAgIFs6YVxyXG4gICAgICAgICAgezpocmVmICh2YXItc3ltLT51cmwgcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bSBwcm90b2NvbCl9XHJcbiAgICAgICAgICAoc3RyIHByb3RvY29sKV1cclxuICAgICAgICAgXCIgcHJvdG9jb2xcIl1dKVxyXG4gICAgICAod2hlbiBkb2MgWzpkaXYgezpjbGFzcyBcInNlY3Rpb24gZG9jXCJ9IGRvY10pXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoc2VxIGV4YW1wbGVzKVxyXG4gICAgICAgKGludG9cclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICB7OmNsYXNzIFwic2VjdGlvblwifVxyXG4gICAgICAgICBbOmgyIChpZiAoPiAoY291bnQgZXhhbXBsZXMpIDEpIFwiRXhhbXBsZXNcIiBcIkV4YW1wbGVcIildXVxyXG4gICAgICAgIChtYXB2IGV4YW1wbGUtPmh0bWwgZXhhbXBsZXMpKSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIHNwZWNcclxuICAgICAgIChpZlxyXG4gICAgICAgIHZhci1zeW1cclxuICAgICAgICBbOmRpdiB7OmNsYXNzIFwic2VjdGlvblwifSBbOmgyIFwiU3BlY1wiXSAoc3BlYy0+aHRtbCBzcGVjKV1cclxuICAgICAgICAoZXhwYW5kYWJsZS1zZWN0aW9uXHJcbiAgICAgICAgIHs6bGFiZWwgXCJTcGVjXCIsIDp1cmwgdXJsLCA6Y29udGVudCAoc3BlYy0+aHRtbCBzcGVjKX0pKSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIHNvdXJjZVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgdmFyLXN5bVxyXG4gICAgICAgIFs6ZGl2IHs6Y2xhc3MgXCJzZWN0aW9uXCJ9IFs6aDIgXCJTb3VyY2VcIl0gKHNvdXJjZS0+aHRtbCBzb3VyY2UpXVxyXG4gICAgICAgIChleHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAgezpsYWJlbCBcIlNvdXJjZVwiLFxyXG4gICAgICAgICAgOnVybCB1cmwsXHJcbiAgICAgICAgICA6Y29udGVudCAoc291cmNlLT5odG1sIHNvdXJjZSl9KSkpXSldLFxyXG4gICBleGFtcGxlLT5odG1sXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3R5cGUgdHlwZV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi9wcm9kPyBwcm9kP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHN0YXRpYz9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9pbml0LWV4YW1wbGUtZWRpdG9yXHJcbiAgICAgaW5pdC1leGFtcGxlLWVkaXRvcl1cclxuICAgIDp0aGVuXHJcbiAgICAoZXhhbXBsZS0+aHRtbCogby8qbWF0Y2gqIChvcnVtL3Byb3ApKV0sXHJcbiAgIHNvdXJjZS0+aHRtbFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi9pbml0LWVkaXRvciBpbml0LWVkaXRvcl1cclxuICAgIDp0aGVuXHJcbiAgICAoc291cmNlLT5odG1sKiBvLyptYXRjaCogKG9ydW0vcHJvcCkpXSxcclxuICAgc3BlYy0+aHRtbFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi9pbml0LWVkaXRvciBpbml0LWVkaXRvcl1cclxuICAgIDp0aGVuXHJcbiAgICAoc3BlYy0+aHRtbCogby8qbWF0Y2gqIChvcnVtL3Byb3ApKV0sXHJcbiAgIGV4cG9ydFxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2NsanMtc3RhcnRlZD9cclxuICAgICBjbGpzLXN0YXJ0ZWQ/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3N0YXRpYz8gc3RhdGljP11cclxuICAgIDp0aGVuXHJcbiAgICAobGV0XHJcbiAgICAgWypzZXNzaW9uIChvcnVtL3Byb3ApXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICBzdGF0aWM/XHJcbiAgICAgIFs6ZGl2XHJcbiAgICAgICB7OnN0eWxlIHs6bWluLWhlaWdodCA3NX19XHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIGNsanMtc3RhcnRlZD9cclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICB7OmNsYXNzIFwiZXhwb3J0XCJ9XHJcbiAgICAgICAgIChleHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAgIHs6bGFiZWwgXCJFeHBvcnRcIixcclxuICAgICAgICAgICA6dXJsIFwiXCIsXHJcbiAgICAgICAgICAgOmNvbnRlbnQgKGV4cG9ydC1mb3JtICpzZXNzaW9uKSxcclxuICAgICAgICAgICA6b24tY2xvc2VcclxuICAgICAgICAgICAoZm4qXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgICAgIChzd2FwIVxyXG4gICAgICAgICAgICAgKnNlc3Npb25cclxuICAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgIFtzZXNzaW9uXVxyXG4gICAgICAgICAgICAgICgtPlxyXG4gICAgICAgICAgICAgICBzZXNzaW9uXHJcbiAgICAgICAgICAgICAgIChvL2luc2VydFxyXG4gICAgICAgICAgICAgICAgOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgICAgICAgICAgICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydC1maWx0ZXJcclxuICAgICAgICAgICAgICAgIFwiXCIpXHJcbiAgICAgICAgICAgICAgIG8vZmlyZS1ydWxlcykpKSl9KV0pXHJcbiAgICAgICBbOmRpdiB7OnN0eWxlIHs6Y2xlYXIgXCJyaWdodFwifX1dXSkpXSxcclxuICAgZXhwb3J0LWZvcm1cclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtc3ltIG5zLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1tZXRhIG5zLW1ldGFdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSB2YXItc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3R5cGUgdHlwZV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50IDpkeW5hZG9jLmNvbW1vbi9leHBvcnRhYmxlPyBleHBvcnRhYmxlP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2V4cG9ydC1maWx0ZXJcclxuICAgICBleHBvcnQtZmlsdGVyXVxyXG4gICAgOnRoZW5cclxuICAgIChsZXRcclxuICAgICBbKnNlc3Npb25cclxuICAgICAgKG9ydW0vcHJvcClcclxuICAgICAgKm9wdGlvbnNcclxuICAgICAgKG9ydW0vYXRvbSB7OnBhZ2VzIChpZiBucy1zeW0gOnNpbmdsZSA6bXVsdGlwbGUpfSlcclxuICAgICAgezprZXlzIFtwYWdlc119XHJcbiAgICAgIEAqb3B0aW9uc11cclxuICAgICBbOmZvcm1cclxuICAgICAgezphY3Rpb24gXCIvZHluYWRvYy1leHBvcnQuemlwXCIsXHJcbiAgICAgICA6bWV0aG9kIDpnZXQsXHJcbiAgICAgICA6c3R5bGUgezp0ZXh0LWFsaWduIFwibGVmdFwifX1cclxuICAgICAgWzpkaXZcclxuICAgICAgIFs6bGFiZWxcclxuICAgICAgICBbOmlucHV0XHJcbiAgICAgICAgIHs6dHlwZSBcInJhZGlvXCIsXHJcbiAgICAgICAgICA6bmFtZSBcInBhZ2VzXCIsXHJcbiAgICAgICAgICA6dmFsdWUgXCJzaW5nbGVcIixcclxuICAgICAgICAgIDpjaGVja2VkICg9IHBhZ2VzIDpzaW5nbGUpLFxyXG4gICAgICAgICAgOm9uLWNsaWNrIChmbiogW10gKHN3YXAhICpvcHRpb25zIGFzc29jIDpwYWdlcyA6c2luZ2xlKSksXHJcbiAgICAgICAgICA6ZGlzYWJsZWQgKG5pbD8gbnMtc3ltKX1dXHJcbiAgICAgICAgXCJPbmx5IHRoaXMgcGFnZVwiXV1cclxuICAgICAgWzpkaXZcclxuICAgICAgIFs6bGFiZWxcclxuICAgICAgICBbOmlucHV0XHJcbiAgICAgICAgIHs6dHlwZSBcInJhZGlvXCIsXHJcbiAgICAgICAgICA6bmFtZSBcInBhZ2VzXCIsXHJcbiAgICAgICAgICA6dmFsdWUgXCJtdWx0aXBsZVwiLFxyXG4gICAgICAgICAgOmNoZWNrZWQgKD0gcGFnZXMgOm11bHRpcGxlKSxcclxuICAgICAgICAgIDpvbi1jbGljayAoZm4qIFtdIChzd2FwISAqb3B0aW9ucyBhc3NvYyA6cGFnZXMgOm11bHRpcGxlKSl9XVxyXG4gICAgICAgIFwiTXVsdGlwbGUgcGFnZXNcIl1dXHJcbiAgICAgIFs6ZGl2XHJcbiAgICAgICB7OnN0eWxlIHs6bWFyZ2luIDEwLCA6Zm9udC1zaXplIDE0fX1cclxuICAgICAgIChjYXNlXHJcbiAgICAgICAgcGFnZXNcclxuICAgICAgICA6c2luZ2xlXHJcbiAgICAgICAgWzppXHJcbiAgICAgICAgIFwiT25seSB0aGUgY3VycmVudCBwYWdlIHdpbGwgYmUgZXhwb3J0ZWRcIlxyXG4gICAgICAgICBbOmJyXVxyXG4gICAgICAgICBcImFuZCB0aGUgc2lkZWJhciB3aWxsIGJlIGhpZGRlbi5cIl1cclxuICAgICAgICA6bXVsdGlwbGVcclxuICAgICAgICBbOmlcclxuICAgICAgICAgXCJBbGwgdGhlIG5hbWVzcGFjZXMgaW4gdGhlIHNpZGViYXJcIlxyXG4gICAgICAgICBbOmJyXVxyXG4gICAgICAgICBcIndpbGwgYmUgZXhwb3J0ZWQuIFlvdSBjYW4gbmFycm93IHRoZW1cIlxyXG4gICAgICAgICBbOmJyXVxyXG4gICAgICAgICBcImRvd24gd2l0aCB0aGUgZm9sbG93aW5nIHJlZ2V4OlwiXHJcbiAgICAgICAgIFs6ZGl2XHJcbiAgICAgICAgICBbOmlucHV0XHJcbiAgICAgICAgICAgezp0eXBlIFwidGV4dFwiLFxyXG4gICAgICAgICAgICA6dmFsdWUgXCJcIixcclxuICAgICAgICAgICAgOnBsYWNlaG9sZGVyIFwiRXhwb3J0IGZpbHRlclwiLFxyXG4gICAgICAgICAgICA6c3R5bGUgezptYXJnaW4gNSwgOmZvbnQtc2l6ZSAxNH0sXHJcbiAgICAgICAgICAgIDpvbi1jaGFuZ2VcclxuICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICBbZV1cclxuICAgICAgICAgICAgIChzd2FwIVxyXG4gICAgICAgICAgICAgICpzZXNzaW9uXHJcbiAgICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICAgIFtzZXNzaW9uXVxyXG4gICAgICAgICAgICAgICAoLT5cclxuICAgICAgICAgICAgICAgIHNlc3Npb25cclxuICAgICAgICAgICAgICAgIChvL2luc2VydFxyXG4gICAgICAgICAgICAgICAgIDpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICAgICAgICAgICAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0LWZpbHRlclxyXG4gICAgICAgICAgICAgICAgICgtPiBlIC4tdGFyZ2V0IC4tdmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgby9maXJlLXJ1bGVzKSkpKX1dXV0pXVxyXG4gICAgICBbOmlucHV0XHJcbiAgICAgICB7OnR5cGUgXCJoaWRkZW5cIixcclxuICAgICAgICA6bmFtZSBcImV4cG9ydC1maWx0ZXJcIixcclxuICAgICAgICA6dmFsdWUgKG9yIGV4cG9ydC1maWx0ZXIgXCJcIil9XVxyXG4gICAgICAod2hlblxyXG4gICAgICAgdHlwZVxyXG4gICAgICAgWzppbnB1dCB7OnR5cGUgXCJoaWRkZW5cIiwgOm5hbWUgXCJ0eXBlXCIsIDp2YWx1ZSAobmFtZSB0eXBlKX1dKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgbnMtc3ltXHJcbiAgICAgICBbOmlucHV0IHs6dHlwZSBcImhpZGRlblwiLCA6bmFtZSBcIm5zLXN5bVwiLCA6dmFsdWUgKHN0ciBucy1zeW0pfV0pXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICB2YXItc3ltXHJcbiAgICAgICBbOmlucHV0XHJcbiAgICAgICAgezp0eXBlIFwiaGlkZGVuXCIsIDpuYW1lIFwidmFyLXN5bVwiLCA6dmFsdWUgKHN0ciB2YXItc3ltKX1dKVxyXG4gICAgICBbOmRpdlxyXG4gICAgICAgezpzdHlsZSB7OnRleHQtYWxpZ24gXCJjZW50ZXJcIn19XHJcbiAgICAgICBbOmJ1dHRvblxyXG4gICAgICAgIHs6dHlwZSBcInN1Ym1pdFwiLCA6ZGlzYWJsZWQgKG5vdCBleHBvcnRhYmxlPyl9XHJcbiAgICAgICAgXCJEb3dubG9hZCB6aXAgZmlsZVwiXV1cclxuICAgICAgKHdoZW4tbm90XHJcbiAgICAgICBleHBvcnRhYmxlP1xyXG4gICAgICAgWzpkaXZcclxuICAgICAgICB7OnN0eWxlIHs6bWFyZ2luIDEwLCA6Zm9udC1zaXplIDE0fX1cclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICBbOmIgXCJZb3UgYnVpbHQgRHluYWRvYyB3aXRoIDpvcHRpbWl6YXRpb25zIHNldCB0byA6bm9uZVwiXV1cclxuICAgICAgICBbOmRpdlxyXG4gICAgICAgICBbOmIgXCJZb3UgbXVzdCBzZXQgaXQgdG8gOnNpbXBsZSBpbiBvcmRlciB0byBleHBvcnRcIl1dXSldKV0sXHJcbiAgIHNpZGViYXJcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnNlcyBuc2VzXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vY2xqcy1zdGFydGVkP1xyXG4gICAgIGNsanMtc3RhcnRlZD9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vcmVsLXBhdGggcmVsLXBhdGhdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vc3RhdGljPyBzdGF0aWM/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL2hpZGUtYmFkZ2U/IGhpZGUtYmFkZ2U/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0LWZpbHRlclxyXG4gICAgIGV4cG9ydC1maWx0ZXJdXHJcbiAgICA6dGhlblxyXG4gICAgKGxldFxyXG4gICAgIFsqc2VhcmNoXHJcbiAgICAgIChvcnVtL2F0b20gXCJcIilcclxuICAgICAgc2VhcmNoXHJcbiAgICAgIChvciAobm90LWVtcHR5IGV4cG9ydC1maWx0ZXIpIEAqc2VhcmNoKVxyXG4gICAgICBzZWFyY2hcclxuICAgICAgKHdoZW5cclxuICAgICAgIChzZXEgc2VhcmNoKVxyXG4gICAgICAgKHRyeVxyXG4gICAgICAgIChyZS1wYXR0ZXJuIHNlYXJjaClcclxuICAgICAgICAoY2F0Y2ggIz8oOmNsaiBFeGNlcHRpb24gOmNsanMganMvRXJyb3IpIGUgKHByaW50bG4gZSkpKSldXHJcbiAgICAgWzpkaXZcclxuICAgICAgKHdoZW5cclxuICAgICAgIGNsanMtc3RhcnRlZD9cclxuICAgICAgIFs6aW5wdXRcclxuICAgICAgICB7OmNsYXNzIFwic2VhcmNoXCIsXHJcbiAgICAgICAgIDpvbi1jaGFuZ2VcclxuICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgW3AxX180ODk5MSNdXHJcbiAgICAgICAgICAoLT4+IHAxX180ODk5MSMgLi10YXJnZXQgLi12YWx1ZSAocmVzZXQhICpzZWFyY2gpKSksXHJcbiAgICAgICAgIDpwbGFjZWhvbGRlciBcIlNlYXJjaFwifV0pXHJcbiAgICAgIChpbnRvXHJcbiAgICAgICBbOmRpdlxyXG4gICAgICAgIHs6Y2xhc3MgXCJuc2VzXCJ9XHJcbiAgICAgICAgKHdoZW4gKHNlcSBleHBvcnQtZmlsdGVyKSBbOmkgXCJQYWdlcyB0byBleHBvcnQ6XCJdKV1cclxuICAgICAgIChrZWVwXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFt7OmtleXMgW3N5bSB0eXBlIHZhci1zeW1zXX1dXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt2YXJzXHJcbiAgICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAgKGFuZCBzZWFyY2ggKGVtcHR5PyBleHBvcnQtZmlsdGVyKSlcclxuICAgICAgICAgICAgKC0+PlxyXG4gICAgICAgICAgICAgdmFyLXN5bXNcclxuICAgICAgICAgICAgIChmaWx0ZXJcclxuICAgICAgICAgICAgICAoZm4qIFtwMV9fNDg5OTIjXSAocmUtZmluZCBzZWFyY2ggKHN0ciBwMV9fNDg5OTIjKSkpKVxyXG4gICAgICAgICAgICAgKG1hcHZcclxuICAgICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgICAgW3Zhci1zeW1dXHJcbiAgICAgICAgICAgICAgIFs6ZGl2XHJcbiAgICAgICAgICAgICAgICB7OmNsYXNzIFwidmFyXCJ9XHJcbiAgICAgICAgICAgICAgICBbOmFcclxuICAgICAgICAgICAgICAgICB7OmhyZWZcclxuICAgICAgICAgICAgICAgICAgKHZhci1zeW0tPnVybCByZWwtcGF0aCBzdGF0aWM/IHR5cGUgc3ltIHZhci1zeW0pfVxyXG4gICAgICAgICAgICAgICAgIChzdHIgdmFyLXN5bSldXSkpKSldXHJcbiAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgIChvciAobmlsPyBzZWFyY2gpIChyZS1maW5kIHNlYXJjaCAoc3RyIHN5bSkpIChzZXEgdmFycykpXHJcbiAgICAgICAgICAgWzpkaXZcclxuICAgICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAgIChhbmQgKD0gdHlwZSA6Y2xqcykgKG5vdCBoaWRlLWJhZGdlPykpXHJcbiAgICAgICAgICAgICBbOmRpdiB7OmNsYXNzIFwidGFnXCJ9IFwiQ0xKU1wiXSlcclxuICAgICAgICAgICAgWzphXHJcbiAgICAgICAgICAgICB7OmhyZWYgKG5zLXN5bS0+dXJsIHJlbC1wYXRoIHN0YXRpYz8gdHlwZSBzeW0pfVxyXG4gICAgICAgICAgICAgKHN0ciBzeW0pXVxyXG4gICAgICAgICAgICAod2hlbiAoc2VxIHZhcnMpIChpbnRvIFs6ZGl2XSB2YXJzKSldKSkpXHJcbiAgICAgICAgbnNlcykpXSldfSkpXHJcbiJ9IHs6c3ltIGluaXQtZXhhbXBsZS1lZGl0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcnVtLXN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1leGFtcGxlLWVkaXRvclxyXG4gW3J1bS1zdGF0ZV1cclxuIChsZXRcclxuICBbW3N0YXRlIGV4YW1wbGVdICg6cnVtL2FyZ3MgcnVtLXN0YXRlKV1cclxuICAod2hlbi1sZXRcclxuICAgW2luaXQgKDppbml0LWV4YW1wbGUtZWRpdG9yIHN0YXRlKV1cclxuICAgKGluaXQgKHJ1bS9kb20tbm9kZSBydW0tc3RhdGUpIGV4YW1wbGUpKSlcclxuIHJ1bS1zdGF0ZSlcclxuIn0pLCBwYXJlbi1zb3VwLmRvbSAoezpzeW0gdG9wLWxldmVsPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdG9wLWxldmVsP1xyXG4gW25vZGVdXHJcbiAoYm9vbGVhblxyXG4gIChzb21lLT4gbm9kZSAuLXBhcmVudEVsZW1lbnQgLi1jbGFzc0xpc3QgKC5jb250YWlucyBcImNvbnRlbnRcIikpKSlcclxuIn0gezpzeW0gZ2V0LXNlbGVjdGlvbiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG9iamVjdHMgcmVsYXRlZCB0byBzZWxlY3Rpb24gZm9yIHRoZSBnaXZlbiBlbGVtZW50LiBJZiBmdWxsLXNlbGVjdGlvbj8gaXMgdHJ1ZSxcbml0IHdpbGwgdXNlIHJhbmd5IGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBzZWxlY3Rpb24gQVBJIGluIG9yZGVyIHRvIGdldCB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmdcbm9mIHRoZSBzZWxlY3Rpb24gKGl0IGlzLCBob3dldmVyLCBtdWNoIHNsb3dlcikuIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBmdWxsLXNlbGVjdGlvbj9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtc2VsZWN0aW9uXHJcbiBcIlJldHVybnMgdGhlIG9iamVjdHMgcmVsYXRlZCB0byBzZWxlY3Rpb24gZm9yIHRoZSBnaXZlbiBlbGVtZW50LiBJZiBmdWxsLXNlbGVjdGlvbj8gaXMgdHJ1ZSxcXG5pdCB3aWxsIHVzZSByYW5neSBpbnN0ZWFkIG9mIHRoZSBuYXRpdmUgc2VsZWN0aW9uIEFQSSBpbiBvcmRlciB0byBnZXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nXFxub2YgdGhlIHNlbGVjdGlvbiAoaXQgaXMsIGhvd2V2ZXIsIG11Y2ggc2xvd2VyKS5cIlxyXG4gW2VsZW1lbnQgZnVsbC1zZWxlY3Rpb24/XVxyXG4gezplbGVtZW50IGVsZW1lbnQsXHJcbiAgOmN1cnNvci1wb3NpdGlvblxyXG4gIChjb25kXHJcbiAgIGZ1bGwtc2VsZWN0aW9uP1xyXG4gICAobGV0XHJcbiAgICBbc2VsZWN0aW9uXHJcbiAgICAgKC5nZXRTZWxlY3Rpb24ganMvcmFuZ3kpXHJcbiAgICAgcmFuZ2VzXHJcbiAgICAgKC5zYXZlQ2hhcmFjdGVyUmFuZ2VzIHNlbGVjdGlvbiBlbGVtZW50KV1cclxuICAgIChpZi1sZXRcclxuICAgICBbY2hhci1yYW5nZSAoc29tZS0+IHJhbmdlcyAoYWdldCAwKSAoZ29iai9nZXQgXCJjaGFyYWN0ZXJSYW5nZVwiKSldXHJcbiAgICAgWyhnb2JqL2dldCBjaGFyLXJhbmdlIFwic3RhcnRcIikgKGdvYmovZ2V0IGNoYXItcmFuZ2UgXCJlbmRcIildXHJcbiAgICAgWzAgMF0pKVxyXG4gICAoPSAwICguLXJhbmdlQ291bnQgKC5nZXRTZWxlY3Rpb24ganMvd2luZG93KSkpXHJcbiAgIFswIDBdXHJcbiAgIDplbHNlXHJcbiAgIChsZXRcclxuICAgIFtzZWxlY3Rpb25cclxuICAgICAoLmdldFNlbGVjdGlvbiBqcy93aW5kb3cpXHJcbiAgICAgcmFuZ2VcclxuICAgICAoLmdldFJhbmdlQXQgc2VsZWN0aW9uIDApXHJcbiAgICAgcHJlLWNhcmV0LXJhbmdlXHJcbiAgICAgKGRvdG9cclxuICAgICAgKC5jbG9uZVJhbmdlIHJhbmdlKVxyXG4gICAgICAoLnNlbGVjdE5vZGVDb250ZW50cyBlbGVtZW50KVxyXG4gICAgICAoLnNldEVuZCAoLi1lbmRDb250YWluZXIgcmFuZ2UpICguLWVuZE9mZnNldCByYW5nZSkpKVxyXG4gICAgIHBvc1xyXG4gICAgICgtPiBwcmUtY2FyZXQtcmFuZ2UgLnRvU3RyaW5nIChzdHIvcmVwbGFjZSAjXCJcXHJcIiBcIlwiKSAuLWxlbmd0aCldXHJcbiAgICBbcG9zIHBvc10pKX0pXHJcbiJ9IHs6c3ltIGdldC1jdXJzb3ItcG9zaXRpb24sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjdXJzb3IgcG9zaXRpb24uIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBmdWxsLXNlbGVjdGlvbj9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY3Vyc29yLXBvc2l0aW9uXHJcbiBcIlJldHVybnMgdGhlIGN1cnNvciBwb3NpdGlvbi5cIlxyXG4gW2VsZW1lbnQgZnVsbC1zZWxlY3Rpb24/XVxyXG4gKC0+IGVsZW1lbnQgKGdldC1zZWxlY3Rpb24gZnVsbC1zZWxlY3Rpb24/KSA6Y3Vyc29yLXBvc2l0aW9uKSlcclxuIn0gezpzeW0gdGV4dC1ub2RlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmbiB0ZXh0LW5vZGU/IFtub2RlXSAoPSAzICguLW5vZGVUeXBlIG5vZGUpKSlcclxuIn0gezpzeW0gZ2V0LWZvY3VzZWQtZm9ybSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZ2V0LWZvY3VzZWQtZm9ybSAoZm4qIFtdIChnZXQtZm9jdXNlZC1lbGVtIFwiY29sbGVjdGlvblwiKSkpXHJcbiJ9IHs6c3ltIGdldC1mb2N1c2VkLXRvcC1sZXZlbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZm9jdXNlZC10b3AtbGV2ZWxcclxuIFtdXHJcbiAod2hlbi1sZXRcclxuICBbbm9kZSAoc29tZS0+IGpzL3Jhbmd5IC5nZXRTZWxlY3Rpb24gLi1hbmNob3JOb2RlKV1cclxuICAobG9vcFxyXG4gICBbbm9kZSBub2RlXVxyXG4gICAoaWZcclxuICAgICh0b3AtbGV2ZWw/IG5vZGUpXHJcbiAgICBub2RlXHJcbiAgICAod2hlbi1sZXQgW3BhcmVudCAoLi1wYXJlbnRFbGVtZW50IG5vZGUpXSAocmVjdXIgcGFyZW50KSkpKSkpXHJcbiJ9IHs6c3ltIGdldC1wYXJlbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZWFyZXN0IHBhcmVudCB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLiIsIDphcmdsaXN0cyAoW25vZGUgY2xhc3MtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1wYXJlbnRcclxuIFwiUmV0dXJucyB0aGUgbmVhcmVzdCBwYXJlbnQgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS5cIlxyXG4gW25vZGUgY2xhc3MtbmFtZV1cclxuIChsb29wXHJcbiAgW25vZGUgbm9kZV1cclxuICAod2hlbi1sZXRcclxuICAgW3BhcmVudCAoLi1wYXJlbnRFbGVtZW50IG5vZGUpXVxyXG4gICAoaWZcclxuICAgICguY29udGFpbnMgKC4tY2xhc3NMaXN0IHBhcmVudCkgY2xhc3MtbmFtZSlcclxuICAgIHBhcmVudFxyXG4gICAgKHJlY3VyIHBhcmVudCkpKSkpXHJcbiJ9IHs6c3ltIGNvbGwtbm9kZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbGwtbm9kZT9cclxuIFtub2RlXVxyXG4gKGJvb2xlYW4gKHNvbWUtPiBub2RlIC4tY2xhc3NMaXN0ICguY29udGFpbnMgXCJjb2xsZWN0aW9uXCIpKSkpXHJcbiJ9IHs6c3ltIGdldC1uZWFyZXN0LW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbmVhcmVzdC1uc1xyXG4gW25vZGVdXHJcbiAobG9vcFxyXG4gIFtub2RlIG5vZGVdXHJcbiAgKGlmXHJcbiAgIChzb21lLT4gbm9kZSAuLWNoaWxkTm9kZXMgKC5pdGVtIDEpIC4tdGV4dENvbnRlbnQgKD0gXCJuc1wiKSlcclxuICAgKHNvbWUtPiBub2RlIC4tY2hpbGROb2RlcyAoLml0ZW0gMykgLi10ZXh0Q29udGVudCBzeW1ib2wpXHJcbiAgICh3aGVuLWxldCBbc2libGluZyAoLi1wcmV2aW91c1NpYmxpbmcgbm9kZSldIChyZWN1ciBzaWJsaW5nKSkpKSlcclxuIn0gezpzeW0gaW5zZXJ0LXRleHQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RleHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnNlcnQtdGV4dCFcclxuIFt0ZXh0XVxyXG4gKGxldFxyXG4gIFtzZWxlY3Rpb25cclxuICAgKC5nZXRTZWxlY3Rpb24ganMvd2luZG93KVxyXG4gICByYW5nZVxyXG4gICAoLmdldFJhbmdlQXQgc2VsZWN0aW9uIDApXHJcbiAgIG5vZGVcclxuICAgKC5jcmVhdGVUZXh0Tm9kZSBqcy9kb2N1bWVudCB0ZXh0KV1cclxuICAoZG90b1xyXG4gICByYW5nZVxyXG4gICAuZGVsZXRlQ29udGVudHNcclxuICAgKC5pbnNlcnROb2RlIG5vZGUpXHJcbiAgICguc2V0U3RhcnRBZnRlciBub2RlKVxyXG4gICAoLnNldEVuZEFmdGVyIG5vZGUpXHJcbiAgICguY29sbGFwc2UgZmFsc2UpKSkpXHJcbiJ9IHs6c3ltIGdldC1jb21wbGV0aW9uLWluZm8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWNvbXBsZXRpb24taW5mb1xyXG4gW11cclxuICh3aGVuLWxldFxyXG4gIFtwcmVmaXgtZWxlbSAoZ2V0LWZvY3VzZWQtZWxlbSBcInN5bWJvbFwiKV1cclxuICAobGV0XHJcbiAgIFtwb3NcclxuICAgICgtPiBwcmVmaXgtZWxlbSAoZ2V0LWN1cnNvci1wb3NpdGlvbiBmYWxzZSkgZmlyc3QpXHJcbiAgICB0ZXh0XHJcbiAgICAoLi10ZXh0Q29udGVudCBwcmVmaXgtZWxlbSlcclxuICAgIHByZWZpeFxyXG4gICAgKHN1YnMgdGV4dCAwIHBvcyldXHJcbiAgIChhc3NvY1xyXG4gICAgKGdldC1jb21wbGV0aW9uLWNvbnRleHQgKGNvdW50IHRleHQpIChjb3VudCBwcmVmaXgpKVxyXG4gICAgOnRleHRcclxuICAgIHRleHRcclxuICAgIDpwcmVmaXhcclxuICAgIHByZWZpeCkpKSlcclxuIn0gezpzeW0gc2V0LWN1cnNvci1wb3NpdGlvbiEsIDptZXRhIHs6ZG9jICJNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBwb3NpdGlvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldC1jdXJzb3ItcG9zaXRpb24hXHJcbiBcIk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cIlxyXG4gW2VsZW1lbnQgcG9zaXRpb25dXHJcbiAobGV0XHJcbiAgW1tzdGFydC1wb3MgZW5kLXBvc11cclxuICAgcG9zaXRpb25cclxuICAgbWF4LWxlbmd0aFxyXG4gICAoLT4gZWxlbWVudCAuLXRleHRDb250ZW50IGNvdW50KVxyXG4gICBzZWxlY3Rpb25cclxuICAgKC5nZXRTZWxlY3Rpb24ganMvcmFuZ3kpXHJcbiAgIGNoYXItcmFuZ2VcclxuICAgI2pzIHs6c3RhcnQgc3RhcnQtcG9zLCA6ZW5kIGVuZC1wb3N9XHJcbiAgIHJhbmdlXHJcbiAgICNqcyB7OmNoYXJhY3RlclJhbmdlIGNoYXItcmFuZ2UsIDpiYWNrd2FyZCBmYWxzZSwgOmNoYXJhY3Rlck9wdGlvbnMgbmlsfVxyXG4gICByYW5nZXNcclxuICAgKGFycmF5IHJhbmdlKV1cclxuICAoLnJlc3RvcmVDaGFyYWN0ZXJSYW5nZXMgc2VsZWN0aW9uIGVsZW1lbnQgcmFuZ2VzKSkpXHJcbiJ9IHs6c3ltIGdldC1mb2N1c2VkLWVsZW0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2xhc3MtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1mb2N1c2VkLWVsZW1cclxuIFtjbGFzcy1uYW1lXVxyXG4gKHNvbWUtPiBqcy9yYW5neSAuZ2V0U2VsZWN0aW9uIC4tYW5jaG9yTm9kZSAoZ2V0LXBhcmVudCBjbGFzcy1uYW1lKSkpXHJcbiJ9IHs6c3ltIGVycm9yLW5vZGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlcnJvci1ub2RlP1xyXG4gW25vZGVdXHJcbiAoYm9vbGVhbiAoc29tZS0+IG5vZGUgLi1jbGFzc0xpc3QgKC5jb250YWlucyBcImVycm9yXCIpKSkpXHJcbiJ9IHs6c3ltIGdldC1jb21wbGV0aW9uLWNvbnRleHQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltYm9sLWxlbmd0aCBjdXJzb3Itb2Zmc2V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWNvbXBsZXRpb24tY29udGV4dFxyXG4gW3N5bWJvbC1sZW5ndGggY3Vyc29yLW9mZnNldF1cclxuICh3aGVuLWxldFxyXG4gIFt0b3AtbGV2ZWwtZWxlbSAoZ2V0LWZvY3VzZWQtdG9wLWxldmVsKV1cclxuICAobGV0XHJcbiAgIFtwb3NcclxuICAgICgtPiB0b3AtbGV2ZWwtZWxlbSAoZ2V0LWN1cnNvci1wb3NpdGlvbiBmYWxzZSkgZmlyc3QpXHJcbiAgICBwcmVmaXgtc3RhcnRcclxuICAgICgtIHBvcyBjdXJzb3Itb2Zmc2V0KVxyXG4gICAgdGV4dFxyXG4gICAgKC4tdGV4dENvbnRlbnQgdG9wLWxldmVsLWVsZW0pXVxyXG4gICB7Om5zIChnZXQtbmVhcmVzdC1ucyB0b3AtbGV2ZWwtZWxlbSksXHJcbiAgICA6Y29udGV4dC1iZWZvcmUgKHN1YnMgdGV4dCAwIHByZWZpeC1zdGFydCksXHJcbiAgICA6Y29udGV4dC1hZnRlciAoc3VicyB0ZXh0ICgrIHByZWZpeC1zdGFydCBzeW1ib2wtbGVuZ3RoKSksXHJcbiAgICA6c3RhcnQtcG9zaXRpb24gcHJlZml4LXN0YXJ0fSkpKVxyXG4ifSB7OnN5bSBjb21tb24tYW5jZXN0b3IsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIG5vZGVzLiIsIDphcmdsaXN0cyAoW2ZpcnN0LW5vZGUgc2Vjb25kLW5vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21tb24tYW5jZXN0b3JcclxuIFwiUmV0dXJucyB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIHRoZSBnaXZlbiBub2Rlcy5cIlxyXG4gW2ZpcnN0LW5vZGUgc2Vjb25kLW5vZGVdXHJcbiAobGV0XHJcbiAgW2ZpcnN0LXBhcmVudFxyXG4gICAoZmlyc3QgKGdldC1wYXJlbnRzIGZpcnN0LW5vZGUgXCJjb2xsZWN0aW9uXCIpKVxyXG4gICBzZWNvbmQtcGFyZW50XHJcbiAgIChmaXJzdCAoZ2V0LXBhcmVudHMgc2Vjb25kLW5vZGUgXCJjb2xsZWN0aW9uXCIpKV1cclxuICAoY29uZFxyXG4gICAoYW5kIGZpcnN0LXBhcmVudCBzZWNvbmQtcGFyZW50ICg9IGZpcnN0LXBhcmVudCBzZWNvbmQtcGFyZW50KSlcclxuICAgZmlyc3QtcGFyZW50XHJcbiAgIChhbmRcclxuICAgICg9IGZpcnN0LW5vZGUgc2Vjb25kLW5vZGUpXHJcbiAgICAodGV4dC1ub2RlPyBmaXJzdC1ub2RlKVxyXG4gICAgKHRvcC1sZXZlbD8gZmlyc3Qtbm9kZSkpXHJcbiAgIGZpcnN0LW5vZGUpKSlcclxuIn0gezpzeW0gZ2V0LXBhcmVudHMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFsbCB0aGUgcGFyZW50cyB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLiIsIDphcmdsaXN0cyAoW25vZGUgY2xhc3MtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1wYXJlbnRzXHJcbiBcIlJldHVybnMgYWxsIHRoZSBwYXJlbnRzIHdpdGggdGhlIGdpdmVuIGNsYXNzIG5hbWUuXCJcclxuIFtub2RlIGNsYXNzLW5hbWVdXHJcbiAobG9vcFxyXG4gIFtub2RlIG5vZGUgZWxlbXMgJygpXVxyXG4gIChpZi1sZXRcclxuICAgW3BhcmVudCAoZ2V0LXBhcmVudCBub2RlIGNsYXNzLW5hbWUpXVxyXG4gICAocmVjdXIgcGFyZW50IChjb25qIGVsZW1zIHBhcmVudCkpXHJcbiAgIGVsZW1zKSkpXHJcbiJ9IHs6c3ltIG5vZGU/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBub2RlPyAoZm4qIFtwMV9fNDkwMzkjXSAoaW5zdGFuY2U/IGpzL05vZGUgcDFfXzQ5MDM5IykpKVxyXG4ifSB7OnN5bSBzY3JvbGwtdG8tbmVhcmVzdC1lbGVtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNjcm9sbC10by1uZWFyZXN0LWVsZW1cclxuIFtdXHJcbiAoc29tZS0+XHJcbiAganMvcmFuZ3lcclxuICAuZ2V0U2VsZWN0aW9uXHJcbiAgLi1hbmNob3JOb2RlXHJcbiAgLi1wYXJlbnRFbGVtZW50XHJcbiAgKC5zY3JvbGxJbnRvVmlld1xyXG4gICAjanMgezpiZWhhdmlvciBcImF1dG9cIiwgOmJsb2NrIFwibmVhcmVzdFwiLCA6aW5saW5lIFwibmVhcmVzdFwifSkpKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyLmltcGwuZXJyb3JzICh7OnN5bSB0aHJvdy1iYWQtZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWRpc3BhdGNoXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJObyBkaXNwYXRjaCBtYWNybyBmb3IgXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZXNjYXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1lc2NhcGVcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBlc2NhcGU6IFxcXFx1XCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1kdXAta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCBrc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWR1cC1rZXlzXHJcbiBbcmRyIGtpbmQga3NdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgKGR1cGxpY2F0ZS1rZXlzLWVycm9yXHJcbiAgIChzdHIgKHMvY2FwaXRhbGl6ZSAobmFtZSBraW5kKSkgXCIgbGl0ZXJhbCBjb250YWlucyBkdXBsaWNhdGUga2V5XCIpXHJcbiAgIGtzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbnMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1uc1xyXG4gW3JkciBucy1uYW1lXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCB2YWx1ZSB1c2VkIGFzIG5hbWVzcGFjZSBpbiBuYW1lc3BhY2VkIG1hcDogXCJcclxuICBucy1uYW1lXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bmtub3duLXJlYWRlci10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVua25vd24tcmVhZGVyLXRhZ1xyXG4gW3JkciB0YWddXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk5vIHJlYWRlciBmdW5jdGlvbiBmb3IgdGFnIFwiIChpL2luc3BlY3QgdGFnKSBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1hdC1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtYXQtZGlzcGF0Y2hcclxuIFtyZHJdXHJcbiAoZW9mLWVycm9yIHJkciBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgZGlzcGF0Y2ggY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW1ldGFkYXRhLXRhcmdldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFyZ2V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW1ldGFkYXRhLXRhcmdldFxyXG4gW3JkciB0YXJnZXRdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJNZXRhZGF0YSBjYW4gbm90IGJlIGFwcGxpZWQgdG8gXCJcclxuICAoaS9pbnNwZWN0IHRhcmdldClcclxuICBcIi4gXCJcclxuICBcIk1ldGFkYXRhIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gSU1ldGFzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1udW1iZXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgbnVtYmVyOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHJlYWRlci1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOnJlYWRlci1lcnJvciAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWxpdGVyYWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWxpdGVyYWxcclxuIFtyZHIgdG9rZW5dXHJcbiAodGhyb3dcclxuICAoaWxsZWdhbC1hcmctZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGxpdGVyYWw6IFxcXFxcIiB0b2tlbiBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1ucy1tYXAtbm8tbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBucy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctbnMtbWFwLW5vLW1hcFxyXG4gW3JkciBucy1uYW1lXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTmFtZXNwYWNlZCBtYXAgd2l0aCBuYW1lc3BhY2UgXCJcclxuICBucy1uYW1lXHJcbiAgXCIgZG9lcyBub3Qgc3BlY2lmeSBhIG1hcC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVuc3VwcG9ydGVkLWNoYXJhY3RlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bnN1cHBvcnRlZC1jaGFyYWN0ZXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1mZWF0dXJlLW5vdC1rZXl3b3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBmZWF0dXJlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZmVhdHVyZS1ub3Qta2V5d29yZFxyXG4gW3JkciBmZWF0dXJlXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiRmVhdHVyZSBjYW5ub3QgYmUgXCJcclxuICAoaS9pbnNwZWN0IGZlYXR1cmUpXHJcbiAgXCIgRmVhdHVyZXMgbXVzdCBiZSBrZXl3b3Jkcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1kZWxpbWl0ZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcmRyIGtpbmQgY29sdW1uIGxpbmVdIFtyZHIga2luZCBsaW5lIGNvbHVtbiBuXV19LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWRlbGltaXRlZFxyXG4gKFtyZHIga2luZCBjb2x1bW4gbGluZV1cclxuICAodGhyb3ctZW9mLWRlbGltaXRlZCByZHIga2luZCBsaW5lIGNvbHVtbiBuaWwpKVxyXG4gKFtyZHIga2luZCBsaW5lIGNvbHVtbiBuXVxyXG4gIChlb2YtZXJyb3JcclxuICAgcmRyXHJcbiAgIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBcIlxyXG4gICAoaWYgbiAoc3RyIFwiaXRlbSBcIiBuIFwiIG9mIFwiKSlcclxuICAgKG5hbWUga2luZClcclxuICAgKGlmIGxpbmUgKHN0ciBcIiwgc3RhcnRpbmcgYXQgbGluZSBcIiBsaW5lIFwiIGFuZCBjb2x1bW4gXCIgY29sdW1uKSlcclxuICAgXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWluLWNoYXJhY3RlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtaW4tY2hhcmFjdGVyXHJcbiBbcmRyXVxyXG4gKGVvZi1lcnJvciByZHIgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWNoYXJcclxuIFtyZHIga2luZCBjaF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgY2hhcmFjdGVyOiBcIlxyXG4gIGNoXHJcbiAgXCIgZm91bmQgd2hpbGUgcmVhZGluZyBcIlxyXG4gIChuYW1lIGtpbmQpXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSBlb2YtZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW9mLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDplb2YgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1tZXRhZGF0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1tZXRhZGF0YVxyXG4gW3JkciB4XVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTWV0YWRhdGEgY2Fubm90IGJlIFwiXHJcbiAgKGkvaW5zcGVjdCB4KVxyXG4gIFwiLiBNZXRhZGF0YSBtdXN0IGJlIGEgU3ltYm9sLCBLZXl3b3JkLCBTdHJpbmcgb3IgTWFwLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLXJlYWRpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgJiBzdGFydF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1yZWFkaW5nXHJcbiBbcmRyIGtpbmQgJiBzdGFydF1cclxuIChsZXRcclxuICBbaW5pdCAoY2FzZSBraW5kIDpyZWdleCBcIiNcXFwiXCIgOnN0cmluZyBcXFwiKV1cclxuICAoZW9mLWVycm9yXHJcbiAgIHJkclxyXG4gICBcIlVuZXhwZWN0ZWQgRU9GIHJlYWRpbmcgXCJcclxuICAgKG5hbWUga2luZClcclxuICAgXCIgc3RhcnRpbmcgXCJcclxuICAgKGFwcGx5IHN0ciBpbml0IHN0YXJ0KVxyXG4gICBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtZXJyb3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtZXJyb3JcclxuIFtyZHIgbGluZV1cclxuIChpZlxyXG4gIGxpbmVcclxuICAoZW9mLWVycm9yIHJkciBcIkVPRiB3aGlsZSByZWFkaW5nLCBzdGFydGluZyBhdCBsaW5lIFwiIGxpbmUgXCIuXCIpXHJcbiAgKGVvZi1lcnJvciByZHIgXCJFT0Ygd2hpbGUgcmVhZGluZy5cIikpKVxyXG4ifSB7OnN5bSBpbGxlZ2FsLWFyZy1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbGxlZ2FsLWFyZy1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6aWxsZWdhbC1hcmd1bWVudCAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1vY3RhbC1sZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1vY3RhbC1sZW5cclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZSBpbiBhIGNoYXJhY3RlciBsaXRlcmFsOlwiXHJcbiAgdG9rZW5cclxuICBcIi4gT2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBtdXN0IGJlIDMgb3IgZmV3ZXIgZGlnaXRzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdFxyXG4gW3JkciBjaF1cclxuIChpbGxlZ2FsLWFyZy1lcnJvciByZHIgXCJJbnZhbGlkIGRpZ2l0IFwiIGNoIFwiIGluIHVuaWNvZGUgY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LWluLXRva2VuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaCB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdC1pbi10b2tlblxyXG4gW3JkciBjaCB0b2tlbl1cclxuIChpbGxlZ2FsLWFyZy1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBkaWdpdCBcIlxyXG4gIGNoXHJcbiAgXCIgaW4gdW5pY29kZSBjaGFyYWN0ZXIgXFxcXFwiXHJcbiAgdG9rZW5cclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1sZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGFjdHVhbCBleHBlY3RlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1sZW5cclxuIFtyZHIgYWN0dWFsIGV4cGVjdGVkXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHVuaWNvZGUgbGl0ZXJhbC4gVW5pY29kZSBsaXRlcmFscyBzaG91bGQgYmUgXCJcclxuICBleHBlY3RlZFxyXG4gIFwiY2hhcmFjdGVycyBsb25nLiAgXCJcclxuICBcInZhbHVlIHN1cHBsZWQgaXMgXCJcclxuICBhY3R1YWxcclxuICBcImNoYXJhY3RlcnMgbG9uZy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXNpbmdsZS1jb2xvbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1zaW5nbGUtY29sb25cclxuIFtyZHJdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkEgc2luZ2xlIGNvbG9uIGlzIG5vdCBhIHZhbGlkIGtleXdvcmQuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1vZGQtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBsaW5lIGNvbCBlbGVtZW50c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LW9kZC1tYXBcclxuIFtyZHIgbGluZSBjb2wgZWxlbWVudHNdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJUaGUgbWFwIGxpdGVyYWwgc3RhcnRpbmcgd2l0aCBcIlxyXG4gIChpL2luc3BlY3QgKGZpcnN0IGVsZW1lbnRzKSlcclxuICAoaWYgbGluZSAoc3RyIFwiIG9uIGxpbmUgXCIgbGluZSBcIiBjb2x1bW4gXCIgY29sKSlcclxuICBcIiBjb250YWlucyBcIlxyXG4gIChjb3VudCBlbGVtZW50cylcclxuICBcIiBmb3JtKHMpLiBNYXAgbGl0ZXJhbHMgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGZvcm1zLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW9jdGFsLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtb2N0YWwtbnVtYmVyXHJcbiBbcmRyXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJPY3RhbCBlc2NhcGUgc2VxdWVuY2UgbXVzdCBiZSBpbiByYW5nZSBbMCwgMzc3XS5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1yZWFkZXItdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtcmVhZGVyLXRhZ1xyXG4gW3JkciB0YWddXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHJlYWRlciB0YWc6IFwiXHJcbiAgKGkvaW5zcGVjdCB0YWcpXHJcbiAgXCIuIFJlYWRlciB0YWdzIG11c3QgYmUgc3ltYm9scy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVubWF0Y2gtZGVsaW1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVubWF0Y2gtZGVsaW1pdGVyXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbm1hdGNoZWQgZGVsaW1pdGVyIFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1jaGFyYWN0ZXItbGl0ZXJhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLWNoYXJhY3Rlci1saXRlcmFsXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIGNoYXJhY3RlciBsaXRlcmFsIFxcXFx1XCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtY2hhclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGNoYXJhY3RlciBcXFxcXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtZXNjYXBlLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWVzY2FwZS1jaGFyXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbnN1cHBvcnRlZCBlc2NhcGUgY2hhcmFjdGVyOiBcXFxcXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1uby1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuIHRocm93LW5vLWRpc3BhdGNoIFtyZHIgY2hdICh0aHJvdy1iYWQtZGlzcGF0Y2ggcmRyIGNoKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWF0LXN0YXJ0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWF0LXN0YXJ0XHJcbiBbcmRyIGtpbmRdXHJcbiAoZW9mLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIHN0YXJ0IG9mIFwiXHJcbiAgKG5hbWUga2luZClcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkXHJcbiBbcmRyIGtpbmQgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgXCIgKG5hbWUga2luZCkgXCI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0pLCBkeW5hZG9jLmNvcmUgKHs6c3ltIGNsai1jb21waWxlci1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleGFtcGxlIGZvcm1zIGNiXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xqLWNvbXBpbGVyLWZuXHJcbiBbZXhhbXBsZSBmb3JtcyBjYl1cclxuIChsZXRcclxuICBbbnMtc3ltICg6bnMtc3ltIChjb21tb24vZ2V0LXN0YXRlKSldXHJcbiAgKHRyeVxyXG4gICAoLnNlbmRcclxuICAgIFhocklvXHJcbiAgICBcIi9ldmFsXCJcclxuICAgIChmblxyXG4gICAgIFtlXVxyXG4gICAgIChpZlxyXG4gICAgICAoLmlzU3VjY2VzcyAoLi10YXJnZXQgZSkpXHJcbiAgICAgICgtPj5cclxuICAgICAgICguLiBlIC10YXJnZXQgZ2V0UmVzcG9uc2VUZXh0KVxyXG4gICAgICAgcmVhZC1zdHJpbmdcclxuICAgICAgIHJlc3RcclxuICAgICAgIChtYXB2XHJcbiAgICAgICAgKGZuKlxyXG4gICAgICAgICBbcDFfXzQ4OTkzI11cclxuICAgICAgICAgKGlmICh2ZWN0b3I/IHAxX180ODk5MyMpIChpbnRvLWFycmF5IHAxX180ODk5MyMpIHAxX180ODk5MyMpKSlcclxuICAgICAgIGNiKVxyXG4gICAgICAoY2IgW10pKSlcclxuICAgIFwiUE9TVFwiXHJcbiAgICAocHItc3RyXHJcbiAgICAgKGludG9cclxuICAgICAgWyhsaXN0ICdpbi1ucyAobGlzdCAncXVvdGUgbnMtc3ltKSldXHJcbiAgICAgIChtYXB2IChwYXJ0aWFsIHRyYW5zZm9ybSAoZGlzc29jIGV4YW1wbGUgOndpdGgtY2FyZCkpIGZvcm1zKSkpKVxyXG4gICAoY2F0Y2gganMvRXJyb3IgXyAoY2IgW10pKSkpKVxyXG4ifSB7OnN5bSBmb3JtLT5zZXJpYWxpemFibGUsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyB0aGUgaW5wdXQgdG8gZWl0aGVyIGEgc3RyaW5nIG9yIChpZiBhbiBlcnJvciBvYmplY3QpIGFuIGFycmF5IG9mIGRhdGEiLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9ybS0+c2VyaWFsaXphYmxlXHJcbiBcIkNvbnZlcnRzIHRoZSBpbnB1dCB0byBlaXRoZXIgYSBzdHJpbmcgb3IgKGlmIGFuIGVycm9yIG9iamVjdCkgYW4gYXJyYXkgb2YgZGF0YVwiXHJcbiBbZm9ybV1cclxuIChpZlxyXG4gIChpbnN0YW5jZT8ganMvRXJyb3IgZm9ybSlcclxuICAoYXJyYXlcclxuICAgKG9yIChzb21lLT4gZm9ybSAuLWNhdXNlIC4tbWVzc2FnZSkgKC4tbWVzc2FnZSBmb3JtKSlcclxuICAgKC4tZmlsZU5hbWUgZm9ybSlcclxuICAgKC4tbGluZU51bWJlciBmb3JtKSlcclxuICAocHItc3RyIGZvcm0pKSlcclxuIn0gezpzeW0gaW5pdC1lZGl0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtZWRpdG9yXHJcbiBbZWxlbV1cclxuICh3aGVuLWxldFxyXG4gIFtwYXJlbi1zb3VwIChvciAoLnF1ZXJ5U2VsZWN0b3IgZWxlbSBcIi5wYXJlbi1zb3VwXCIpIGVsZW0pXVxyXG4gIChwcy9pbml0IHBhcmVuLXNvdXAgKGpzLT5jbGogezpjb21waWxlci1mbiAoZm4gW10pfSkpKSlcclxuIn0gezpzeW0gY2xqcy1jb21waWxlci1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleGFtcGxlIGZvcm1zIGNiXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xqcy1jb21waWxlci1mblxyXG4gW2V4YW1wbGUgZm9ybXMgY2JdXHJcbiAobGV0XHJcbiAgW25zLXN5bSAoOm5zLXN5bSAoY29tbW9uL2dldC1zdGF0ZSkpXVxyXG4gIChlcy9jb2RlLT5yZXN1bHRzXHJcbiAgIChpbnRvIFsobGlzdCAnbnMgbnMtc3ltKV0gKG1hcHYgKHBhcnRpYWwgdHJhbnNmb3JtIGV4YW1wbGUpIGZvcm1zKSlcclxuICAgKGZuIFtyZXN1bHRzXSAoLT4+IHJlc3VsdHMgcmVzdCAobWFwdiBmb3JtLT5zZXJpYWxpemFibGUpIGNiKSlcclxuICAgezpjdXN0b20tbG9hZCAoZm4gW29wdHMgY2JdIChjYiB7OmxhbmcgOmNsaiwgOnNvdXJjZSBcIlwifSkpLFxyXG4gICAgOmRpc2FibGUtdGltZW91dD8gdHJ1ZX0pKSlcclxuIn0gezpzeW0gdHJhbnNmb3JtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbd2l0aC1mb2N1cyB3aXRoLWNhcmQgd2l0aC1jYWxsYmFja10sIDphcyBleH0gZm9ybS1zdHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2Zvcm1cclxuIFt7OmtleXMgW3dpdGgtZm9jdXMgd2l0aC1jYXJkIHdpdGgtY2FsbGJhY2tdLCA6YXMgZXh9IGZvcm0tc3RyXVxyXG4gKGlmXHJcbiAgKG9yIHdpdGgtZm9jdXMgd2l0aC1jYXJkIHdpdGgtY2FsbGJhY2spXHJcbiAgKHRyYW5zZm9ybS90cmFuc2Zvcm0gZXggKHJlYWQtc3RyaW5nIGZvcm0tc3RyKSlcclxuICBmb3JtLXN0cikpXHJcbiJ9IHs6c3ltIGluaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdFxyXG4gW11cclxuICgtPj5cclxuICAoLnF1ZXJ5U2VsZWN0b3IganMvZG9jdW1lbnQgXCIjaW5pdGlhbC1zdGF0ZVwiKVxyXG4gIC4tdGV4dENvbnRlbnRcclxuICBqcy9hdG9iXHJcbiAgcmVhZC1zdHJpbmdcclxuICAoc3dhcCEgY29tbW9uLypzZXNzaW9uIGNvbW1vbi91cGRhdGUtc2Vzc2lvbiA6ZHluYWRvYy5jb21tb24vc2VydmVyKSlcclxuIChydW0vaHlkcmF0ZVxyXG4gIChjb21tb24vYXBwLXJvb3QgY29tbW9uLypzZXNzaW9uKVxyXG4gICgucXVlcnlTZWxlY3RvciBqcy9kb2N1bWVudCBcIiNhcHBcIikpXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbdmFyLXN5bSB3YXRjaGVyXX0gKGNvbW1vbi9nZXQtc3RhdGUpXVxyXG4gICgtPj5cclxuICAgezpkeW5hZG9jLmNvbW1vbi9jbGpzLXN0YXJ0ZWQ/IHRydWUsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0YWJsZT8ganMvQ09NUElMRUQsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vaW5pdC1lZGl0b3IgKG1lbW9pemUgaW5pdC1lZGl0b3IpLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2luaXQtZXhhbXBsZS1lZGl0b3IgKG1lbW9pemUgaW5pdC1leGFtcGxlLWVkaXRvciksXHJcbiAgICA6ZHluYWRvYy5jb21tb24vd2F0Y2hlclxyXG4gICAgKHdoZW4tbm90IGpzL0NPTVBJTEVEIChvciB3YXRjaGVyIChpbml0LXdhdGNoZXIhKSkpfVxyXG4gICAoc3dhcCFcclxuICAgIGNvbW1vbi8qc2Vzc2lvblxyXG4gICAgY29tbW9uL3VwZGF0ZS1zZXNzaW9uXHJcbiAgICA6ZHluYWRvYy5jb21tb24vY2xpZW50KSlcclxuICAod2hlblxyXG4gICB2YXItc3ltXHJcbiAgIChkb3NlcVxyXG4gICAgW2J1dHRvbiAoLT4ganMvZG9jdW1lbnQgKC5xdWVyeVNlbGVjdG9yQWxsIFwiLmJ1dHRvblwiKSBhcnJheS1zZXEpXVxyXG4gICAgKHNldCEgKC4tZGlzcGxheSAoLi1zdHlsZSBidXR0b24pKSBcImlubGluZS1ibG9ja1wiKSkpKSlcclxuIn0gezpzeW0gcmVhZC1zdHJpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc3RyaW5nXHJcbiBbc11cclxuIChiaW5kaW5nXHJcbiAgW3IvKnN1cHByZXNzLXJlYWQqIHRydWVdXHJcbiAgKHIvcmVhZC1zdHJpbmcgezpyZWFkLWNvbmQgOnByZXNlcnZlLCA6ZW9mIG5pbH0gcykpKVxyXG4ifSB7OnN5bSBpbml0LWV4YW1wbGUtZWRpdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VsZW0gZXhhbXBsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtZXhhbXBsZS1lZGl0b3JcclxuIFtlbGVtIGV4YW1wbGVdXHJcbiAod2hlbi1sZXRcclxuICBbcGFyZW4tc291cCAob3IgKC5xdWVyeVNlbGVjdG9yIGVsZW0gXCIucGFyZW4tc291cFwiKSBlbGVtKV1cclxuICAod2hlbi1sZXRcclxuICAgW2NvbnRlbnQgKC5xdWVyeVNlbGVjdG9yIHBhcmVuLXNvdXAgXCIuY29udGVudFwiKV1cclxuICAgKHNldCEgKC4tY29udGVudEVkaXRhYmxlIGNvbnRlbnQpIHRydWUpKVxyXG4gIChsZXRcclxuICAgW3R5cGUgKDp0eXBlIChjb21tb24vZ2V0LXN0YXRlKSldXHJcbiAgIChwcy9pbml0XHJcbiAgICBwYXJlbi1zb3VwXHJcbiAgICAoanMtPmNsalxyXG4gICAgIHs6Y29tcGlsZXItZm5cclxuICAgICAgKGlmXHJcbiAgICAgICAoPSA6Y2xqIHR5cGUpXHJcbiAgICAgICAocGFydGlhbCBjbGotY29tcGlsZXItZm4gZXhhbXBsZSlcclxuICAgICAgIChwYXJ0aWFsIGNsanMtY29tcGlsZXItZm4gZXhhbXBsZSkpfSkpKSkpXHJcbiJ9IHs6c3ltIGluaXQtd2F0Y2hlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC13YXRjaGVyIVxyXG4gW11cclxuIChsZXRcclxuICBbcHJvdG9jb2xcclxuICAgKGlmICg9ICguLXByb3RvY29sIGpzL2xvY2F0aW9uKSBcImh0dHBzOlwiKSBcIndzczpcIiBcIndzOlwiKVxyXG4gICBob3N0XHJcbiAgICgtPiBqcy93aW5kb3cgLi1sb2NhdGlvbiAuLWhvc3QpXHJcbiAgIHNvY2tcclxuICAgKGpzL1dlYlNvY2tldC4gKHN0ciBwcm90b2NvbCBcIi8vXCIgaG9zdCBcIi93YXRjaFwiKSldXHJcbiAgKHNldCFcclxuICAgKC4tb25vcGVuIHNvY2spXHJcbiAgIChmbiBbZXZlbnRdICguc2VuZCBzb2NrIGpzL3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSkpKVxyXG4gIChzZXQhXHJcbiAgICguLW9ubWVzc2FnZSBzb2NrKVxyXG4gICAoZm5cclxuICAgIFtldmVudF1cclxuICAgICgtPj5cclxuICAgICAoLi1kYXRhIGV2ZW50KVxyXG4gICAgIHJlYWQtc3RyaW5nXHJcbiAgICAgKHN3YXAhXHJcbiAgICAgIGNvbW1vbi8qc2Vzc2lvblxyXG4gICAgICBjb21tb24vdXBkYXRlLXNlc3Npb25cclxuICAgICAgOmR5bmFkb2MuY29tbW9uL3NlcnZlcikpKSlcclxuICBzb2NrKSlcclxuIn0pLCBleHBvdW5kLmFscGhhICh7OnN5bSBlcnJvci1tZXNzYWdlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIG5hbWVkIGBrYCwgcmV0dXJuIGl0cyBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLiIsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlcnJvci1tZXNzYWdlXHJcbiBcIkdpdmVuIGEgc3BlYyBuYW1lZCBga2AsIHJldHVybiBpdHMgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cIlxyXG4gW2tdXHJcbiAoZ2V0IEByZWdpc3RyeS1yZWYgaykpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tcmVzdWx0LCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSByZXN1bHQgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCBwcmludHMgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbY2hlY2stcmVzdWx0XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1yZXN1bHRcclxuIFwiR2l2ZW4gYSByZXN1bHQgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCBwcmludHMgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHQuXCJcclxuIFtjaGVjay1yZXN1bHRdXHJcbiAod2hlblxyXG4gICg9IHMvKmV4cGxhaW4tb3V0KiBzL2V4cGxhaW4tcHJpbnRlcilcclxuICAodGhyb3dcclxuICAgKGV4LWluZm9cclxuICAgIFwiQ2Fubm90IHByaW50IGNoZWNrIHJlc3VsdHMgd2l0aCBkZWZhdWx0IHByaW50ZXIuIFVzZSAnc2V0IScgb3IgJ2JpbmRpbmcnIHRvIHVzZSBFeHBvdW5kIHByaW50ZXIuXCJcclxuICAgIHt9KSkpXHJcbiAocy8qZXhwbGFpbi1vdXQqIGNoZWNrLXJlc3VsdCkpXHJcbiJ9IHs6c3ltIGN1c3RvbS1wcmludGVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHByaW50ZXIuXG5cbiAgT3B0aW9uczpcbiAgIDpzaG93LXZhbGlkLXZhbHVlcz8gLSBpZiBmYWxzZSwgcmVwbGFjZXMgdmFsaWQgdmFsdWVzIHdpdGggXCIuLi5cIlxuICAgOnZhbHVlLXN0ci1mbiAgICAgICAtIGZ1bmN0aW9uIHRvIHByaW50IGJhZCB2YWx1ZXNcbiAgIDpwcmludC1zcGVjcz8gICAgICAgLSBpZiB0cnVlLCBkaXNwbGF5IFwiUmVsZXZhbnQgc3BlY3NcIiBzZWN0aW9uLiBPdGhlcndpc2UsIG9taXQgdGhhdCBzZWN0aW9uLlxuICAgOnRoZW1lICAgICAgICAgICAgICAgLSBlbmFibGVzIGNvbG9yIHRoZW1lLiBQb3NzaWJsZSB2YWx1ZXM6IDpmaWd3aGVlbC10aGVtZSwgOm5vbmUiLCA6YXJnbGlzdHMgKFtvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3VzdG9tLXByaW50ZXJcclxuIFwiUmV0dXJucyBhIHByaW50ZXIuXFxuXFxuICBPcHRpb25zOlxcbiAgIDpzaG93LXZhbGlkLXZhbHVlcz8gLSBpZiBmYWxzZSwgcmVwbGFjZXMgdmFsaWQgdmFsdWVzIHdpdGggXFxcIi4uLlxcXCJcXG4gICA6dmFsdWUtc3RyLWZuICAgICAgIC0gZnVuY3Rpb24gdG8gcHJpbnQgYmFkIHZhbHVlc1xcbiAgIDpwcmludC1zcGVjcz8gICAgICAgLSBpZiB0cnVlLCBkaXNwbGF5IFxcXCJSZWxldmFudCBzcGVjc1xcXCIgc2VjdGlvbi4gT3RoZXJ3aXNlLCBvbWl0IHRoYXQgc2VjdGlvbi5cXG4gICA6dGhlbWUgICAgICAgICAgICAgICAtIGVuYWJsZXMgY29sb3IgdGhlbWUuIFBvc3NpYmxlIHZhbHVlczogOmZpZ3doZWVsLXRoZW1lLCA6bm9uZVwiXHJcbiBbb3B0c11cclxuIChmbiBbZXhwbGFpbi1kYXRhXSAocHJpbnQgKHByaW50ZXItc3RyIG9wdHMgZXhwbGFpbi1kYXRhKSkpKVxyXG4ifSB7OnN5bSBwcmludGVyLCA6bWV0YSB7OmRvYyAiUHJpbnRzIGBleHBsYWluLWRhdGFgIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0LiIsIDphcmdsaXN0cyAoW2V4cGxhaW4tZGF0YV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50ZXJcclxuIFwiUHJpbnRzIGBleHBsYWluLWRhdGFgIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0LlwiXHJcbiBbZXhwbGFpbi1kYXRhXVxyXG4gKChjdXN0b20tcHJpbnRlciB7fSkgZXhwbGFpbi1kYXRhKSlcclxuIn0gezpzeW0gZXhwbGFpbi1yZXN1bHQtc3RyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSByZXN1bHQgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCByZXR1cm5zIGEgc3RyaW5nIHN1bW1hcml6aW5nIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbY2hlY2stcmVzdWx0XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1yZXN1bHQtc3RyXHJcbiBcIkdpdmVuIGEgcmVzdWx0IGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcmV0dXJucyBhIHN0cmluZyBzdW1tYXJpemluZyB0aGUgcmVzdWx0LlwiXHJcbiBbY2hlY2stcmVzdWx0XVxyXG4gKHdpdGgtb3V0LXN0ciAoZXhwbGFpbi1yZXN1bHQgY2hlY2stcmVzdWx0KSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tcmVzdWx0cywgOm1ldGEgezpkb2MgIkdpdmVuIGEgc2VxdWVuY2Ugb2YgcmVzdWx0cyBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHByaW50cyBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMuIiwgOmFyZ2xpc3RzIChbY2hlY2stcmVzdWx0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tcmVzdWx0c1xyXG4gXCJHaXZlbiBhIHNlcXVlbmNlIG9mIHJlc3VsdHMgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCBwcmludHMgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzLlwiXHJcbiBbY2hlY2stcmVzdWx0c11cclxuIChkb3NlcVxyXG4gIFtjaGVjay1yZXN1bHQgKGJ1dGxhc3QgY2hlY2stcmVzdWx0cyldXHJcbiAgKGV4cGxhaW4tcmVzdWx0IGNoZWNrLXJlc3VsdClcclxuICAocHJpbnQgXCJcXG5cXG5cIikpXHJcbiAoZXhwbGFpbi1yZXN1bHQgKGxhc3QgY2hlY2stcmVzdWx0cykpKVxyXG4ifSB7OnN5bSBleHBvdW5kLXN0ciwgOm1ldGEgezpkb2MgIkdpdmVuIGEgYHNwZWNgIGFuZCBhIGBmb3JtYCwgZWl0aGVyIHJldHVybnMgc3VjY2VzcyBtZXNzYWdlIG9yIGEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS4iLCA6YXJnbGlzdHMgKFtzcGVjIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBvdW5kLXN0clxyXG4gXCJHaXZlbiBhIGBzcGVjYCBhbmQgYSBgZm9ybWAsIGVpdGhlciByZXR1cm5zIHN1Y2Nlc3MgbWVzc2FnZSBvciBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuXCJcclxuIFtzcGVjIGZvcm1dXHJcbiAobGV0XHJcbiAgW2V4cGxhaW4tZGF0YSAocy9leHBsYWluLWRhdGEgc3BlYyBmb3JtKV1cclxuICAocHJpbnRlci1zdHJcclxuICAge31cclxuICAgKGlmXHJcbiAgICBleHBsYWluLWRhdGFcclxuICAgIChhc3NvYyBleHBsYWluLWRhdGEgOmNsb2p1cmUuc3BlYy5hbHBoYS92YWx1ZSBmb3JtKVxyXG4gICAgbmlsKSkpKVxyXG4ifSB7OnN5bSBleHBsYWluLXJlc3VsdHMtc3RyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzZXF1ZW5jZSBvZiByZXN1bHRzIGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcmV0dXJucyBhIHN0cmluZyBzdW1tYXJpemluZyB0aGUgcmVzdWx0cy4iLCA6YXJnbGlzdHMgKFtjaGVjay1yZXN1bHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1yZXN1bHRzLXN0clxyXG4gXCJHaXZlbiBhIHNlcXVlbmNlIG9mIHJlc3VsdHMgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCByZXR1cm5zIGEgc3RyaW5nIHN1bW1hcml6aW5nIHRoZSByZXN1bHRzLlwiXHJcbiBbY2hlY2stcmVzdWx0c11cclxuICh3aXRoLW91dC1zdHIgKGV4cGxhaW4tcmVzdWx0cyBjaGVjay1yZXN1bHRzKSkpXHJcbiJ9IHs6c3ltIGV4cG91bmQsIDptZXRhIHs6ZG9jICJHaXZlbiBhIGBzcGVjYCBhbmQgYSBgZm9ybWAsIGVpdGhlciBwcmludHMgYSBzdWNjZXNzIG1lc3NhZ2Ugb3IgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLiIsIDphcmdsaXN0cyAoW3NwZWMgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cG91bmRcclxuIFwiR2l2ZW4gYSBgc3BlY2AgYW5kIGEgYGZvcm1gLCBlaXRoZXIgcHJpbnRzIGEgc3VjY2VzcyBtZXNzYWdlIG9yIGEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cIlxyXG4gW3NwZWMgZm9ybV1cclxuIChwcmludCAoZXhwb3VuZC1zdHIgc3BlYyBmb3JtKSkpXHJcbiJ9IHs6c3ltIGRlZm1zZywgOm1ldGEgezpkb2MgIkFzc29jaWF0ZXMgdGhlIHNwZWMgbmFtZWQgYGtgIHdpdGggYGVycm9yLW1lc3NhZ2VgLiIsIDphcmdsaXN0cyAoW2sgZXJyb3ItbWVzc2FnZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZm1zZ1xyXG4gXCJBc3NvY2lhdGVzIHRoZSBzcGVjIG5hbWVkIGBrYCB3aXRoIGBlcnJvci1tZXNzYWdlYC5cIlxyXG4gW2sgZXJyb3ItbWVzc2FnZV1cclxuIChzd2FwISByZWdpc3RyeS1yZWYgYXNzb2MgayBlcnJvci1tZXNzYWdlKVxyXG4gbmlsKVxyXG4ifSksIGNsanMudG9vbHMucmVhZGVyLmltcGwuZXJyb3JzICh7OnN5bSB0aHJvdy1iYWQtZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWRpc3BhdGNoXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJObyBkaXNwYXRjaCBtYWNybyBmb3IgXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZXNjYXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1lc2NhcGVcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgdW5pY29kZSBlc2NhcGU6IFxcXFx1XCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1kdXAta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCBrc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWR1cC1rZXlzXHJcbiBbcmRyIGtpbmQga3NdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgKGR1cGxpY2F0ZS1rZXlzLWVycm9yXHJcbiAgIChzdHIgKHMvY2FwaXRhbGl6ZSAobmFtZSBraW5kKSkgXCIgbGl0ZXJhbCBjb250YWlucyBkdXBsaWNhdGUga2V5XCIpXHJcbiAgIGtzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbnMtbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1uc1xyXG4gW3JkciBucy1uYW1lXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCB2YWx1ZSB1c2VkIGFzIG5hbWVzcGFjZSBpbiBuYW1lc3BhY2VkIG1hcDogXCJcclxuICBucy1uYW1lXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy11bmtub3duLXJlYWRlci10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVua25vd24tcmVhZGVyLXRhZ1xyXG4gW3JkciB0YWddXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk5vIHJlYWRlciBmdW5jdGlvbiBmb3IgdGFnIFwiIChpL2luc3BlY3QgdGFnKSBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1hdC1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtYXQtZGlzcGF0Y2hcclxuIFtyZHJdXHJcbiAoZW9mLWVycm9yIHJkciBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgZGlzcGF0Y2ggY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW1ldGFkYXRhLXRhcmdldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFyZ2V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW1ldGFkYXRhLXRhcmdldFxyXG4gW3JkciB0YXJnZXRdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJNZXRhZGF0YSBjYW4gbm90IGJlIGFwcGxpZWQgdG8gXCJcclxuICAoaS9pbnNwZWN0IHRhcmdldClcclxuICBcIi4gXCJcclxuICBcIk1ldGFkYXRhIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gSU1ldGFzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1udW1iZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1udW1iZXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgbnVtYmVyOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHJlYWRlci1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOnJlYWRlci1lcnJvciAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWxpdGVyYWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWxpdGVyYWxcclxuIFtyZHIgdG9rZW5dXHJcbiAodGhyb3dcclxuICAoaWxsZWdhbC1hcmctZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGxpdGVyYWw6IFxcXFxcIiB0b2tlbiBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1ucy1tYXAtbm8tbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBucy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctbnMtbWFwLW5vLW1hcFxyXG4gW3JkciBucy1uYW1lXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTmFtZXNwYWNlZCBtYXAgd2l0aCBuYW1lc3BhY2UgXCJcclxuICBucy1uYW1lXHJcbiAgXCIgZG9lcyBub3Qgc3BlY2lmeSBhIG1hcC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVuc3VwcG9ydGVkLWNoYXJhY3RlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy11bnN1cHBvcnRlZC1jaGFyYWN0ZXJcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVuc3VwcG9ydGVkIGNoYXJhY3RlcjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1mZWF0dXJlLW5vdC1rZXl3b3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBmZWF0dXJlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZmVhdHVyZS1ub3Qta2V5d29yZFxyXG4gW3JkciBmZWF0dXJlXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiRmVhdHVyZSBjYW5ub3QgYmUgXCJcclxuICAoaS9pbnNwZWN0IGZlYXR1cmUpXHJcbiAgXCIgRmVhdHVyZXMgbXVzdCBiZSBrZXl3b3Jkcy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1kZWxpbWl0ZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcmRyIGtpbmQgY29sdW1uIGxpbmVdIFtyZHIga2luZCBsaW5lIGNvbHVtbiBuXV19LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWRlbGltaXRlZFxyXG4gKFtyZHIga2luZCBjb2x1bW4gbGluZV1cclxuICAodGhyb3ctZW9mLWRlbGltaXRlZCByZHIga2luZCBsaW5lIGNvbHVtbiBuaWwpKVxyXG4gKFtyZHIga2luZCBsaW5lIGNvbHVtbiBuXVxyXG4gIChlb2YtZXJyb3JcclxuICAgcmRyXHJcbiAgIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBcIlxyXG4gICAoaWYgbiAoc3RyIFwiaXRlbSBcIiBuIFwiIG9mIFwiKSlcclxuICAgKG5hbWUga2luZClcclxuICAgKGlmIGxpbmUgKHN0ciBcIiwgc3RhcnRpbmcgYXQgbGluZSBcIiBsaW5lIFwiIGFuZCBjb2x1bW4gXCIgY29sdW1uKSlcclxuICAgXCIuXCIpKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWluLWNoYXJhY3RlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtaW4tY2hhcmFjdGVyXHJcbiBbcmRyXVxyXG4gKGVvZi1lcnJvciByZHIgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIGNoYXJhY3Rlci5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWNoYXJcclxuIFtyZHIga2luZCBjaF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgY2hhcmFjdGVyOiBcIlxyXG4gIGNoXHJcbiAgXCIgZm91bmQgd2hpbGUgcmVhZGluZyBcIlxyXG4gIChuYW1lIGtpbmQpXHJcbiAgXCIuXCIpKVxyXG4ifSB7OnN5bSBlb2YtZXJyb3IsIDptZXRhIHs6ZG9jICJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWQiLCA6YXJnbGlzdHMgKFtyZHIgJiBtc2dzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW9mLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDplb2YgKGFwcGx5IHN0ciBtc2dzKSkpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1tZXRhZGF0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1tZXRhZGF0YVxyXG4gW3JkciB4XVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiTWV0YWRhdGEgY2Fubm90IGJlIFwiXHJcbiAgKGkvaW5zcGVjdCB4KVxyXG4gIFwiLiBNZXRhZGF0YSBtdXN0IGJlIGEgU3ltYm9sLCBLZXl3b3JkLCBTdHJpbmcgb3IgTWFwLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLXJlYWRpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgJiBzdGFydF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1yZWFkaW5nXHJcbiBbcmRyIGtpbmQgJiBzdGFydF1cclxuIChsZXRcclxuICBbaW5pdCAoY2FzZSBraW5kIDpyZWdleCBcIiNcXFwiXCIgOnN0cmluZyBcXFwiKV1cclxuICAoZW9mLWVycm9yXHJcbiAgIHJkclxyXG4gICBcIlVuZXhwZWN0ZWQgRU9GIHJlYWRpbmcgXCJcclxuICAgKG5hbWUga2luZClcclxuICAgXCIgc3RhcnRpbmcgXCJcclxuICAgKGFwcGx5IHN0ciBpbml0IHN0YXJ0KVxyXG4gICBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtZXJyb3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtZXJyb3JcclxuIFtyZHIgbGluZV1cclxuIChpZlxyXG4gIGxpbmVcclxuICAoZW9mLWVycm9yIHJkciBcIkVPRiB3aGlsZSByZWFkaW5nLCBzdGFydGluZyBhdCBsaW5lIFwiIGxpbmUgXCIuXCIpXHJcbiAgKGVvZi1lcnJvciByZHIgXCJFT0Ygd2hpbGUgcmVhZGluZy5cIikpKVxyXG4ifSB7OnN5bSBpbGxlZ2FsLWFyZy1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbGxlZ2FsLWFyZy1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6aWxsZWdhbC1hcmd1bWVudCAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1vY3RhbC1sZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC1vY3RhbC1sZW5cclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZSBpbiBhIGNoYXJhY3RlciBsaXRlcmFsOlwiXHJcbiAgdG9rZW5cclxuICBcIi4gT2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBtdXN0IGJlIDMgb3IgZmV3ZXIgZGlnaXRzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdFxyXG4gW3JkciBjaF1cclxuIChpbGxlZ2FsLWFyZy1lcnJvciByZHIgXCJJbnZhbGlkIGRpZ2l0IFwiIGNoIFwiIGluIHVuaWNvZGUgY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LWluLXRva2VuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaCB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1kaWdpdC1pbi10b2tlblxyXG4gW3JkciBjaCB0b2tlbl1cclxuIChpbGxlZ2FsLWFyZy1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBkaWdpdCBcIlxyXG4gIGNoXHJcbiAgXCIgaW4gdW5pY29kZSBjaGFyYWN0ZXIgXFxcXFwiXHJcbiAgdG9rZW5cclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1sZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGFjdHVhbCBleHBlY3RlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1sZW5cclxuIFtyZHIgYWN0dWFsIGV4cGVjdGVkXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHVuaWNvZGUgbGl0ZXJhbC4gVW5pY29kZSBsaXRlcmFscyBzaG91bGQgYmUgXCJcclxuICBleHBlY3RlZFxyXG4gIFwiY2hhcmFjdGVycyBsb25nLiAgXCJcclxuICBcInZhbHVlIHN1cHBsZWQgaXMgXCJcclxuICBhY3R1YWxcclxuICBcImNoYXJhY3RlcnMgbG9uZy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXNpbmdsZS1jb2xvbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1zaW5nbGUtY29sb25cclxuIFtyZHJdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkEgc2luZ2xlIGNvbG9uIGlzIG5vdCBhIHZhbGlkIGtleXdvcmQuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1vZGQtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBsaW5lIGNvbCBlbGVtZW50c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LW9kZC1tYXBcclxuIFtyZHIgbGluZSBjb2wgZWxlbWVudHNdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJUaGUgbWFwIGxpdGVyYWwgc3RhcnRpbmcgd2l0aCBcIlxyXG4gIChpL2luc3BlY3QgKGZpcnN0IGVsZW1lbnRzKSlcclxuICAoaWYgbGluZSAoc3RyIFwiIG9uIGxpbmUgXCIgbGluZSBcIiBjb2x1bW4gXCIgY29sKSlcclxuICBcIiBjb250YWlucyBcIlxyXG4gIChjb3VudCBlbGVtZW50cylcclxuICBcIiBmb3JtKHMpLiBNYXAgbGl0ZXJhbHMgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGZvcm1zLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW9jdGFsLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtb2N0YWwtbnVtYmVyXHJcbiBbcmRyXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJPY3RhbCBlc2NhcGUgc2VxdWVuY2UgbXVzdCBiZSBpbiByYW5nZSBbMCwgMzc3XS5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1yZWFkZXItdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtcmVhZGVyLXRhZ1xyXG4gW3JkciB0YWddXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHJlYWRlciB0YWc6IFwiXHJcbiAgKGkvaW5zcGVjdCB0YWcpXHJcbiAgXCIuIFJlYWRlciB0YWdzIG11c3QgYmUgc3ltYm9scy5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVubWF0Y2gtZGVsaW1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVubWF0Y2gtZGVsaW1pdGVyXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbm1hdGNoZWQgZGVsaW1pdGVyIFwiIGNoIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC1jaGFyYWN0ZXItbGl0ZXJhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLWNoYXJhY3Rlci1saXRlcmFsXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIGNoYXJhY3RlciBsaXRlcmFsIFxcXFx1XCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtY2hhclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGNoYXJhY3RlciBcXFxcXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtZXNjYXBlLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLWVzY2FwZS1jaGFyXHJcbiBbcmRyIGNoXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJVbnN1cHBvcnRlZCBlc2NhcGUgY2hhcmFjdGVyOiBcXFxcXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1uby1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuIHRocm93LW5vLWRpc3BhdGNoIFtyZHIgY2hdICh0aHJvdy1iYWQtZGlzcGF0Y2ggcmRyIGNoKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWF0LXN0YXJ0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLWF0LXN0YXJ0XHJcbiBbcmRyIGtpbmRdXHJcbiAoZW9mLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIHN0YXJ0IG9mIFwiXHJcbiAgKG5hbWUga2luZClcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkXHJcbiBbcmRyIGtpbmQgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgXCIgKG5hbWUga2luZCkgXCI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0pLCBjbGpzLmpzICh7OnN5bSAqbG9hZC1mbiosIDptZXRhIHs6ZG9jICJFYWNoIHJ1bnRpbWUgZW52aXJvbm1lbnQgcHJvdmlkZXMgYSBkaWZmZXJlbnQgd2F5IHRvIGxvYWQgYSBsaWJyYXJ5LlxuICBXaGF0ZXZlciBmdW5jdGlvbiAqbG9hZC1mbiogaXMgYm91bmQgdG8gd2lsbCBiZSBwYXNzZWQgdHdvIGFyZ3VtZW50cyAtIGFcbiAgbWFwIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uOiBUaGUgbWFwIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIGtleXM6XG5cbiAgOm5hbWUgICAtIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IChhIHN5bWJvbClcbiAgOm1hY3JvcyAtIG1vZGlmaWVyIHNpZ25hbGluZyBhIG1hY3JvcyBuYW1lc3BhY2UgbG9hZFxuICA6cGF0aCAgIC0gbXVuZ2VkIHJlbGF0aXZlIGxpYnJhcnkgcGF0aCAoYSBzdHJpbmcpXG5cbiAgSXQgaXMgdXAgdG8gdGhlIGltcGxlbWVudG9yIHRvIGNvcnJlY3RseSByZXNvbHZlIHRoZSBjb3JyZXNwb25kaW5nIC5jbGpzLFxuICAuY2xqYywgb3IgLmpzIHJlc291cmNlICh0aGUgb3JkZXIgbXVzdCBiZSByZXNwZWN0ZWQpLiBJZiA6bWFjcm9zIGlzIHRydWVcbiAgcmVzb2x1dGlvbiBzaG91bGQgb25seSBjb25zaWRlciAuY2xqIG9yIC5jbGpjIHJlc291cmNlcyAodGhlIG9yZGVyIG11c3QgYmVcbiAgcmVzcGVjdGVkKS4gVXBvbiByZXNvbHV0aW9uIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCB3aXRoIGEgbWFwXG4gIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzOlxuXG4gIDpsYW5nICAgICAgIC0gdGhlIGxhbmd1YWdlLCA6Y2xqIG9yIDpqc1xuICA6c291cmNlICAgICAtIHRoZSBzb3VyY2Ugb2YgdGhlIGxpYnJhcnkgKGEgc3RyaW5nKVxuICA6ZmlsZSAgICAgICAtIG9wdGlvbmFsLCB0aGUgZmlsZSBwYXRoLCBpdCB3aWxsIGJlIGFkZGVkIHRvIEFTVCdzIDpmaWxlIGtleXdvcmRcbiAgICAgICAgICAgICAgICAoYnV0IG5vdCBpbiA6bWV0YSlcbiAgOmNhY2hlICAgICAgLSBvcHRpb25hbCwgaWYgYSA6Y2xqIG5hbWVzcGFjZSBoYXMgYmVlbiBwcmVjb21waWxlZCB0byA6anMsIGNhblxuICAgICAgICAgICAgICAgIGdpdmUgYW4gYW5hbHlzaXMgY2FjaGUgZm9yIGZhc3RlciBsb2Fkcy5cbiAgOnNvdXJjZS1tYXAgLSBvcHRpb25hbCwgaWYgYSA6Y2xqIG5hbWVzcGFjZSBoYXMgYmVlbiBwcmVjb21waWxlZCB0byA6anMsIGNhblxuICAgICAgICAgICAgICAgIGdpdmUgYSBWMyBzb3VyY2UgbWFwIEpTT05cblxuICBJZiB0aGUgcmVzb3VyY2UgY291bGQgbm90IGJlIHJlc29sdmVkLCB0aGUgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgd2l0aFxuICBuaWwuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpsb2FkLWZuKiAoZm4gW20gY2JdICh0aHJvdyAoanMvRXJyb3IuIFwiTm8gKmxvYWQtZm4qIHNldFwiKSkpKVxyXG4ifSB7OnN5bSBldmFsLCA6bWV0YSB7OmRvYyAiRXZhbHVhdGUgYSBzaW5nbGUgQ2xvanVyZVNjcmlwdCBmb3JtLiBUaGUgcGFyYW1ldGVyczpcblxuICAgc3RhdGUgKGF0b20pXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxuXG4gICBmb3JtIChzLWV4cHIpXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxuXG4gICBvcHRzIChtYXApXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxuXG4gICBjYiAoZnVuY3Rpb24pXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxuICAgICBhIGtleSA6dmFsdWUgd2l0aCB0aGUgcmVzdWx0IG9mIGV2YWx1dGlvbi4gSWYgdW5zdWNjZXNzZnVsIHRoZSBtYXAgd2lsbFxuICAgICBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2Ugb2ZcbiAgICAgZmFpbHVyZS4iLCA6YXJnbGlzdHMgW1tzdGF0ZSBmb3JtIGNiXSBbc3RhdGUgZm9ybSBvcHRzIGNiXV19LCA6c291cmNlICIoZGVmblxyXG4gZXZhbFxyXG4gXCJFdmFsdWF0ZSBhIHNpbmdsZSBDbG9qdXJlU2NyaXB0IGZvcm0uIFRoZSBwYXJhbWV0ZXJzOlxcblxcbiAgIHN0YXRlIChhdG9tKVxcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXFxuXFxuICAgZm9ybSAocy1leHByKVxcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXFxuXFxuICAgb3B0cyAobWFwKVxcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cXG5cXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXFxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXFxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXFxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxcbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXFxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXFxuXFxuICAgY2IgKGZ1bmN0aW9uKVxcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXFxuICAgICBhIGtleSA6dmFsdWUgd2l0aCB0aGUgcmVzdWx0IG9mIGV2YWx1dGlvbi4gSWYgdW5zdWNjZXNzZnVsIHRoZSBtYXAgd2lsbFxcbiAgICAgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlIG9mXFxuICAgICBmYWlsdXJlLlwiXHJcbiAoW3N0YXRlIGZvcm0gY2JdIChldmFsIHN0YXRlIGZvcm0gbmlsIGNiKSlcclxuIChbc3RhdGUgZm9ybSBvcHRzIGNiXVxyXG4gIChldmFsKlxyXG4gICB7Oipjb21waWxlciogc3RhdGUsXHJcbiAgICA6KmRhdGEtcmVhZGVycyogdGFncy8qY2xqcy1kYXRhLXJlYWRlcnMqLFxyXG4gICAgOiphbmFseXplLWRlcHMqICg6YW5hbHl6ZS1kZXBzIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmNsanMtZGVwLXNldCogYW5hLypjbGpzLWRlcC1zZXQqLFxyXG4gICAgOipsb2FkLW1hY3JvcyogKDpsb2FkLW1hY3JvcyBvcHRzIHRydWUpLFxyXG4gICAgOipsb2FkLWZuKiAob3IgKDpsb2FkIG9wdHMpICpsb2FkLWZuKiksXHJcbiAgICA6KmV2YWwtZm4qIChvciAoOmV2YWwgb3B0cykgKmV2YWwtZm4qKX1cclxuICAgZm9ybVxyXG4gICBvcHRzXHJcbiAgIGNiKSkpXHJcbiJ9IHs6c3ltIGNvbXBpbGUtc3RyLCA6bWV0YSB7OmRvYyAiQ29tcGlsZSBDbG9qdXJlU2NyaXB0IHNvdXJjZSBpbnRvIEphdmFTY3JpcHQuIFRoZSBwYXJhbWV0ZXJzOlxuXG4gICBzdGF0ZSAoYXRvbSlcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXG5cbiAgIHNvdXJjZSAoc3RyaW5nKVxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcblxuICAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcbiAgICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLSB1c2VkIGFzIGtleSBpbiA6c291cmNlLW1hcHNcblxuICAgb3B0cyAobWFwKVxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxuXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cblxuICAgY2IgKGZ1bmN0aW9uKVxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cbiAgICAgYSBrZXkgOnZhbHVlIHdpdGggdGhlIGNvbXBpbGF0aW9uIHJlc3VsdCAoc3RyaW5nKS4gSWYgdW5zdWNjZXNzZnVsIHRoZSBtYXBcbiAgICAgd2lsbCBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2VcbiAgICAgb2YgZmFpbHVyZS4iLCA6YXJnbGlzdHMgW1tzdGF0ZSBzb3VyY2UgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21waWxlLXN0clxyXG4gXCJDb21waWxlIENsb2p1cmVTY3JpcHQgc291cmNlIGludG8gSmF2YVNjcmlwdC4gVGhlIHBhcmFtZXRlcnM6XFxuXFxuICAgc3RhdGUgKGF0b20pXFxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcXG5cXG4gICBzb3VyY2UgKHN0cmluZylcXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxcblxcbiAgIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXFxuICAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAtIHVzZWQgYXMga2V5IGluIDpzb3VyY2UtbWFwc1xcblxcbiAgIG9wdHMgKG1hcClcXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXFxuXFxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXFxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxcbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxcbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxcbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXFxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxcbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXFxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxcblxcbiAgIGNiIChmdW5jdGlvbilcXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxcbiAgICAgYSBrZXkgOnZhbHVlIHdpdGggdGhlIGNvbXBpbGF0aW9uIHJlc3VsdCAoc3RyaW5nKS4gSWYgdW5zdWNjZXNzZnVsIHRoZSBtYXBcXG4gICAgIHdpbGwgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlXFxuICAgICBvZiBmYWlsdXJlLlwiXHJcbiAoW3N0YXRlIHNvdXJjZSBjYl0gKGNvbXBpbGUtc3RyIHN0YXRlIHNvdXJjZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gKGNvbXBpbGUtc3RyIHN0YXRlIHNvdXJjZSBuYW1lIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXHJcbiAgezpwcmVcclxuICAgWyhhdG9tPyBzdGF0ZSlcclxuICAgIChzdHJpbmc/IHNvdXJjZSlcclxuICAgICh2YWxpZC1uYW1lPyBuYW1lKVxyXG4gICAgKHZhbGlkLW9wdHM/IG9wdHMpXHJcbiAgICAoZm4/IGNiKV19XHJcbiAgKGNvbXBpbGUtc3RyKlxyXG4gICB7Oipjb21waWxlciogc3RhdGUsXHJcbiAgICA6KmRhdGEtcmVhZGVycyogdGFncy8qY2xqcy1kYXRhLXJlYWRlcnMqLFxyXG4gICAgOipjbGpzLWRlcC1zZXQqIGFuYS8qY2xqcy1kZXAtc2V0KixcclxuICAgIDoqYW5hbHl6ZS1kZXBzKiAoOmFuYWx5emUtZGVwcyBvcHRzIHRydWUpLFxyXG4gICAgOipsb2FkLW1hY3JvcyogKDpsb2FkLW1hY3JvcyBvcHRzIHRydWUpLFxyXG4gICAgOipsb2FkLWZuKiAob3IgKDpsb2FkIG9wdHMpICpsb2FkLWZuKiksXHJcbiAgICA6KmV2YWwtZm4qIChvciAoOmV2YWwgb3B0cykgKmV2YWwtZm4qKSxcclxuICAgIDoqc20tZGF0YSogKHdoZW4gKDpzb3VyY2UtbWFwIG9wdHMpIChzbS1kYXRhKSl9XHJcbiAgIHNvdXJjZVxyXG4gICBuYW1lXHJcbiAgIG9wdHNcclxuICAgY2IpKSlcclxuIn0gezpzeW0gbnMtPnJlbHBhdGgsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG5hbWVzcGFjZSBhcyBhIHN5bWJvbCByZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggc2FucyBleHRlbnNpb24iLCA6YXJnbGlzdHMgKFtucy1zeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBucy0+cmVscGF0aFxyXG4gXCJHaXZlbiBhIG5hbWVzcGFjZSBhcyBhIHN5bWJvbCByZXR1cm4gdGhlIHJlbGF0aXZlIHBhdGggc2FucyBleHRlbnNpb25cIlxyXG4gW25zLXN5bV1cclxuIChzdHJpbmcvcmVwbGFjZSAoYW5hL211bmdlLXBhdGggbnMtc3ltKSBcXC4gXFwvKSlcclxuIn0gezpzeW0gZW1wdHktc3RhdGUsIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYW4gZW1wdHkgY29tcGlsZXIgc3RhdGUuIFJlcXVpcmVkIHRvIGludm9rZSBhbmFseXplLCBjb21waWxlLFxuICAgZXZhbCBhbmQgZXZhbC1zdHIuIiwgOmFyZ2xpc3RzIFtbXSBbaW5pdF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtcHR5LXN0YXRlXHJcbiBcIkNvbnN0cnVjdCBhbiBlbXB0eSBjb21waWxlciBzdGF0ZS4gUmVxdWlyZWQgdG8gaW52b2tlIGFuYWx5emUsIGNvbXBpbGUsXFxuICAgZXZhbCBhbmQgZXZhbC1zdHIuXCJcclxuIChbXVxyXG4gIChkb3RvXHJcbiAgIChlbnYvZGVmYXVsdC1jb21waWxlci1lbnYpXHJcbiAgIChzd2FwIVxyXG4gICAgKGZuXHJcbiAgICAgW3N0YXRlXVxyXG4gICAgICgtPlxyXG4gICAgICBzdGF0ZVxyXG4gICAgICAoYXNzb2MtaW5cclxuICAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzICdjbGpzLmNvcmVdXHJcbiAgICAgICAoZHVtcC1jb3JlKSkpKSkpKVxyXG4gKFtpbml0XSAoZG90byAoZW1wdHktc3RhdGUpIChzd2FwISBpbml0KSkpKVxyXG4ifSB7OnN5bSAqbG9hZGVkKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmxvYWRlZCogKGF0b20gI3t9KSlcclxuIn0gezpzeW0gcmVxdWlyZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tuYW1lIGNiXSBbbmFtZSBvcHRzIGNiXSBbYm91bmQtdmFycyBuYW1lIG9wdHMgY2JdIFtib3VuZC12YXJzIG5hbWUgcmVsb2FkIG9wdHMgY2JdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXF1aXJlXHJcbiAoW25hbWUgY2JdIChyZXF1aXJlIG5hbWUgbmlsIGNiKSlcclxuIChbbmFtZSBvcHRzIGNiXSAocmVxdWlyZSBuaWwgbmFtZSBvcHRzIGNiKSlcclxuIChbYm91bmQtdmFycyBuYW1lIG9wdHMgY2JdIChyZXF1aXJlIGJvdW5kLXZhcnMgbmFtZSBuaWwgb3B0cyBjYikpXHJcbiAoW2JvdW5kLXZhcnMgbmFtZSByZWxvYWQgb3B0cyBjYl1cclxuICAobGV0XHJcbiAgIFtib3VuZC12YXJzXHJcbiAgICAobWVyZ2VcclxuICAgICB7Oipjb21waWxlciogKGVudi9kZWZhdWx0LWNvbXBpbGVyLWVudiksXHJcbiAgICAgIDoqZGF0YS1yZWFkZXJzKiB0YWdzLypjbGpzLWRhdGEtcmVhZGVycyosXHJcbiAgICAgIDoqbG9hZC1tYWNyb3MqICg6bG9hZC1tYWNyb3Mgb3B0cyB0cnVlKSxcclxuICAgICAgOiphbmFseXplLWRlcHMqICg6YW5hbHl6ZS1kZXBzIG9wdHMgdHJ1ZSksXHJcbiAgICAgIDoqbG9hZC1mbiogKG9yICg6bG9hZCBvcHRzKSAqbG9hZC1mbiopLFxyXG4gICAgICA6KmV2YWwtZm4qIChvciAoOmV2YWwgb3B0cykgKmV2YWwtZm4qKX1cclxuICAgICBib3VuZC12YXJzKVxyXG4gICAgYW5hbWVcclxuICAgIChjb25kLT4gbmFtZSAoOm1hY3Jvcy1ucyBvcHRzKSBhbmEvbWFjcm8tbnMtbmFtZSldXHJcbiAgICh3aGVuICg9IDpyZWxvYWQgcmVsb2FkKSAoc3dhcCEgKmxvYWRlZCogZGlzaiBhbmFtZSkpXHJcbiAgICh3aGVuICg9IDpyZWxvYWQtYWxsIHJlbG9hZCkgKHJlc2V0ISAqbG9hZGVkKiAje30pKVxyXG4gICAod2hlblxyXG4gICAgKDp2ZXJib3NlIG9wdHMpXHJcbiAgICAoZGVidWctcHJuXHJcbiAgICAgKHN0clxyXG4gICAgICBcIkxvYWRpbmcgXCJcclxuICAgICAgbmFtZVxyXG4gICAgICAod2hlbiAoOm1hY3Jvcy1ucyBvcHRzKSBcIiBtYWNyb3NcIilcclxuICAgICAgXCIgbmFtZXNwYWNlXCIpKSlcclxuICAgKGlmLW5vdFxyXG4gICAgKGNvbnRhaW5zPyBAKmxvYWRlZCogYW5hbWUpXHJcbiAgICAobGV0XHJcbiAgICAgW2VudiAoOiplbnYqIGJvdW5kLXZhcnMpXVxyXG4gICAgICh0cnlcclxuICAgICAgKCg6KmxvYWQtZm4qIGJvdW5kLXZhcnMpXHJcbiAgICAgICB7Om5hbWUgbmFtZSxcclxuICAgICAgICA6bWFjcm9zICg6bWFjcm9zLW5zIG9wdHMpLFxyXG4gICAgICAgIDpwYXRoIChucy0+cmVscGF0aCBuYW1lKX1cclxuICAgICAgIChmblxyXG4gICAgICAgIFtyZXNvdXJjZV1cclxuICAgICAgICAoYXNzZXJ0XHJcbiAgICAgICAgIChvciAobWFwPyByZXNvdXJjZSkgKG5pbD8gcmVzb3VyY2UpKVxyXG4gICAgICAgICBcIipsb2FkLWZuKiBtYXkgb25seSByZXR1cm4gYSBtYXAgb3IgbmlsXCIpXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIHJlc291cmNlXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt7OmtleXMgW2xhbmcgc291cmNlIGNhY2hlIHNvdXJjZS1tYXAgZmlsZV19IHJlc291cmNlXVxyXG4gICAgICAgICAgKGNvbmRwXHJcbiAgICAgICAgICAga2V5d29yZC1pZGVudGljYWw/XHJcbiAgICAgICAgICAgbGFuZ1xyXG4gICAgICAgICAgIDpjbGpcclxuICAgICAgICAgICAoZG9cclxuICAgICAgICAgICAgKHByZS1maWxlLXNpZGUtZWZmZWN0c1xyXG4gICAgICAgICAgICAgKDoqY29tcGlsZXIqIGJvdW5kLXZhcnMpXHJcbiAgICAgICAgICAgICBhbmFtZVxyXG4gICAgICAgICAgICAgZmlsZVxyXG4gICAgICAgICAgICAgb3B0cylcclxuICAgICAgICAgICAgKGV2YWwtc3RyKlxyXG4gICAgICAgICAgICAgYm91bmQtdmFyc1xyXG4gICAgICAgICAgICAgc291cmNlXHJcbiAgICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgICAgICAoYXNzb2Mgb3B0cyA6Y2xqcy1maWxlIGZpbGUpXHJcbiAgICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgICBbcmVzXVxyXG4gICAgICAgICAgICAgIChwb3N0LWZpbGUtc2lkZS1lZmZlY3RzIGZpbGUgb3B0cylcclxuICAgICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgICAgKDplcnJvciByZXMpXHJcbiAgICAgICAgICAgICAgIChjYiByZXMpXHJcbiAgICAgICAgICAgICAgIChkbyAoc3dhcCEgKmxvYWRlZCogY29uaiBhbmFtZSkgKGNiIHs6dmFsdWUgdHJ1ZX0pKSkpKSlcclxuICAgICAgICAgICA6anNcclxuICAgICAgICAgICAocHJvY2Vzcy1tYWNyb3MtZGVwc1xyXG4gICAgICAgICAgICBib3VuZC12YXJzXHJcbiAgICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICBbcmVzXVxyXG4gICAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICAgKDplcnJvciByZXMpXHJcbiAgICAgICAgICAgICAgKGNiIHJlcylcclxuICAgICAgICAgICAgICAocHJvY2Vzcy1saWJzLWRlcHNcclxuICAgICAgICAgICAgICAgYm91bmQtdmFyc1xyXG4gICAgICAgICAgICAgICBjYWNoZVxyXG4gICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgICAgW3Jlc11cclxuICAgICAgICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAgICAgICg6ZXJyb3IgcmVzKVxyXG4gICAgICAgICAgICAgICAgIChjYiByZXMpXHJcbiAgICAgICAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICAgICAgICBbcmVzXHJcbiAgICAgICAgICAgICAgICAgICAodHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgKCg6KmV2YWwtZm4qIGJvdW5kLXZhcnMpIHJlc291cmNlKVxyXG4gICAgICAgICAgICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgIChsb2FkLWFuYWx5c2lzLWNhY2hlIVxyXG4gICAgICAgICAgICAgICAgICAgICAgKDoqY29tcGlsZXIqIGJvdW5kLXZhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FjaGUpXHJcbiAgICAgICAgICAgICAgICAgICAgIChhbmEvcmVnaXN0ZXItc3BlY3MgY2FjaGUpKVxyXG4gICAgICAgICAgICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS1tYXBcclxuICAgICAgICAgICAgICAgICAgICAgKGxvYWQtc291cmNlLW1hcCFcclxuICAgICAgICAgICAgICAgICAgICAgICg6KmNvbXBpbGVyKiBib3VuZC12YXJzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgYW5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS1tYXApKVxyXG4gICAgICAgICAgICAgICAgICAgIChjYXRjaFxyXG4gICAgICAgICAgICAgICAgICAgICA6ZGVmYXVsdFxyXG4gICAgICAgICAgICAgICAgICAgICBjYXVzZVxyXG4gICAgICAgICAgICAgICAgICAgICAod3JhcC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgKGFuYS9lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgIGVudlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChzdHIgXCJDb3VsZCBub3QgcmVxdWlyZSBcIiBuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNhdXNlKSkpKV1cclxuICAgICAgICAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICAgICAgICAoOmVycm9yIHJlcylcclxuICAgICAgICAgICAgICAgICAgIChjYiByZXMpXHJcbiAgICAgICAgICAgICAgICAgICAoZG9cclxuICAgICAgICAgICAgICAgICAgICAoc3dhcCEgKmxvYWRlZCogY29uaiBhbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAoY2Igezp2YWx1ZSB0cnVlfSkpKSkpKSkpKSlcclxuICAgICAgICAgICAoY2JcclxuICAgICAgICAgICAgKHdyYXAtZXJyb3JcclxuICAgICAgICAgICAgIChhbmEvZXJyb3JcclxuICAgICAgICAgICAgICBlbnZcclxuICAgICAgICAgICAgICAoc3RyXHJcbiAgICAgICAgICAgICAgIFwiSW52YWxpZCA6bGFuZyBzcGVjaWZpZWQgXCJcclxuICAgICAgICAgICAgICAgbGFuZ1xyXG4gICAgICAgICAgICAgICBcIiwgb25seSA6Y2xqIG9yIDpqcyBhbGxvd2VkXCIpKSkpKSlcclxuICAgICAgICAgKGNiXHJcbiAgICAgICAgICAod3JhcC1lcnJvclxyXG4gICAgICAgICAgIChhbmEvZXJyb3JcclxuICAgICAgICAgICAgZW52XHJcbiAgICAgICAgICAgIChhbmEvZXJyb3ItbWVzc2FnZVxyXG4gICAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICAgKDptYWNyb3MtbnMgb3B0cylcclxuICAgICAgICAgICAgICA6dW5kZWNsYXJlZC1tYWNyb3MtbnNcclxuICAgICAgICAgICAgICA6dW5kZWNsYXJlZC1ucylcclxuICAgICAgICAgICAgIHs6bnMtc3ltIG5hbWUsIDpqcy1wcm92aWRlIChjbGpzLmNvcmUvbmFtZSBuYW1lKX0pKSkpKSkpXHJcbiAgICAgIChjYXRjaFxyXG4gICAgICAgOmRlZmF1bHRcclxuICAgICAgIGNhdXNlXHJcbiAgICAgICAoY2JcclxuICAgICAgICAod3JhcC1lcnJvclxyXG4gICAgICAgICAoYW5hL2Vycm9yIGVudiAoc3RyIFwiQ291bGQgbm90IHJlcXVpcmUgXCIgbmFtZSkgY2F1c2UpKSkpKSlcclxuICAgIChjYiB7OnZhbHVlIHRydWV9KSkpKSlcclxuIn0gezpzeW0gZmlsZS0+bnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZmlsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbGUtPm5zXHJcbiBbZmlsZV1cclxuIChsZXRcclxuICBbbGliLW5hbWUgKHN1YnMgKHN0cmluZy9yZXBsYWNlIGZpbGUgXCIvXCIgXCIuXCIpIDAgKC0gKGNvdW50IGZpbGUpIDUpKV1cclxuICAoc3ltYm9sIChkZW11bmdlIGxpYi1uYW1lKSkpKVxyXG4ifSB7OnN5bSBldmFsLXN0ciwgOm1ldGEgezpkb2MgIkV2YWx1dGUgQ2xvanVyZVNjcmlwdCBzb3VyY2UgZ2l2ZW4gYXMgYSBzdHJpbmcuIFRoZSBwYXJhbWV0ZXJzOlxuXG4gIHN0YXRlIChhdG9tKVxuICAgIHRoZSBjb21waWxlciBzdGF0ZVxuXG4gIHNvdXJjZSAoc3RyaW5nKVxuICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxuXG4gIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXG4gICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLSB1c2VkIGFzIGtleSBpbiA6c291cmNlLW1hcHNcblxuICBvcHRzIChtYXApXG4gICAgY29tcGlsYXRpb24gb3B0aW9ucy5cblxuICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcbiAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxuICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cbiAgICA6Y2FjaGUtc291cmNlICAgICAtIG9wdGlvbmFsLCBhIGZ1bmN0aW9uIHRvIHJ1biBzaWRlLWVmZmVjdHMgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIHJlc3VsdCBwcmlvciB0byBhY3R1YWwgZXZhbHV0aW9uLiBUaGlzIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlcyB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgaXMgdGhlIGV2YWwgbWFwLCB0aGUgc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHVuZGVyIDpzb3VyY2UuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBjYWxsYmFjayBvZlxuICAgICAgICAgICAgICAgICAgICAgICAgb25lIGFyZ3VtZW50LiBJZiBhbiBlcnJvciBvY2N1cnMgYW4gOmVycm9yIGtleSBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVkLlxuICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZhbHNlLlxuICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXG4gICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxuICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXG4gICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxuICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXG4gICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cblxuICBjYiAoZnVuY3Rpb24pXG4gICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cbiAgICBhIDp2YWx1ZSBrZXkgd2l0aCB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpb24gYW5kIDpucyB0aGUgY3VycmVudCBuYW1lc3BhY2UuXG4gICAgSWYgdW5zdWNjZXNzZnVsIHdpbGwgY29udGFpbiBhIDplcnJvciBrZXkgd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmdcbiAgICB0aGUgY2F1c2Ugb2YgZmFpbHVyZS4iLCA6YXJnbGlzdHMgW1tzdGF0ZSBzb3VyY2UgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmFsLXN0clxyXG4gXCJFdmFsdXRlIENsb2p1cmVTY3JpcHQgc291cmNlIGdpdmVuIGFzIGEgc3RyaW5nLiBUaGUgcGFyYW1ldGVyczpcXG5cXG4gIHN0YXRlIChhdG9tKVxcbiAgICB0aGUgY29tcGlsZXIgc3RhdGVcXG5cXG4gIHNvdXJjZSAoc3RyaW5nKVxcbiAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcXG5cXG4gIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXFxuICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIC0gdXNlZCBhcyBrZXkgaW4gOnNvdXJjZS1tYXBzXFxuXFxuICBvcHRzIChtYXApXFxuICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXFxuXFxuICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcXG4gICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcXG4gICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxcbiAgICA6Y2FjaGUtc291cmNlICAgICAtIG9wdGlvbmFsLCBhIGZ1bmN0aW9uIHRvIHJ1biBzaWRlLWVmZmVjdHMgd2l0aCB0aGVcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxhdGlvbiByZXN1bHQgcHJpb3IgdG8gYWN0dWFsIGV2YWx1dGlvbi4gVGhpcyBmdW5jdGlvblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VzIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBpcyB0aGUgZXZhbCBtYXAsIHRoZSBzb3VyY2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHVuZGVyIDpzb3VyY2UuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBjYWxsYmFjayBvZlxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBhcmd1bWVudC4gSWYgYW4gZXJyb3Igb2NjdXJzIGFuIDplcnJvciBrZXkgc2hvdWxkIGJlXFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxpZWQuXFxuICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcXG4gICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XFxuICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXFxuICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXFxuICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcXG4gICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxcbiAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcXG4gICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxcbiAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXFxuICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxcbiAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcXG4gICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXFxuXFxuICBjYiAoZnVuY3Rpb24pXFxuICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2VzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXFxuICAgIGEgOnZhbHVlIGtleSB3aXRoIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbiBhbmQgOm5zIHRoZSBjdXJyZW50IG5hbWVzcGFjZS5cXG4gICAgSWYgdW5zdWNjZXNzZnVsIHdpbGwgY29udGFpbiBhIDplcnJvciBrZXkgd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmdcXG4gICAgdGhlIGNhdXNlIG9mIGZhaWx1cmUuXCJcclxuIChbc3RhdGUgc291cmNlIGNiXSAoZXZhbC1zdHIgc3RhdGUgc291cmNlIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSAoZXZhbC1zdHIgc3RhdGUgc291cmNlIG5hbWUgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1cclxuICB7OnByZVxyXG4gICBbKGF0b20/IHN0YXRlKVxyXG4gICAgKHN0cmluZz8gc291cmNlKVxyXG4gICAgKHZhbGlkLW5hbWU/IG5hbWUpXHJcbiAgICAodmFsaWQtb3B0cz8gb3B0cylcclxuICAgIChmbj8gY2IpXX1cclxuICAoZXZhbC1zdHIqXHJcbiAgIHs6KmNvbXBpbGVyKiBzdGF0ZSxcclxuICAgIDoqZGF0YS1yZWFkZXJzKiB0YWdzLypjbGpzLWRhdGEtcmVhZGVycyosXHJcbiAgICA6KmFuYWx5emUtZGVwcyogKDphbmFseXplLWRlcHMgb3B0cyB0cnVlKSxcclxuICAgIDoqY2xqcy1kZXAtc2V0KiBhbmEvKmNsanMtZGVwLXNldCosXHJcbiAgICA6KmxvYWQtbWFjcm9zKiAoOmxvYWQtbWFjcm9zIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmxvYWQtZm4qIChvciAoOmxvYWQgb3B0cykgKmxvYWQtZm4qKSxcclxuICAgIDoqZXZhbC1mbiogKG9yICg6ZXZhbCBvcHRzKSAqZXZhbC1mbiopfVxyXG4gICBzb3VyY2VcclxuICAgbmFtZVxyXG4gICBvcHRzXHJcbiAgIGNiKSkpXHJcbiJ9IHs6c3ltIGpzLWV2YWwsIDptZXRhIHs6ZG9jICJBIGRlZmF1bHQgSmF2YVNjcmlwdCBldmFsdWF0aW9uIGZ1bmN0aW9uLiIsIDphcmdsaXN0cyAoW3s6a2V5cyBbc291cmNlXSwgOmFzIHJlc291cmNlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLWV2YWxcclxuIFwiQSBkZWZhdWx0IEphdmFTY3JpcHQgZXZhbHVhdGlvbiBmdW5jdGlvbi5cIlxyXG4gW3s6a2V5cyBbc291cmNlXSwgOmFzIHJlc291cmNlfV1cclxuIChqcy9ldmFsIHNvdXJjZSkpXHJcbiJ9IHs6c3ltIGxvYWQtc291cmNlLW1hcCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgbnMgc20tanNvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvYWQtc291cmNlLW1hcCFcclxuIFtzdGF0ZSBucyBzbS1qc29uXVxyXG4gKGxldFxyXG4gIFtzbSAoc20vZGVjb2RlICgucGFyc2UganMvSlNPTiBzbS1qc29uKSldXHJcbiAgKHN3YXAhIHN0YXRlIGFzc29jLWluIFs6c291cmNlLW1hcHMgbnNdIHNtKSkpXHJcbiJ9IHs6c3ltIGxvYWQtYW5hbHlzaXMtY2FjaGUhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIG5zIGNhY2hlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9hZC1hbmFseXNpcy1jYWNoZSFcclxuIFtzdGF0ZSBucyBjYWNoZV1cclxuIChzd2FwISBzdGF0ZSBhc3NvYy1pbiBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuc10gY2FjaGUpKVxyXG4ifSB7OnN5bSBhbmFseXplLXN0ciwgOm1ldGEgezpkb2MgIkFuYWx5emUgQ2xvanVyZVNjcmlwdCBzb3VyY2UuIFRoZSBjb21waWxlciBzdGF0ZSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoXG4gICB0aGUgcmVzdWx0cyBvZiBhbmFseXplcy4gVGhlIHBhcmFtZXRlcnM6XG5cbiAgIHN0YXRlIChhdG9tKVxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcblxuICAgc291cmNlIChzdHJpbmcpXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxuXG4gICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxuICAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZVxuXG4gICBvcHRzIChtYXApXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ZXJyb3IuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBjYWxsYCBjb25zdHJ1Y3QuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGYoYTAsYTEuLi4pYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxuICAgICAgOm5zICAgICAgICAgICAgICAgLSBvcHRpb25hbCwgdGhlIG5hbWVzcGFjZSBpbiB3aGljaCB0byBldmFsdWF0ZSB0aGUgc291cmNlLlxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxuICAgICAgOmNvbnRleHQgICAgICAgICAgLSBvcHRpb25hbCwgc2V0cyB0aGUgY29udGV4dCBmb3IgdGhlIHNvdXJjZS4gUG9zc2libGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cblxuICAgY2IgKGZ1bmN0aW9uKVxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cbiAgICAgYSBrZXkgOnZhbHVlLCB0aGUgYWN0dWFsIHZhbHVlIGlzIG5vdCBtZWFuaW5nZnVsLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlXG4gICAgIG1hcCB3aWxsIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZVxuICAgICBvZiBmYWlsdXJlLiIsIDphcmdsaXN0cyBbW3N0YXRlIHNvdXJjZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc3RyXHJcbiBcIkFuYWx5emUgQ2xvanVyZVNjcmlwdCBzb3VyY2UuIFRoZSBjb21waWxlciBzdGF0ZSB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoXFxuICAgdGhlIHJlc3VsdHMgb2YgYW5hbHl6ZXMuIFRoZSBwYXJhbWV0ZXJzOlxcblxcbiAgIHN0YXRlIChhdG9tKVxcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXFxuXFxuICAgc291cmNlIChzdHJpbmcpXFxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcXG5cXG4gICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxcbiAgICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2VcXG5cXG4gICBvcHRzIChtYXApXFxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxcblxcbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxcbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXFxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXFxuXFxuICAgY2IgKGZ1bmN0aW9uKVxcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXFxuICAgICBhIGtleSA6dmFsdWUsIHRoZSBhY3R1YWwgdmFsdWUgaXMgbm90IG1lYW5pbmdmdWwuIElmIHVuc3VjY2Vzc2Z1bCB0aGVcXG4gICAgIG1hcCB3aWxsIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZVxcbiAgICAgb2YgZmFpbHVyZS5cIlxyXG4gKFtzdGF0ZSBzb3VyY2UgY2JdIChhbmFseXplLXN0ciBzdGF0ZSBzb3VyY2UgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgY2JdIChhbmFseXplLXN0ciBzdGF0ZSBzb3VyY2UgbmFtZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXVxyXG4gIHs6cHJlXHJcbiAgIFsoYXRvbT8gc3RhdGUpXHJcbiAgICAoc3RyaW5nPyBzb3VyY2UpXHJcbiAgICAodmFsaWQtbmFtZT8gbmFtZSlcclxuICAgICh2YWxpZC1vcHRzPyBvcHRzKVxyXG4gICAgKGZuPyBjYildfVxyXG4gIChhbmFseXplLXN0cipcclxuICAgezoqY29tcGlsZXIqIHN0YXRlLFxyXG4gICAgOipkYXRhLXJlYWRlcnMqIHRhZ3MvKmNsanMtZGF0YS1yZWFkZXJzKixcclxuICAgIDoqcGFzc2VzKiAob3IgKDpwYXNzZXMgb3B0cykgYW5hLypwYXNzZXMqKSxcclxuICAgIDoqYW5hbHl6ZS1kZXBzKiAoOmFuYWx5emUtZGVwcyBvcHRzIHRydWUpLFxyXG4gICAgOipjbGpzLWRlcC1zZXQqIGFuYS8qY2xqcy1kZXAtc2V0KixcclxuICAgIDoqbG9hZC1tYWNyb3MqICg6bG9hZC1tYWNyb3Mgb3B0cyB0cnVlKSxcclxuICAgIDoqbG9hZC1mbiogKG9yICg6bG9hZCBvcHRzKSAqbG9hZC1mbiopLFxyXG4gICAgOipldmFsLWZuKiAob3IgKDpldmFsIG9wdHMpICpldmFsLWZuKil9XHJcbiAgIHNvdXJjZVxyXG4gICBuYW1lXHJcbiAgIG9wdHNcclxuICAgY2IpKSlcclxuIn0gezpzeW0gKmV2YWwtZm4qLCA6bWV0YSB7OmRvYyAiRWFjaCBydW50aW1lIGVudmlyb25tZW50IHByb3ZpZGVzIHZhcmlvdXMgd2F5cyB0byBldmFsIEphdmFTY3JpcHRcbiAgc291cmNlLiBXaGF0ZXZlciBmdW5jdGlvbiAqZXZhbC1mbiogaXMgYm91bmQgdG8gd2lsbCBiZSBwYXNzZWQgYSBtYXBcbiAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGtleXM6XG5cbiAgOnNvdXJjZSAtIHRoZSBzb3VyY2Ugb2YgdGhlIGxpYnJhcnkgKHN0cmluZylcbiAgOm5hbWUgICAtIHVzZWQgdG8gdW5pcXVlIGlkZW50aWZ5IHRoZSBzY3JpcHQgKHN5bWJvbClcbiAgOmNhY2hlICAtIGlmIHRoZSBzb3VyY2Ugd2FzIG9yaWdpbmFsbHkgQ2xvanVyZVNjcmlwdCwgd2lsbCBiZSBnaXZlbiB0aGVcbiAgICAgICAgICAgIGFuYWx5c2lzIGNhY2hlLlxuXG4gIFRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbiBzaG91bGQgYmUgdGhlIHJldHVybiB2YWx1ZS4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKmV2YWwtZm4qIChmbiBbbV0gKHRocm93IChqcy9FcnJvci4gXCJObyAqZXZhbC1mbiogc2V0XCIpKSkpXHJcbiJ9KSwgcnVtLmNvcmUgKHs6c3ltIG1vdW50LCA6bWV0YSB7OmRvYyAiQWRkIGVsZW1lbnQgdG8gdGhlIERPTSB0cmVlLiBJZGVtcG90ZW50LiBTdWJzZXF1ZW50IG1vdW50cyB3aWxsIGp1c3QgdXBkYXRlIGVsZW1lbnQuIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbW91bnRcclxuIFwiQWRkIGVsZW1lbnQgdG8gdGhlIERPTSB0cmVlLiBJZGVtcG90ZW50LiBTdWJzZXF1ZW50IG1vdW50cyB3aWxsIGp1c3QgdXBkYXRlIGVsZW1lbnQuXCJcclxuIFtlbGVtZW50IG5vZGVdXHJcbiAoanMvUmVhY3RET00ucmVuZGVyIGVsZW1lbnQgbm9kZSlcclxuIG5pbClcclxuIn0gezpzeW0gdW5tb3VudCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgY29tcG9uZW50IGZyb20gdGhlIERPTSB0cmVlLiIsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bm1vdW50XHJcbiBcIlJlbW92ZXMgY29tcG9uZW50IGZyb20gdGhlIERPTSB0cmVlLlwiXHJcbiBbbm9kZV1cclxuIChqcy9SZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIG5vZGUpKVxyXG4ifSB7OnN5bSBsb2NhbCwgOm1ldGEgezpkb2MgIk1peGluIGNvbnN0cnVjdG9yLiBBZGRzIGFuIGF0b20gdG8gY29tcG9uZW504oCZcyBzdGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGtlZXAgc3R1ZmYgZHVyaW5nIGNvbXBvbmVudOKAmXMgbGlmZWN5Y2xlLiBDb21wb25lbnQgd2lsbCBiZSByZS1yZW5kZXJlZCBpZiBhdG9t4oCZcyB2YWx1ZSBjaGFuZ2VzLiBBdG9tIGlzIHN0b3JlZCB1bmRlciB1c2VyLXByb3ZpZGVkIGtleSBvciB1bmRlciBgOnJ1bS9sb2NhbGAgYnkgZGVmYXVsdC5cbiAgXG4gICBgYGBcbiAgIChydW0vZGVmY3MgY291bnRlciA8IChydW0vbG9jYWwgMCA6Y250KVxuICAgICBbc3RhdGUgbGFiZWxdXG4gICAgIChsZXQgWypjbnQgKDpjbnQgc3RhdGUpXVxuICAgICAgIFs6ZGl2IHs6b24tY2xpY2sgKGZuIFtfXSAoc3dhcCEgKmNudCBpbmMpKX1cbiAgICAgICAgIGxhYmVsIEAqY250XSkpXG4gICBcbiAgIChydW0vbW91bnQgKGNvdW50ZXIgXCJDbGljayBjb3VudDogXCIpKVxuICAgYGBgIiwgOmFyZ2xpc3RzIFtbaW5pdGlhbF0gW2luaXRpYWwga2V5XV19LCA6c291cmNlICIoZGVmblxyXG4gbG9jYWxcclxuIFwiTWl4aW4gY29uc3RydWN0b3IuIEFkZHMgYW4gYXRvbSB0byBjb21wb25lbnTigJlzIHN0YXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8ga2VlcCBzdHVmZiBkdXJpbmcgY29tcG9uZW504oCZcyBsaWZlY3ljbGUuIENvbXBvbmVudCB3aWxsIGJlIHJlLXJlbmRlcmVkIGlmIGF0b23igJlzIHZhbHVlIGNoYW5nZXMuIEF0b20gaXMgc3RvcmVkIHVuZGVyIHVzZXItcHJvdmlkZWQga2V5IG9yIHVuZGVyIGA6cnVtL2xvY2FsYCBieSBkZWZhdWx0LlxcbiAgXFxuICAgYGBgXFxuICAgKHJ1bS9kZWZjcyBjb3VudGVyIDwgKHJ1bS9sb2NhbCAwIDpjbnQpXFxuICAgICBbc3RhdGUgbGFiZWxdXFxuICAgICAobGV0IFsqY250ICg6Y250IHN0YXRlKV1cXG4gICAgICAgWzpkaXYgezpvbi1jbGljayAoZm4gW19dIChzd2FwISAqY250IGluYykpfVxcbiAgICAgICAgIGxhYmVsIEAqY250XSkpXFxuICAgXFxuICAgKHJ1bS9tb3VudCAoY291bnRlciBcXFwiQ2xpY2sgY291bnQ6IFxcXCIpKVxcbiAgIGBgYFwiXHJcbiAoW2luaXRpYWxdIChsb2NhbCBpbml0aWFsIDpydW0vbG9jYWwpKVxyXG4gKFtpbml0aWFsIGtleV1cclxuICB7OndpbGwtbW91bnRcclxuICAgKGZuXHJcbiAgICBbc3RhdGVdXHJcbiAgICAobGV0XHJcbiAgICAgW2xvY2FsLXN0YXRlXHJcbiAgICAgIChhdG9tIGluaXRpYWwpXHJcbiAgICAgIGNvbXBvbmVudFxyXG4gICAgICAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpXVxyXG4gICAgIChhZGQtd2F0Y2hcclxuICAgICAgbG9jYWwtc3RhdGVcclxuICAgICAga2V5XHJcbiAgICAgIChmbiBbXyBfIF8gX10gKHJlcXVlc3QtcmVuZGVyIGNvbXBvbmVudCkpKVxyXG4gICAgIChhc3NvYyBzdGF0ZSBrZXkgbG9jYWwtc3RhdGUpKSl9KSlcclxuIn0gezpzeW0gcmVhY3RpdmUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiByZWFjdGl2ZVxyXG4gXCJNaXhpbi4gV29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBbW3JlYWN0XV0uXFxuICBcXG4gICBgYGBcXG4gICAocnVtL2RlZmMgY29tcCA8IHJ1bS9yZWFjdGl2ZVxcbiAgICAgWypjb3VudGVyXVxcbiAgICAgWzpkaXYgKHJ1bS9yZWFjdCBjb3VudGVyKV0pXFxuXFxuICAgKGRlZiAqY291bnRlciAoYXRvbSAwKSlcXG4gICAocnVtL21vdW50IChjb21wICpjb3VudGVyKSBqcy9kb2N1bWVudC5ib2R5KVxcbiAgIChzd2FwISAqY291bnRlciBpbmMpIDs7IHdpbGwgZm9yY2UgY29tcCB0byByZS1yZW5kZXJcXG4gICBgYGBcIlxyXG4gezppbml0XHJcbiAgKGZuIFtzdGF0ZSBwcm9wc10gKGFzc29jIHN0YXRlIDpydW0ucmVhY3RpdmUva2V5IChyYW5kb20tdXVpZCkpKSxcclxuICA6d3JhcC1yZW5kZXJcclxuICAoZm5cclxuICAgW3JlbmRlci1mbl1cclxuICAgKGZuXHJcbiAgICBbc3RhdGVdXHJcbiAgICAoYmluZGluZ1xyXG4gICAgIFsqcmVhY3Rpb25zKiAodm9sYXRpbGUhICN7fSldXHJcbiAgICAgKGxldFxyXG4gICAgICBbY29tcFxyXG4gICAgICAgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKVxyXG4gICAgICAgb2xkLXJlYWN0aW9uc1xyXG4gICAgICAgKDpydW0ucmVhY3RpdmUvcmVmcyBzdGF0ZSAje30pXHJcbiAgICAgICBbZG9tIG5leHQtc3RhdGVdXHJcbiAgICAgICAocmVuZGVyLWZuIHN0YXRlKVxyXG4gICAgICAgbmV3LXJlYWN0aW9uc1xyXG4gICAgICAgQCpyZWFjdGlvbnMqXHJcbiAgICAgICBrZXlcclxuICAgICAgICg6cnVtLnJlYWN0aXZlL2tleSBzdGF0ZSldXHJcbiAgICAgIChkb3NlcVxyXG4gICAgICAgW3JlZiBvbGQtcmVhY3Rpb25zXVxyXG4gICAgICAgKHdoZW4tbm90IChjb250YWlucz8gbmV3LXJlYWN0aW9ucyByZWYpIChyZW1vdmUtd2F0Y2ggcmVmIGtleSkpKVxyXG4gICAgICAoZG9zZXFcclxuICAgICAgIFtyZWYgbmV3LXJlYWN0aW9uc11cclxuICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgIChjb250YWlucz8gb2xkLXJlYWN0aW9ucyByZWYpXHJcbiAgICAgICAgKGFkZC13YXRjaCByZWYga2V5IChmbiBbXyBfIF8gX10gKHJlcXVlc3QtcmVuZGVyIGNvbXApKSkpKVxyXG4gICAgICBbZG9tIChhc3NvYyBuZXh0LXN0YXRlIDpydW0ucmVhY3RpdmUvcmVmcyBuZXctcmVhY3Rpb25zKV0pKSkpLFxyXG4gIDp3aWxsLXVubW91bnRcclxuICAoZm5cclxuICAgW3N0YXRlXVxyXG4gICAobGV0XHJcbiAgICBba2V5ICg6cnVtLnJlYWN0aXZlL2tleSBzdGF0ZSldXHJcbiAgICAoZG9zZXEgW3JlZiAoOnJ1bS5yZWFjdGl2ZS9yZWZzIHN0YXRlKV0gKHJlbW92ZS13YXRjaCByZWYga2V5KSkpXHJcbiAgIChkaXNzb2Mgc3RhdGUgOnJ1bS5yZWFjdGl2ZS9yZWZzIDpydW0ucmVhY3RpdmUva2V5KSl9KVxyXG4ifSB7OnN5bSByZWYtbm9kZSwgOm1ldGEgezpkb2MgIkdpdmVuIHN0YXRlIGFuZCByZWYgaGFuZGxlLCByZXR1cm5zIERPTSBub2RlIGFzc29jaWF0ZWQgd2l0aCByZWYuIiwgOmFyZ2xpc3RzIChbc3RhdGUga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmLW5vZGVcclxuIFwiR2l2ZW4gc3RhdGUgYW5kIHJlZiBoYW5kbGUsIHJldHVybnMgRE9NIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHJlZi5cIlxyXG4gW3N0YXRlIGtleV1cclxuIChqcy9SZWFjdERPTS5maW5kRE9NTm9kZSAocmVmIHN0YXRlIChuYW1lIGtleSkpKSlcclxuIn0gezpzeW0gcmVhY3QsIDptZXRhIHs6ZG9jICJXb3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIFtbcmVhY3RpdmVdXSBtaXhpbi4gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBgZGVyZWZgIGluc2lkZSByZW5kZXIsIGFuZCB5b3VyIGNvbXBvbmVudCB3aWxsIHN1YnNjcmliZSB0byBjaGFuZ2VzIGhhcHBlbmluZyB0byB0aGUgZGVyZWZlZCBhdG9tLiIsIDphcmdsaXN0cyAoW3JlZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWN0XHJcbiBcIldvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggW1tyZWFjdGl2ZV1dIG1peGluLiBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBkZXJlZmAgaW5zaWRlIHJlbmRlciwgYW5kIHlvdXIgY29tcG9uZW50IHdpbGwgc3Vic2NyaWJlIHRvIGNoYW5nZXMgaGFwcGVuaW5nIHRvIHRoZSBkZXJlZmVkIGF0b20uXCJcclxuIFtyZWZdXHJcbiAoYXNzZXJ0XHJcbiAgKnJlYWN0aW9ucypcclxuICBcInJ1bS5jb3JlL3JlYWN0IGlzIG9ubHkgc3VwcG9ydGVkIGluIGNvbmp1bmN0aW9uIHdpdGggcnVtLmNvcmUvcmVhY3RpdmVcIilcclxuICh2c3dhcCEgKnJlYWN0aW9ucyogY29uaiByZWYpXHJcbiBAcmVmKVxyXG4ifSB7OnN5bSByZXF1ZXN0LXJlbmRlciwgOm1ldGEgezpkb2MgIlNjaGVkdWxlcyByZWFjdCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgb24gbmV4dCBhbmltYXRpb24gZnJhbWUuIiwgOmFyZ2xpc3RzIChbY29tcG9uZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVxdWVzdC1yZW5kZXJcclxuIFwiU2NoZWR1bGVzIHJlYWN0IGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCBvbiBuZXh0IGFuaW1hdGlvbiBmcmFtZS5cIlxyXG4gW2NvbXBvbmVudF1cclxuICh3aGVuIChlbXB0eT8gQHJlbmRlci1xdWV1ZSkgKHNjaGVkdWxlIHJlbmRlcikpXHJcbiAodnN3YXAhIHJlbmRlci1xdWV1ZSBjb25qIGNvbXBvbmVudCkpXHJcbiJ9IHs6c3ltIHBvcnRhbCwgOm1ldGEgezpkb2MgIlJlbmRlciBgZWxlbWVudGAgaW4gYSBET00gYG5vZGVgIHRoYXQgaXMgb3VzaWRlIG9mIGN1cnJlbnQgRE9NIGhpZXJhcmNoeS4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IG5vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3J0YWxcclxuIFwiUmVuZGVyIGBlbGVtZW50YCBpbiBhIERPTSBgbm9kZWAgdGhhdCBpcyBvdXNpZGUgb2YgY3VycmVudCBET00gaGllcmFyY2h5LlwiXHJcbiBbZWxlbWVudCBub2RlXVxyXG4gKGpzL1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCBlbGVtZW50IG5vZGUpKVxyXG4ifSB7OnN5bSB3aXRoLWtleSwgOm1ldGEgezpkb2MgIkFkZHMgUmVhY3Qga2V5IHRvIGVsZW1lbnQuXG4gICBcbiAgIGBgYFxuICAgKHJ1bS9kZWZjIGxhYmVsIFt0ZXh0XSBbOmRpdiB0ZXh0XSlcblxuICAgKC0+IChsYWJlbClcbiAgICAgICAocnVtL3dpdGgta2V5IFwiYWJjXCIpXG4gICAgICAgKHJ1bS9tb3VudCBqcy9kb2N1bWVudC5ib2R5KSlcbiAgIGBgYCIsIDphcmdsaXN0cyAoW2VsZW1lbnQga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4gd2l0aC1rZXlcclxuIFwiQWRkcyBSZWFjdCBrZXkgdG8gZWxlbWVudC5cXG4gICBcXG4gICBgYGBcXG4gICAocnVtL2RlZmMgbGFiZWwgW3RleHRdIFs6ZGl2IHRleHRdKVxcblxcbiAgICgtPiAobGFiZWwpXFxuICAgICAgIChydW0vd2l0aC1rZXkgXFxcImFiY1xcXCIpXFxuICAgICAgIChydW0vbW91bnQganMvZG9jdW1lbnQuYm9keSkpXFxuICAgYGBgXCJcclxuIFtlbGVtZW50IGtleV1cclxuIChqcy9SZWFjdC5jbG9uZUVsZW1lbnQgZWxlbWVudCAjanMge1wia2V5XCIga2V5fSBuaWwpKVxyXG4ifSB7OnN5bSBidWlsZC1kZWZjcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gYnVpbGQtZGVmY3NcclxuIFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXVxyXG4gKGxldFxyXG4gIFtyZW5kZXJcclxuICAgKGZuIFtzdGF0ZV0gWyhhcHBseSByZW5kZXItYm9keSBzdGF0ZSAoOnJ1bS9hcmdzIHN0YXRlKSkgc3RhdGVdKV1cclxuICAoYnVpbGQtY3RvciByZW5kZXIgbWl4aW5zIGRpc3BsYXktbmFtZSkpKVxyXG4ifSB7OnN5bSByZWYsIDptZXRhIHs6ZG9jICJHaXZlbiBzdGF0ZSBhbmQgcmVmIGhhbmRsZSwgcmV0dXJucyBSZWFjdCBjb21wb25lbnQuIiwgOmFyZ2xpc3RzIChbc3RhdGUga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmXHJcbiBcIkdpdmVuIHN0YXRlIGFuZCByZWYgaGFuZGxlLCByZXR1cm5zIFJlYWN0IGNvbXBvbmVudC5cIlxyXG4gW3N0YXRlIGtleV1cclxuICgtPiBzdGF0ZSA6cnVtL3JlYWN0LWNvbXBvbmVudCAoYWdldCBcInJlZnNcIikgKGFnZXQgKG5hbWUga2V5KSkpKVxyXG4ifSB7OnN5bSBzdGF0aWMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBzdGF0aWNcclxuIFwiTWl4aW4uIFdpbGwgYXZvaWQgcmUtcmVuZGVyIGlmIG5vbmUgb2YgY29tcG9uZW504oCZcyBhcmd1bWVudHMgaGF2ZSBjaGFuZ2VkLiBEb2VzIGVxdWFsaXR5IGNoZWNrIChgPWApIG9uIGFsbCBhcmd1bWVudHMuXFxuICBcXG4gICBgYGBcXG4gICAocnVtL2RlZmMgbGFiZWwgPCBydW0vc3RhdGljXFxuICAgICBbdGV4dF1cXG4gICAgIFs6ZGl2IHRleHRdKVxcbiAgICAgXFxuICAgKHJ1bS9tb3VudCAobGFiZWwgXFxcImFiY1xcXCIpIGpzL2RvY3VtZW50LmJvZHkpXFxuXFxuICAgOzsgZGVmICE9IGFiYywgd2lsbCByZS1yZW5kZXJcXG4gICAocnVtL21vdW50IChsYWJlbCBcXFwiZGVmXFxcIikganMvZG9jdW1lbnQuYm9keSlcXG5cXG4gICA7OyBkZWYgPT0gZGVmLCB3b27igJl0IHJlLXJlbmRlclxcbiAgIChydW0vbW91bnQgKGxhYmVsIFxcXCJkZWZcXFwiKSBqcy9kb2N1bWVudC5ib2R5KVxcbiAgIGBgYFwiXHJcbiB7OnNob3VsZC11cGRhdGVcclxuICAoZm5cclxuICAgW29sZC1zdGF0ZSBuZXctc3RhdGVdXHJcbiAgIChub3Q9ICg6cnVtL2FyZ3Mgb2xkLXN0YXRlKSAoOnJ1bS9hcmdzIG5ldy1zdGF0ZSkpKX0pXHJcbiJ9IHs6c3ltIGN1cnNvciwgOm1ldGEgezpkb2MgIlNhbWUgYXMgW1tjdXJzb3ItaW5dXSBidXQgYWNjZXB0cyBzaW5nbGUga2V5IGluc3RlYWQgb2YgcGF0aCB2ZWN0b3IuIiwgOmFyZ2xpc3RzIChbcmVmIGtleSAmIG9wdGlvbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjdXJzb3JcclxuIFwiU2FtZSBhcyBbW2N1cnNvci1pbl1dIGJ1dCBhY2NlcHRzIHNpbmdsZSBrZXkgaW5zdGVhZCBvZiBwYXRoIHZlY3Rvci5cIlxyXG4gW3JlZiBrZXkgJiBvcHRpb25zXVxyXG4gKGFwcGx5IGN1cnNvci1pbiByZWYgW2tleV0gb3B0aW9ucykpXHJcbiJ9IHs6c3ltIHN0YXRlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gUmVhY3QgY29tcG9uZW50LCByZXR1cm5zIFJ1bSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggaXQuIiwgOmFyZ2xpc3RzIChbY29tcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0YXRlXHJcbiBcIkdpdmVuIFJlYWN0IGNvbXBvbmVudCwgcmV0dXJucyBSdW0gc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGl0LlwiXHJcbiBbY29tcF1cclxuIChnb2JqL2dldCAoLi1zdGF0ZSBjb21wKSBcIjpydW0vc3RhdGVcIikpXHJcbiJ9IHs6c3ltIGN1cnNvci1pbiwgOm1ldGEgezpkb2MgIkdpdmVuIGF0b20gd2l0aCBkZWVwIG5lc3RlZCB2YWx1ZSBhbmQgcGF0aCBpbnNpZGUgaXQsIGNyZWF0ZXMgYW4gYXRvbS1saWtlIHN0cnVjdHVyZVxuICAgdGhhdCBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IGZyb20gbWFpbiBhdG9tLCBidXQgd2lsbCBzeW5jIGNoYW5nZXMgYm90aCB3YXlzOlxuICBcbiAgIGBgYFxuICAgKGRlZiBkYiAoYXRvbSB7IDp1c2VycyB7IFwiSXZhblwiIHsgOmFnZSAzMCB9fX0pKVxuICAgXG4gICAoZGVmIGl2YW4gKHJ1bS9jdXJzb3IgZGIgWzp1c2VycyBcIkl2YW5cIl0pKVxuICAgKGRlcmVmIGl2YW4pIDs7ID0+IHsgOmFnZSAzMCB9XG4gICBcbiAgIChzd2FwISBpdmFuIHVwZGF0ZSA6YWdlIGluYykgOzsgPT4geyA6YWdlIDMxIH1cbiAgIChkZXJlZiBkYikgOzsgPT4geyA6dXNlcnMgeyBcIkl2YW5cIiB7IDphZ2UgMzEgfX19XG4gICBcbiAgIChzd2FwISBkYiB1cGRhdGUtaW4gWzp1c2VycyBcIkl2YW5cIiA6YWdlXSBpbmMpXG4gICA7OyA9PiB7IDp1c2VycyB7IFwiSXZhblwiIHsgOmFnZSAzMiB9fX1cbiAgIFxuICAgKGRlcmVmIGl2YW4pIDs7ID0+IHsgOmFnZSAzMiB9XG4gICBgYGBcbiAgXG4gICBSZXR1cm5lZCB2YWx1ZSBzdXBwb3J0cyBgZGVyZWZgLCBgc3dhcCFgLCBgcmVzZXQhYCwgd2F0Y2hlcyBhbmQgbWV0YWRhdGEuXG4gIFxuICAgVGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBpcyBgOm1ldGFgIiwgOmFyZ2xpc3RzIChbcmVmIHBhdGggJiB7OmFzIG9wdGlvbnN9XSl9LCA6c291cmNlICIoZGVmblxyXG4gY3Vyc29yLWluXHJcbiBcIkdpdmVuIGF0b20gd2l0aCBkZWVwIG5lc3RlZCB2YWx1ZSBhbmQgcGF0aCBpbnNpZGUgaXQsIGNyZWF0ZXMgYW4gYXRvbS1saWtlIHN0cnVjdHVyZVxcbiAgIHRoYXQgY2FuIGJlIHVzZWQgc2VwYXJhdGVseSBmcm9tIG1haW4gYXRvbSwgYnV0IHdpbGwgc3luYyBjaGFuZ2VzIGJvdGggd2F5czpcXG4gIFxcbiAgIGBgYFxcbiAgIChkZWYgZGIgKGF0b20geyA6dXNlcnMgeyBcXFwiSXZhblxcXCIgeyA6YWdlIDMwIH19fSkpXFxuICAgXFxuICAgKGRlZiBpdmFuIChydW0vY3Vyc29yIGRiIFs6dXNlcnMgXFxcIkl2YW5cXFwiXSkpXFxuICAgKGRlcmVmIGl2YW4pIDs7ID0+IHsgOmFnZSAzMCB9XFxuICAgXFxuICAgKHN3YXAhIGl2YW4gdXBkYXRlIDphZ2UgaW5jKSA7OyA9PiB7IDphZ2UgMzEgfVxcbiAgIChkZXJlZiBkYikgOzsgPT4geyA6dXNlcnMgeyBcXFwiSXZhblxcXCIgeyA6YWdlIDMxIH19fVxcbiAgIFxcbiAgIChzd2FwISBkYiB1cGRhdGUtaW4gWzp1c2VycyBcXFwiSXZhblxcXCIgOmFnZV0gaW5jKVxcbiAgIDs7ID0+IHsgOnVzZXJzIHsgXFxcIkl2YW5cXFwiIHsgOmFnZSAzMiB9fX1cXG4gICBcXG4gICAoZGVyZWYgaXZhbikgOzsgPT4geyA6YWdlIDMyIH1cXG4gICBgYGBcXG4gIFxcbiAgIFJldHVybmVkIHZhbHVlIHN1cHBvcnRzIGBkZXJlZmAsIGBzd2FwIWAsIGByZXNldCFgLCB3YXRjaGVzIGFuZCBtZXRhZGF0YS5cXG4gIFxcbiAgIFRoZSBvbmx5IHN1cHBvcnRlZCBvcHRpb24gaXMgYDptZXRhYFwiXHJcbiBbcmVmIHBhdGggJiB7OmFzIG9wdGlvbnN9XVxyXG4gKGlmXHJcbiAgKGluc3RhbmNlPyBjdXJzb3IvQ3Vyc29yIHJlZilcclxuICAoY3Vyc29yL0N1cnNvci4gKC4tcmVmIHJlZikgKGludG8gKC4tcGF0aCByZWYpIHBhdGgpICg6bWV0YSBvcHRpb25zKSlcclxuICAoY3Vyc29yL0N1cnNvci4gcmVmIHBhdGggKDptZXRhIG9wdGlvbnMpKSkpXHJcbiJ9IHs6c3ltIGRvbS1ub2RlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gc3RhdGUsIHJldHVybnMgdG9wLWxldmVsIERPTSBub2RlIG9mIGNvbXBvbmVudC4gQ2FsbCBpdCBkdXJpbmcgbGlmZWN5Y2xlIGNhbGxiYWNrcy4gQ2Fu4oCZdCBiZSBjYWxsZWQgZHVyaW5nIHJlbmRlci4iLCA6YXJnbGlzdHMgKFtzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvbS1ub2RlXHJcbiBcIkdpdmVuIHN0YXRlLCByZXR1cm5zIHRvcC1sZXZlbCBET00gbm9kZSBvZiBjb21wb25lbnQuIENhbGwgaXQgZHVyaW5nIGxpZmVjeWNsZSBjYWxsYmFja3MuIENhbuKAmXQgYmUgY2FsbGVkIGR1cmluZyByZW5kZXIuXCJcclxuIFtzdGF0ZV1cclxuIChqcy9SZWFjdERPTS5maW5kRE9NTm9kZSAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpKSlcclxuIn0gezpzeW0gd2l0aC1yZWYsIDptZXRhIHs6ZG9jICJBZGRzIFJlYWN0IHJlZiAoc3RyaW5nIG9yIGNhbGxiYWNrKSB0byBlbGVtZW50LlxuICAgXG4gICBgYGBcbiAgIChydW0vZGVmYyBsYWJlbCBbdGV4dF0gWzpkaXYgdGV4dF0pXG5cbiAgICgtPiAobGFiZWwpXG4gICAgICAgKHJ1bS93aXRoLXJlZiBcImFiY1wiKVxuICAgICAgIChydW0vbW91bnQganMvZG9jdW1lbnQuYm9keSkpXG4gICBgYGAiLCA6YXJnbGlzdHMgKFtlbGVtZW50IHJlZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdpdGgtcmVmXHJcbiBcIkFkZHMgUmVhY3QgcmVmIChzdHJpbmcgb3IgY2FsbGJhY2spIHRvIGVsZW1lbnQuXFxuICAgXFxuICAgYGBgXFxuICAgKHJ1bS9kZWZjIGxhYmVsIFt0ZXh0XSBbOmRpdiB0ZXh0XSlcXG5cXG4gICAoLT4gKGxhYmVsKVxcbiAgICAgICAocnVtL3dpdGgtcmVmIFxcXCJhYmNcXFwiKVxcbiAgICAgICAocnVtL21vdW50IGpzL2RvY3VtZW50LmJvZHkpKVxcbiAgIGBgYFwiXHJcbiBbZWxlbWVudCByZWZdXHJcbiAoanMvUmVhY3QuY2xvbmVFbGVtZW50IGVsZW1lbnQgI2pzIHtcInJlZlwiIHJlZn0gbmlsKSlcclxuIn0gezpzeW0gYnVpbGQtZGVmYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZW5kZXItYm9keSBtaXhpbnMgZGlzcGxheS1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gYnVpbGQtZGVmY1xyXG4gW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdXHJcbiAoaWZcclxuICAoZW1wdHk/IG1peGlucylcclxuICAobGV0XHJcbiAgIFtjbGFzc1xyXG4gICAgKGZuIFtwcm9wc10gKGFwcGx5IHJlbmRlci1ib2R5IChhZ2V0IHByb3BzIFwiOnJ1bS9hcmdzXCIpKSlcclxuICAgIF9cclxuICAgIChhc2V0IGNsYXNzIFwiZGlzcGxheU5hbWVcIiBkaXNwbGF5LW5hbWUpXHJcbiAgICBjdG9yXHJcbiAgICAoZm5cclxuICAgICBbJiBhcmdzXVxyXG4gICAgIChqcy9SZWFjdC5jcmVhdGVFbGVtZW50IGNsYXNzICNqcyB7XCI6cnVtL2FyZ3NcIiBhcmdzfSkpXVxyXG4gICAod2l0aC1tZXRhIGN0b3IgezpydW0vY2xhc3MgY2xhc3N9KSlcclxuICAobGV0XHJcbiAgIFtyZW5kZXIgKGZuIFtzdGF0ZV0gWyhhcHBseSByZW5kZXItYm9keSAoOnJ1bS9hcmdzIHN0YXRlKSkgc3RhdGVdKV1cclxuICAgKGJ1aWxkLWN0b3IgcmVuZGVyIG1peGlucyBkaXNwbGF5LW5hbWUpKSkpXHJcbiJ9IHs6c3ltIGh5ZHJhdGUsIDptZXRhIHs6ZG9jICJTYW1lIGFzIFtbbW91bnRdXSBidXQgbXVzdCBiZSBjYWxsZWQgb24gRE9NIHRyZWUgYWxyZWFkeSByZW5kZXJlZCBieSBhIHNlcnZlciB2aWEgW1tyZW5kZXItaHRtbF1dLiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGh5ZHJhdGVcclxuIFwiU2FtZSBhcyBbW21vdW50XV0gYnV0IG11c3QgYmUgY2FsbGVkIG9uIERPTSB0cmVlIGFscmVhZHkgcmVuZGVyZWQgYnkgYSBzZXJ2ZXIgdmlhIFtbcmVuZGVyLWh0bWxdXS5cIlxyXG4gW2VsZW1lbnQgbm9kZV1cclxuIChqcy9SZWFjdERPTS5oeWRyYXRlIGVsZW1lbnQgbm9kZSkpXHJcbiJ9IHs6c3ltIGJ1aWxkLWRlZmNjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBidWlsZC1kZWZjY1xyXG4gW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdXHJcbiAobGV0XHJcbiAgW3JlbmRlclxyXG4gICAoZm5cclxuICAgIFtzdGF0ZV1cclxuICAgIFsoYXBwbHkgcmVuZGVyLWJvZHkgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKSAoOnJ1bS9hcmdzIHN0YXRlKSlcclxuICAgICBzdGF0ZV0pXVxyXG4gIChidWlsZC1jdG9yIHJlbmRlciBtaXhpbnMgZGlzcGxheS1uYW1lKSkpXHJcbiJ9IHs6c3ltIGRlcml2ZWQtYXRvbSwgOm1ldGEgezphcmdsaXN0cyAocXVvdGUgKFtyZWZzIGtleSBmXSBbcmVmcyBrZXkgZiBvcHRzXSkpLCA6ZG9jICJVc2UgdGhpcyB0byBjcmVhdGUg4oCcY2hhaW5z4oCdIGFuZCBhY3ljbGljIGdyYXBocyBvZiBkZXBlbmRlbnQgYXRvbXMuXG4gICBcbiAgICAgICAgICAgICBbW2Rlcml2ZWQtYXRvbV1dIHdpbGw6XG4gICAgICAgICAgXG4gICAgICAgICAgICAgLSBUYWtlIE4g4oCcc291cmNl4oCdIHJlZnMuXG4gICAgICAgICAgICAgLSBTZXQgdXAgYSB3YXRjaCBvbiBlYWNoIG9mIHRoZW0uXG4gICAgICAgICAgICAgLSBDcmVhdGUg4oCcc2lua+KAnSBhdG9tLlxuICAgICAgICAgICAgIC0gV2hlbiBhbnkgb2Ygc291cmNlIHJlZnMgY2hhbmdlczpcbiAgICAgICAgICAgICAgICAtIHJlLXJ1biBmdW5jdGlvbiBgZmAsIHBhc3NpbmcgTiBkZXJlZmVyZW5jZWQgdmFsdWVzIG9mIHNvdXJjZSByZWZzLlxuICAgICAgICAgICAgICAgIC0gYHJlc2V0IWAgcmVzdWx0IG9mIGBmYCB0byB0aGUgc2luayBhdG9tLlxuICAgICAgICAgICAgIC0gUmV0dXJuIHNpbmsgYXRvbS5cblxuICAgICAgICAgICAgIEV4YW1wbGU6XG5cbiAgICAgICAgICAgICBgYGBcbiAgICAgICAgICAgICAoZGVmICphIChhdG9tIDApKVxuICAgICAgICAgICAgIChkZWYgKmIgKGF0b20gMSkpXG4gICAgICAgICAgICAgKGRlZiAqeCAoZGVyaXZlZC1hdG9tIFsqYSAqYl0gOjprZXlcbiAgICAgICAgICAgICAgICAgICAgICAgKGZuIFthIGJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHN0ciBhIFwiOlwiIGIpKSkpXG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgKHR5cGUgKngpICA7OyA9PiBjbG9qdXJlLmxhbmcuQXRvbVxuICAgICAgICAgICAgIChkZXJlZiAqeCkgOzsgPT4gXCIwOjFcIlxuICAgICAgICAgICAgIFxuICAgICAgICAgICAgIChzd2FwISAqYSBpbmMpXG4gICAgICAgICAgICAgKGRlcmVmICp4KSA7OyA9PiBcIjE6MVwiXG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgKHJlc2V0ISAqYiA3KVxuICAgICAgICAgICAgIChkZXJlZiAqeCkgOzsgPT4gXCIxOjdcIlxuICAgICAgICAgICAgIGBgYFxuXG4gICAgICAgICAgICAgQXJndW1lbnRzOlxuICAgICAgICAgIFxuICAgICAgICAgICAgIC0gYHJlZnNgIC0gc2VxdWVuY2Ugb2Ygc291cmNlIHJlZnMsXG4gICAgICAgICAgICAgLSBga2V5YCAgLSB1bmlxdWUga2V5IHRvIHJlZ2lzdGVyIHdhdGNoZXIsIHNhbWUgYXMgaW4gYGNsb2p1cmUuY29yZS9hZGQtd2F0Y2hgLFxuICAgICAgICAgICAgIC0gYGZgICAgIC0gZnVuY3Rpb24gdGhhdCBtdXN0IGFjY2VwdCBOIGFyZ3VtZW50cyAoc2FtZSBhcyBudW1iZXIgb2Ygc291cmNlIHJlZnMpIGFuZCByZXR1cm4gYSB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHRoZSBzaW5rIHJlZi4gTm90ZTogYGZgIHdpbGwgYmUgY2FsbGVkIHdpdGggYWxyZWFkeSBkZXJlZmVyZW5jZWQgdmFsdWVzLFxuICAgICAgICAgICAgIC0gYG9wdHNgIC0gb3B0aW9uYWwuIE1hcCBvZjpcbiAgICAgICAgICAgICAgIC0gYDpyZWZgIC0gdXNlIHRoaXMgYXMgc2luayByZWYuIEJ5IGRlZmF1bHQgY3JlYXRlcyBuZXcgYXRvbSxcbiAgICAgICAgICAgICAgIC0gYDpjaGVjay1lcXVhbHM/YCAtIERlZmF1bHRzIHRvIGB0cnVlYC4gSWYgZXF1YWxpdHkgY2hlY2sgc2hvdWxkIGJlIHJ1biBvbiBlYWNoIHNvdXJjZSB1cGRhdGU6IGAoPSBAc2luayAoZiBuZXctdmFscykpYC4gV2hlbiByZXN1bHQgb2YgcmVjYWxjdWxhdGluZyBgZmAgZXF1YWxzIHRvIHRoZSBvbGQgdmFsdWUsIGByZXNldCFgIHdvbuKAmXQgYmUgY2FsbGVkLiBTZXQgdG8gYGZhbHNlYCBpZiBjaGVja2luZyBmb3IgZXF1YWxpdHkgY2FuIGJlIGV4cGVuc2l2ZS4ifSwgOnNvdXJjZSAiKGRlZiBkZXJpdmVkLWF0b20gZGVyaXZlZC1hdG9tL2Rlcml2ZWQtYXRvbSlcclxuIn0pLCBjbGpzLmNvcmUgKHs6c3ltIGpzLT5jbGosIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIEphdmFTY3JpcHQgYXJyYXlzIGludG8gQ2xvanVyZVNjcmlwdFxuICB2ZWN0b3JzLCBhbmQgSmF2YVNjcmlwdCBvYmplY3RzIGludG8gQ2xvanVyZVNjcmlwdCBtYXBzLiAgV2l0aFxuICBvcHRpb24gJzprZXl3b3JkaXplLWtleXMgdHJ1ZScgd2lsbCBjb252ZXJ0IG9iamVjdCBmaWVsZHMgZnJvbVxuICBzdHJpbmdzIHRvIGtleXdvcmRzLiIsIDphcmdsaXN0cyBbW3hdIFt4ICYgb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLT5jbGpcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBKYXZhU2NyaXB0IGFycmF5cyBpbnRvIENsb2p1cmVTY3JpcHRcXG4gIHZlY3RvcnMsIGFuZCBKYXZhU2NyaXB0IG9iamVjdHMgaW50byBDbG9qdXJlU2NyaXB0IG1hcHMuICBXaXRoXFxuICBvcHRpb24gJzprZXl3b3JkaXplLWtleXMgdHJ1ZScgd2lsbCBjb252ZXJ0IG9iamVjdCBmaWVsZHMgZnJvbVxcbiAgc3RyaW5ncyB0byBrZXl3b3Jkcy5cIlxyXG4gKFt4XSAoanMtPmNsaiB4IDprZXl3b3JkaXplLWtleXMgZmFsc2UpKVxyXG4gKFt4ICYgb3B0c11cclxuICAobGV0XHJcbiAgIFt7OmtleXMgW2tleXdvcmRpemUta2V5c119XHJcbiAgICBvcHRzXHJcbiAgICBrZXlmblxyXG4gICAgKGlmIGtleXdvcmRpemUta2V5cyBrZXl3b3JkIHN0cilcclxuICAgIGZcclxuICAgIChmblxyXG4gICAgIHRoaXNmblxyXG4gICAgIFt4XVxyXG4gICAgIChjb25kXHJcbiAgICAgIChzYXRpc2ZpZXM/IElFbmNvZGVDbG9qdXJlIHgpXHJcbiAgICAgICgtanMtPmNsaiB4IChhcHBseSBhcnJheS1tYXAgb3B0cykpXHJcbiAgICAgIChzZXE/IHgpXHJcbiAgICAgIChkb2FsbCAobWFwIHRoaXNmbiB4KSlcclxuICAgICAgKG1hcC1lbnRyeT8geClcclxuICAgICAgKE1hcEVudHJ5LiAodGhpc2ZuIChrZXkgeCkpICh0aGlzZm4gKHZhbCB4KSkgbmlsKVxyXG4gICAgICAoY29sbD8geClcclxuICAgICAgKGludG8gKGVtcHR5IHgpIChtYXAgdGhpc2ZuKSB4KVxyXG4gICAgICAoYXJyYXk/IHgpXHJcbiAgICAgIChwZXJzaXN0ZW50IVxyXG4gICAgICAgKHJlZHVjZVxyXG4gICAgICAgIChmbipcclxuICAgICAgICAgW3AxX180ODg1MyMgcDJfXzQ4ODU0I11cclxuICAgICAgICAgKGNvbmohIHAxX180ODg1MyMgKHRoaXNmbiBwMl9fNDg4NTQjKSkpXHJcbiAgICAgICAgKHRyYW5zaWVudCBbXSlcclxuICAgICAgICB4KSlcclxuICAgICAgKGlkZW50aWNhbD8gKHR5cGUgeCkganMvT2JqZWN0KVxyXG4gICAgICAocGVyc2lzdGVudCFcclxuICAgICAgIChyZWR1Y2VcclxuICAgICAgICAoZm4gW3Iga10gKGFzc29jISByIChrZXlmbiBrKSAodGhpc2ZuIChnb2JqZWN0L2dldCB4IGspKSkpXHJcbiAgICAgICAgKHRyYW5zaWVudCB7fSlcclxuICAgICAgICAoanMta2V5cyB4KSkpXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIHgpKV1cclxuICAgKGYgeCkpKSlcclxuIn0gezpzeW0gc29ydC1ieSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwsIHdoZXJlIHRoZSBzb3J0XG4gICBvcmRlciBpcyBkZXRlcm1pbmVkIGJ5IGNvbXBhcmluZyAoa2V5Zm4gaXRlbSkuICBDb21wIGNhbiBiZVxuICAgYm9vbGVhbi12YWx1ZWQgY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgYSAtLzAvKyB2YWx1ZWQgY29tcGFyYXRvci5cbiAgIENvbXAgZGVmYXVsdHMgdG8gY29tcGFyZS4iLCA6YXJnbGlzdHMgW1trZXlmbiBjb2xsXSBba2V5Zm4gY29tcCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydC1ieVxyXG4gXCJSZXR1cm5zIGEgc29ydGVkIHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsLCB3aGVyZSB0aGUgc29ydFxcbiAgIG9yZGVyIGlzIGRldGVybWluZWQgYnkgY29tcGFyaW5nIChrZXlmbiBpdGVtKS4gIENvbXAgY2FuIGJlXFxuICAgYm9vbGVhbi12YWx1ZWQgY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgYSAtLzAvKyB2YWx1ZWQgY29tcGFyYXRvci5cXG4gICBDb21wIGRlZmF1bHRzIHRvIGNvbXBhcmUuXCJcclxuIChba2V5Zm4gY29sbF0gKHNvcnQtYnkga2V5Zm4gY29tcGFyZSBjb2xsKSlcclxuIChba2V5Zm4gY29tcCBjb2xsXVxyXG4gIChzb3J0IChmbiBbeCB5XSAoKGZuLT5jb21wYXJhdG9yIGNvbXApIChrZXlmbiB4KSAoa2V5Zm4geSkpKSBjb2xsKSkpXHJcbiJ9IHs6c3ltIElUcmFuc2llbnRBc3NvY2lhdGl2ZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgYXNzb2NpYXRpdml0eSB0byB0cmFuc2llbnQgY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtYXNzb2MhKX0gezpzeW0gY2h1bmstZmlyc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm4gY2h1bmstZmlyc3QgW3NdICgtY2h1bmtlZC1maXJzdCBzKSlcclxuIn0gezpzeW0gcHJpbnQtbWV0YT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3B0cyBvYmpdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1tZXRhP1xyXG4gW29wdHMgb2JqXVxyXG4gKGFuZFxyXG4gIChib29sZWFuIChnZXQgb3B0cyA6bWV0YSkpXHJcbiAgKGltcGxlbWVudHM/IElNZXRhIG9iailcclxuICAobm90IChuaWw/IChtZXRhIG9iaikpKSkpXHJcbiJ9IHs6c3ltIG0zLWhhc2gtaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2luXSl9LCA6c291cmNlICIoZGVmblxyXG4gbTMtaGFzaC1pbnRcclxuIFtpbl1cclxuIChpZlxyXG4gICh6ZXJvPyBpbilcclxuICBpblxyXG4gIChsZXQgW2sxIChtMy1taXgtSzEgaW4pIGgxIChtMy1taXgtSDEgbTMtc2VlZCBrMSldIChtMy1mbWl4IGgxIDQpKSkpXHJcbiJ9IHs6c3ltIHByLXN0ciosIDptZXRhIHs6ZG9jICJTdXBwb3J0IHNvIHRoYXQgY29sbGVjdGlvbnMgY2FuIGltcGxlbWVudCB0b1N0cmluZyB3aXRob3V0XG4gICBsb2FkaW5nIGFsbCB0aGUgcHJpbnRpbmcgbWFjaGluZXJ5LiIsIDphcmdsaXN0cyAoW29ial0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByLXN0cipcclxuIFwiU3VwcG9ydCBzbyB0aGF0IGNvbGxlY3Rpb25zIGNhbiBpbXBsZW1lbnQgdG9TdHJpbmcgd2l0aG91dFxcbiAgIGxvYWRpbmcgYWxsIHRoZSBwcmludGluZyBtYWNoaW5lcnkuXCJcclxuIFtvYmpdXHJcbiAobGV0XHJcbiAgW3NiIChTdHJpbmdCdWZmZXIuKSB3cml0ZXIgKFN0cmluZ0J1ZmZlcldyaXRlci4gc2IpXVxyXG4gICgtcHItd3JpdGVyIG9iaiB3cml0ZXIgKHByLW9wdHMpKVxyXG4gICgtZmx1c2ggd3JpdGVyKVxyXG4gIChzdHIgc2IpKSlcclxuIn0gezpzeW0gZWR1Y3Rpb24sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcmVkdWNpYmxlL2l0ZXJhYmxlIGFwcGxpY2F0aW9uIG9mIHRoZSB0cmFuc2R1Y2Vyc1xuICB0byB0aGUgaXRlbXMgaW4gY29sbC4gVHJhbnNkdWNlcnMgYXJlIGFwcGxpZWQgaW4gb3JkZXIgYXMgaWZcbiAgY29tYmluZWQgd2l0aCBjb21wLiBOb3RlIHRoYXQgdGhlc2UgYXBwbGljYXRpb25zIHdpbGwgYmVcbiAgcGVyZm9ybWVkIGV2ZXJ5IHRpbWUgcmVkdWNlL2l0ZXJhdG9yIGlzIGNhbGxlZC4iLCA6YXJnbGlzdHMgKFsmIHhmb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVkdWN0aW9uXHJcbiBcIlJldHVybnMgYSByZWR1Y2libGUvaXRlcmFibGUgYXBwbGljYXRpb24gb2YgdGhlIHRyYW5zZHVjZXJzXFxuICB0byB0aGUgaXRlbXMgaW4gY29sbC4gVHJhbnNkdWNlcnMgYXJlIGFwcGxpZWQgaW4gb3JkZXIgYXMgaWZcXG4gIGNvbWJpbmVkIHdpdGggY29tcC4gTm90ZSB0aGF0IHRoZXNlIGFwcGxpY2F0aW9ucyB3aWxsIGJlXFxuICBwZXJmb3JtZWQgZXZlcnkgdGltZSByZWR1Y2UvaXRlcmF0b3IgaXMgY2FsbGVkLlwiXHJcbiB7OmFyZ2xpc3RzICcoW3hmb3JtKiBjb2xsXSl9XHJcbiBbJiB4Zm9ybXNdXHJcbiAoRWR1Y3Rpb24uIChhcHBseSBjb21wIChidXRsYXN0IHhmb3JtcykpIChsYXN0IHhmb3JtcykpKVxyXG4ifSB7OnN5bSB0cmVlLXNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub2RlcyBpbiBhIHRyZWUsIHZpYSBhIGRlcHRoLWZpcnN0IHdhbGsuXG4gIGJyYW5jaD8gbXVzdCBiZSBhIGZuIG9mIG9uZSBhcmcgdGhhdCByZXR1cm5zIHRydWUgaWYgcGFzc2VkIGEgbm9kZVxuICB0aGF0IGNhbiBoYXZlIGNoaWxkcmVuIChidXQgbWF5IG5vdCkuICBjaGlsZHJlbiBtdXN0IGJlIGEgZm4gb2Ygb25lXG4gIGFyZyB0aGF0IHJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgY2hpbGRyZW4uIFdpbGwgb25seSBiZSBjYWxsZWQgb25cbiAgbm9kZXMgZm9yIHdoaWNoIGJyYW5jaD8gcmV0dXJucyB0cnVlLiBSb290IGlzIHRoZSByb290IG5vZGUgb2YgdGhlXG4gIHRyZWUuIiwgOmFyZ2xpc3RzIChbYnJhbmNoPyBjaGlsZHJlbiByb290XSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJlZS1zZXFcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vZGVzIGluIGEgdHJlZSwgdmlhIGEgZGVwdGgtZmlyc3Qgd2Fsay5cXG4gIGJyYW5jaD8gbXVzdCBiZSBhIGZuIG9mIG9uZSBhcmcgdGhhdCByZXR1cm5zIHRydWUgaWYgcGFzc2VkIGEgbm9kZVxcbiAgdGhhdCBjYW4gaGF2ZSBjaGlsZHJlbiAoYnV0IG1heSBub3QpLiAgY2hpbGRyZW4gbXVzdCBiZSBhIGZuIG9mIG9uZVxcbiAgYXJnIHRoYXQgcmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBjaGlsZHJlbi4gV2lsbCBvbmx5IGJlIGNhbGxlZCBvblxcbiAgbm9kZXMgZm9yIHdoaWNoIGJyYW5jaD8gcmV0dXJucyB0cnVlLiBSb290IGlzIHRoZSByb290IG5vZGUgb2YgdGhlXFxuICB0cmVlLlwiXHJcbiBbYnJhbmNoPyBjaGlsZHJlbiByb290XVxyXG4gKGxldFxyXG4gIFt3YWxrXHJcbiAgIChmblxyXG4gICAgd2Fsa1xyXG4gICAgW25vZGVdXHJcbiAgICAobGF6eS1zZXFcclxuICAgICAoY29ucyBub2RlICh3aGVuIChicmFuY2g/IG5vZGUpIChtYXBjYXQgd2FsayAoY2hpbGRyZW4gbm9kZSkpKSkpKV1cclxuICAod2FsayByb290KSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1yZW1haW5kZXItaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1yZW1haW5kZXItaW50XHJcbiBbeCBuXVxyXG4gKGNsanMuY29yZS91bmNoZWNrZWQtcmVtYWluZGVyLWludCB4IG4pKVxyXG4ifSB7OnN5bSB1dWlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuIHV1aWQgW3NdIChhc3NlcnQgKHN0cmluZz8gcykpIChVVUlELiAoLnRvTG93ZXJDYXNlIHMpIG5pbCkpXHJcbiJ9IHs6c3ltIHNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb24gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBjb2xsZWN0aW9uIGlzXG4gIGVtcHR5LCByZXR1cm5zIG5pbC4gIChzZXEgbmlsKSByZXR1cm5zIG5pbC4gc2VxIGFsc28gd29ya3Mgb25cbiAgU3RyaW5ncy4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VxXHJcbiBcIlJldHVybnMgYSBzZXEgb24gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBjb2xsZWN0aW9uIGlzXFxuICBlbXB0eSwgcmV0dXJucyBuaWwuICAoc2VxIG5pbCkgcmV0dXJucyBuaWwuIHNlcSBhbHNvIHdvcmtzIG9uXFxuICBTdHJpbmdzLlwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGNvbmRcclxuICAgKGltcGxlbWVudHM/IElTZXFhYmxlIGNvbGwpXHJcbiAgICgtc2VxIGNvbGwpXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKHdoZW4tbm90ICh6ZXJvPyAoYWxlbmd0aCBjb2xsKSkgKEluZGV4ZWRTZXEuIGNvbGwgMCBuaWwpKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAod2hlbi1ub3QgKHplcm8/ICguLWxlbmd0aCBjb2xsKSkgKEluZGV4ZWRTZXEuIGNvbGwgMCBuaWwpKVxyXG4gICAoanMtaXRlcmFibGU/IGNvbGwpXHJcbiAgIChlczYtaXRlcmF0b3Itc2VxICguY2FsbCAoZ29iamVjdC9nZXQgY29sbCBJVEVSX1NZTUJPTCkgY29sbCkpXHJcbiAgIChuYXRpdmUtc2F0aXNmaWVzPyBJU2VxYWJsZSBjb2xsKVxyXG4gICAoLXNlcSBjb2xsKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIGNvbGwgXCIgaXMgbm90IElTZXFhYmxlXCIpKSkpKSlcclxuIn0gezpzeW0gcmVkdWNlLCA6bWV0YSB7OmRvYyAiZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAyIGFyZ3VtZW50cy4gSWYgdmFsIGlzIG5vdCBzdXBwbGllZCxcbiAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdGhlIGZpcnN0IDIgaXRlbXMgaW4gY29sbCwgdGhlblxuICBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgM3JkIGl0ZW0sIGV0Yy4gSWYgY29sbCBjb250YWlucyBub1xuICBpdGVtcywgZiBtdXN0IGFjY2VwdCBubyBhcmd1bWVudHMgYXMgd2VsbCwgYW5kIHJlZHVjZSByZXR1cm5zIHRoZVxuICByZXN1bHQgb2YgY2FsbGluZyBmIHdpdGggbm8gYXJndW1lbnRzLiAgSWYgY29sbCBoYXMgb25seSAxIGl0ZW0sIGl0XG4gIGlzIHJldHVybmVkIGFuZCBmIGlzIG5vdCBjYWxsZWQuICBJZiB2YWwgaXMgc3VwcGxpZWQsIHJldHVybnMgdGhlXG4gIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHZhbCBhbmQgdGhlIGZpcnN0IGl0ZW0gaW4gY29sbCwgdGhlblxuICBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWYgY29sbCBjb250YWlucyBub1xuICBpdGVtcywgcmV0dXJucyB2YWwgYW5kIGYgaXMgbm90IGNhbGxlZC4iLCA6YXJnbGlzdHMgW1tmIGNvbGxdIFtmIHZhbCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlXHJcbiBcImYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgMiBhcmd1bWVudHMuIElmIHZhbCBpcyBub3Qgc3VwcGxpZWQsXFxuICByZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB0aGUgZmlyc3QgMiBpdGVtcyBpbiBjb2xsLCB0aGVuXFxuICBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgM3JkIGl0ZW0sIGV0Yy4gSWYgY29sbCBjb250YWlucyBub1xcbiAgaXRlbXMsIGYgbXVzdCBhY2NlcHQgbm8gYXJndW1lbnRzIGFzIHdlbGwsIGFuZCByZWR1Y2UgcmV0dXJucyB0aGVcXG4gIHJlc3VsdCBvZiBjYWxsaW5nIGYgd2l0aCBubyBhcmd1bWVudHMuICBJZiBjb2xsIGhhcyBvbmx5IDEgaXRlbSwgaXRcXG4gIGlzIHJldHVybmVkIGFuZCBmIGlzIG5vdCBjYWxsZWQuICBJZiB2YWwgaXMgc3VwcGxpZWQsIHJldHVybnMgdGhlXFxuICByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB2YWwgYW5kIHRoZSBmaXJzdCBpdGVtIGluIGNvbGwsIHRoZW5cXG4gIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vXFxuICBpdGVtcywgcmV0dXJucyB2YWwgYW5kIGYgaXMgbm90IGNhbGxlZC5cIlxyXG4gKFtmIGNvbGxdXHJcbiAgKGNvbmRcclxuICAgKGltcGxlbWVudHM/IElSZWR1Y2UgY29sbClcclxuICAgKC1yZWR1Y2UgY29sbCBmKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgIChhcnJheS1yZWR1Y2UgY29sbCBmKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAoYXJyYXktcmVkdWNlIGNvbGwgZilcclxuICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElSZWR1Y2UgY29sbClcclxuICAgKC1yZWR1Y2UgY29sbCBmKVxyXG4gICAoaXRlcmFibGU/IGNvbGwpXHJcbiAgIChpdGVyLXJlZHVjZSBjb2xsIGYpXHJcbiAgIDplbHNlXHJcbiAgIChzZXEtcmVkdWNlIGYgY29sbCkpKVxyXG4gKFtmIHZhbCBjb2xsXVxyXG4gIChjb25kXHJcbiAgIChpbXBsZW1lbnRzPyBJUmVkdWNlIGNvbGwpXHJcbiAgICgtcmVkdWNlIGNvbGwgZiB2YWwpXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKGFycmF5LXJlZHVjZSBjb2xsIGYgdmFsKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAoYXJyYXktcmVkdWNlIGNvbGwgZiB2YWwpXHJcbiAgIChuYXRpdmUtc2F0aXNmaWVzPyBJUmVkdWNlIGNvbGwpXHJcbiAgICgtcmVkdWNlIGNvbGwgZiB2YWwpXHJcbiAgIChpdGVyYWJsZT8gY29sbClcclxuICAgKGl0ZXItcmVkdWNlIGNvbGwgZiB2YWwpXHJcbiAgIDplbHNlXHJcbiAgIChzZXEtcmVkdWNlIGYgdmFsIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIElVVUlELCA6bWV0YSB7OmRvYyAiQSBtYXJrZXIgcHJvdG9jb2wgZm9yIFVVSURzIn0sIDptZXRob2RzICgpfSB7OnN5bSBJTklULCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBJTklUICNqcyB7fSlcclxuIn0gezpzeW0gZmluZC1ucywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sIG9yIG5pbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICBCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtbnNcclxuIFwiUmV0dXJucyB0aGUgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wgb3IgbmlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXFxuICBCb290c3RyYXAgb25seS5cIlxyXG4gW25zXVxyXG4gKHdoZW4gKG5pbD8gTlNfQ0FDSEUpIChzZXQhIE5TX0NBQ0hFIChhdG9tIHt9KSkpXHJcbiAobGV0XHJcbiAgW3RoZS1ucyAoZ2V0IEBOU19DQUNIRSBucyldXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyB0aGUtbnMpXHJcbiAgIHRoZS1uc1xyXG4gICAobGV0XHJcbiAgICBbbnMtb2JqIChmaW5kLW5zLW9iaiBucyldXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAobmlsPyBucy1vYmopXHJcbiAgICAgKGxldFxyXG4gICAgICBbbmV3LW5zIChjcmVhdGUtbnMgbnMgbnMtb2JqKV1cclxuICAgICAgKHN3YXAhIE5TX0NBQ0hFIGFzc29jIG5zIG5ldy1ucylcclxuICAgICAgbmV3LW5zKSkpKSkpXHJcbiJ9IHs6c3ltIGNvbnRhaW5zPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBrZXkgaXMgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gY29sbGVjdGlvbiwgb3RoZXJ3aXNlXG4gIHJldHVybnMgZmFsc2UuICBOb3RlIHRoYXQgZm9yIG51bWVyaWNhbGx5IGluZGV4ZWQgY29sbGVjdGlvbnMgbGlrZVxuICB2ZWN0b3JzIGFuZCBhcnJheXMsIHRoaXMgdGVzdHMgaWYgdGhlIG51bWVyaWMga2V5IGlzIHdpdGhpbiB0aGVcbiAgcmFuZ2Ugb2YgaW5kZXhlcy4gJ2NvbnRhaW5zPycgb3BlcmF0ZXMgY29uc3RhbnQgb3IgbG9nYXJpdGhtaWMgdGltZTtcbiAgaXQgd2lsbCBub3QgcGVyZm9ybSBhIGxpbmVhciBzZWFyY2ggZm9yIGEgdmFsdWUuICBTZWUgYWxzbyAnc29tZScuIiwgOmFyZ2xpc3RzIChbY29sbCB2XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29udGFpbnM/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBrZXkgaXMgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gY29sbGVjdGlvbiwgb3RoZXJ3aXNlXFxuICByZXR1cm5zIGZhbHNlLiAgTm90ZSB0aGF0IGZvciBudW1lcmljYWxseSBpbmRleGVkIGNvbGxlY3Rpb25zIGxpa2VcXG4gIHZlY3RvcnMgYW5kIGFycmF5cywgdGhpcyB0ZXN0cyBpZiB0aGUgbnVtZXJpYyBrZXkgaXMgd2l0aGluIHRoZVxcbiAgcmFuZ2Ugb2YgaW5kZXhlcy4gJ2NvbnRhaW5zPycgb3BlcmF0ZXMgY29uc3RhbnQgb3IgbG9nYXJpdGhtaWMgdGltZTtcXG4gIGl0IHdpbGwgbm90IHBlcmZvcm0gYSBsaW5lYXIgc2VhcmNoIGZvciBhIHZhbHVlLiAgU2VlIGFsc28gJ3NvbWUnLlwiXHJcbiBbY29sbCB2XVxyXG4gKGlmXHJcbiAgKGlkZW50aWNhbD8gKGdldCBjb2xsIHYgbG9va3VwLXNlbnRpbmVsKSBsb29rdXAtc2VudGluZWwpXHJcbiAgZmFsc2VcclxuICB0cnVlKSlcclxuIn0gezpzeW0gZXZlcnk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgZXZlcnkgeCBpbiBjb2xsLCBlbHNlXG4gIGZhbHNlLiIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2ZXJ5P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBldmVyeSB4IGluIGNvbGwsIGVsc2VcXG4gIGZhbHNlLlwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gKGNvbmRcclxuICAobmlsPyAoc2VxIGNvbGwpKVxyXG4gIHRydWVcclxuICAocHJlZCAoZmlyc3QgY29sbCkpXHJcbiAgKHJlY3VyIHByZWQgKG5leHQgY29sbCkpXHJcbiAgOmVsc2VcclxuICBmYWxzZSkpXHJcbiJ9IHs6c3ltIGtlZXAtaW5kZXhlZCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub24tbmlsIHJlc3VsdHMgb2YgKGYgaW5kZXggaXRlbSkuIE5vdGUsXG4gIHRoaXMgbWVhbnMgZmFsc2UgcmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluY2x1ZGVkLiAgZiBtdXN0IGJlIGZyZWUgb2ZcbiAgc2lkZS1lZmZlY3RzLiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzXG4gIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZWVwLWluZGV4ZWRcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vbi1uaWwgcmVzdWx0cyBvZiAoZiBpbmRleCBpdGVtKS4gTm90ZSxcXG4gIHRoaXMgbWVhbnMgZmFsc2UgcmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluY2x1ZGVkLiAgZiBtdXN0IGJlIGZyZWUgb2ZcXG4gIHNpZGUtZWZmZWN0cy4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpc1xcbiAgcHJvdmlkZWQuXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbaWEgKHZvbGF0aWxlISAtMSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtpICh2c3dhcCEgaWEgaW5jKSB2IChmIGkgaW5wdXQpXVxyXG4gICAgICAgKGlmIChuaWw/IHYpIHJlc3VsdCAocmYgcmVzdWx0IHYpKSkpKSkpKVxyXG4gKFtmIGNvbGxdXHJcbiAgKGxldGZuXHJcbiAgIFsoa2VlcGlcclxuICAgICBbaWR4IGNvbGxdXHJcbiAgICAgKGxhenktc2VxXHJcbiAgICAgICh3aGVuLWxldFxyXG4gICAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtjIChjaHVuay1maXJzdCBzKSBzaXplIChjb3VudCBjKSBiIChjaHVuay1idWZmZXIgc2l6ZSldXHJcbiAgICAgICAgIChkb3RpbWVzXHJcbiAgICAgICAgICBbaSBzaXplXVxyXG4gICAgICAgICAgKGxldFxyXG4gICAgICAgICAgIFt4IChmICgrIGlkeCBpKSAoLW50aCBjIGkpKV1cclxuICAgICAgICAgICAod2hlbi1ub3QgKG5pbD8geCkgKGNodW5rLWFwcGVuZCBiIHgpKSkpXHJcbiAgICAgICAgIChjaHVuay1jb25zIChjaHVuayBiKSAoa2VlcGkgKCsgaWR4IHNpemUpIChjaHVuay1yZXN0IHMpKSkpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbeCAoZiBpZHggKGZpcnN0IHMpKV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAobmlsPyB4KVxyXG4gICAgICAgICAgKGtlZXBpIChpbmMgaWR4KSAocmVzdCBzKSlcclxuICAgICAgICAgIChjb25zIHggKGtlZXBpIChpbmMgaWR4KSAocmVzdCBzKSkpKSkpKSkpXVxyXG4gICAoa2VlcGkgMCBjb2xsKSkpKVxyXG4ifSB7OnN5bSBzdWJzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgc3Vic3RyaW5nIG9mIHMgYmVnaW5uaW5nIGF0IHN0YXJ0IGluY2x1c2l2ZSwgYW5kIGVuZGluZ1xuICBhdCBlbmQgKGRlZmF1bHRzIHRvIGxlbmd0aCBvZiBzdHJpbmcpLCBleGNsdXNpdmUuIiwgOmFyZ2xpc3RzIFtbcyBzdGFydF0gW3Mgc3RhcnQgZW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gc3Vic1xyXG4gXCJSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgcyBiZWdpbm5pbmcgYXQgc3RhcnQgaW5jbHVzaXZlLCBhbmQgZW5kaW5nXFxuICBhdCBlbmQgKGRlZmF1bHRzIHRvIGxlbmd0aCBvZiBzdHJpbmcpLCBleGNsdXNpdmUuXCJcclxuIChbcyBzdGFydF0gKC5zdWJzdHJpbmcgcyBzdGFydCkpXHJcbiAoW3Mgc3RhcnQgZW5kXSAoLnN1YnN0cmluZyBzIHN0YXJ0IGVuZCkpKVxyXG4ifSB7OnN5bSBqcy1zeW1ib2w/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLXN5bWJvbD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXCJcclxuIFt4XVxyXG4gKG9yXHJcbiAgKGlkZW50aWNhbD8gKGdvb2cvdHlwZU9mIHgpIFwic3ltYm9sXCIpXHJcbiAgKGFuZCAoZXhpc3RzPyBqcy9TeW1ib2wpIChpbnN0YW5jZT8ganMvU3ltYm9sIHgpKSkpXHJcbiJ9IHs6c3ltIElGaW5kLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGltcGxlbWVudGluZyBlbnRyeSBmaW5kaW5nIGluIGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWZpbmQpfSB7OnN5bSBzZXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2V0IG9mIHRoZSBkaXN0aW5jdCBlbGVtZW50cyBvZiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXRcclxuIFwiUmV0dXJucyBhIHNldCBvZiB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgY29sbC5cIlxyXG4gW2NvbGxdXHJcbiAoaWZcclxuICAoc2V0PyBjb2xsKVxyXG4gICh3aXRoLW1ldGEgY29sbCBuaWwpXHJcbiAgKGxldFxyXG4gICBbaW4gKHNlcSBjb2xsKV1cclxuICAgKGNvbmRcclxuICAgIChuaWw/IGluKVxyXG4gICAgI3t9XHJcbiAgICAoYW5kIChpbnN0YW5jZT8gSW5kZXhlZFNlcSBpbikgKHplcm8/ICguLWkgaW4pKSlcclxuICAgICguY3JlYXRlQXNJZkJ5QXNzb2MgUGVyc2lzdGVudEhhc2hTZXQgKC4tYXJyIGluKSlcclxuICAgIDplbHNlXHJcbiAgICAobG9vcFxyXG4gICAgIFtpbiBpbiBvdXQgKC1hcy10cmFuc2llbnQgI3t9KV1cclxuICAgICAoaWYtbm90XHJcbiAgICAgIChuaWw/IGluKVxyXG4gICAgICAocmVjdXIgKG5leHQgaW4pICgtY29uaiEgb3V0ICgtZmlyc3QgaW4pKSlcclxuICAgICAgKHBlcnNpc3RlbnQhIG91dCkpKSkpKSlcclxuIn0gezpzeW0gTU9EVUxFX1VSSVMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1PRFVMRV9VUklTIG5pbClcclxuIn0gezpzeW0gdGFrZS1sYXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvZiB0aGUgbGFzdCBuIGl0ZW1zIGluIGNvbGwuICBEZXBlbmRpbmcgb24gdGhlIHR5cGVcbiAgb2YgY29sbCBtYXkgYmUgbm8gYmV0dGVyIHRoYW4gbGluZWFyIHRpbWUuICBGb3IgdmVjdG9ycywgc2VlIGFsc28gc3VidmVjLiIsIDphcmdsaXN0cyAoW24gY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2UtbGFzdFxyXG4gXCJSZXR1cm5zIGEgc2VxIG9mIHRoZSBsYXN0IG4gaXRlbXMgaW4gY29sbC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZVxcbiAgb2YgY29sbCBtYXkgYmUgbm8gYmV0dGVyIHRoYW4gbGluZWFyIHRpbWUuICBGb3IgdmVjdG9ycywgc2VlIGFsc28gc3VidmVjLlwiXHJcbiBbbiBjb2xsXVxyXG4gKGxvb3BcclxuICBbcyAoc2VxIGNvbGwpIGxlYWQgKHNlcSAoZHJvcCBuIGNvbGwpKV1cclxuICAoaWYgbGVhZCAocmVjdXIgKG5leHQgcykgKG5leHQgbGVhZCkpIHMpKSlcclxuIn0gezpzeW0gYml0LXNldCwgOm1ldGEgezpkb2MgIlNldCBiaXQgYXQgaW5kZXggbiIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm4gYml0LXNldCBcIlNldCBiaXQgYXQgaW5kZXggblwiIFt4IG5dIChjbGpzLmNvcmUvYml0LXNldCB4IG4pKVxyXG4ifSB7OnN5bSBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgc3RyaW5nLWhhc2gtY2FjaGUtY291bnQgMClcclxuIn0gezpzeW0gcXVhbGlmaWVkLWtleXdvcmQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIGtleXdvcmQgd2l0aCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdWFsaWZpZWQta2V5d29yZD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIGtleXdvcmQgd2l0aCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChib29sZWFuIChhbmQgKGtleXdvcmQ/IHgpIChuYW1lc3BhY2UgeCkgdHJ1ZSkpKVxyXG4ifSB7OnN5bSAtd2l0aC1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCB2YWx1ZSBvZiBvIGFuZCBtZXRhZGF0YSBtZXRhIGFkZGVkIHRvIGl0LiIsIDphcmdsaXN0cyAoW28gbWV0YV0pfSwgOnByb3RvY29sIElXaXRoTWV0YX0gezpzeW0gYnV0bGFzdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIHNlcSBvZiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW0gaW4gY29sbCwgaW4gbGluZWFyIHRpbWUiLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYnV0bGFzdFxyXG4gXCJSZXR1cm4gYSBzZXEgb2YgYWxsIGJ1dCB0aGUgbGFzdCBpdGVtIGluIGNvbGwsIGluIGxpbmVhciB0aW1lXCJcclxuIFtzXVxyXG4gKGxvb3BcclxuICBbcmV0IFtdIHMgc11cclxuICAoaWYgKG5leHQgcykgKHJlY3VyIChjb25qIHJldCAoZmlyc3QgcykpIChuZXh0IHMpKSAoc2VxIHJldCkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLXN1YnRyYWN0LWludCwgOm1ldGEgezpkb2MgIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLXN1YnRyYWN0LWludFxyXG4gXCJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXFxuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXCJcclxuIChbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QtaW50IHgpKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0LWludCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2VcclxuICAgdW5jaGVja2VkLXN1YnRyYWN0LWludFxyXG4gICAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgeCB5KVxyXG4gICBtb3JlKSkpXHJcbiJ9IHs6c3ltIC1pdGVyYXRvciwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gaXRlcmF0b3IgZm9yIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElJdGVyYWJsZX0gezpzeW0gKnByaW50LW5hbWVzcGFjZS1tYXBzKiwgOm1ldGEgezpkb2MgIipwcmludC1uYW1lc3BhY2UtbWFwcyogY29udHJvbHMgd2hldGhlciB0aGUgcHJpbnRlciB3aWxsIHByaW50XG4gIG5hbWVzcGFjZSBtYXAgbGl0ZXJhbCBzeW50YXguXG5cbiAgRGVmYXVsdHMgdG8gZmFsc2UsIGJ1dCB0aGUgUkVQTCBiaW5kcyBpdCB0byB0cnVlLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1uYW1lc3BhY2UtbWFwcyogZmFsc2UpXHJcbiJ9IHs6c3ltIHRha2UtbnRoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIG9mIGV2ZXJ5IG50aCBpdGVtIGluIGNvbGwuICBSZXR1cm5zIGEgc3RhdGVmdWxcbiAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbbl0gW24gY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2UtbnRoXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSBvZiBldmVyeSBudGggaXRlbSBpbiBjb2xsLiAgUmV0dXJucyBhIHN0YXRlZnVsXFxuICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtuXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2lhICh2b2xhdGlsZSEgLTEpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbaSAodnN3YXAhIGlhIGluYyldXHJcbiAgICAgICAoaWYgKHplcm8/IChyZW0gaSBuKSkgKHJmIHJlc3VsdCBpbnB1dCkgcmVzdWx0KSkpKSkpKVxyXG4gKFtuIGNvbGxdXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGNvbnMgKGZpcnN0IHMpICh0YWtlLW50aCBuIChkcm9wIG4gcykpKSkpKSlcclxuIn0gezpzeW0gZmlyc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLiBDYWxscyBzZXEgb24gaXRzXG4gIGFyZ3VtZW50LiBJZiBjb2xsIGlzIG5pbCwgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpcnN0XHJcbiBcIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uIENhbGxzIHNlcSBvbiBpdHNcXG4gIGFyZ3VtZW50LiBJZiBjb2xsIGlzIG5pbCwgcmV0dXJucyBuaWwuXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoaWZcclxuICAgKGltcGxlbWVudHM/IElTZXEgY29sbClcclxuICAgKC1maXJzdCBjb2xsKVxyXG4gICAobGV0IFtzIChzZXEgY29sbCldICh3aGVuLW5vdCAobmlsPyBzKSAoLWZpcnN0IHMpKSkpKSlcclxuIn0gezpzeW0gbmF0aXZlLXNhdGlzZmllcz8sIDptZXRhIHs6ZG9jICJJbnRlcm5hbCAtIGRvIG5vdCB1c2UhIiwgOmFyZ2xpc3RzIChbcCB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmF0aXZlLXNhdGlzZmllcz9cclxuIFwiSW50ZXJuYWwgLSBkbyBub3QgdXNlIVwiXHJcbiBbcCB4XVxyXG4gKGxldFxyXG4gIFt4IChpZiAobmlsPyB4KSBuaWwgeCldXHJcbiAgKGNvbmRcclxuICAgKHVuY2hlY2tlZC1nZXQgcCAoZ29vZy90eXBlT2YgeCkpXHJcbiAgIHRydWVcclxuICAgKHVuY2hlY2tlZC1nZXQgcCBcIl9cIilcclxuICAgdHJ1ZVxyXG4gICA6ZWxzZVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBzZXE/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgcyBzYXRpc2ZpZXMgSVNlcSIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXE/XHJcbiBcIlJldHVybiB0cnVlIGlmIHMgc2F0aXNmaWVzIElTZXFcIlxyXG4gW3NdXHJcbiAoaWYgKG5pbD8gcykgZmFsc2UgKHNhdGlzZmllcz8gSVNlcSBzKSkpXHJcbiJ9IHs6c3ltIC1zb3J0ZWQtc2VxLWZyb20sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc29ydGVkIHNlcSBmcm9tIGNvbGwgaW4gZWl0aGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICBJZiBhc2NlbmRpbmcgaXMgdHJ1ZSwgdGhlIHJlc3VsdCBzaG91bGQgY29udGFpbiBhbGwgaXRlbXMgd2hpY2ggYXJlID4gb3IgPj1cbiAgICAgdGhhbiBrLiBJZiBhc2NlbmRpbmcgaXMgZmFsc2UsIHRoZSByZXN1bHQgc2hvdWxkIGNvbnRhaW4gYWxsIGl0ZW1zIHdoaWNoXG4gICAgIGFyZSA8IG9yIDw9IHRoYW4gaywgZS5nLlxuICAgICAoLXNvcnRlZC1zZXEtZnJvbSAoc29ydGVkLXNldCAxIDIgMyA0IDUpIDMgdHJ1ZSkgPT4gKDMgNCA1KVxuICAgICAoLXNvcnRlZC1zZXEtZnJvbSAoc29ydGVkLXNldCAxIDIgMyA0IDUpIDMgZmFsc2UpID0+ICgzIDIgMSkiLCA6YXJnbGlzdHMgKFtjb2xsIGsgYXNjZW5kaW5nP10pfSwgOnByb3RvY29sIElTb3J0ZWR9IHs6c3ltIHByaW50bG4tc3RyLCA6bWV0YSB7OmRvYyAicHJpbnRsbiB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0IiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnRsbi1zdHJcclxuIFwicHJpbnRsbiB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0XCJcclxuIFsmIG9ianNdXHJcbiAocHJuLXN0ci13aXRoLW9wdHMgb2JqcyAoYXNzb2MgKHByLW9wdHMpIDpyZWFkYWJseSBmYWxzZSkpKVxyXG4ifSB7OnN5bSBpbnN0LW1zLCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCwgMDA6MDA6MDAgR01UIiwgOmFyZ2xpc3RzIChbaW5zdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc3QtbXNcclxuIFwiUmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCwgMDA6MDA6MDAgR01UXCJcclxuIFtpbnN0XVxyXG4gKGluc3QtbXMqIGluc3QpKVxyXG4ifSB7OnN5bSBpdGVyYXRlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgeCwgKGYgeCksIChmIChmIHgpKSBldGMuIGYgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cyIsIDphcmdsaXN0cyAoW2YgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGl0ZXJhdGVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgeCwgKGYgeCksIChmIChmIHgpKSBldGMuIGYgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0c1wiXHJcbiB7OmFkZGVkIFwiMS4wXCJ9XHJcbiBbZiB4XVxyXG4gKEl0ZXJhdGUuIG5pbCBmIG5pbCB4IG5pbCkpXHJcbiJ9IHs6c3ltIC1lbXB0eSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gZW1wdHkgY29sbGVjdGlvbiBvZiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBjb2xsLiBVc2VkXG4gICAgIGJ5IGNsanMuY29yZS9lbXB0eS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUVtcHR5YWJsZUNvbGxlY3Rpb259IHs6c3ltIG5ld2xpbmUsIDptZXRhIHs6ZG9jICJQcmludHMgYSBuZXdsaW5lIHVzaW5nICpwcmludC1mbioiLCA6YXJnbGlzdHMgW1tdIFtvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gbmV3bGluZVxyXG4gXCJQcmludHMgYSBuZXdsaW5lIHVzaW5nICpwcmludC1mbipcIlxyXG4gKFtdIChuZXdsaW5lIG5pbCkpXHJcbiAoW29wdHNdXHJcbiAgKHN0cmluZy1wcmludCBcIlxcblwiKVxyXG4gICh3aGVuIChnZXQgb3B0cyA6Zmx1c2gtb24tbmV3bGluZSkgKGZsdXNoKSkpKVxyXG4ifSB7OnN5bSBJTG9va3VwLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGxvb2tpbmcgdXAgYSB2YWx1ZSBpbiBhIGRhdGEgc3RydWN0dXJlLiJ9LCA6bWV0aG9kcyAoLWxvb2t1cCl9IHs6c3ltIC1jaHVua2VkLXJlc3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGggdGhlIGZpcnN0IGNodW5rIHJlbW92ZWQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElDaHVua2VkU2VxfSB7OnN5bSB3cml0ZS1hbGwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbd3JpdGVyICYgc3NdKX0sIDpzb3VyY2UgIihkZWZuIHdyaXRlLWFsbCBbd3JpdGVyICYgc3NdIChkb3NlcSBbcyBzc10gKC13cml0ZSB3cml0ZXIgcykpKVxyXG4ifSB7OnN5bSBmbj8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiBmIGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiBvciBzYXRpc2ZpZXMgdGhlIEZuIHByb3RvY29sLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbj9cclxuIFwiUmV0dXJuIHRydWUgaWYgZiBpcyBhIEphdmFTY3JpcHQgZnVuY3Rpb24gb3Igc2F0aXNmaWVzIHRoZSBGbiBwcm90b2NvbC5cIlxyXG4gW2ZdXHJcbiAob3IgKGdvb2cvaXNGdW5jdGlvbiBmKSAoc2F0aXNmaWVzPyBGbiBmKSkpXHJcbiJ9IHs6c3ltIC1wcmVmZXItbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mIGRpc3BhdGNoLXZhbCBkaXNwYXRjaC12YWwteV0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSAtYXNzb2MsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRoIGEgbWFwcGluZyBmcm9tIGtleSBrIHRvXG4gICAgIHZhbHVlIHYgYWRkZWQgdG8gaXQuIiwgOmFyZ2xpc3RzIChbY29sbCBrIHZdKX0sIDpwcm90b2NvbCBJQXNzb2NpYXRpdmV9IHs6c3ltIGRvYWxsLCA6bWV0YSB7OmRvYyAiV2hlbiBsYXp5IHNlcXVlbmNlcyBhcmUgcHJvZHVjZWQgdmlhIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2lkZVxuICBlZmZlY3RzLCBhbnkgZWZmZWN0cyBvdGhlciB0aGFuIHRob3NlIG5lZWRlZCB0byBwcm9kdWNlIHRoZSBmaXJzdFxuICBlbGVtZW50IGluIHRoZSBzZXEgZG8gbm90IG9jY3VyIHVudGlsIHRoZSBzZXEgaXMgY29uc3VtZWQuIGRvYWxsIGNhblxuICBiZSB1c2VkIHRvIGZvcmNlIGFueSBlZmZlY3RzLiBXYWxrcyB0aHJvdWdoIHRoZSBzdWNjZXNzaXZlIG5leHRzIG9mXG4gIHRoZSBzZXEsIHJldGFpbnMgdGhlIGhlYWQgYW5kIHJldHVybnMgaXQsIHRodXMgY2F1c2luZyB0aGUgZW50aXJlXG4gIHNlcSB0byByZXNpZGUgaW4gbWVtb3J5IGF0IG9uZSB0aW1lLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtuIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb2FsbFxyXG4gXCJXaGVuIGxhenkgc2VxdWVuY2VzIGFyZSBwcm9kdWNlZCB2aWEgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzaWRlXFxuICBlZmZlY3RzLCBhbnkgZWZmZWN0cyBvdGhlciB0aGFuIHRob3NlIG5lZWRlZCB0byBwcm9kdWNlIHRoZSBmaXJzdFxcbiAgZWxlbWVudCBpbiB0aGUgc2VxIGRvIG5vdCBvY2N1ciB1bnRpbCB0aGUgc2VxIGlzIGNvbnN1bWVkLiBkb2FsbCBjYW5cXG4gIGJlIHVzZWQgdG8gZm9yY2UgYW55IGVmZmVjdHMuIFdhbGtzIHRocm91Z2ggdGhlIHN1Y2Nlc3NpdmUgbmV4dHMgb2ZcXG4gIHRoZSBzZXEsIHJldGFpbnMgdGhlIGhlYWQgYW5kIHJldHVybnMgaXQsIHRodXMgY2F1c2luZyB0aGUgZW50aXJlXFxuICBzZXEgdG8gcmVzaWRlIGluIG1lbW9yeSBhdCBvbmUgdGltZS5cIlxyXG4gKFtjb2xsXSAoZG9ydW4gY29sbCkgY29sbClcclxuIChbbiBjb2xsXSAoZG9ydW4gbiBjb2xsKSBjb2xsKSlcclxuIn0gezpzeW0ga2V5d29yZC1pZGVudGljYWw/LCA6bWV0YSB7OmRvYyAiRWZmaWNpZW50IHRlc3QgdG8gZGV0ZXJtaW5lIHRoYXQgdHdvIGtleXdvcmRzIGFyZSBpZGVudGljYWwuIiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5d29yZC1pZGVudGljYWw/XHJcbiBcIkVmZmljaWVudCB0ZXN0IHRvIGRldGVybWluZSB0aGF0IHR3byBrZXl3b3JkcyBhcmUgaWRlbnRpY2FsLlwiXHJcbiBbeCB5XVxyXG4gKGlmXHJcbiAgKGlkZW50aWNhbD8geCB5KVxyXG4gIHRydWVcclxuICAoaWZcclxuICAgKGFuZCAoa2V5d29yZD8geCkgKGtleXdvcmQ/IHkpKVxyXG4gICAoaWRlbnRpY2FsPyAoLi1mcW4geCkgKC4tZnFuIHkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSAqcHJpbnQtZXJyLWZuKiwgOm1ldGEgezpkb2MgIkVhY2ggcnVudGltZSBlbnZpcm9ubWVudCBwcm92aWRlcyBhIGRpZmZlcmVudCB3YXkgdG8gcHJpbnQgZXJyb3Igb3V0cHV0LlxuICBXaGF0ZXZlciBmdW5jdGlvbiAqcHJpbnQtZXJyLWZuKiBpcyBib3VuZCB0byB3aWxsIGJlIHBhc3NlZCBhbnlcbiAgU3RyaW5ncyB3aGljaCBzaG91bGQgYmUgcHJpbnRlZC4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKnByaW50LWVyci1mbiogbmlsKVxyXG4ifSB7OnN5bSBwcmVmZXJzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJucyBhIG1hcCBvZiBwcmVmZXJyZWQgdmFsdWUgLT4gc2V0IG9mIG90aGVyIHZhbHVlcyIsIDphcmdsaXN0cyAoW211bHRpZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmVmZXJzXHJcbiBcIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybnMgYSBtYXAgb2YgcHJlZmVycmVkIHZhbHVlIC0+IHNldCBvZiBvdGhlciB2YWx1ZXNcIlxyXG4gW211bHRpZm5dXHJcbiAoLXByZWZlcnMgbXVsdGlmbikpXHJcbiJ9IHs6c3ltIC1qcy0+Y2xqLCA6bWV0YSB7OmRvYyAiVHJhbnNmb3JtcyBKYXZhU2NyaXB0IHZhbHVlcyB0byBDbG9qdXJlIiwgOmFyZ2xpc3RzIChbeCBvcHRpb25zXSl9LCA6cHJvdG9jb2wgSUVuY29kZUNsb2p1cmV9IHs6c3ltIGRlZHVwZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIHJlbW92aW5nIGNvbnNlY3V0aXZlIGR1cGxpY2F0ZXMgaW4gY29sbC5cbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW10gW2NvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWR1cGVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgcmVtb3ZpbmcgY29uc2VjdXRpdmUgZHVwbGljYXRlcyBpbiBjb2xsLlxcbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW11cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbcGEgKHZvbGF0aWxlISA6Y2xqcy5jb3JlL25vbmUpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcHJpb3IgQHBhXVxyXG4gICAgICAgKHZyZXNldCEgcGEgaW5wdXQpXHJcbiAgICAgICAoaWYgKD0gcHJpb3IgaW5wdXQpIHJlc3VsdCAocmYgcmVzdWx0IGlucHV0KSkpKSkpKSlcclxuIChbY29sbF0gKHNlcXVlbmNlIChkZWR1cGUpIGNvbGwpKSlcclxuIn0gezpzeW0gZGlzc29jLCA6bWV0YSB7OmRvYyAiZGlzc29jW2lhdGVdLiBSZXR1cm5zIGEgbmV3IG1hcCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSxcbiAgdGhhdCBkb2VzIG5vdCBjb250YWluIGEgbWFwcGluZyBmb3Iga2V5KHMpLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtjb2xsIGtdIFtjb2xsIGsgJiBrc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3NvY1xyXG4gXCJkaXNzb2NbaWF0ZV0uIFJldHVybnMgYSBuZXcgbWFwIG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLFxcbiAgdGhhdCBkb2VzIG5vdCBjb250YWluIGEgbWFwcGluZyBmb3Iga2V5KHMpLlwiXHJcbiAoW2NvbGxdIGNvbGwpXHJcbiAoW2NvbGwga10gKHdoZW4tbm90IChuaWw/IGNvbGwpICgtZGlzc29jIGNvbGwgaykpKVxyXG4gKFtjb2xsIGsgJiBrc11cclxuICAod2hlbi1ub3RcclxuICAgKG5pbD8gY29sbClcclxuICAgKGxldFxyXG4gICAgW3JldCAoZGlzc29jIGNvbGwgayldXHJcbiAgICAoaWYga3MgKHJlY3VyIHJldCAoZmlyc3Qga3MpIChuZXh0IGtzKSkgcmV0KSkpKSlcclxuIn0gezpzeW0gYXRvbSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYW4gQXRvbSB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgeCBhbmQgemVybyBvclxuICBtb3JlIG9wdGlvbnMgKGluIGFueSBvcmRlcik6XG5cbiAgOm1ldGEgbWV0YWRhdGEtbWFwXG5cbiAgOnZhbGlkYXRvciB2YWxpZGF0ZS1mblxuXG4gIElmIG1ldGFkYXRhLW1hcCBpcyBzdXBwbGllZCwgaXQgd2lsbCBiZWNvbWUgdGhlIG1ldGFkYXRhIG9uIHRoZVxuICBhdG9tLiB2YWxpZGF0ZS1mbiBtdXN0IGJlIG5pbCBvciBhIHNpZGUtZWZmZWN0LWZyZWUgZm4gb2Ygb25lXG4gIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aGUgaW50ZW5kZWQgbmV3IHN0YXRlIG9uIGFueSBzdGF0ZVxuICBjaGFuZ2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdW5hY2NlcHRhYmxlLCB0aGUgdmFsaWRhdGUtZm4gc2hvdWxkXG4gIHJldHVybiBmYWxzZSBvciB0aHJvdyBhbiBFcnJvci4gIElmIGVpdGhlciBvZiB0aGVzZSBlcnJvciBjb25kaXRpb25zXG4gIG9jY3VyLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbSB3aWxsIG5vdCBjaGFuZ2UuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggJiB7OmtleXMgW21ldGEgdmFsaWRhdG9yXX1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhdG9tXHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYW4gQXRvbSB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgeCBhbmQgemVybyBvclxcbiAgbW9yZSBvcHRpb25zIChpbiBhbnkgb3JkZXIpOlxcblxcbiAgOm1ldGEgbWV0YWRhdGEtbWFwXFxuXFxuICA6dmFsaWRhdG9yIHZhbGlkYXRlLWZuXFxuXFxuICBJZiBtZXRhZGF0YS1tYXAgaXMgc3VwcGxpZWQsIGl0IHdpbGwgYmVjb21lIHRoZSBtZXRhZGF0YSBvbiB0aGVcXG4gIGF0b20uIHZhbGlkYXRlLWZuIG11c3QgYmUgbmlsIG9yIGEgc2lkZS1lZmZlY3QtZnJlZSBmbiBvZiBvbmVcXG4gIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aGUgaW50ZW5kZWQgbmV3IHN0YXRlIG9uIGFueSBzdGF0ZVxcbiAgY2hhbmdlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHVuYWNjZXB0YWJsZSwgdGhlIHZhbGlkYXRlLWZuIHNob3VsZFxcbiAgcmV0dXJuIGZhbHNlIG9yIHRocm93IGFuIEVycm9yLiAgSWYgZWl0aGVyIG9mIHRoZXNlIGVycm9yIGNvbmRpdGlvbnNcXG4gIG9jY3VyLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbSB3aWxsIG5vdCBjaGFuZ2UuXCJcclxuIChbeF0gKEF0b20uIHggbmlsIG5pbCBuaWwpKVxyXG4gKFt4ICYgezprZXlzIFttZXRhIHZhbGlkYXRvcl19XSAoQXRvbS4geCBtZXRhIHZhbGlkYXRvciBuaWwpKSlcclxuIn0gezpzeW0gYml0LXNoaWZ0LXJpZ2h0LCA6bWV0YSB7OmRvYyAiQml0d2lzZSBzaGlmdCByaWdodCIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1zaGlmdC1yaWdodFxyXG4gXCJCaXR3aXNlIHNoaWZ0IHJpZ2h0XCJcclxuIFt4IG5dXHJcbiAoY2xqcy5jb3JlL2JpdC1zaGlmdC1yaWdodCB4IG4pKVxyXG4ifSB7OnN5bSAqY2xvanVyZXNjcmlwdC12ZXJzaW9uKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsb2p1cmVzY3JpcHQtdmVyc2lvbiogXCIxLjEwLjc2NFwiKVxyXG4ifSB7OnN5bSAtZmlyc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uIGNvbGwuIFVzZWQgYnkgY2xqcy5jb3JlL2ZpcnN0LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJU2VxfSB7OnN5bSBwZWVrLCA6bWV0YSB7OmRvYyAiRm9yIGEgbGlzdCBvciBxdWV1ZSwgc2FtZSBhcyBmaXJzdCwgZm9yIGEgdmVjdG9yLCBzYW1lIGFzLCBidXQgbXVjaFxuICBtb3JlIGVmZmljaWVudCB0aGFuLCBsYXN0LiBJZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSwgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBlZWtcclxuIFwiRm9yIGEgbGlzdCBvciBxdWV1ZSwgc2FtZSBhcyBmaXJzdCwgZm9yIGEgdmVjdG9yLCBzYW1lIGFzLCBidXQgbXVjaFxcbiAgbW9yZSBlZmZpY2llbnQgdGhhbiwgbGFzdC4gSWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHksIHJldHVybnMgbmlsLlwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdCAobmlsPyBjb2xsKSAoLXBlZWsgY29sbCkpKVxyXG4ifSB7OnN5bSBJS1ZSZWR1Y2UsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYXNzb2NpYXRpdmUgdHlwZXMgdGhhdCBjYW4gcmVkdWNlIHRoZW1zZWx2ZXNcbiAgdmlhIGEgZnVuY3Rpb24gb2Yga2V5IGFuZCB2YWwuIENhbGxlZCBieSBjbGpzLmNvcmUvcmVkdWNlLWt2LiJ9LCA6bWV0aG9kcyAoLWt2LXJlZHVjZSl9IHs6c3ltIGFnZXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXgvaW5kaWNlcy4gV29ya3Mgb24gSmF2YVNjcmlwdCBhcnJheXMuIiwgOmFyZ2xpc3RzIFtbYXJyYXkgaWR4XSBbYXJyYXkgaWR4ICYgaWR4c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFnZXRcclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4L2luZGljZXMuIFdvcmtzIG9uIEphdmFTY3JpcHQgYXJyYXlzLlwiXHJcbiAoW2FycmF5IGlkeF0gKGNsanMuY29yZS9hZ2V0IGFycmF5IGlkeCkpXHJcbiAoW2FycmF5IGlkeCAmIGlkeHNdIChhcHBseSBhZ2V0IChhZ2V0IGFycmF5IGlkeCkgaWR4cykpKVxyXG4ifSB7OnN5bSAtd3JpdGUsIDptZXRhIHs6ZG9jICJXcml0ZXMgcyB3aXRoIHdyaXRlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyAoW3dyaXRlciBzXSl9LCA6cHJvdG9jb2wgSVdyaXRlcn0gezpzeW0gaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gaXRlclxyXG4gW2NvbGxdXHJcbiAoY29uZFxyXG4gIChpdGVyYWJsZT8gY29sbClcclxuICAoLWl0ZXJhdG9yIGNvbGwpXHJcbiAgKG5pbD8gY29sbClcclxuICAobmlsLWl0ZXIpXHJcbiAgKHN0cmluZz8gY29sbClcclxuICAoc3RyaW5nLWl0ZXIgY29sbClcclxuICAoYXJyYXk/IGNvbGwpXHJcbiAgKGFycmF5LWl0ZXIgY29sbClcclxuICAoc2VxYWJsZT8gY29sbClcclxuICAoc2VxLWl0ZXIgY29sbClcclxuICA6ZWxzZVxyXG4gICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJDYW5ub3QgY3JlYXRlIGl0ZXJhdG9yIGZyb20gXCIgY29sbCkpKSkpXHJcbiJ9IHs6c3ltIG1rLWJvdW5kLWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NjIHRlc3Qga2V5XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWstYm91bmQtZm5cclxuIFtzYyB0ZXN0IGtleV1cclxuIChmblxyXG4gIFtlXVxyXG4gIChsZXQgW2NvbXAgKC1jb21wYXJhdG9yIHNjKV0gKHRlc3QgKGNvbXAgKC1lbnRyeS1rZXkgc2MgZSkga2V5KSAwKSkpKVxyXG4ifSB7OnN5bSBsYXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRoZSBsYXN0IGl0ZW0gaW4gY29sbCwgaW4gbGluZWFyIHRpbWUiLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGFzdFxyXG4gXCJSZXR1cm4gdGhlIGxhc3QgaXRlbSBpbiBjb2xsLCBpbiBsaW5lYXIgdGltZVwiXHJcbiBbc11cclxuIChsZXQgW3NuIChuZXh0IHMpXSAoaWYtbm90IChuaWw/IHNuKSAocmVjdXIgc24pIChmaXJzdCBzKSkpKVxyXG4ifSB7OnN5bSAtZGVmYXVsdC1kaXNwYXRjaC12YWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWZdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gcHIsIDptZXRhIHs6ZG9jICJQcmludHMgdGhlIG9iamVjdChzKSB1c2luZyBzdHJpbmctcHJpbnQuICBQcmludHMgdGhlXG4gIG9iamVjdChzKSwgc2VwYXJhdGVkIGJ5IHNwYWNlcyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lLlxuICBCeSBkZWZhdWx0LCBwciBhbmQgcHJuIHByaW50IGluIGEgd2F5IHRoYXQgb2JqZWN0cyBjYW4gYmVcbiAgcmVhZCBieSB0aGUgcmVhZGVyIiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJcclxuIFwiUHJpbnRzIHRoZSBvYmplY3QocykgdXNpbmcgc3RyaW5nLXByaW50LiAgUHJpbnRzIHRoZVxcbiAgb2JqZWN0KHMpLCBzZXBhcmF0ZWQgYnkgc3BhY2VzIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUuXFxuICBCeSBkZWZhdWx0LCBwciBhbmQgcHJuIHByaW50IGluIGEgd2F5IHRoYXQgb2JqZWN0cyBjYW4gYmVcXG4gIHJlYWQgYnkgdGhlIHJlYWRlclwiXHJcbiBbJiBvYmpzXVxyXG4gKHByLXdpdGgtb3B0cyBvYmpzIChwci1vcHRzKSkpXHJcbiJ9IHs6c3ltIG5hbWVzcGFjZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWVzcGFjZSBTdHJpbmcgb2YgYSBzeW1ib2wgb3Iga2V5d29yZCwgb3IgbmlsIGlmIG5vdCBwcmVzZW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYW1lc3BhY2VcclxuIFwiUmV0dXJucyB0aGUgbmFtZXNwYWNlIFN0cmluZyBvZiBhIHN5bWJvbCBvciBrZXl3b3JkLCBvciBuaWwgaWYgbm90IHByZXNlbnQuXCJcclxuIFt4XVxyXG4gKGlmXHJcbiAgKGltcGxlbWVudHM/IElOYW1lZCB4KVxyXG4gICgtbmFtZXNwYWNlIHgpXHJcbiAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkRvZXNuJ3Qgc3VwcG9ydCBuYW1lc3BhY2U6IFwiIHgpKSkpKVxyXG4ifSB7OnN5bSBvYmotbWFwLCA6bWV0YSB7OmRvYyAia2V5dmFsID0+IGtleSB2YWxcbiAgUmV0dXJucyBhIG5ldyBvYmplY3QgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuIiwgOmFyZ2xpc3RzIChbJiBrZXl2YWxzXSl9LCA6c291cmNlICIoZGVmblxyXG4gb2JqLW1hcFxyXG4gXCJrZXl2YWwgPT4ga2V5IHZhbFxcbiAgUmV0dXJucyBhIG5ldyBvYmplY3QgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuXCJcclxuIFsmIGtleXZhbHNdXHJcbiAobGV0XHJcbiAgW2tzIChhcnJheSkgb2JqIChqcy1vYmopXVxyXG4gIChsb29wXHJcbiAgIFtrdnMgKHNlcSBrZXl2YWxzKV1cclxuICAgKGlmXHJcbiAgICBrdnNcclxuICAgIChkb1xyXG4gICAgICgucHVzaCBrcyAoZmlyc3Qga3ZzKSlcclxuICAgICAoZ29iamVjdC9zZXQgb2JqIChmaXJzdCBrdnMpIChzZWNvbmQga3ZzKSlcclxuICAgICAocmVjdXIgKG5uZXh0IGt2cykpKVxyXG4gICAgKC5mcm9tT2JqZWN0IE9iak1hcCBrcyBvYmopKSkpKVxyXG4ifSB7OnN5bSAtY29uaiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGggbyBhZGRlZCB0byBpdC4gVGhlIG5ldyBpdGVtXG4gICAgIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbW9zdCBlZmZpY2llbnQgcGxhY2UsIGUuZy5cbiAgICAgKGNvbmogWzEgMiAzIDRdIDUpID0+IFsxIDIgMyA0IDVdXG4gICAgIChjb25qICcoMiAzIDQgNSkgMSkgPT4gJygxIDIgMyA0IDUpIiwgOmFyZ2xpc3RzIChbY29sbCBvXSl9LCA6cHJvdG9jb2wgSUNvbGxlY3Rpb259IHs6c3ltID0sIDptZXRhIHs6ZG9jICJFcXVhbGl0eS4gUmV0dXJucyB0cnVlIGlmIHggZXF1YWxzIHksIGZhbHNlIGlmIG5vdC4gQ29tcGFyZXNcbiAgbnVtYmVycyBhbmQgY29sbGVjdGlvbnMgaW4gYSB0eXBlLWluZGVwZW5kZW50IG1hbm5lci4gIENsb2p1cmUncyBpbW11dGFibGUgZGF0YVxuICBzdHJ1Y3R1cmVzIGRlZmluZSAtZXF1aXYgKGFuZCB0aHVzID0pIGFzIGEgdmFsdWUsIG5vdCBhbiBpZGVudGl0eSxcbiAgY29tcGFyaXNvbi4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuID1cclxuIFwiRXF1YWxpdHkuIFJldHVybnMgdHJ1ZSBpZiB4IGVxdWFscyB5LCBmYWxzZSBpZiBub3QuIENvbXBhcmVzXFxuICBudW1iZXJzIGFuZCBjb2xsZWN0aW9ucyBpbiBhIHR5cGUtaW5kZXBlbmRlbnQgbWFubmVyLiAgQ2xvanVyZSdzIGltbXV0YWJsZSBkYXRhXFxuICBzdHJ1Y3R1cmVzIGRlZmluZSAtZXF1aXYgKGFuZCB0aHVzID0pIGFzIGEgdmFsdWUsIG5vdCBhbiBpZGVudGl0eSxcXG4gIGNvbXBhcmlzb24uXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoaWYgKG5pbD8geCkgKG5pbD8geSkgKG9yIChpZGVudGljYWw/IHggeSkgKC1lcXVpdiB4IHkpKSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgICg9IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKD0geSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBJVHJhbnNpZW50TWFwLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBtYXBwaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdHJhbnNpZW50IGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWRpc3NvYyEpfSB7OnN5bSB0YWtlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGZpcnN0IG4gaXRlbXMgaW4gY29sbCwgb3IgYWxsIGl0ZW1zIGlmXG4gIHRoZXJlIGFyZSBmZXdlciB0aGFuIG4uICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbbl0gW24gY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2VcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGZpcnN0IG4gaXRlbXMgaW4gY29sbCwgb3IgYWxsIGl0ZW1zIGlmXFxuICB0aGVyZSBhcmUgZmV3ZXIgdGhhbiBuLiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlblxcbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtuXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW25hICh2b2xhdGlsZSEgbildXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtuXHJcbiAgICAgICAgQG5hXHJcbiAgICAgICAgbm5cclxuICAgICAgICAodnN3YXAhIG5hIGRlYylcclxuICAgICAgICByZXN1bHRcclxuICAgICAgICAoaWYgKHBvcz8gbikgKHJmIHJlc3VsdCBpbnB1dCkgcmVzdWx0KV1cclxuICAgICAgIChpZiAobm90IChwb3M/IG5uKSkgKGVuc3VyZS1yZWR1Y2VkIHJlc3VsdCkgcmVzdWx0KSkpKSkpKVxyXG4gKFtuIGNvbGxdXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW5cclxuICAgIChwb3M/IG4pXHJcbiAgICAod2hlbi1sZXRcclxuICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgIChjb25zIChmaXJzdCBzKSAodGFrZSAoZGVjIG4pIChyZXN0IHMpKSkpKSkpKVxyXG4ifSB7OnN5bSB2ZWN0b3I/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVZlY3RvciIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2ZWN0b3I/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElWZWN0b3JcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJVmVjdG9yIHgpKVxyXG4ifSB7OnN5bSBib29sZWFuLCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGJvb2xlYW4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYm9vbGVhblxyXG4gXCJDb2VyY2UgdG8gYm9vbGVhblwiXHJcbiBbeF1cclxuIChjb25kIChuaWw/IHgpIGZhbHNlIChmYWxzZT8geCkgZmFsc2UgOmVsc2UgdHJ1ZSkpXHJcbiJ9IHs6c3ltIElDaHVuaywgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhY2Nlc3NpbmcgdGhlIGl0ZW1zIG9mIGEgY2h1bmsuIn0sIDptZXRob2RzICgtZHJvcC1maXJzdCl9IHs6c3ltIGJpdC1zaGlmdC1sZWZ0LCA6bWV0YSB7OmRvYyAiQml0d2lzZSBzaGlmdCBsZWZ0IiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYml0LXNoaWZ0LWxlZnRcclxuIFwiQml0d2lzZSBzaGlmdCBsZWZ0XCJcclxuIFt4IG5dXHJcbiAoY2xqcy5jb3JlL2JpdC1zaGlmdC1sZWZ0IHggbikpXHJcbiJ9IHs6c3ltIHJhbmRvbS11dWlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmRvbS11dWlkXHJcbiBbXVxyXG4gKGxldGZuXHJcbiAgWyhoZXggW10gKC50b1N0cmluZyAocmFuZC1pbnQgMTYpIDE2KSldXHJcbiAgKGxldFxyXG4gICBbcmhleCAoLnRvU3RyaW5nIChiaXQtb3IgOCAoYml0LWFuZCAzIChyYW5kLWludCAxNikpKSAxNildXHJcbiAgICh1dWlkXHJcbiAgICAoc3RyXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIFwiLVwiXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICBcIi1cIlxyXG4gICAgIFwiNFwiXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgXCItXCJcclxuICAgICByaGV4XHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgXCItXCJcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleCkpKSkpKVxyXG4ifSB7OnN5bSBhbnk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGdpdmVuIGFueSBhcmd1bWVudC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBhbnk/IFwiUmV0dXJucyB0cnVlIGlmIGdpdmVuIGFueSBhcmd1bWVudC5cIiBbeF0gdHJ1ZSlcclxuIn0gezpzeW0gcmFuZC1pbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZCBuIChleGNsdXNpdmUpLiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kLWludFxyXG4gXCJSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZCBuIChleGNsdXNpdmUpLlwiXHJcbiBbbl1cclxuIChNYXRoL2Zsb29yICgqIChNYXRoL3JhbmRvbSkgbikpKVxyXG4ifSB7OnN5bSBhY2xvbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgamF2YXNjcmlwdCBhcnJheSwgY2xvbmVkIGZyb20gdGhlIHBhc3NlZCBpbiBhcnJheSIsIDphcmdsaXN0cyAoW2Fycl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFjbG9uZVxyXG4gXCJSZXR1cm5zIGEgamF2YXNjcmlwdCBhcnJheSwgY2xvbmVkIGZyb20gdGhlIHBhc3NlZCBpbiBhcnJheVwiXHJcbiBbYXJyXVxyXG4gKGxldFxyXG4gIFtsZW4gKGFsZW5ndGggYXJyKSBuZXctYXJyIChtYWtlLWFycmF5IGxlbildXHJcbiAgKGRvdGltZXMgW2kgbGVuXSAoYXNldCBuZXctYXJyIGkgKGFnZXQgYXJyIGkpKSlcclxuICBuZXctYXJyKSlcclxuIn0gezpzeW0gdnJlc2V0ISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIG9mIHZvbGF0aWxlIHRvIG5ld3ZhbCB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlXG4gICBjdXJyZW50IHZhbHVlLiBSZXR1cm5zIG5ld3ZhbC4iLCA6YXJnbGlzdHMgKFt2b2wgbmV3dmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdnJlc2V0IVxyXG4gXCJTZXRzIHRoZSB2YWx1ZSBvZiB2b2xhdGlsZSB0byBuZXd2YWwgd2l0aG91dCByZWdhcmQgZm9yIHRoZVxcbiAgIGN1cnJlbnQgdmFsdWUuIFJldHVybnMgbmV3dmFsLlwiXHJcbiBbdm9sIG5ld3ZhbF1cclxuICgtdnJlc2V0ISB2b2wgbmV3dmFsKSlcclxuIn0gezpzeW0gY2h1bmssIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYl0pfSwgOnNvdXJjZSAiKGRlZm4gY2h1bmsgW2JdICguY2h1bmsgYikpXHJcbiJ9IHs6c3ltIGRlYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiBudW0uIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gZGVjIFwiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIG51bS5cIiBbeF0gKC0geCAxKSlcclxuIn0gezpzeW0gQVBlcnNpc3RlbnRWZWN0b3IsIDptZXRhIHs6ZG9jICJNYXJrZXIgcHJvdG9jb2wifSwgOm1ldGhvZHMgKCl9IHs6c3ltIG1hcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvXG4gIHRoZSBzZXQgb2YgZmlyc3QgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIHRoZVxuICBzZXQgb2Ygc2Vjb25kIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXNcbiAgZXhoYXVzdGVkLiAgQW55IHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gRnVuY3Rpb25cbiAgZiBzaG91bGQgYWNjZXB0IG51bWJlci1vZi1jb2xscyBhcmd1bWVudHMuIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW5cbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjb2xsXSBbZiBjMSBjMl0gW2YgYzEgYzIgYzNdIFtmIGMxIGMyIGMzICYgY29sbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXBcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG9cXG4gIHRoZSBzZXQgb2YgZmlyc3QgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIHRoZVxcbiAgc2V0IG9mIHNlY29uZCBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzXFxuICBleGhhdXN0ZWQuICBBbnkgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBGdW5jdGlvblxcbiAgZiBzaG91bGQgYWNjZXB0IG51bWJlci1vZi1jb2xscyBhcmd1bWVudHMuIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW5cXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAoZm5cclxuICAgIChbXSAocmYpKVxyXG4gICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXRdIChyZiByZXN1bHQgKGYgaW5wdXQpKSlcclxuICAgIChbcmVzdWx0IGlucHV0ICYgaW5wdXRzXSAocmYgcmVzdWx0IChhcHBseSBmIGlucHV0IGlucHV0cykpKSkpKVxyXG4gKFtmIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChpZlxyXG4gICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAobGV0XHJcbiAgICAgIFtjIChjaHVuay1maXJzdCBzKSBzaXplIChjb3VudCBjKSBiIChjaHVuay1idWZmZXIgc2l6ZSldXHJcbiAgICAgIChkb3RpbWVzIFtpIHNpemVdIChjaHVuay1hcHBlbmQgYiAoZiAoLW50aCBjIGkpKSkpXHJcbiAgICAgIChjaHVuay1jb25zIChjaHVuayBiKSAobWFwIGYgKGNodW5rLXJlc3QgcykpKSlcclxuICAgICAoY29ucyAoZiAoZmlyc3QgcykpIChtYXAgZiAocmVzdCBzKSkpKSkpKVxyXG4gKFtmIGMxIGMyXVxyXG4gIChsYXp5LXNlcVxyXG4gICAobGV0XHJcbiAgICBbczEgKHNlcSBjMSkgczIgKHNlcSBjMildXHJcbiAgICAod2hlblxyXG4gICAgIChhbmQgczEgczIpXHJcbiAgICAgKGNvbnMgKGYgKGZpcnN0IHMxKSAoZmlyc3QgczIpKSAobWFwIGYgKHJlc3QgczEpIChyZXN0IHMyKSkpKSkpKVxyXG4gKFtmIGMxIGMyIGMzXVxyXG4gIChsYXp5LXNlcVxyXG4gICAobGV0XHJcbiAgICBbczEgKHNlcSBjMSkgczIgKHNlcSBjMikgczMgKHNlcSBjMyldXHJcbiAgICAod2hlblxyXG4gICAgIChhbmQgczEgczIgczMpXHJcbiAgICAgKGNvbnNcclxuICAgICAgKGYgKGZpcnN0IHMxKSAoZmlyc3QgczIpIChmaXJzdCBzMykpXHJcbiAgICAgIChtYXAgZiAocmVzdCBzMSkgKHJlc3QgczIpIChyZXN0IHMzKSkpKSkpKVxyXG4gKFtmIGMxIGMyIGMzICYgY29sbHNdXHJcbiAgKGxldFxyXG4gICBbc3RlcFxyXG4gICAgKGZuXHJcbiAgICAgc3RlcFxyXG4gICAgIFtjc11cclxuICAgICAobGF6eS1zZXFcclxuICAgICAgKGxldFxyXG4gICAgICAgW3NzIChtYXAgc2VxIGNzKV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgKGV2ZXJ5PyBpZGVudGl0eSBzcylcclxuICAgICAgICAoY29ucyAobWFwIGZpcnN0IHNzKSAoc3RlcCAobWFwIHJlc3Qgc3MpKSkpKSkpXVxyXG4gICAobWFwXHJcbiAgICAoZm4qIFtwMV9fNDg4MjMjXSAoYXBwbHkgZiBwMV9fNDg4MjMjKSlcclxuICAgIChzdGVwIChjb25qIGNvbGxzIGMzIGMyIGMxKSkpKSkpXHJcbiJ9IHs6c3ltIGp1eHQsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHNldCBvZiBmdW5jdGlvbnMgYW5kIHJldHVybnMgYSBmbiB0aGF0IGlzIHRoZSBqdXh0YXBvc2l0aW9uXG4gIG9mIHRob3NlIGZucy4gIFRoZSByZXR1cm5lZCBmbiB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmdzLCBhbmRcbiAgcmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZWFjaCBmbiB0byB0aGVcbiAgYXJncyAobGVmdC10by1yaWdodCkuXG4gICgoanV4dCBhIGIgYykgeCkgPT4gWyhhIHgpIChiIHgpIChjIHgpXSIsIDphcmdsaXN0cyBbW2ZdIFtmIGddIFtmIGcgaF0gW2YgZyBoICYgZnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqdXh0XHJcbiBcIlRha2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhIGZuIHRoYXQgaXMgdGhlIGp1eHRhcG9zaXRpb25cXG4gIG9mIHRob3NlIGZucy4gIFRoZSByZXR1cm5lZCBmbiB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmdzLCBhbmRcXG4gIHJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGVhY2ggZm4gdG8gdGhlXFxuICBhcmdzIChsZWZ0LXRvLXJpZ2h0KS5cXG4gICgoanV4dCBhIGIgYykgeCkgPT4gWyhhIHgpIChiIHgpIChjIHgpXVwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIChbXSAodmVjdG9yIChmKSkpXHJcbiAgIChbeF0gKHZlY3RvciAoZiB4KSkpXHJcbiAgIChbeCB5XSAodmVjdG9yIChmIHggeSkpKVxyXG4gICAoW3ggeSB6XSAodmVjdG9yIChmIHggeSB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAodmVjdG9yIChhcHBseSBmIHggeSB6IGFyZ3MpKSkpKVxyXG4gKFtmIGddXHJcbiAgKGZuXHJcbiAgIChbXSAodmVjdG9yIChmKSAoZykpKVxyXG4gICAoW3hdICh2ZWN0b3IgKGYgeCkgKGcgeCkpKVxyXG4gICAoW3ggeV0gKHZlY3RvciAoZiB4IHkpIChnIHggeSkpKVxyXG4gICAoW3ggeSB6XSAodmVjdG9yIChmIHggeSB6KSAoZyB4IHkgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgICh2ZWN0b3IgKGFwcGx5IGYgeCB5IHogYXJncykgKGFwcGx5IGcgeCB5IHogYXJncykpKSkpXHJcbiAoW2YgZyBoXVxyXG4gIChmblxyXG4gICAoW10gKHZlY3RvciAoZikgKGcpIChoKSkpXHJcbiAgIChbeF0gKHZlY3RvciAoZiB4KSAoZyB4KSAoaCB4KSkpXHJcbiAgIChbeCB5XSAodmVjdG9yIChmIHggeSkgKGcgeCB5KSAoaCB4IHkpKSlcclxuICAgKFt4IHkgel0gKHZlY3RvciAoZiB4IHkgeikgKGcgeCB5IHopIChoIHggeSB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKHZlY3RvclxyXG4gICAgIChhcHBseSBmIHggeSB6IGFyZ3MpXHJcbiAgICAgKGFwcGx5IGcgeCB5IHogYXJncylcclxuICAgICAoYXBwbHkgaCB4IHkgeiBhcmdzKSkpKSlcclxuIChbZiBnIGggJiBmc11cclxuICAobGV0XHJcbiAgIFtmcyAobGlzdCogZiBnIGggZnMpXVxyXG4gICAoZm5cclxuICAgIChbXVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuKiBbcDFfXzQ4ODM5IyBwMl9fNDg4NDAjXSAoY29uaiBwMV9fNDg4MzkjIChwMl9fNDg4NDAjKSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGZzKSlcclxuICAgIChbeF1cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmbiogW3AxX180ODg0MSMgcDJfXzQ4ODQyI10gKGNvbmogcDFfXzQ4ODQxIyAocDJfXzQ4ODQyIyB4KSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGZzKSlcclxuICAgIChbeCB5XVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuKiBbcDFfXzQ4ODQzIyBwMl9fNDg4NDQjXSAoY29uaiBwMV9fNDg4NDMjIChwMl9fNDg4NDQjIHggeSkpKVxyXG4gICAgICBbXVxyXG4gICAgICBmcykpXHJcbiAgICAoW3ggeSB6XVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODg0NSMgcDJfXzQ4ODQ2I11cclxuICAgICAgIChjb25qIHAxX180ODg0NSMgKHAyX180ODg0NiMgeCB5IHopKSlcclxuICAgICAgW11cclxuICAgICAgZnMpKVxyXG4gICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODQ3IyBwMl9fNDg4NDgjXVxyXG4gICAgICAgKGNvbmogcDFfXzQ4ODQ3IyAoYXBwbHkgcDJfXzQ4ODQ4IyB4IHkgeiBhcmdzKSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGZzKSkpKSkpXHJcbiJ9IHs6c3ltIDwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG9yZGVyLFxuICBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA8XHJcbiBcIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3JkZXIsXFxuICBvdGhlcndpc2UgZmFsc2UuXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoY2xqcy5jb3JlLzwgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKGNsanMuY29yZS88IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKGNsanMuY29yZS88IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gKmV2YWwqLCA6bWV0YSB7OmRvYyAiUnVudGltZSBlbnZpcm9ubWVudHMgbWF5IHByb3ZpZGUgYSB3YXkgdG8gZXZhbHVhdGUgQ2xvanVyZVNjcmlwdFxuICBmb3Jtcy4gV2hhdGV2ZXIgZnVuY3Rpb24gKmV2YWwqIGlzIGJvdW5kIHRvIHdpbGwgYmUgcGFzc2VkIGFueSBmb3JtcyB3aGljaFxuICBzaG91bGQgYmUgZXZhbHVhdGVkLiJ9LCA6c291cmNlICIoZGVmb25jZVxyXG4gKmV2YWwqXHJcbiAoZm4gW19dICh0aHJvdyAoanMvRXJyb3IuIFwiY2xqcy5jb3JlLypldmFsKiBub3QgYm91bmRcIikpKSlcclxuIn0gezpzeW0gdGVzdCwgOm1ldGEgezpkb2MgInRlc3QgW3ZdIGZpbmRzIGZuIGF0IGtleSA6dGVzdCBpbiB2YXIgbWV0YWRhdGEgYW5kIGNhbGxzIGl0LFxuICBwcmVzdW1pbmcgZmFpbHVyZSB3aWxsIHRocm93IGV4Y2VwdGlvbiIsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0ZXN0XHJcbiBcInRlc3QgW3ZdIGZpbmRzIGZuIGF0IGtleSA6dGVzdCBpbiB2YXIgbWV0YWRhdGEgYW5kIGNhbGxzIGl0LFxcbiAgcHJlc3VtaW5nIGZhaWx1cmUgd2lsbCB0aHJvdyBleGNlcHRpb25cIlxyXG4gW3ZdXHJcbiAobGV0IFtmICguLWNsanMkbGFuZyR0ZXN0IHYpXSAoaWYgZiAoZG8gKGYpIDpvaykgOm5vLXRlc3QpKSlcclxuIn0gezpzeW0gcmVzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBwb3NzaWJseSBlbXB0eSBzZXEgb2YgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdC4gQ2FsbHMgc2VxIG9uIGl0c1xuICBhcmd1bWVudC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzdFxyXG4gXCJSZXR1cm5zIGEgcG9zc2libHkgZW1wdHkgc2VxIG9mIHRoZSBpdGVtcyBhZnRlciB0aGUgZmlyc3QuIENhbGxzIHNlcSBvbiBpdHNcXG4gIGFyZ3VtZW50LlwiXHJcbiBbY29sbF1cclxuIChpZi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChpZlxyXG4gICAoaW1wbGVtZW50cz8gSVNlcSBjb2xsKVxyXG4gICAoLXJlc3QgY29sbClcclxuICAgKGxldCBbcyAoc2VxIGNvbGwpXSAoaWYgcyAoLXJlc3QgcykgKCkpKSlcclxuICAoKSkpXHJcbiJ9IHs6c3ltIGV4LWRhdGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGV4Y2VwdGlvbiBkYXRhIChhIG1hcCkgaWYgZXggaXMgYW4gRXhjZXB0aW9uSW5mby5cbiAgT3RoZXJ3aXNlIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXgtZGF0YVxyXG4gXCJSZXR1cm5zIGV4Y2VwdGlvbiBkYXRhIChhIG1hcCkgaWYgZXggaXMgYW4gRXhjZXB0aW9uSW5mby5cXG4gIE90aGVyd2lzZSByZXR1cm5zIG5pbC5cIlxyXG4gW2V4XVxyXG4gKHdoZW4gKGluc3RhbmNlPyBFeGNlcHRpb25JbmZvIGV4KSAoLi1kYXRhIGV4KSkpXHJcbiJ9IHs6c3ltIC1kcm9wLWZpcnN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgbmV3IGNodW5rIG9mIGNvbGwgd2l0aCB0aGUgZmlyc3QgaXRlbSByZW1vdmVkLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJQ2h1bmt9IHs6c3ltIGlzYT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgKD0gY2hpbGQgcGFyZW50KSwgb3IgY2hpbGQgaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBkZXJpdmVkIGZyb21cbiAgcGFyZW50LCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhXG4gIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWRcbiAgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWxcbiAgaGllcmFyY2h5IiwgOmFyZ2xpc3RzIFtbY2hpbGQgcGFyZW50XSBbaCBjaGlsZCBwYXJlbnRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpc2E/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiAoPSBjaGlsZCBwYXJlbnQpLCBvciBjaGlsZCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGRlcml2ZWQgZnJvbVxcbiAgcGFyZW50LCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhXFxuICByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkXFxuICBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWQgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbFxcbiAgaGllcmFyY2h5XCJcclxuIChbY2hpbGQgcGFyZW50XSAoaXNhPyBAKGdldC1nbG9iYWwtaGllcmFyY2h5KSBjaGlsZCBwYXJlbnQpKVxyXG4gKFtoIGNoaWxkIHBhcmVudF1cclxuICAob3JcclxuICAgKD0gY2hpbGQgcGFyZW50KVxyXG4gICAoY29udGFpbnM/ICgoOmFuY2VzdG9ycyBoKSBjaGlsZCkgcGFyZW50KVxyXG4gICAoYW5kXHJcbiAgICAodmVjdG9yPyBwYXJlbnQpXHJcbiAgICAodmVjdG9yPyBjaGlsZClcclxuICAgICg9PSAoY291bnQgcGFyZW50KSAoY291bnQgY2hpbGQpKVxyXG4gICAgKGxvb3BcclxuICAgICBbcmV0IHRydWUgaSAwXVxyXG4gICAgIChpZlxyXG4gICAgICAob3IgKG5vdCByZXQpICg9PSBpIChjb3VudCBwYXJlbnQpKSlcclxuICAgICAgcmV0XHJcbiAgICAgIChyZWN1ciAoaXNhPyBoIChjaGlsZCBpKSAocGFyZW50IGkpKSAoaW5jIGkpKSkpKSkpKVxyXG4ifSB7OnN5bSBib29sZWFuPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBCb29sZWFuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJvb2xlYW4/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBCb29sZWFuXCJcclxuIFt4XVxyXG4gKG9yIChjbGpzLmNvcmUvdHJ1ZT8geCkgKGNsanMuY29yZS9mYWxzZT8geCkpKVxyXG4ifSB7OnN5bSAtY2xvbmUsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgY2xvbmUgb2YgdmFsdWUuIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpwcm90b2NvbCBJQ2xvbmVhYmxlfSB7OnN5bSBtdW5nZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2VcclxuIFtuYW1lXVxyXG4gKGxldFxyXG4gIFtuYW1lJ1xyXG4gICAobXVuZ2Utc3RyIChzdHIgbmFtZSkpXHJcbiAgIG5hbWUnXHJcbiAgIChjb25kXHJcbiAgICAoaWRlbnRpY2FsPyBuYW1lJyBcIi4uXCIpXHJcbiAgICBcIl9ET1RfX0RPVF9cIlxyXG4gICAgKGpzLXJlc2VydmVkPyBuYW1lJylcclxuICAgIChzdHIgbmFtZScgXCIkXCIpXHJcbiAgICA6ZWxzZVxyXG4gICAgbmFtZScpXVxyXG4gIChpZiAoc3ltYm9sPyBuYW1lKSAoc3ltYm9sIG5hbWUnKSBuYW1lJykpKVxyXG4ifSB7OnN5bSBERU1VTkdFX01BUCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIERFTVVOR0VfTUFQXHJcbiAjanMge1wiX1JCUkFDRV9cIiBcIn1cIiwgXCJfQ09MT05fXCIgXCI6XCIsIFwiX0JBTkdfXCIgXCIhXCIsIFwiX1FNQVJLX1wiIFwiP1wiLCBcIl9CU0xBU0hfXCIgXCJcXFxcXFxcXFwiLCBcIl9TTEFTSF9cIiBcIi9cIiwgXCJfUEVSQ0VOVF9cIiBcIiVcIiwgXCJfUExVU19cIiBcIitcIiwgXCJfU0hBUlBfXCIgXCIjXCIsIFwiX0xCUkFDRV9cIiBcIntcIiwgXCJfQkFSX1wiIFwifFwiLCBcIl9MQlJBQ0tfXCIgXCJbXCIsIFwiX0VRX1wiIFwiPVwiLCBcIl9cIiBcIi1cIiwgXCJfVElMREVfXCIgXCJ+XCIsIFwiX1JCUkFDS19cIiBcIl1cIiwgXCJfR1RfXCIgXCI+XCIsIFwiX1NJTkdMRVFVT1RFX1wiIFwiJ1wiLCBcIl9DSVJDQV9cIiBcIkBcIiwgXCJfQU1QRVJTQU5EX1wiIFwiJlwiLCBcIl9ET1VCTEVRVU9URV9cIiBcIlxcXFxcXFwiXCIsIFwiX0NBUkVUX1wiIFwiXlwiLCBcIl9MVF9cIiBcIjxcIiwgXCJfU1RBUl9cIiBcIipcIn0pXHJcbiJ9IHs6c3ltIHJlLXNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHN1Y2Nlc3NpdmUgbWF0Y2hlcyBvZiByZSBpbiBzLiIsIDphcmdsaXN0cyAoW3JlIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZS1zZXFcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2Ygc3VjY2Vzc2l2ZSBtYXRjaGVzIG9mIHJlIGluIHMuXCJcclxuIFtyZSBzXVxyXG4gKGlmXHJcbiAgKHN0cmluZz8gcylcclxuICAocmUtc2VxKiByZSBzKVxyXG4gICh0aHJvdyAoanMvVHlwZUVycm9yLiBcInJlLXNlcSBtdXN0IG1hdGNoIGFnYWluc3QgYSBzdHJpbmcuXCIpKSkpXHJcbiJ9IHs6c3ltIGNoYXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IHN0cmluZyBvZiBsZW5ndGggb25lLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgc3RyaW5nIG9mIGxlbmd0aCBvbmUuXCJcclxuIFt4XVxyXG4gKGFuZCAoc3RyaW5nPyB4KSAoPT0gMSAoLi1sZW5ndGggeCkpKSlcclxuIn0gezpzeW0gbWFrZS1oaWVyYXJjaHksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgaGllcmFyY2h5IG9iamVjdCBmb3IgdXNlIHdpdGggZGVyaXZlLCBpc2E/IGV0Yy4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWtlLWhpZXJhcmNoeVxyXG4gXCJDcmVhdGVzIGEgaGllcmFyY2h5IG9iamVjdCBmb3IgdXNlIHdpdGggZGVyaXZlLCBpc2E/IGV0Yy5cIlxyXG4gW11cclxuIHs6cGFyZW50cyB7fSwgOmRlc2NlbmRhbnRzIHt9LCA6YW5jZXN0b3JzIHt9fSlcclxuIn0gezpzeW0gUFJPVE9DT0xfU0VOVElORUwsIDptZXRhIHt9LCA6c291cmNlICIoZGVmb25jZSBQUk9UT0NPTF9TRU5USU5FTCAjanMge30pXHJcbiJ9IHs6c3ltIC1yZWR1Y2UsIDptZXRhIHs6ZG9jICJmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDIgYXJndW1lbnRzLiBJZiBzdGFydCBpcyBub3Qgc3VwcGxpZWQsXG4gICAgIHJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHRoZSBmaXJzdCAyIGl0ZW1zIGluIGNvbGwsIHRoZW5cbiAgICAgYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDNyZCBpdGVtLCBldGMuIiwgOmFyZ2xpc3RzIChbY29sbCBmXSBbY29sbCBmIHN0YXJ0XSl9LCA6cHJvdG9jb2wgSVJlZHVjZX0gezpzeW0gLWNvdW50LCA6bWV0YSB7OmRvYyAiQ2FsY3VsYXRlcyB0aGUgY291bnQgb2YgY29sbCBpbiBjb25zdGFudCB0aW1lLiBVc2VkIGJ5IGNsanMuY29yZS9jb3VudC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUNvdW50ZWR9IHs6c3ltIHN3YXAtdmFscyEsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHN3YXBzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIGJlOlxuICAoYXBwbHkgZiBjdXJyZW50LXZhbHVlLW9mLWF0b20gYXJncykuIE5vdGUgdGhhdCBmIG1heSBiZSBjYWxsZWRcbiAgbXVsdGlwbGUgdGltZXMsIGFuZCB0aHVzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy5cbiAgUmV0dXJucyBbb2xkIG5ld10sIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzd2FwLiIsIDphcmdsaXN0cyBbW2EgZl0gW2EgZiB4XSBbYSBmIHggeV0gW2EgZiB4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gc3dhcC12YWxzIVxyXG4gXCJBdG9taWNhbGx5IHN3YXBzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIGJlOlxcbiAgKGFwcGx5IGYgY3VycmVudC12YWx1ZS1vZi1hdG9tIGFyZ3MpLiBOb3RlIHRoYXQgZiBtYXkgYmUgY2FsbGVkXFxuICBtdWx0aXBsZSB0aW1lcywgYW5kIHRodXMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLlxcbiAgUmV0dXJucyBbb2xkIG5ld10sIHRoZSB2YWx1ZSBvZiB0aGUgYXRvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzd2FwLlwiXHJcbiB7OmFkZGVkIFwiMS45XCJ9XHJcbiAoW2EgZl0gKHJlc2V0LXZhbHMhIGEgKGYgKC4tc3RhdGUgYSkpKSlcclxuIChbYSBmIHhdIChyZXNldC12YWxzISBhIChmICguLXN0YXRlIGEpIHgpKSlcclxuIChbYSBmIHggeV0gKHJlc2V0LXZhbHMhIGEgKGYgKC4tc3RhdGUgYSkgeCB5KSkpXHJcbiAoW2EgZiB4IHkgJiBtb3JlXSAocmVzZXQtdmFscyEgYSAoYXBwbHkgZiAoLi1zdGF0ZSBhKSB4IHkgbW9yZSkpKSlcclxuIn0gezpzeW0ga2VlcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub24tbmlsIHJlc3VsdHMgb2YgKGYgaXRlbSkuIE5vdGUsXG4gIHRoaXMgbWVhbnMgZmFsc2UgcmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluY2x1ZGVkLiAgZiBtdXN0IGJlIGZyZWUgb2ZcbiAgc2lkZS1lZmZlY3RzLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZWVwXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBub24tbmlsIHJlc3VsdHMgb2YgKGYgaXRlbSkuIE5vdGUsXFxuICB0aGlzIG1lYW5zIGZhbHNlIHJldHVybiB2YWx1ZXMgd2lsbCBiZSBpbmNsdWRlZC4gIGYgbXVzdCBiZSBmcmVlIG9mXFxuICBzaWRlLWVmZmVjdHMuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAoZm5cclxuICAgIChbXSAocmYpKVxyXG4gICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgKGxldCBbdiAoZiBpbnB1dCldIChpZiAobmlsPyB2KSByZXN1bHQgKHJmIHJlc3VsdCB2KSkpKSkpKVxyXG4gKFtmIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChpZlxyXG4gICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAobGV0XHJcbiAgICAgIFtjIChjaHVuay1maXJzdCBzKSBzaXplIChjb3VudCBjKSBiIChjaHVuay1idWZmZXIgc2l6ZSldXHJcbiAgICAgIChkb3RpbWVzXHJcbiAgICAgICBbaSBzaXplXVxyXG4gICAgICAgKGxldCBbeCAoZiAoLW50aCBjIGkpKV0gKHdoZW4tbm90IChuaWw/IHgpIChjaHVuay1hcHBlbmQgYiB4KSkpKVxyXG4gICAgICAoY2h1bmstY29ucyAoY2h1bmsgYikgKGtlZXAgZiAoY2h1bmstcmVzdCBzKSkpKVxyXG4gICAgIChsZXRcclxuICAgICAgW3ggKGYgKGZpcnN0IHMpKV1cclxuICAgICAgKGlmIChuaWw/IHgpIChrZWVwIGYgKHJlc3QgcykpIChjb25zIHggKGtlZXAgZiAocmVzdCBzKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBjaGFyLCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGNoYXIiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hhclxyXG4gXCJDb2VyY2UgdG8gY2hhclwiXHJcbiBbeF1cclxuIChjb25kXHJcbiAgKG51bWJlcj8geClcclxuICAoLmZyb21DaGFyQ29kZSBqcy9TdHJpbmcgeClcclxuICAoYW5kIChzdHJpbmc/IHgpICg9PSAoLi1sZW5ndGggeCkgMSkpXHJcbiAgeFxyXG4gIDplbHNlXHJcbiAgKHRocm93XHJcbiAgIChqcy9FcnJvci4gXCJBcmd1bWVudCB0byBjaGFyIG11c3QgYmUgYSBjaGFyYWN0ZXIgb3IgbnVtYmVyXCIpKSkpXHJcbiJ9IHs6c3ltIG1hcGNhdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBjb25jYXQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBtYXBcbiAgdG8gZiBhbmQgY29sbHMuICBUaHVzIGZ1bmN0aW9uIGYgc2hvdWxkIHJldHVybiBhIGNvbGxlY3Rpb24uIFJldHVybnNcbiAgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIFtbZl0gW2YgJiBjb2xsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcGNhdFxyXG4gXCJSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgY29uY2F0IHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgbWFwXFxuICB0byBmIGFuZCBjb2xscy4gIFRodXMgZnVuY3Rpb24gZiBzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbi4gUmV0dXJuc1xcbiAgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkXCJcclxuIHs6YWRkZWQgXCIxLjBcIiwgOnN0YXRpYyB0cnVlfVxyXG4gKFtmXSAoY29tcCAobWFwIGYpIGNhdCkpXHJcbiAoW2YgJiBjb2xsc10gKGFwcGx5IGNvbmNhdCAoYXBwbHkgbWFwIGYgY29sbHMpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1sb25nLCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGxvbmcgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiBJZGVudGljYWwgdG8gYGludCcuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1sb25nXHJcbiBcIkNvZXJjZSB0byBsb25nIGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4gSWRlbnRpY2FsIHRvIGBpbnQnLlwiXHJcbiBbeF1cclxuIChmaXggeCkpXHJcbiJ9IHs6c3ltIG0zLXNlZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG0zLXNlZWQgMClcclxuIn0gezpzeW0gc29tZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBub3QgbmlsLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvbWU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIG5vdCBuaWwsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAobm90IChuaWw/IHgpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLW5lZ2F0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtbmVnYXRlIFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1uZWdhdGUgeCkpXHJcbiJ9IHs6c3ltIHJlbW92ZS10YXAsIDptZXRhIHs6ZG9jICJSZW1vdmUgZiBmcm9tIHRoZSB0YXAgc2V0LiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmUtdGFwXHJcbiBcIlJlbW92ZSBmIGZyb20gdGhlIHRhcCBzZXQuXCJcclxuIFtmXVxyXG4gKG1heWJlLWluaXQtdGFwc2V0KVxyXG4gKHN3YXAhIHRhcHNldCBkaXNqIGYpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIHN5bWJvbC1pZGVudGljYWw/LCA6bWV0YSB7OmRvYyAiRWZmaWNpZW50IHRlc3QgdG8gZGV0ZXJtaW5lIHRoYXQgdHdvIHN5bWJvbHMgYXJlIGlkZW50aWNhbC4iLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzeW1ib2wtaWRlbnRpY2FsP1xyXG4gXCJFZmZpY2llbnQgdGVzdCB0byBkZXRlcm1pbmUgdGhhdCB0d28gc3ltYm9scyBhcmUgaWRlbnRpY2FsLlwiXHJcbiBbeCB5XVxyXG4gKGlmXHJcbiAgKGlkZW50aWNhbD8geCB5KVxyXG4gIHRydWVcclxuICAoaWZcclxuICAgKGFuZCAoc3ltYm9sPyB4KSAoc3ltYm9sPyB5KSlcclxuICAgKGlkZW50aWNhbD8gKC4tc3RyIHgpICguLXN0ciB5KSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gKmNvbW1hbmQtbGluZS1hcmdzKiwgOm1ldGEgezpkb2MgIkEgc2VxdWVuY2Ugb2YgdGhlIHN1cHBsaWVkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMsIG9yIG5pbCBpZlxuICBub25lIHdlcmUgc3VwcGxpZWQifSwgOnNvdXJjZSAiKGRlZiAqY29tbWFuZC1saW5lLWFyZ3MqIG5pbClcclxuIn0gezpzeW0gcmV2ZXJzZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb2YgdGhlIGl0ZW1zIGluIGNvbGwgaW4gcmV2ZXJzZSBvcmRlci4gTm90IGxhenkuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldmVyc2VcclxuIFwiUmV0dXJucyBhIHNlcSBvZiB0aGUgaXRlbXMgaW4gY29sbCBpbiByZXZlcnNlIG9yZGVyLiBOb3QgbGF6eS5cIlxyXG4gW2NvbGxdXHJcbiAoaWYgKHJldmVyc2libGU/IGNvbGwpIChvciAocnNlcSBjb2xsKSAoKSkgKHJlZHVjZSBjb25qICgpIGNvbGwpKSlcclxuIn0gezpzeW0gaW5zdD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJbnN0IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gaW5zdD8gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJbnN0XCIgW3hdIChzYXRpc2ZpZXM/IEluc3QgeCkpXHJcbiJ9IHs6c3ltIHJhbmdlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIG9mIG51bXMgZnJvbSBzdGFydCAoaW5jbHVzaXZlKSB0byBlbmRcbiAgIChleGNsdXNpdmUpLCBieSBzdGVwLCB3aGVyZSBzdGFydCBkZWZhdWx0cyB0byAwLCBzdGVwIHRvIDEsXG4gICBhbmQgZW5kIHRvIGluZmluaXR5LiIsIDphcmdsaXN0cyBbW10gW2VuZF0gW3N0YXJ0IGVuZF0gW3N0YXJ0IGVuZCBzdGVwXV19LCA6c291cmNlICIoZGVmblxyXG4gcmFuZ2VcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIG9mIG51bXMgZnJvbSBzdGFydCAoaW5jbHVzaXZlKSB0byBlbmRcXG4gICAoZXhjbHVzaXZlKSwgYnkgc3RlcCwgd2hlcmUgc3RhcnQgZGVmYXVsdHMgdG8gMCwgc3RlcCB0byAxLFxcbiAgIGFuZCBlbmQgdG8gaW5maW5pdHkuXCJcclxuIChbXSAocmFuZ2UgMCAoLi1NQVhfVkFMVUUganMvTnVtYmVyKSAxKSlcclxuIChbZW5kXSAocmFuZ2UgMCBlbmQgMSkpXHJcbiAoW3N0YXJ0IGVuZF0gKHJhbmdlIHN0YXJ0IGVuZCAxKSlcclxuIChbc3RhcnQgZW5kIHN0ZXBdXHJcbiAgKGNvbmRcclxuICAgKHBvcz8gc3RlcClcclxuICAgKGlmICg8PSBlbmQgc3RhcnQpICgpIChSYW5nZS4gbmlsIHN0YXJ0IGVuZCBzdGVwIG5pbCBuaWwgbmlsKSlcclxuICAgKG5lZz8gc3RlcClcclxuICAgKGlmICg+PSBlbmQgc3RhcnQpICgpIChSYW5nZS4gbmlsIHN0YXJ0IGVuZCBzdGVwIG5pbCBuaWwgbmlsKSlcclxuICAgOmVsc2VcclxuICAgKGlmICg9PSBlbmQgc3RhcnQpICgpIChyZXBlYXQgc3RhcnQpKSkpKVxyXG4ifSB7OnN5bSBiaXQtY291bnQsIDptZXRhIHs6ZG9jICJDb3VudHMgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiBuIiwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1jb3VudFxyXG4gXCJDb3VudHMgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiBuXCJcclxuIFt2XVxyXG4gKGxldFxyXG4gIFt2XHJcbiAgICgtIHYgKGJpdC1hbmQgKGJpdC1zaGlmdC1yaWdodCB2IDEpIDE0MzE2NTU3NjUpKVxyXG4gICB2XHJcbiAgICgrIChiaXQtYW5kIHYgODU4OTkzNDU5KSAoYml0LWFuZCAoYml0LXNoaWZ0LXJpZ2h0IHYgMikgODU4OTkzNDU5KSldXHJcbiAgKGJpdC1zaGlmdC1yaWdodFxyXG4gICAoKiAoYml0LWFuZCAoKyB2IChiaXQtc2hpZnQtcmlnaHQgdiA0KSkgMjUyNjQ1MTM1KSAxNjg0MzAwOSlcclxuICAgMjQpKSlcclxuIn0gezpzeW0gc29ydCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwuIENvbXAgY2FuIGJlXG4gICBib29sZWFuLXZhbHVlZCBjb21wYXJpc29uIGZ1bmN0aW9uLCBvciBhIC0vMC8rIHZhbHVlZCBjb21wYXJhdG9yLlxuICAgQ29tcCBkZWZhdWx0cyB0byBjb21wYXJlLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtjb21wIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0XHJcbiBcIlJldHVybnMgYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwuIENvbXAgY2FuIGJlXFxuICAgYm9vbGVhbi12YWx1ZWQgY29tcGFyaXNvbiBmdW5jdGlvbiwgb3IgYSAtLzAvKyB2YWx1ZWQgY29tcGFyYXRvci5cXG4gICBDb21wIGRlZmF1bHRzIHRvIGNvbXBhcmUuXCJcclxuIChbY29sbF0gKHNvcnQgY29tcGFyZSBjb2xsKSlcclxuIChbY29tcCBjb2xsXVxyXG4gIChpZlxyXG4gICAoc2VxIGNvbGwpXHJcbiAgIChsZXRcclxuICAgIFthICh0by1hcnJheSBjb2xsKV1cclxuICAgIChnYXJyYXkvc3RhYmxlU29ydCBhIChmbi0+Y29tcGFyYXRvciBjb21wKSlcclxuICAgIChzZXEgYSkpXHJcbiAgICgpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1pbmMtaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1pbmMtaW50IFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1pbmMtaW50IHgpKVxyXG4ifSB7OnN5bSAtY29tcGFyZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgbnVtYmVyIHdoZW4geCBpcyBsb2dpY2FsbHlcbiAgICAgJ2xlc3MgdGhhbicsICdlcXVhbCB0bycsIG9yICdncmVhdGVyIHRoYW4nIHkuIiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6cHJvdG9jb2wgSUNvbXBhcmFibGV9IHs6c3ltIG1hcC1pbmRleGVkLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gMFxuICBhbmQgdGhlIGZpcnN0IGl0ZW0gb2YgY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byAxIGFuZCB0aGUgc2Vjb25kXG4gIGl0ZW0gaW4gY29sbCwgZXRjLCB1bnRpbCBjb2xsIGlzIGV4aGF1c3RlZC4gVGh1cyBmdW5jdGlvbiBmIHNob3VsZFxuICBhY2NlcHQgMiBhcmd1bWVudHMsIGluZGV4IGFuZCBpdGVtLiBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuXG4gIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1pbmRleGVkXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIDBcXG4gIGFuZCB0aGUgZmlyc3QgaXRlbSBvZiBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIDEgYW5kIHRoZSBzZWNvbmRcXG4gIGl0ZW0gaW4gY29sbCwgZXRjLCB1bnRpbCBjb2xsIGlzIGV4aGF1c3RlZC4gVGh1cyBmdW5jdGlvbiBmIHNob3VsZFxcbiAgYWNjZXB0IDIgYXJndW1lbnRzLCBpbmRleCBhbmQgaXRlbS4gUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlblxcbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtpICh2b2xhdGlsZSEgLTEpXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XSAocmYgcmVzdWx0IChmICh2c3dhcCEgaSBpbmMpIGlucHV0KSkpKSkpKVxyXG4gKFtmIGNvbGxdXHJcbiAgKGxldGZuXHJcbiAgIFsobWFwaVxyXG4gICAgIFtpZHggY29sbF1cclxuICAgICAobGF6eS1zZXFcclxuICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2MgKGNodW5rLWZpcnN0IHMpIHNpemUgKGNvdW50IGMpIGIgKGNodW5rLWJ1ZmZlciBzaXplKV1cclxuICAgICAgICAgKGRvdGltZXMgW2kgc2l6ZV0gKGNodW5rLWFwcGVuZCBiIChmICgrIGlkeCBpKSAoLW50aCBjIGkpKSkpXHJcbiAgICAgICAgIChjaHVuay1jb25zIChjaHVuayBiKSAobWFwaSAoKyBpZHggc2l6ZSkgKGNodW5rLXJlc3QgcykpKSlcclxuICAgICAgICAoY29ucyAoZiBpZHggKGZpcnN0IHMpKSAobWFwaSAoaW5jIGlkeCkgKHJlc3QgcykpKSkpKSldXHJcbiAgIChtYXBpIDAgY29sbCkpKSlcclxuIn0gezpzeW0gYXJyYXktbGlzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGFycmF5LWxpc3QgW10gKEFycmF5TGlzdC4gKGFycmF5KSkpXHJcbiJ9IHs6c3ltIHJhbmQtbnRoLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgcmFuZG9tIGVsZW1lbnQgb2YgdGhlIChzZXF1ZW50aWFsKSBjb2xsZWN0aW9uLiBXaWxsIGhhdmVcbiAgdGhlIHNhbWUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFzIG50aCBmb3IgdGhlIGdpdmVuXG4gIGNvbGxlY3Rpb24uIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmQtbnRoXHJcbiBcIlJldHVybiBhIHJhbmRvbSBlbGVtZW50IG9mIHRoZSAoc2VxdWVudGlhbCkgY29sbGVjdGlvbi4gV2lsbCBoYXZlXFxuICB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYXMgbnRoIGZvciB0aGUgZ2l2ZW5cXG4gIGNvbGxlY3Rpb24uXCJcclxuIFtjb2xsXVxyXG4gKG50aCBjb2xsIChyYW5kLWludCAoY291bnQgY29sbCkpKSlcclxuIn0gezpzeW0gY29tcCwgOm1ldGEgezpkb2MgIlRha2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhIGZuIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uXG4gIG9mIHRob3NlIGZucy4gIFRoZSByZXR1cm5lZCBmbiB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmdzLFxuICBhcHBsaWVzIHRoZSByaWdodG1vc3Qgb2YgZm5zIHRvIHRoZSBhcmdzLCB0aGUgbmV4dFxuICBmbiAocmlnaHQtdG8tbGVmdCkgdG8gdGhlIHJlc3VsdCwgZXRjLiIsIDphcmdsaXN0cyBbW10gW2ZdIFtmIGddIFtmIGcgaF0gW2YxIGYyIGYzICYgZnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wXHJcbiBcIlRha2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhIGZuIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uXFxuICBvZiB0aG9zZSBmbnMuICBUaGUgcmV0dXJuZWQgZm4gdGFrZXMgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJncyxcXG4gIGFwcGxpZXMgdGhlIHJpZ2h0bW9zdCBvZiBmbnMgdG8gdGhlIGFyZ3MsIHRoZSBuZXh0XFxuICBmbiAocmlnaHQtdG8tbGVmdCkgdG8gdGhlIHJlc3VsdCwgZXRjLlwiXHJcbiAoW10gaWRlbnRpdHkpXHJcbiAoW2ZdIGYpXHJcbiAoW2YgZ11cclxuICAoZm5cclxuICAgKFtdIChmIChnKSkpXHJcbiAgIChbeF0gKGYgKGcgeCkpKVxyXG4gICAoW3ggeV0gKGYgKGcgeCB5KSkpXHJcbiAgIChbeCB5IHpdIChmIChnIHggeSB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoZiAoYXBwbHkgZyB4IHkgeiBhcmdzKSkpKSlcclxuIChbZiBnIGhdXHJcbiAgKGZuXHJcbiAgIChbXSAoZiAoZyAoaCkpKSlcclxuICAgKFt4XSAoZiAoZyAoaCB4KSkpKVxyXG4gICAoW3ggeV0gKGYgKGcgKGggeCB5KSkpKVxyXG4gICAoW3ggeSB6XSAoZiAoZyAoaCB4IHkgeikpKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChmIChnIChhcHBseSBoIHggeSB6IGFyZ3MpKSkpKSlcclxuIChbZjEgZjIgZjMgJiBmc11cclxuICAobGV0XHJcbiAgIFtmcyAocmV2ZXJzZSAobGlzdCogZjEgZjIgZjMgZnMpKV1cclxuICAgKGZuXHJcbiAgICBbJiBhcmdzXVxyXG4gICAgKGxvb3BcclxuICAgICBbcmV0IChhcHBseSAoZmlyc3QgZnMpIGFyZ3MpIGZzIChuZXh0IGZzKV1cclxuICAgICAoaWYgZnMgKHJlY3VyICgoZmlyc3QgZnMpIHJldCkgKG5leHQgZnMpKSByZXQpKSkpKSlcclxuIn0gezpzeW0gYXJyYXktY2h1bmssIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbYXJyXSBbYXJyIG9mZl0gW2FyciBvZmYgZW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXktY2h1bmtcclxuIChbYXJyXSAoQXJyYXlDaHVuay4gYXJyIDAgKGFsZW5ndGggYXJyKSkpXHJcbiAoW2FyciBvZmZdIChBcnJheUNodW5rLiBhcnIgb2ZmIChhbGVuZ3RoIGFycikpKVxyXG4gKFthcnIgb2ZmIGVuZF0gKEFycmF5Q2h1bmsuIGFyciBvZmYgZW5kKSkpXHJcbiJ9IHs6c3ltIGRpc3BhdGNoLWZuLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJuIGl0J3MgZGlzcGF0Y2gtZm4uIiwgOmFyZ2xpc3RzIChbbXVsdGlmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3BhdGNoLWZuXHJcbiBcIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybiBpdCdzIGRpc3BhdGNoLWZuLlwiXHJcbiBbbXVsdGlmbl1cclxuICgtZGlzcGF0Y2gtZm4gbXVsdGlmbikpXHJcbiJ9IHs6c3ltIGJpdC1zaGlmdC1yaWdodC16ZXJvLWZpbGwsIDptZXRhIHs6ZG9jICJERVBSRUNBVEVEOiBCaXR3aXNlIHNoaWZ0IHJpZ2h0IHdpdGggemVybyBmaWxsIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsbFxyXG4gXCJERVBSRUNBVEVEOiBCaXR3aXNlIHNoaWZ0IHJpZ2h0IHdpdGggemVybyBmaWxsXCJcclxuIFt4IG5dXHJcbiAoY2xqcy5jb3JlL2JpdC1zaGlmdC1yaWdodC16ZXJvLWZpbGwgeCBuKSlcclxuIn0gezpzeW0gLWFzLXRyYW5zaWVudCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcsIHRyYW5zaWVudCB2ZXJzaW9uIG9mIHRoZSBjb2xsZWN0aW9uLCBpbiBjb25zdGFudCB0aW1lLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJRWRpdGFibGVDb2xsZWN0aW9ufSB7OnN5bSBkb3J1biwgOm1ldGEgezpkb2MgIldoZW4gbGF6eSBzZXF1ZW5jZXMgYXJlIHByb2R1Y2VkIHZpYSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNpZGVcbiAgZWZmZWN0cywgYW55IGVmZmVjdHMgb3RoZXIgdGhhbiB0aG9zZSBuZWVkZWQgdG8gcHJvZHVjZSB0aGUgZmlyc3RcbiAgZWxlbWVudCBpbiB0aGUgc2VxIGRvIG5vdCBvY2N1ciB1bnRpbCB0aGUgc2VxIGlzIGNvbnN1bWVkLiBkb3J1biBjYW5cbiAgYmUgdXNlZCB0byBmb3JjZSBhbnkgZWZmZWN0cy4gV2Fsa3MgdGhyb3VnaCB0aGUgc3VjY2Vzc2l2ZSBuZXh0cyBvZlxuICB0aGUgc2VxLCBkb2VzIG5vdCByZXRhaW4gdGhlIGhlYWQgYW5kIHJldHVybnMgbmlsLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtuIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb3J1blxyXG4gXCJXaGVuIGxhenkgc2VxdWVuY2VzIGFyZSBwcm9kdWNlZCB2aWEgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzaWRlXFxuICBlZmZlY3RzLCBhbnkgZWZmZWN0cyBvdGhlciB0aGFuIHRob3NlIG5lZWRlZCB0byBwcm9kdWNlIHRoZSBmaXJzdFxcbiAgZWxlbWVudCBpbiB0aGUgc2VxIGRvIG5vdCBvY2N1ciB1bnRpbCB0aGUgc2VxIGlzIGNvbnN1bWVkLiBkb3J1biBjYW5cXG4gIGJlIHVzZWQgdG8gZm9yY2UgYW55IGVmZmVjdHMuIFdhbGtzIHRocm91Z2ggdGhlIHN1Y2Nlc3NpdmUgbmV4dHMgb2ZcXG4gIHRoZSBzZXEsIGRvZXMgbm90IHJldGFpbiB0aGUgaGVhZCBhbmQgcmV0dXJucyBuaWwuXCJcclxuIChbY29sbF0gKHdoZW4tbGV0IFtzIChzZXEgY29sbCldIChyZWN1ciAobmV4dCBzKSkpKVxyXG4gKFtuIGNvbGxdXHJcbiAgKHdoZW4gKGFuZCAoc2VxIGNvbGwpIChwb3M/IG4pKSAocmVjdXIgKGRlYyBuKSAobmV4dCBjb2xsKSkpKSlcclxuIn0gezpzeW0gcHItc2VxdWVudGlhbC13cml0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbd3JpdGVyIHByaW50LW9uZSBiZWdpbiBzZXAgZW5kIG9wdHMgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByLXNlcXVlbnRpYWwtd3JpdGVyXHJcbiBbd3JpdGVyIHByaW50LW9uZSBiZWdpbiBzZXAgZW5kIG9wdHMgY29sbF1cclxuIChiaW5kaW5nXHJcbiAgWypwcmludC1sZXZlbCogKHdoZW4tbm90IChuaWw/ICpwcmludC1sZXZlbCopIChkZWMgKnByaW50LWxldmVsKikpXVxyXG4gIChpZlxyXG4gICAoYW5kIChub3QgKG5pbD8gKnByaW50LWxldmVsKikpIChuZWc/ICpwcmludC1sZXZlbCopKVxyXG4gICAoLXdyaXRlIHdyaXRlciBcIiNcIilcclxuICAgKGRvXHJcbiAgICAoLXdyaXRlIHdyaXRlciBiZWdpbilcclxuICAgIChpZlxyXG4gICAgICh6ZXJvPyAoOnByaW50LWxlbmd0aCBvcHRzKSlcclxuICAgICAod2hlbiAoc2VxIGNvbGwpICgtd3JpdGUgd3JpdGVyIChvciAoOm1vcmUtbWFya2VyIG9wdHMpIFwiLi4uXCIpKSlcclxuICAgICAoZG9cclxuICAgICAgKHdoZW4gKHNlcSBjb2xsKSAocHJpbnQtb25lIChmaXJzdCBjb2xsKSB3cml0ZXIgb3B0cykpXHJcbiAgICAgIChsb29wXHJcbiAgICAgICBbY29sbCAobmV4dCBjb2xsKSBuIChkZWMgKDpwcmludC1sZW5ndGggb3B0cykpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGFuZCBjb2xsIChvciAobmlsPyBuKSAobm90ICh6ZXJvPyBuKSkpKVxyXG4gICAgICAgIChkb1xyXG4gICAgICAgICAoLXdyaXRlIHdyaXRlciBzZXApXHJcbiAgICAgICAgIChwcmludC1vbmUgKGZpcnN0IGNvbGwpIHdyaXRlciBvcHRzKVxyXG4gICAgICAgICAocmVjdXIgKG5leHQgY29sbCkgKGRlYyBuKSkpXHJcbiAgICAgICAgKHdoZW5cclxuICAgICAgICAgKGFuZCAoc2VxIGNvbGwpICh6ZXJvPyBuKSlcclxuICAgICAgICAgKC13cml0ZSB3cml0ZXIgc2VwKVxyXG4gICAgICAgICAoLXdyaXRlIHdyaXRlciAob3IgKDptb3JlLW1hcmtlciBvcHRzKSBcIi4uLlwiKSkpKSkpKVxyXG4gICAgKC13cml0ZSB3cml0ZXIgZW5kKSkpKSlcclxuIn0gezpzeW0gc2ltcGxlLXN5bWJvbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIHdpdGhvdXQgYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2ltcGxlLXN5bWJvbD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCB3aXRob3V0IGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGFuZCAoc3ltYm9sPyB4KSAobmlsPyAobmFtZXNwYWNlIHgpKSkpXHJcbiJ9IHs6c3ltIElJbmRleGVkLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNvbGxlY3Rpb25zIHRvIHByb3ZpZGUgaW5kZXhlZC1iYXNlZCBhY2Nlc3MgdG8gdGhlaXIgaXRlbXMuIn0sIDptZXRob2RzICgtbnRoKX0gezpzeW0gZGlzaiwgOm1ldGEgezpkb2MgImRpc2pbb2luXS4gUmV0dXJucyBhIG5ldyBzZXQgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXRcbiAgZG9lcyBub3QgY29udGFpbiBrZXkocykuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW2NvbGwga10gW2NvbGwgayAmIGtzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzalxyXG4gXCJkaXNqW29pbl0uIFJldHVybnMgYSBuZXcgc2V0IG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0XFxuICBkb2VzIG5vdCBjb250YWluIGtleShzKS5cIlxyXG4gKFtjb2xsXSBjb2xsKVxyXG4gKFtjb2xsIGtdICh3aGVuLW5vdCAobmlsPyBjb2xsKSAoLWRpc2pvaW4gY29sbCBrKSkpXHJcbiAoW2NvbGwgayAmIGtzXVxyXG4gICh3aGVuLW5vdFxyXG4gICAobmlsPyBjb2xsKVxyXG4gICAobGV0XHJcbiAgICBbcmV0IChkaXNqIGNvbGwgayldXHJcbiAgICAoaWYga3MgKHJlY3VyIHJldCAoZmlyc3Qga3MpIChuZXh0IGtzKSkgcmV0KSkpKSlcclxuIn0gezpzeW0gSVByaW50V2l0aFdyaXRlciwgOm1ldGEgezpkb2MgIlRoZSBvbGQgSVByaW50YWJsZSBwcm90b2NvbCdzIGltcGxlbWVudGF0aW9uIGNvbnNpc3RlZCBvZiBidWlsZGluZyBhIGdpYW50XG4gICBsaXN0IG9mIHN0cmluZ3MgdG8gY29uY2F0ZW5hdGUuICBUaGlzIGludm9sdmVkIGxvdHMgb2YgY29uY2F0IGNhbGxzLFxuICAgaW50ZXJtZWRpYXRlIHZlY3RvcnMsIGFuZCBsYXp5LXNlcXMsIGFuZCB3YXMgdmVyeSBzbG93IGluIHNvbWUgb2xkZXIgSlNcbiAgIGVuZ2luZXMuICBJUHJpbnRXaXRoV3JpdGVyIGltcGxlbWVudHMgcHJpbnRpbmcgdmlhIHRoZSBJV3JpdGVyIHByb3RvY29sLCBzbyBpdFxuICAgYmUgaW1wbGVtZW50ZWQgZWZmaWNpZW50bHkgaW4gdGVybXMgb2YgZS5nLiBhIFN0cmluZ0J1ZmZlciBhcHBlbmQuIn0sIDptZXRob2RzICgtcHItd3JpdGVyKX0gezpzeW0gSVZlY3RvciwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdmVjdG9yIGZ1bmN0aW9uYWxpdHkgdG8gY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtYXNzb2Mtbil9IHs6c3ltIElJdGVyYWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBpdGVyYXRpbmcgb3ZlciBhIGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtaXRlcmF0b3IpfSB7OnN5bSBldmFsLCA6bWV0YSB7OmRvYyAiRXZhbHVhdGVzIHRoZSBmb3JtIGRhdGEgc3RydWN0dXJlIChub3QgdGV4dCEpIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gIERlbGVnYXRlcyB0byBjbGpzLmNvcmUvKmV2YWwqLiBJbnRlbmRlZCBmb3IgdXNlIGluIHNlbGYtaG9zdGVkIENsb2p1cmVTY3JpcHQsXG4gIHdoaWNoIHNldHMgdXAgYW4gaW1wbGVtZW50YXRpb24gb2YgY2xqcy5jb3JlLypldmFsKiBmb3IgdGhhdCBlbnZpcm9ubWVudC4iLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXZhbFxyXG4gXCJFdmFsdWF0ZXMgdGhlIGZvcm0gZGF0YSBzdHJ1Y3R1cmUgKG5vdCB0ZXh0ISkgYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cXG4gIERlbGVnYXRlcyB0byBjbGpzLmNvcmUvKmV2YWwqLiBJbnRlbmRlZCBmb3IgdXNlIGluIHNlbGYtaG9zdGVkIENsb2p1cmVTY3JpcHQsXFxuICB3aGljaCBzZXRzIHVwIGFuIGltcGxlbWVudGF0aW9uIG9mIGNsanMuY29yZS8qZXZhbCogZm9yIHRoYXQgZW52aXJvbm1lbnQuXCJcclxuIFtmb3JtXVxyXG4gKCpldmFsKiBmb3JtKSlcclxuIn0gezpzeW0gY29ucywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgc2VxIHdoZXJlIHggaXMgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIGNvbGwgaXMgdGhlIHJlc3QuIiwgOmFyZ2xpc3RzIChbeCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uc1xyXG4gXCJSZXR1cm5zIGEgbmV3IHNlcSB3aGVyZSB4IGlzIHRoZSBmaXJzdCBlbGVtZW50IGFuZCBjb2xsIGlzIHRoZSByZXN0LlwiXHJcbiBbeCBjb2xsXVxyXG4gKGNvbmRcclxuICAobmlsPyBjb2xsKVxyXG4gIChMaXN0LiBuaWwgeCBuaWwgMSBuaWwpXHJcbiAgKGltcGxlbWVudHM/IElTZXEgY29sbClcclxuICAoQ29ucy4gbmlsIHggY29sbCBuaWwpXHJcbiAgOmRlZmF1bHRcclxuICAoQ29ucy4gbmlsIHggKHNlcSBjb2xsKSBuaWwpKSlcclxuIn0gezpzeW0gZmxvYXRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGZsb2F0cyBbeF0geClcclxuIn0gezpzeW0gcG9zPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgZ3JlYXRlciB0aGFuIHplcm8sIGVsc2UgZmFsc2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9zP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBlbHNlIGZhbHNlXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS9wb3M/IHgpKVxyXG4ifSB7OnN5bSBmbmlsLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmdW5jdGlvbiBmLCBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgZiwgcmVwbGFjaW5nXG4gIGEgbmlsIGZpcnN0IGFyZ3VtZW50IHRvIGYgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWUgeC4gSGlnaGVyIGFyaXR5XG4gIHZlcnNpb25zIGNhbiByZXBsYWNlIGFyZ3VtZW50cyBpbiB0aGUgc2Vjb25kIGFuZCB0aGlyZFxuICBwb3NpdGlvbnMgKHksIHopLiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGYgY2FuIHRha2UgYW55IG51bWJlciBvZlxuICBhcmd1bWVudHMsIG5vdCBqdXN0IHRoZSBvbmUocykgYmVpbmcgbmlsLXBhdGNoZWQuIiwgOmFyZ2xpc3RzIFtbZiB4XSBbZiB4IHldIFtmIHggeSB6XV19LCA6c291cmNlICIoZGVmblxyXG4gZm5pbFxyXG4gXCJUYWtlcyBhIGZ1bmN0aW9uIGYsIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYWxscyBmLCByZXBsYWNpbmdcXG4gIGEgbmlsIGZpcnN0IGFyZ3VtZW50IHRvIGYgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWUgeC4gSGlnaGVyIGFyaXR5XFxuICB2ZXJzaW9ucyBjYW4gcmVwbGFjZSBhcmd1bWVudHMgaW4gdGhlIHNlY29uZCBhbmQgdGhpcmRcXG4gIHBvc2l0aW9ucyAoeSwgeikuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gZiBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mXFxuICBhcmd1bWVudHMsIG5vdCBqdXN0IHRoZSBvbmUocykgYmVpbmcgbmlsLXBhdGNoZWQuXCJcclxuIChbZiB4XVxyXG4gIChmblxyXG4gICAoW2FdIChmIChpZiAobmlsPyBhKSB4IGEpKSlcclxuICAgKFthIGJdIChmIChpZiAobmlsPyBhKSB4IGEpIGIpKVxyXG4gICAoW2EgYiBjXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSBiIGMpKVxyXG4gICAoW2EgYiBjICYgZHNdIChhcHBseSBmIChpZiAobmlsPyBhKSB4IGEpIGIgYyBkcykpKSlcclxuIChbZiB4IHldXHJcbiAgKGZuXHJcbiAgIChbYSBiXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSAoaWYgKG5pbD8gYikgeSBiKSkpXHJcbiAgIChbYSBiIGNdIChmIChpZiAobmlsPyBhKSB4IGEpIChpZiAobmlsPyBiKSB5IGIpIGMpKVxyXG4gICAoW2EgYiBjICYgZHNdIChhcHBseSBmIChpZiAobmlsPyBhKSB4IGEpIChpZiAobmlsPyBiKSB5IGIpIGMgZHMpKSkpXHJcbiAoW2YgeCB5IHpdXHJcbiAgKGZuXHJcbiAgIChbYSBiXSAoZiAoaWYgKG5pbD8gYSkgeCBhKSAoaWYgKG5pbD8gYikgeSBiKSkpXHJcbiAgIChbYSBiIGNdIChmIChpZiAobmlsPyBhKSB4IGEpIChpZiAobmlsPyBiKSB5IGIpIChpZiAobmlsPyBjKSB6IGMpKSlcclxuICAgKFthIGIgYyAmIGRzXVxyXG4gICAgKGFwcGx5XHJcbiAgICAgZlxyXG4gICAgIChpZiAobmlsPyBhKSB4IGEpXHJcbiAgICAgKGlmIChuaWw/IGIpIHkgYilcclxuICAgICAoaWYgKG5pbD8gYykgeiBjKVxyXG4gICAgIGRzKSkpKSlcclxuIn0gezpzeW0gbWVyZ2Utd2l0aCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgdGhhdCBjb25zaXN0cyBvZiB0aGUgcmVzdCBvZiB0aGUgbWFwcyBjb25qLWVkIG9udG9cbiAgdGhlIGZpcnN0LiAgSWYgYSBrZXkgb2NjdXJzIGluIG1vcmUgdGhhbiBvbmUgbWFwLCB0aGUgbWFwcGluZyhzKVxuICBmcm9tIHRoZSBsYXR0ZXIgKGxlZnQtdG8tcmlnaHQpIHdpbGwgYmUgY29tYmluZWQgd2l0aCB0aGUgbWFwcGluZyBpblxuICB0aGUgcmVzdWx0IGJ5IGNhbGxpbmcgKGYgdmFsLWluLXJlc3VsdCB2YWwtaW4tbGF0dGVyKS4iLCA6YXJnbGlzdHMgKFtmICYgbWFwc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLXdpdGhcclxuIFwiUmV0dXJucyBhIG1hcCB0aGF0IGNvbnNpc3RzIG9mIHRoZSByZXN0IG9mIHRoZSBtYXBzIGNvbmotZWQgb250b1xcbiAgdGhlIGZpcnN0LiAgSWYgYSBrZXkgb2NjdXJzIGluIG1vcmUgdGhhbiBvbmUgbWFwLCB0aGUgbWFwcGluZyhzKVxcbiAgZnJvbSB0aGUgbGF0dGVyIChsZWZ0LXRvLXJpZ2h0KSB3aWxsIGJlIGNvbWJpbmVkIHdpdGggdGhlIG1hcHBpbmcgaW5cXG4gIHRoZSByZXN1bHQgYnkgY2FsbGluZyAoZiB2YWwtaW4tcmVzdWx0IHZhbC1pbi1sYXR0ZXIpLlwiXHJcbiBbZiAmIG1hcHNdXHJcbiAod2hlblxyXG4gIChzb21lIGlkZW50aXR5IG1hcHMpXHJcbiAgKGxldFxyXG4gICBbbWVyZ2UtZW50cnlcclxuICAgIChmblxyXG4gICAgIFttIGVdXHJcbiAgICAgKGxldFxyXG4gICAgICBbayAoa2V5IGUpIHYgKHZhbCBlKV1cclxuICAgICAgKGlmIChjb250YWlucz8gbSBrKSAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSB2KSkgKGFzc29jIG0gayB2KSkpKVxyXG4gICAgbWVyZ2UyXHJcbiAgICAoZm4gW20xIG0yXSAocmVkdWNlIG1lcmdlLWVudHJ5IChvciBtMSB7fSkgKHNlcSBtMikpKV1cclxuICAgKHJlZHVjZSBtZXJnZTIgbWFwcykpKSlcclxuIn0gezpzeW0gbnRocmVzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG50aCByZXN0IG9mIGNvbGwsIGNvbGwgd2hlbiBuIGlzIDAuIiwgOmFyZ2xpc3RzIChbY29sbCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnRocmVzdFxyXG4gXCJSZXR1cm5zIHRoZSBudGggcmVzdCBvZiBjb2xsLCBjb2xsIHdoZW4gbiBpcyAwLlwiXHJcbiBbY29sbCBuXVxyXG4gKGxvb3BcclxuICBbbiBuIHhzIGNvbGxdXHJcbiAgKGlmLWxldCBbeHMgKGFuZCAocG9zPyBuKSAoc2VxIHhzKSldIChyZWN1ciAoZGVjIG4pIChyZXN0IHhzKSkgeHMpKSlcclxuIn0gezpzeW0gKndhcm4tb24taW5mZXIqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqd2Fybi1vbi1pbmZlciogZmFsc2UpXHJcbiJ9IHs6c3ltIC1maW5kLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWFwIGVudHJ5IGZvciBrZXksIG9yIG5pbCBpZiBrZXkgbm90IHByZXNlbnQuIiwgOmFyZ2xpc3RzIChbY29sbCBrXSl9LCA6cHJvdG9jb2wgSUZpbmR9IHs6c3ltIHNlcXVlbnRpYWw/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElTZXF1ZW50aWFsIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlcXVlbnRpYWw/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJU2VxdWVudGlhbFwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElTZXF1ZW50aWFsIHgpKVxyXG4ifSB7OnN5bSBtMy1taXgtSDEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaDEgazFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtMy1taXgtSDFcclxuIFtoMSBrMV1cclxuIChpbnRcclxuICAoLT5cclxuICAgKGludCBoMSlcclxuICAgKGJpdC14b3IgKGludCBrMSkpXHJcbiAgIChpbnQtcm90YXRlLWxlZnQgMTMpXHJcbiAgIChpbXVsIDUpXHJcbiAgICgrIChpbnQgMzg2NDI5MjE5NikpKSkpXHJcbiJ9IHs6c3ltIHByaW0tc2VxLCA6bWV0YSB7OmRvYyAiQ3JlYXRlIHNlcSBmcm9tIGEgcHJpbWl0aXZlIEphdmFTY3JpcHQgQXJyYXktbGlrZS4iLCA6YXJnbGlzdHMgW1twcmltXSBbcHJpbSBpXV19LCA6c291cmNlICIoZGVmblxyXG4gcHJpbS1zZXFcclxuIFwiQ3JlYXRlIHNlcSBmcm9tIGEgcHJpbWl0aXZlIEphdmFTY3JpcHQgQXJyYXktbGlrZS5cIlxyXG4gKFtwcmltXSAocHJpbS1zZXEgcHJpbSAwKSlcclxuIChbcHJpbSBpXSAod2hlbiAoPCBpIChhbGVuZ3RoIHByaW0pKSAoSW5kZXhlZFNlcS4gcHJpbSBpIG5pbCkpKSlcclxuIn0gezpzeW0gKnByaW50LWxldmVsKiwgOm1ldGEgezpkb2MgIipwcmludC1sZXZlbCogY29udHJvbHMgaG93IG1hbnkgbGV2ZWxzIGRlZXAgdGhlIHByaW50ZXIgd2lsbFxuICBwcmludCBuZXN0ZWQgb2JqZWN0cy4gSWYgaXQgaXMgYm91bmQgdG8gbG9naWNhbCBmYWxzZSwgdGhlcmUgaXMgbm9cbiAgbGltaXQuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSBib3VuZCB0byBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIG1heGltdW1cbiAgbGV2ZWwgdG8gcHJpbnQuIEVhY2ggYXJndW1lbnQgdG8gcHJpbnQgaXMgYXQgbGV2ZWwgMDsgaWYgYW4gYXJndW1lbnQgaXMgYVxuICBjb2xsZWN0aW9uLCBpdHMgaXRlbXMgYXJlIGF0IGxldmVsIDE7IGFuZCBzbyBvbi4gSWYgYW4gb2JqZWN0IGlzIGFcbiAgY29sbGVjdGlvbiBhbmQgaXMgYXQgYSBsZXZlbCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIGJvdW5kIHRvXG4gICpwcmludC1sZXZlbCosIHRoZSBwcmludGVyIHByaW50cyAnIycgdG8gcmVwcmVzZW50IGl0LiBUaGUgcm9vdCBiaW5kaW5nXG4gIGlzIG5pbCBpbmRpY2F0aW5nIG5vIGxpbWl0LiJ9LCA6c291cmNlICIoZGVmICpwcmludC1sZXZlbCogbmlsKVxyXG4ifSB7OnN5bSBzaHVmZmxlLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgcmFuZG9tIHBlcm11dGF0aW9uIG9mIGNvbGwiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2h1ZmZsZVxyXG4gXCJSZXR1cm4gYSByYW5kb20gcGVybXV0YXRpb24gb2YgY29sbFwiXHJcbiBbY29sbF1cclxuIChsZXQgW2EgKHRvLWFycmF5IGNvbGwpXSAoZ2FycmF5L3NodWZmbGUgYSkgKHZlYyBhKSkpXHJcbiJ9IHs6c3ltIGhhc2gta2V5d29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmbiBoYXNoLWtleXdvcmQgW2tdIChpbnQgKCsgKGhhc2gtc3ltYm9sIGspIDI2NTQ0MzU3NjkpKSlcclxuIn0gezpzeW0gZmluZCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1hcCBlbnRyeSBmb3Iga2V5LCBvciBuaWwgaWYga2V5IG5vdCBwcmVzZW50LiIsIDphcmdsaXN0cyAoW2NvbGwga10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmRcclxuIFwiUmV0dXJucyB0aGUgbWFwIGVudHJ5IGZvciBrZXksIG9yIG5pbCBpZiBrZXkgbm90IHByZXNlbnQuXCJcclxuIFtjb2xsIGtdXHJcbiAoaWZcclxuICAoaWZpbmQ/IGNvbGwpXHJcbiAgKC1maW5kIGNvbGwgaylcclxuICAod2hlblxyXG4gICAoYW5kIChub3QgKG5pbD8gY29sbCkpIChhc3NvY2lhdGl2ZT8gY29sbCkgKGNvbnRhaW5zPyBjb2xsIGspKVxyXG4gICAoTWFwRW50cnkuIGsgKGdldCBjb2xsIGspIG5pbCkpKSlcclxuIn0gezpzeW0gYWxlbmd0aCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkuIFdvcmtzIG9uIGFycmF5cyBvZiBhbGwgdHlwZXMuIiwgOmFyZ2xpc3RzIChbYXJyYXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbGVuZ3RoXHJcbiBcIlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkuIFdvcmtzIG9uIGFycmF5cyBvZiBhbGwgdHlwZXMuXCJcclxuIFthcnJheV1cclxuIChjbGpzLmNvcmUvYWxlbmd0aCBhcnJheSkpXHJcbiJ9IHs6c3ltIGJpdC14b3IsIDptZXRhIHs6ZG9jICJCaXR3aXNlIGV4Y2x1c2l2ZSBvciIsIDphcmdsaXN0cyBbW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQteG9yXHJcbiBcIkJpdHdpc2UgZXhjbHVzaXZlIG9yXCJcclxuIChbeCB5XSAoY2xqcy5jb3JlL2JpdC14b3IgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBiaXQteG9yIChjbGpzLmNvcmUvYml0LXhvciB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gdW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0LCA6bWV0YSB7OmRvYyAiQml0d2lzZSBzaGlmdCByaWdodCB3aXRoIHplcm8gZmlsbCIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodFxyXG4gXCJCaXR3aXNlIHNoaWZ0IHJpZ2h0IHdpdGggemVybyBmaWxsXCJcclxuIFt4IG5dXHJcbiAoY2xqcy5jb3JlL3Vuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCB4IG4pKVxyXG4ifSB7OnN5bSBuZWc/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG51bSBpcyBsZXNzIHRoYW4gemVybywgZWxzZSBmYWxzZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZWc/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgbGVzcyB0aGFuIHplcm8sIGVsc2UgZmFsc2VcIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL25lZz8geCkpXHJcbiJ9IHs6c3ltIC1yZW1vdmUtbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mIGRpc3BhdGNoLXZhbF0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBqcy1pbnZva2UsIDptZXRhIHs6ZG9jICJJbnZva2UgSmF2YVNjcmlwdCBvYmplY3QgbWV0aG9kIHZpYSBzdHJpbmcuIE5lZWRlZCB3aGVuIHRoZVxuICBzdHJpbmcgaXMgbm90IGEgdmFsaWQgdW5xdW90ZWQgcHJvcGVydHkgbmFtZS4iLCA6YXJnbGlzdHMgKFtvYmogcyAmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1pbnZva2VcclxuIFwiSW52b2tlIEphdmFTY3JpcHQgb2JqZWN0IG1ldGhvZCB2aWEgc3RyaW5nLiBOZWVkZWQgd2hlbiB0aGVcXG4gIHN0cmluZyBpcyBub3QgYSB2YWxpZCB1bnF1b3RlZCBwcm9wZXJ0eSBuYW1lLlwiXHJcbiBbb2JqIHMgJiBhcmdzXVxyXG4gKC5hcHBseSAodW5jaGVja2VkLWdldCBvYmogcykgb2JqIChpbnRvLWFycmF5IGFyZ3MpKSlcclxuIn0gezpzeW0gbTMtbWl4LUsxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2sxXSl9LCA6c291cmNlICIoZGVmblxyXG4gbTMtbWl4LUsxXHJcbiBbazFdXHJcbiAoLT4gKGludCBrMSkgKGltdWwgbTMtQzEpIChpbnQtcm90YXRlLWxlZnQgMTUpIChpbXVsIG0zLUMyKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1mbG9hdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtZmxvYXQgW3hdIHgpXHJcbiJ9IHs6c3ltIHVuZGVmaW5lZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpZGVudGljYWwgdG8gdGhlIEphdmFTY3JpcHQgdW5kZWZpbmVkIHZhbHVlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmRlZmluZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlkZW50aWNhbCB0byB0aGUgSmF2YVNjcmlwdCB1bmRlZmluZWQgdmFsdWUuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS91bmRlZmluZWQ/IHgpKVxyXG4ifSB7OnN5bSBJTWV0YSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhY2Nlc3NpbmcgdGhlIG1ldGFkYXRhIG9mIGFuIG9iamVjdC4ifSwgOm1ldGhvZHMgKC1tZXRhKX0gezpzeW0gcmVkdWNlZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byByZWR1Y2VkIiwgOmFyZ2xpc3RzIChbcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIHJlZHVjZWRcIlxyXG4gW3JdXHJcbiAoaW5zdGFuY2U/IFJlZHVjZWQgcikpXHJcbiJ9IHs6c3ltIGRpc2ohLCA6bWV0YSB7OmRvYyAiZGlzaltvaW5dLiBSZXR1cm5zIGEgdHJhbnNpZW50IHNldCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdFxuICBkb2VzIG5vdCBjb250YWluIGtleShzKS4iLCA6YXJnbGlzdHMgW1t0Y29sbCB2YWxdIFt0Y29sbCB2YWwgJiB2YWxzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzaiFcclxuIFwiZGlzaltvaW5dLiBSZXR1cm5zIGEgdHJhbnNpZW50IHNldCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdFxcbiAgZG9lcyBub3QgY29udGFpbiBrZXkocykuXCJcclxuIChbdGNvbGwgdmFsXSAoLWRpc2pvaW4hIHRjb2xsIHZhbCkpXHJcbiAoW3Rjb2xsIHZhbCAmIHZhbHNdXHJcbiAgKGxldFxyXG4gICBbbnRjb2xsICgtZGlzam9pbiEgdGNvbGwgdmFsKV1cclxuICAgKGlmIHZhbHMgKHJlY3VyIG50Y29sbCAoZmlyc3QgdmFscykgKG5leHQgdmFscykpIG50Y29sbCkpKSlcclxuIn0gezpzeW0gLWxvb2t1cCwgOm1ldGEgezpkb2MgIlVzZSBrIHRvIGxvb2sgdXAgYSB2YWx1ZSBpbiBvLiBJZiBub3QtZm91bmQgaXMgc3VwcGxpZWQgYW5kIGsgaXMgbm90XG4gICAgIGEgdmFsaWQgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbG9vayB1cCwgbm90LWZvdW5kIGlzIHJldHVybmVkLiIsIDphcmdsaXN0cyAoW28ga10gW28gayBub3QtZm91bmRdKX0sIDpwcm90b2NvbCBJTG9va3VwfSB7OnN5bSBmbG9hdD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgZm9yIEphdmFTY3JpcHQgbnVtYmVycywgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbG9hdD9cclxuIFwiUmV0dXJucyB0cnVlIGZvciBKYXZhU2NyaXB0IG51bWJlcnMsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAobnVtYmVyPyB4KSlcclxuIn0gezpzeW0gSUNsb25lYWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjbG9uaW5nIGEgdmFsdWUuIn0sIDptZXRob2RzICgtY2xvbmUpfSB7OnN5bSBJRW5jb2RlQ2xvanVyZSwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKC1qcy0+Y2xqKX0gezpzeW0gYm9vbGVhbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYm9vbGVhbnMgW3hdIHgpXHJcbiJ9IHs6c3ltIGludC1hcnJheSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gYXJyYXkgb2YgaW50cy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxuICB3aXRoIENsb2p1cmUuIiwgOmFyZ2xpc3RzIFtbc2l6ZS1vci1zZXFdIFtzaXplIGluaXQtdmFsLW9yLXNlcV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludC1hcnJheVxyXG4gXCJDcmVhdGVzIGFuIGFycmF5IG9mIGludHMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcXG4gIHdpdGggQ2xvanVyZS5cIlxyXG4gKFtzaXplLW9yLXNlcV1cclxuICAoaWZcclxuICAgKG51bWJlcj8gc2l6ZS1vci1zZXEpXHJcbiAgIChpbnQtYXJyYXkgc2l6ZS1vci1zZXEgbmlsKVxyXG4gICAoaW50by1hcnJheSBzaXplLW9yLXNlcSkpKVxyXG4gKFtzaXplIGluaXQtdmFsLW9yLXNlcV1cclxuICAobGV0XHJcbiAgIFthIChtYWtlLWFycmF5IHNpemUpXVxyXG4gICAoaWZcclxuICAgIChzZXE/IGluaXQtdmFsLW9yLXNlcSlcclxuICAgIChsZXRcclxuICAgICBbcyAoc2VxIGluaXQtdmFsLW9yLXNlcSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW2kgMCBzIHNdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCBzICg8IGkgc2l6ZSkpXHJcbiAgICAgICAoZG8gKGFzZXQgYSBpIChmaXJzdCBzKSkgKHJlY3VyIChpbmMgaSkgKG5leHQgcykpKVxyXG4gICAgICAgYSkpKVxyXG4gICAgKGRvIChkb3RpbWVzIFtpIHNpemVdIChhc2V0IGEgaSBpbml0LXZhbC1vci1zZXEpKSBhKSkpKSlcclxuIn0gezpzeW0gc2V0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJU2V0IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElTZXRcIlxyXG4gW3hdXHJcbiAoaWYgKG5pbD8geCkgZmFsc2UgKHNhdGlzZmllcz8gSVNldCB4KSkpXHJcbiJ9IHs6c3ltIGl0ZXJhYmxlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaW1wbGVtZW50cyBJSXRlcmFibGUgcHJvdG9jb2wuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGl0ZXJhYmxlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUl0ZXJhYmxlIHByb3RvY29sLlwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElJdGVyYWJsZSB4KSlcclxuIn0gezpzeW0gY2F0LCA6bWV0YSB7OmRvYyAiQSB0cmFuc2R1Y2VyIHdoaWNoIGNvbmNhdGVuYXRlcyB0aGUgY29udGVudHMgb2YgZWFjaCBpbnB1dCwgd2hpY2ggbXVzdCBiZSBhXG4gIGNvbGxlY3Rpb24sIGludG8gdGhlIHJlZHVjdGlvbi4iLCA6YXJnbGlzdHMgKFtyZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhdFxyXG4gXCJBIHRyYW5zZHVjZXIgd2hpY2ggY29uY2F0ZW5hdGVzIHRoZSBjb250ZW50cyBvZiBlYWNoIGlucHV0LCB3aGljaCBtdXN0IGJlIGFcXG4gIGNvbGxlY3Rpb24sIGludG8gdGhlIHJlZHVjdGlvbi5cIlxyXG4gezphZGRlZCBcIjEuN1wifVxyXG4gW3JmXVxyXG4gKGxldFxyXG4gIFtyZjEgKHByZXNlcnZpbmctcmVkdWNlZCByZildXHJcbiAgKGZuXHJcbiAgIChbXSAocmYpKVxyXG4gICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgIChbcmVzdWx0IGlucHV0XSAocmVkdWNlIHJmMSByZXN1bHQgaW5wdXQpKSkpKVxyXG4ifSB7OnN5bSAtcHItd3JpdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW28gd3JpdGVyIG9wdHNdKX0sIDpwcm90b2NvbCBJUHJpbnRXaXRoV3JpdGVyfSB7OnN5bSBmbHVzaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGZsdXNoIFtdIG5pbClcclxuIn0gezpzeW0gc2V0LWZyb20taW5kZXhlZC1zZXEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXNlcV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldC1mcm9tLWluZGV4ZWQtc2VxXHJcbiBbaXNlcV1cclxuIChsZXRcclxuICBbYXJyXHJcbiAgICguLWFyciBpc2VxKVxyXG4gICByZXRcclxuICAgKGFyZWR1Y2UgYXJyIGkgcmVzICgtYXMtdHJhbnNpZW50ICN7fSkgKC1jb25qISByZXMgKGFnZXQgYXJyIGkpKSldXHJcbiAgKC1wZXJzaXN0ZW50ISByZXQpKSlcclxuIn0gezpzeW0gdGFrZS13aGlsZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHN1Y2Nlc3NpdmUgaXRlbXMgZnJvbSBjb2xsIHdoaWxlXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1twcmVkXSBbcHJlZCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gdGFrZS13aGlsZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBzdWNjZXNzaXZlIGl0ZW1zIGZyb20gY29sbCB3aGlsZVxcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtwcmVkXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChmblxyXG4gICAgKFtdIChyZikpXHJcbiAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAoaWYgKHByZWQgaW5wdXQpIChyZiByZXN1bHQgaW5wdXQpIChyZWR1Y2VkIHJlc3VsdCkpKSkpKVxyXG4gKFtwcmVkIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICh3aGVuXHJcbiAgICAgKHByZWQgKGZpcnN0IHMpKVxyXG4gICAgIChjb25zIChmaXJzdCBzKSAodGFrZS13aGlsZSBwcmVkIChyZXN0IHMpKSkpKSkpKVxyXG4ifSB7OnN5bSB2YXJ5LW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBvYmosIHdpdGhcbiAgKGFwcGx5IGYgKG1ldGEgb2JqKSBhcmdzKSBhcyBpdHMgbWV0YWRhdGEuIiwgOmFyZ2xpc3RzIFtbb2JqIGZdIFtvYmogZiBhXSBbb2JqIGYgYSBiXSBbb2JqIGYgYSBiIGNdIFtvYmogZiBhIGIgYyBkXSBbb2JqIGYgYSBiIGMgZCAmIGFyZ3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YXJ5LW1ldGFcclxuIFwiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgb2JqLCB3aXRoXFxuICAoYXBwbHkgZiAobWV0YSBvYmopIGFyZ3MpIGFzIGl0cyBtZXRhZGF0YS5cIlxyXG4gKFtvYmogZl0gKHdpdGgtbWV0YSBvYmogKGYgKG1ldGEgb2JqKSkpKVxyXG4gKFtvYmogZiBhXSAod2l0aC1tZXRhIG9iaiAoZiAobWV0YSBvYmopIGEpKSlcclxuIChbb2JqIGYgYSBiXSAod2l0aC1tZXRhIG9iaiAoZiAobWV0YSBvYmopIGEgYikpKVxyXG4gKFtvYmogZiBhIGIgY10gKHdpdGgtbWV0YSBvYmogKGYgKG1ldGEgb2JqKSBhIGIgYykpKVxyXG4gKFtvYmogZiBhIGIgYyBkXSAod2l0aC1tZXRhIG9iaiAoZiAobWV0YSBvYmopIGEgYiBjIGQpKSlcclxuIChbb2JqIGYgYSBiIGMgZCAmIGFyZ3NdXHJcbiAgKHdpdGgtbWV0YSBvYmogKGFwcGx5IGYgKG1ldGEgb2JqKSBhIGIgYyBkIGFyZ3MpKSkpXHJcbiJ9IHs6c3ltIElOZXh0LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFjY2Vzc2luZyB0aGUgbmV4dCBpdGVtcyBvZiBhIGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtbmV4dCl9IHs6c3ltIGlzX3Byb3RvXywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBpc19wcm90b18gW3hdIChpZGVudGljYWw/ICguLXByb3RvdHlwZSAoLi1jb25zdHJ1Y3RvciB4KSkgeCkpXHJcbiJ9IHs6c3ltIFNUQVJULCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBTVEFSVCAjanMge30pXHJcbiJ9IHs6c3ltIElDb3VudGVkLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB0aGUgYWJpbGl0eSB0byBjb3VudCBhIGNvbGxlY3Rpb24gaW4gY29uc3RhbnQgdGltZS4ifSwgOm1ldGhvZHMgKC1jb3VudCl9IHs6c3ltIElNYXBFbnRyeSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBleGFtaW5pbmcgYSBtYXAgZW50cnkuIn0sIDptZXRob2RzICgta2V5IC12YWwpfSB7OnN5bSA8PSwgOm1ldGEgezpkb2MgIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IG5vbi1kZWNyZWFzaW5nIG9yZGVyLFxuICBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA8PVxyXG4gXCJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBub24tZGVjcmVhc2luZyBvcmRlcixcXG4gIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvPD0geCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKGNsanMuY29yZS88PSB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgIChjbGpzLmNvcmUvPD0geSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBNT0RVTEVfSU5GT1MsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1PRFVMRV9JTkZPUyBuaWwpXHJcbiJ9IHs6c3ltIGNvbmohLCA6bWV0YSB7OmRvYyAiQWRkcyB2YWwgdG8gdGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uLCBhbmQgcmV0dXJuIHRjb2xsLiBUaGUgJ2FkZGl0aW9uJ1xuICBtYXkgaGFwcGVuIGF0IGRpZmZlcmVudCAncGxhY2VzJyBkZXBlbmRpbmcgb24gdGhlIGNvbmNyZXRlIHR5cGUuIiwgOmFyZ2xpc3RzIFtbXSBbdGNvbGxdIFt0Y29sbCB2YWxdIFt0Y29sbCB2YWwgJiB2YWxzXV19LCA6c291cmNlICIoZGVmblxyXG4gY29uaiFcclxuIFwiQWRkcyB2YWwgdG8gdGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uLCBhbmQgcmV0dXJuIHRjb2xsLiBUaGUgJ2FkZGl0aW9uJ1xcbiAgbWF5IGhhcHBlbiBhdCBkaWZmZXJlbnQgJ3BsYWNlcycgZGVwZW5kaW5nIG9uIHRoZSBjb25jcmV0ZSB0eXBlLlwiXHJcbiAoW10gKHRyYW5zaWVudCBbXSkpXHJcbiAoW3Rjb2xsXSB0Y29sbClcclxuIChbdGNvbGwgdmFsXSAoLWNvbmohIHRjb2xsIHZhbCkpXHJcbiAoW3Rjb2xsIHZhbCAmIHZhbHNdXHJcbiAgKGxldFxyXG4gICBbbnRjb2xsICgtY29uaiEgdGNvbGwgdmFsKV1cclxuICAgKGlmIHZhbHMgKHJlY3VyIG50Y29sbCAoZmlyc3QgdmFscykgKG5leHQgdmFscykpIG50Y29sbCkpKSlcclxuIn0gezpzeW0gLXBvcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgc3RhY2sgd2l0aG91dCB0aGUgaXRlbSBvbiB0b3Agb2YgdGhlIHN0YWNrLiBJcyB1c2VkXG4gICAgIGJ5IGNsanMuY29yZS9wb3AuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElTdGFja30gezpzeW0gcmVwZWF0ZWRseSwgOm1ldGEgezpkb2MgIlRha2VzIGEgZnVuY3Rpb24gb2Ygbm8gYXJncywgcHJlc3VtYWJseSB3aXRoIHNpZGUgZWZmZWN0cywgYW5kXG4gIHJldHVybnMgYW4gaW5maW5pdGUgKG9yIGxlbmd0aCBuIGlmIHN1cHBsaWVkKSBsYXp5IHNlcXVlbmNlIG9mIGNhbGxzXG4gIHRvIGl0IiwgOmFyZ2xpc3RzIFtbZl0gW24gZl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGVhdGVkbHlcclxuIFwiVGFrZXMgYSBmdW5jdGlvbiBvZiBubyBhcmdzLCBwcmVzdW1hYmx5IHdpdGggc2lkZSBlZmZlY3RzLCBhbmRcXG4gIHJldHVybnMgYW4gaW5maW5pdGUgKG9yIGxlbmd0aCBuIGlmIHN1cHBsaWVkKSBsYXp5IHNlcXVlbmNlIG9mIGNhbGxzXFxuICB0byBpdFwiXHJcbiAoW2ZdIChsYXp5LXNlcSAoY29ucyAoZikgKHJlcGVhdGVkbHkgZikpKSlcclxuIChbbiBmXSAodGFrZSBuIChyZXBlYXRlZGx5IGYpKSkpXHJcbiJ9IHs6c3ltIHppcG1hcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgd2l0aCB0aGUga2V5cyBtYXBwZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFscy4iLCA6YXJnbGlzdHMgKFtrZXlzIHZhbHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB6aXBtYXBcclxuIFwiUmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIG1hcHBlZCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWxzLlwiXHJcbiBba2V5cyB2YWxzXVxyXG4gKGxvb3BcclxuICBbbWFwICh0cmFuc2llbnQge30pIGtzIChzZXEga2V5cykgdnMgKHNlcSB2YWxzKV1cclxuICAoaWZcclxuICAgKGFuZCBrcyB2cylcclxuICAgKHJlY3VyIChhc3NvYyEgbWFwIChmaXJzdCBrcykgKGZpcnN0IHZzKSkgKG5leHQga3MpIChuZXh0IHZzKSlcclxuICAgKHBlcnNpc3RlbnQhIG1hcCkpKSlcclxuIn0gezpzeW0gcmVzZXQtdmFscyEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbC4gUmV0dXJucyBbb2xkIG5ld10sIHRoZSB2YWx1ZSBvZiB0aGVcbiAgIGF0b20gYmVmb3JlIGFuZCBhZnRlciB0aGUgcmVzZXQuIiwgOmFyZ2xpc3RzIChbYSBuZXctdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNldC12YWxzIVxyXG4gXCJTZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbC4gUmV0dXJucyBbb2xkIG5ld10sIHRoZSB2YWx1ZSBvZiB0aGVcXG4gICBhdG9tIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJlc2V0LlwiXHJcbiB7OmFkZGVkIFwiMS45XCJ9XHJcbiBbYSBuZXctdmFsdWVdXHJcbiAobGV0XHJcbiAgW3ZhbGlkYXRlICguLXZhbGlkYXRvciBhKV1cclxuICAod2hlbi1ub3RcclxuICAgKG5pbD8gdmFsaWRhdGUpXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKHZhbGlkYXRlIG5ldy12YWx1ZSlcclxuICAgICh0aHJvdyAoanMvRXJyb3IuIFwiVmFsaWRhdG9yIHJlamVjdGVkIHJlZmVyZW5jZSBzdGF0ZVwiKSkpKVxyXG4gIChsZXRcclxuICAgW29sZC12YWx1ZSAoLi1zdGF0ZSBhKV1cclxuICAgKHNldCEgKC4tc3RhdGUgYSkgbmV3LXZhbHVlKVxyXG4gICAod2hlbi1ub3RcclxuICAgIChuaWw/ICguLXdhdGNoZXMgYSkpXHJcbiAgICAoLW5vdGlmeS13YXRjaGVzIGEgb2xkLXZhbHVlIG5ldy12YWx1ZSkpXHJcbiAgIFtvbGQtdmFsdWUgbmV3LXZhbHVlXSkpKVxyXG4ifSB7OnN5bSBJU3RhY2ssIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY29sbGVjdGlvbnMgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlaXIgaXRlbXMgYXMgc3RhY2tzLiBUaGUgdG9wXG4gIG9mIHRoZSBzdGFjayBzaG91bGQgYmUgYWNjZXNzZWQgaW4gdGhlIG1vc3QgZWZmaWNpZW50IHdheSBmb3IgdGhlIGRpZmZlcmVudFxuICBkYXRhIHN0cnVjdHVyZXMuIn0sIDptZXRob2RzICgtcGVlayAtcG9wKX0gezpzeW0gLXJlbW92ZS13YXRjaCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgd2F0Y2hlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGtleSBmcm9tIHRoaXMuIiwgOmFyZ2xpc3RzIChbdGhpcyBrZXldKX0sIDpwcm90b2NvbCBJV2F0Y2hhYmxlfSB7OnN5bSBJVm9sYXRpbGUsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHZvbGF0aWxlIGZ1bmN0aW9uYWxpdHkuIn0sIDptZXRob2RzICgtdnJlc2V0ISl9IHs6c3ltIHJlbW92ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgZmFsc2UuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3ByZWRdIFtwcmVkIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgZmFsc2UuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cXG4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtwcmVkXSAoZmlsdGVyIChjb21wbGVtZW50IHByZWQpKSlcclxuIChbcHJlZCBjb2xsXSAoZmlsdGVyIChjb21wbGVtZW50IHByZWQpIGNvbGwpKSlcclxuIn0gezpzeW0gKiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuICpcclxuIFwiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLlwiXHJcbiAoW10gMSlcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlLyogeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSAqIChjbGpzLmNvcmUvKiB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gcmUtcGF0dGVybiwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gaW5zdGFuY2Ugb2YgUmVnRXhwIHdoaWNoIGhhcyBjb21waWxlZCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZS1wYXR0ZXJuXHJcbiBcIlJldHVybnMgYW4gaW5zdGFuY2Ugb2YgUmVnRXhwIHdoaWNoIGhhcyBjb21waWxlZCB0aGUgcHJvdmlkZWQgc3RyaW5nLlwiXHJcbiBbc11cclxuIChpZlxyXG4gIChpbnN0YW5jZT8ganMvUmVnRXhwIHMpXHJcbiAgc1xyXG4gIChsZXRcclxuICAgW1twcmVmaXggZmxhZ3NdXHJcbiAgICAocmUtZmluZCAjXCJeXFwoXFw/KFtpZG1zdXhdKilcXClcIiBzKVxyXG4gICAgcGF0dGVyblxyXG4gICAgKHN1YnMgcyAoaWYgKG5pbD8gcHJlZml4KSAwIChjb3VudCBwcmVmaXgpKSldXHJcbiAgIChqcy9SZWdFeHAuIHBhdHRlcm4gKG9yIGZsYWdzIFwiXCIpKSkpKVxyXG4ifSB7OnN5bSBtaW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsZWFzdCBvZiB0aGUgbnVtcy4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pblxyXG4gXCJSZXR1cm5zIHRoZSBsZWFzdCBvZiB0aGUgbnVtcy5cIlxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvbWluIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgbWluIChjbGpzLmNvcmUvbWluIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSAtcGVyc2lzdGVudCEsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgcGVyc2lzdGVudCBkYXRhIHN0cnVjdHVyZSBmcm9tIHRjb2xsIGFuZCByZXR1cm5zIGl0LiIsIDphcmdsaXN0cyAoW3Rjb2xsXSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudENvbGxlY3Rpb259IHs6c3ltIC1udGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXggbiBpbiB0aGUgY29sbGVjdGlvbiBjb2xsLlxuICAgICBSZXR1cm5zIG5vdC1mb3VuZCBpZiBpbmRleCBuIGlzIG91dCBvZiBib3VuZHMgYW5kIG5vdC1mb3VuZCBpcyBzdXBwbGllZC4iLCA6YXJnbGlzdHMgKFtjb2xsIG5dIFtjb2xsIG4gbm90LWZvdW5kXSl9LCA6cHJvdG9jb2wgSUluZGV4ZWR9IHs6c3ltIHBvcCEsIDptZXRhIHs6ZG9jICJSZW1vdmVzIHRoZSBsYXN0IGl0ZW0gZnJvbSBhIHRyYW5zaWVudCB2ZWN0b3IuIElmXG4gIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uLiBSZXR1cm5zIHRjb2xsIiwgOmFyZ2xpc3RzIChbdGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3AhXHJcbiBcIlJlbW92ZXMgdGhlIGxhc3QgaXRlbSBmcm9tIGEgdHJhbnNpZW50IHZlY3Rvci4gSWZcXG4gIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uLiBSZXR1cm5zIHRjb2xsXCJcclxuIFt0Y29sbF1cclxuICgtcG9wISB0Y29sbCkpXHJcbiJ9IHs6c3ltIGNodW5rLWFwcGVuZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtiIHhdKX0sIDpzb3VyY2UgIihkZWZuIGNodW5rLWFwcGVuZCBbYiB4XSAoLmFkZCBiIHgpKVxyXG4ifSB7OnN5bSAqdW5jaGVja2VkLWFycmF5cyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp1bmNoZWNrZWQtYXJyYXlzKiBmYWxzZSlcclxuIn0gezpzeW0gcHJuLXN0ciwgOm1ldGEgezpkb2MgIlNhbWUgYXMgcHItc3RyIGZvbGxvd2VkIGJ5IChuZXdsaW5lKSIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBybi1zdHJcclxuIFwiU2FtZSBhcyBwci1zdHIgZm9sbG93ZWQgYnkgKG5ld2xpbmUpXCJcclxuIFsmIG9ianNdXHJcbiAocHJuLXN0ci13aXRoLW9wdHMgb2JqcyAocHItb3B0cykpKVxyXG4ifSB7OnN5bSBJUmV2ZXJzaWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciByZXZlcnNpbmcgYSBzZXEuIn0sIDptZXRob2RzICgtcnNlcSl9IHs6c3ltIHJldmVyc2libGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzPyBJUmV2ZXJzaWJsZS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV2ZXJzaWJsZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzPyBJUmV2ZXJzaWJsZS5cIlxyXG4gW2NvbGxdXHJcbiAoc2F0aXNmaWVzPyBJUmV2ZXJzaWJsZSBjb2xsKSlcclxuIn0gezpzeW0gLXJlYWxpemVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGZvciB4IGhhcyBiZWVuIHByb2R1Y2VkLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIElQZW5kaW5nfSB7OnN5bSAtYWRkLXdhdGNoLCA6bWV0YSB7OmRvYyAiQWRkcyBhIHdhdGNoZXIgZnVuY3Rpb24gZiB0byB0aGlzLiBLZXlzIG11c3QgYmUgdW5pcXVlIHBlciByZWZlcmVuY2UsXG4gICAgIGFuZCBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlIHdhdGNoIHdpdGggLXJlbW92ZS13YXRjaC4iLCA6YXJnbGlzdHMgKFt0aGlzIGtleSBmXSl9LCA6cHJvdG9jb2wgSVdhdGNoYWJsZX0gezpzeW0gLWRlcmVmLXdpdGgtdGltZW91dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvIG1zZWMgdGltZW91dC12YWxdKX0sIDpwcm90b2NvbCBJRGVyZWZXaXRoVGltZW91dH0gezpzeW0gY29uaiwgOm1ldGEgezpkb2MgImNvbmpbb2luXS4gUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIHdpdGggdGhlIHhzXG4gICdhZGRlZCcuIChjb25qIG5pbCBpdGVtKSByZXR1cm5zIChpdGVtKS4gIFRoZSAnYWRkaXRpb24nIG1heVxuICBoYXBwZW4gYXQgZGlmZmVyZW50ICdwbGFjZXMnIGRlcGVuZGluZyBvbiB0aGUgY29uY3JldGUgdHlwZS4iLCA6YXJnbGlzdHMgW1tdIFtjb2xsXSBbY29sbCB4XSBbY29sbCB4ICYgeHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25qXHJcbiBcImNvbmpbb2luXS4gUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIHdpdGggdGhlIHhzXFxuICAnYWRkZWQnLiAoY29uaiBuaWwgaXRlbSkgcmV0dXJucyAoaXRlbSkuICBUaGUgJ2FkZGl0aW9uJyBtYXlcXG4gIGhhcHBlbiBhdCBkaWZmZXJlbnQgJ3BsYWNlcycgZGVwZW5kaW5nIG9uIHRoZSBjb25jcmV0ZSB0eXBlLlwiXHJcbiAoW10gW10pXHJcbiAoW2NvbGxdIGNvbGwpXHJcbiAoW2NvbGwgeF0gKGlmLW5vdCAobmlsPyBjb2xsKSAoLWNvbmogY29sbCB4KSAobGlzdCB4KSkpXHJcbiAoW2NvbGwgeCAmIHhzXVxyXG4gIChpZiB4cyAocmVjdXIgKGNvbmogY29sbCB4KSAoZmlyc3QgeHMpIChuZXh0IHhzKSkgKGNvbmogY29sbCB4KSkpKVxyXG4ifSB7OnN5bSAtc29ydGVkLXNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzb3J0ZWQgc2VxIGZyb20gY29sbCBpbiBlaXRoZXIgYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuIiwgOmFyZ2xpc3RzIChbY29sbCBhc2NlbmRpbmc/XSl9LCA6cHJvdG9jb2wgSVNvcnRlZH0gezpzeW0gdHJhbnNkdWNlLCA6bWV0YSB7OmRvYyAicmVkdWNlIHdpdGggYSB0cmFuc2Zvcm1hdGlvbiBvZiBmICh4ZikuIElmIGluaXQgaXMgbm90XG4gIHN1cHBsaWVkLCAoZikgd2lsbCBiZSBjYWxsZWQgdG8gcHJvZHVjZSBpdC4gZiBzaG91bGQgYmUgYSByZWR1Y2luZ1xuICBzdGVwIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBib3RoIDEgYW5kIDIgYXJndW1lbnRzLCBpZiBpdCBhY2NlcHRzXG4gIG9ubHkgMiB5b3UgY2FuIGFkZCB0aGUgYXJpdHktMSB3aXRoICdjb21wbGV0aW5nJy4gUmV0dXJucyB0aGUgcmVzdWx0XG4gIG9mIGFwcGx5aW5nICh0aGUgdHJhbnNmb3JtZWQpIHhmIHRvIGluaXQgYW5kIHRoZSBmaXJzdCBpdGVtIGluIGNvbGwsXG4gIHRoZW4gYXBwbHlpbmcgeGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZiBjb2xsXG4gIGNvbnRhaW5zIG5vIGl0ZW1zLCByZXR1cm5zIGluaXQgYW5kIGYgaXMgbm90IGNhbGxlZC4gTm90ZSB0aGF0XG4gIGNlcnRhaW4gdHJhbnNmb3JtcyBtYXkgaW5qZWN0IG9yIHNraXAgaXRlbXMuIiwgOmFyZ2xpc3RzIFtbeGZvcm0gZiBjb2xsXSBbeGZvcm0gZiBpbml0IGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2R1Y2VcclxuIFwicmVkdWNlIHdpdGggYSB0cmFuc2Zvcm1hdGlvbiBvZiBmICh4ZikuIElmIGluaXQgaXMgbm90XFxuICBzdXBwbGllZCwgKGYpIHdpbGwgYmUgY2FsbGVkIHRvIHByb2R1Y2UgaXQuIGYgc2hvdWxkIGJlIGEgcmVkdWNpbmdcXG4gIHN0ZXAgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGJvdGggMSBhbmQgMiBhcmd1bWVudHMsIGlmIGl0IGFjY2VwdHNcXG4gIG9ubHkgMiB5b3UgY2FuIGFkZCB0aGUgYXJpdHktMSB3aXRoICdjb21wbGV0aW5nJy4gUmV0dXJucyB0aGUgcmVzdWx0XFxuICBvZiBhcHBseWluZyAodGhlIHRyYW5zZm9ybWVkKSB4ZiB0byBpbml0IGFuZCB0aGUgZmlyc3QgaXRlbSBpbiBjb2xsLFxcbiAgdGhlbiBhcHBseWluZyB4ZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmIGNvbGxcXG4gIGNvbnRhaW5zIG5vIGl0ZW1zLCByZXR1cm5zIGluaXQgYW5kIGYgaXMgbm90IGNhbGxlZC4gTm90ZSB0aGF0XFxuICBjZXJ0YWluIHRyYW5zZm9ybXMgbWF5IGluamVjdCBvciBza2lwIGl0ZW1zLlwiXHJcbiAoW3hmb3JtIGYgY29sbF0gKHRyYW5zZHVjZSB4Zm9ybSBmIChmKSBjb2xsKSlcclxuIChbeGZvcm0gZiBpbml0IGNvbGxdXHJcbiAgKGxldCBbZiAoeGZvcm0gZikgcmV0IChyZWR1Y2UgZiBpbml0IGNvbGwpXSAoZiByZXQpKSkpXHJcbiJ9IHs6c3ltIC1zd2FwISwgOm1ldGEgezpkb2MgIlN3YXBzIHRoZSB2YWx1ZSBvZiBvIHRvIGJlIChhcHBseSBmIGN1cnJlbnQtdmFsdWUtb2YtYXRvbSBhcmdzKS4iLCA6YXJnbGlzdHMgKFtvIGZdIFtvIGYgYV0gW28gZiBhIGJdIFtvIGYgYSBiIHhzXSl9LCA6cHJvdG9jb2wgSVN3YXB9IHs6c3ltICpwcmludC1sZW5ndGgqLCA6bWV0YSB7OmRvYyAiKnByaW50LWxlbmd0aCogY29udHJvbHMgaG93IG1hbnkgaXRlbXMgb2YgZWFjaCBjb2xsZWN0aW9uIHRoZVxuICBwcmludGVyIHdpbGwgcHJpbnQuIElmIGl0IGlzIGJvdW5kIHRvIGxvZ2ljYWwgZmFsc2UsIHRoZXJlIGlzIG5vXG4gIGxpbWl0LiBPdGhlcndpc2UsIGl0IG11c3QgYmUgYm91bmQgdG8gYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtXG4gIG51bWJlciBvZiBpdGVtcyBvZiBlYWNoIGNvbGxlY3Rpb24gdG8gcHJpbnQuIElmIGEgY29sbGVjdGlvbiBjb250YWluc1xuICBtb3JlIGl0ZW1zLCB0aGUgcHJpbnRlciB3aWxsIHByaW50IGl0ZW1zIHVwIHRvIHRoZSBsaW1pdCBmb2xsb3dlZCBieVxuICAnLi4uJyB0byByZXByZXNlbnQgdGhlIHJlbWFpbmluZyBpdGVtcy4gVGhlIHJvb3QgYmluZGluZyBpcyBuaWxcbiAgaW5kaWNhdGluZyBubyBsaW1pdC4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbGVuZ3RoKiBuaWwpXHJcbiJ9IHs6c3ltIGpzLWRlbGV0ZSwgOm1ldGEgezpkb2MgIkRlbGV0ZSBhIHByb3BlcnR5IGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAgUmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW29iaiBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1kZWxldGVcclxuIFwiRGVsZXRlIGEgcHJvcGVydHkgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0LlxcbiAgUmV0dXJucyB0cnVlIHVwb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbb2JqIGtleV1cclxuIChjbGpzLmNvcmUvanMtZGVsZXRlIG9iaiBrZXkpKVxyXG4ifSB7OnN5bSB0cnV0aF8sIDptZXRhIHs6ZG9jICJJbnRlcm5hbCAtIGRvIG5vdCB1c2UhIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdHJ1dGhfIFwiSW50ZXJuYWwgLSBkbyBub3QgdXNlIVwiIFt4XSAoY2xqcy5jb3JlL3RydXRoXyB4KSlcclxuIn0gezpzeW0gYXJyYXktaW5kZXgtb2YsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXJyIGtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheS1pbmRleC1vZlxyXG4gW2FyciBrXVxyXG4gKGNvbmRcclxuICAoa2V5d29yZD8gaylcclxuICAoYXJyYXktaW5kZXgtb2Yta2V5d29yZD8gYXJyIGspXHJcbiAgKG9yIChnb29nL2lzU3RyaW5nIGspIChudW1iZXI/IGspKVxyXG4gIChhcnJheS1pbmRleC1vZi1pZGVudGljYWw/IGFyciBrKVxyXG4gIChzeW1ib2w/IGspXHJcbiAgKGFycmF5LWluZGV4LW9mLXN5bWJvbD8gYXJyIGspXHJcbiAgKG5pbD8gaylcclxuICAoYXJyYXktaW5kZXgtb2YtbmlsPyBhcnIpXHJcbiAgOmVsc2VcclxuICAoYXJyYXktaW5kZXgtb2YtZXF1aXY/IGFyciBrKSkpXHJcbiJ9IHs6c3ltIGtleS0+anMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtba10gW2sgcHJpbWl0aXZlLWZuXV19LCA6c291cmNlICIoZGVmblxyXG4ga2V5LT5qc1xyXG4gKFtrXSAoa2V5LT5qcyBrIGNsai0+anMpKVxyXG4gKFtrIHByaW1pdGl2ZS1mbl1cclxuICAoY29uZFxyXG4gICAoc2F0aXNmaWVzPyBJRW5jb2RlSlMgaylcclxuICAgKC1jbGotPmpzIGspXHJcbiAgIChvciAoc3RyaW5nPyBrKSAobnVtYmVyPyBrKSAoa2V5d29yZD8gaykgKHN5bWJvbD8gaykpXHJcbiAgIChwcmltaXRpdmUtZm4gaylcclxuICAgOmRlZmF1bHRcclxuICAgKHByLXN0ciBrKSkpKVxyXG4ifSB7OnN5bSBJRW5jb2RlSlMsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgtY2xqLT5qcyAta2V5LT5qcyl9IHs6c3ltIGNvbXBhcmUtYW5kLXNldCEsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsIGlmIGFuZCBvbmx5IGlmIHRoZVxuICBjdXJyZW50IHZhbHVlIG9mIHRoZSBhdG9tIGlzIGVxdWFsIHRvIG9sZHZhbC4gUmV0dXJucyB0cnVlIGlmXG4gIHNldCBoYXBwZW5lZCwgZWxzZSBmYWxzZS4iLCA6YXJnbGlzdHMgKFthIG9sZHZhbCBuZXd2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYXJlLWFuZC1zZXQhXHJcbiBcIkF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwgaWYgYW5kIG9ubHkgaWYgdGhlXFxuICBjdXJyZW50IHZhbHVlIG9mIHRoZSBhdG9tIGlzIGVxdWFsIHRvIG9sZHZhbC4gUmV0dXJucyB0cnVlIGlmXFxuICBzZXQgaGFwcGVuZWQsIGVsc2UgZmFsc2UuXCJcclxuIFthIG9sZHZhbCBuZXd2YWxdXHJcbiAoaWYgKD0gKC1kZXJlZiBhKSBvbGR2YWwpIChkbyAocmVzZXQhIGEgbmV3dmFsKSB0cnVlKSBmYWxzZSkpXHJcbiJ9IHs6c3ltIGFycmF5LXNlcSwgOm1ldGEgezpkb2MgIkNyZWF0ZSBhIHNlcSBmcm9tIGEgSmF2YVNjcmlwdCBhcnJheS4iLCA6YXJnbGlzdHMgW1thcnJheV0gW2FycmF5IGldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheS1zZXFcclxuIFwiQ3JlYXRlIGEgc2VxIGZyb20gYSBKYXZhU2NyaXB0IGFycmF5LlwiXHJcbiAoW2FycmF5XSAocHJpbS1zZXEgYXJyYXkgMCkpXHJcbiAoW2FycmF5IGldIChwcmltLXNlcSBhcnJheSBpKSkpXHJcbiJ9IHs6c3ltIGludGVybGVhdmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gZWFjaCBjb2xsLCB0aGVuIHRoZSBzZWNvbmQgZXRjLiIsIDphcmdsaXN0cyBbW10gW2MxXSBbYzEgYzJdIFtjMSBjMiAmIGNvbGxzXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50ZXJsZWF2ZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gZWFjaCBjb2xsLCB0aGVuIHRoZSBzZWNvbmQgZXRjLlwiXHJcbiAoW10gKCkpXHJcbiAoW2MxXSAobGF6eS1zZXEgYzEpKVxyXG4gKFtjMSBjMl1cclxuICAobGF6eS1zZXFcclxuICAgKGxldFxyXG4gICAgW3MxIChzZXEgYzEpIHMyIChzZXEgYzIpXVxyXG4gICAgKHdoZW5cclxuICAgICAoYW5kIHMxIHMyKVxyXG4gICAgIChjb25zXHJcbiAgICAgIChmaXJzdCBzMSlcclxuICAgICAgKGNvbnMgKGZpcnN0IHMyKSAoaW50ZXJsZWF2ZSAocmVzdCBzMSkgKHJlc3QgczIpKSkpKSkpKVxyXG4gKFtjMSBjMiAmIGNvbGxzXVxyXG4gIChsYXp5LXNlcVxyXG4gICAobGV0XHJcbiAgICBbc3MgKG1hcCBzZXEgKGNvbmogY29sbHMgYzIgYzEpKV1cclxuICAgICh3aGVuXHJcbiAgICAgKGV2ZXJ5PyBpZGVudGl0eSBzcylcclxuICAgICAoY29uY2F0IChtYXAgZmlyc3Qgc3MpIChhcHBseSBpbnRlcmxlYXZlIChtYXAgcmVzdCBzcykpKSkpKSkpXHJcbiJ9IHs6c3ltIHByaW50LW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIHByaW50LW9uZSB3cml0ZXIgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LW1hcFxyXG4gW20gcHJpbnQtb25lIHdyaXRlciBvcHRzXVxyXG4gKGxldFxyXG4gIFtbbnMgbGlmdC1tYXBdICh3aGVuIChtYXA/IG0pIChsaWZ0LW5zIG0pKV1cclxuICAoaWZcclxuICAgbnNcclxuICAgKHByaW50LXByZWZpeC1tYXAgKHN0ciBcIiM6XCIgbnMpIGxpZnQtbWFwIHByaW50LW9uZSB3cml0ZXIgb3B0cylcclxuICAgKHByaW50LXByZWZpeC1tYXAgbmlsIG0gcHJpbnQtb25lIHdyaXRlciBvcHRzKSkpKVxyXG4ifSB7OnN5bSBtYXA/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSU1hcCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXA/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElNYXBcIlxyXG4gW3hdXHJcbiAoaWYgKG5pbD8geCkgZmFsc2UgKHNhdGlzZmllcz8gSU1hcCB4KSkpXHJcbiJ9IHs6c3ltIG0zLUMxLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBtMy1DMSAoaW50IDM0MzI5MTgzNTMpKVxyXG4ifSB7OnN5bSBnZXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBtYXBwZWQgdG8ga2V5LCBub3QtZm91bmQgb3IgbmlsIGlmIGtleSBub3QgcHJlc2VudC4iLCA6YXJnbGlzdHMgW1tvIGtdIFtvIGsgbm90LWZvdW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gZ2V0XHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIG1hcHBlZCB0byBrZXksIG5vdC1mb3VuZCBvciBuaWwgaWYga2V5IG5vdCBwcmVzZW50LlwiXHJcbiAoW28ga11cclxuICAod2hlbi1ub3RcclxuICAgKG5pbD8gbylcclxuICAgKGNvbmRcclxuICAgIChpbXBsZW1lbnRzPyBJTG9va3VwIG8pXHJcbiAgICAoLWxvb2t1cCBvIGspXHJcbiAgICAoYXJyYXk/IG8pXHJcbiAgICAod2hlbiAoYW5kIChzb21lPyBrKSAoPCBrICguLWxlbmd0aCBvKSkpIChhZ2V0IG8gKGludCBrKSkpXHJcbiAgICAoc3RyaW5nPyBvKVxyXG4gICAgKHdoZW4gKGFuZCAoc29tZT8gaykgKDwgLTEgayAoLi1sZW5ndGggbykpKSAoLmNoYXJBdCBvIChpbnQgaykpKVxyXG4gICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElMb29rdXAgbylcclxuICAgICgtbG9va3VwIG8gaylcclxuICAgIDplbHNlXHJcbiAgICBuaWwpKSlcclxuIChbbyBrIG5vdC1mb3VuZF1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IG8pXHJcbiAgIChjb25kXHJcbiAgICAoaW1wbGVtZW50cz8gSUxvb2t1cCBvKVxyXG4gICAgKC1sb29rdXAgbyBrIG5vdC1mb3VuZClcclxuICAgIChhcnJheT8gbylcclxuICAgIChpZlxyXG4gICAgIChhbmQgKHNvbWU/IGspICg8IC0xIGsgKC4tbGVuZ3RoIG8pKSlcclxuICAgICAoYWdldCBvIChpbnQgaykpXHJcbiAgICAgbm90LWZvdW5kKVxyXG4gICAgKHN0cmluZz8gbylcclxuICAgIChpZlxyXG4gICAgIChhbmQgKHNvbWU/IGspICg8IC0xIGsgKC4tbGVuZ3RoIG8pKSlcclxuICAgICAoLmNoYXJBdCBvIChpbnQgaykpXHJcbiAgICAgbm90LWZvdW5kKVxyXG4gICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElMb29rdXAgbylcclxuICAgICgtbG9va3VwIG8gayBub3QtZm91bmQpXHJcbiAgICA6ZWxzZVxyXG4gICAgbm90LWZvdW5kKVxyXG4gICBub3QtZm91bmQpKSlcclxuIn0gezpzeW0gaWRlbnRpdHksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGl0cyBhcmd1bWVudC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBpZGVudGl0eSBcIlJldHVybnMgaXRzIGFyZ3VtZW50LlwiIFt4XSB4KVxyXG4ifSB7OnN5bSBpbnRvLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsIGNvbnNpc3Rpbmcgb2YgdG8tY29sbCB3aXRoIGFsbCBvZiB0aGUgaXRlbXMgb2ZcbiAgZnJvbS1jb2xsIGNvbmpvaW5lZC4gQSB0cmFuc2R1Y2VyIG1heSBiZSBzdXBwbGllZC4iLCA6YXJnbGlzdHMgW1tdIFt0b10gW3RvIGZyb21dIFt0byB4Zm9ybSBmcm9tXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50b1xyXG4gXCJSZXR1cm5zIGEgbmV3IGNvbGwgY29uc2lzdGluZyBvZiB0by1jb2xsIHdpdGggYWxsIG9mIHRoZSBpdGVtcyBvZlxcbiAgZnJvbS1jb2xsIGNvbmpvaW5lZC4gQSB0cmFuc2R1Y2VyIG1heSBiZSBzdXBwbGllZC5cIlxyXG4gKFtdIFtdKVxyXG4gKFt0b10gdG8pXHJcbiAoW3RvIGZyb21dXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyB0bylcclxuICAgKGlmXHJcbiAgICAoaW1wbGVtZW50cz8gSUVkaXRhYmxlQ29sbGVjdGlvbiB0bylcclxuICAgICgtd2l0aC1tZXRhXHJcbiAgICAgKHBlcnNpc3RlbnQhIChyZWR1Y2UgLWNvbmohICh0cmFuc2llbnQgdG8pIGZyb20pKVxyXG4gICAgIChtZXRhIHRvKSlcclxuICAgIChyZWR1Y2UgLWNvbmogdG8gZnJvbSkpXHJcbiAgIChyZWR1Y2UgY29uaiB0byBmcm9tKSkpXHJcbiAoW3RvIHhmb3JtIGZyb21dXHJcbiAgKGlmXHJcbiAgIChpbXBsZW1lbnRzPyBJRWRpdGFibGVDb2xsZWN0aW9uIHRvKVxyXG4gICAoLXdpdGgtbWV0YVxyXG4gICAgKHBlcnNpc3RlbnQhICh0cmFuc2R1Y2UgeGZvcm0gY29uaiEgKHRyYW5zaWVudCB0bykgZnJvbSkpXHJcbiAgICAobWV0YSB0bykpXHJcbiAgICh0cmFuc2R1Y2UgeGZvcm0gY29uaiB0byBmcm9tKSkpKVxyXG4ifSB7OnN5bSBsb25nLCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGxvbmcgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiBJZGVudGljYWwgdG8gYGludCcuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvbmdcclxuIFwiQ29lcmNlIHRvIGxvbmcgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiBJZGVudGljYWwgdG8gYGludCcuXCJcclxuIFt4XVxyXG4gKGZpeCB4KSlcclxuIn0gezpzeW0gZG91YmxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGRvdWJsZSBbeF0geClcclxuIn0gezpzeW0gdm9sYXRpbGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSB2b2xhdGlsZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdm9sYXRpbGU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgdm9sYXRpbGUuXCJcclxuIFt4XVxyXG4gKGluc3RhbmNlPyBWb2xhdGlsZSB4KSlcclxuIn0gezpzeW0gLWtleSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGtleSBvZiB0aGUgbWFwIGVudHJ5LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJTWFwRW50cnl9IHs6c3ltIG5maXJzdCwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKG5leHQgKGZpcnN0IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIG5maXJzdCBcIlNhbWUgYXMgKG5leHQgKGZpcnN0IHgpKVwiIFtjb2xsXSAobmV4dCAoZmlyc3QgY29sbCkpKVxyXG4ifSB7OnN5bSBtZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWV0YWRhdGEgb2Ygb2JqLCByZXR1cm5zIG5pbCBpZiB0aGVyZSBpcyBubyBtZXRhZGF0YS4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWV0YVxyXG4gXCJSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiBvYmosIHJldHVybnMgbmlsIGlmIHRoZXJlIGlzIG5vIG1ldGFkYXRhLlwiXHJcbiBbb11cclxuICh3aGVuIChhbmQgKG5vdCAobmlsPyBvKSkgKHNhdGlzZmllcz8gSU1ldGEgbykpICgtbWV0YSBvKSkpXHJcbiJ9IHs6c3ltIC1rdi1yZWR1Y2UsIDptZXRhIHs6ZG9jICJSZWR1Y2VzIGFuIGFzc29jaWF0aXZlIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gZiBzaG91bGQgYmVcbiAgICAgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHRocmVlIGFyZ3VtZW50cy4iLCA6YXJnbGlzdHMgKFtjb2xsIGYgaW5pdF0pfSwgOnByb3RvY29sIElLVlJlZHVjZX0gezpzeW0gSUhhc2gsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGhhc2hpbmcgZnVuY3Rpb25hbGl0eSB0byBhIHR5cGUuIn0sIDptZXRob2RzICgtaGFzaCl9IHs6c3ltIGJpdC1hbmQtbm90LCA6bWV0YSB7OmRvYyAiQml0d2lzZSBhbmQgd2l0aCBjb21wbGVtZW50IiwgOmFyZ2xpc3RzIFtbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1hbmQtbm90XHJcbiBcIkJpdHdpc2UgYW5kIHdpdGggY29tcGxlbWVudFwiXHJcbiAoW3ggeV0gKGNsanMuY29yZS9iaXQtYW5kLW5vdCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIGJpdC1hbmQtbm90IChjbGpzLmNvcmUvYml0LWFuZC1ub3QgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHZhcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgdiBpcyBvZiB0eXBlIGNsanMuY29yZS5WYXIiLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgdiBpcyBvZiB0eXBlIGNsanMuY29yZS5WYXJcIlxyXG4gW3ZdXHJcbiAoaW5zdGFuY2U/IGNsanMuY29yZS5WYXIgdikpXHJcbiJ9IHs6c3ltIC1jb21wYXJhdG9yLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29tcGFyYXRvciBmb3IgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVNvcnRlZH0gezpzeW0gdW5jaGVja2VkLWFkZC1pbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1hZGQtaW50XHJcbiBcIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLlwiXHJcbiAoW10gMClcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1hZGQtaW50IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZSB1bmNoZWNrZWQtYWRkLWludCAoY2xqcy5jb3JlL3VuY2hlY2tlZC1hZGQtaW50IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBoYXNoLW9yZGVyZWQtY29sbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGhhc2ggY29kZSwgY29uc2lzdGVudCB3aXRoID0sIGZvciBhbiBleHRlcm5hbCBvcmRlcmVkXG4gICBjb2xsZWN0aW9uIGltcGxlbWVudGluZyBJdGVyYWJsZS5cbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1vcmRlcmVkLWNvbGxcclxuIFwiUmV0dXJucyB0aGUgaGFzaCBjb2RlLCBjb25zaXN0ZW50IHdpdGggPSwgZm9yIGFuIGV4dGVybmFsIG9yZGVyZWRcXG4gICBjb2xsZWN0aW9uIGltcGxlbWVudGluZyBJdGVyYWJsZS5cXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuXCJcclxuIFtjb2xsXVxyXG4gKGxvb3BcclxuICBbbiAwIGhhc2gtY29kZSAxIGNvbGwgKHNlcSBjb2xsKV1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIChyZWN1clxyXG4gICAgKGluYyBuKVxyXG4gICAgKGJpdC1vciAoKyAoaW11bCAzMSBoYXNoLWNvZGUpIChoYXNoIChmaXJzdCBjb2xsKSkpIDApXHJcbiAgICAobmV4dCBjb2xsKSlcclxuICAgKG1peC1jb2xsZWN0aW9uLWhhc2ggaGFzaC1jb2RlIG4pKSkpXHJcbiJ9IHs6c3ltIHJlc2V0LW1ldGEhLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSByZXNldHMgdGhlIG1ldGFkYXRhIGZvciBhbiBhdG9tIiwgOmFyZ2xpc3RzIChbaXJlZiBtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzZXQtbWV0YSFcclxuIFwiQXRvbWljYWxseSByZXNldHMgdGhlIG1ldGFkYXRhIGZvciBhbiBhdG9tXCJcclxuIFtpcmVmIG1dXHJcbiAoc2V0ISAoLi1tZXRhIGlyZWYpIG0pKVxyXG4ifSB7OnN5bSBJRXF1aXYsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHZhbHVlIGNvbXBhcmlzb24gZnVuY3Rpb25hbGl0eSB0byBhIHR5cGUuIn0sIDptZXRob2RzICgtZXF1aXYpfSB7OnN5bSBjeWNsZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IChpbmZpbml0ZSEpIHNlcXVlbmNlIG9mIHJlcGV0aXRpb25zIG9mIHRoZSBpdGVtcyBpbiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjeWNsZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSAoaW5maW5pdGUhKSBzZXF1ZW5jZSBvZiByZXBldGl0aW9ucyBvZiB0aGUgaXRlbXMgaW4gY29sbC5cIlxyXG4gW2NvbGxdXHJcbiAoaWYtbGV0XHJcbiAgW3ZhbHMgKHNlcSBjb2xsKV1cclxuICAoQ3ljbGUuIG5pbCB2YWxzIG5pbCB2YWxzIG5pbClcclxuICAoLi1FTVBUWSBMaXN0KSkpXHJcbiJ9IHs6c3ltIC1kZXJlZiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZWZlcmVuY2Ugby4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6cHJvdG9jb2wgSURlcmVmfSB7OnN5bSBlbXB0eT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBoYXMgbm8gaXRlbXMgLSBzYW1lIGFzIChub3QgKHNlcSBjb2xsKSkuXG4gIFBsZWFzZSB1c2UgdGhlIGlkaW9tIChzZXEgeCkgcmF0aGVyIHRoYW4gKG5vdCAoZW1wdHk/IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbXB0eT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgaGFzIG5vIGl0ZW1zIC0gc2FtZSBhcyAobm90IChzZXEgY29sbCkpLlxcbiAgUGxlYXNlIHVzZSB0aGUgaWRpb20gKHNlcSB4KSByYXRoZXIgdGhhbiAobm90IChlbXB0eT8geCkpXCJcclxuIFtjb2xsXVxyXG4gKG9yIChuaWw/IGNvbGwpIChub3QgKHNlcSBjb2xsKSkpKVxyXG4ifSB7OnN5bSBzaG9ydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBzaG9ydCBbeF0geClcclxuIn0gezpzeW0gLWNsai0+anMsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGNsaiB2YWx1ZXMgdG8gSmF2YVNjcmlwdCIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBJRW5jb2RlSlN9IHs6c3ltIC1jaHVua2VkLWZpcnN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlyc3QgY2h1bmsgaW4gY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUNodW5rZWRTZXF9IHs6c3ltIGFkZC10YXAsIDptZXRhIHs6ZG9jICJBZGRzIGYsIGEgZm4gb2Ygb25lIGFyZ3VtZW50LCB0byB0aGUgdGFwIHNldC4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoXG4gIGFueXRoaW5nIHNlbnQgdmlhIHRhcD4uIFJlbWVtYmVyIGYgaW4gb3JkZXIgdG8gcmVtb3ZlLXRhcCIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtdGFwXHJcbiBcIkFkZHMgZiwgYSBmbiBvZiBvbmUgYXJndW1lbnQsIHRvIHRoZSB0YXAgc2V0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhcXG4gIGFueXRoaW5nIHNlbnQgdmlhIHRhcD4uIFJlbWVtYmVyIGYgaW4gb3JkZXIgdG8gcmVtb3ZlLXRhcFwiXHJcbiBbZl1cclxuIChtYXliZS1pbml0LXRhcHNldClcclxuIChzd2FwISB0YXBzZXQgY29uaiBmKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSBmaWx0ZXJ2LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHZlY3RvciBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy4iLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaWx0ZXJ2XHJcbiBcIlJldHVybnMgYSB2ZWN0b3Igb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gKC0+XHJcbiAgKHJlZHVjZSAoZm4gW3Ygb10gKGlmIChwcmVkIG8pIChjb25qISB2IG8pIHYpKSAodHJhbnNpZW50IFtdKSBjb2xsKVxyXG4gIHBlcnNpc3RlbnQhKSlcclxuIn0gezpzeW0gaGFzaCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGhhc2ggY29kZSBvZiBpdHMgYXJndW1lbnQuIE5vdGUgdGhpcyBpcyB0aGUgaGFzaCBjb2RlXG4gICBjb25zaXN0ZW50IHdpdGggPS4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaFxyXG4gXCJSZXR1cm5zIHRoZSBoYXNoIGNvZGUgb2YgaXRzIGFyZ3VtZW50LiBOb3RlIHRoaXMgaXMgdGhlIGhhc2ggY29kZVxcbiAgIGNvbnNpc3RlbnQgd2l0aCA9LlwiXHJcbiBbb11cclxuIChjb25kXHJcbiAgKGltcGxlbWVudHM/IElIYXNoIG8pXHJcbiAgKGJpdC14b3IgKC1oYXNoIG8pIDApXHJcbiAgKG51bWJlcj8gbylcclxuICAoaWZcclxuICAgKGpzL2lzRmluaXRlIG8pXHJcbiAgIChqcy1tb2QgKE1hdGgvZmxvb3IgbykgMjE0NzQ4MzY0NylcclxuICAgKGNhc2UgbyAjI0luZiAyMTQ2NDM1MDcyICMjLUluZiAtMTA0ODU3NiAyMTQ2OTU5MzYwKSlcclxuICAodHJ1ZT8gbylcclxuICAxMjMxXHJcbiAgKGZhbHNlPyBvKVxyXG4gIDEyMzdcclxuICAoc3RyaW5nPyBvKVxyXG4gIChtMy1oYXNoLWludCAoaGFzaC1zdHJpbmcgbykpXHJcbiAgKGluc3RhbmNlPyBqcy9EYXRlIG8pXHJcbiAgKGJpdC14b3IgKC52YWx1ZU9mIG8pIDApXHJcbiAgKG5pbD8gbylcclxuICAwXHJcbiAgOmVsc2VcclxuICAoYml0LXhvciAoLWhhc2ggbykgMCkpKVxyXG4ifSB7OnN5bSBxdW90LCA6bWV0YSB7OmRvYyAicXVvdFtpZW50XSBvZiBkaXZpZGluZyBudW1lcmF0b3IgYnkgZGVub21pbmF0b3IuIiwgOmFyZ2xpc3RzIChbbiBkXSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVvdFxyXG4gXCJxdW90W2llbnRdIG9mIGRpdmlkaW5nIG51bWVyYXRvciBieSBkZW5vbWluYXRvci5cIlxyXG4gW24gZF1cclxuIChsZXQgW3JlbSAoanMtbW9kIG4gZCldIChmaXggKC8gKC0gbiByZW0pIGQpKSkpXHJcbiJ9IHs6c3ltIG5zLWludGVybnMqLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBvZiB0aGUgaW50ZXJuIG1hcHBpbmdzIGZvciB0aGUgbmFtZXNwYWNlLlxuICBCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBucy1pbnRlcm5zKlxyXG4gXCJSZXR1cm5zIGEgbWFwIG9mIHRoZSBpbnRlcm4gbWFwcGluZ3MgZm9yIHRoZSBuYW1lc3BhY2UuXFxuICBCb290c3RyYXAgb25seS5cIlxyXG4gW3N5bV1cclxuIChsZXRcclxuICBbbnMtb2JqIChmaW5kLW5zLW9iaiBzeW0pIG5zIChOYW1lc3BhY2UuIG5zLW9iaiBzeW0pXVxyXG4gIChsZXRmblxyXG4gICBbKHN0ZXBcclxuICAgICBbcmV0IGtdXHJcbiAgICAgKGxldFxyXG4gICAgICBbdmFyLXN5bSAoc3ltYm9sIChkZW11bmdlIGspKV1cclxuICAgICAgKGFzc29jXHJcbiAgICAgICByZXRcclxuICAgICAgIHZhci1zeW1cclxuICAgICAgIChWYXIuXHJcbiAgICAgICAgKGZuKiBbXSAoZ29iamVjdC9nZXQgbnMtb2JqIGspKVxyXG4gICAgICAgIChzeW1ib2wgKHN0ciBzeW0pIChzdHIgdmFyLXN5bSkpXHJcbiAgICAgICAgezpucyBuc30pKSkpXVxyXG4gICAocmVkdWNlIHN0ZXAge30gKGpzLWtleXMgbnMtb2JqKSkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWRvdWJsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtZG91YmxlIFt4XSB4KVxyXG4ifSB7OnN5bSByYW5nZWQtaXRlcmF0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdiBzdGFydCBlbmRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5nZWQtaXRlcmF0b3JcclxuIFt2IHN0YXJ0IGVuZF1cclxuIChsZXRcclxuICBbaSBzdGFydF1cclxuICAoUmFuZ2VkSXRlcmF0b3IuXHJcbiAgIGlcclxuICAgKC0gaSAoanMtbW9kIGkgMzIpKVxyXG4gICAod2hlbiAoPCBzdGFydCAoY291bnQgdikpICh1bmNoZWNrZWQtYXJyYXktZm9yIHYgaSkpXHJcbiAgIHZcclxuICAgc3RhcnRcclxuICAgZW5kKSkpXHJcbiJ9IHs6c3ltIElUcmFuc2llbnRWZWN0b3IsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHZlY3RvciBmdW5jdGlvbmFsaXR5IHRvIHRyYW5zaWVudCBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1hc3NvYy1uISAtcG9wISl9IHs6c3ltIGtleSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGtleSBvZiB0aGUgbWFwIGVudHJ5LiIsIDphcmdsaXN0cyAoW21hcC1lbnRyeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleVxyXG4gXCJSZXR1cm5zIHRoZSBrZXkgb2YgdGhlIG1hcCBlbnRyeS5cIlxyXG4gW21hcC1lbnRyeV1cclxuICgta2V5IG1hcC1lbnRyeSkpXHJcbiJ9IHs6c3ltIGxvbmdzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGxvbmdzIFt4XSB4KVxyXG4ifSB7OnN5bSBub3Q9LCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAobm90ICg9IG9iajEgb2JqMikpIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3Q9XHJcbiBcIlNhbWUgYXMgKG5vdCAoPSBvYmoxIG9iajIpKVwiXHJcbiAoW3hdIGZhbHNlKVxyXG4gKFt4IHldIChub3QgKD0geCB5KSkpXHJcbiAoW3ggeSAmIG1vcmVdIChub3QgKGFwcGx5ID0geCB5IG1vcmUpKSkpXHJcbiJ9IHs6c3ltIHNldC1wcmludC1lcnItZm4hLCA6bWV0YSB7OmRvYyAiU2V0ICpwcmludC1lcnItZm4qIHRvIGYuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldC1wcmludC1lcnItZm4hXHJcbiBcIlNldCAqcHJpbnQtZXJyLWZuKiB0byBmLlwiXHJcbiBbZl1cclxuIChzZXQhICpwcmludC1lcnItZm4qIGYpKVxyXG4ifSB7OnN5bSBmYXN0LXBhdGgtcHJvdG9jb2xzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZmFzdC1wYXRoLXByb3RvY29sc1xyXG4gXCJwcm90b2NvbCBmcW4gLT4gW3BhcnRpdGlvbiBudW1iZXIsIGJpdF1cIlxyXG4gKHppcG1hcFxyXG4gIChtYXBcclxuICAgKGZuKiBbcDFfXzQ4Njg3I10gKHN5bWJvbCBcImNsanMuY29yZVwiIChjb3JlL3N0ciBwMV9fNDg2ODcjKSkpXHJcbiAgICdbSUZuXHJcbiAgICAgSUNvdW50ZWRcclxuICAgICBJRW1wdHlhYmxlQ29sbGVjdGlvblxyXG4gICAgIElDb2xsZWN0aW9uXHJcbiAgICAgSUluZGV4ZWRcclxuICAgICBBU2VxXHJcbiAgICAgSVNlcVxyXG4gICAgIElOZXh0XHJcbiAgICAgSUxvb2t1cFxyXG4gICAgIElBc3NvY2lhdGl2ZVxyXG4gICAgIElNYXBcclxuICAgICBJTWFwRW50cnlcclxuICAgICBJU2V0XHJcbiAgICAgSVN0YWNrXHJcbiAgICAgSVZlY3RvclxyXG4gICAgIElEZXJlZlxyXG4gICAgIElEZXJlZldpdGhUaW1lb3V0XHJcbiAgICAgSU1ldGFcclxuICAgICBJV2l0aE1ldGFcclxuICAgICBJUmVkdWNlXHJcbiAgICAgSUtWUmVkdWNlXHJcbiAgICAgSUVxdWl2XHJcbiAgICAgSUhhc2hcclxuICAgICBJU2VxYWJsZVxyXG4gICAgIElTZXF1ZW50aWFsXHJcbiAgICAgSUxpc3RcclxuICAgICBJUmVjb3JkXHJcbiAgICAgSVJldmVyc2libGVcclxuICAgICBJU29ydGVkXHJcbiAgICAgSVByaW50V2l0aFdyaXRlclxyXG4gICAgIElXcml0ZXJcclxuICAgICBJUHJpbnRXaXRoV3JpdGVyXHJcbiAgICAgSVBlbmRpbmdcclxuICAgICBJV2F0Y2hhYmxlXHJcbiAgICAgSUVkaXRhYmxlQ29sbGVjdGlvblxyXG4gICAgIElUcmFuc2llbnRDb2xsZWN0aW9uXHJcbiAgICAgSVRyYW5zaWVudEFzc29jaWF0aXZlXHJcbiAgICAgSVRyYW5zaWVudE1hcFxyXG4gICAgIElUcmFuc2llbnRWZWN0b3JcclxuICAgICBJVHJhbnNpZW50U2V0XHJcbiAgICAgSU11bHRpRm5cclxuICAgICBJQ2h1bmtlZFNlcVxyXG4gICAgIElDaHVua2VkTmV4dFxyXG4gICAgIElDb21wYXJhYmxlXHJcbiAgICAgSU5hbWVkXHJcbiAgICAgSUNsb25lYWJsZVxyXG4gICAgIElBdG9tXHJcbiAgICAgSVJlc2V0XHJcbiAgICAgSVN3YXBcclxuICAgICBJSXRlcmFibGVdKVxyXG4gIChpdGVyYXRlXHJcbiAgIChjb3JlL2ZuXHJcbiAgICBbW3AgYl1dXHJcbiAgICAoaWZcclxuICAgICAoY29yZS89PSAyMTQ3NDgzNjQ4IGIpXHJcbiAgICAgWyhjb3JlL2luYyBwKSAxXVxyXG4gICAgIFtwICM/KDpjbGogKGNvcmUvYml0LXNoaWZ0LWxlZnQgYiAxKSA6Y2xqcyAoY29yZS8qIDIgYikpXSkpXHJcbiAgIFswIDFdKSkpXHJcbiJ9IHs6c3ltIHN0cmluZz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgc3RyaW5nLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmc/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBzdHJpbmcuXCJcclxuIFt4XVxyXG4gKGdvb2cvaXNTdHJpbmcgeCkpXHJcbiJ9IHs6c3ltIHVyaT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgeCBpcyBhIGdvb2cuVXJpIGluc3RhbmNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cmk/XHJcbiBcIlJldHVybnMgdHJ1ZSB4IGlzIGEgZ29vZy5VcmkgaW5zdGFuY2UuXCJcclxuIHs6YWRkZWQgXCIxLjlcIn1cclxuIFt4XVxyXG4gKGluc3RhbmNlPyBnb29nLlVyaSB4KSlcclxuIn0gezpzeW0gZXM2LWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyAiRVhQRVJJTUVOVEFMOiBSZXR1cm4gYSBFUzIwMTUgY29tcGF0aWJsZSBpdGVyYXRvciBmb3IgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXM2LWl0ZXJhdG9yXHJcbiBcIkVYUEVSSU1FTlRBTDogUmV0dXJuIGEgRVMyMDE1IGNvbXBhdGlibGUgaXRlcmF0b3IgZm9yIGNvbGwuXCJcclxuIFtjb2xsXVxyXG4gKEVTNkl0ZXJhdG9yLiAoc2VxIGNvbGwpKSlcclxuIn0gezpzeW0gcHItc3RyLXdpdGgtb3B0cywgOm1ldGEgezpkb2MgIlByaW50cyBhIHNlcXVlbmNlIG9mIG9iamVjdHMgdG8gYSBzdHJpbmcsIG9ic2VydmluZyBhbGwgdGhlXG4gIG9wdGlvbnMgZ2l2ZW4gaW4gb3B0cyIsIDphcmdsaXN0cyAoW29ianMgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByLXN0ci13aXRoLW9wdHNcclxuIFwiUHJpbnRzIGEgc2VxdWVuY2Ugb2Ygb2JqZWN0cyB0byBhIHN0cmluZywgb2JzZXJ2aW5nIGFsbCB0aGVcXG4gIG9wdGlvbnMgZ2l2ZW4gaW4gb3B0c1wiXHJcbiBbb2JqcyBvcHRzXVxyXG4gKGlmIChlbXB0eT8gb2JqcykgXCJcIiAoc3RyIChwci1zYi13aXRoLW9wdHMgb2JqcyBvcHRzKSkpKVxyXG4ifSB7OnN5bSBtMy1DMiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbTMtQzIgKGludCA0NjE4NDU5MDcpKVxyXG4ifSB7OnN5bSAqcHJpbnQtbmV3bGluZSosIDptZXRhIHs6ZG9jICJXaGVuIHNldCB0byBsb2dpY2FsIGZhbHNlIHdpbGwgZHJvcCBuZXdsaW5lcyBmcm9tIHByaW50aW5nIGNhbGxzLlxuICBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIHRoZSBpbXBsaWNpdCBuZXdsaW5lcyBlbWl0dGVkIGJ5IHN0YW5kYXJkIEphdmFTY3JpcHRcbiAgY29uc29sZSBvYmplY3RzLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1uZXdsaW5lKiB0cnVlKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtbXVsdGlwbHktaW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLW11bHRpcGx5LWludFxyXG4gXCJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuXCJcclxuIChbXSAxKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLW11bHRpcGx5LWludCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2VcclxuICAgdW5jaGVja2VkLW11bHRpcGx5LWludFxyXG4gICAoY2xqcy5jb3JlL3VuY2hlY2tlZC1tdWx0aXBseS1pbnQgeCB5KVxyXG4gICBtb3JlKSkpXHJcbiJ9IHs6c3ltIGNodW5rLXJlc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm4gY2h1bmstcmVzdCBbc10gKC1jaHVua2VkLXJlc3QgcykpXHJcbiJ9IHs6c3ltIHJlbW92ZS1hbGwtbWV0aG9kcywgOm1ldGEgezpkb2MgIlJlbW92ZXMgYWxsIG9mIHRoZSBtZXRob2RzIG9mIG11bHRpbWV0aG9kLiIsIDphcmdsaXN0cyAoW211bHRpZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmUtYWxsLW1ldGhvZHNcclxuIFwiUmVtb3ZlcyBhbGwgb2YgdGhlIG1ldGhvZHMgb2YgbXVsdGltZXRob2QuXCJcclxuIFttdWx0aWZuXVxyXG4gKC1yZXNldCBtdWx0aWZuKSlcclxuIn0gezpzeW0gdHJhbXBvbGluZSwgOm1ldGEgezpkb2MgInRyYW1wb2xpbmUgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhbGdvcml0aG1zIHJlcXVpcmluZyBtdXR1YWxcbiAgcmVjdXJzaW9uIHdpdGhvdXQgc3RhY2sgY29uc3VtcHRpb24uIENhbGxzIGYgd2l0aCBzdXBwbGllZCBhcmdzLCBpZlxuICBhbnkuIElmIGYgcmV0dXJucyBhIGZuLCBjYWxscyB0aGF0IGZuIHdpdGggbm8gYXJndW1lbnRzLCBhbmRcbiAgY29udGludWVzIHRvIHJlcGVhdCwgdW50aWwgdGhlIHJldHVybiB2YWx1ZSBpcyBub3QgYSBmbiwgdGhlblxuICByZXR1cm5zIHRoYXQgbm9uLWZuIHZhbHVlLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gcmV0dXJuIGEgZm4gYXMgYVxuICBmaW5hbCB2YWx1ZSwgeW91IG11c3Qgd3JhcCBpdCBpbiBzb21lIGRhdGEgc3RydWN0dXJlIGFuZCB1bnBhY2sgaXRcbiAgYWZ0ZXIgdHJhbXBvbGluZSByZXR1cm5zLiIsIDphcmdsaXN0cyBbW2ZdIFtmICYgYXJnc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW1wb2xpbmVcclxuIFwidHJhbXBvbGluZSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsZ29yaXRobXMgcmVxdWlyaW5nIG11dHVhbFxcbiAgcmVjdXJzaW9uIHdpdGhvdXQgc3RhY2sgY29uc3VtcHRpb24uIENhbGxzIGYgd2l0aCBzdXBwbGllZCBhcmdzLCBpZlxcbiAgYW55LiBJZiBmIHJldHVybnMgYSBmbiwgY2FsbHMgdGhhdCBmbiB3aXRoIG5vIGFyZ3VtZW50cywgYW5kXFxuICBjb250aW51ZXMgdG8gcmVwZWF0LCB1bnRpbCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhIGZuLCB0aGVuXFxuICByZXR1cm5zIHRoYXQgbm9uLWZuIHZhbHVlLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gcmV0dXJuIGEgZm4gYXMgYVxcbiAgZmluYWwgdmFsdWUsIHlvdSBtdXN0IHdyYXAgaXQgaW4gc29tZSBkYXRhIHN0cnVjdHVyZSBhbmQgdW5wYWNrIGl0XFxuICBhZnRlciB0cmFtcG9saW5lIHJldHVybnMuXCJcclxuIChbZl0gKGxldCBbcmV0IChmKV0gKGlmIChmbj8gcmV0KSAocmVjdXIgcmV0KSByZXQpKSlcclxuIChbZiAmIGFyZ3NdICh0cmFtcG9saW5lIChmbiogW10gKGFwcGx5IGYgYXJncykpKSkpXHJcbiJ9IHs6c3ltIGRvdWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgZm9yIEphdmFTY3JpcHQgbnVtYmVycywgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb3VibGU/XHJcbiBcIlJldHVybnMgdHJ1ZSBmb3IgSmF2YVNjcmlwdCBudW1iZXJzLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKG51bWJlcj8geCkpXHJcbiJ9IHs6c3ltIHZlYywgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuIEphdmFTY3JpcHQgYXJyYXlzXG4gIHdpbGwgYmUgYWxpYXNlZCBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmVjXHJcbiBcIkNyZWF0ZXMgYSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuIEphdmFTY3JpcHQgYXJyYXlzXFxuICB3aWxsIGJlIGFsaWFzZWQgYW5kIHNob3VsZCBub3QgYmUgbW9kaWZpZWQuXCJcclxuIFtjb2xsXVxyXG4gKGNvbmRcclxuICAobWFwLWVudHJ5PyBjb2xsKVxyXG4gIFsoa2V5IGNvbGwpICh2YWwgY29sbCldXHJcbiAgKHZlY3Rvcj8gY29sbClcclxuICAod2l0aC1tZXRhIGNvbGwgbmlsKVxyXG4gIChhcnJheT8gY29sbClcclxuICAoLmZyb21BcnJheSBQZXJzaXN0ZW50VmVjdG9yIGNvbGwgdHJ1ZSlcclxuICA6ZWxzZVxyXG4gICgtcGVyc2lzdGVudCFcclxuICAgKHJlZHVjZSAtY29uaiEgKC1hcy10cmFuc2llbnQgKC4tRU1QVFkgUGVyc2lzdGVudFZlY3RvcikpIGNvbGwpKSkpXHJcbiJ9IHs6c3ltICpwcmludC1tZXRhKiwgOm1ldGEgezpkb2MgIklmIHNldCB0byBsb2dpY2FsIHRydWUsIHdoZW4gcHJpbnRpbmcgYW4gb2JqZWN0LCBpdHMgbWV0YWRhdGEgd2lsbCBhbHNvXG4gIGJlIHByaW50ZWQgaW4gYSBmb3JtIHRoYXQgY2FuIGJlIHJlYWQgYmFjayBieSB0aGUgcmVhZGVyLlxuXG4gIERlZmF1bHRzIHRvIGZhbHNlLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1tZXRhKiBmYWxzZSlcclxuIn0gezpzeW0gLW5vdGlmeS13YXRjaGVzLCA6bWV0YSB7OmRvYyAiQ2FsbHMgYWxsIHdhdGNoZXJzIHdpdGggdGhpcywgb2xkdmFsIGFuZCBuZXd2YWwuIiwgOmFyZ2xpc3RzIChbdGhpcyBvbGR2YWwgbmV3dmFsXSl9LCA6cHJvdG9jb2wgSVdhdGNoYWJsZX0gezpzeW0gaW50LCA6bWV0YSB7OmRvYyAiQ29lcmNlIHRvIGludCBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludFxyXG4gXCJDb2VyY2UgdG8gaW50IGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy5cIlxyXG4gW3hdXHJcbiAoYml0LW9yIHggMCkpXHJcbiJ9IHs6c3ltIG1hcC1lbnRyeT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSU1hcEVudHJ5IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1lbnRyeT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElNYXBFbnRyeVwiXHJcbiBbeF1cclxuIChpbXBsZW1lbnRzPyBJTWFwRW50cnkgeCkpXHJcbiJ9IHs6c3ltIHJhbmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kXG4gIG4gKGRlZmF1bHQgMSkgKGV4Y2x1c2l2ZSkuIiwgOmFyZ2xpc3RzIFtbXSBbbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmRcclxuIFwiUmV0dXJucyBhIHJhbmRvbSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmV0d2VlbiAwIChpbmNsdXNpdmUpIGFuZFxcbiAgbiAoZGVmYXVsdCAxKSAoZXhjbHVzaXZlKS5cIlxyXG4gKFtdIChyYW5kIDEpKVxyXG4gKFtuXSAoKiAoTWF0aC9yYW5kb20pIG4pKSlcclxuIn0gezpzeW0gc2Vjb25kLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAoZmlyc3QgKG5leHQgeCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gc2Vjb25kIFwiU2FtZSBhcyAoZmlyc3QgKG5leHQgeCkpXCIgW2NvbGxdIChmaXJzdCAobmV4dCBjb2xsKSkpXHJcbiJ9IHs6c3ltIGZpbmQtbnMtb2JqLCA6bWV0YSB7OmRvYyAiQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLW5zLW9ialxyXG4gXCJCb290c3RyYXAgb25seS5cIlxyXG4gW25zXVxyXG4gKGxldFxyXG4gIFttdW5nZWQtbnMgKG11bmdlIChzdHIgbnMpKSBzZWdzICguc3BsaXQgbXVuZ2VkLW5zIFwiLlwiKV1cclxuICAoY2FzZVxyXG4gICAqdGFyZ2V0KlxyXG4gICBcIm5vZGVqc1wiXHJcbiAgIChpZlxyXG4gICAganMvQ09NUElMRURcclxuICAgIChmaW5kLW5zLW9iaipcclxuICAgICAodHJ5XHJcbiAgICAgIChsZXRcclxuICAgICAgIFtjdHh0IChqcy9ldmFsIChmaXJzdCBzZWdzKSldXHJcbiAgICAgICAod2hlbiAoYW5kIGN0eHQgKG9iamVjdD8gY3R4dCkpIGN0eHQpKVxyXG4gICAgICAoY2F0Y2gganMvUmVmZXJlbmNlRXJyb3IgZSBuaWwpKVxyXG4gICAgIChuZXh0IHNlZ3MpKVxyXG4gICAgKGZpbmQtbnMtb2JqKiBnb29nL2dsb2JhbCBzZWdzKSlcclxuICAgKFwiZGVmYXVsdFwiIFwid2Vid29ya2VyXCIpXHJcbiAgIChmaW5kLW5zLW9iaiogZ29vZy9nbG9iYWwgc2VncylcclxuICAgKHRocm93XHJcbiAgICAoanMvRXJyb3IuXHJcbiAgICAgKHN0ciBcImZpbmQtbnMtb2JqIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcmdldCBcIiAqdGFyZ2V0KikpKSkpKVxyXG4ifSB7OnN5bSBJRWRpdGFibGVDb2xsZWN0aW9uLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNvbGxlY3Rpb25zIHdoaWNoIGNhbiB0cmFuc2Zvcm1lZCB0byB0cmFuc2llbnRzLiJ9LCA6bWV0aG9kcyAoLWFzLXRyYW5zaWVudCl9IHs6c3ltIGhhc2gtY29tYmluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzZWVkIGhhc2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLWNvbWJpbmVcclxuIFtzZWVkIGhhc2hdXHJcbiAoYml0LXhvclxyXG4gIHNlZWRcclxuICAoK1xyXG4gICBoYXNoXHJcbiAgIDI2NTQ0MzU3NjlcclxuICAgKGJpdC1zaGlmdC1sZWZ0IHNlZWQgNilcclxuICAgKGJpdC1zaGlmdC1yaWdodCBzZWVkIDIpKSkpXHJcbiJ9IHs6c3ltID4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIG9yZGVyLFxuICBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA+XHJcbiBcIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgb3JkZXIsXFxuICBvdGhlcndpc2UgZmFsc2UuXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoY2xqcy5jb3JlLz4geCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKGNsanMuY29yZS8+IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKGNsanMuY29yZS8+IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gLW5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lIFN0cmluZyBvZiB4LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBJTmFtZWR9IHs6c3ltIHJlcGxhY2UsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG1hcCBvZiByZXBsYWNlbWVudCBwYWlycyBhbmQgYSB2ZWN0b3IvY29sbGVjdGlvbiwgcmV0dXJucyBhXG4gIHZlY3Rvci9zZXEgd2l0aCBhbnkgZWxlbWVudHMgPSBhIGtleSBpbiBzbWFwIHJlcGxhY2VkIHdpdGggdGhlXG4gIGNvcnJlc3BvbmRpbmcgdmFsIGluIHNtYXAuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb25cbiAgaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbc21hcF0gW3NtYXAgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGxhY2VcclxuIFwiR2l2ZW4gYSBtYXAgb2YgcmVwbGFjZW1lbnQgcGFpcnMgYW5kIGEgdmVjdG9yL2NvbGxlY3Rpb24sIHJldHVybnMgYVxcbiAgdmVjdG9yL3NlcSB3aXRoIGFueSBlbGVtZW50cyA9IGEga2V5IGluIHNtYXAgcmVwbGFjZWQgd2l0aCB0aGVcXG4gIGNvcnJlc3BvbmRpbmcgdmFsIGluIHNtYXAuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb25cXG4gIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3NtYXBdXHJcbiAgKG1hcFxyXG4gICAoZm4qXHJcbiAgICBbcDFfXzQ4ODMyI11cclxuICAgIChpZi1sZXQgW2UgKGZpbmQgc21hcCBwMV9fNDg4MzIjKV0gKHZhbCBlKSBwMV9fNDg4MzIjKSkpKVxyXG4gKFtzbWFwIGNvbGxdXHJcbiAgKGlmXHJcbiAgICh2ZWN0b3I/IGNvbGwpXHJcbiAgIChsZXRcclxuICAgIFtuIChjb3VudCBjb2xsKV1cclxuICAgIChyZWR1Y2VcclxuICAgICAoZm5cclxuICAgICAgW3YgaV1cclxuICAgICAgKGlmLWxldCBbZSAoZmluZCBzbWFwIChudGggdiBpKSldIChhc3NvYyB2IGkgKHNlY29uZCBlKSkgdikpXHJcbiAgICAgY29sbFxyXG4gICAgICh0YWtlIG4gKGl0ZXJhdGUgaW5jIDApKSkpXHJcbiAgIChtYXBcclxuICAgIChmbipcclxuICAgICBbcDFfXzQ4ODMzI11cclxuICAgICAoaWYtbGV0IFtlIChmaW5kIHNtYXAgcDFfXzQ4ODMzIyldIChzZWNvbmQgZSkgcDFfXzQ4ODMzIykpXHJcbiAgICBjb2xsKSkpKVxyXG4ifSB7OnN5bSBpbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50ZWdlcj8gb3IgaXMgYW4gaW5zdGFuY2Ugb2YgZ29vZy5tYXRoLkludGVnZXJcbiAgIG9yIGdvb2cubWF0aC5Mb25nLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludGVnZXI/IG9yIGlzIGFuIGluc3RhbmNlIG9mIGdvb2cubWF0aC5JbnRlZ2VyXFxuICAgb3IgZ29vZy5tYXRoLkxvbmcuXCJcclxuIFt4XVxyXG4gKG9yXHJcbiAgKGludGVnZXI/IHgpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguSW50ZWdlciB4KVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkxvbmcgeCkpKVxyXG4ifSB7OnN5bSBhc3NvY2lhdGl2ZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIElBc3NvY2lhdGl2ZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3NvY2lhdGl2ZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBJQXNzb2NpYXRpdmVcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJQXNzb2NpYXRpdmUgeCkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1pbnQsIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gaW50IGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWludFxyXG4gXCJDb2VyY2UgdG8gaW50IGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy5cIlxyXG4gW3hdXHJcbiAoZml4IHgpKVxyXG4ifSB7OnN5bSBqcy1rZXlzLCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRoZSBKYXZhU2NyaXB0IGtleXMgZm9yIGFuIG9iamVjdC4iLCA6YXJnbGlzdHMgKFtvYmpdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1rZXlzXHJcbiBcIlJldHVybiB0aGUgSmF2YVNjcmlwdCBrZXlzIGZvciBhbiBvYmplY3QuXCJcclxuIFtvYmpdXHJcbiAoZ29iamVjdC9nZXRLZXlzIG9iaikpXHJcbiJ9IHs6c3ltIGluc3QtbXMqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2luc3RdKX0sIDpwcm90b2NvbCBJbnN0fSB7OnN5bSBrZXl3b3JkPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBLZXl3b3JkIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXdvcmQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBLZXl3b3JkXCJcclxuIFt4XVxyXG4gKGluc3RhbmNlPyBLZXl3b3JkIHgpKVxyXG4ifSB7OnN5bSBhcnJheS1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGFycmF5LWl0ZXIgW3hdIChBcnJheUl0ZXIuIHggMCkpXHJcbiJ9IHs6c3ltIGZvcmNlLCA6bWV0YSB7OmRvYyAiSWYgeCBpcyBhIERlbGF5LCByZXR1cm5zIHRoZSAocG9zc2libHkgY2FjaGVkKSB2YWx1ZSBvZiBpdHMgZXhwcmVzc2lvbiwgZWxzZSByZXR1cm5zIHgiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9yY2VcclxuIFwiSWYgeCBpcyBhIERlbGF5LCByZXR1cm5zIHRoZSAocG9zc2libHkgY2FjaGVkKSB2YWx1ZSBvZiBpdHMgZXhwcmVzc2lvbiwgZWxzZSByZXR1cm5zIHhcIlxyXG4gW3hdXHJcbiAoaWYgKGRlbGF5PyB4KSAoZGVyZWYgeCkgeCkpXHJcbiJ9IHs6c3ltIGdyb3VwLWJ5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCBrZXllZCBieSB0aGUgcmVzdWx0IG9mXG4gIGYgb24gZWFjaCBlbGVtZW50LiBUaGUgdmFsdWUgYXQgZWFjaCBrZXkgd2lsbCBiZSBhIHZlY3RvciBvZiB0aGVcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyZWQgaW4gY29sbC4iLCA6YXJnbGlzdHMgKFtmIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBncm91cC1ieVxyXG4gXCJSZXR1cm5zIGEgbWFwIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIGtleWVkIGJ5IHRoZSByZXN1bHQgb2ZcXG4gIGYgb24gZWFjaCBlbGVtZW50LiBUaGUgdmFsdWUgYXQgZWFjaCBrZXkgd2lsbCBiZSBhIHZlY3RvciBvZiB0aGVcXG4gIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMsIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhcmVkIGluIGNvbGwuXCJcclxuIFtmIGNvbGxdXHJcbiAocGVyc2lzdGVudCFcclxuICAocmVkdWNlXHJcbiAgIChmbiBbcmV0IHhdIChsZXQgW2sgKGYgeCldIChhc3NvYyEgcmV0IGsgKGNvbmogKGdldCByZXQgayBbXSkgeCkpKSlcclxuICAgKHRyYW5zaWVudCB7fSlcclxuICAgY29sbCkpKVxyXG4ifSB7OnN5bSAtcnNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb2YgdGhlIGl0ZW1zIGluIGNvbGwgaW4gcmV2ZXJzZWQgb3JkZXIuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElSZXZlcnNpYmxlfSB7OnN5bSBwcm4sIDptZXRhIHs6ZG9jICJTYW1lIGFzIHByIGZvbGxvd2VkIGJ5IChuZXdsaW5lKS4iLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm5cclxuIFwiU2FtZSBhcyBwciBmb2xsb3dlZCBieSAobmV3bGluZSkuXCJcclxuIFsmIG9ianNdXHJcbiAocHItd2l0aC1vcHRzIG9ianMgKHByLW9wdHMpKVxyXG4gKHdoZW4gKnByaW50LW5ld2xpbmUqIChuZXdsaW5lIChwci1vcHRzKSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LWRpc3BhdGNoLXZhbCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybiBpdCdzIGRlZmF1bHQtZGlzcGF0Y2gtdmFsLiIsIDphcmdsaXN0cyAoW211bHRpZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWZhdWx0LWRpc3BhdGNoLXZhbFxyXG4gXCJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm4gaXQncyBkZWZhdWx0LWRpc3BhdGNoLXZhbC5cIlxyXG4gW211bHRpZm5dXHJcbiAoLWRlZmF1bHQtZGlzcGF0Y2gtdmFsIG11bHRpZm4pKVxyXG4ifSB7OnN5bSBqcy1pdGVyYWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGhhcyBhIEphdmFTY3JpcHQgaXRlcmF0b3IgcHJvcGVydHkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtaXRlcmFibGU/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaGFzIGEgSmF2YVNjcmlwdCBpdGVyYXRvciBwcm9wZXJ0eVwiXHJcbiBbeF1cclxuIChhbmQgKG5vdCAobmlsPyB4KSkgKG5vdCAobmlsPyAoanMqIFwifnt9W357fV1cIiB4IElURVJfU1lNQk9MKSkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLW11bHRpcGx5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLW11bHRpcGx5XHJcbiBcIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS5cIlxyXG4gKFtdIDEpXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtbXVsdGlwbHkgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlIHVuY2hlY2tlZC1tdWx0aXBseSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1tdWx0aXBseSB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gZXZlbj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbiBpcyBldmVuLCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIG4gaXMgbm90IGFuIGludGVnZXIiLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXZlbj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG4gaXMgZXZlbiwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBuIGlzIG5vdCBhbiBpbnRlZ2VyXCJcclxuIFtuXVxyXG4gKGlmXHJcbiAgKGludGVnZXI/IG4pXHJcbiAgKHplcm8/IChiaXQtYW5kIG4gMSkpXHJcbiAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlcjogXCIgbikpKSkpXHJcbiJ9IHs6c3ltIGVzNi1pdGVyYXRvci1zZXEsIDptZXRhIHs6ZG9jICJFWFBFUklNRU5UQUw6IEdpdmVuIGFuIEVTMjAxNSBjb21wYXRpYmxlIGl0ZXJhdG9yIHJldHVybiBhIHNlcS4iLCA6YXJnbGlzdHMgKFtpdGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXM2LWl0ZXJhdG9yLXNlcVxyXG4gXCJFWFBFUklNRU5UQUw6IEdpdmVuIGFuIEVTMjAxNSBjb21wYXRpYmxlIGl0ZXJhdG9yIHJldHVybiBhIHNlcS5cIlxyXG4gW2l0ZXJdXHJcbiAobGV0XHJcbiAgW3YgKC5uZXh0IGl0ZXIpXVxyXG4gIChpZiAoLi1kb25lIHYpIG5pbCAoRVM2SXRlcmF0b3JTZXEuICguLXZhbHVlIHYpIGl0ZXIgbmlsKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtZGVjLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIHgsIGFuIGludC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWRlY1xyXG4gXCJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4geCwgYW4gaW50LlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvdW5jaGVja2VkLWRlYyB4KSlcclxuIn0gezpzeW0gSW5zdCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGluc3QtbXMqKX0gezpzeW0gcGVyc2lzdGVudC1hcnJheS1tYXAtc2VxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FyciBpIF9tZXRhXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGVyc2lzdGVudC1hcnJheS1tYXAtc2VxXHJcbiBbYXJyIGkgX21ldGFdXHJcbiAod2hlblxyXG4gICg8PSBpICgtIChhbGVuZ3RoIGFycikgMikpXHJcbiAgKFBlcnNpc3RlbnRBcnJheU1hcFNlcS4gYXJyIGkgX21ldGEpKSlcclxuIn0gezpzeW0gdGFnZ2VkLWxpdGVyYWw/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGFnZ2VkIGxpdGVyYWwiLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhZ2dlZC1saXRlcmFsP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSB0YWdnZWQgbGl0ZXJhbFwiXHJcbiBbdmFsdWVdXHJcbiAoaW5zdGFuY2U/IFRhZ2dlZExpdGVyYWwgdmFsdWUpKVxyXG4ifSB7OnN5bSBkb3VibGUtYXJyYXksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIGFycmF5IG9mIGRvdWJsZXMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcbiAgd2l0aCBDbG9qdXJlLiIsIDphcmdsaXN0cyBbW3NpemUtb3Itc2VxXSBbc2l6ZSBpbml0LXZhbC1vci1zZXFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb3VibGUtYXJyYXlcclxuIFwiQ3JlYXRlcyBhbiBhcnJheSBvZiBkb3VibGVzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XFxuICB3aXRoIENsb2p1cmUuXCJcclxuIChbc2l6ZS1vci1zZXFdXHJcbiAgKGlmXHJcbiAgIChudW1iZXI/IHNpemUtb3Itc2VxKVxyXG4gICAoZG91YmxlLWFycmF5IHNpemUtb3Itc2VxIG5pbClcclxuICAgKGludG8tYXJyYXkgc2l6ZS1vci1zZXEpKSlcclxuIChbc2l6ZSBpbml0LXZhbC1vci1zZXFdXHJcbiAgKGxldFxyXG4gICBbYSAobWFrZS1hcnJheSBzaXplKV1cclxuICAgKGlmXHJcbiAgICAoc2VxPyBpbml0LXZhbC1vci1zZXEpXHJcbiAgICAobGV0XHJcbiAgICAgW3MgKHNlcSBpbml0LXZhbC1vci1zZXEpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtpIDAgcyBzXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgcyAoPCBpIHNpemUpKVxyXG4gICAgICAgKGRvIChhc2V0IGEgaSAoZmlyc3QgcykpIChyZWN1ciAoaW5jIGkpIChuZXh0IHMpKSlcclxuICAgICAgIGEpKSlcclxuICAgIChkbyAoZG90aW1lcyBbaSBzaXplXSAoYXNldCBhIGkgaW5pdC12YWwtb3Itc2VxKSkgYSkpKSkpXHJcbiJ9IHs6c3ltIGNyZWF0ZS1ucywgOm1ldGEgezpkb2MgIkNyZWF0ZSBhIG5ldyBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbC4gQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIFtbc3ltXSBbc3ltIG5zLW9ial1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNyZWF0ZS1uc1xyXG4gXCJDcmVhdGUgYSBuZXcgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wuIEJvb3RzdHJhcCBvbmx5LlwiXHJcbiAoW3N5bV0gKGNyZWF0ZS1ucyBzeW0gKGZpbmQtbnMtb2JqIHN5bSkpKVxyXG4gKFtzeW0gbnMtb2JqXSAoTmFtZXNwYWNlLiBucy1vYmogc3ltKSkpXHJcbiJ9IHs6c3ltIGRlZm4sIDptZXRhIHs6YXJnbGlzdHMgKHF1b3RlIChbbmFtZSBkb2Mtc3RyaW5nPyBhdHRyLW1hcD8gW3BhcmFtcypdIHByZXBvc3QtbWFwPyBib2R5XSBbbmFtZSBkb2Mtc3RyaW5nPyBhdHRyLW1hcD8gKFtwYXJhbXMqXSBwcmVwb3N0LW1hcD8gYm9keSkgKyBhdHRyLW1hcD9dKSksIDpkb2MgIlNhbWUgYXMgKGRlZiBuYW1lIChjb3JlL2ZuIFtwYXJhbXMqIF0gZXhwcnMqKSkgb3IgKGRlZlxuICAgIG5hbWUgKGNvcmUvZm4gKFtwYXJhbXMqIF0gZXhwcnMqKSspKSB3aXRoIGFueSBkb2Mtc3RyaW5nIG9yIGF0dHJzIGFkZGVkXG4gICAgdG8gdGhlIHZhciBtZXRhZGF0YS4gcHJlcG9zdC1tYXAgZGVmaW5lcyBhIG1hcCB3aXRoIG9wdGlvbmFsIGtleXNcbiAgICA6cHJlIGFuZCA6cG9zdCB0aGF0IGNvbnRhaW4gY29sbGVjdGlvbnMgb2YgcHJlIG9yIHBvc3QgY29uZGl0aW9ucy4ifSwgOnNvdXJjZSAiKGRlZlxyXG4gZGVmblxyXG4gKGNvcmUvZm5cclxuICBkZWZuXHJcbiAgWyZmb3JtICZlbnYgbmFtZSAmIGZkZWNsXVxyXG4gIChpZlxyXG4gICAoY29yZS9pbnN0YW5jZT8gIz8oOmNsaiBjbG9qdXJlLmxhbmcuU3ltYm9sIDpjbGpzIFN5bWJvbCkgbmFtZSlcclxuICAgbmlsXHJcbiAgICh0aHJvd1xyXG4gICAgIz8oOmNsaiAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLiBcIkZpcnN0IGFyZ3VtZW50IHRvIGRlZm4gbXVzdCBiZSBhIHN5bWJvbFwiKSA6Y2xqcyAoanMvRXJyb3IuIFwiRmlyc3QgYXJndW1lbnQgdG8gZGVmbiBtdXN0IGJlIGEgc3ltYm9sXCIpKSkpXHJcbiAgKGNvcmUvbGV0XHJcbiAgIFttXHJcbiAgICAoaWYgKGNvcmUvc3RyaW5nPyAoZmlyc3QgZmRlY2wpKSB7OmRvYyAoZmlyc3QgZmRlY2wpfSB7fSlcclxuICAgIGZkZWNsXHJcbiAgICAoaWYgKGNvcmUvc3RyaW5nPyAoZmlyc3QgZmRlY2wpKSAobmV4dCBmZGVjbCkgZmRlY2wpXHJcbiAgICBtXHJcbiAgICAoaWYgKG1hcD8gKGZpcnN0IGZkZWNsKSkgKGNvbmogbSAoZmlyc3QgZmRlY2wpKSBtKVxyXG4gICAgZmRlY2xcclxuICAgIChpZiAobWFwPyAoZmlyc3QgZmRlY2wpKSAobmV4dCBmZGVjbCkgZmRlY2wpXHJcbiAgICBmZGVjbFxyXG4gICAgKGlmICh2ZWN0b3I/IChmaXJzdCBmZGVjbCkpIChjb3JlL2xpc3QgZmRlY2wpIGZkZWNsKVxyXG4gICAgbVxyXG4gICAgKGlmIChtYXA/IChsYXN0IGZkZWNsKSkgKGNvbmogbSAobGFzdCBmZGVjbCkpIG0pXHJcbiAgICBmZGVjbFxyXG4gICAgKGlmIChtYXA/IChsYXN0IGZkZWNsKSkgKGJ1dGxhc3QgZmRlY2wpIGZkZWNsKVxyXG4gICAgbVxyXG4gICAgKGNvbmogezphcmdsaXN0cyAoY29yZS9saXN0ICdxdW90ZSAoc2lncyBmZGVjbCkpfSBtKVxyXG4gICAgbVxyXG4gICAgKGNvbmogKGlmIChtZXRhIG5hbWUpIChtZXRhIG5hbWUpIHt9KSBtKV1cclxuICAgKGNvcmUvY29uZFxyXG4gICAgKG11bHRpLWFyaXR5LWZuPyBmZGVjbClcclxuICAgIChtdWx0aS1hcml0eS1mblxyXG4gICAgIG5hbWVcclxuICAgICAoaWZcclxuICAgICAgKGNvbXAvY2hlY2tpbmctdHlwZXM/KVxyXG4gICAgICAodXBkYXRlLWluIG0gWzpqc2RvY10gY29uaiBcIkBwYXJhbSB7Li4uKn0gdmFyX2FyZ3NcIilcclxuICAgICAgbSlcclxuICAgICBmZGVjbFxyXG4gICAgICg6ZGVmLWVtaXRzLXZhciAmZW52KSlcclxuICAgICh2YXJpYWRpYy1mbj8gZmRlY2wpXHJcbiAgICAodmFyaWFkaWMtZm5cclxuICAgICBuYW1lXHJcbiAgICAgKGlmXHJcbiAgICAgIChjb21wL2NoZWNraW5nLXR5cGVzPylcclxuICAgICAgKHVwZGF0ZS1pbiBtIFs6anNkb2NdIGNvbmogXCJAcGFyYW0gey4uLip9IHZhcl9hcmdzXCIpXHJcbiAgICAgIG0pXHJcbiAgICAgZmRlY2xcclxuICAgICAoOmRlZi1lbWl0cy12YXIgJmVudikpXHJcbiAgICA6ZWxzZVxyXG4gICAgKGNvcmUvbGlzdCAnZGVmICh3aXRoLW1ldGEgbmFtZSBtKSAoY29ucyAnY2xqcy5jb3JlL2ZuIGZkZWNsKSkpKSkpXHJcbiJ9IHs6c3ltIHNwcmVhZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthcmdsaXN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3ByZWFkXHJcbiBbYXJnbGlzdF1cclxuICh3aGVuLW5vdFxyXG4gIChuaWw/IGFyZ2xpc3QpXHJcbiAgKGxldFxyXG4gICBbbiAobmV4dCBhcmdsaXN0KV1cclxuICAgKGlmXHJcbiAgICAobmlsPyBuKVxyXG4gICAgKHNlcSAoZmlyc3QgYXJnbGlzdCkpXHJcbiAgICAoY29ucyAoZmlyc3QgYXJnbGlzdCkgKHNwcmVhZCBuKSkpKSkpXHJcbiJ9IHs6c3ltIHJzZXEsIDptZXRhIHs6ZG9jICJSZXR1cm5zLCBpbiBjb25zdGFudCB0aW1lLCBhIHNlcSBvZiB0aGUgaXRlbXMgaW4gcmV2ICh3aGljaFxuICBjYW4gYmUgYSB2ZWN0b3Igb3Igc29ydGVkLW1hcCksIGluIHJldmVyc2Ugb3JkZXIuIElmIHJldiBpcyBlbXB0eSByZXR1cm5zIG5pbCIsIDphcmdsaXN0cyAoW3Jldl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJzZXFcclxuIFwiUmV0dXJucywgaW4gY29uc3RhbnQgdGltZSwgYSBzZXEgb2YgdGhlIGl0ZW1zIGluIHJldiAod2hpY2hcXG4gIGNhbiBiZSBhIHZlY3RvciBvciBzb3J0ZWQtbWFwKSwgaW4gcmV2ZXJzZSBvcmRlci4gSWYgcmV2IGlzIGVtcHR5IHJldHVybnMgbmlsXCJcclxuIFtyZXZdXHJcbiAoLXJzZXEgcmV2KSlcclxuIn0gezpzeW0gZXgtY2F1c2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGV4Y2VwdGlvbiBjYXVzZSAoYW4gRXJyb3IgLyBFeGNlcHRpb25JbmZvKSBpZiBleCBpcyBhblxuICBFeGNlcHRpb25JbmZvLlxuICBPdGhlcndpc2UgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleC1jYXVzZVxyXG4gXCJSZXR1cm5zIGV4Y2VwdGlvbiBjYXVzZSAoYW4gRXJyb3IgLyBFeGNlcHRpb25JbmZvKSBpZiBleCBpcyBhblxcbiAgRXhjZXB0aW9uSW5mby5cXG4gIE90aGVyd2lzZSByZXR1cm5zIG5pbC5cIlxyXG4gW2V4XVxyXG4gKHdoZW4gKGluc3RhbmNlPyBFeGNlcHRpb25JbmZvIGV4KSAoLi1jYXVzZSBleCkpKVxyXG4ifSB7OnN5bSBJUmVzZXQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHJlc2V0dGluZyBmdW5jdGlvbmFsaXR5LiJ9LCA6bWV0aG9kcyAoLXJlc2V0ISl9IHs6c3ltIElFbXB0eWFibGVDb2xsZWN0aW9uLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNyZWF0aW5nIGFuIGVtcHR5IGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtZW1wdHkpfSB7OnN5bSBleC1tZXNzYWdlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWVzc2FnZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gRXJyb3IgLyBFeGNlcHRpb25JbmZvIG9iamVjdC5cbiAgRm9yIG5vbi1FcnJvcnMgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleC1tZXNzYWdlXHJcbiBcIlJldHVybnMgdGhlIG1lc3NhZ2UgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIEVycm9yIC8gRXhjZXB0aW9uSW5mbyBvYmplY3QuXFxuICBGb3Igbm9uLUVycm9ycyByZXR1cm5zIG5pbC5cIlxyXG4gW2V4XVxyXG4gKHdoZW4gKGluc3RhbmNlPyBqcy9FcnJvciBleCkgKC4tbWVzc2FnZSBleCkpKVxyXG4ifSB7OnN5bSAqcHJpbnQtZm4tYm9kaWVzKiwgOm1ldGEgezpkb2MgIipwcmludC1mbnMtYm9kaWVzKiBjb250cm9scyB3aGV0aGVyIGZ1bmN0aW9ucyBwcmludCB0aGVpciBzb3VyY2Ugb3JcbiAgICBvbmx5IHRoZWlyIG5hbWVzLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1mbi1ib2RpZXMqIGZhbHNlKVxyXG4ifSB7OnN5bSBzdHJpbmctcHJpbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZy1wcmludFxyXG4gW3hdXHJcbiAod2hlblxyXG4gIChuaWw/ICpwcmludC1mbiopXHJcbiAgKHRocm93XHJcbiAgIChqcy9FcnJvci4gXCJObyAqcHJpbnQtZm4qIGZuIHNldCBmb3IgZXZhbHVhdGlvbiBlbnZpcm9ubWVudFwiKSkpXHJcbiAoKnByaW50LWZuKiB4KVxyXG4gbmlsKVxyXG4ifSB7OnN5bSBmbG9hdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBmbG9hdCBbeF0geClcclxuIn0gezpzeW0gSVJlY29yZCwgOm1ldGEgezpkb2MgIk1hcmtlciBpbnRlcmZhY2UgaW5kaWNhdGluZyBhIHJlY29yZCBvYmplY3QifSwgOm1ldGhvZHMgKCl9IHs6c3ltIHByLXN0ciwgOm1ldGEgezpkb2MgInByIHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXQuIEZ1bmRhbWVudGFsIGVudHJ5cG9pbnQgdG8gSVByaW50V2l0aFdyaXRlci4iLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwci1zdHJcclxuIFwicHIgdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdC4gRnVuZGFtZW50YWwgZW50cnlwb2ludCB0byBJUHJpbnRXaXRoV3JpdGVyLlwiXHJcbiBbJiBvYmpzXVxyXG4gKHByLXN0ci13aXRoLW9wdHMgb2JqcyAocHItb3B0cykpKVxyXG4ifSB7OnN5bSBlczYtc2V0LWVudHJpZXMtaXRlcmF0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzNi1zZXQtZW50cmllcy1pdGVyYXRvclxyXG4gW2NvbGxdXHJcbiAoRVM2U2V0RW50cmllc0l0ZXJhdG9yLiAoc2VxIGNvbGwpKSlcclxuIn0gezpzeW0gY29uY2F0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIHJlcHJlc2VudGluZyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIHN1cHBsaWVkIGNvbGxzLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiB6c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmNhdFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgcmVwcmVzZW50aW5nIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc3VwcGxpZWQgY29sbHMuXCJcclxuIChbXSAobGF6eS1zZXEgbmlsKSlcclxuIChbeF0gKGxhenktc2VxIHgpKVxyXG4gKFt4IHldXHJcbiAgKGxhenktc2VxXHJcbiAgIChsZXRcclxuICAgIFtzIChzZXEgeCldXHJcbiAgICAoaWZcclxuICAgICBzXHJcbiAgICAgKGlmXHJcbiAgICAgIChjaHVua2VkLXNlcT8gcylcclxuICAgICAgKGNodW5rLWNvbnMgKGNodW5rLWZpcnN0IHMpIChjb25jYXQgKGNodW5rLXJlc3QgcykgeSkpXHJcbiAgICAgIChjb25zIChmaXJzdCBzKSAoY29uY2F0IChyZXN0IHMpIHkpKSlcclxuICAgICB5KSkpKVxyXG4gKFt4IHkgJiB6c11cclxuICAobGV0XHJcbiAgIFtjYXRcclxuICAgIChmblxyXG4gICAgIGNhdFxyXG4gICAgIFt4eXMgenNdXHJcbiAgICAgKGxhenktc2VxXHJcbiAgICAgIChsZXRcclxuICAgICAgIFt4eXMgKHNlcSB4eXMpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgeHlzXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChjaHVua2VkLXNlcT8geHlzKVxyXG4gICAgICAgICAoY2h1bmstY29ucyAoY2h1bmstZmlyc3QgeHlzKSAoY2F0IChjaHVuay1yZXN0IHh5cykgenMpKVxyXG4gICAgICAgICAoY29ucyAoZmlyc3QgeHlzKSAoY2F0IChyZXN0IHh5cykgenMpKSlcclxuICAgICAgICAod2hlbiB6cyAoY2F0IChmaXJzdCB6cykgKG5leHQgenMpKSkpKSkpXVxyXG4gICAoY2F0IChjb25jYXQgeCB5KSB6cykpKSlcclxuIn0gezpzeW0gLW1ldGhvZHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWZdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0ganMtcmVzZXJ2ZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGpzLXJlc2VydmVkIG5pbClcclxuIn0gezpzeW0gSURlcmVmV2l0aFRpbWVvdXQsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgtZGVyZWYtd2l0aC10aW1lb3V0KX0gezpzeW0gc3ltYm9sLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIFN5bWJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIG5hbWUuIEFyaXR5LTEgd29ya3NcbiAgb24gc3RyaW5ncywga2V5d29yZHMsIGFuZCB2YXJzLiIsIDphcmdsaXN0cyBbW25hbWVdIFtucyBuYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4gc3ltYm9sXHJcbiBcIlJldHVybnMgYSBTeW1ib2wgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBuYW1lLiBBcml0eS0xIHdvcmtzXFxuICBvbiBzdHJpbmdzLCBrZXl3b3JkcywgYW5kIHZhcnMuXCJcclxuIChbbmFtZV1cclxuICAoY29uZFxyXG4gICAoc3ltYm9sPyBuYW1lKVxyXG4gICBuYW1lXHJcbiAgIChzdHJpbmc/IG5hbWUpXHJcbiAgIChsZXRcclxuICAgIFtpZHggKC5pbmRleE9mIG5hbWUgXCIvXCIpXVxyXG4gICAgKGlmXHJcbiAgICAgKDwgaWR4IDEpXHJcbiAgICAgKHN5bWJvbCBuaWwgbmFtZSlcclxuICAgICAoc3ltYm9sXHJcbiAgICAgICguc3Vic3RyaW5nIG5hbWUgMCBpZHgpXHJcbiAgICAgICguc3Vic3RyaW5nIG5hbWUgKGluYyBpZHgpICguIG5hbWUgLWxlbmd0aCkpKSkpXHJcbiAgICh2YXI/IG5hbWUpXHJcbiAgICguLXN5bSBuYW1lKVxyXG4gICAoa2V5d29yZD8gbmFtZSlcclxuICAgKHJlY3VyICguLWZxbiBuYW1lKSlcclxuICAgOmVsc2VcclxuICAgKHRocm93IChuZXcganMvRXJyb3IgXCJubyBjb252ZXJzaW9uIHRvIHN5bWJvbFwiKSkpKVxyXG4gKFtucyBuYW1lXVxyXG4gIChsZXRcclxuICAgW3N5bS1zdHIgKGlmLW5vdCAobmlsPyBucykgKHN0ciBucyBcIi9cIiBuYW1lKSBuYW1lKV1cclxuICAgKFN5bWJvbC4gbnMgbmFtZSBzeW0tc3RyIG5pbCBuaWwpKSkpXHJcbiJ9IHs6c3ltIHRvLWFycmF5LTJkLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIChwb3RlbnRpYWxseS1yYWdnZWQpIDItZGltZW5zaW9uYWwgYXJyYXlcbiAgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdG8tYXJyYXktMmRcclxuIFwiUmV0dXJucyBhIChwb3RlbnRpYWxseS1yYWdnZWQpIDItZGltZW5zaW9uYWwgYXJyYXlcXG4gIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuXCJcclxuIFtjb2xsXVxyXG4gKGxldFxyXG4gIFtyZXQgKG1ha2UtYXJyYXkgKGNvdW50IGNvbGwpKV1cclxuICAobG9vcFxyXG4gICBbaSAwIHhzIChzZXEgY29sbCldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKG5pbD8geHMpXHJcbiAgICAoYXNldCByZXQgaSAodG8tYXJyYXkgKGZpcnN0IHhzKSkpXHJcbiAgICAocmVjdXIgKGluYyBpKSAobmV4dCB4cykpKSlcclxuICByZXQpKVxyXG4ifSB7OnN5bSBFeGNlcHRpb25JbmZvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21lc3NhZ2UgZGF0YSBjYXVzZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIEV4Y2VwdGlvbkluZm9cclxuIFttZXNzYWdlIGRhdGEgY2F1c2VdXHJcbiAobGV0XHJcbiAgW2UgKGpzL0Vycm9yLiBtZXNzYWdlKV1cclxuICAodGhpcy1hc1xyXG4gICB0aGlzXHJcbiAgIChzZXQhICguLW1lc3NhZ2UgdGhpcykgbWVzc2FnZSlcclxuICAgKHNldCEgKC4tZGF0YSB0aGlzKSBkYXRhKVxyXG4gICAoc2V0ISAoLi1jYXVzZSB0aGlzKSBjYXVzZSlcclxuICAgKGRvXHJcbiAgICAoc2V0ISAoLi1uYW1lIHRoaXMpICguLW5hbWUgZSkpXHJcbiAgICAoc2V0ISAoLi1kZXNjcmlwdGlvbiB0aGlzKSAoLi1kZXNjcmlwdGlvbiBlKSlcclxuICAgIChzZXQhICguLW51bWJlciB0aGlzKSAoLi1udW1iZXIgZSkpXHJcbiAgICAoc2V0ISAoLi1maWxlTmFtZSB0aGlzKSAoLi1maWxlTmFtZSBlKSlcclxuICAgIChzZXQhICguLWxpbmVOdW1iZXIgdGhpcykgKC4tbGluZU51bWJlciBlKSlcclxuICAgIChzZXQhICguLWNvbHVtbk51bWJlciB0aGlzKSAoLi1jb2x1bW5OdW1iZXIgZSkpXHJcbiAgICAoc2V0ISAoLi1zdGFjayB0aGlzKSAoLi1zdGFjayBlKSkpXHJcbiAgIHRoaXMpKSlcclxuIn0gezpzeW0gbW9kLCA6bWV0YSB7OmRvYyAiTW9kdWx1cyBvZiBudW0gYW5kIGRpdi4gVHJ1bmNhdGVzIHRvd2FyZCBuZWdhdGl2ZSBpbmZpbml0eS4iLCA6YXJnbGlzdHMgKFtuIGRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtb2RcclxuIFwiTW9kdWx1cyBvZiBudW0gYW5kIGRpdi4gVHJ1bmNhdGVzIHRvd2FyZCBuZWdhdGl2ZSBpbmZpbml0eS5cIlxyXG4gW24gZF1cclxuIChqcy1tb2QgKCsgKGpzLW1vZCBuIGQpIGQpIGQpKVxyXG4ifSB7OnN5bSBJU2V0LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBzZXQgZnVuY3Rpb25hbGl0eSB0byBhIGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtZGlzam9pbil9IHs6c3ltIHBvcCwgOm1ldGEgezpkb2MgIkZvciBhIGxpc3Qgb3IgcXVldWUsIHJldHVybnMgYSBuZXcgbGlzdC9xdWV1ZSB3aXRob3V0IHRoZSBmaXJzdFxuICBpdGVtLCBmb3IgYSB2ZWN0b3IsIHJldHVybnMgYSBuZXcgdmVjdG9yIHdpdGhvdXQgdGhlIGxhc3QgaXRlbS5cbiAgTm90ZSAtIG5vdCB0aGUgc2FtZSBhcyBuZXh0L2J1dGxhc3QuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvcFxyXG4gXCJGb3IgYSBsaXN0IG9yIHF1ZXVlLCByZXR1cm5zIGEgbmV3IGxpc3QvcXVldWUgd2l0aG91dCB0aGUgZmlyc3RcXG4gIGl0ZW0sIGZvciBhIHZlY3RvciwgcmV0dXJucyBhIG5ldyB2ZWN0b3Igd2l0aG91dCB0aGUgbGFzdCBpdGVtLlxcbiAgTm90ZSAtIG5vdCB0aGUgc2FtZSBhcyBuZXh0L2J1dGxhc3QuXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90IChuaWw/IGNvbGwpICgtcG9wIGNvbGwpKSlcclxuIn0gezpzeW0gSVBlbmRpbmcsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgdHlwZXMgd2hpY2ggY2FuIGhhdmUgYSBkZWZlcnJlZCByZWFsaXphdGlvbi4gQ3VycmVudGx5IG9ubHlcbiAgaW1wbGVtZW50ZWQgYnkgRGVsYXkgYW5kIExhenlTZXEuIn0sIDptZXRob2RzICgtcmVhbGl6ZWQ/KX0gezpzeW0gLWVudHJ5LWtleSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGtleSBmb3IgZW50cnkuIiwgOmFyZ2xpc3RzIChbY29sbCBlbnRyeV0pfSwgOnByb3RvY29sIElTb3J0ZWR9IHs6c3ltIENIQVJfTUFQLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gQ0hBUl9NQVBcclxuICNqcyB7XCJdXCIgXCJfUkJSQUNLX1wiLCBcIidcIiBcIl9TSU5HTEVRVU9URV9cIiwgXCI9XCIgXCJfRVFfXCIsIFwiXFxcXFxcXCJcIiBcIl9ET1VCTEVRVU9URV9cIiwgXCIhXCIgXCJfQkFOR19cIiwgXCIqXCIgXCJfU1RBUl9cIiwgXCIlXCIgXCJfUEVSQ0VOVF9cIiwgXCJ8XCIgXCJfQkFSX1wiLCBcIn5cIiBcIl9USUxERV9cIiwgXCIvXCIgXCJfU0xBU0hfXCIsIFwiXFxcXFxcXFxcIiBcIl9CU0xBU0hfXCIsIFwiLVwiIFwiX1wiLCBcIj9cIiBcIl9RTUFSS19cIiwgXCImXCIgXCJfQU1QRVJTQU5EX1wiLCBcIjpcIiBcIl9DT0xPTl9cIiwgXCI8XCIgXCJfTFRfXCIsIFwie1wiIFwiX0xCUkFDRV9cIiwgXCJ9XCIgXCJfUkJSQUNFX1wiLCBcIltcIiBcIl9MQlJBQ0tfXCIsIFwiI1wiIFwiX1NIQVJQX1wiLCBcIl5cIiBcIl9DQVJFVF9cIiwgXCIrXCIgXCJfUExVU19cIiwgXCJAXCIgXCJfQ0lSQ0FfXCIsIFwiPlwiIFwiX0dUX1wifSlcclxuIn0gezpzeW0gZGlzc29jISwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB0cmFuc2llbnQgbWFwIHRoYXQgZG9lc24ndCBjb250YWluIGEgbWFwcGluZyBmb3Iga2V5KHMpLiIsIDphcmdsaXN0cyBbW3Rjb2xsIGtleV0gW3Rjb2xsIGtleSAmIGtzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzc29jIVxyXG4gXCJSZXR1cm5zIGEgdHJhbnNpZW50IG1hcCB0aGF0IGRvZXNuJ3QgY29udGFpbiBhIG1hcHBpbmcgZm9yIGtleShzKS5cIlxyXG4gKFt0Y29sbCBrZXldICgtZGlzc29jISB0Y29sbCBrZXkpKVxyXG4gKFt0Y29sbCBrZXkgJiBrc11cclxuICAobGV0XHJcbiAgIFtudGNvbGwgKC1kaXNzb2MhIHRjb2xsIGtleSldXHJcbiAgIChpZiBrcyAocmVjdXIgbnRjb2xsIChmaXJzdCBrcykgKG5leHQga3MpKSBudGNvbGwpKSkpXHJcbiJ9IHs6c3ltIHJlZHVjdGlvbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGludGVybWVkaWF0ZSB2YWx1ZXMgb2YgdGhlIHJlZHVjdGlvbiAoYXNcbiAgcGVyIHJlZHVjZSkgb2YgY29sbCBieSBmLCBzdGFydGluZyB3aXRoIGluaXQuIiwgOmFyZ2xpc3RzIFtbZiBjb2xsXSBbZiBpbml0IGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y3Rpb25zXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlcyBvZiB0aGUgcmVkdWN0aW9uIChhc1xcbiAgcGVyIHJlZHVjZSkgb2YgY29sbCBieSBmLCBzdGFydGluZyB3aXRoIGluaXQuXCJcclxuIChbZiBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAoaWYtbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKHJlZHVjdGlvbnMgZiAoZmlyc3QgcykgKHJlc3QgcykpXHJcbiAgICAobGlzdCAoZikpKSkpXHJcbiAoW2YgaW5pdCBjb2xsXVxyXG4gIChpZlxyXG4gICAocmVkdWNlZD8gaW5pdClcclxuICAgKGxpc3QgQGluaXQpXHJcbiAgIChjb25zXHJcbiAgICBpbml0XHJcbiAgICAobGF6eS1zZXFcclxuICAgICAod2hlbi1sZXRcclxuICAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAgKHJlZHVjdGlvbnMgZiAoZiBpbml0IChmaXJzdCBzKSkgKHJlc3QgcykpKSkpKSkpXHJcbiJ9IHs6c3ltIGZhc3QtcGF0aC1wcm90b2NvbC1wYXJ0aXRpb25zLWNvdW50LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZmFzdC1wYXRoLXByb3RvY29sLXBhcnRpdGlvbnMtY291bnRcclxuIFwidG90YWwgbnVtYmVyIG9mIHBhcnRpdGlvbnNcIlxyXG4gKGNvcmUvbGV0XHJcbiAgW2MgKGNvdW50IGZhc3QtcGF0aC1wcm90b2NvbHMpIG0gKGNvcmUvbW9kIGMgMzIpXVxyXG4gIChpZiAoY29yZS96ZXJvPyBtKSAoY29yZS9xdW90IGMgMzIpIChjb3JlL2luYyAoY29yZS9xdW90IGMgMzIpKSkpKVxyXG4ifSB7OnN5bSBpbmRleGVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgbnRoIGluIGNvbnN0YW50IHRpbWUiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhlZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBudGggaW4gY29uc3RhbnQgdGltZVwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElJbmRleGVkIHgpKVxyXG4ifSB7OnN5bSAtLCA6bWV0YSB7OmRvYyAiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiAtXHJcbiBcIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cIlxyXG4gKFt4XSAoY2xqcy5jb3JlLy0geCkpXHJcbiAoW3ggeV0gKGNsanMuY29yZS8tIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgLSAoY2xqcy5jb3JlLy0geCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIC1lcXVpdiwgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBvIGFuZCBvdGhlciBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFtvIG90aGVyXSl9LCA6cHJvdG9jb2wgSUVxdWl2fSB7OnN5bSBhc3NvYyEsIDptZXRhIHs6ZG9jICJXaGVuIGFwcGxpZWQgdG8gYSB0cmFuc2llbnQgbWFwLCBhZGRzIG1hcHBpbmcgb2Yga2V5KHMpIHRvXG4gIHZhbChzKS4gV2hlbiBhcHBsaWVkIHRvIGEgdHJhbnNpZW50IHZlY3Rvciwgc2V0cyB0aGUgdmFsIGF0IGluZGV4LlxuICBOb3RlIC0gaW5kZXggbXVzdCBiZSA8PSAoY291bnQgdmVjdG9yKS4gUmV0dXJucyBjb2xsLiIsIDphcmdsaXN0cyBbW3Rjb2xsIGtleSB2YWxdIFt0Y29sbCBrZXkgdmFsICYga3ZzXV19LCA6c291cmNlICIoZGVmblxyXG4gYXNzb2MhXHJcbiBcIldoZW4gYXBwbGllZCB0byBhIHRyYW5zaWVudCBtYXAsIGFkZHMgbWFwcGluZyBvZiBrZXkocykgdG9cXG4gIHZhbChzKS4gV2hlbiBhcHBsaWVkIHRvIGEgdHJhbnNpZW50IHZlY3Rvciwgc2V0cyB0aGUgdmFsIGF0IGluZGV4LlxcbiAgTm90ZSAtIGluZGV4IG11c3QgYmUgPD0gKGNvdW50IHZlY3RvcikuIFJldHVybnMgY29sbC5cIlxyXG4gKFt0Y29sbCBrZXkgdmFsXSAoLWFzc29jISB0Y29sbCBrZXkgdmFsKSlcclxuIChbdGNvbGwga2V5IHZhbCAmIGt2c11cclxuICAobGV0XHJcbiAgIFtudGNvbGwgKC1hc3NvYyEgdGNvbGwga2V5IHZhbCldXHJcbiAgIChpZlxyXG4gICAga3ZzXHJcbiAgICAocmVjdXIgbnRjb2xsIChmaXJzdCBrdnMpIChzZWNvbmQga3ZzKSAobm5leHQga3ZzKSlcclxuICAgIG50Y29sbCkpKSlcclxuIn0gezpzeW0gaGFzaC1zZXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGhhc2ggc2V0IHdpdGggc3VwcGxpZWQga2V5cy4gIEFueSBlcXVhbCBrZXlzIGFyZVxuICBoYW5kbGVkIGFzIGlmIGJ5IHJlcGVhdGVkIHVzZXMgb2YgY29uai4iLCA6YXJnbGlzdHMgW1tdIFsmIGtleXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLXNldFxyXG4gXCJSZXR1cm5zIGEgbmV3IGhhc2ggc2V0IHdpdGggc3VwcGxpZWQga2V5cy4gIEFueSBlcXVhbCBrZXlzIGFyZVxcbiAgaGFuZGxlZCBhcyBpZiBieSByZXBlYXRlZCB1c2VzIG9mIGNvbmouXCJcclxuIChbXSAje30pXHJcbiAoWyYga2V5c10gKHNldCBrZXlzKSkpXHJcbiJ9IHs6c3ltIHJlZHVjZS1rdiwgOm1ldGEgezpkb2MgIlJlZHVjZXMgYW4gYXNzb2NpYXRpdmUgY29sbGVjdGlvbi4gZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAzXG4gIGFyZ3VtZW50cy4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gaW5pdCwgdGhlIGZpcnN0IGtleVxuICBhbmQgdGhlIGZpcnN0IHZhbHVlIGluIGNvbGwsIHRoZW4gYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlXG4gIDJuZCBrZXkgYW5kIHZhbHVlLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm8gZW50cmllcywgcmV0dXJucyBpbml0XG4gIGFuZCBmIGlzIG5vdCBjYWxsZWQuIE5vdGUgdGhhdCByZWR1Y2Uta3YgaXMgc3VwcG9ydGVkIG9uIHZlY3RvcnMsXG4gIHdoZXJlIHRoZSBrZXlzIHdpbGwgYmUgdGhlIG9yZGluYWxzLiIsIDphcmdsaXN0cyBbW2YgaW5pdCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlLWt2XHJcbiBcIlJlZHVjZXMgYW4gYXNzb2NpYXRpdmUgY29sbGVjdGlvbi4gZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAzXFxuICBhcmd1bWVudHMuIFJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIGluaXQsIHRoZSBmaXJzdCBrZXlcXG4gIGFuZCB0aGUgZmlyc3QgdmFsdWUgaW4gY29sbCwgdGhlbiBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGVcXG4gIDJuZCBrZXkgYW5kIHZhbHVlLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm8gZW50cmllcywgcmV0dXJucyBpbml0XFxuICBhbmQgZiBpcyBub3QgY2FsbGVkLiBOb3RlIHRoYXQgcmVkdWNlLWt2IGlzIHN1cHBvcnRlZCBvbiB2ZWN0b3JzLFxcbiAgd2hlcmUgdGhlIGtleXMgd2lsbCBiZSB0aGUgb3JkaW5hbHMuXCJcclxuIChbZiBpbml0IGNvbGxdIChpZi1ub3QgKG5pbD8gY29sbCkgKC1rdi1yZWR1Y2UgY29sbCBmIGluaXQpIGluaXQpKSlcclxuIn0gezpzeW0gcmVzZXQhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwgd2l0aG91dCByZWdhcmQgZm9yIHRoZVxuICBjdXJyZW50IHZhbHVlLiBSZXR1cm5zIG5ldy12YWx1ZS4iLCA6YXJnbGlzdHMgKFthIG5ldy12YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc2V0IVxyXG4gXCJTZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbCB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlXFxuICBjdXJyZW50IHZhbHVlLiBSZXR1cm5zIG5ldy12YWx1ZS5cIlxyXG4gW2EgbmV3LXZhbHVlXVxyXG4gKGlmXHJcbiAgKGluc3RhbmNlPyBBdG9tIGEpXHJcbiAgKGxldFxyXG4gICBbdmFsaWRhdGUgKC4tdmFsaWRhdG9yIGEpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChuaWw/IHZhbGlkYXRlKVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKHZhbGlkYXRlIG5ldy12YWx1ZSlcclxuICAgICAodGhyb3cgKGpzL0Vycm9yLiBcIlZhbGlkYXRvciByZWplY3RlZCByZWZlcmVuY2Ugc3RhdGVcIikpKSlcclxuICAgKGxldFxyXG4gICAgW29sZC12YWx1ZSAoLi1zdGF0ZSBhKV1cclxuICAgIChzZXQhICguLXN0YXRlIGEpIG5ldy12YWx1ZSlcclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChuaWw/ICguLXdhdGNoZXMgYSkpXHJcbiAgICAgKC1ub3RpZnktd2F0Y2hlcyBhIG9sZC12YWx1ZSBuZXctdmFsdWUpKVxyXG4gICAgbmV3LXZhbHVlKSlcclxuICAoLXJlc2V0ISBhIG5ldy12YWx1ZSkpKVxyXG4ifSB7OnN5bSBuYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZSBTdHJpbmcgb2YgYSBzdHJpbmcsIHN5bWJvbCBvciBrZXl3b3JkLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYW1lXHJcbiBcIlJldHVybnMgdGhlIG5hbWUgU3RyaW5nIG9mIGEgc3RyaW5nLCBzeW1ib2wgb3Iga2V5d29yZC5cIlxyXG4gW3hdXHJcbiAoaWZcclxuICAoaW1wbGVtZW50cz8gSU5hbWVkIHgpXHJcbiAgKC1uYW1lIHgpXHJcbiAgKGlmXHJcbiAgIChzdHJpbmc/IHgpXHJcbiAgIHhcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkRvZXNuJ3Qgc3VwcG9ydCBuYW1lOiBcIiB4KSkpKSkpXHJcbiJ9IHs6c3ltIEZuLCA6bWV0YSB7OmRvYyAiTWFya2VyIHByb3RvY29sIn0sIDptZXRob2RzICgpfSB7OnN5bSBmZmlyc3QsIDptZXRhIHs6ZG9jICJTYW1lIGFzIChmaXJzdCAoZmlyc3QgeCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gZmZpcnN0IFwiU2FtZSBhcyAoZmlyc3QgKGZpcnN0IHgpKVwiIFtjb2xsXSAoZmlyc3QgKGZpcnN0IGNvbGwpKSlcclxuIn0gezpzeW0gc29ydGVkLXNldCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgc29ydGVkIHNldCB3aXRoIHN1cHBsaWVkIGtleXMuIiwgOmFyZ2xpc3RzIFtbJiBrZXlzXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydGVkLXNldFxyXG4gXCJSZXR1cm5zIGEgbmV3IHNvcnRlZCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLlwiXHJcbiAoWyYga2V5c10gKHJlZHVjZSAtY29uaiAoLi1FTVBUWSBQZXJzaXN0ZW50VHJlZVNldCkga2V5cykpKVxyXG4ifSB7OnN5bSBjb3VudGVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgY291bnQgaW4gY29uc3RhbnQgdGltZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb3VudGVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIGNvdW50IGluIGNvbnN0YW50IHRpbWVcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJQ291bnRlZCB4KSlcclxuIn0gezpzeW0gdGFnZ2VkLWxpdGVyYWwsIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgdGFnZ2VkIGxpdGVyYWwgZnJvbSBhXG4gIHRhZyBzeW1ib2wgYW5kIGEgZm9ybS4iLCA6YXJnbGlzdHMgKFt0YWcgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhZ2dlZC1saXRlcmFsXHJcbiBcIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSB0YWdnZWQgbGl0ZXJhbCBmcm9tIGFcXG4gIHRhZyBzeW1ib2wgYW5kIGEgZm9ybS5cIlxyXG4gW3RhZyBmb3JtXVxyXG4gezpwcmUgWyhzeW1ib2w/IHRhZyldfVxyXG4gKFRhZ2dlZExpdGVyYWwuIHRhZyBmb3JtKSlcclxuIn0gezpzeW0gcHJpbnRsbiwgOm1ldGEgezpkb2MgIlNhbWUgYXMgcHJpbnQgZm9sbG93ZWQgYnkgKG5ld2xpbmUpIiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnRsblxyXG4gXCJTYW1lIGFzIHByaW50IGZvbGxvd2VkIGJ5IChuZXdsaW5lKVwiXHJcbiBbJiBvYmpzXVxyXG4gKHByLXdpdGgtb3B0cyBvYmpzIChhc3NvYyAocHItb3B0cykgOnJlYWRhYmx5IGZhbHNlKSlcclxuICh3aGVuICpwcmludC1uZXdsaW5lKiAobmV3bGluZSAocHItb3B0cykpKSlcclxuIn0gezpzeW0gYXNzb2MtaW4sIDptZXRhIHs6ZG9jICJBc3NvY2lhdGVzIGEgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrcyBpcyBhXG4gIHNlcXVlbmNlIG9mIGtleXMgYW5kIHYgaXMgdGhlIG5ldyB2YWx1ZSBhbmQgcmV0dXJucyBhIG5ldyBuZXN0ZWQgc3RydWN0dXJlLlxuICBJZiBhbnkgbGV2ZWxzIGRvIG5vdCBleGlzdCwgaGFzaC1tYXBzIHdpbGwgYmUgY3JlYXRlZC4iLCA6YXJnbGlzdHMgKFttIFtrICYga3NdIHZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3NvYy1pblxyXG4gXCJBc3NvY2lhdGVzIGEgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrcyBpcyBhXFxuICBzZXF1ZW5jZSBvZiBrZXlzIGFuZCB2IGlzIHRoZSBuZXcgdmFsdWUgYW5kIHJldHVybnMgYSBuZXcgbmVzdGVkIHN0cnVjdHVyZS5cXG4gIElmIGFueSBsZXZlbHMgZG8gbm90IGV4aXN0LCBoYXNoLW1hcHMgd2lsbCBiZSBjcmVhdGVkLlwiXHJcbiBbbSBbayAmIGtzXSB2XVxyXG4gKGlmIGtzIChhc3NvYyBtIGsgKGFzc29jLWluIChnZXQgbSBrKSBrcyB2KSkgKGFzc29jIG0gayB2KSkpXHJcbiJ9IHs6c3ltIGJpdC10ZXN0LCA6bWV0YSB7OmRvYyAiVGVzdCBiaXQgYXQgaW5kZXggbiIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm4gYml0LXRlc3QgXCJUZXN0IGJpdCBhdCBpbmRleCBuXCIgW3ggbl0gKGNsanMuY29yZS9iaXQtdGVzdCB4IG4pKVxyXG4ifSB7OnN5bSBJU3dhcCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgc3dhcHBpbmcgZnVuY3Rpb25hbGl0eS4ifSwgOm1ldGhvZHMgKC1zd2FwISl9IHs6c3ltIG1lbW9pemUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiBhIHJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQgZnVuY3Rpb24uIFRoZVxuICBtZW1vaXplZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBrZWVwcyBhIGNhY2hlIG9mIHRoZSBtYXBwaW5nIGZyb20gYXJndW1lbnRzXG4gIHRvIHJlc3VsdHMgYW5kLCB3aGVuIGNhbGxzIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFyZSByZXBlYXRlZCBvZnRlbiwgaGFzXG4gIGhpZ2hlciBwZXJmb3JtYW5jZSBhdCB0aGUgZXhwZW5zZSBvZiBoaWdoZXIgbWVtb3J5IHVzZS4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVtb2l6ZVxyXG4gXCJSZXR1cm5zIGEgbWVtb2l6ZWQgdmVyc2lvbiBvZiBhIHJlZmVyZW50aWFsbHkgdHJhbnNwYXJlbnQgZnVuY3Rpb24uIFRoZVxcbiAgbWVtb2l6ZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24ga2VlcHMgYSBjYWNoZSBvZiB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50c1xcbiAgdG8gcmVzdWx0cyBhbmQsIHdoZW4gY2FsbHMgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgYXJlIHJlcGVhdGVkIG9mdGVuLCBoYXNcXG4gIGhpZ2hlciBwZXJmb3JtYW5jZSBhdCB0aGUgZXhwZW5zZSBvZiBoaWdoZXIgbWVtb3J5IHVzZS5cIlxyXG4gW2ZdXHJcbiAobGV0XHJcbiAgW21lbSAoYXRvbSB7fSldXHJcbiAgKGZuXHJcbiAgIFsmIGFyZ3NdXHJcbiAgIChsZXRcclxuICAgIFt2IChnZXQgQG1lbSBhcmdzIGxvb2t1cC1zZW50aW5lbCldXHJcbiAgICAoaWZcclxuICAgICAoaWRlbnRpY2FsPyB2IGxvb2t1cC1zZW50aW5lbClcclxuICAgICAobGV0IFtyZXQgKGFwcGx5IGYgYXJncyldIChzd2FwISBtZW0gYXNzb2MgYXJncyByZXQpIHJldClcclxuICAgICB2KSkpKSlcclxuIn0gezpzeW0gYWx0ZXItbWV0YSEsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHNldHMgdGhlIG1ldGFkYXRhIGZvciBhIG5hbWVzcGFjZS92YXIvcmVmL2FnZW50L2F0b20gdG8gYmU6XG5cbiAgKGFwcGx5IGYgaXRzLWN1cnJlbnQtbWV0YSBhcmdzKVxuXG4gIGYgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cyIsIDphcmdsaXN0cyAoW2lyZWYgZiAmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbHRlci1tZXRhIVxyXG4gXCJBdG9taWNhbGx5IHNldHMgdGhlIG1ldGFkYXRhIGZvciBhIG5hbWVzcGFjZS92YXIvcmVmL2FnZW50L2F0b20gdG8gYmU6XFxuXFxuICAoYXBwbHkgZiBpdHMtY3VycmVudC1tZXRhIGFyZ3MpXFxuXFxuICBmIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHNcIlxyXG4gW2lyZWYgZiAmIGFyZ3NdXHJcbiAoc2V0ISAoLi1tZXRhIGlyZWYpIChhcHBseSBmICguLW1ldGEgaXJlZikgYXJncykpKVxyXG4ifSB7OnN5bSB6ZXJvPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgemVybywgZWxzZSBmYWxzZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB6ZXJvP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIHplcm8sIGVsc2UgZmFsc2VcIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3plcm8/IHgpKVxyXG4ifSB7OnN5bSBzaW1wbGUta2V5d29yZD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEga2V5d29yZCB3aXRob3V0IGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNpbXBsZS1rZXl3b3JkP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEga2V5d29yZCB3aXRob3V0IGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGFuZCAoa2V5d29yZD8geCkgKG5pbD8gKG5hbWVzcGFjZSB4KSkpKVxyXG4ifSB7OnN5bSAqbWFpbi1jbGktZm4qLCA6bWV0YSB7OmRvYyAiV2hlbiBjb21waWxlZCBmb3IgYSBjb21tYW5kLWxpbmUgdGFyZ2V0LCB3aGF0ZXZlciBmdW5jdGlvblxuICAqbWFpbi1jbGktZm4qIGlzIHNldCB0byB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBjb21tYW5kLWxpbmVcbiAgYXJndiBhcyBhcmd1bWVudHMifSwgOnNvdXJjZSAiKGRlZiAqbWFpbi1jbGktZm4qIG5pbClcclxuIn0gezpzeW0gLWFzc29jLW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRoIHZhbHVlIHZhbCBhZGRlZCBhdCBwb3NpdGlvbiBuLiIsIDphcmdsaXN0cyAoW2NvbGwgbiB2YWxdKX0sIDpwcm90b2NvbCBJVmVjdG9yfSB7OnN5bSB1bmNoZWNrZWQtZGVjLWludCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiB4LCBhbiBpbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1kZWMtaW50XHJcbiBcIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiB4LCBhbiBpbnQuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS91bmNoZWNrZWQtZGVjLWludCB4KSlcclxuIn0gezpzeW0gcGVyc2lzdGVudCEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3LCBwZXJzaXN0ZW50IHZlcnNpb24gb2YgdGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uLCBpblxuICBjb25zdGFudCB0aW1lLiBUaGUgdHJhbnNpZW50IGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYWZ0ZXIgdGhpc1xuICBjYWxsLCBhbnkgc3VjaCB1c2Ugd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uIiwgOmFyZ2xpc3RzIChbdGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwZXJzaXN0ZW50IVxyXG4gXCJSZXR1cm5zIGEgbmV3LCBwZXJzaXN0ZW50IHZlcnNpb24gb2YgdGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uLCBpblxcbiAgY29uc3RhbnQgdGltZS4gVGhlIHRyYW5zaWVudCBjb2xsZWN0aW9uIGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXNcXG4gIGNhbGwsIGFueSBzdWNoIHVzZSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi5cIlxyXG4gW3Rjb2xsXVxyXG4gKC1wZXJzaXN0ZW50ISB0Y29sbCkpXHJcbiJ9IHs6c3ltIHNldC1wcmludC1mbiEsIDptZXRhIHs6ZG9jICJTZXQgKnByaW50LWZuKiB0byBmLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuIHNldC1wcmludC1mbiEgXCJTZXQgKnByaW50LWZuKiB0byBmLlwiIFtmXSAoc2V0ISAqcHJpbnQtZm4qIGYpKVxyXG4ifSB7OnN5bSBubmV4dCwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKG5leHQgKG5leHQgeCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gbm5leHQgXCJTYW1lIGFzIChuZXh0IChuZXh0IHgpKVwiIFtjb2xsXSAobmV4dCAobmV4dCBjb2xsKSkpXHJcbiJ9IHs6c3ltIGFkZC13YXRjaCwgOm1ldGEgezpkb2MgIkFkZHMgYSB3YXRjaCBmdW5jdGlvbiB0byBhbiBhdG9tIHJlZmVyZW5jZS4gVGhlIHdhdGNoIGZuIG11c3QgYmUgYVxuICBmbiBvZiA0IGFyZ3M6IGEga2V5LCB0aGUgcmVmZXJlbmNlLCBpdHMgb2xkLXN0YXRlLCBpdHNcbiAgbmV3LXN0YXRlLiBXaGVuZXZlciB0aGUgcmVmZXJlbmNlJ3Mgc3RhdGUgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQsXG4gIGFueSByZWdpc3RlcmVkIHdhdGNoZXMgd2lsbCBoYXZlIHRoZWlyIGZ1bmN0aW9ucyBjYWxsZWQuIFRoZSB3YXRjaFxuICBmbiB3aWxsIGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LiBOb3RlIHRoYXQgYW4gYXRvbSdzIHN0YXRlXG4gIG1heSBoYXZlIGNoYW5nZWQgYWdhaW4gcHJpb3IgdG8gdGhlIGZuIGNhbGwsIHNvIHVzZSBvbGQvbmV3LXN0YXRlXG4gIHJhdGhlciB0aGFuIGRlcmVmaW5nIHRoZSByZWZlcmVuY2UuIEtleXMgbXVzdCBiZSB1bmlxdWUgcGVyXG4gIHJlZmVyZW5jZSwgYW5kIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgd2F0Y2ggd2l0aCByZW1vdmUtd2F0Y2gsXG4gIGJ1dCBhcmUgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgb3BhcXVlIGJ5IHRoZSB3YXRjaCBtZWNoYW5pc20uICBCZWFyIGluXG4gIG1pbmQgdGhhdCByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQgb3IgYWN0aW9uIG9mIHRoZSB3YXRjaCBmbnMgdGhlXG4gIGF0b20ncyB2YWx1ZSB3aWxsIGNoYW5nZS4gIEV4YW1wbGU6XG5cbiAgICAgIChkZWYgYSAoYXRvbSAwKSlcbiAgICAgIChhZGQtd2F0Y2ggYSA6aW5jIChmbiBbayByIG8gbl0gKGFzc2VydCAoPT0gMCBuKSkpKVxuICAgICAgKHN3YXAhIGEgaW5jKVxuICAgICAgOzsgQXNzZXJ0aW9uIEVycm9yXG4gICAgICAoZGVyZWYgYSlcbiAgICAgIDs9PiAxIiwgOmFyZ2xpc3RzIChbaXJlZiBrZXkgZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC13YXRjaFxyXG4gXCJBZGRzIGEgd2F0Y2ggZnVuY3Rpb24gdG8gYW4gYXRvbSByZWZlcmVuY2UuIFRoZSB3YXRjaCBmbiBtdXN0IGJlIGFcXG4gIGZuIG9mIDQgYXJnczogYSBrZXksIHRoZSByZWZlcmVuY2UsIGl0cyBvbGQtc3RhdGUsIGl0c1xcbiAgbmV3LXN0YXRlLiBXaGVuZXZlciB0aGUgcmVmZXJlbmNlJ3Mgc3RhdGUgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQsXFxuICBhbnkgcmVnaXN0ZXJlZCB3YXRjaGVzIHdpbGwgaGF2ZSB0aGVpciBmdW5jdGlvbnMgY2FsbGVkLiBUaGUgd2F0Y2hcXG4gIGZuIHdpbGwgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkuIE5vdGUgdGhhdCBhbiBhdG9tJ3Mgc3RhdGVcXG4gIG1heSBoYXZlIGNoYW5nZWQgYWdhaW4gcHJpb3IgdG8gdGhlIGZuIGNhbGwsIHNvIHVzZSBvbGQvbmV3LXN0YXRlXFxuICByYXRoZXIgdGhhbiBkZXJlZmluZyB0aGUgcmVmZXJlbmNlLiBLZXlzIG11c3QgYmUgdW5pcXVlIHBlclxcbiAgcmVmZXJlbmNlLCBhbmQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRjaCB3aXRoIHJlbW92ZS13YXRjaCxcXG4gIGJ1dCBhcmUgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgb3BhcXVlIGJ5IHRoZSB3YXRjaCBtZWNoYW5pc20uICBCZWFyIGluXFxuICBtaW5kIHRoYXQgcmVnYXJkbGVzcyBvZiB0aGUgcmVzdWx0IG9yIGFjdGlvbiBvZiB0aGUgd2F0Y2ggZm5zIHRoZVxcbiAgYXRvbSdzIHZhbHVlIHdpbGwgY2hhbmdlLiAgRXhhbXBsZTpcXG5cXG4gICAgICAoZGVmIGEgKGF0b20gMCkpXFxuICAgICAgKGFkZC13YXRjaCBhIDppbmMgKGZuIFtrIHIgbyBuXSAoYXNzZXJ0ICg9PSAwIG4pKSkpXFxuICAgICAgKHN3YXAhIGEgaW5jKVxcbiAgICAgIDs7IEFzc2VydGlvbiBFcnJvclxcbiAgICAgIChkZXJlZiBhKVxcbiAgICAgIDs9PiAxXCJcclxuIFtpcmVmIGtleSBmXVxyXG4gKC1hZGQtd2F0Y2ggaXJlZiBrZXkgZilcclxuIGlyZWYpXHJcbiJ9IHs6c3ltIG5vdC1ldmVyeT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGZhbHNlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgZXZlcnkgeCBpblxuICBjb2xsLCBlbHNlIHRydWUuIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm90LWV2ZXJ5P1xyXG4gXCJSZXR1cm5zIGZhbHNlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgZXZlcnkgeCBpblxcbiAgY29sbCwgZWxzZSB0cnVlLlwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gKG5vdCAoZXZlcnk/IHByZWQgY29sbCkpKVxyXG4ifSB7OnN5bSByZW0sIDptZXRhIHs6ZG9jICJyZW1haW5kZXIgb2YgZGl2aWRpbmcgbnVtZXJhdG9yIGJ5IGRlbm9taW5hdG9yLiIsIDphcmdsaXN0cyAoW24gZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbVxyXG4gXCJyZW1haW5kZXIgb2YgZGl2aWRpbmcgbnVtZXJhdG9yIGJ5IGRlbm9taW5hdG9yLlwiXHJcbiBbbiBkXVxyXG4gKGxldCBbcSAocXVvdCBuIGQpXSAoLSBuICgqIGQgcSkpKSlcclxuIn0gezpzeW0gaWZpbmQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBJRmluZCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpZmluZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBJRmluZFwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElGaW5kIHgpKVxyXG4ifSB7OnN5bSBzb21lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlyc3QgbG9naWNhbCB0cnVlIHZhbHVlIG9mIChwcmVkIHgpIGZvciBhbnkgeCBpbiBjb2xsLFxuICBlbHNlIG5pbC4gIE9uZSBjb21tb24gaWRpb20gaXMgdG8gdXNlIGEgc2V0IGFzIHByZWQsIGZvciBleGFtcGxlXG4gIHRoaXMgd2lsbCByZXR1cm4gOmZyZWQgaWYgOmZyZWQgaXMgaW4gdGhlIHNlcXVlbmNlLCBvdGhlcndpc2UgbmlsOlxuICAoc29tZSAjezpmcmVkfSBjb2xsKSIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvbWVcclxuIFwiUmV0dXJucyB0aGUgZmlyc3QgbG9naWNhbCB0cnVlIHZhbHVlIG9mIChwcmVkIHgpIGZvciBhbnkgeCBpbiBjb2xsLFxcbiAgZWxzZSBuaWwuICBPbmUgY29tbW9uIGlkaW9tIGlzIHRvIHVzZSBhIHNldCBhcyBwcmVkLCBmb3IgZXhhbXBsZVxcbiAgdGhpcyB3aWxsIHJldHVybiA6ZnJlZCBpZiA6ZnJlZCBpcyBpbiB0aGUgc2VxdWVuY2UsIG90aGVyd2lzZSBuaWw6XFxuICAoc29tZSAjezpmcmVkfSBjb2xsKVwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gKHdoZW4tbGV0IFtzIChzZXEgY29sbCldIChvciAocHJlZCAoZmlyc3QgcykpIChyZWN1ciBwcmVkIChuZXh0IHMpKSkpKVxyXG4ifSB7OnN5bSBJTmFtZWQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGEgbmFtZS4ifSwgOm1ldGhvZHMgKC1uYW1lIC1uYW1lc3BhY2UpfSB7OnN5bSBJUmVkdWNlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHNlcSB0eXBlcyB0aGF0IGNhbiByZWR1Y2UgdGhlbXNlbHZlcy5cbiAgQ2FsbGVkIGJ5IGNsanMuY29yZS9yZWR1Y2UuIn0sIDptZXRob2RzICgtcmVkdWNlKX0gezpzeW0gbmVnLWludD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBuZWdhdGl2ZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmVnLWludD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgbmVnYXRpdmUuXCJcclxuIFt4XVxyXG4gKGNvbmRcclxuICAoaW50ZWdlcj8geClcclxuICAobmVnPyB4KVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkludGVnZXIgeClcclxuICAoLmlzTmVnYXRpdmUgeClcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5Mb25nIHgpXHJcbiAgKC5pc05lZ2F0aXZlIHgpXHJcbiAgOmVsc2VcclxuICBmYWxzZSkpXHJcbiJ9IHs6c3ltIGRyb3AsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBhbGwgYnV0IHRoZSBmaXJzdCBuIGl0ZW1zIGluIGNvbGwuXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tuXSBbbiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gZHJvcFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBhbGwgYnV0IHRoZSBmaXJzdCBuIGl0ZW1zIGluIGNvbGwuXFxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbbl1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtuYSAodm9sYXRpbGUhIG4pXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbbiBAbmFdXHJcbiAgICAgICAodnN3YXAhIG5hIGRlYylcclxuICAgICAgIChpZiAocG9zPyBuKSByZXN1bHQgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSkpXHJcbiAoW24gY29sbF1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChsZXRcclxuICAgW3N0ZXBcclxuICAgIChmblxyXG4gICAgIFtuIGNvbGxdXHJcbiAgICAgKGxldFxyXG4gICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgICAoaWYgKGFuZCAocG9zPyBuKSBzKSAocmVjdXIgKGRlYyBuKSAocmVzdCBzKSkgcykpKV1cclxuICAgKGxhenktc2VxIChzdGVwIG4gY29sbCkpKSkpXHJcbiJ9IHs6c3ltIGpzLW9iaiwgOm1ldGEgezpkb2MgIkNyZWF0ZSBKYXZhU3JpcHQgb2JqZWN0IGZyb20gYW4gZXZlbiBudW1iZXIgYXJndW1lbnRzIHJlcHJlc2VudGluZ1xuICBpbnRlcmxlYXZlZCBrZXlzIGFuZCB2YWx1ZXMuIiwgOmFyZ2xpc3RzIFtbXSBbJiBrZXl2YWxzXV19LCA6c291cmNlICIoZGVmblxyXG4ganMtb2JqXHJcbiBcIkNyZWF0ZSBKYXZhU3JpcHQgb2JqZWN0IGZyb20gYW4gZXZlbiBudW1iZXIgYXJndW1lbnRzIHJlcHJlc2VudGluZ1xcbiAgaW50ZXJsZWF2ZWQga2V5cyBhbmQgdmFsdWVzLlwiXHJcbiAoW10gKGNsanMuY29yZS9qcy1vYmopKVxyXG4gKFsmIGtleXZhbHNdIChhcHBseSBnb2JqZWN0L2NyZWF0ZSBrZXl2YWxzKSkpXHJcbiJ9IHs6c3ltIElUcmFuc2llbnRDb2xsZWN0aW9uLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIHRyYW5zaWVudCBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1jb25qISAtcGVyc2lzdGVudCEpfSB7OnN5bSBudGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXguIGdldCByZXR1cm5zIG5pbCBpZiBpbmRleCBvdXQgb2ZcbiAgYm91bmRzLCBudGggdGhyb3dzIGFuIGV4Y2VwdGlvbiB1bmxlc3Mgbm90LWZvdW5kIGlzIHN1cHBsaWVkLiAgbnRoXG4gIGFsc28gd29ya3MgZm9yIHN0cmluZ3MsIGFycmF5cywgcmVnZXggTWF0Y2hlcnMgYW5kIExpc3RzLCBhbmQsXG4gIGluIE8obikgdGltZSwgZm9yIHNlcXVlbmNlcy4iLCA6YXJnbGlzdHMgW1tjb2xsIG5dIFtjb2xsIG4gbm90LWZvdW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gbnRoXHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC4gZ2V0IHJldHVybnMgbmlsIGlmIGluZGV4IG91dCBvZlxcbiAgYm91bmRzLCBudGggdGhyb3dzIGFuIGV4Y2VwdGlvbiB1bmxlc3Mgbm90LWZvdW5kIGlzIHN1cHBsaWVkLiAgbnRoXFxuICBhbHNvIHdvcmtzIGZvciBzdHJpbmdzLCBhcnJheXMsIHJlZ2V4IE1hdGNoZXJzIGFuZCBMaXN0cywgYW5kLFxcbiAgaW4gTyhuKSB0aW1lLCBmb3Igc2VxdWVuY2VzLlwiXHJcbiAoW2NvbGwgbl1cclxuICAoY29uZFxyXG4gICAobm90IChudW1iZXI/IG4pKVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiBcIkluZGV4IGFyZ3VtZW50IHRvIG50aCBtdXN0IGJlIGEgbnVtYmVyXCIpKVxyXG4gICAobmlsPyBjb2xsKVxyXG4gICBjb2xsXHJcbiAgIChpbXBsZW1lbnRzPyBJSW5kZXhlZCBjb2xsKVxyXG4gICAoLW50aCBjb2xsIG4pXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKGlmXHJcbiAgICAoYW5kICg8IC0xIG4gKC4tbGVuZ3RoIGNvbGwpKSlcclxuICAgIChhZ2V0IGNvbGwgKGludCBuKSlcclxuICAgICh0aHJvdyAoanMvRXJyb3IuIFwiSW5kZXggb3V0IG9mIGJvdW5kc1wiKSkpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgIChpZlxyXG4gICAgKGFuZCAoPCAtMSBuICguLWxlbmd0aCBjb2xsKSkpXHJcbiAgICAoLmNoYXJBdCBjb2xsIChpbnQgbikpXHJcbiAgICAodGhyb3cgKGpzL0Vycm9yLiBcIkluZGV4IG91dCBvZiBib3VuZHNcIikpKVxyXG4gICAob3IgKGltcGxlbWVudHM/IElTZXEgY29sbCkgKGltcGxlbWVudHM/IElTZXF1ZW50aWFsIGNvbGwpKVxyXG4gICAoaWZcclxuICAgIChuZWc/IG4pXHJcbiAgICAodGhyb3cgKGpzL0Vycm9yLiBcIkluZGV4IG91dCBvZiBib3VuZHNcIikpXHJcbiAgICAobGluZWFyLXRyYXZlcnNhbC1udGggY29sbCBuKSlcclxuICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElJbmRleGVkIGNvbGwpXHJcbiAgICgtbnRoIGNvbGwgbilcclxuICAgOmVsc2VcclxuICAgKHRocm93XHJcbiAgICAoanMvRXJyb3IuXHJcbiAgICAgKHN0clxyXG4gICAgICBcIm50aCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdHlwZSBcIlxyXG4gICAgICAodHlwZS0+c3RyICh0eXBlIGNvbGwpKSkpKSkpXHJcbiAoW2NvbGwgbiBub3QtZm91bmRdXHJcbiAgKGNvbmRcclxuICAgKG5vdCAobnVtYmVyPyBuKSlcclxuICAgKHRocm93IChqcy9FcnJvci4gXCJJbmRleCBhcmd1bWVudCB0byBudGggbXVzdCBiZSBhIG51bWJlci5cIikpXHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIG5vdC1mb3VuZFxyXG4gICAoaW1wbGVtZW50cz8gSUluZGV4ZWQgY29sbClcclxuICAgKC1udGggY29sbCBuIG5vdC1mb3VuZClcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAoaWYgKGFuZCAoPCAtMSBuICguLWxlbmd0aCBjb2xsKSkpIChhZ2V0IGNvbGwgKGludCBuKSkgbm90LWZvdW5kKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAoaWYgKGFuZCAoPCAtMSBuICguLWxlbmd0aCBjb2xsKSkpICguY2hhckF0IGNvbGwgKGludCBuKSkgbm90LWZvdW5kKVxyXG4gICAob3IgKGltcGxlbWVudHM/IElTZXEgY29sbCkgKGltcGxlbWVudHM/IElTZXF1ZW50aWFsIGNvbGwpKVxyXG4gICAoaWYgKG5lZz8gbikgbm90LWZvdW5kIChsaW5lYXItdHJhdmVyc2FsLW50aCBjb2xsIG4gbm90LWZvdW5kKSlcclxuICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElJbmRleGVkIGNvbGwpXHJcbiAgICgtbnRoIGNvbGwgbiBub3QtZm91bmQpXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvd1xyXG4gICAgKGpzL0Vycm9yLlxyXG4gICAgIChzdHJcclxuICAgICAgXCJudGggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHR5cGUgXCJcclxuICAgICAgKHR5cGUtPnN0ciAodHlwZSBjb2xsKSkpKSkpKSlcclxuIn0gezpzeW0gc29ydGVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIHNhdGlzZmllcyBJU29ydGVkIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRlZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElTb3J0ZWRcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJU29ydGVkIHgpKVxyXG4ifSB7OnN5bSBuaWw/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgbmlsLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5pbD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgbmlsLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKGNvZXJjaXZlLT0geCBuaWwpKVxyXG4ifSB7OnN5bSBzcGxpdC1hdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB2ZWN0b3Igb2YgWyh0YWtlIG4gY29sbCkgKGRyb3AgbiBjb2xsKV0iLCA6YXJnbGlzdHMgKFtuIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdC1hdFxyXG4gXCJSZXR1cm5zIGEgdmVjdG9yIG9mIFsodGFrZSBuIGNvbGwpIChkcm9wIG4gY29sbCldXCJcclxuIFtuIGNvbGxdXHJcbiBbKHRha2UgbiBjb2xsKSAoZHJvcCBuIGNvbGwpXSlcclxuIn0gezpzeW0gcHJuLXN0ci13aXRoLW9wdHMsIDptZXRhIHs6ZG9jICJTYW1lIGFzIHByLXN0ci13aXRoLW9wdHMgZm9sbG93ZWQgYnkgKG5ld2xpbmUpIiwgOmFyZ2xpc3RzIChbb2JqcyBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJuLXN0ci13aXRoLW9wdHNcclxuIFwiU2FtZSBhcyBwci1zdHItd2l0aC1vcHRzIGZvbGxvd2VkIGJ5IChuZXdsaW5lKVwiXHJcbiBbb2JqcyBvcHRzXVxyXG4gKGlmXHJcbiAgKGVtcHR5PyBvYmpzKVxyXG4gIFwiXFxuXCJcclxuICAobGV0XHJcbiAgIFtzYiAocHItc2Itd2l0aC1vcHRzIG9ianMgb3B0cyldXHJcbiAgICguYXBwZW5kIHNiIFxcbmV3bGluZSlcclxuICAgKHN0ciBzYikpKSlcclxuIn0gezpzeW0gbm90LW5hdGl2ZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbm90LW5hdGl2ZSBuaWwpXHJcbiJ9IHs6c3ltIHJhbmRvbS1zYW1wbGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGl0ZW1zIGZyb20gY29sbCB3aXRoIHJhbmRvbSBwcm9iYWJpbGl0eSBvZiBwcm9iICgwLjAgLVxuICAxLjApLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3Byb2JdIFtwcm9iIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kb20tc2FtcGxlXHJcbiBcIlJldHVybnMgaXRlbXMgZnJvbSBjb2xsIHdpdGggcmFuZG9tIHByb2JhYmlsaXR5IG9mIHByb2IgKDAuMCAtXFxuICAxLjApLiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3Byb2JdIChmaWx0ZXIgKGZuIFtfXSAoPCAocmFuZCkgcHJvYikpKSlcclxuIChbcHJvYiBjb2xsXSAoZmlsdGVyIChmbiBbX10gKDwgKHJhbmQpIHByb2IpKSBjb2xsKSkpXHJcbiJ9IHs6c3ltIHNlbGVjdC1rZXlzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBjb250YWluaW5nIG9ubHkgdGhvc2UgZW50cmllcyBpbiBtYXAgd2hvc2Uga2V5IGlzIGluIGtleXMiLCA6YXJnbGlzdHMgKFttYXAga2V5c2VxXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VsZWN0LWtleXNcclxuIFwiUmV0dXJucyBhIG1hcCBjb250YWluaW5nIG9ubHkgdGhvc2UgZW50cmllcyBpbiBtYXAgd2hvc2Uga2V5IGlzIGluIGtleXNcIlxyXG4gW21hcCBrZXlzZXFdXHJcbiAobG9vcFxyXG4gIFtyZXQge30ga2V5cyAoc2VxIGtleXNlcSldXHJcbiAgKGlmXHJcbiAgIGtleXNcclxuICAgKGxldFxyXG4gICAgW2tleSAoZmlyc3Qga2V5cykgZW50cnkgKGdldCBtYXAga2V5IDpjbGpzLmNvcmUvbm90LWZvdW5kKV1cclxuICAgIChyZWN1clxyXG4gICAgIChpZiAobm90PSBlbnRyeSA6Y2xqcy5jb3JlL25vdC1mb3VuZCkgKGFzc29jIHJldCBrZXkgZW50cnkpIHJldClcclxuICAgICAobmV4dCBrZXlzKSkpXHJcbiAgICgtd2l0aC1tZXRhIHJldCAobWV0YSBtYXApKSkpKVxyXG4ifSB7OnN5bSBiaXQtYW5kLCA6bWV0YSB7OmRvYyAiQml0d2lzZSBhbmQiLCA6YXJnbGlzdHMgW1t4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gYml0LWFuZFxyXG4gXCJCaXR3aXNlIGFuZFwiXHJcbiAoW3ggeV0gKGNsanMuY29yZS9iaXQtYW5kIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgYml0LWFuZCAoY2xqcy5jb3JlL2JpdC1hbmQgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIGJvdW5kZWQtY291bnQsIDptZXRhIHs6ZG9jICJJZiBjb2xsIGlzIGNvdW50ZWQ/IHJldHVybnMgaXRzIGNvdW50LCBlbHNlIHdpbGwgY291bnQgYXQgbW9zdCB0aGUgZmlyc3QgblxuICAgZWxlbWVudHMgb2YgY29sbCB1c2luZyBpdHMgc2VxIiwgOmFyZ2xpc3RzIChbbiBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gYm91bmRlZC1jb3VudFxyXG4gXCJJZiBjb2xsIGlzIGNvdW50ZWQ/IHJldHVybnMgaXRzIGNvdW50LCBlbHNlIHdpbGwgY291bnQgYXQgbW9zdCB0aGUgZmlyc3QgblxcbiAgIGVsZW1lbnRzIG9mIGNvbGwgdXNpbmcgaXRzIHNlcVwiXHJcbiB7OmFkZGVkIFwiMS45XCJ9XHJcbiBbbiBjb2xsXVxyXG4gKGlmXHJcbiAgKGNvdW50ZWQ/IGNvbGwpXHJcbiAgKGNvdW50IGNvbGwpXHJcbiAgKGxvb3BcclxuICAgW2kgMCBzIChzZXEgY29sbCldXHJcbiAgIChpZiAoYW5kIChub3QgKG5pbD8gcykpICg8IGkgbikpIChyZWN1ciAoaW5jIGkpIChuZXh0IHMpKSBpKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUsIDptZXRhIHs6ZG9jICInVXBkYXRlcycgYSB2YWx1ZSBpbiBhbiBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGsgaXMgYVxuICBrZXkgYW5kIGYgaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgdGFrZSB0aGUgb2xkIHZhbHVlXG4gIGFuZCBhbnkgc3VwcGxpZWQgYXJncyBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUsIGFuZCByZXR1cm5zIGEgbmV3XG4gIHN0cnVjdHVyZS4gIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QsIG5pbCBpcyBwYXNzZWQgYXMgdGhlIG9sZCB2YWx1ZS4iLCA6YXJnbGlzdHMgW1ttIGsgZl0gW20gayBmIHhdIFttIGsgZiB4IHldIFttIGsgZiB4IHkgel0gW20gayBmIHggeSB6ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZVxyXG4gXCInVXBkYXRlcycgYSB2YWx1ZSBpbiBhbiBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGsgaXMgYVxcbiAga2V5IGFuZCBmIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgdGhlIG9sZCB2YWx1ZVxcbiAgYW5kIGFueSBzdXBwbGllZCBhcmdzIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZSwgYW5kIHJldHVybnMgYSBuZXdcXG4gIHN0cnVjdHVyZS4gIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QsIG5pbCBpcyBwYXNzZWQgYXMgdGhlIG9sZCB2YWx1ZS5cIlxyXG4gKFttIGsgZl0gKGFzc29jIG0gayAoZiAoZ2V0IG0gaykpKSlcclxuIChbbSBrIGYgeF0gKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgeCkpKVxyXG4gKFttIGsgZiB4IHldIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIHggeSkpKVxyXG4gKFttIGsgZiB4IHkgel0gKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgeCB5IHopKSlcclxuIChbbSBrIGYgeCB5IHogJiBtb3JlXSAoYXNzb2MgbSBrIChhcHBseSBmIChnZXQgbSBrKSB4IHkgeiBtb3JlKSkpKVxyXG4ifSB7OnN5bSBnZW5zeW1fY291bnRlciwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZ2Vuc3ltX2NvdW50ZXIgbmlsKVxyXG4ifSB7OnN5bSBmaW5kLW1hY3Jvcy1ucywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1hY3JvcyBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbCBvciBuaWwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLW1hY3Jvcy1uc1xyXG4gXCJSZXR1cm5zIHRoZSBtYWNyb3MgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wgb3IgbmlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXFxuICBCb290c3RyYXAgb25seS5cIlxyXG4gW25zXVxyXG4gKHdoZW4gKG5pbD8gTlNfQ0FDSEUpIChzZXQhIE5TX0NBQ0hFIChhdG9tIHt9KSkpXHJcbiAobGV0XHJcbiAgW25zLXN0clxyXG4gICAoc3RyIG5zKVxyXG4gICBuc1xyXG4gICAoaWZcclxuICAgIChub3QgKGdzdHJpbmcvY29udGFpbnMgbnMtc3RyIFwiJG1hY3Jvc1wiKSlcclxuICAgIChzeW1ib2wgKHN0ciBucy1zdHIgXCIkbWFjcm9zXCIpKVxyXG4gICAgbnMpXHJcbiAgIHRoZS1uc1xyXG4gICAoZ2V0IEBOU19DQUNIRSBucyldXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyB0aGUtbnMpXHJcbiAgIHRoZS1uc1xyXG4gICAobGV0XHJcbiAgICBbbnMtb2JqIChmaW5kLW5zLW9iaiBucyldXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAobmlsPyBucy1vYmopXHJcbiAgICAgKGxldFxyXG4gICAgICBbbmV3LW5zIChjcmVhdGUtbnMgbnMgbnMtb2JqKV1cclxuICAgICAgKHN3YXAhIE5TX0NBQ0hFIGFzc29jIG5zIG5ldy1ucylcclxuICAgICAgbmV3LW5zKSkpKSkpXHJcbiJ9IHs6c3ltIGxpc3QqLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHByZXBlbmRlZCB0byB0aGUgcmVzdCwgdGhlXG4gIGxhc3Qgb2Ygd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2VxdWVuY2UuIiwgOmFyZ2xpc3RzIFtbYXJnc10gW2EgYXJnc10gW2EgYiBhcmdzXSBbYSBiIGMgYXJnc10gW2EgYiBjIGQgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbGlzdCpcclxuIFwiQ3JlYXRlcyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zIHByZXBlbmRlZCB0byB0aGUgcmVzdCwgdGhlXFxuICBsYXN0IG9mIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNlcXVlbmNlLlwiXHJcbiAoW2FyZ3NdIChzZXEgYXJncykpXHJcbiAoW2EgYXJnc10gKGNvbnMgYSBhcmdzKSlcclxuIChbYSBiIGFyZ3NdIChjb25zIGEgKGNvbnMgYiBhcmdzKSkpXHJcbiAoW2EgYiBjIGFyZ3NdIChjb25zIGEgKGNvbnMgYiAoY29ucyBjIGFyZ3MpKSkpXHJcbiAoW2EgYiBjIGQgJiBtb3JlXSAoY29ucyBhIChjb25zIGIgKGNvbnMgYyAoY29ucyBkIChzcHJlYWQgbW9yZSkpKSkpKSlcclxuIn0gezpzeW0gdXBkYXRlLWluLCA6bWV0YSB7OmRvYyAiJ1VwZGF0ZXMnIGEgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrcyBpcyBhXG4gIHNlcXVlbmNlIG9mIGtleXMgYW5kIGYgaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgdGFrZSB0aGUgb2xkIHZhbHVlXG4gIGFuZCBhbnkgc3VwcGxpZWQgYXJncyBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUsIGFuZCByZXR1cm5zIGEgbmV3XG4gIG5lc3RlZCBzdHJ1Y3R1cmUuICBJZiBhbnkgbGV2ZWxzIGRvIG5vdCBleGlzdCwgaGFzaC1tYXBzIHdpbGwgYmVcbiAgY3JlYXRlZC4iLCA6YXJnbGlzdHMgW1ttIFtrICYga3NdIGZdIFttIFtrICYga3NdIGYgYV0gW20gW2sgJiBrc10gZiBhIGJdIFttIFtrICYga3NdIGYgYSBiIGNdIFttIFtrICYga3NdIGYgYSBiIGMgJiBhcmdzXV19LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWluXHJcbiBcIidVcGRhdGVzJyBhIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUga3MgaXMgYVxcbiAgc2VxdWVuY2Ugb2Yga2V5cyBhbmQgZiBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCB0YWtlIHRoZSBvbGQgdmFsdWVcXG4gIGFuZCBhbnkgc3VwcGxpZWQgYXJncyBhbmQgcmV0dXJuIHRoZSBuZXcgdmFsdWUsIGFuZCByZXR1cm5zIGEgbmV3XFxuICBuZXN0ZWQgc3RydWN0dXJlLiAgSWYgYW55IGxldmVscyBkbyBub3QgZXhpc3QsIGhhc2gtbWFwcyB3aWxsIGJlXFxuICBjcmVhdGVkLlwiXHJcbiAoW20gW2sgJiBrc10gZl1cclxuICAoaWZcclxuICAga3NcclxuICAgKGFzc29jIG0gayAodXBkYXRlLWluIChnZXQgbSBrKSBrcyBmKSlcclxuICAgKGFzc29jIG0gayAoZiAoZ2V0IG0gaykpKSkpXHJcbiAoW20gW2sgJiBrc10gZiBhXVxyXG4gIChpZlxyXG4gICBrc1xyXG4gICAoYXNzb2MgbSBrICh1cGRhdGUtaW4gKGdldCBtIGspIGtzIGYgYSkpXHJcbiAgIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIGEpKSkpXHJcbiAoW20gW2sgJiBrc10gZiBhIGJdXHJcbiAgKGlmXHJcbiAgIGtzXHJcbiAgIChhc3NvYyBtIGsgKHVwZGF0ZS1pbiAoZ2V0IG0gaykga3MgZiBhIGIpKVxyXG4gICAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSBhIGIpKSkpXHJcbiAoW20gW2sgJiBrc10gZiBhIGIgY11cclxuICAoaWZcclxuICAga3NcclxuICAgKGFzc29jIG0gayAodXBkYXRlLWluIChnZXQgbSBrKSBrcyBmIGEgYiBjKSlcclxuICAgKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgYSBiIGMpKSkpXHJcbiAoW20gW2sgJiBrc10gZiBhIGIgYyAmIGFyZ3NdXHJcbiAgKGlmXHJcbiAgIGtzXHJcbiAgIChhc3NvYyBtIGsgKGFwcGx5IHVwZGF0ZS1pbiAoZ2V0IG0gaykga3MgZiBhIGIgYyBhcmdzKSlcclxuICAgKGFzc29jIG0gayAoYXBwbHkgZiAoZ2V0IG0gaykgYSBiIGMgYXJncykpKSkpXHJcbiJ9IHs6c3ltIHByZWZlci1tZXRob2QsIDptZXRhIHs6ZG9jICJDYXVzZXMgdGhlIG11bHRpbWV0aG9kIHRvIHByZWZlciBtYXRjaGVzIG9mIGRpc3BhdGNoLXZhbC14IG92ZXIgZGlzcGF0Y2gtdmFsLXlcbiAgIHdoZW4gdGhlcmUgaXMgYSBjb25mbGljdCIsIDphcmdsaXN0cyAoW211bHRpZm4gZGlzcGF0Y2gtdmFsLXggZGlzcGF0Y2gtdmFsLXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmVmZXItbWV0aG9kXHJcbiBcIkNhdXNlcyB0aGUgbXVsdGltZXRob2QgdG8gcHJlZmVyIG1hdGNoZXMgb2YgZGlzcGF0Y2gtdmFsLXggb3ZlciBkaXNwYXRjaC12YWwteVxcbiAgIHdoZW4gdGhlcmUgaXMgYSBjb25mbGljdFwiXHJcbiBbbXVsdGlmbiBkaXNwYXRjaC12YWwteCBkaXNwYXRjaC12YWwteV1cclxuICgtcHJlZmVyLW1ldGhvZCBtdWx0aWZuIGRpc3BhdGNoLXZhbC14IGRpc3BhdGNoLXZhbC15KSlcclxuIn0gezpzeW0gZW5zdXJlLXJlZHVjZWQsIDptZXRhIHs6ZG9jICJJZiB4IGlzIGFscmVhZHkgcmVkdWNlZD8sIHJldHVybnMgaXQsIGVsc2UgcmV0dXJucyAocmVkdWNlZCB4KSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbnN1cmUtcmVkdWNlZFxyXG4gXCJJZiB4IGlzIGFscmVhZHkgcmVkdWNlZD8sIHJldHVybnMgaXQsIGVsc2UgcmV0dXJucyAocmVkdWNlZCB4KVwiXHJcbiBbeF1cclxuIChpZiAocmVkdWNlZD8geCkgeCAocmVkdWNlZCB4KSkpXHJcbiJ9IHs6c3ltIGluc3RhbmNlPywgOm1ldGEgezpkb2MgIkV2YWx1YXRlcyB4IGFuZCB0ZXN0cyBpZiBpdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgdHlwZVxuICBjLiBSZXR1cm5zIHRydWUgb3IgZmFsc2UiLCA6YXJnbGlzdHMgKFtjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnN0YW5jZT9cclxuIFwiRXZhbHVhdGVzIHggYW5kIHRlc3RzIGlmIGl0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSB0eXBlXFxuICBjLiBSZXR1cm5zIHRydWUgb3IgZmFsc2VcIlxyXG4gW2MgeF1cclxuIChjbGpzLmNvcmUvaW5zdGFuY2U/IGMgeCkpXHJcbiJ9IHs6c3ltIG1peC1jb2xsZWN0aW9uLWhhc2gsIDptZXRhIHs6ZG9jICJNaXggZmluYWwgY29sbGVjdGlvbiBoYXNoIGZvciBvcmRlcmVkIG9yIHVub3JkZXJlZCBjb2xsZWN0aW9ucy5cbiAgIGhhc2gtYmFzaXMgaXMgdGhlIGNvbWJpbmVkIGNvbGxlY3Rpb24gaGFzaCwgY291bnQgaXMgdGhlIG51bWJlclxuICAgb2YgZWxlbWVudHMgaW5jbHVkZWQgaW4gdGhlIGJhc2lzLiBOb3RlIHRoaXMgaXMgdGhlIGhhc2ggY29kZVxuICAgY29uc2lzdGVudCB3aXRoID0sIGRpZmZlcmVudCBmcm9tIC5oYXNoQ29kZS5cbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy4iLCA6YXJnbGlzdHMgKFtoYXNoLWJhc2lzIGNvdW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWl4LWNvbGxlY3Rpb24taGFzaFxyXG4gXCJNaXggZmluYWwgY29sbGVjdGlvbiBoYXNoIGZvciBvcmRlcmVkIG9yIHVub3JkZXJlZCBjb2xsZWN0aW9ucy5cXG4gICBoYXNoLWJhc2lzIGlzIHRoZSBjb21iaW5lZCBjb2xsZWN0aW9uIGhhc2gsIGNvdW50IGlzIHRoZSBudW1iZXJcXG4gICBvZiBlbGVtZW50cyBpbmNsdWRlZCBpbiB0aGUgYmFzaXMuIE5vdGUgdGhpcyBpcyB0aGUgaGFzaCBjb2RlXFxuICAgY29uc2lzdGVudCB3aXRoID0sIGRpZmZlcmVudCBmcm9tIC5oYXNoQ29kZS5cXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuXCJcclxuIFtoYXNoLWJhc2lzIGNvdW50XVxyXG4gKGxldFxyXG4gIFtoMSBtMy1zZWVkIGsxIChtMy1taXgtSzEgaGFzaC1iYXNpcykgaDEgKG0zLW1peC1IMSBoMSBrMSldXHJcbiAgKG0zLWZtaXggaDEgY291bnQpKSlcclxuIn0gezpzeW0gcmUtZmluZCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpcnN0IHJlZ2V4IG1hdGNoLCBpZiBhbnksIG9mIHMgdG8gcmUsIHVzaW5nXG4gIHJlLmV4ZWMocykuIFJldHVybnMgYSB2ZWN0b3IsIGNvbnRhaW5pbmcgZmlyc3QgdGhlIG1hdGNoaW5nXG4gIHN1YnN0cmluZywgdGhlbiBhbnkgY2FwdHVyaW5nIGdyb3VwcyBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNvbnRhaW5zXG4gIGNhcHR1cmluZyBncm91cHMuIiwgOmFyZ2xpc3RzIChbcmUgc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlLWZpbmRcclxuIFwiUmV0dXJucyB0aGUgZmlyc3QgcmVnZXggbWF0Y2gsIGlmIGFueSwgb2YgcyB0byByZSwgdXNpbmdcXG4gIHJlLmV4ZWMocykuIFJldHVybnMgYSB2ZWN0b3IsIGNvbnRhaW5pbmcgZmlyc3QgdGhlIG1hdGNoaW5nXFxuICBzdWJzdHJpbmcsIHRoZW4gYW55IGNhcHR1cmluZyBncm91cHMgaWYgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb250YWluc1xcbiAgY2FwdHVyaW5nIGdyb3Vwcy5cIlxyXG4gW3JlIHNdXHJcbiAoaWZcclxuICAoc3RyaW5nPyBzKVxyXG4gIChsZXRcclxuICAgW21hdGNoZXMgKC5leGVjIHJlIHMpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChuaWw/IG1hdGNoZXMpXHJcbiAgICAoaWYgKD09IChjb3VudCBtYXRjaGVzKSAxKSAoYWdldCBtYXRjaGVzIDApICh2ZWMgbWF0Y2hlcykpKSlcclxuICAodGhyb3cgKGpzL1R5cGVFcnJvci4gXCJyZS1maW5kIG11c3QgbWF0Y2ggYWdhaW5zdCBhIHN0cmluZy5cIikpKSlcclxuIn0gezpzeW0gcnVuISwgOm1ldGEgezpkb2MgIlJ1bnMgdGhlIHN1cHBsaWVkIHByb2NlZHVyZSAodmlhIHJlZHVjZSksIGZvciBwdXJwb3NlcyBvZiBzaWRlXG4gIGVmZmVjdHMsIG9uIHN1Y2Nlc3NpdmUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uIFJldHVybnMgbmlsIiwgOmFyZ2xpc3RzIChbcHJvYyBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcnVuIVxyXG4gXCJSdW5zIHRoZSBzdXBwbGllZCBwcm9jZWR1cmUgKHZpYSByZWR1Y2UpLCBmb3IgcHVycG9zZXMgb2Ygc2lkZVxcbiAgZWZmZWN0cywgb24gc3VjY2Vzc2l2ZSBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gUmV0dXJucyBuaWxcIlxyXG4gW3Byb2MgY29sbF1cclxuIChyZWR1Y2UgKGZuKiBbcDFfXzQ4ODUyIyBwMl9fNDg4NTEjXSAocHJvYyBwMl9fNDg4NTEjKSkgbmlsIGNvbGwpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIHZhbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBtYXAgZW50cnkuIiwgOmFyZ2xpc3RzIChbbWFwLWVudHJ5XSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFsXHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIGluIHRoZSBtYXAgZW50cnkuXCJcclxuIFttYXAtZW50cnldXHJcbiAoLXZhbCBtYXAtZW50cnkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtYWRkLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtYWRkXHJcbiBcIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLlwiXHJcbiAoW10gMClcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1hZGQgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlIHVuY2hlY2tlZC1hZGQgKGNsanMuY29yZS91bmNoZWNrZWQtYWRkIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSB0cmFuc2Zvcm1lci1pdGVyYXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4Zm9ybSBzb3VyY2VJdGVyIG11bHRpXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNmb3JtZXItaXRlcmF0b3JcclxuIFt4Zm9ybSBzb3VyY2VJdGVyIG11bHRpXVxyXG4gKGxldFxyXG4gIFtpdGVyYXRvclxyXG4gICAoVHJhbnNmb3JtZXJJdGVyYXRvci4gRU1QVFkgTk9ORSBmYWxzZSBuaWwgc291cmNlSXRlciBtdWx0aSldXHJcbiAgKHNldCFcclxuICAgKC4teGYgaXRlcmF0b3IpXHJcbiAgICh4Zm9ybVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIG5pbClcclxuICAgICAoW2FjY10gYWNjKVxyXG4gICAgIChbYWNjIG9dXHJcbiAgICAgIChzZXQhICguLWJ1ZmZlciBpdGVyYXRvcikgKC5hZGQgKC4tYnVmZmVyIGl0ZXJhdG9yKSBvKSlcclxuICAgICAgYWNjKSkpKVxyXG4gIGl0ZXJhdG9yKSlcclxuIn0gezpzeW0gbm90LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgbG9naWNhbCBmYWxzZSwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3RcclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgbG9naWNhbCBmYWxzZSwgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChjb25kIChuaWw/IHgpIHRydWUgKGZhbHNlPyB4KSB0cnVlIDplbHNlIGZhbHNlKSlcclxuIn0gezpzeW0gLXZyZXNldCEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBvZiB2b2xhdGlsZSBvIHRvIG5ldy12YWx1ZSB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlXG4gICAgIGN1cnJlbnQgdmFsdWUuIFJldHVybnMgbmV3LXZhbHVlLiIsIDphcmdsaXN0cyAoW28gbmV3LXZhbHVlXSl9LCA6cHJvdG9jb2wgSVZvbGF0aWxlfSB7OnN5bSB3aXRoLW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBvYmosIHdpdGhcbiAgbWFwIG0gYXMgaXRzIG1ldGFkYXRhLiIsIDphcmdsaXN0cyAoW28gbWV0YV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdpdGgtbWV0YVxyXG4gXCJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBvYmosIHdpdGhcXG4gIG1hcCBtIGFzIGl0cyBtZXRhZGF0YS5cIlxyXG4gW28gbWV0YV1cclxuIChpZlxyXG4gIChnb29nL2lzRnVuY3Rpb24gbylcclxuICAoTWV0YUZuLiBvIG1ldGEpXHJcbiAgKHdoZW4tbm90IChuaWw/IG8pICgtd2l0aC1tZXRhIG8gbWV0YSkpKSlcclxuIn0gezpzeW0gdW5yZWR1Y2VkLCA6bWV0YSB7OmRvYyAiSWYgeCBpcyByZWR1Y2VkPywgcmV0dXJucyAoZGVyZWYgeCksIGVsc2UgcmV0dXJucyB4IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVucmVkdWNlZFxyXG4gXCJJZiB4IGlzIHJlZHVjZWQ/LCByZXR1cm5zIChkZXJlZiB4KSwgZWxzZSByZXR1cm5zIHhcIlxyXG4gW3hdXHJcbiAoaWYgKHJlZHVjZWQ/IHgpIChkZXJlZiB4KSB4KSlcclxuIn0gezpzeW0gcmVjb3JkPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElSZWNvcmQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVjb3JkP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJUmVjb3JkXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSVJlY29yZCB4KSlcclxuIn0gezpzeW0gdHlwZSwgOm1ldGEgezpkb2MgIlJldHVybiB4J3MgY29uc3RydWN0b3IuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHR5cGVcclxuIFwiUmV0dXJuIHgncyBjb25zdHJ1Y3Rvci5cIlxyXG4gW3hdXHJcbiAod2hlbi1ub3QgKG5pbD8geCkgKC4tY29uc3RydWN0b3IgeCkpKVxyXG4ifSB7OnN5bSBpZGVudGljYWw/LCA6bWV0YSB7OmRvYyAiVGVzdHMgaWYgMiBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIG9iamVjdCIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlkZW50aWNhbD9cclxuIFwiVGVzdHMgaWYgMiBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIG9iamVjdFwiXHJcbiBbeCB5XVxyXG4gKGNsanMuY29yZS9pZGVudGljYWw/IHggeSkpXHJcbiJ9IHs6c3ltIC1uYW1lc3BhY2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lc3BhY2UgU3RyaW5nIG9mIHguIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIElOYW1lZH0gezpzeW0gdW5jaGVja2VkLWRpdmlkZS1pbnQsIDptZXRhIHs6ZG9jICJJZiBubyBkZW5vbWluYXRvcnMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIDEvbnVtZXJhdG9yLFxuICBlbHNlIHJldHVybnMgbnVtZXJhdG9yIGRpdmlkZWQgYnkgYWxsIG9mIHRoZSBkZW5vbWluYXRvcnMuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtZGl2aWRlLWludFxyXG4gXCJJZiBubyBkZW5vbWluYXRvcnMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIDEvbnVtZXJhdG9yLFxcbiAgZWxzZSByZXR1cm5zIG51bWVyYXRvciBkaXZpZGVkIGJ5IGFsbCBvZiB0aGUgZGVub21pbmF0b3JzLlwiXHJcbiAoW3hdICh1bmNoZWNrZWQtZGl2aWRlLWludCAxIHgpKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvZGl2aWRlIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZSB1bmNoZWNrZWQtZGl2aWRlLWludCAodW5jaGVja2VkLWRpdmlkZS1pbnQgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIG5zLW5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBuYW1lc3BhY2UsIGEgTmFtZXNwYWNlIG9iamVjdC5cbiAgQm9vdHN0cmFwIG9ubHkuIiwgOmFyZ2xpc3RzIChbbnMtb2JqXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnMtbmFtZVxyXG4gXCJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBuYW1lc3BhY2UsIGEgTmFtZXNwYWNlIG9iamVjdC5cXG4gIEJvb3RzdHJhcCBvbmx5LlwiXHJcbiBbbnMtb2JqXVxyXG4gKC4tbmFtZSBucy1vYmopKVxyXG4ifSB7OnN5bSBtYXgta2V5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgeCBmb3Igd2hpY2ggKGsgeCksIGEgbnVtYmVyLCBpcyBncmVhdGVzdC5cblxuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCB4cywgdGhlIGxhc3Qgb25lIGlzIHJldHVybmVkLiIsIDphcmdsaXN0cyBbW2sgeF0gW2sgeCB5XSBbayB4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbWF4LWtleVxyXG4gXCJSZXR1cm5zIHRoZSB4IGZvciB3aGljaCAoayB4KSwgYSBudW1iZXIsIGlzIGdyZWF0ZXN0LlxcblxcbiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggeHMsIHRoZSBsYXN0IG9uZSBpcyByZXR1cm5lZC5cIlxyXG4gKFtrIHhdIHgpXHJcbiAoW2sgeCB5XSAoaWYgKD4gKGsgeCkgKGsgeSkpIHggeSkpXHJcbiAoW2sgeCB5ICYgbW9yZV1cclxuICAocmVkdWNlXHJcbiAgIChmbiogW3AxX180ODgzNCMgcDJfXzQ4ODM1I10gKG1heC1rZXkgayBwMV9fNDg4MzQjIHAyX180ODgzNSMpKVxyXG4gICAobWF4LWtleSBrIHggeSlcclxuICAgbW9yZSkpKVxyXG4ifSB7OnN5bSAqb3V0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKm91dCogbmlsKVxyXG4ifSB7OnN5bSBoYXNoLXN0cmluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1zdHJpbmdcclxuIFtrXVxyXG4gKHdoZW5cclxuICAoPiBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCAyNTUpXHJcbiAgKHNldCEgc3RyaW5nLWhhc2gtY2FjaGUgKGpzLW9iaikpXHJcbiAgKHNldCEgc3RyaW5nLWhhc2gtY2FjaGUtY291bnQgMCkpXHJcbiAoaWZcclxuICAobmlsPyBrKVxyXG4gIDBcclxuICAobGV0XHJcbiAgIFtoICh1bmNoZWNrZWQtZ2V0IHN0cmluZy1oYXNoLWNhY2hlIGspXVxyXG4gICAoaWYgKG51bWJlcj8gaCkgaCAoYWRkLXRvLXN0cmluZy1oYXNoLWNhY2hlIGspKSkpKVxyXG4ifSB7OnN5bSAtcHJlZmVycywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZl0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBzZXQtdmFsaWRhdG9yISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbGlkYXRvci1mbiBmb3IgYW4gYXRvbS4gdmFsaWRhdG9yLWZuIG11c3QgYmUgbmlsIG9yIGFcbiAgc2lkZS1lZmZlY3QtZnJlZSBmbiBvZiBvbmUgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRoZSBpbnRlbmRlZFxuICBuZXcgc3RhdGUgb24gYW55IHN0YXRlIGNoYW5nZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB1bmFjY2VwdGFibGUsIHRoZVxuICB2YWxpZGF0b3ItZm4gc2hvdWxkIHJldHVybiBmYWxzZSBvciB0aHJvdyBhbiBFcnJvci4gSWYgdGhlIGN1cnJlbnQgc3RhdGVcbiAgaXMgbm90IGFjY2VwdGFibGUgdG8gdGhlIG5ldyB2YWxpZGF0b3IsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duIGFuZCB0aGVcbiAgdmFsaWRhdG9yIHdpbGwgbm90IGJlIGNoYW5nZWQuIiwgOmFyZ2xpc3RzIChbaXJlZiB2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQtdmFsaWRhdG9yIVxyXG4gXCJTZXRzIHRoZSB2YWxpZGF0b3ItZm4gZm9yIGFuIGF0b20uIHZhbGlkYXRvci1mbiBtdXN0IGJlIG5pbCBvciBhXFxuICBzaWRlLWVmZmVjdC1mcmVlIGZuIG9mIG9uZSBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhlIGludGVuZGVkXFxuICBuZXcgc3RhdGUgb24gYW55IHN0YXRlIGNoYW5nZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB1bmFjY2VwdGFibGUsIHRoZVxcbiAgdmFsaWRhdG9yLWZuIHNob3VsZCByZXR1cm4gZmFsc2Ugb3IgdGhyb3cgYW4gRXJyb3IuIElmIHRoZSBjdXJyZW50IHN0YXRlXFxuICBpcyBub3QgYWNjZXB0YWJsZSB0byB0aGUgbmV3IHZhbGlkYXRvciwgYW4gRXJyb3Igd2lsbCBiZSB0aHJvd24gYW5kIHRoZVxcbiAgdmFsaWRhdG9yIHdpbGwgbm90IGJlIGNoYW5nZWQuXCJcclxuIFtpcmVmIHZhbF1cclxuICh3aGVuXHJcbiAgKGFuZCAoc29tZT8gdmFsKSAobm90ICh2YWwgKC1kZXJlZiBpcmVmKSkpKVxyXG4gICh0aHJvdyAoanMvRXJyb3IuIFwiVmFsaWRhdG9yIHJlamVjdGVkIHJlZmVyZW5jZSBzdGF0ZVwiKSkpXHJcbiAoc2V0ISAoLi12YWxpZGF0b3IgaXJlZikgdmFsKSlcclxuIn0gezpzeW0gaWRlbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlkZW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmRcIlxyXG4gW3hdXHJcbiAob3IgKGtleXdvcmQ/IHgpIChzeW1ib2w/IHgpKSlcclxuIn0gezpzeW0gLW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiBvYmplY3Qgby4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6cHJvdG9jb2wgSU1ldGF9IHs6c3ltIC1kaXNwYXRjaC1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZl0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSAtYWRkLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZiBkaXNwYXRjaC12YWwgbWV0aG9kXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIHN3YXAhLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSBzd2FwcyB0aGUgdmFsdWUgb2YgYXRvbSB0byBiZTpcbiAgKGFwcGx5IGYgY3VycmVudC12YWx1ZS1vZi1hdG9tIGFyZ3MpLiBOb3RlIHRoYXQgZiBtYXkgYmUgY2FsbGVkXG4gIG11bHRpcGxlIHRpbWVzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuICBSZXR1cm5zXG4gIHRoZSB2YWx1ZSB0aGF0IHdhcyBzd2FwcGVkIGluLiIsIDphcmdsaXN0cyBbW2EgZl0gW2EgZiB4XSBbYSBmIHggeV0gW2EgZiB4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gc3dhcCFcclxuIFwiQXRvbWljYWxseSBzd2FwcyB0aGUgdmFsdWUgb2YgYXRvbSB0byBiZTpcXG4gIChhcHBseSBmIGN1cnJlbnQtdmFsdWUtb2YtYXRvbSBhcmdzKS4gTm90ZSB0aGF0IGYgbWF5IGJlIGNhbGxlZFxcbiAgbXVsdGlwbGUgdGltZXMsIGFuZCB0aHVzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gIFJldHVybnNcXG4gIHRoZSB2YWx1ZSB0aGF0IHdhcyBzd2FwcGVkIGluLlwiXHJcbiAoW2EgZl1cclxuICAoaWYgKGluc3RhbmNlPyBBdG9tIGEpIChyZXNldCEgYSAoZiAoLi1zdGF0ZSBhKSkpICgtc3dhcCEgYSBmKSkpXHJcbiAoW2EgZiB4XVxyXG4gIChpZiAoaW5zdGFuY2U/IEF0b20gYSkgKHJlc2V0ISBhIChmICguLXN0YXRlIGEpIHgpKSAoLXN3YXAhIGEgZiB4KSkpXHJcbiAoW2EgZiB4IHldXHJcbiAgKGlmXHJcbiAgIChpbnN0YW5jZT8gQXRvbSBhKVxyXG4gICAocmVzZXQhIGEgKGYgKC4tc3RhdGUgYSkgeCB5KSlcclxuICAgKC1zd2FwISBhIGYgeCB5KSkpXHJcbiAoW2EgZiB4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoaW5zdGFuY2U/IEF0b20gYSlcclxuICAgKHJlc2V0ISBhIChhcHBseSBmICguLXN0YXRlIGEpIHggeSBtb3JlKSlcclxuICAgKC1zd2FwISBhIGYgeCB5IG1vcmUpKSkpXHJcbiJ9IHs6c3ltIHZhbHMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIG1hcCdzIHZhbHVlcywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgKHNlcSBtYXApLiIsIDphcmdsaXN0cyAoW21hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbHNcclxuIFwiUmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBtYXAncyB2YWx1ZXMsIGluIHRoZSBzYW1lIG9yZGVyIGFzIChzZXEgbWFwKS5cIlxyXG4gW21hcF1cclxuICh3aGVuLWxldCBbbXNlcSAoc2VxIG1hcCldIChWYWxTZXEuIG1zZXEgbmlsKSkpXHJcbiJ9IHs6c3ltIC1jaHVua2VkLW5leHQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRob3V0IHRoZSBmaXJzdCBjaHVuay4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUNodW5rZWROZXh0fSB7OnN5bSB1bmNoZWNrZWQtc3VidHJhY3QsIDptZXRhIHs6ZG9jICJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1zdWJ0cmFjdFxyXG4gXCJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXFxuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXCJcclxuIChbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QgeCkpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlIHVuY2hlY2tlZC1zdWJ0cmFjdCAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gdGFwPiwgOm1ldGEgezpkb2MgIlNlbmRzIHggdG8gYW55IHRhcHMuIFJldHVybnMgdGhlIHJlc3VsdCBvZiAqZXhlYy10YXAtZm4qLCBhIEJvb2xlYW4gdmFsdWUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhcD5cclxuIFwiU2VuZHMgeCB0byBhbnkgdGFwcy4gUmV0dXJucyB0aGUgcmVzdWx0IG9mICpleGVjLXRhcC1mbiosIGEgQm9vbGVhbiB2YWx1ZS5cIlxyXG4gW3hdXHJcbiAobWF5YmUtaW5pdC10YXBzZXQpXHJcbiAoKmV4ZWMtdGFwLWZuKlxyXG4gIChmbiBbXSAoZG9zZXEgW3RhcCBAdGFwc2V0XSAodHJ5ICh0YXAgeCkgKGNhdGNoIGpzL0Vycm9yIGV4KSkpKSkpXHJcbiJ9IHs6c3ltIElNYXAsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIG1hcHBpbmcgZnVuY3Rpb25hbGl0eSB0byBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1kaXNzb2MpfSB7OnN5bSBzb3J0ZWQtc2V0LWJ5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBzb3J0ZWQgc2V0IHdpdGggc3VwcGxpZWQga2V5cywgdXNpbmcgdGhlIHN1cHBsaWVkIGNvbXBhcmF0b3IuIiwgOmFyZ2xpc3RzIFtbY29tcGFyYXRvciAmIGtleXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0ZWQtc2V0LWJ5XHJcbiBcIlJldHVybnMgYSBuZXcgc29ydGVkIHNldCB3aXRoIHN1cHBsaWVkIGtleXMsIHVzaW5nIHRoZSBzdXBwbGllZCBjb21wYXJhdG9yLlwiXHJcbiAoW2NvbXBhcmF0b3IgJiBrZXlzXVxyXG4gIChyZWR1Y2VcclxuICAgLWNvbmpcclxuICAgKFBlcnNpc3RlbnRUcmVlU2V0LiBuaWwgKHNvcnRlZC1tYXAtYnkgY29tcGFyYXRvcikgMClcclxuICAga2V5cykpKVxyXG4ifSB7OnN5bSBjbG9uZWFibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpbXBsZW1lbnRzIElDbG9uZWFibGUgcHJvdG9jb2wuIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbG9uZWFibGU/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaW1wbGVtZW50cyBJQ2xvbmVhYmxlIHByb3RvY29sLlwiXHJcbiBbdmFsdWVdXHJcbiAoc2F0aXNmaWVzPyBJQ2xvbmVhYmxlIHZhbHVlKSlcclxuIn0gezpzeW0gcXVhbGlmaWVkLWlkZW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZCB3aXRoIGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1YWxpZmllZC1pZGVudD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkIHdpdGggYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYm9vbGVhbiAoYW5kIChpZGVudD8geCkgKG5hbWVzcGFjZSB4KSB0cnVlKSkpXHJcbiJ9IHs6c3ltIGhhc2gtc3RyaW5nKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1zdHJpbmcqXHJcbiBbc11cclxuIChpZi1ub3RcclxuICAobmlsPyBzKVxyXG4gIChsZXRcclxuICAgW2xlbiAoLi1sZW5ndGggcyldXHJcbiAgIChpZlxyXG4gICAgKHBvcz8gbGVuKVxyXG4gICAgKGxvb3BcclxuICAgICBbaSAwIGhhc2ggMF1cclxuICAgICAoaWZcclxuICAgICAgKDwgaSBsZW4pXHJcbiAgICAgIChyZWN1ciAoaW5jIGkpICgrIChpbXVsIDMxIGhhc2gpICguY2hhckNvZGVBdCBzIGkpKSlcclxuICAgICAgaGFzaCkpXHJcbiAgICAwKSlcclxuICAwKSlcclxuIn0gezpzeW0ga2V5LXRlc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5IG90aGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5LXRlc3RcclxuIFtrZXkgb3RoZXJdXHJcbiAoY29uZFxyXG4gIChpZGVudGljYWw/IGtleSBvdGhlcilcclxuICB0cnVlXHJcbiAgKGtleXdvcmQtaWRlbnRpY2FsPyBrZXkgb3RoZXIpXHJcbiAgdHJ1ZVxyXG4gIDplbHNlXHJcbiAgKD0ga2V5IG90aGVyKSkpXHJcbiJ9IHs6c3ltIC1yZXNldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZl0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSB0cnVlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSB2YWx1ZSB0cnVlLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRydWU/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSB2YWx1ZSB0cnVlLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS90cnVlPyB4KSlcclxuIn0gezpzeW0gYXJyYXksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgbmV3IGphdmFzY3JpcHQgYXJyYXkuXG5AcGFyYW0gey4uLip9IHZhcl9hcmdzIiwgOmFyZ2xpc3RzIChbdmFyLWFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheVxyXG4gXCJDcmVhdGVzIGEgbmV3IGphdmFzY3JpcHQgYXJyYXkuXFxuQHBhcmFtIHsuLi4qfSB2YXJfYXJnc1wiXHJcbiBbdmFyLWFyZ3NdXHJcbiAobGV0XHJcbiAgW2EgKGpzL0FycmF5LiAoYWxlbmd0aCAoY2xqcy5jb3JlL2pzLWFyZ3VtZW50cykpKV1cclxuICAobG9vcFxyXG4gICBbaSAwXVxyXG4gICAoaWZcclxuICAgICg8IGkgKGFsZW5ndGggYSkpXHJcbiAgICAoZG8gKGFzZXQgYSBpIChhZ2V0IChjbGpzLmNvcmUvanMtYXJndW1lbnRzKSBpKSkgKHJlY3VyIChpbmMgaSkpKVxyXG4gICAgYSkpKSlcclxuIn0gezpzeW0gcHJpbnQsIDptZXRhIHs6ZG9jICJQcmludHMgdGhlIG9iamVjdChzKSB1c2luZyBzdHJpbmctcHJpbnQuXG4gIHByaW50IGFuZCBwcmludGxuIHByb2R1Y2Ugb3V0cHV0IGZvciBodW1hbiBjb25zdW1wdGlvbi4ifSwgOnNvdXJjZSAiKGRlZlxyXG4gcHJpbnRcclxuIChmblxyXG4gIGNsanMtY29yZS1wcmludFxyXG4gIFsmIG9ianNdXHJcbiAgKHByLXdpdGgtb3B0cyBvYmpzIChhc3NvYyAocHItb3B0cykgOnJlYWRhYmx5IGZhbHNlKSkpKVxyXG4ifSB7OnN5bSAtcGVlaywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGl0ZW0gZnJvbSB0aGUgdG9wIG9mIHRoZSBzdGFjay4gSXMgdXNlZCBieSBjbGpzLmNvcmUvcGVlay4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVN0YWNrfSB7OnN5bSBJU2VxLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNvbGxlY3Rpb25zIHRvIHByb3ZpZGUgYWNjZXNzIHRvIHRoZWlyIGl0ZW1zIGFzIHNlcXVlbmNlcy4ifSwgOm1ldGhvZHMgKC1maXJzdCAtcmVzdCl9IHs6c3ltIGVtcHR5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIG9mIHRoZSBzYW1lIGNhdGVnb3J5IGFzIGNvbGwsIG9yIG5pbCIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbXB0eVxyXG4gXCJSZXR1cm5zIGFuIGVtcHR5IGNvbGxlY3Rpb24gb2YgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgY29sbCwgb3IgbmlsXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoY29uZFxyXG4gICAoaW1wbGVtZW50cz8gSUVtcHR5YWJsZUNvbGxlY3Rpb24gY29sbClcclxuICAgKC1lbXB0eSBjb2xsKVxyXG4gICAoc2F0aXNmaWVzPyBJRW1wdHlhYmxlQ29sbGVjdGlvbiBjb2xsKVxyXG4gICAoLWVtcHR5IGNvbGwpXHJcbiAgIDplbHNlXHJcbiAgIG5pbCkpKVxyXG4ifSB7OnN5bSByZW1vdmUtbWV0aG9kLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB0aGUgbWV0aG9kIG9mIG11bHRpbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCBkaXNwYXRjaC12YWx1ZS4iLCA6YXJnbGlzdHMgKFttdWx0aWZuIGRpc3BhdGNoLXZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZS1tZXRob2RcclxuIFwiUmVtb3ZlcyB0aGUgbWV0aG9kIG9mIG11bHRpbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCBkaXNwYXRjaC12YWx1ZS5cIlxyXG4gW211bHRpZm4gZGlzcGF0Y2gtdmFsXVxyXG4gKC1yZW1vdmUtbWV0aG9kIG11bHRpZm4gZGlzcGF0Y2gtdmFsKSlcclxuIn0gezpzeW0gdm9sYXRpbGUhLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFZvbGF0aWxlIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiB2YWwuIiwgOmFyZ2xpc3RzIChbdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdm9sYXRpbGUhXHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBWb2xhdGlsZSB3aXRoIGFuIGluaXRpYWwgdmFsdWUgb2YgdmFsLlwiXHJcbiBbdmFsXVxyXG4gKFZvbGF0aWxlLiB2YWwpKVxyXG4ifSB7OnN5bSAvLCA6bWV0YSB7OmRvYyAiSWYgbm8gZGVub21pbmF0b3JzIGFyZSBzdXBwbGllZCwgcmV0dXJucyAxL251bWVyYXRvcixcbiAgZWxzZSByZXR1cm5zIG51bWVyYXRvciBkaXZpZGVkIGJ5IGFsbCBvZiB0aGUgZGVub21pbmF0b3JzLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gL1xyXG4gXCJJZiBubyBkZW5vbWluYXRvcnMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIDEvbnVtZXJhdG9yLFxcbiAgZWxzZSByZXR1cm5zIG51bWVyYXRvciBkaXZpZGVkIGJ5IGFsbCBvZiB0aGUgZGVub21pbmF0b3JzLlwiXHJcbiAoW3hdICgvIDEgeCkpXHJcbiAoW3ggeV0gKGNsanMuY29yZS9kaXZpZGUgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSAvICgvIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBiaXQtb3IsIDptZXRhIHs6ZG9jICJCaXR3aXNlIG9yIiwgOmFyZ2xpc3RzIFtbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC1vclxyXG4gXCJCaXR3aXNlIG9yXCJcclxuIChbeCB5XSAoY2xqcy5jb3JlL2JpdC1vciB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIGJpdC1vciAoY2xqcy5jb3JlL2JpdC1vciB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gbTMtZm1peCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtoMSBsZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtMy1mbWl4XHJcbiBbaDEgbGVuXVxyXG4gKGFzLT5cclxuICAoaW50IGgxKVxyXG4gIGgxXHJcbiAgKGJpdC14b3IgaDEgbGVuKVxyXG4gIChiaXQteG9yIGgxICh1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQgaDEgMTYpKVxyXG4gIChpbXVsIGgxIChpbnQgMjI0NjgyMjUwNykpXHJcbiAgKGJpdC14b3IgaDEgKHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCBoMSAxMykpXHJcbiAgKGltdWwgaDEgKGludCAzMjY2NDg5OTA5KSlcclxuICAoYml0LXhvciBoMSAodW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0IGgxIDE2KSkpKVxyXG4ifSB7OnN5bSB2ZWN0b3IsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBhcmdzLiIsIDphcmdsaXN0cyAoWyYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZlY3RvclxyXG4gXCJDcmVhdGVzIGEgbmV3IHZlY3RvciBjb250YWluaW5nIHRoZSBhcmdzLlwiXHJcbiBbJiBhcmdzXVxyXG4gKGlmXHJcbiAgKGFuZCAoaW5zdGFuY2U/IEluZGV4ZWRTZXEgYXJncykgKHplcm8/ICguLWkgYXJncykpKVxyXG4gICguZnJvbUFycmF5XHJcbiAgIFBlcnNpc3RlbnRWZWN0b3JcclxuICAgKC4tYXJyIGFyZ3MpXHJcbiAgIChub3QgKGFycmF5PyAoLi1hcnIgYXJncykpKSlcclxuICAodmVjIGFyZ3MpKSlcclxuIn0gezpzeW0gPj0sIDptZXRhIHs6ZG9jICJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBub24taW5jcmVhc2luZyBvcmRlcixcbiAgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPj1cclxuIFwiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgbm9uLWluY3JlYXNpbmcgb3JkZXIsXFxuICBvdGhlcndpc2UgZmFsc2UuXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoY2xqcy5jb3JlLz49IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChjbGpzLmNvcmUvPj0geCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoY2xqcy5jb3JlLz49IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gZHJvcC1sYXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgbGF6eSBzZXF1ZW5jZSBvZiBhbGwgYnV0IHRoZSBsYXN0IG4gKGRlZmF1bHQgMSkgaXRlbXMgaW4gY29sbCIsIDphcmdsaXN0cyBbW3NdIFtuIHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkcm9wLWxhc3RcclxuIFwiUmV0dXJuIGEgbGF6eSBzZXF1ZW5jZSBvZiBhbGwgYnV0IHRoZSBsYXN0IG4gKGRlZmF1bHQgMSkgaXRlbXMgaW4gY29sbFwiXHJcbiAoW3NdIChkcm9wLWxhc3QgMSBzKSlcclxuIChbbiBzXSAobWFwIChmbiBbeCBfXSB4KSBzIChkcm9wIG4gcykpKSlcclxuIn0gezpzeW0gb2JqZWN0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4J3MgY29uc3RydWN0b3IgaXMgT2JqZWN0IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9iamVjdD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHgncyBjb25zdHJ1Y3RvciBpcyBPYmplY3RcIlxyXG4gW3hdXHJcbiAoaWYtbm90IChuaWw/IHgpIChpZGVudGljYWw/ICguLWNvbnN0cnVjdG9yIHgpIGpzL09iamVjdCkgZmFsc2UpKVxyXG4ifSB7OnN5bSBub3QtZW1wdHksIDptZXRhIHs6ZG9jICJJZiBjb2xsIGlzIGVtcHR5LCByZXR1cm5zIG5pbCwgZWxzZSBjb2xsIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vdC1lbXB0eVxyXG4gXCJJZiBjb2xsIGlzIGVtcHR5LCByZXR1cm5zIG5pbCwgZWxzZSBjb2xsXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4gKHNlcSBjb2xsKSBjb2xsKSlcclxuIn0gezpzeW0gZGlzdGluY3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCB3aXRoIGR1cGxpY2F0ZXMgcmVtb3ZlZC5cbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW10gW2NvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXN0aW5jdFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCB3aXRoIGR1cGxpY2F0ZXMgcmVtb3ZlZC5cXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW3NlZW4gKHZvbGF0aWxlISAje30pXVxyXG4gICAgKGZuXHJcbiAgICAgKFtdIChyZikpXHJcbiAgICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAoaWZcclxuICAgICAgIChjb250YWlucz8gQHNlZW4gaW5wdXQpXHJcbiAgICAgICByZXN1bHRcclxuICAgICAgIChkbyAodnN3YXAhIHNlZW4gY29uaiBpbnB1dCkgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSkpXHJcbiAoW2NvbGxdXHJcbiAgKGxldFxyXG4gICBbc3RlcFxyXG4gICAgKGZuXHJcbiAgICAgc3RlcFxyXG4gICAgIFt4cyBzZWVuXVxyXG4gICAgIChsYXp5LXNlcVxyXG4gICAgICAoKGZuXHJcbiAgICAgICAgW1tmIDphcyB4c10gc2Vlbl1cclxuICAgICAgICAod2hlbi1sZXRcclxuICAgICAgICAgW3MgKHNlcSB4cyldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKGNvbnRhaW5zPyBzZWVuIGYpXHJcbiAgICAgICAgICAocmVjdXIgKHJlc3Qgcykgc2VlbilcclxuICAgICAgICAgIChjb25zIGYgKHN0ZXAgKHJlc3QgcykgKGNvbmogc2VlbiBmKSkpKSkpXHJcbiAgICAgICB4c1xyXG4gICAgICAgc2VlbikpKV1cclxuICAgKHN0ZXAgY29sbCAje30pKSkpXHJcbiJ9IHs6c3ltIHBhcnRpdGlvbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGxpc3RzIG9mIG4gaXRlbXMgZWFjaCwgYXQgb2Zmc2V0cyBzdGVwXG4gIGFwYXJ0LiBJZiBzdGVwIGlzIG5vdCBzdXBwbGllZCwgZGVmYXVsdHMgdG8gbiwgaS5lLiB0aGUgcGFydGl0aW9uc1xuICBkbyBub3Qgb3ZlcmxhcC4gSWYgYSBwYWQgY29sbGVjdGlvbiBpcyBzdXBwbGllZCwgdXNlIGl0cyBlbGVtZW50cyBhc1xuICBuZWNlc3NhcnkgdG8gY29tcGxldGUgbGFzdCBwYXJ0aXRpb24gdXAgdG8gbiBpdGVtcy4gSW4gY2FzZSB0aGVyZSBhcmVcbiAgbm90IGVub3VnaCBwYWRkaW5nIGVsZW1lbnRzLCByZXR1cm4gYSBwYXJ0aXRpb24gd2l0aCBsZXNzIHRoYW4gbiBpdGVtcy4iLCA6YXJnbGlzdHMgW1tuIGNvbGxdIFtuIHN0ZXAgY29sbF0gW24gc3RlcCBwYWQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpdGlvblxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBsaXN0cyBvZiBuIGl0ZW1zIGVhY2gsIGF0IG9mZnNldHMgc3RlcFxcbiAgYXBhcnQuIElmIHN0ZXAgaXMgbm90IHN1cHBsaWVkLCBkZWZhdWx0cyB0byBuLCBpLmUuIHRoZSBwYXJ0aXRpb25zXFxuICBkbyBub3Qgb3ZlcmxhcC4gSWYgYSBwYWQgY29sbGVjdGlvbiBpcyBzdXBwbGllZCwgdXNlIGl0cyBlbGVtZW50cyBhc1xcbiAgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIGxhc3QgcGFydGl0aW9uIHVwIHRvIG4gaXRlbXMuIEluIGNhc2UgdGhlcmUgYXJlXFxuICBub3QgZW5vdWdoIHBhZGRpbmcgZWxlbWVudHMsIHJldHVybiBhIHBhcnRpdGlvbiB3aXRoIGxlc3MgdGhhbiBuIGl0ZW1zLlwiXHJcbiAoW24gY29sbF0gKHBhcnRpdGlvbiBuIG4gY29sbCkpXHJcbiAoW24gc3RlcCBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAobGV0XHJcbiAgICAgW3AgKHRha2UgbiBzKV1cclxuICAgICAod2hlblxyXG4gICAgICAoPT0gbiAoY291bnQgcCkpXHJcbiAgICAgIChjb25zIHAgKHBhcnRpdGlvbiBuIHN0ZXAgKGRyb3Agc3RlcCBzKSkpKSkpKSlcclxuIChbbiBzdGVwIHBhZCBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAobGV0XHJcbiAgICAgW3AgKHRha2UgbiBzKV1cclxuICAgICAoaWZcclxuICAgICAgKD09IG4gKGNvdW50IHApKVxyXG4gICAgICAoY29ucyBwIChwYXJ0aXRpb24gbiBzdGVwIHBhZCAoZHJvcCBzdGVwIHMpKSlcclxuICAgICAgKGxpc3QgKHRha2UgbiAoY29uY2F0IHAgcGFkKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIElNdWx0aUZuLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoLWFkZC1tZXRob2QgLWRlZmF1bHQtZGlzcGF0Y2gtdmFsIC1kaXNwYXRjaC1mbiAtZ2V0LW1ldGhvZCAtbWV0aG9kcyAtcHJlZmVyLW1ldGhvZCAtcHJlZmVycyAtcmVtb3ZlLW1ldGhvZCAtcmVzZXQpfSB7OnN5bSBERU1VTkdFX1BBVFRFUk4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIERFTVVOR0VfUEFUVEVSTiBuaWwpXHJcbiJ9IHs6c3ltIElBc3NvY2lhdGl2ZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgYXNzb2NpYXRpdml0eSB0byBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1hc3NvYyAtY29udGFpbnMta2V5Pyl9IHs6c3ltIGJpdC1mbGlwLCA6bWV0YSB7OmRvYyAiRmxpcCBiaXQgYXQgaW5kZXggbiIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm4gYml0LWZsaXAgXCJGbGlwIGJpdCBhdCBpbmRleCBuXCIgW3ggbl0gKGNsanMuY29yZS9iaXQtZmxpcCB4IG4pKVxyXG4ifSB7OnN5bSBsb25nLWFycmF5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBhcnJheSBvZiBsb25ncy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxuICB3aXRoIENsb2p1cmUuIiwgOmFyZ2xpc3RzIFtbc2l6ZS1vci1zZXFdIFtzaXplIGluaXQtdmFsLW9yLXNlcV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvbmctYXJyYXlcclxuIFwiQ3JlYXRlcyBhbiBhcnJheSBvZiBsb25ncy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxcbiAgd2l0aCBDbG9qdXJlLlwiXHJcbiAoW3NpemUtb3Itc2VxXVxyXG4gIChpZlxyXG4gICAobnVtYmVyPyBzaXplLW9yLXNlcSlcclxuICAgKGxvbmctYXJyYXkgc2l6ZS1vci1zZXEgbmlsKVxyXG4gICAoaW50by1hcnJheSBzaXplLW9yLXNlcSkpKVxyXG4gKFtzaXplIGluaXQtdmFsLW9yLXNlcV1cclxuICAobGV0XHJcbiAgIFthIChtYWtlLWFycmF5IHNpemUpXVxyXG4gICAoaWZcclxuICAgIChzZXE/IGluaXQtdmFsLW9yLXNlcSlcclxuICAgIChsZXRcclxuICAgICBbcyAoc2VxIGluaXQtdmFsLW9yLXNlcSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW2kgMCBzIHNdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCBzICg8IGkgc2l6ZSkpXHJcbiAgICAgICAoZG8gKGFzZXQgYSBpIChmaXJzdCBzKSkgKHJlY3VyIChpbmMgaSkgKG5leHQgcykpKVxyXG4gICAgICAgYSkpKVxyXG4gICAgKGRvIChkb3RpbWVzIFtpIHNpemVdIChhc2V0IGEgaSBpbml0LXZhbC1vci1zZXEpKSBhKSkpKSlcclxuIn0gezpzeW0gZGVzY2VuZGFudHMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgYW5kIGluZGlyZWN0IGNoaWxkcmVuIG9mIHRhZywgdGhyb3VnaCBhXG4gIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWRcbiAgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWxcbiAgaGllcmFyY2h5LiBOb3RlOiBkb2VzIG5vdCB3b3JrIG9uIEphdmFTY3JpcHQgdHlwZSBpbmhlcml0YW5jZVxuICByZWxhdGlvbnNoaXBzLiIsIDphcmdsaXN0cyBbW3RhZ10gW2ggdGFnXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVzY2VuZGFudHNcclxuIFwiUmV0dXJucyB0aGUgaW1tZWRpYXRlIGFuZCBpbmRpcmVjdCBjaGlsZHJlbiBvZiB0YWcsIHRocm91Z2ggYVxcbiAgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZFxcbiAgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWxcXG4gIGhpZXJhcmNoeS4gTm90ZTogZG9lcyBub3Qgd29yayBvbiBKYXZhU2NyaXB0IHR5cGUgaW5oZXJpdGFuY2VcXG4gIHJlbGF0aW9uc2hpcHMuXCJcclxuIChbdGFnXSAoZGVzY2VuZGFudHMgQChnZXQtZ2xvYmFsLWhpZXJhcmNoeSkgdGFnKSlcclxuIChbaCB0YWddIChub3QtZW1wdHkgKGdldCAoOmRlc2NlbmRhbnRzIGgpIHRhZykpKSlcclxuIn0gezpzeW0gbWVyZ2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIHRoYXQgY29uc2lzdHMgb2YgdGhlIHJlc3Qgb2YgdGhlIG1hcHMgY29uai1lZCBvbnRvXG4gIHRoZSBmaXJzdC4gIElmIGEga2V5IG9jY3VycyBpbiBtb3JlIHRoYW4gb25lIG1hcCwgdGhlIG1hcHBpbmcgZnJvbVxuICB0aGUgbGF0dGVyIChsZWZ0LXRvLXJpZ2h0KSB3aWxsIGJlIHRoZSBtYXBwaW5nIGluIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbJiBtYXBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2VcclxuIFwiUmV0dXJucyBhIG1hcCB0aGF0IGNvbnNpc3RzIG9mIHRoZSByZXN0IG9mIHRoZSBtYXBzIGNvbmotZWQgb250b1xcbiAgdGhlIGZpcnN0LiAgSWYgYSBrZXkgb2NjdXJzIGluIG1vcmUgdGhhbiBvbmUgbWFwLCB0aGUgbWFwcGluZyBmcm9tXFxuICB0aGUgbGF0dGVyIChsZWZ0LXRvLXJpZ2h0KSB3aWxsIGJlIHRoZSBtYXBwaW5nIGluIHRoZSByZXN1bHQuXCJcclxuIFsmIG1hcHNdXHJcbiAod2hlblxyXG4gIChzb21lIGlkZW50aXR5IG1hcHMpXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4qIFtwMV9fNDg4MjYjIHAyX180ODgyNyNdIChjb25qIChvciBwMV9fNDg4MjYjIHt9KSBwMl9fNDg4MjcjKSlcclxuICAgbWFwcykpKVxyXG4ifSB7OnN5bSBJU2VxYWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdGhlIGFiaWxpdHkgdG8gYSB0eXBlIHRvIGJlIHRyYW5zZm9ybWVkIGludG8gYSBzZXF1ZW5jZS4ifSwgOm1ldGhvZHMgKC1zZXEpfSB7OnN5bSBqcy1tb2QsIDptZXRhIHs6ZG9jICJNb2R1bHVzIG9mIG51bSBhbmQgZGl2IHdpdGggb3JpZ2luYWwgamF2YXNjcmlwdCBiZWhhdmlvci4gaS5lLiBidWcgZm9yIG5lZ2F0aXZlIG51bWJlcnMiLCA6YXJnbGlzdHMgKFtuIGRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1tb2RcclxuIFwiTW9kdWx1cyBvZiBudW0gYW5kIGRpdiB3aXRoIG9yaWdpbmFsIGphdmFzY3JpcHQgYmVoYXZpb3IuIGkuZS4gYnVnIGZvciBuZWdhdGl2ZSBudW1iZXJzXCJcclxuIFtuIGRdXHJcbiAoY2xqcy5jb3JlL2pzLW1vZCBuIGQpKVxyXG4ifSB7OnN5bSBpbnRlZ2VyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGEgSmF2YVNjcmlwdCBudW1iZXIgd2l0aCBubyBkZWNpbWFsIHBhcnQuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludGVnZXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGEgSmF2YVNjcmlwdCBudW1iZXIgd2l0aCBubyBkZWNpbWFsIHBhcnQuXCJcclxuIFtuXVxyXG4gKGFuZFxyXG4gIChudW1iZXI/IG4pXHJcbiAgKG5vdCAoanMvaXNOYU4gbikpXHJcbiAgKG5vdCAoaWRlbnRpY2FsPyBuIGpzL0luZmluaXR5KSlcclxuICAoPT0gKGpzL3BhcnNlRmxvYXQgbikgKGpzL3BhcnNlSW50IG4gMTApKSkpXHJcbiJ9IHs6c3ltIE5TX0NBQ0hFLCA6bWV0YSB7OmRvYyAiQm9vdHN0cmFwIG9ubHkuIn0sIDpzb3VyY2UgIihkZWYgTlNfQ0FDSEUgbmlsKVxyXG4ifSB7OnN5bSBtYXB2LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHZlY3RvciBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB0aGVcbiAgc2V0IG9mIGZpcnN0IGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byB0aGUgc2V0XG4gIG9mIHNlY29uZCBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzXG4gIGV4aGF1c3RlZC4gIEFueSByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIEZ1bmN0aW9uXG4gIGYgc2hvdWxkIGFjY2VwdCBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzLiIsIDphcmdsaXN0cyBbW2YgY29sbF0gW2YgYzEgYzJdIFtmIGMxIGMyIGMzXSBbZiBjMSBjMiBjMyAmIGNvbGxzXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwdlxyXG4gXCJSZXR1cm5zIGEgdmVjdG9yIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHRoZVxcbiAgc2V0IG9mIGZpcnN0IGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmcgZiB0byB0aGUgc2V0XFxuICBvZiBzZWNvbmQgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpc1xcbiAgZXhoYXVzdGVkLiAgQW55IHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gRnVuY3Rpb25cXG4gIGYgc2hvdWxkIGFjY2VwdCBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzLlwiXHJcbiAoW2YgY29sbF1cclxuICAoLT5cclxuICAgKHJlZHVjZSAoZm4gW3Ygb10gKGNvbmohIHYgKGYgbykpKSAodHJhbnNpZW50IFtdKSBjb2xsKVxyXG4gICBwZXJzaXN0ZW50ISkpXHJcbiAoW2YgYzEgYzJdIChpbnRvIFtdIChtYXAgZiBjMSBjMikpKVxyXG4gKFtmIGMxIGMyIGMzXSAoaW50byBbXSAobWFwIGYgYzEgYzIgYzMpKSlcclxuIChbZiBjMSBjMiBjMyAmIGNvbGxzXSAoaW50byBbXSAoYXBwbHkgbWFwIGYgYzEgYzIgYzMgY29sbHMpKSkpXHJcbiJ9IHs6c3ltIGluZmluaXRlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBmb3IgSW5maW5pdHkgYW5kIC1JbmZpbml0eSB2YWx1ZXMuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmluaXRlP1xyXG4gXCJSZXR1cm5zIHRydWUgZm9yIEluZmluaXR5IGFuZCAtSW5maW5pdHkgdmFsdWVzLlwiXHJcbiBbeF1cclxuIChvclxyXG4gIChpZGVudGljYWw/IHgganMvTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxyXG4gIChpZGVudGljYWw/IHgganMvTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSkpXHJcbiJ9IHs6c3ltIHBhcnRpdGlvbi1hbGwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBsaXN0cyBsaWtlIHBhcnRpdGlvbiwgYnV0IG1heSBpbmNsdWRlXG4gIHBhcnRpdGlvbnMgd2l0aCBmZXdlciB0aGFuIG4gaXRlbXMgYXQgdGhlIGVuZC4gIFJldHVybnMgYSBzdGF0ZWZ1bFxuICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tuXSBbbiBjb2xsXSBbbiBzdGVwIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aXRpb24tYWxsXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGxpc3RzIGxpa2UgcGFydGl0aW9uLCBidXQgbWF5IGluY2x1ZGVcXG4gIHBhcnRpdGlvbnMgd2l0aCBmZXdlciB0aGFuIG4gaXRlbXMgYXQgdGhlIGVuZC4gIFJldHVybnMgYSBzdGF0ZWZ1bFxcbiAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbbl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbYSAoYXJyYXktbGlzdCldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW3Jlc3VsdFxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoLmlzRW1wdHkgYSlcclxuICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt2ICh2ZWMgKC50b0FycmF5IGEpKV1cclxuICAgICAgICAgICguY2xlYXIgYSlcclxuICAgICAgICAgICh1bnJlZHVjZWQgKHJmIHJlc3VsdCB2KSkpKV1cclxuICAgICAgIChyZiByZXN1bHQpKSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKC5hZGQgYSBpbnB1dClcclxuICAgICAgKGlmXHJcbiAgICAgICAoPT0gbiAoLnNpemUgYSkpXHJcbiAgICAgICAobGV0IFt2ICh2ZWMgKC50b0FycmF5IGEpKV0gKC5jbGVhciBhKSAocmYgcmVzdWx0IHYpKVxyXG4gICAgICAgcmVzdWx0KSkpKSkpXHJcbiAoW24gY29sbF0gKHBhcnRpdGlvbi1hbGwgbiBuIGNvbGwpKVxyXG4gKFtuIHN0ZXAgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGNvbnMgKHRha2UgbiBzKSAocGFydGl0aW9uLWFsbCBuIHN0ZXAgKGRyb3Agc3RlcCBzKSkpKSkpKVxyXG4ifSB7OnN5bSBwYXJ0aXRpb24tYnksIDptZXRhIHs6ZG9jICJBcHBsaWVzIGYgdG8gZWFjaCB2YWx1ZSBpbiBjb2xsLCBzcGxpdHRpbmcgaXQgZWFjaCB0aW1lIGYgcmV0dXJucyBhXG4gICBuZXcgdmFsdWUuICBSZXR1cm5zIGEgbGF6eSBzZXEgb2YgcGFydGl0aW9ucy4gIFJldHVybnMgYSBzdGF0ZWZ1bFxuICAgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpdGlvbi1ieVxyXG4gXCJBcHBsaWVzIGYgdG8gZWFjaCB2YWx1ZSBpbiBjb2xsLCBzcGxpdHRpbmcgaXQgZWFjaCB0aW1lIGYgcmV0dXJucyBhXFxuICAgbmV3IHZhbHVlLiAgUmV0dXJucyBhIGxhenkgc2VxIG9mIHBhcnRpdGlvbnMuICBSZXR1cm5zIGEgc3RhdGVmdWxcXG4gICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFthIChhcnJheS1saXN0KSBwYSAodm9sYXRpbGUhIDpjbGpzLmNvcmUvbm9uZSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW3Jlc3VsdFxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoLmlzRW1wdHkgYSlcclxuICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt2ICh2ZWMgKC50b0FycmF5IGEpKV1cclxuICAgICAgICAgICguY2xlYXIgYSlcclxuICAgICAgICAgICh1bnJlZHVjZWQgKHJmIHJlc3VsdCB2KSkpKV1cclxuICAgICAgIChyZiByZXN1bHQpKSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW3B2YWwgQHBhIHZhbCAoZiBpbnB1dCldXHJcbiAgICAgICAodnJlc2V0ISBwYSB2YWwpXHJcbiAgICAgICAoaWZcclxuICAgICAgICAob3IgKGtleXdvcmQtaWRlbnRpY2FsPyBwdmFsIDpjbGpzLmNvcmUvbm9uZSkgKD0gdmFsIHB2YWwpKVxyXG4gICAgICAgIChkbyAoLmFkZCBhIGlucHV0KSByZXN1bHQpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbdiAodmVjICgudG9BcnJheSBhKSldXHJcbiAgICAgICAgICguY2xlYXIgYSlcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3JldCAocmYgcmVzdWx0IHYpXVxyXG4gICAgICAgICAgKHdoZW4tbm90IChyZWR1Y2VkPyByZXQpICguYWRkIGEgaW5wdXQpKVxyXG4gICAgICAgICAgcmV0KSkpKSkpKSkpXHJcbiAoW2YgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGxldFxyXG4gICAgIFtmc3RcclxuICAgICAgKGZpcnN0IHMpXHJcbiAgICAgIGZ2XHJcbiAgICAgIChmIGZzdClcclxuICAgICAgcnVuXHJcbiAgICAgIChjb25zXHJcbiAgICAgICBmc3RcclxuICAgICAgICh0YWtlLXdoaWxlIChmbiogW3AxX180ODgzOCNdICg9IGZ2IChmIHAxX180ODgzOCMpKSkgKG5leHQgcykpKV1cclxuICAgICAoY29ucyBydW4gKHBhcnRpdGlvbi1ieSBmIChsYXp5LXNlcSAoZHJvcCAoY291bnQgcnVuKSBzKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIElTZXF1ZW50aWFsLCA6bWV0YSB7OmRvYyAiTWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIGEgcGVyc2lzdGVudCBjb2xsZWN0aW9uIG9mIHNlcXVlbnRpYWwgaXRlbXMifSwgOm1ldGhvZHMgKCl9IHs6c3ltIGVxdWl2LW1hcCwgOm1ldGEgezpkb2MgIlRlc3QgbWFwIGVxdWl2YWxlbmNlLiBSZXR1cm5zIHRydWUgaWYgeCBlcXVhbHMgeSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuIiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXF1aXYtbWFwXHJcbiBcIlRlc3QgbWFwIGVxdWl2YWxlbmNlLiBSZXR1cm5zIHRydWUgaWYgeCBlcXVhbHMgeSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXCJcclxuIFt4IHldXHJcbiAoYm9vbGVhblxyXG4gICh3aGVuXHJcbiAgIChhbmQgKG1hcD8geSkgKG5vdCAocmVjb3JkPyB5KSkpXHJcbiAgICh3aGVuXHJcbiAgICAoPT0gKGNvdW50IHgpIChjb3VudCB5KSlcclxuICAgIChpZlxyXG4gICAgIChzYXRpc2ZpZXM/IElLVlJlZHVjZSB4KVxyXG4gICAgIChyZWR1Y2Uta3ZcclxuICAgICAgKGZuXHJcbiAgICAgICBbXyBrIHZdXHJcbiAgICAgICAoaWYgKD0gKGdldCB5IGsgbmV2ZXItZXF1aXYpIHYpIHRydWUgKHJlZHVjZWQgZmFsc2UpKSlcclxuICAgICAgdHJ1ZVxyXG4gICAgICB4KVxyXG4gICAgIChldmVyeT9cclxuICAgICAgKGZuIFt4a3ZdICg9IChnZXQgeSAoZmlyc3QgeGt2KSBuZXZlci1lcXVpdikgKHNlY29uZCB4a3YpKSlcclxuICAgICAgeCkpKSkpKVxyXG4ifSB7OnN5bSBvYmplY3QtYXJyYXksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIGFycmF5IG9mIG9iamVjdHMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcbiAgd2l0aCBDbG9qdXJlLiIsIDphcmdsaXN0cyBbW3NpemUtb3Itc2VxXSBbc2l6ZSBpbml0LXZhbC1vci1zZXFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvYmplY3QtYXJyYXlcclxuIFwiQ3JlYXRlcyBhbiBhcnJheSBvZiBvYmplY3RzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XFxuICB3aXRoIENsb2p1cmUuXCJcclxuIChbc2l6ZS1vci1zZXFdXHJcbiAgKGlmXHJcbiAgIChudW1iZXI/IHNpemUtb3Itc2VxKVxyXG4gICAob2JqZWN0LWFycmF5IHNpemUtb3Itc2VxIG5pbClcclxuICAgKGludG8tYXJyYXkgc2l6ZS1vci1zZXEpKSlcclxuIChbc2l6ZSBpbml0LXZhbC1vci1zZXFdXHJcbiAgKGxldFxyXG4gICBbYSAobWFrZS1hcnJheSBzaXplKV1cclxuICAgKGlmXHJcbiAgICAoc2VxPyBpbml0LXZhbC1vci1zZXEpXHJcbiAgICAobGV0XHJcbiAgICAgW3MgKHNlcSBpbml0LXZhbC1vci1zZXEpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtpIDAgcyBzXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgcyAoPCBpIHNpemUpKVxyXG4gICAgICAgKGRvIChhc2V0IGEgaSAoZmlyc3QgcykpIChyZWN1ciAoaW5jIGkpIChuZXh0IHMpKSlcclxuICAgICAgIGEpKSlcclxuICAgIChkbyAoZG90aW1lcyBbaSBzaXplXSAoYXNldCBhIGkgaW5pdC12YWwtb3Itc2VxKSkgYSkpKSkpXHJcbiJ9IHs6c3ltIGRlcml2ZSwgOm1ldGEgezpkb2MgIkVzdGFibGlzaGVzIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhcmVudCBhbmRcbiAgdGFnLiBQYXJlbnQgbXVzdCBiZSBhIG5hbWVzcGFjZS1xdWFsaWZpZWQgc3ltYm9sIG9yIGtleXdvcmQgYW5kXG4gIGNoaWxkIGNhbiBiZSBlaXRoZXIgYSBuYW1lc3BhY2UtcXVhbGlmaWVkIHN5bWJvbCBvciBrZXl3b3JkIG9yIGFcbiAgY2xhc3MuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3RcbiAgc3VwcGxpZWQgZGVmYXVsdHMgdG8sIGFuZCBtb2RpZmllcywgdGhlIGdsb2JhbCBoaWVyYXJjaHkuIiwgOmFyZ2xpc3RzIFtbdGFnIHBhcmVudF0gW2ggdGFnIHBhcmVudF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcml2ZVxyXG4gXCJFc3RhYmxpc2hlcyBhIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYXJlbnQgYW5kXFxuICB0YWcuIFBhcmVudCBtdXN0IGJlIGEgbmFtZXNwYWNlLXF1YWxpZmllZCBzeW1ib2wgb3Iga2V5d29yZCBhbmRcXG4gIGNoaWxkIGNhbiBiZSBlaXRoZXIgYSBuYW1lc3BhY2UtcXVhbGlmaWVkIHN5bWJvbCBvciBrZXl3b3JkIG9yIGFcXG4gIGNsYXNzLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90XFxuICBzdXBwbGllZCBkZWZhdWx0cyB0bywgYW5kIG1vZGlmaWVzLCB0aGUgZ2xvYmFsIGhpZXJhcmNoeS5cIlxyXG4gKFt0YWcgcGFyZW50XVxyXG4gIChhc3NlcnQgKG5hbWVzcGFjZSBwYXJlbnQpKVxyXG4gIChzd2FwLWdsb2JhbC1oaWVyYXJjaHkhIGRlcml2ZSB0YWcgcGFyZW50KVxyXG4gIG5pbClcclxuIChbaCB0YWcgcGFyZW50XVxyXG4gIChhc3NlcnQgKG5vdD0gdGFnIHBhcmVudCkpXHJcbiAgKGxldFxyXG4gICBbdHBcclxuICAgICg6cGFyZW50cyBoKVxyXG4gICAgdGRcclxuICAgICg6ZGVzY2VuZGFudHMgaClcclxuICAgIHRhXHJcbiAgICAoOmFuY2VzdG9ycyBoKVxyXG4gICAgdGZcclxuICAgIChmblxyXG4gICAgIFttIHNvdXJjZSBzb3VyY2VzIHRhcmdldCB0YXJnZXRzXVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuXHJcbiAgICAgICBbcmV0IGtdXHJcbiAgICAgICAoYXNzb2NcclxuICAgICAgICByZXRcclxuICAgICAgICBrXHJcbiAgICAgICAgKHJlZHVjZVxyXG4gICAgICAgICBjb25qXHJcbiAgICAgICAgIChnZXQgdGFyZ2V0cyBrICN7fSlcclxuICAgICAgICAgKGNvbnMgdGFyZ2V0ICh0YXJnZXRzIHRhcmdldCkpKSkpXHJcbiAgICAgIG1cclxuICAgICAgKGNvbnMgc291cmNlIChzb3VyY2VzIHNvdXJjZSkpKSldXHJcbiAgIChvclxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKGNvbnRhaW5zPyAodHAgdGFnKSBwYXJlbnQpXHJcbiAgICAgKHdoZW5cclxuICAgICAgKGNvbnRhaW5zPyAodGEgdGFnKSBwYXJlbnQpXHJcbiAgICAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgdGFnIFwiYWxyZWFkeSBoYXNcIiBwYXJlbnQgXCJhcyBhbmNlc3RvclwiKSkpKVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChjb250YWlucz8gKHRhIHBhcmVudCkgdGFnKVxyXG4gICAgICAodGhyb3dcclxuICAgICAgIChqcy9FcnJvci5cclxuICAgICAgICAoc3RyIFwiQ3ljbGljIGRlcml2YXRpb246XCIgcGFyZW50IFwiaGFzXCIgdGFnIFwiYXMgYW5jZXN0b3JcIikpKSlcclxuICAgICB7OnBhcmVudHMgKGFzc29jICg6cGFyZW50cyBoKSB0YWcgKGNvbmogKGdldCB0cCB0YWcgI3t9KSBwYXJlbnQpKSxcclxuICAgICAgOmFuY2VzdG9ycyAodGYgKDphbmNlc3RvcnMgaCkgdGFnIHRkIHBhcmVudCB0YSksXHJcbiAgICAgIDpkZXNjZW5kYW50cyAodGYgKDpkZXNjZW5kYW50cyBoKSBwYXJlbnQgdGEgdGFnIHRkKX0pXHJcbiAgICBoKSkpKVxyXG4ifSB7OnN5bSBzZXEtaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBzZXEtaXRlciBbY29sbF0gKFNlcUl0ZXIuIElOSVQgY29sbCkpXHJcbiJ9IHs6c3ltIElDaHVua2VkU2VxLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFjY2Vzc2luZyBhIGNvbGxlY3Rpb24gYXMgc2VxdWVudGlhbCBjaHVua3MuIn0sIDptZXRob2RzICgtY2h1bmtlZC1maXJzdCAtY2h1bmtlZC1yZXN0KX0gezpzeW0gc3BlY2lhbC1zeW1ib2w/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggbmFtZXMgYSBzcGVjaWFsIGZvcm0iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BlY2lhbC1zeW1ib2w/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IG5hbWVzIGEgc3BlY2lhbCBmb3JtXCJcclxuIFt4XVxyXG4gKGNvbnRhaW5zP1xyXG4gICcjeyYgY2FzZSogZGVmcmVjb3JkKiB0cnkgbnMqIGZpbmFsbHkgbG9vcCogZG8gbGV0Zm4qIGlmIG5ldyBuc1xyXG4gICAgIGRlZnR5cGUqIGxldCoganMqIGZuKiByZWN1ciBzZXQhIC4gdmFyIHF1b3RlIGNhdGNoIHRocm93IGRlZn1cclxuICB4KSlcclxuIn0gezpzeW0gYW5jZXN0b3JzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaW1tZWRpYXRlIGFuZCBpbmRpcmVjdCBwYXJlbnRzIG9mIHRhZywgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZVxuICBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYSByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaFxuICBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZFxuICBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGhpZXJhcmNoeSIsIDphcmdsaXN0cyBbW3RhZ10gW2ggdGFnXV19LCA6c291cmNlICIoZGVmblxyXG4gYW5jZXN0b3JzXHJcbiBcIlJldHVybnMgdGhlIGltbWVkaWF0ZSBhbmQgaW5kaXJlY3QgcGFyZW50cyBvZiB0YWcsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGVcXG4gIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoXFxuICBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZFxcbiAgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCBoaWVyYXJjaHlcIlxyXG4gKFt0YWddIChhbmNlc3RvcnMgQChnZXQtZ2xvYmFsLWhpZXJhcmNoeSkgdGFnKSlcclxuIChbaCB0YWddIChub3QtZW1wdHkgKGdldCAoOmFuY2VzdG9ycyBoKSB0YWcpKSkpXHJcbiJ9IHs6c3ltIHN1YnNlcSwgOm1ldGEgezpkb2MgInNjIG11c3QgYmUgYSBzb3J0ZWQgY29sbGVjdGlvbiwgdGVzdChzKSBvbmUgb2YgPCwgPD0sID4gb3JcbiAgPj0uIFJldHVybnMgYSBzZXEgb2YgdGhvc2UgZW50cmllcyB3aXRoIGtleXMgZWsgZm9yXG4gIHdoaWNoICh0ZXN0ICguLiBzYyBjb21wYXJhdG9yIChjb21wYXJlIGVrIGtleSkpIDApIGlzIHRydWUiLCA6YXJnbGlzdHMgW1tzYyB0ZXN0IGtleV0gW3NjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5IGVuZC10ZXN0IGVuZC1rZXldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdWJzZXFcclxuIFwic2MgbXVzdCBiZSBhIHNvcnRlZCBjb2xsZWN0aW9uLCB0ZXN0KHMpIG9uZSBvZiA8LCA8PSwgPiBvclxcbiAgPj0uIFJldHVybnMgYSBzZXEgb2YgdGhvc2UgZW50cmllcyB3aXRoIGtleXMgZWsgZm9yXFxuICB3aGljaCAodGVzdCAoLi4gc2MgY29tcGFyYXRvciAoY29tcGFyZSBlayBrZXkpKSAwKSBpcyB0cnVlXCJcclxuIChbc2MgdGVzdCBrZXldXHJcbiAgKGxldFxyXG4gICBbaW5jbHVkZSAobWstYm91bmQtZm4gc2MgdGVzdCBrZXkpXVxyXG4gICAoaWZcclxuICAgICgjez4gPj19IHRlc3QpXHJcbiAgICAod2hlbi1sZXRcclxuICAgICBbW2UgOmFzIHNdICgtc29ydGVkLXNlcS1mcm9tIHNjIGtleSB0cnVlKV1cclxuICAgICAoaWYgKGluY2x1ZGUgZSkgcyAobmV4dCBzKSkpXHJcbiAgICAodGFrZS13aGlsZSBpbmNsdWRlICgtc29ydGVkLXNlcSBzYyB0cnVlKSkpKSlcclxuIChbc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkgZW5kLXRlc3QgZW5kLWtleV1cclxuICAod2hlbi1sZXRcclxuICAgW1tlIDphcyBzXSAoLXNvcnRlZC1zZXEtZnJvbSBzYyBzdGFydC1rZXkgdHJ1ZSldXHJcbiAgICh0YWtlLXdoaWxlXHJcbiAgICAobWstYm91bmQtZm4gc2MgZW5kLXRlc3QgZW5kLWtleSlcclxuICAgIChpZiAoKG1rLWJvdW5kLWZuIHNjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5KSBlKSBzIChuZXh0IHMpKSkpKSlcclxuIn0gezpzeW0gZ2Vuc3ltLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBzeW1ib2wgd2l0aCBhIHVuaXF1ZSBuYW1lLiBJZiBhIHByZWZpeCBzdHJpbmcgaXNcbiAgc3VwcGxpZWQsIHRoZSBuYW1lIGlzIHByZWZpeCMgd2hlcmUgIyBpcyBzb21lIHVuaXF1ZSBudW1iZXIuIElmXG4gIHByZWZpeCBpcyBub3Qgc3VwcGxpZWQsIHRoZSBwcmVmaXggaXMgJ0dfXycuIiwgOmFyZ2xpc3RzIFtbXSBbcHJlZml4LXN0cmluZ11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdlbnN5bVxyXG4gXCJSZXR1cm5zIGEgbmV3IHN5bWJvbCB3aXRoIGEgdW5pcXVlIG5hbWUuIElmIGEgcHJlZml4IHN0cmluZyBpc1xcbiAgc3VwcGxpZWQsIHRoZSBuYW1lIGlzIHByZWZpeCMgd2hlcmUgIyBpcyBzb21lIHVuaXF1ZSBudW1iZXIuIElmXFxuICBwcmVmaXggaXMgbm90IHN1cHBsaWVkLCB0aGUgcHJlZml4IGlzICdHX18nLlwiXHJcbiAoW10gKGdlbnN5bSBcIkdfX1wiKSlcclxuIChbcHJlZml4LXN0cmluZ11cclxuICAod2hlbiAobmlsPyBnZW5zeW1fY291bnRlcikgKHNldCEgZ2Vuc3ltX2NvdW50ZXIgKGF0b20gMCkpKVxyXG4gIChzeW1ib2wgKHN0ciBwcmVmaXgtc3RyaW5nIChzd2FwISBnZW5zeW1fY291bnRlciBpbmMpKSkpKVxyXG4ifSB7OnN5bSAtbmV4dCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGhvdXQgdGhlIGZpcnN0IGl0ZW0uIEluIGNvbnRyYXN0IHRvXG4gICAgIHJlc3QsIGl0IHNob3VsZCByZXR1cm4gbmlsIGlmIHRoZXJlIGFyZSBubyBtb3JlIGl0ZW1zLCBlLmcuXG4gICAgIChuZXh0IFtdKSA9PiBuaWxcbiAgICAgKG5leHQgbmlsKSA9PiBuaWwiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSU5leHR9IHs6c3ltIGRlbGF5PywgOm1ldGEgezpkb2MgInJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgRGVsYXkgY3JlYXRlZCB3aXRoIGRlbGF5IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlbGF5P1xyXG4gXCJyZXR1cm5zIHRydWUgaWYgeCBpcyBhIERlbGF5IGNyZWF0ZWQgd2l0aCBkZWxheVwiXHJcbiBbeF1cclxuIChpbnN0YW5jZT8gRGVsYXkgeCkpXHJcbiJ9IHs6c3ltIGZsYXR0ZW4sIDptZXRhIHs6ZG9jICJUYWtlcyBhbnkgbmVzdGVkIGNvbWJpbmF0aW9uIG9mIHNlcXVlbnRpYWwgdGhpbmdzIChsaXN0cywgdmVjdG9ycyxcbiAgZXRjLikgYW5kIHJldHVybnMgdGhlaXIgY29udGVudHMgYXMgYSBzaW5nbGUsIGZsYXQgc2VxdWVuY2UuXG4gIChmbGF0dGVuIG5pbCkgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZsYXR0ZW5cclxuIFwiVGFrZXMgYW55IG5lc3RlZCBjb21iaW5hdGlvbiBvZiBzZXF1ZW50aWFsIHRoaW5ncyAobGlzdHMsIHZlY3RvcnMsXFxuICBldGMuKSBhbmQgcmV0dXJucyB0aGVpciBjb250ZW50cyBhcyBhIHNpbmdsZSwgZmxhdCBzZXF1ZW5jZS5cXG4gIChmbGF0dGVuIG5pbCkgcmV0dXJucyBuaWwuXCJcclxuIFt4XVxyXG4gKGZpbHRlclxyXG4gIChmbiogW3AxX180ODgyNCNdIChub3QgKHNlcXVlbnRpYWw/IHAxX180ODgyNCMpKSlcclxuICAocmVzdCAodHJlZS1zZXEgc2VxdWVudGlhbD8gc2VxIHgpKSkpXHJcbiJ9IHs6c3ltIC1kaXNzb2MsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRob3V0IHRoZSBtYXBwaW5nIGZvciBrZXkgay4iLCA6YXJnbGlzdHMgKFtjb2xsIGtdKX0sIDpwcm90b2NvbCBJTWFwfSB7OnN5bSBkb3VibGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGRvdWJsZXMgW3hdIHgpXHJcbiJ9IHs6c3ltIGhhbHQtd2hlbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZW5kcyB0cmFuc2R1Y3Rpb24gd2hlbiBwcmVkIHJldHVybnMgdHJ1ZVxuICBmb3IgYW4gaW5wdXQuIFdoZW4gcmV0ZiBpcyBzdXBwbGllZCBpdCBtdXN0IGJlIGEgZm4gb2YgMiBhcmd1bWVudHMgLVxuICBpdCB3aWxsIGJlIHBhc3NlZCB0aGUgKGNvbXBsZXRlZCkgcmVzdWx0IHNvIGZhciBhbmQgdGhlIGlucHV0IHRoYXRcbiAgdHJpZ2dlcmVkIHRoZSBwcmVkaWNhdGUsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIChpZiBpdCBkb2VzIG5vdCB0aHJvd1xuICBhbiBleGNlcHRpb24pIHdpbGwgYmUgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdHJhbnNkdWNlci4gSWYgcmV0ZlxuICBpcyBub3Qgc3VwcGxpZWQsIHRoZSBpbnB1dCB0aGF0IHRyaWdnZXJlZCB0aGUgcHJlZGljYXRlIHdpbGwgYmVcbiAgcmV0dXJuZWQuIElmIHRoZSBwcmVkaWNhdGUgbmV2ZXIgcmV0dXJucyB0cnVlIHRoZSB0cmFuc2R1Y3Rpb24gaXNcbiAgdW5hZmZlY3RlZC4iLCA6YXJnbGlzdHMgW1twcmVkXSBbcHJlZCByZXRmXV19LCA6c291cmNlICIoZGVmblxyXG4gaGFsdC13aGVuXHJcbiBcIlJldHVybnMgYSB0cmFuc2R1Y2VyIHRoYXQgZW5kcyB0cmFuc2R1Y3Rpb24gd2hlbiBwcmVkIHJldHVybnMgdHJ1ZVxcbiAgZm9yIGFuIGlucHV0LiBXaGVuIHJldGYgaXMgc3VwcGxpZWQgaXQgbXVzdCBiZSBhIGZuIG9mIDIgYXJndW1lbnRzIC1cXG4gIGl0IHdpbGwgYmUgcGFzc2VkIHRoZSAoY29tcGxldGVkKSByZXN1bHQgc28gZmFyIGFuZCB0aGUgaW5wdXQgdGhhdFxcbiAgdHJpZ2dlcmVkIHRoZSBwcmVkaWNhdGUsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIChpZiBpdCBkb2VzIG5vdCB0aHJvd1xcbiAgYW4gZXhjZXB0aW9uKSB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRyYW5zZHVjZXIuIElmIHJldGZcXG4gIGlzIG5vdCBzdXBwbGllZCwgdGhlIGlucHV0IHRoYXQgdHJpZ2dlcmVkIHRoZSBwcmVkaWNhdGUgd2lsbCBiZVxcbiAgcmV0dXJuZWQuIElmIHRoZSBwcmVkaWNhdGUgbmV2ZXIgcmV0dXJucyB0cnVlIHRoZSB0cmFuc2R1Y3Rpb24gaXNcXG4gIHVuYWZmZWN0ZWQuXCJcclxuIHs6YWRkZWQgXCIxLjlcIn1cclxuIChbcHJlZF0gKGhhbHQtd2hlbiBwcmVkIG5pbCkpXHJcbiAoW3ByZWQgcmV0Zl1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAoZm5cclxuICAgIChbXSAocmYpKVxyXG4gICAgKFtyZXN1bHRdXHJcbiAgICAgKGlmXHJcbiAgICAgIChhbmQgKG1hcD8gcmVzdWx0KSAoY29udGFpbnM/IHJlc3VsdCA6Y2xqcy5jb3JlL2hhbHQpKVxyXG4gICAgICAoOmNsanMuY29yZS9oYWx0IHJlc3VsdClcclxuICAgICAgKHJmIHJlc3VsdCkpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgKGlmXHJcbiAgICAgIChwcmVkIGlucHV0KVxyXG4gICAgICAocmVkdWNlZFxyXG4gICAgICAgezpjbGpzLmNvcmUvaGFsdCAoaWYgcmV0ZiAocmV0ZiAocmYgcmVzdWx0KSBpbnB1dCkgaW5wdXQpfSlcclxuICAgICAgKHJmIHJlc3VsdCBpbnB1dCkpKSkpKSlcclxuIn0gezpzeW0gLWNvbnRhaW5zLWtleT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgayBpcyBhIGtleSBpbiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGwga10pfSwgOnByb3RvY29sIElBc3NvY2lhdGl2ZX0gezpzeW0gcmVtb3ZlLXdhdGNoLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBhIHdhdGNoIChzZXQgYnkgYWRkLXdhdGNoKSBmcm9tIGEgcmVmZXJlbmNlIiwgOmFyZ2xpc3RzIChbaXJlZiBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmUtd2F0Y2hcclxuIFwiUmVtb3ZlcyBhIHdhdGNoIChzZXQgYnkgYWRkLXdhdGNoKSBmcm9tIGEgcmVmZXJlbmNlXCJcclxuIFtpcmVmIGtleV1cclxuICgtcmVtb3ZlLXdhdGNoIGlyZWYga2V5KVxyXG4gaXJlZilcclxuIn0gezpzeW0gZXgtaW5mbywgOm1ldGEgezpkb2MgIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBFeGNlcHRpb25JbmZvLCBhbiBFcnJvciB0eXBlIHRoYXQgY2FycmllcyBhXG4gIG1hcCBvZiBhZGRpdGlvbmFsIGRhdGEuIiwgOmFyZ2xpc3RzIFtbbXNnIGRhdGFdIFttc2cgZGF0YSBjYXVzZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4LWluZm9cclxuIFwiQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEV4Y2VwdGlvbkluZm8sIGFuIEVycm9yIHR5cGUgdGhhdCBjYXJyaWVzIGFcXG4gIG1hcCBvZiBhZGRpdGlvbmFsIGRhdGEuXCJcclxuIChbbXNnIGRhdGFdIChleC1pbmZvIG1zZyBkYXRhIG5pbCkpXHJcbiAoW21zZyBkYXRhIGNhdXNlXSAoRXhjZXB0aW9uSW5mby4gbXNnIGRhdGEgY2F1c2UpKSlcclxuIn0gezpzeW0gaWZuPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBmIHJldHVybnMgdHJ1ZSBmb3IgZm4/IG9yIHNhdGlzZmllcyBJRm4uIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlmbj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGYgcmV0dXJucyB0cnVlIGZvciBmbj8gb3Igc2F0aXNmaWVzIElGbi5cIlxyXG4gW2ZdXHJcbiAob3IgKGZuPyBmKSAoc2F0aXNmaWVzPyBJRm4gZikpKVxyXG4ifSB7OnN5bSBJQXRvbSwgOm1ldGEgezpkb2MgIk1hcmtlciBwcm90b2NvbCBpbmRpY2F0aW5nIGFuIGF0b20uIn0sIDptZXRob2RzICgpfSB7OnN5bSBuYXQtaW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIGEgbmF0dXJhbCBpbnRlZ2VyIHZhbHVlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYXQtaW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBhIG5hdHVyYWwgaW50ZWdlciB2YWx1ZS5cIlxyXG4gW3hdXHJcbiAoY29uZFxyXG4gIChpbnRlZ2VyPyB4KVxyXG4gIChub3QgKG5lZz8geCkpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguSW50ZWdlciB4KVxyXG4gIChub3QgKC5pc05lZ2F0aXZlIHgpKVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkxvbmcgeClcclxuICAobm90ICguaXNOZWdhdGl2ZSB4KSlcclxuICA6ZWxzZVxyXG4gIGZhbHNlKSlcclxuIn0gezpzeW0gSVdhdGNoYWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciB0eXBlcyB0aGF0IGNhbiBiZSB3YXRjaGVkLiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBieSBBdG9tLiJ9LCA6bWV0aG9kcyAoLWFkZC13YXRjaCAtbm90aWZ5LXdhdGNoZXMgLXJlbW92ZS13YXRjaCl9IHs6c3ltIHN1YnZlYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBwZXJzaXN0ZW50IHZlY3RvciBvZiB0aGUgaXRlbXMgaW4gdmVjdG9yIGZyb21cbiAgc3RhcnQgKGluY2x1c2l2ZSkgdG8gZW5kIChleGNsdXNpdmUpLiAgSWYgZW5kIGlzIG5vdCBzdXBwbGllZCxcbiAgZGVmYXVsdHMgdG8gKGNvdW50IHZlY3RvcikuIFRoaXMgb3BlcmF0aW9uIGlzIE8oMSkgYW5kIHZlcnkgZmFzdCwgYXNcbiAgdGhlIHJlc3VsdGluZyB2ZWN0b3Igc2hhcmVzIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmlnaW5hbCBhbmQgbm9cbiAgdHJpbW1pbmcgaXMgZG9uZS4iLCA6YXJnbGlzdHMgW1t2IHN0YXJ0XSBbdiBzdGFydCBlbmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdWJ2ZWNcclxuIFwiUmV0dXJucyBhIHBlcnNpc3RlbnQgdmVjdG9yIG9mIHRoZSBpdGVtcyBpbiB2ZWN0b3IgZnJvbVxcbiAgc3RhcnQgKGluY2x1c2l2ZSkgdG8gZW5kIChleGNsdXNpdmUpLiAgSWYgZW5kIGlzIG5vdCBzdXBwbGllZCxcXG4gIGRlZmF1bHRzIHRvIChjb3VudCB2ZWN0b3IpLiBUaGlzIG9wZXJhdGlvbiBpcyBPKDEpIGFuZCB2ZXJ5IGZhc3QsIGFzXFxuICB0aGUgcmVzdWx0aW5nIHZlY3RvciBzaGFyZXMgc3RydWN0dXJlIHdpdGggdGhlIG9yaWdpbmFsIGFuZCBub1xcbiAgdHJpbW1pbmcgaXMgZG9uZS5cIlxyXG4gKFt2IHN0YXJ0XSAoc3VidmVjIHYgc3RhcnQgKGNvdW50IHYpKSlcclxuIChbdiBzdGFydCBlbmRdXHJcbiAgKGFzc2VydCAoYW5kIChub3QgKG5pbD8gc3RhcnQpKSAobm90IChuaWw/IGVuZCkpKSlcclxuICAoYnVpbGQtc3VidmVjIG5pbCB2IChpbnQgc3RhcnQpIChpbnQgZW5kKSBuaWwpKSlcclxuIn0gezpzeW0gLXBvcCEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRjb2xsIHdpdGggdGhlIGxhc3QgaXRlbSByZW1vdmVkIGZyb20gaXQuIiwgOmFyZ2xpc3RzIChbdGNvbGxdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50VmVjdG9yfSB7OnN5bSBwYXJ0aWFsLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmdW5jdGlvbiBmIGFuZCBmZXdlciB0aGFuIHRoZSBub3JtYWwgYXJndW1lbnRzIHRvIGYsIGFuZFxuICByZXR1cm5zIGEgZm4gdGhhdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3MuIFdoZW5cbiAgY2FsbGVkLCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gY2FsbHMgZiB3aXRoIGFyZ3MgKyBhZGRpdGlvbmFsIGFyZ3MuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgYXJnMV0gW2YgYXJnMSBhcmcyXSBbZiBhcmcxIGFyZzIgYXJnM10gW2YgYXJnMSBhcmcyIGFyZzMgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGlhbFxyXG4gXCJUYWtlcyBhIGZ1bmN0aW9uIGYgYW5kIGZld2VyIHRoYW4gdGhlIG5vcm1hbCBhcmd1bWVudHMgdG8gZiwgYW5kXFxuICByZXR1cm5zIGEgZm4gdGhhdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3MuIFdoZW5cXG4gIGNhbGxlZCwgdGhlIHJldHVybmVkIGZ1bmN0aW9uIGNhbGxzIGYgd2l0aCBhcmdzICsgYWRkaXRpb25hbCBhcmdzLlwiXHJcbiAoW2ZdIGYpXHJcbiAoW2YgYXJnMV1cclxuICAoZm5cclxuICAgKFtdIChmIGFyZzEpKVxyXG4gICAoW3hdIChmIGFyZzEgeCkpXHJcbiAgIChbeCB5XSAoZiBhcmcxIHggeSkpXHJcbiAgIChbeCB5IHpdIChmIGFyZzEgeCB5IHopKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGFwcGx5IGYgYXJnMSB4IHkgeiBhcmdzKSkpKVxyXG4gKFtmIGFyZzEgYXJnMl1cclxuICAoZm5cclxuICAgKFtdIChmIGFyZzEgYXJnMikpXHJcbiAgIChbeF0gKGYgYXJnMSBhcmcyIHgpKVxyXG4gICAoW3ggeV0gKGYgYXJnMSBhcmcyIHggeSkpXHJcbiAgIChbeCB5IHpdIChmIGFyZzEgYXJnMiB4IHkgeikpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoYXBwbHkgZiBhcmcxIGFyZzIgeCB5IHogYXJncykpKSlcclxuIChbZiBhcmcxIGFyZzIgYXJnM11cclxuICAoZm5cclxuICAgKFtdIChmIGFyZzEgYXJnMiBhcmczKSlcclxuICAgKFt4XSAoZiBhcmcxIGFyZzIgYXJnMyB4KSlcclxuICAgKFt4IHldIChmIGFyZzEgYXJnMiBhcmczIHggeSkpXHJcbiAgIChbeCB5IHpdIChmIGFyZzEgYXJnMiBhcmczIHggeSB6KSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChhcHBseSBmIGFyZzEgYXJnMiBhcmczIHggeSB6IGFyZ3MpKSkpXHJcbiAoW2YgYXJnMSBhcmcyIGFyZzMgJiBtb3JlXVxyXG4gIChmbiBbJiBhcmdzXSAoYXBwbHkgZiBhcmcxIGFyZzIgYXJnMyAoY29uY2F0IG1vcmUgYXJncykpKSkpXHJcbiJ9IHs6c3ltIGNodW5rZWQtc2VxPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElDaHVua2VkU2VxLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaHVua2VkLXNlcT9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSUNodW5rZWRTZXEuXCJcclxuIFt4XVxyXG4gKGltcGxlbWVudHM/IElDaHVua2VkU2VxIHgpKVxyXG4ifSB7OnN5bSByZXBsaWNhdGUsIDptZXRhIHs6ZG9jICJERVBSRUNBVEVEOiBVc2UgJ3JlcGVhdCcgaW5zdGVhZC5cbiAgUmV0dXJucyBhIGxhenkgc2VxIG9mIG4geHMuIiwgOmFyZ2xpc3RzIChbbiB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwbGljYXRlXHJcbiBcIkRFUFJFQ0FURUQ6IFVzZSAncmVwZWF0JyBpbnN0ZWFkLlxcbiAgUmV0dXJucyBhIGxhenkgc2VxIG9mIG4geHMuXCJcclxuIFtuIHhdXHJcbiAodGFrZSBuIChyZXBlYXQgeCkpKVxyXG4ifSB7OnN5bSBtaW4ta2V5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgeCBmb3Igd2hpY2ggKGsgeCksIGEgbnVtYmVyLCBpcyBsZWFzdC5cblxuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCB4cywgdGhlIGxhc3Qgb25lIGlzIHJldHVybmVkLiIsIDphcmdsaXN0cyBbW2sgeF0gW2sgeCB5XSBbayB4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbWluLWtleVxyXG4gXCJSZXR1cm5zIHRoZSB4IGZvciB3aGljaCAoayB4KSwgYSBudW1iZXIsIGlzIGxlYXN0LlxcblxcbiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN1Y2ggeHMsIHRoZSBsYXN0IG9uZSBpcyByZXR1cm5lZC5cIlxyXG4gKFtrIHhdIHgpXHJcbiAoW2sgeCB5XSAoaWYgKDwgKGsgeCkgKGsgeSkpIHggeSkpXHJcbiAoW2sgeCB5ICYgbW9yZV1cclxuICAocmVkdWNlXHJcbiAgIChmbiogW3AxX180ODgzNiMgcDJfXzQ4ODM3I10gKG1pbi1rZXkgayBwMV9fNDg4MzYjIHAyX180ODgzNyMpKVxyXG4gICAobWluLWtleSBrIHggeSlcclxuICAgbW9yZSkpKVxyXG4ifSB7OnN5bSByZWR1Y2VkLCA6bWV0YSB7OmRvYyAiV3JhcHMgeCBpbiBhIHdheSBzdWNoIHRoYXQgYSByZWR1Y2Ugd2lsbCB0ZXJtaW5hdGUgd2l0aCB0aGUgdmFsdWUgeCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2VkXHJcbiBcIldyYXBzIHggaW4gYSB3YXkgc3VjaCB0aGF0IGEgcmVkdWNlIHdpbGwgdGVybWluYXRlIHdpdGggdGhlIHZhbHVlIHhcIlxyXG4gW3hdXHJcbiAoUmVkdWNlZC4geCkpXHJcbiJ9IHs6c3ltIHJlLW1hdGNoZXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSByZXN1bHQgb2YgKHJlLWZpbmQgcmUgcykgaWYgcmUgZnVsbHkgbWF0Y2hlcyBzLiIsIDphcmdsaXN0cyAoW3JlIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZS1tYXRjaGVzXHJcbiBcIlJldHVybnMgdGhlIHJlc3VsdCBvZiAocmUtZmluZCByZSBzKSBpZiByZSBmdWxseSBtYXRjaGVzIHMuXCJcclxuIFtyZSBzXVxyXG4gKGlmXHJcbiAgKHN0cmluZz8gcylcclxuICAobGV0XHJcbiAgIFttYXRjaGVzICguZXhlYyByZSBzKV1cclxuICAgKHdoZW5cclxuICAgIChhbmQgKG5vdCAobmlsPyBtYXRjaGVzKSkgKD0gKGFnZXQgbWF0Y2hlcyAwKSBzKSlcclxuICAgIChpZiAoPT0gKGNvdW50IG1hdGNoZXMpIDEpIChhZ2V0IG1hdGNoZXMgMCkgKHZlYyBtYXRjaGVzKSkpKVxyXG4gICh0aHJvdyAoanMvVHlwZUVycm9yLiBcInJlLW1hdGNoZXMgbXVzdCBtYXRjaCBhZ2FpbnN0IGEgc3RyaW5nLlwiKSkpKVxyXG4ifSB7OnN5bSBhcnJheS1tYXAsIDptZXRhIHs6ZG9jICJrZXl2YWwgPT4ga2V5IHZhbFxuICBSZXR1cm5zIGEgbmV3IGFycmF5IG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLiIsIDphcmdsaXN0cyAoWyYga2V5dmFsc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5LW1hcFxyXG4gXCJrZXl2YWwgPT4ga2V5IHZhbFxcbiAgUmV0dXJucyBhIG5ldyBhcnJheSBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy5cIlxyXG4gWyYga2V5dmFsc11cclxuIChsZXRcclxuICBbYXJyXHJcbiAgIChpZlxyXG4gICAgKGFuZCAoaW5zdGFuY2U/IEluZGV4ZWRTZXEga2V5dmFscykgKHplcm8/ICguLWkga2V5dmFscykpKVxyXG4gICAgKC4tYXJyIGtleXZhbHMpXHJcbiAgICAoaW50by1hcnJheSBrZXl2YWxzKSldXHJcbiAgKC5jcmVhdGVBc0lmQnlBc3NvYyBQZXJzaXN0ZW50QXJyYXlNYXAgYXJyKSkpXHJcbiJ9IHs6c3ltIElUcmFuc2llbnRTZXQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHNldCBmdW5jdGlvbmFsaXR5IHRvIGEgdHJhbnNpZW50IGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtZGlzam9pbiEpfSB7OnN5bSB1bmNoZWNrZWQtYnl0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtYnl0ZSBbeF0geClcclxuIn0gezpzeW0gZXZlcnktcHJlZCwgOm1ldGEgezpkb2MgIlRha2VzIGEgc2V0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBmIHRoYXQgcmV0dXJucyB0cnVlIGlmIGFsbCBvZiBpdHNcbiAgY29tcG9zaW5nIHByZWRpY2F0ZXMgcmV0dXJuIGEgbG9naWNhbCB0cnVlIHZhbHVlIGFnYWluc3QgYWxsIG9mIGl0cyBhcmd1bWVudHMsIGVsc2UgaXQgcmV0dXJuc1xuICBmYWxzZS4gTm90ZSB0aGF0IGYgaXMgc2hvcnQtY2lyY3VpdGluZyBpbiB0aGF0IGl0IHdpbGwgc3RvcCBleGVjdXRpb24gb24gdGhlIGZpcnN0XG4gIGFyZ3VtZW50IHRoYXQgdHJpZ2dlcnMgYSBsb2dpY2FsIGZhbHNlIHJlc3VsdCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBwcmVkaWNhdGVzLiIsIDphcmdsaXN0cyBbW3BdIFtwMSBwMl0gW3AxIHAyIHAzXSBbcDEgcDIgcDMgJiBwc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2ZXJ5LXByZWRcclxuIFwiVGFrZXMgYSBzZXQgb2YgcHJlZGljYXRlcyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGYgdGhhdCByZXR1cm5zIHRydWUgaWYgYWxsIG9mIGl0c1xcbiAgY29tcG9zaW5nIHByZWRpY2F0ZXMgcmV0dXJuIGEgbG9naWNhbCB0cnVlIHZhbHVlIGFnYWluc3QgYWxsIG9mIGl0cyBhcmd1bWVudHMsIGVsc2UgaXQgcmV0dXJuc1xcbiAgZmFsc2UuIE5vdGUgdGhhdCBmIGlzIHNob3J0LWNpcmN1aXRpbmcgaW4gdGhhdCBpdCB3aWxsIHN0b3AgZXhlY3V0aW9uIG9uIHRoZSBmaXJzdFxcbiAgYXJndW1lbnQgdGhhdCB0cmlnZ2VycyBhIGxvZ2ljYWwgZmFsc2UgcmVzdWx0IGFnYWluc3QgdGhlIG9yaWdpbmFsIHByZWRpY2F0ZXMuXCJcclxuIChbcF1cclxuICAoZm5cclxuICAgZXAxXHJcbiAgIChbXSB0cnVlKVxyXG4gICAoW3hdIChib29sZWFuIChwIHgpKSlcclxuICAgKFt4IHldIChib29sZWFuIChhbmQgKHAgeCkgKHAgeSkpKSlcclxuICAgKFt4IHkgel0gKGJvb2xlYW4gKGFuZCAocCB4KSAocCB5KSAocCB6KSkpKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGJvb2xlYW4gKGFuZCAoZXAxIHggeSB6KSAoZXZlcnk/IHAgYXJncykpKSkpKVxyXG4gKFtwMSBwMl1cclxuICAoZm5cclxuICAgZXAyXHJcbiAgIChbXSB0cnVlKVxyXG4gICAoW3hdIChib29sZWFuIChhbmQgKHAxIHgpIChwMiB4KSkpKVxyXG4gICAoW3ggeV0gKGJvb2xlYW4gKGFuZCAocDEgeCkgKHAxIHkpIChwMiB4KSAocDIgeSkpKSlcclxuICAgKFt4IHkgel0gKGJvb2xlYW4gKGFuZCAocDEgeCkgKHAxIHkpIChwMSB6KSAocDIgeCkgKHAyIHkpIChwMiB6KSkpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgIChib29sZWFuXHJcbiAgICAgKGFuZFxyXG4gICAgICAoZXAyIHggeSB6KVxyXG4gICAgICAoZXZlcnk/XHJcbiAgICAgICAoZm4qIFtwMV9fNDg4MTEjXSAoYW5kIChwMSBwMV9fNDg4MTEjKSAocDIgcDFfXzQ4ODExIykpKVxyXG4gICAgICAgYXJncykpKSkpKVxyXG4gKFtwMSBwMiBwM11cclxuICAoZm5cclxuICAgZXAzXHJcbiAgIChbXSB0cnVlKVxyXG4gICAoW3hdIChib29sZWFuIChhbmQgKHAxIHgpIChwMiB4KSAocDMgeCkpKSlcclxuICAgKFt4IHldIChib29sZWFuIChhbmQgKHAxIHgpIChwMiB4KSAocDMgeCkgKHAxIHkpIChwMiB5KSAocDMgeSkpKSlcclxuICAgKFt4IHkgel1cclxuICAgIChib29sZWFuXHJcbiAgICAgKGFuZFxyXG4gICAgICAocDEgeClcclxuICAgICAgKHAyIHgpXHJcbiAgICAgIChwMyB4KVxyXG4gICAgICAocDEgeSlcclxuICAgICAgKHAyIHkpXHJcbiAgICAgIChwMyB5KVxyXG4gICAgICAocDEgeilcclxuICAgICAgKHAyIHopXHJcbiAgICAgIChwMyB6KSkpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgIChib29sZWFuXHJcbiAgICAgKGFuZFxyXG4gICAgICAoZXAzIHggeSB6KVxyXG4gICAgICAoZXZlcnk/XHJcbiAgICAgICAoZm4qXHJcbiAgICAgICAgW3AxX180ODgxMiNdXHJcbiAgICAgICAgKGFuZCAocDEgcDFfXzQ4ODEyIykgKHAyIHAxX180ODgxMiMpIChwMyBwMV9fNDg4MTIjKSkpXHJcbiAgICAgICBhcmdzKSkpKSkpXHJcbiAoW3AxIHAyIHAzICYgcHNdXHJcbiAgKGxldFxyXG4gICBbcHMgKGxpc3QqIHAxIHAyIHAzIHBzKV1cclxuICAgKGZuXHJcbiAgICBlcG5cclxuICAgIChbXSB0cnVlKVxyXG4gICAgKFt4XSAoZXZlcnk/IChmbiogW3AxX180ODgxMyNdIChwMV9fNDg4MTMjIHgpKSBwcykpXHJcbiAgICAoW3ggeV1cclxuICAgICAoZXZlcnk/XHJcbiAgICAgIChmbiogW3AxX180ODgxNCNdIChhbmQgKHAxX180ODgxNCMgeCkgKHAxX180ODgxNCMgeSkpKVxyXG4gICAgICBwcykpXHJcbiAgICAoW3ggeSB6XVxyXG4gICAgIChldmVyeT9cclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODgxNSNdXHJcbiAgICAgICAoYW5kIChwMV9fNDg4MTUjIHgpIChwMV9fNDg4MTUjIHkpIChwMV9fNDg4MTUjIHopKSlcclxuICAgICAgcHMpKVxyXG4gICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAgKGJvb2xlYW5cclxuICAgICAgKGFuZFxyXG4gICAgICAgKGVwbiB4IHkgeilcclxuICAgICAgIChldmVyeT8gKGZuKiBbcDFfXzQ4ODE2I10gKGV2ZXJ5PyBwMV9fNDg4MTYjIGFyZ3MpKSBwcykpKSkpKSkpXHJcbiJ9IHs6c3ltIGtleXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIG1hcCdzIGtleXMsIGluIHRoZSBzYW1lIG9yZGVyIGFzIChzZXEgbWFwKS4iLCA6YXJnbGlzdHMgKFttYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXlzXHJcbiBcIlJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgbWFwJ3Mga2V5cywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgKHNlcSBtYXApLlwiXHJcbiBbbWFwXVxyXG4gKHdoZW4tbGV0IFttc2VxIChzZXEgbWFwKV0gKEtleVNlcS4gbXNlcSBuaWwpKSlcclxuIn0gezpzeW0gbWlzc2luZy1wcm90b2NvbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwcm90byBvYmpdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXByb3RvY29sXHJcbiBbcHJvdG8gb2JqXVxyXG4gKGxldFxyXG4gIFt0eVxyXG4gICAodHlwZSBvYmopXHJcbiAgIHR5XHJcbiAgIChpZlxyXG4gICAgKGFuZCB0eSAoLi1jbGpzJGxhbmckdHlwZSB0eSkpXHJcbiAgICAoLi1jbGpzJGxhbmckY3RvclN0ciB0eSlcclxuICAgIChnb29nL3R5cGVPZiBvYmopKV1cclxuICAoanMvRXJyb3IuXHJcbiAgICguam9pblxyXG4gICAgKGFycmF5XHJcbiAgICAgXCJObyBwcm90b2NvbCBtZXRob2QgXCJcclxuICAgICBwcm90b1xyXG4gICAgIFwiIGRlZmluZWQgZm9yIHR5cGUgXCJcclxuICAgICB0eVxyXG4gICAgIFwiOiBcIlxyXG4gICAgIG9iailcclxuICAgIFwiXCIpKSkpXHJcbiJ9IHs6c3ltIGxvYWQtZmlsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmaWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9hZC1maWxlXHJcbiBbZmlsZV1cclxuICh3aGVuLW5vdCBqcy9DT01QSUxFRCAoY2xqcy5jb3JlL2xvYWQtZmlsZSogZmlsZSkpKVxyXG4ifSB7OnN5bSBkaXN0aW5jdD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbm8gdHdvIG9mIHRoZSBhcmd1bWVudHMgYXJlID0iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3RpbmN0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbm8gdHdvIG9mIHRoZSBhcmd1bWVudHMgYXJlID1cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChub3QgKD0geCB5KSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChub3QgKD0geCB5KSlcclxuICAgKGxvb3BcclxuICAgIFtzICN7eCB5fSB4cyBtb3JlXVxyXG4gICAgKGxldFxyXG4gICAgIFt4IChmaXJzdCB4cykgZXRjIChuZXh0IHhzKV1cclxuICAgICAoaWYgeHMgKGlmIChjb250YWlucz8gcyB4KSBmYWxzZSAocmVjdXIgKGNvbmogcyB4KSBldGMpKSB0cnVlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIHBvcy1pbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgcG9zaXRpdmUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvcy1pbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIHBvc2l0aXZlLlwiXHJcbiBbeF1cclxuIChjb25kXHJcbiAgKGludGVnZXI/IHgpXHJcbiAgKHBvcz8geClcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5JbnRlZ2VyIHgpXHJcbiAgKGFuZCAobm90ICguaXNOZWdhdGl2ZSB4KSkgKG5vdCAoLmlzWmVybyB4KSkpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguTG9uZyB4KVxyXG4gIChhbmQgKG5vdCAoLmlzTmVnYXRpdmUgeCkpIChub3QgKC5pc1plcm8geCkpKVxyXG4gIDplbHNlXHJcbiAgZmFsc2UpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtc2hvcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLXNob3J0IFt4XSB4KVxyXG4ifSB7OnN5bSBtZXRob2RzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJucyBhIG1hcCBvZiBkaXNwYXRjaCB2YWx1ZXMgLT4gZGlzcGF0Y2ggZm5zIiwgOmFyZ2xpc3RzIChbbXVsdGlmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1ldGhvZHNcclxuIFwiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJucyBhIG1hcCBvZiBkaXNwYXRjaCB2YWx1ZXMgLT4gZGlzcGF0Y2ggZm5zXCJcclxuIFttdWx0aWZuXVxyXG4gKC1tZXRob2RzIG11bHRpZm4pKVxyXG4ifSB7OnN5bSBvZGQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG4gaXMgb2RkLCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIG4gaXMgbm90IGFuIGludGVnZXIiLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gb2RkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbiBpcyBvZGQsIHRocm93cyBhbiBleGNlcHRpb24gaWYgbiBpcyBub3QgYW4gaW50ZWdlclwiXHJcbiBbbl1cclxuIChub3QgKGV2ZW4/IG4pKSlcclxuIn0gezpzeW0gLWdldC1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWYgZGlzcGF0Y2gtdmFsXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIGZyZXF1ZW5jaWVzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBmcm9tIGRpc3RpbmN0IGl0ZW1zIGluIGNvbGwgdG8gdGhlIG51bWJlciBvZiB0aW1lc1xuICB0aGV5IGFwcGVhci4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZnJlcXVlbmNpZXNcclxuIFwiUmV0dXJucyBhIG1hcCBmcm9tIGRpc3RpbmN0IGl0ZW1zIGluIGNvbGwgdG8gdGhlIG51bWJlciBvZiB0aW1lc1xcbiAgdGhleSBhcHBlYXIuXCJcclxuIFtjb2xsXVxyXG4gKHBlcnNpc3RlbnQhXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4gW2NvdW50cyB4XSAoYXNzb2MhIGNvdW50cyB4IChpbmMgKGdldCBjb3VudHMgeCAwKSkpKVxyXG4gICAodHJhbnNpZW50IHt9KVxyXG4gICBjb2xsKSkpXHJcbiJ9IHs6c3ltIHJlZHVjZWFibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElSZWR1Y2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlYWJsZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElSZWR1Y2VcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJUmVkdWNlIHgpKVxyXG4ifSB7OnN5bSBzdHJpbmctaGFzaC1jYWNoZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgc3RyaW5nLWhhc2gtY2FjaGUgKGpzLW9iaikpXHJcbiJ9IHs6c3ltIHJzdWJzZXEsIDptZXRhIHs6ZG9jICJzYyBtdXN0IGJlIGEgc29ydGVkIGNvbGxlY3Rpb24sIHRlc3Qocykgb25lIG9mIDwsIDw9LCA+IG9yXG4gID49LiBSZXR1cm5zIGEgcmV2ZXJzZSBzZXEgb2YgdGhvc2UgZW50cmllcyB3aXRoIGtleXMgZWsgZm9yXG4gIHdoaWNoICh0ZXN0ICguLiBzYyBjb21wYXJhdG9yIChjb21wYXJlIGVrIGtleSkpIDApIGlzIHRydWUiLCA6YXJnbGlzdHMgW1tzYyB0ZXN0IGtleV0gW3NjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5IGVuZC10ZXN0IGVuZC1rZXldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByc3Vic2VxXHJcbiBcInNjIG11c3QgYmUgYSBzb3J0ZWQgY29sbGVjdGlvbiwgdGVzdChzKSBvbmUgb2YgPCwgPD0sID4gb3JcXG4gID49LiBSZXR1cm5zIGEgcmV2ZXJzZSBzZXEgb2YgdGhvc2UgZW50cmllcyB3aXRoIGtleXMgZWsgZm9yXFxuICB3aGljaCAodGVzdCAoLi4gc2MgY29tcGFyYXRvciAoY29tcGFyZSBlayBrZXkpKSAwKSBpcyB0cnVlXCJcclxuIChbc2MgdGVzdCBrZXldXHJcbiAgKGxldFxyXG4gICBbaW5jbHVkZSAobWstYm91bmQtZm4gc2MgdGVzdCBrZXkpXVxyXG4gICAoaWZcclxuICAgICgjezwgPD19IHRlc3QpXHJcbiAgICAod2hlbi1sZXRcclxuICAgICBbW2UgOmFzIHNdICgtc29ydGVkLXNlcS1mcm9tIHNjIGtleSBmYWxzZSldXHJcbiAgICAgKGlmIChpbmNsdWRlIGUpIHMgKG5leHQgcykpKVxyXG4gICAgKHRha2Utd2hpbGUgaW5jbHVkZSAoLXNvcnRlZC1zZXEgc2MgZmFsc2UpKSkpKVxyXG4gKFtzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSBlbmQtdGVzdCBlbmQta2V5XVxyXG4gICh3aGVuLWxldFxyXG4gICBbW2UgOmFzIHNdICgtc29ydGVkLXNlcS1mcm9tIHNjIGVuZC1rZXkgZmFsc2UpXVxyXG4gICAodGFrZS13aGlsZVxyXG4gICAgKG1rLWJvdW5kLWZuIHNjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5KVxyXG4gICAgKGlmICgobWstYm91bmQtZm4gc2MgZW5kLXRlc3QgZW5kLWtleSkgZSkgcyAobmV4dCBzKSkpKSkpXHJcbiJ9IHs6c3ltIGluYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBudW1iZXIgb25lIGdyZWF0ZXIgdGhhbiBudW0uIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluY1xyXG4gXCJSZXR1cm5zIGEgbnVtYmVyIG9uZSBncmVhdGVyIHRoYW4gbnVtLlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvKyB4IDEpKVxyXG4ifSB7OnN5bSB0eXBlLT5zdHIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdHldKX0sIDpzb3VyY2UgIihkZWZuIHR5cGUtPnN0ciBbdHldIChpZi1sZXQgW3MgKC4tY2xqcyRsYW5nJGN0b3JTdHIgdHkpXSBzIChzdHIgdHkpKSlcclxuIn0gezpzeW0gZ2V0LW1ldGhvZCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgbXVsdGltZXRob2QgYW5kIGEgZGlzcGF0Y2ggdmFsdWUsIHJldHVybnMgdGhlIGRpc3BhdGNoIGZuXG4gIHRoYXQgd291bGQgYXBwbHkgdG8gdGhhdCB2YWx1ZSwgb3IgbmlsIGlmIG5vbmUgYXBwbHkgYW5kIG5vIGRlZmF1bHQiLCA6YXJnbGlzdHMgKFttdWx0aWZuIGRpc3BhdGNoLXZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1tZXRob2RcclxuIFwiR2l2ZW4gYSBtdWx0aW1ldGhvZCBhbmQgYSBkaXNwYXRjaCB2YWx1ZSwgcmV0dXJucyB0aGUgZGlzcGF0Y2ggZm5cXG4gIHRoYXQgd291bGQgYXBwbHkgdG8gdGhhdCB2YWx1ZSwgb3IgbmlsIGlmIG5vbmUgYXBwbHkgYW5kIG5vIGRlZmF1bHRcIlxyXG4gW211bHRpZm4gZGlzcGF0Y2gtdmFsXVxyXG4gKC1nZXQtbWV0aG9kIG11bHRpZm4gZGlzcGF0Y2gtdmFsKSlcclxuIn0gezpzeW0gdXVpZD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdXVpZD8gW3hdIChpbXBsZW1lbnRzPyBJVVVJRCB4KSlcclxuIn0gezpzeW0gZXM2LWVudHJpZXMtaXRlcmF0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gZXM2LWVudHJpZXMtaXRlcmF0b3IgW2NvbGxdIChFUzZFbnRyaWVzSXRlcmF0b3IuIChzZXEgY29sbCkpKVxyXG4ifSB7OnN5bSBiaXQtY2xlYXIsIDptZXRhIHs6ZG9jICJDbGVhciBiaXQgYXQgaW5kZXggbiIsIDphcmdsaXN0cyAoW3ggbl0pfSwgOnNvdXJjZSAiKGRlZm4gYml0LWNsZWFyIFwiQ2xlYXIgYml0IGF0IGluZGV4IG5cIiBbeCBuXSAoY2xqcy5jb3JlL2JpdC1jbGVhciB4IG4pKVxyXG4ifSB7OnN5bSBmaWx0ZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3ByZWRdIFtwcmVkIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaWx0ZXJcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxcbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3ByZWRdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGZuXHJcbiAgICAoW10gKHJmKSlcclxuICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgIChbcmVzdWx0IGlucHV0XSAoaWYgKHByZWQgaW5wdXQpIChyZiByZXN1bHQgaW5wdXQpIHJlc3VsdCkpKSkpXHJcbiAoW3ByZWQgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGlmXHJcbiAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgIChsZXRcclxuICAgICAgW2MgKGNodW5rLWZpcnN0IHMpIHNpemUgKGNvdW50IGMpIGIgKGNodW5rLWJ1ZmZlciBzaXplKV1cclxuICAgICAgKGRvdGltZXNcclxuICAgICAgIFtpIHNpemVdXHJcbiAgICAgICAod2hlbiAocHJlZCAoLW50aCBjIGkpKSAoY2h1bmstYXBwZW5kIGIgKC1udGggYyBpKSkpKVxyXG4gICAgICAoY2h1bmstY29ucyAoY2h1bmsgYikgKGZpbHRlciBwcmVkIChjaHVuay1yZXN0IHMpKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbZiAoZmlyc3QgcykgciAocmVzdCBzKV1cclxuICAgICAgKGlmIChwcmVkIGYpIChjb25zIGYgKGZpbHRlciBwcmVkIHIpKSAoZmlsdGVyIHByZWQgcikpKSkpKSkpXHJcbiJ9IHs6c3ltIC1hc3NvYy1uISwgOm1ldGEgezpkb2MgIlJldHVybnMgdGNvbGwgd2l0aCB2YWx1ZSB2YWwgYWRkZWQgYXQgcG9zaXRpb24gbi4iLCA6YXJnbGlzdHMgKFt0Y29sbCBuIHZhbF0pfSwgOnByb3RvY29sIElUcmFuc2llbnRWZWN0b3J9IHs6c3ltIElXaXRoTWV0YSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgbWV0YWRhdGEgdG8gYW4gb2JqZWN0LiJ9LCA6bWV0aG9kcyAoLXdpdGgtbWV0YSl9IHs6c3ltIGxpc3QsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgaXRlbXMuIiwgOmFyZ2xpc3RzIChbJiB4c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpc3RcclxuIFwiQ3JlYXRlcyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLlwiXHJcbiBbJiB4c11cclxuIChsZXRcclxuICBbYXJyXHJcbiAgIChpZlxyXG4gICAgKGFuZCAoaW5zdGFuY2U/IEluZGV4ZWRTZXEgeHMpICh6ZXJvPyAoLi1pIHhzKSkpXHJcbiAgICAoLi1hcnIgeHMpXHJcbiAgICAobGV0XHJcbiAgICAgW2FyciAoYXJyYXkpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFt4cyB4c11cclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKG5pbD8geHMpXHJcbiAgICAgICAoZG8gKC5wdXNoIGFyciAoLWZpcnN0IHhzKSkgKHJlY3VyICgtbmV4dCB4cykpKVxyXG4gICAgICAgYXJyKSkpKV1cclxuICAobG9vcFxyXG4gICBbaSAoYWxlbmd0aCBhcnIpIHIgKCldXHJcbiAgIChpZiAoPiBpIDApIChyZWN1ciAoZGVjIGkpICgtY29uaiByIChhZ2V0IGFyciAoZGVjIGkpKSkpIHIpKSkpXHJcbiJ9IHs6c3ltICssIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuICtcclxuIFwiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuXCJcclxuIChbXSAwKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvKyB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlICsgKGNsanMuY29yZS8rIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBzcGxpdC13aXRoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHZlY3RvciBvZiBbKHRha2Utd2hpbGUgcHJlZCBjb2xsKSAoZHJvcC13aGlsZSBwcmVkIGNvbGwpXSIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0LXdpdGhcclxuIFwiUmV0dXJucyBhIHZlY3RvciBvZiBbKHRha2Utd2hpbGUgcHJlZCBjb2xsKSAoZHJvcC13aGlsZSBwcmVkIGNvbGwpXVwiXHJcbiBbcHJlZCBjb2xsXVxyXG4gWyh0YWtlLXdoaWxlIHByZWQgY29sbCkgKGRyb3Atd2hpbGUgcHJlZCBjb2xsKV0pXHJcbiJ9IHs6c3ltIGFzZXQsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXgvaW5kaWNlcy4gV29ya3Mgb24gSmF2YVNjcmlwdCBhcnJheXMuXG4gIFJldHVybnMgdmFsLiIsIDphcmdsaXN0cyBbW2FycmF5IGlkeCB2YWxdIFthcnJheSBpZHggaWR4MiAmIGlkeHZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc2V0XHJcbiBcIlNldHMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC9pbmRpY2VzLiBXb3JrcyBvbiBKYXZhU2NyaXB0IGFycmF5cy5cXG4gIFJldHVybnMgdmFsLlwiXHJcbiAoW2FycmF5IGlkeCB2YWxdIChjbGpzLmNvcmUvYXNldCBhcnJheSBpZHggdmFsKSlcclxuIChbYXJyYXkgaWR4IGlkeDIgJiBpZHh2XSAoYXBwbHkgYXNldCAoYWdldCBhcnJheSBpZHgpIGlkeDIgaWR4dikpKVxyXG4ifSB7OnN5bSBpbnQtcm90YXRlLWxlZnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50LXJvdGF0ZS1sZWZ0XHJcbiBbeCBuXVxyXG4gKGJpdC1vciAoYml0LXNoaWZ0LWxlZnQgeCBuKSAodW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0IHggKC0gbikpKSlcclxuIn0gezpzeW0ga2V5d29yZCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBLZXl3b3JkIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbmFtZS4gIERvIG5vdCB1c2UgOlxuICBpbiB0aGUga2V5d29yZCBzdHJpbmdzLCBpdCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuIiwgOmFyZ2xpc3RzIFtbbmFtZV0gW25zIG5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXl3b3JkXHJcbiBcIlJldHVybnMgYSBLZXl3b3JkIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbmFtZS4gIERvIG5vdCB1c2UgOlxcbiAgaW4gdGhlIGtleXdvcmQgc3RyaW5ncywgaXQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlwiXHJcbiAoW25hbWVdXHJcbiAgKGNvbmRcclxuICAgKGtleXdvcmQ/IG5hbWUpXHJcbiAgIG5hbWVcclxuICAgKHN5bWJvbD8gbmFtZSlcclxuICAgKEtleXdvcmQuXHJcbiAgICAoY2xqcy5jb3JlL25hbWVzcGFjZSBuYW1lKVxyXG4gICAgKGNsanMuY29yZS9uYW1lIG5hbWUpXHJcbiAgICAoLi1zdHIgbmFtZSlcclxuICAgIG5pbClcclxuICAgKD0gXCIvXCIgbmFtZSlcclxuICAgKEtleXdvcmQuIG5pbCBuYW1lIG5hbWUgbmlsKVxyXG4gICAoc3RyaW5nPyBuYW1lKVxyXG4gICAobGV0XHJcbiAgICBbcGFydHMgKC5zcGxpdCBuYW1lIFwiL1wiKV1cclxuICAgIChpZlxyXG4gICAgICg9PSAoYWxlbmd0aCBwYXJ0cykgMilcclxuICAgICAoS2V5d29yZC4gKGFnZXQgcGFydHMgMCkgKGFnZXQgcGFydHMgMSkgbmFtZSBuaWwpXHJcbiAgICAgKEtleXdvcmQuIG5pbCAoYWdldCBwYXJ0cyAwKSBuYW1lIG5pbCkpKSkpXHJcbiAoW25zIG5hbWVdXHJcbiAgKGxldFxyXG4gICBbbnNcclxuICAgIChjb25kXHJcbiAgICAgKGtleXdvcmQ/IG5zKVxyXG4gICAgIChjbGpzLmNvcmUvbmFtZSBucylcclxuICAgICAoc3ltYm9sPyBucylcclxuICAgICAoY2xqcy5jb3JlL25hbWUgbnMpXHJcbiAgICAgOmVsc2VcclxuICAgICBucylcclxuICAgIG5hbWVcclxuICAgIChjb25kXHJcbiAgICAgKGtleXdvcmQ/IG5hbWUpXHJcbiAgICAgKGNsanMuY29yZS9uYW1lIG5hbWUpXHJcbiAgICAgKHN5bWJvbD8gbmFtZSlcclxuICAgICAoY2xqcy5jb3JlL25hbWUgbmFtZSlcclxuICAgICA6ZWxzZVxyXG4gICAgIG5hbWUpXVxyXG4gICAoS2V5d29yZC4gbnMgbmFtZSAoc3RyICh3aGVuIG5zIChzdHIgbnMgXCIvXCIpKSBuYW1lKSBuaWwpKSkpXHJcbiJ9IHs6c3ltICpucyosIDptZXRhIHs6ZG9jICJWYXIgYm91bmQgdG8gdGhlIGN1cnJlbnQgbmFtZXNwYWNlLiBPbmx5IHVzZWQgZm9yIGJvb3RzdHJhcHBpbmcuIn0sIDpzb3VyY2UgIihkZWYgKm5zKiBuaWwpXHJcbiJ9IHs6c3ltICphc3NlcnQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqYXNzZXJ0KiB0cnVlKVxyXG4ifSB7OnN5bSBJQ29sbGVjdGlvbiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdG8gYSBjb2xsZWN0aW9uLiJ9LCA6bWV0aG9kcyAoLWNvbmopfSB7OnN5bSBjaGFycywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBjaGFycyBbeF0geClcclxuIn0gezpzeW0gc3RyLCA6bWV0YSB7OmRvYyAiV2l0aCBubyBhcmdzLCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuIFdpdGggb25lIGFyZyB4LCByZXR1cm5zXG4gIHgudG9TdHJpbmcoKS4gIChzdHIgbmlsKSByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuIFdpdGggbW9yZSB0aGFuXG4gIG9uZSBhcmcsIHJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0ciB2YWx1ZXMgb2YgdGhlIGFyZ3MuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggJiB5c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0clxyXG4gXCJXaXRoIG5vIGFyZ3MsIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4gV2l0aCBvbmUgYXJnIHgsIHJldHVybnNcXG4gIHgudG9TdHJpbmcoKS4gIChzdHIgbmlsKSByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuIFdpdGggbW9yZSB0aGFuXFxuICBvbmUgYXJnLCByZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHIgdmFsdWVzIG9mIHRoZSBhcmdzLlwiXHJcbiAoW10gXCJcIilcclxuIChbeF0gKGlmIChuaWw/IHgpIFwiXCIgKC5qb2luICNqcyBbeF0gXCJcIikpKVxyXG4gKFt4ICYgeXNdXHJcbiAgKGxvb3BcclxuICAgW3NiIChTdHJpbmdCdWZmZXIuIChzdHIgeCkpIG1vcmUgeXNdXHJcbiAgIChpZlxyXG4gICAgbW9yZVxyXG4gICAgKHJlY3VyICguIHNiIChhcHBlbmQgKHN0ciAoZmlyc3QgbW9yZSkpKSkgKG5leHQgbW9yZSkpXHJcbiAgICAoLnRvU3RyaW5nIHNiKSkpKSlcclxuIn0gezpzeW0gbmV4dCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb2YgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdC4gQ2FsbHMgc2VxIG9uIGl0c1xuICBhcmd1bWVudC4gIElmIHRoZXJlIGFyZSBubyBtb3JlIGl0ZW1zLCByZXR1cm5zIG5pbCIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZXh0XHJcbiBcIlJldHVybnMgYSBzZXEgb2YgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdC4gQ2FsbHMgc2VxIG9uIGl0c1xcbiAgYXJndW1lbnQuICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcywgcmV0dXJucyBuaWxcIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChpZiAoaW1wbGVtZW50cz8gSU5leHQgY29sbCkgKC1uZXh0IGNvbGwpIChzZXEgKHJlc3QgY29sbCkpKSkpXHJcbiJ9IHs6c3ltIEFTZXEsIDptZXRhIHs6ZG9jICJNYXJrZXIgcHJvdG9jb2wgaW5kaWNhdGluZyBhbiBhcnJheSBzZXF1ZW5jZS4ifSwgOm1ldGhvZHMgKCl9IHs6c3ltIHByLXNlcS13cml0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb2JqcyB3cml0ZXIgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByLXNlcS13cml0ZXJcclxuIFtvYmpzIHdyaXRlciBvcHRzXVxyXG4gKHByLXdyaXRlciAoZmlyc3Qgb2Jqcykgd3JpdGVyIG9wdHMpXHJcbiAoZG9zZXFcclxuICBbb2JqIChuZXh0IG9ianMpXVxyXG4gICgtd3JpdGUgd3JpdGVyIFwiIFwiKVxyXG4gIChwci13cml0ZXIgb2JqIHdyaXRlciBvcHRzKSkpXHJcbiJ9IHs6c3ltIElGbiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdGhlIGFiaWxpdHkgdG8gaW52b2tlIGFuIG9iamVjdCBhcyBhIGZ1bmN0aW9uLlxuICBGb3IgZXhhbXBsZSwgYSB2ZWN0b3IgY2FuIGFsc28gYmUgdXNlZCB0byBsb29rIHVwIGEgdmFsdWU6XG4gIChbMSAyIDMgNF0gMSkgPT4gMiJ9LCA6bWV0aG9kcyAoLWludm9rZSl9IHs6c3ltIHJlZ2V4cD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgUmVnRXhwIGluc3RhbmNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdleHA/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBSZWdFeHAgaW5zdGFuY2UuXCJcclxuIFt4XVxyXG4gKGluc3RhbmNlPyBqcy9SZWdFeHAgeCkpXHJcbiJ9IHs6c3ltIGhhc2gtbWFwLCA6bWV0YSB7OmRvYyAia2V5dmFsID0+IGtleSB2YWxcbiAgUmV0dXJucyBhIG5ldyBoYXNoIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLiIsIDphcmdsaXN0cyAoWyYga2V5dmFsc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtbWFwXHJcbiBcImtleXZhbCA9PiBrZXkgdmFsXFxuICBSZXR1cm5zIGEgbmV3IGhhc2ggbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuXCJcclxuIFsmIGtleXZhbHNdXHJcbiAobG9vcFxyXG4gIFtpbiAoc2VxIGtleXZhbHMpIG91dCAodHJhbnNpZW50ICguLUVNUFRZIFBlcnNpc3RlbnRIYXNoTWFwKSldXHJcbiAgKGlmXHJcbiAgIGluXHJcbiAgIChyZWN1ciAobm5leHQgaW4pIChhc3NvYyEgb3V0IChmaXJzdCBpbikgKHNlY29uZCBpbikpKVxyXG4gICAocGVyc2lzdGVudCEgb3V0KSkpKVxyXG4ifSB7OnN5bSAqZXhlYy10YXAtZm4qLCA6bWV0YSB7OmRvYyAiQXJyYW5nZXMgdG8gaGF2ZSB0YXAgZnVuY3Rpb25zIGV4ZWN1dGVkIHZpYSB0aGUgc3VwcGxpZWQgZiwgYVxuICBmdW5jdGlvbiBvZiBubyBhcmd1bWVudHMuIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuICpleGVjLXRhcC1mbipcclxuIFtmXVxyXG4gKGFuZCAoZXhpc3RzPyBqcy9zZXRUaW1lb3V0KSAoanMvc2V0VGltZW91dCBmIDApIHRydWUpKVxyXG4ifSB7OnN5bSB1bmRlcml2ZSwgOm1ldGEgezpkb2MgIlJlbW92ZXMgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFyZW50IGFuZFxuICB0YWcuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3RcbiAgc3VwcGxpZWQgZGVmYXVsdHMgdG8sIGFuZCBtb2RpZmllcywgdGhlIGdsb2JhbCBoaWVyYXJjaHkuIiwgOmFyZ2xpc3RzIFtbdGFnIHBhcmVudF0gW2ggdGFnIHBhcmVudF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuZGVyaXZlXHJcbiBcIlJlbW92ZXMgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFyZW50IGFuZFxcbiAgdGFnLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90XFxuICBzdXBwbGllZCBkZWZhdWx0cyB0bywgYW5kIG1vZGlmaWVzLCB0aGUgZ2xvYmFsIGhpZXJhcmNoeS5cIlxyXG4gKFt0YWcgcGFyZW50XSAoc3dhcC1nbG9iYWwtaGllcmFyY2h5ISB1bmRlcml2ZSB0YWcgcGFyZW50KSBuaWwpXHJcbiAoW2ggdGFnIHBhcmVudF1cclxuICAobGV0XHJcbiAgIFtwYXJlbnRNYXBcclxuICAgICg6cGFyZW50cyBoKVxyXG4gICAgY2hpbGRzUGFyZW50c1xyXG4gICAgKGlmIChwYXJlbnRNYXAgdGFnKSAoZGlzaiAocGFyZW50TWFwIHRhZykgcGFyZW50KSAje30pXHJcbiAgICBuZXdQYXJlbnRzXHJcbiAgICAoaWZcclxuICAgICAobm90LWVtcHR5IGNoaWxkc1BhcmVudHMpXHJcbiAgICAgKGFzc29jIHBhcmVudE1hcCB0YWcgY2hpbGRzUGFyZW50cylcclxuICAgICAoZGlzc29jIHBhcmVudE1hcCB0YWcpKVxyXG4gICAgZGVyaXYtc2VxXHJcbiAgICAoZmxhdHRlblxyXG4gICAgIChtYXBcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODg1NSNdXHJcbiAgICAgICAoY29uc1xyXG4gICAgICAgIChmaXJzdCBwMV9fNDg4NTUjKVxyXG4gICAgICAgIChpbnRlcnBvc2UgKGZpcnN0IHAxX180ODg1NSMpIChzZWNvbmQgcDFfXzQ4ODU1IykpKSlcclxuICAgICAgKHNlcSBuZXdQYXJlbnRzKSkpXVxyXG4gICAoaWZcclxuICAgIChjb250YWlucz8gKHBhcmVudE1hcCB0YWcpIHBhcmVudClcclxuICAgIChyZWR1Y2VcclxuICAgICAoZm4qIFtwMV9fNDg4NTYjIHAyX180ODg1NyNdIChhcHBseSBkZXJpdmUgcDFfXzQ4ODU2IyBwMl9fNDg4NTcjKSlcclxuICAgICAobWFrZS1oaWVyYXJjaHkpXHJcbiAgICAgKHBhcnRpdGlvbiAyIGRlcml2LXNlcSkpXHJcbiAgICBoKSkpKVxyXG4ifSB7OnN5bSAtcmVzZXQhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgb2YgbyB0byBuZXctdmFsdWUuIiwgOmFyZ2xpc3RzIChbbyBuZXctdmFsdWVdKX0sIDpwcm90b2NvbCBJUmVzZXR9IHs6c3ltIC1yZXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aG91dCB0aGUgZmlyc3QgaXRlbS4gSXQgc2hvdWxkXG4gICAgIGFsd2F5cyByZXR1cm4gYSBzZXEsIGUuZy5cbiAgICAgKHJlc3QgW10pID0+ICgpXG4gICAgIChyZXN0IG5pbCkgPT4gKCkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVNlcX0gezpzeW0gbmlsLWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmlsLWl0ZXJcclxuIFtdXHJcbiAocmVpZnlcclxuICBPYmplY3RcclxuICAoaGFzTmV4dCBbX10gZmFsc2UpXHJcbiAgKG5leHQgW19dIChqcy9FcnJvci4gXCJObyBzdWNoIGVsZW1lbnRcIikpXHJcbiAgKHJlbW92ZSBbX10gKGpzL0Vycm9yLiBcIlVuc3VwcG9ydGVkIG9wZXJhdGlvblwiKSkpKVxyXG4ifSB7OnN5bSBmYWxzZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyB0aGUgdmFsdWUgZmFsc2UsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZmFsc2U/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSB2YWx1ZSBmYWxzZSwgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvZmFsc2U/IHgpKVxyXG4ifSB7OnN5bSAqcHJpbnQtcmVhZGFibHkqLCA6bWV0YSB7OmRvYyAiV2hlbiBzZXQgdG8gbG9naWNhbCBmYWxzZSwgc3RyaW5ncyBhbmQgY2hhcmFjdGVycyB3aWxsIGJlIHByaW50ZWQgd2l0aFxuICBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBlc2NhcGUgc2VxdWVuY2VzLlxuXG4gIERlZmF1bHRzIHRvIHRydWUifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtcmVhZGFibHkqIHRydWUpXHJcbiJ9IHs6c3ltIGludHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gaW50cyBbeF0geClcclxuIn0gezpzeW0gc29tZS1mbiwgOm1ldGEgezpkb2MgIlRha2VzIGEgc2V0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBmIHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgbG9naWNhbCB0cnVlIHZhbHVlXG4gIHJldHVybmVkIGJ5IG9uZSBvZiBpdHMgY29tcG9zaW5nIHByZWRpY2F0ZXMgYWdhaW5zdCBhbnkgb2YgaXRzIGFyZ3VtZW50cywgZWxzZSBpdCByZXR1cm5zXG4gIGxvZ2ljYWwgZmFsc2UuIE5vdGUgdGhhdCBmIGlzIHNob3J0LWNpcmN1aXRpbmcgaW4gdGhhdCBpdCB3aWxsIHN0b3AgZXhlY3V0aW9uIG9uIHRoZSBmaXJzdFxuICBhcmd1bWVudCB0aGF0IHRyaWdnZXJzIGEgbG9naWNhbCB0cnVlIHJlc3VsdCBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBwcmVkaWNhdGVzLiIsIDphcmdsaXN0cyBbW3BdIFtwMSBwMl0gW3AxIHAyIHAzXSBbcDEgcDIgcDMgJiBwc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvbWUtZm5cclxuIFwiVGFrZXMgYSBzZXQgb2YgcHJlZGljYXRlcyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGYgdGhhdCByZXR1cm5zIHRoZSBmaXJzdCBsb2dpY2FsIHRydWUgdmFsdWVcXG4gIHJldHVybmVkIGJ5IG9uZSBvZiBpdHMgY29tcG9zaW5nIHByZWRpY2F0ZXMgYWdhaW5zdCBhbnkgb2YgaXRzIGFyZ3VtZW50cywgZWxzZSBpdCByZXR1cm5zXFxuICBsb2dpY2FsIGZhbHNlLiBOb3RlIHRoYXQgZiBpcyBzaG9ydC1jaXJjdWl0aW5nIGluIHRoYXQgaXQgd2lsbCBzdG9wIGV4ZWN1dGlvbiBvbiB0aGUgZmlyc3RcXG4gIGFyZ3VtZW50IHRoYXQgdHJpZ2dlcnMgYSBsb2dpY2FsIHRydWUgcmVzdWx0IGFnYWluc3QgdGhlIG9yaWdpbmFsIHByZWRpY2F0ZXMuXCJcclxuIChbcF1cclxuICAoZm5cclxuICAgc3AxXHJcbiAgIChbXSBuaWwpXHJcbiAgIChbeF0gKHAgeCkpXHJcbiAgIChbeCB5XSAob3IgKHAgeCkgKHAgeSkpKVxyXG4gICAoW3ggeSB6XSAob3IgKHAgeCkgKHAgeSkgKHAgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKG9yIChzcDEgeCB5IHopIChzb21lIHAgYXJncykpKSkpXHJcbiAoW3AxIHAyXVxyXG4gIChmblxyXG4gICBzcDJcclxuICAgKFtdIG5pbClcclxuICAgKFt4XSAob3IgKHAxIHgpIChwMiB4KSkpXHJcbiAgIChbeCB5XSAob3IgKHAxIHgpIChwMSB5KSAocDIgeCkgKHAyIHkpKSlcclxuICAgKFt4IHkgel0gKG9yIChwMSB4KSAocDEgeSkgKHAxIHopIChwMiB4KSAocDIgeSkgKHAyIHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAob3JcclxuICAgICAoc3AyIHggeSB6KVxyXG4gICAgIChzb21lXHJcbiAgICAgIChmbiogW3AxX180ODgxNyNdIChvciAocDEgcDFfXzQ4ODE3IykgKHAyIHAxX180ODgxNyMpKSlcclxuICAgICAgYXJncykpKSkpXHJcbiAoW3AxIHAyIHAzXVxyXG4gIChmblxyXG4gICBzcDNcclxuICAgKFtdIG5pbClcclxuICAgKFt4XSAob3IgKHAxIHgpIChwMiB4KSAocDMgeCkpKVxyXG4gICAoW3ggeV0gKG9yIChwMSB4KSAocDIgeCkgKHAzIHgpIChwMSB5KSAocDIgeSkgKHAzIHkpKSlcclxuICAgKFt4IHkgel1cclxuICAgIChvclxyXG4gICAgIChwMSB4KVxyXG4gICAgIChwMiB4KVxyXG4gICAgIChwMyB4KVxyXG4gICAgIChwMSB5KVxyXG4gICAgIChwMiB5KVxyXG4gICAgIChwMyB5KVxyXG4gICAgIChwMSB6KVxyXG4gICAgIChwMiB6KVxyXG4gICAgIChwMyB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKG9yXHJcbiAgICAgKHNwMyB4IHkgeilcclxuICAgICAoc29tZVxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODE4I11cclxuICAgICAgIChvciAocDEgcDFfXzQ4ODE4IykgKHAyIHAxX180ODgxOCMpIChwMyBwMV9fNDg4MTgjKSkpXHJcbiAgICAgIGFyZ3MpKSkpKVxyXG4gKFtwMSBwMiBwMyAmIHBzXVxyXG4gIChsZXRcclxuICAgW3BzIChsaXN0KiBwMSBwMiBwMyBwcyldXHJcbiAgIChmblxyXG4gICAgc3BuXHJcbiAgICAoW10gbmlsKVxyXG4gICAgKFt4XSAoc29tZSAoZm4qIFtwMV9fNDg4MTkjXSAocDFfXzQ4ODE5IyB4KSkgcHMpKVxyXG4gICAgKFt4IHldXHJcbiAgICAgKHNvbWUgKGZuKiBbcDFfXzQ4ODIwI10gKG9yIChwMV9fNDg4MjAjIHgpIChwMV9fNDg4MjAjIHkpKSkgcHMpKVxyXG4gICAgKFt4IHkgel1cclxuICAgICAoc29tZVxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODIxI11cclxuICAgICAgIChvciAocDFfXzQ4ODIxIyB4KSAocDFfXzQ4ODIxIyB5KSAocDFfXzQ4ODIxIyB6KSkpXHJcbiAgICAgIHBzKSlcclxuICAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgIChvclxyXG4gICAgICAoc3BuIHggeSB6KVxyXG4gICAgICAoc29tZSAoZm4qIFtwMV9fNDg4MjIjXSAoc29tZSBwMV9fNDg4MjIjIGFyZ3MpKSBwcykpKSkpKSlcclxuIn0gezpzeW0gKmZsdXNoLW9uLW5ld2xpbmUqLCA6bWV0YSB7OmRvYyAiV2hlbiBzZXQgdG8gdHJ1ZSwgb3V0cHV0IHdpbGwgYmUgZmx1c2hlZCB3aGVuZXZlciBhIG5ld2xpbmUgaXMgcHJpbnRlZC5cblxuICBEZWZhdWx0cyB0byB0cnVlLiJ9LCA6c291cmNlICIoZGVmICpmbHVzaC1vbi1uZXdsaW5lKiB0cnVlKVxyXG4ifSB7OnN5bSB0by1hcnJheSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdG8tYXJyYXlcclxuIFwiUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLlwiXHJcbiBbY29sbF1cclxuIChsZXRcclxuICBbYXJ5IChhcnJheSldXHJcbiAgKGxvb3BcclxuICAgW3MgKHNlcSBjb2xsKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8gcylcclxuICAgIChkbyAoLiBhcnkgcHVzaCAoZmlyc3QgcykpIChyZWN1ciAobmV4dCBzKSkpXHJcbiAgICBhcnkpKSkpXHJcbiJ9IHs6c3ltIGxpc3Q/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaW1wbGVtZW50cyBJTGlzdCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaXN0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpbXBsZW1lbnRzIElMaXN0XCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUxpc3QgeCkpXHJcbiJ9IHs6c3ltIGFycmF5PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBhcnJheS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXk/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBhcnJheS5cIlxyXG4gW3hdXHJcbiAoaWZcclxuICAoaWRlbnRpY2FsPyAqdGFyZ2V0KiBcIm5vZGVqc1wiKVxyXG4gICguaXNBcnJheSBqcy9BcnJheSB4KVxyXG4gIChpbnN0YW5jZT8ganMvQXJyYXkgeCkpKVxyXG4ifSB7OnN5bSBzaW1wbGUtaWRlbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkIHdpdGhvdXQgYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2ltcGxlLWlkZW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmQgd2l0aG91dCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChhbmQgKGlkZW50PyB4KSAobmlsPyAobmFtZXNwYWNlIHgpKSkpXHJcbiJ9IHs6c3ltIGNsb25lLCA6bWV0YSB7OmRvYyAiQ2xvbmUgdGhlIHN1cHBsaWVkIHZhbHVlIHdoaWNoIG11c3QgaW1wbGVtZW50IElDbG9uZWFibGUuIiwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbG9uZVxyXG4gXCJDbG9uZSB0aGUgc3VwcGxpZWQgdmFsdWUgd2hpY2ggbXVzdCBpbXBsZW1lbnQgSUNsb25lYWJsZS5cIlxyXG4gW3ZhbHVlXVxyXG4gKC1jbG9uZSB2YWx1ZSkpXHJcbiJ9IHs6c3ltIGRlbXVuZ2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlbXVuZ2VcclxuIFtuYW1lXVxyXG4gKChpZiAoc3ltYm9sPyBuYW1lKSBzeW1ib2wgc3RyKVxyXG4gIChsZXRcclxuICAgW25hbWUnIChzdHIgbmFtZSldXHJcbiAgIChpZiAoaWRlbnRpY2FsPyBuYW1lJyBcIl9ET1RfX0RPVF9cIikgXCIuLlwiIChkZW11bmdlLXN0ciBuYW1lJykpKSkpXHJcbiJ9IHs6c3ltIGJpdC1ub3QsIDptZXRhIHs6ZG9jICJCaXR3aXNlIGNvbXBsZW1lbnQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBiaXQtbm90IFwiQml0d2lzZSBjb21wbGVtZW50XCIgW3hdIChjbGpzLmNvcmUvYml0LW5vdCB4KSlcclxuIn0gezpzeW0gYnl0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBieXRlIFt4XSB4KVxyXG4ifSB7OnN5bSBtYXgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBncmVhdGVzdCBvZiB0aGUgbnVtcy4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1heFxyXG4gXCJSZXR1cm5zIHRoZSBncmVhdGVzdCBvZiB0aGUgbnVtcy5cIlxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvbWF4IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgbWF4IChjbGpzLmNvcmUvbWF4IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBJQ29tcGFyYWJsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciB2YWx1ZXMgdGhhdCBjYW4gYmUgY29tcGFyZWQuIn0sIDptZXRob2RzICgtY29tcGFyZSl9IHs6c3ltID09LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYWxsIGhhdmUgdGhlIGVxdWl2YWxlbnRcbiAgdmFsdWUsIG90aGVyd2lzZSBmYWxzZS4gQmVoYXZpb3Igb24gbm9uIG51bXMgaXNcbiAgdW5kZWZpbmVkLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPT1cclxuIFwiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYWxsIGhhdmUgdGhlIGVxdWl2YWxlbnRcXG4gIHZhbHVlLCBvdGhlcndpc2UgZmFsc2UuIEJlaGF2aW9yIG9uIG5vbiBudW1zIGlzXFxuICB1bmRlZmluZWQuXCJcclxuIChbeF0gdHJ1ZSlcclxuIChbeCB5XSAoLWVxdWl2IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgICg9PSB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgICg9PSB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIHBhcmVudHMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgcGFyZW50cyBvZiB0YWcsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGVcbiAgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGEgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGhcbiAgbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWRcbiAgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCBoaWVyYXJjaHkiLCA6YXJnbGlzdHMgW1t0YWddIFtoIHRhZ11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcmVudHNcclxuIFwiUmV0dXJucyB0aGUgaW1tZWRpYXRlIHBhcmVudHMgb2YgdGFnLCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlXFxuICBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYSByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaFxcbiAgbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWRcXG4gIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgaGllcmFyY2h5XCJcclxuIChbdGFnXSAocGFyZW50cyBAKGdldC1nbG9iYWwtaGllcmFyY2h5KSB0YWcpKVxyXG4gKFtoIHRhZ10gKG5vdC1lbXB0eSAoZ2V0ICg6cGFyZW50cyBoKSB0YWcpKSkpXHJcbiJ9IHs6c3ltIGNvdW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLiAoY291bnQgbmlsKSByZXR1cm5zXG4gIDAuICBBbHNvIHdvcmtzIG9uIHN0cmluZ3MsIGFycmF5cywgYW5kIE1hcHMiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gY291bnRcclxuIFwiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLiAoY291bnQgbmlsKSByZXR1cm5zXFxuICAwLiAgQWxzbyB3b3JrcyBvbiBzdHJpbmdzLCBhcnJheXMsIGFuZCBNYXBzXCJcclxuIFtjb2xsXVxyXG4gKGlmLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGNvbmRcclxuICAgKGltcGxlbWVudHM/IElDb3VudGVkIGNvbGwpXHJcbiAgICgtY291bnQgY29sbClcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAoYWxlbmd0aCBjb2xsKVxyXG4gICAoc3RyaW5nPyBjb2xsKVxyXG4gICAoLi1sZW5ndGggY29sbClcclxuICAgKGltcGxlbWVudHM/IElTZXFhYmxlIGNvbGwpXHJcbiAgIChhY2N1bXVsYXRpbmctc2VxLWNvdW50IGNvbGwpXHJcbiAgIDplbHNlXHJcbiAgICgtY291bnQgY29sbCkpXHJcbiAgMCkpXHJcbiJ9IHs6c3ltIC1kaXNqb2luISwgOm1ldGEgezpkb2MgIlJldHVybnMgdGNvbGwgd2l0aG91dCB2LiIsIDphcmdsaXN0cyAoW3Rjb2xsIHZdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50U2V0fSB7OnN5bSAqbG9hZGVkLWxpYnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZm9uY2UgKmxvYWRlZC1saWJzKiBuaWwpXHJcbiJ9IHs6c3ltIHNvcnRlZC1tYXAtYnksIDptZXRhIHs6ZG9jICJrZXl2YWwgPT4ga2V5IHZhbFxuICBSZXR1cm5zIGEgbmV3IHNvcnRlZCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncywgdXNpbmcgdGhlIHN1cHBsaWVkIGNvbXBhcmF0b3IuIiwgOmFyZ2xpc3RzIFtbY29tcGFyYXRvciAmIGtleXZhbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0ZWQtbWFwLWJ5XHJcbiBcImtleXZhbCA9PiBrZXkgdmFsXFxuICBSZXR1cm5zIGEgbmV3IHNvcnRlZCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncywgdXNpbmcgdGhlIHN1cHBsaWVkIGNvbXBhcmF0b3IuXCJcclxuIChbY29tcGFyYXRvciAmIGtleXZhbHNdXHJcbiAgKGxvb3BcclxuICAgW2luXHJcbiAgICAoc2VxIGtleXZhbHMpXHJcbiAgICBvdXRcclxuICAgIChQZXJzaXN0ZW50VHJlZU1hcC4gKGZuLT5jb21wYXJhdG9yIGNvbXBhcmF0b3IpIG5pbCAwIG5pbCAwKV1cclxuICAgKGlmIGluIChyZWN1ciAobm5leHQgaW4pIChhc3NvYyBvdXQgKGZpcnN0IGluKSAoc2Vjb25kIGluKSkpIG91dCkpKSlcclxuIn0gezpzeW0gYXBwbHksIDptZXRhIHs6ZG9jICJBcHBsaWVzIGZuIGYgdG8gdGhlIGFyZ3VtZW50IGxpc3QgZm9ybWVkIGJ5IHByZXBlbmRpbmcgaW50ZXJ2ZW5pbmcgYXJndW1lbnRzIHRvIGFyZ3MuIiwgOmFyZ2xpc3RzIFtbZiBhcmdzXSBbZiB4IGFyZ3NdIFtmIHggeSBhcmdzXSBbZiB4IHkgeiBhcmdzXSBbZiBhIGIgYyBkICYgYXJnc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFwcGx5XHJcbiBcIkFwcGxpZXMgZm4gZiB0byB0aGUgYXJndW1lbnQgbGlzdCBmb3JtZWQgYnkgcHJlcGVuZGluZyBpbnRlcnZlbmluZyBhcmd1bWVudHMgdG8gYXJncy5cIlxyXG4gKFtmIGFyZ3NdXHJcbiAgKGlmXHJcbiAgICguLWNsanMkbGFuZyRhcHBseVRvIGYpXHJcbiAgIChsZXRcclxuICAgIFtmaXhlZC1hcml0eVxyXG4gICAgICguLWNsanMkbGFuZyRtYXhGaXhlZEFyaXR5IGYpXHJcbiAgICAgYmNcclxuICAgICAoYm91bmRlZC1jb3VudCAoaW5jIGZpeGVkLWFyaXR5KSBhcmdzKV1cclxuICAgIChpZlxyXG4gICAgICg8PSBiYyBmaXhlZC1hcml0eSlcclxuICAgICAoYXBwbHktdG8gZiBiYyBhcmdzKVxyXG4gICAgICguY2xqcyRsYW5nJGFwcGx5VG8gZiBhcmdzKSkpXHJcbiAgIChhcHBseS10by1zaW1wbGUgZiAoc2VxIGFyZ3MpKSkpXHJcbiAoW2YgeCBhcmdzXVxyXG4gIChpZlxyXG4gICAoLi1jbGpzJGxhbmckYXBwbHlUbyBmKVxyXG4gICAobGV0XHJcbiAgICBbYXJnbGlzdFxyXG4gICAgIChsaXN0KiB4IGFyZ3MpXHJcbiAgICAgZml4ZWQtYXJpdHlcclxuICAgICAoLi1jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSBmKVxyXG4gICAgIGJjXHJcbiAgICAgKGluYyAoYm91bmRlZC1jb3VudCBmaXhlZC1hcml0eSBhcmdzKSldXHJcbiAgICAoaWZcclxuICAgICAoPD0gYmMgZml4ZWQtYXJpdHkpXHJcbiAgICAgKGFwcGx5LXRvIGYgYmMgYXJnbGlzdClcclxuICAgICAoLmNsanMkbGFuZyRhcHBseVRvIGYgYXJnbGlzdCkpKVxyXG4gICAoYXBwbHktdG8tc2ltcGxlIGYgeCAoc2VxIGFyZ3MpKSkpXHJcbiAoW2YgeCB5IGFyZ3NdXHJcbiAgKGlmXHJcbiAgICguLWNsanMkbGFuZyRhcHBseVRvIGYpXHJcbiAgIChsZXRcclxuICAgIFthcmdsaXN0XHJcbiAgICAgKGxpc3QqIHggeSBhcmdzKVxyXG4gICAgIGZpeGVkLWFyaXR5XHJcbiAgICAgKC4tY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgZilcclxuICAgICBiY1xyXG4gICAgICgrIDIgKGJvdW5kZWQtY291bnQgKGRlYyBmaXhlZC1hcml0eSkgYXJncykpXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IGJjIGZpeGVkLWFyaXR5KVxyXG4gICAgIChhcHBseS10byBmIGJjIGFyZ2xpc3QpXHJcbiAgICAgKC5jbGpzJGxhbmckYXBwbHlUbyBmIGFyZ2xpc3QpKSlcclxuICAgKGFwcGx5LXRvLXNpbXBsZSBmIHggeSAoc2VxIGFyZ3MpKSkpXHJcbiAoW2YgeCB5IHogYXJnc11cclxuICAoaWZcclxuICAgKC4tY2xqcyRsYW5nJGFwcGx5VG8gZilcclxuICAgKGxldFxyXG4gICAgW2FyZ2xpc3RcclxuICAgICAobGlzdCogeCB5IHogYXJncylcclxuICAgICBmaXhlZC1hcml0eVxyXG4gICAgICguLWNsanMkbGFuZyRtYXhGaXhlZEFyaXR5IGYpXHJcbiAgICAgYmNcclxuICAgICAoKyAzIChib3VuZGVkLWNvdW50ICgtIGZpeGVkLWFyaXR5IDIpIGFyZ3MpKV1cclxuICAgIChpZlxyXG4gICAgICg8PSBiYyBmaXhlZC1hcml0eSlcclxuICAgICAoYXBwbHktdG8gZiBiYyBhcmdsaXN0KVxyXG4gICAgICguY2xqcyRsYW5nJGFwcGx5VG8gZiBhcmdsaXN0KSkpXHJcbiAgIChhcHBseS10by1zaW1wbGUgZiB4IHkgeiAoc2VxIGFyZ3MpKSkpXHJcbiAoW2YgYSBiIGMgZCAmIGFyZ3NdXHJcbiAgKGlmXHJcbiAgICguLWNsanMkbGFuZyRhcHBseVRvIGYpXHJcbiAgIChsZXRcclxuICAgIFtzcHJlYWQtYXJnc1xyXG4gICAgIChzcHJlYWQgYXJncylcclxuICAgICBhcmdsaXN0XHJcbiAgICAgKGNvbnMgYSAoY29ucyBiIChjb25zIGMgKGNvbnMgZCBzcHJlYWQtYXJncykpKSlcclxuICAgICBmaXhlZC1hcml0eVxyXG4gICAgICguLWNsanMkbGFuZyRtYXhGaXhlZEFyaXR5IGYpXHJcbiAgICAgYmNcclxuICAgICAoKyA0IChib3VuZGVkLWNvdW50ICgtIGZpeGVkLWFyaXR5IDMpIHNwcmVhZC1hcmdzKSldXHJcbiAgICAoaWZcclxuICAgICAoPD0gYmMgZml4ZWQtYXJpdHkpXHJcbiAgICAgKGFwcGx5LXRvIGYgYmMgYXJnbGlzdClcclxuICAgICAoLmNsanMkbGFuZyRhcHBseVRvIGYgYXJnbGlzdCkpKVxyXG4gICAoYXBwbHktdG8tc2ltcGxlIGYgYSBiIGMgZCAoc3ByZWFkIGFyZ3MpKSkpKVxyXG4ifSB7OnN5bSBhZGQtdG8tc3RyaW5nLWhhc2gtY2FjaGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC10by1zdHJpbmctaGFzaC1jYWNoZVxyXG4gW2tdXHJcbiAobGV0XHJcbiAgW2ggKGhhc2gtc3RyaW5nKiBrKV1cclxuICAoZ29iamVjdC9zZXQgc3RyaW5nLWhhc2gtY2FjaGUgayBoKVxyXG4gIChzZXQhIHN0cmluZy1oYXNoLWNhY2hlLWNvdW50IChpbmMgc3RyaW5nLWhhc2gtY2FjaGUtY291bnQpKVxyXG4gIGgpKVxyXG4ifSB7OnN5bSBjbGotPmpzLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBDbG9qdXJlU2NyaXB0IHZhbHVlcyB0byBKYXZhU2NyaXB0LlxuICBzZXRzL3ZlY3RvcnMvbGlzdHMgYmVjb21lIEFycmF5cywgS2V5d29yZHMgYW5kIFN5bWJvbCBiZWNvbWUgU3RyaW5ncyxcbiAgTWFwcyBiZWNvbWUgT2JqZWN0cy4gQXJiaXRyYXJ5IGtleXMgYXJlIGVuY29kZWQgdG8gYnkgYGtleS0+anNgLlxuICBPcHRpb25zIGlzIGEga2V5LXZhbHVlIHBhaXIsIHdoZXJlIHRoZSBvbmx5IHZhbGlkIGtleSBpc1xuICA6a2V5d29yZC1mbiwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIGEgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9uIHRvIGJlXG4gIGNhbGxlZCBvbiBrZXl3b3JkIGtleXMuIERlZmF1bHQgdG8gYG5hbWVgLiIsIDphcmdsaXN0cyAoW3ggJiB7OmtleXMgW2tleXdvcmQtZm5dLCA6b3Ige2tleXdvcmQtZm4gbmFtZX0sIDphcyBvcHRpb25zfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsai0+anNcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBDbG9qdXJlU2NyaXB0IHZhbHVlcyB0byBKYXZhU2NyaXB0LlxcbiAgc2V0cy92ZWN0b3JzL2xpc3RzIGJlY29tZSBBcnJheXMsIEtleXdvcmRzIGFuZCBTeW1ib2wgYmVjb21lIFN0cmluZ3MsXFxuICBNYXBzIGJlY29tZSBPYmplY3RzLiBBcmJpdHJhcnkga2V5cyBhcmUgZW5jb2RlZCB0byBieSBga2V5LT5qc2AuXFxuICBPcHRpb25zIGlzIGEga2V5LXZhbHVlIHBhaXIsIHdoZXJlIHRoZSBvbmx5IHZhbGlkIGtleSBpc1xcbiAgOmtleXdvcmQtZm4sIHdoaWNoIHNob3VsZCBwb2ludCB0byBhIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbiB0byBiZVxcbiAgY2FsbGVkIG9uIGtleXdvcmQga2V5cy4gRGVmYXVsdCB0byBgbmFtZWAuXCJcclxuIFt4ICYgezprZXlzIFtrZXl3b3JkLWZuXSwgOm9yIHtrZXl3b3JkLWZuIG5hbWV9LCA6YXMgb3B0aW9uc31dXHJcbiAobGV0Zm5cclxuICBbKGtleWZuIFtrXSAoa2V5LT5qcyBrIHRoaXNmbikpXHJcbiAgICh0aGlzZm5cclxuICAgIFt4XVxyXG4gICAgKGNvbmRcclxuICAgICAobmlsPyB4KVxyXG4gICAgIG5pbFxyXG4gICAgIChzYXRpc2ZpZXM/IElFbmNvZGVKUyB4KVxyXG4gICAgICgtY2xqLT5qcyB4KVxyXG4gICAgIChrZXl3b3JkPyB4KVxyXG4gICAgIChrZXl3b3JkLWZuIHgpXHJcbiAgICAgKHN5bWJvbD8geClcclxuICAgICAoc3RyIHgpXHJcbiAgICAgKG1hcD8geClcclxuICAgICAobGV0XHJcbiAgICAgIFttIChqcy1vYmopXVxyXG4gICAgICAoZG9zZXEgW1trIHZdIHhdIChnb2JqZWN0L3NldCBtIChrZXlmbiBrKSAodGhpc2ZuIHYpKSlcclxuICAgICAgbSlcclxuICAgICAoY29sbD8geClcclxuICAgICAobGV0IFthcnIgKGFycmF5KV0gKGRvc2VxIFt4IChtYXAgdGhpc2ZuIHgpXSAoLnB1c2ggYXJyIHgpKSBhcnIpXHJcbiAgICAgOmVsc2VcclxuICAgICB4KSldXHJcbiAgKHRoaXNmbiB4KSkpXHJcbiJ9IHs6c3ltIElDaHVua2VkTmV4dCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhY2Nlc3NpbmcgdGhlIGNodW5rcyBvZiBhIGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtY2h1bmtlZC1uZXh0KX0gezpzeW0gaW50ZXJwb3NlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIHNlcGFyYXRlZCBieSBzZXAuXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tzZXBdIFtzZXAgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludGVycG9zZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwgc2VwYXJhdGVkIGJ5IHNlcC5cXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtzZXBdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW3N0YXJ0ZWQgKHZvbGF0aWxlISBmYWxzZSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChpZlxyXG4gICAgICAgQHN0YXJ0ZWRcclxuICAgICAgIChsZXRcclxuICAgICAgICBbc2VwciAocmYgcmVzdWx0IHNlcCldXHJcbiAgICAgICAgKGlmIChyZWR1Y2VkPyBzZXByKSBzZXByIChyZiBzZXByIGlucHV0KSkpXHJcbiAgICAgICAoZG8gKHZyZXNldCEgc3RhcnRlZCB0cnVlKSAocmYgcmVzdWx0IGlucHV0KSkpKSkpKSlcclxuIChbc2VwIGNvbGxdIChkcm9wIDEgKGludGVybGVhdmUgKHJlcGVhdCBzZXApIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIGRlcmVmLCA6bWV0YSB7OmRvYyAiQWxzbyByZWFkZXIgbWFjcm86IEB2YXIvQGF0b20vQGRlbGF5LiBSZXR1cm5zIHRoZVxuICAgbW9zdC1yZWNlbnRseS1jb21taXR0ZWQgdmFsdWUgb2YgcmVmLiBXaGVuIGFwcGxpZWQgdG8gYSB2YXJcbiAgIG9yIGF0b20sIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuIFdoZW4gYXBwbGllZCB0byBhIGRlbGF5LCBmb3JjZXNcbiAgIGl0IGlmIG5vdCBhbHJlYWR5IGZvcmNlZC4gU2VlIGFsc28gLSByZWFsaXplZD8uIiwgOmFyZ2xpc3RzIChbb10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcmVmXHJcbiBcIkFsc28gcmVhZGVyIG1hY3JvOiBAdmFyL0BhdG9tL0BkZWxheS4gUmV0dXJucyB0aGVcXG4gICBtb3N0LXJlY2VudGx5LWNvbW1pdHRlZCB2YWx1ZSBvZiByZWYuIFdoZW4gYXBwbGllZCB0byBhIHZhclxcbiAgIG9yIGF0b20sIHJldHVybnMgaXRzIGN1cnJlbnQgc3RhdGUuIFdoZW4gYXBwbGllZCB0byBhIGRlbGF5LCBmb3JjZXNcXG4gICBpdCBpZiBub3QgYWxyZWFkeSBmb3JjZWQuIFNlZSBhbHNvIC0gcmVhbGl6ZWQ/LlwiXHJcbiBbb11cclxuICgtZGVyZWYgbykpXHJcbiJ9IHs6c3ltIGFzc29jLCA6bWV0YSB7OmRvYyAiYXNzb2NbaWF0ZV0uIFdoZW4gYXBwbGllZCB0byBhIG1hcCwgcmV0dXJucyBhIG5ldyBtYXAgb2YgdGhlXG4gICBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0IGNvbnRhaW5zIHRoZSBtYXBwaW5nIG9mIGtleShzKSB0b1xuICAgdmFsKHMpLiBXaGVuIGFwcGxpZWQgdG8gYSB2ZWN0b3IsIHJldHVybnMgYSBuZXcgdmVjdG9yIHRoYXRcbiAgIGNvbnRhaW5zIHZhbCBhdCBpbmRleC4gTm90ZSAtIGluZGV4IG11c3QgYmUgPD0gKGNvdW50IHZlY3RvcikuIiwgOmFyZ2xpc3RzIFtbY29sbCBrIHZdIFtjb2xsIGsgdiAmIGt2c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzc29jXHJcbiBcImFzc29jW2lhdGVdLiBXaGVuIGFwcGxpZWQgdG8gYSBtYXAsIHJldHVybnMgYSBuZXcgbWFwIG9mIHRoZVxcbiAgIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXQgY29udGFpbnMgdGhlIG1hcHBpbmcgb2Yga2V5KHMpIHRvXFxuICAgdmFsKHMpLiBXaGVuIGFwcGxpZWQgdG8gYSB2ZWN0b3IsIHJldHVybnMgYSBuZXcgdmVjdG9yIHRoYXRcXG4gICBjb250YWlucyB2YWwgYXQgaW5kZXguIE5vdGUgLSBpbmRleCBtdXN0IGJlIDw9IChjb3VudCB2ZWN0b3IpLlwiXHJcbiAoW2NvbGwgayB2XVxyXG4gIChpZlxyXG4gICAoaW1wbGVtZW50cz8gSUFzc29jaWF0aXZlIGNvbGwpXHJcbiAgICgtYXNzb2MgY29sbCBrIHYpXHJcbiAgIChpZi1ub3QgKG5pbD8gY29sbCkgKC1hc3NvYyBjb2xsIGsgdikgKGFycmF5LW1hcCBrIHYpKSkpXHJcbiAoW2NvbGwgayB2ICYga3ZzXVxyXG4gIChsZXRcclxuICAgW3JldCAoYXNzb2MgY29sbCBrIHYpXVxyXG4gICAoaWYga3ZzIChyZWN1ciByZXQgKGZpcnN0IGt2cykgKHNlY29uZCBrdnMpIChubmV4dCBrdnMpKSByZXQpKSkpXHJcbiJ9IHs6c3ltIHRyYW5zaWVudCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcsIHRyYW5zaWVudCB2ZXJzaW9uIG9mIHRoZSBjb2xsZWN0aW9uLCBpbiBjb25zdGFudCB0aW1lLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2llbnRcclxuIFwiUmV0dXJucyBhIG5ldywgdHJhbnNpZW50IHZlcnNpb24gb2YgdGhlIGNvbGxlY3Rpb24sIGluIGNvbnN0YW50IHRpbWUuXCJcclxuIFtjb2xsXVxyXG4gKC1hcy10cmFuc2llbnQgY29sbCkpXHJcbiJ9IHs6c3ltIC1kaXNqb2luLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgdGhhdCBkb2VzIG5vdCBjb250YWluIHYuIiwgOmFyZ2xpc3RzIChbY29sbCB2XSl9LCA6cHJvdG9jb2wgSVNldH0gezpzeW0gY2h1bmstY29ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjaHVuayByZXN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2h1bmstY29uc1xyXG4gW2NodW5rIHJlc3RdXHJcbiAoaWYgKHplcm8/ICgtY291bnQgY2h1bmspKSByZXN0IChDaHVua2VkQ29ucy4gY2h1bmsgcmVzdCBuaWwgbmlsKSkpXHJcbiJ9IHs6c3ltIGNvbXBhcmF0b3IsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIEphdmFTY3JpcHQgY29tcGF0aWJsZSBjb21wYXJhdG9yIGJhc2VkIHVwb24gcHJlZC4iLCA6YXJnbGlzdHMgKFtwcmVkXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFyYXRvclxyXG4gXCJSZXR1cm5zIGFuIEphdmFTY3JpcHQgY29tcGF0aWJsZSBjb21wYXJhdG9yIGJhc2VkIHVwb24gcHJlZC5cIlxyXG4gW3ByZWRdXHJcbiAoZm4gW3ggeV0gKGNvbmQgKHByZWQgeCB5KSAtMSAocHJlZCB5IHgpIDEgOmVsc2UgMCkpKVxyXG4ifSB7OnN5bSBwcmludC1wcmVmaXgtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ByZWZpeCBtIHByaW50LW9uZSB3cml0ZXIgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LXByZWZpeC1tYXBcclxuIFtwcmVmaXggbSBwcmludC1vbmUgd3JpdGVyIG9wdHNdXHJcbiAocHItc2VxdWVudGlhbC13cml0ZXJcclxuICB3cml0ZXJcclxuICAoZm5cclxuICAgW2UgdyBvcHRzXVxyXG4gICAoZG9cclxuICAgIChwcmludC1vbmUgKGtleSBlKSB3IG9wdHMpXHJcbiAgICAoLXdyaXRlIHcgXFxzcGFjZSlcclxuICAgIChwcmludC1vbmUgKHZhbCBlKSB3IG9wdHMpKSlcclxuICAoc3RyIHByZWZpeCBcIntcIilcclxuICBcIiwgXCJcclxuICBcIn1cIlxyXG4gIG9wdHNcclxuICAoc2VxIG0pKSlcclxuIn0gezpzeW0gc29ydGVkLW1hcCwgOm1ldGEgezpkb2MgImtleXZhbCA9PiBrZXkgdmFsXG4gIFJldHVybnMgYSBuZXcgc29ydGVkIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLiIsIDphcmdsaXN0cyBbWyYga2V5dmFsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRlZC1tYXBcclxuIFwia2V5dmFsID0+IGtleSB2YWxcXG4gIFJldHVybnMgYSBuZXcgc29ydGVkIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLlwiXHJcbiAoWyYga2V5dmFsc11cclxuICAobG9vcFxyXG4gICBbaW4gKHNlcSBrZXl2YWxzKSBvdXQgKC4tRU1QVFkgUGVyc2lzdGVudFRyZWVNYXApXVxyXG4gICAoaWYgaW4gKHJlY3VyIChubmV4dCBpbikgKGFzc29jIG91dCAoZmlyc3QgaW4pIChzZWNvbmQgaW4pKSkgb3V0KSkpKVxyXG4ifSB7OnN5bSBkcm9wLXdoaWxlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgc3RhcnRpbmcgZnJvbSB0aGVcbiAgZmlyc3QgaXRlbSBmb3Igd2hpY2ggKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIGZhbHNlLiAgUmV0dXJucyBhXG4gIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3ByZWRdIFtwcmVkIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkcm9wLXdoaWxlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIHN0YXJ0aW5nIGZyb20gdGhlXFxuICBmaXJzdCBpdGVtIGZvciB3aGljaCAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgZmFsc2UuICBSZXR1cm5zIGFcXG4gIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3ByZWRdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2RhICh2b2xhdGlsZSEgdHJ1ZSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtkcm9wPyBAZGFdXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoYW5kIGRyb3A/IChwcmVkIGlucHV0KSlcclxuICAgICAgICByZXN1bHRcclxuICAgICAgICAoZG8gKHZyZXNldCEgZGEgbmlsKSAocmYgcmVzdWx0IGlucHV0KSkpKSkpKSkpXHJcbiAoW3ByZWQgY29sbF1cclxuICAobGV0XHJcbiAgIFtzdGVwXHJcbiAgICAoZm5cclxuICAgICBbcHJlZCBjb2xsXVxyXG4gICAgIChsZXRcclxuICAgICAgW3MgKHNlcSBjb2xsKV1cclxuICAgICAgKGlmIChhbmQgcyAocHJlZCAoZmlyc3QgcykpKSAocmVjdXIgcHJlZCAocmVzdCBzKSkgcykpKV1cclxuICAgKGxhenktc2VxIChzdGVwIHByZWQgY29sbCkpKSkpXHJcbiJ9IHs6c3ltIElXcml0ZXIsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3Igd3JpdGluZy4gQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgYnkgU3RyaW5nQnVmZmVyV3JpdGVyLiJ9LCA6bWV0aG9kcyAoLWZsdXNoIC13cml0ZSl9IHs6c3ltIHJlYWxpemVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGhhcyBiZWVuIHByb2R1Y2VkIGZvciBhIGRlbGF5IG9yIGxhenkgc2VxdWVuY2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWxpemVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSBoYXMgYmVlbiBwcm9kdWNlZCBmb3IgYSBkZWxheSBvciBsYXp5IHNlcXVlbmNlLlwiXHJcbiBbeF1cclxuICgtcmVhbGl6ZWQ/IHgpKVxyXG4ifSB7OnN5bSAqcHJpbnQtZm4qLCA6bWV0YSB7OmRvYyAiRWFjaCBydW50aW1lIGVudmlyb25tZW50IHByb3ZpZGVzIGEgZGlmZmVyZW50IHdheSB0byBwcmludCBvdXRwdXQuXG4gIFdoYXRldmVyIGZ1bmN0aW9uICpwcmludC1mbiogaXMgYm91bmQgdG8gd2lsbCBiZSBwYXNzZWQgYW55XG4gIFN0cmluZ3Mgd2hpY2ggc2hvdWxkIGJlIHByaW50ZWQuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpwcmludC1mbiogbmlsKVxyXG4ifSB7OnN5bSBjb21wYXJlLCA6bWV0YSB7OmRvYyAiQ29tcGFyYXRvci4gUmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgemVybywgb3IgYSBwb3NpdGl2ZSBudW1iZXJcbiAgd2hlbiB4IGlzIGxvZ2ljYWxseSAnbGVzcyB0aGFuJywgJ2VxdWFsIHRvJywgb3IgJ2dyZWF0ZXIgdGhhbidcbiAgeS4gVXNlcyBJQ29tcGFyYWJsZSBpZiBhdmFpbGFibGUgYW5kIGdvb2dsZS5hcnJheS5kZWZhdWx0Q29tcGFyZSBmb3Igb2JqZWN0c1xuIG9mIHRoZSBzYW1lIHR5cGUgYW5kIHNwZWNpYWwtY2FzZXMgbmlsIHRvIGJlIGxlc3MgdGhhbiBhbnkgb3RoZXIgb2JqZWN0LiIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhcmVcclxuIFwiQ29tcGFyYXRvci4gUmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgemVybywgb3IgYSBwb3NpdGl2ZSBudW1iZXJcXG4gIHdoZW4geCBpcyBsb2dpY2FsbHkgJ2xlc3MgdGhhbicsICdlcXVhbCB0bycsIG9yICdncmVhdGVyIHRoYW4nXFxuICB5LiBVc2VzIElDb21wYXJhYmxlIGlmIGF2YWlsYWJsZSBhbmQgZ29vZ2xlLmFycmF5LmRlZmF1bHRDb21wYXJlIGZvciBvYmplY3RzXFxuIG9mIHRoZSBzYW1lIHR5cGUgYW5kIHNwZWNpYWwtY2FzZXMgbmlsIHRvIGJlIGxlc3MgdGhhbiBhbnkgb3RoZXIgb2JqZWN0LlwiXHJcbiBbeCB5XVxyXG4gKGNvbmRcclxuICAoaWRlbnRpY2FsPyB4IHkpXHJcbiAgMFxyXG4gIChuaWw/IHgpXHJcbiAgLTFcclxuICAobmlsPyB5KVxyXG4gIDFcclxuICAobnVtYmVyPyB4KVxyXG4gIChpZlxyXG4gICAobnVtYmVyPyB5KVxyXG4gICAoZ2FycmF5L2RlZmF1bHRDb21wYXJlIHggeSlcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkNhbm5vdCBjb21wYXJlIFwiIHggXCIgdG8gXCIgeSkpKSlcclxuICAoc2F0aXNmaWVzPyBJQ29tcGFyYWJsZSB4KVxyXG4gICgtY29tcGFyZSB4IHkpXHJcbiAgOmVsc2VcclxuICAoaWZcclxuICAgKGFuZFxyXG4gICAgKG9yIChzdHJpbmc/IHgpIChhcnJheT8geCkgKHRydWU/IHgpIChmYWxzZT8geCkpXHJcbiAgICAoaWRlbnRpY2FsPyAodHlwZSB4KSAodHlwZSB5KSkpXHJcbiAgIChnYXJyYXkvZGVmYXVsdENvbXBhcmUgeCB5KVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiQ2Fubm90IGNvbXBhcmUgXCIgeCBcIiB0byBcIiB5KSkpKSkpXHJcbiJ9IHs6c3ltIGNvbXBsZW1lbnQsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZuIGYgYW5kIHJldHVybnMgYSBmbiB0aGF0IHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBmLFxuICBoYXMgdGhlIHNhbWUgZWZmZWN0cywgaWYgYW55LCBhbmQgcmV0dXJucyB0aGUgb3Bwb3NpdGUgdHJ1dGggdmFsdWUuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBsZW1lbnRcclxuIFwiVGFrZXMgYSBmbiBmIGFuZCByZXR1cm5zIGEgZm4gdGhhdCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgZixcXG4gIGhhcyB0aGUgc2FtZSBlZmZlY3RzLCBpZiBhbnksIGFuZCByZXR1cm5zIHRoZSBvcHBvc2l0ZSB0cnV0aCB2YWx1ZS5cIlxyXG4gW2ZdXHJcbiAoZm5cclxuICAoW10gKG5vdCAoZikpKVxyXG4gIChbeF0gKG5vdCAoZiB4KSkpXHJcbiAgKFt4IHldIChub3QgKGYgeCB5KSkpXHJcbiAgKFt4IHkgJiB6c10gKG5vdCAoYXBwbHkgZiB4IHkgenMpKSkpKVxyXG4ifSB7OnN5bSAtYXNzb2MhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyB0cmFuc2llbnQgY29sbGVjdGlvbiBvZiB0Y29sbCB3aXRoIGEgbWFwcGluZyBmcm9tIGtleSB0b1xuICAgICB2YWwgYWRkZWQgdG8gaXQuIiwgOmFyZ2xpc3RzIChbdGNvbGwga2V5IHZhbF0pfSwgOnByb3RvY29sIElUcmFuc2llbnRBc3NvY2lhdGl2ZX0gezpzeW0gKnByaW50LWR1cCosIDptZXRhIHs6ZG9jICJXaGVuIHNldCB0byBsb2dpY2FsIHRydWUsIG9iamVjdHMgd2lsbCBiZSBwcmludGVkIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzXG4gIHRoZWlyIHR5cGUgd2hlbiByZWFkIGluIGxhdGVyLlxuXG4gIERlZmF1bHRzIHRvIGZhbHNlLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1kdXAqIGZhbHNlKVxyXG4ifSB7OnN5bSBzdHJpbmctaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBzdHJpbmctaXRlciBbeF0gKFN0cmluZ0l0ZXIuIHggMCkpXHJcbiJ9IHs6c3ltIC1rZXktPmpzLCA6bWV0YSB7OmRvYyAiVHJhbnNmb3JtcyBtYXAga2V5cyB0byB2YWxpZCBKYXZhU2NyaXB0IGtleXMuIEFyYml0cmFyeSBrZXlzIGFyZVxuICBlbmNvZGVkIHRvIHRoZWlyIHN0cmluZyByZXByZXNlbnRhdGlvbiB2aWEgKHByLXN0ciB4KSIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBJRW5jb2RlSlN9IHs6c3ltIElEZXJlZiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgZGVyZWZlcmVuY2UgZnVuY3Rpb25hbGl0eSB0byBhIHJlZmVyZW5jZS4ifSwgOm1ldGhvZHMgKC1kZXJlZil9IHs6c3ltIHNlcXVlbmNlLCA6bWV0YSB7OmRvYyAiQ29lcmNlcyBjb2xsIHRvIGEgKHBvc3NpYmx5IGVtcHR5KSBzZXF1ZW5jZSwgaWYgaXQgaXMgbm90IGFscmVhZHlcbiAgb25lLiBXaWxsIG5vdCBmb3JjZSBhIGxhenkgc2VxLiAoc2VxdWVuY2UgbmlsKSB5aWVsZHMgKCksIFdoZW4gYVxuICB0cmFuc2R1Y2VyIGlzIHN1cHBsaWVkLCByZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBhcHBsaWNhdGlvbnMgb2ZcbiAgdGhlIHRyYW5zZm9ybSB0byB0aGUgaXRlbXMgaW4gY29sbChzKSwgaS5lLiB0byB0aGUgc2V0IG9mIGZpcnN0XG4gIGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgdGhlIHNldCBvZiBzZWNvbmRcbiAgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpcyBleGhhdXN0ZWQuICBBbnlcbiAgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBUaGUgdHJhbnNmb3JtIHNob3VsZCBhY2NlcHRcbiAgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50cyIsIDphcmdsaXN0cyBbW2NvbGxdIFt4Zm9ybSBjb2xsXSBbeGZvcm0gY29sbCAmIGNvbGxzXV19LCA6c291cmNlICIoZGVmblxyXG4gc2VxdWVuY2VcclxuIFwiQ29lcmNlcyBjb2xsIHRvIGEgKHBvc3NpYmx5IGVtcHR5KSBzZXF1ZW5jZSwgaWYgaXQgaXMgbm90IGFscmVhZHlcXG4gIG9uZS4gV2lsbCBub3QgZm9yY2UgYSBsYXp5IHNlcS4gKHNlcXVlbmNlIG5pbCkgeWllbGRzICgpLCBXaGVuIGFcXG4gIHRyYW5zZHVjZXIgaXMgc3VwcGxpZWQsIHJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGFwcGxpY2F0aW9ucyBvZlxcbiAgdGhlIHRyYW5zZm9ybSB0byB0aGUgaXRlbXMgaW4gY29sbChzKSwgaS5lLiB0byB0aGUgc2V0IG9mIGZpcnN0XFxuICBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IHRoZSBzZXQgb2Ygc2Vjb25kXFxuICBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzIGV4aGF1c3RlZC4gIEFueVxcbiAgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBUaGUgdHJhbnNmb3JtIHNob3VsZCBhY2NlcHRcXG4gIG51bWJlci1vZi1jb2xscyBhcmd1bWVudHNcIlxyXG4gKFtjb2xsXSAoaWYgKHNlcT8gY29sbCkgY29sbCAob3IgKHNlcSBjb2xsKSAoKSkpKVxyXG4gKFt4Zm9ybSBjb2xsXVxyXG4gIChvclxyXG4gICAoY2h1bmtJdGVyYXRvclNlcSAoLmNyZWF0ZSBUcmFuc2Zvcm1lckl0ZXJhdG9yIHhmb3JtIChpdGVyIGNvbGwpKSlcclxuICAgKCkpKVxyXG4gKFt4Zm9ybSBjb2xsICYgY29sbHNdXHJcbiAgKG9yXHJcbiAgIChjaHVua0l0ZXJhdG9yU2VxXHJcbiAgICAoLmNyZWF0ZU11bHRpXHJcbiAgICAgVHJhbnNmb3JtZXJJdGVyYXRvclxyXG4gICAgIHhmb3JtXHJcbiAgICAgKG1hcCBpdGVyIChjb25zIGNvbGwgY29sbHMpKSkpXHJcbiAgICgpKSkpXHJcbiJ9IHs6c3ltIGNvbnN0YW50bHksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyBhbmQgcmV0dXJucyB4LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25zdGFudGx5XHJcbiBcIlJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHguXCJcclxuIFt4XVxyXG4gKGZuIFsmIGFyZ3NdIHgpKVxyXG4ifSB7OnN5bSBjaHVua2VkLXNlcSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1t2ZWMgaSBvZmZdIFt2ZWMgbm9kZSBpIG9mZl0gW3ZlYyBub2RlIGkgb2ZmIG1ldGFdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaHVua2VkLXNlcVxyXG4gKFt2ZWMgaSBvZmZdIChDaHVua2VkU2VxLiB2ZWMgKGFycmF5LWZvciB2ZWMgaSkgaSBvZmYgbmlsIG5pbCkpXHJcbiAoW3ZlYyBub2RlIGkgb2ZmXSAoQ2h1bmtlZFNlcS4gdmVjIG5vZGUgaSBvZmYgbmlsIG5pbCkpXHJcbiAoW3ZlYyBub2RlIGkgb2ZmIG1ldGFdIChDaHVua2VkU2VxLiB2ZWMgbm9kZSBpIG9mZiBtZXRhIG5pbCkpKVxyXG4ifSB7OnN5bSBJU29ydGVkLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGEgY29sbGVjdGlvbiB3aGljaCBjYW4gcmVwcmVzZW50IHRoZWlyIGl0ZW1zXG4gIGluIGEgc29ydGVkIG1hbm5lci4gIn0sIDptZXRob2RzICgtY29tcGFyYXRvciAtZW50cnkta2V5IC1zb3J0ZWQtc2VxIC1zb3J0ZWQtc2VxLWZyb20pfSB7OnN5bSBtYWtlLWFycmF5LCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGEgSmF2YVNjcmlwdCBhcnJheSBvZiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMuIEFjY2VwdHMgaWdub3JlZFxuICB0eXBlIGFyZ3VtZW50IGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ2xvanVyZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGVmZmljaWVudFxuICB3YXkgdG8gYWxsb2NhdGUgbXVsdGktZGltZW5zaW9uYWwgYXJyYXlzIGluIEphdmFTY3JpcHQ7IGFzIHN1Y2gsIHRoaXMgZnVuY3Rpb25cbiAgd2lsbCBydW4gaW4gcG9seW5vbWlhbCB0aW1lIHdoZW4gY2FsbGVkIHdpdGggMyBvciBtb3JlIGFyZ3VtZW50cy4iLCA6YXJnbGlzdHMgW1tzaXplXSBbdHlwZSBzaXplXSBbdHlwZSBzaXplICYgbW9yZS1zaXplc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1ha2UtYXJyYXlcclxuIFwiQ29uc3RydWN0IGEgSmF2YVNjcmlwdCBhcnJheSBvZiB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMuIEFjY2VwdHMgaWdub3JlZFxcbiAgdHlwZSBhcmd1bWVudCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENsb2p1cmUuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBlZmZpY2llbnRcXG4gIHdheSB0byBhbGxvY2F0ZSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheXMgaW4gSmF2YVNjcmlwdDsgYXMgc3VjaCwgdGhpcyBmdW5jdGlvblxcbiAgd2lsbCBydW4gaW4gcG9seW5vbWlhbCB0aW1lIHdoZW4gY2FsbGVkIHdpdGggMyBvciBtb3JlIGFyZ3VtZW50cy5cIlxyXG4gKFtzaXplXSAoanMvQXJyYXkuIHNpemUpKVxyXG4gKFt0eXBlIHNpemVdIChtYWtlLWFycmF5IHNpemUpKVxyXG4gKFt0eXBlIHNpemUgJiBtb3JlLXNpemVzXVxyXG4gIChsZXRcclxuICAgW2RpbXMgbW9yZS1zaXplcyBkaW1hcnJheSAobWFrZS1hcnJheSBzaXplKV1cclxuICAgKGRvdGltZXNcclxuICAgIFtpIChhbGVuZ3RoIGRpbWFycmF5KV1cclxuICAgIChhc2V0IGRpbWFycmF5IGkgKGFwcGx5IG1ha2UtYXJyYXkgbmlsIGRpbXMpKSlcclxuICAgZGltYXJyYXkpKSlcclxuIn0gezpzeW0gc2hvcnRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHNob3J0cyBbeF0geClcclxuIn0gezpzeW0gKnVuY2hlY2tlZC1pZiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp1bmNoZWNrZWQtaWYqIGZhbHNlKVxyXG4ifSB7OnN5bSBlbmFibGUtY29uc29sZS1wcmludCEsIDptZXRhIHs6ZG9jICJTZXQgKnByaW50LWZuKiB0byBjb25zb2xlLmxvZyIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuYWJsZS1jb25zb2xlLXByaW50IVxyXG4gXCJTZXQgKnByaW50LWZuKiB0byBjb25zb2xlLmxvZ1wiXHJcbiBbXVxyXG4gKHNldCEgKnByaW50LW5ld2xpbmUqIGZhbHNlKVxyXG4gKHNldC1wcmludC1mbiFcclxuICAoZm5cclxuICAgW11cclxuICAgKGxldFxyXG4gICAgW3hzIChqcy1hcmd1bWVudHMpXVxyXG4gICAgKC5hcHBseSAoLi1sb2cganMvY29uc29sZSkganMvY29uc29sZSAoZ2FycmF5L2Nsb25lIHhzKSkpKSlcclxuIChzZXQtcHJpbnQtZXJyLWZuIVxyXG4gIChmblxyXG4gICBbXVxyXG4gICAobGV0XHJcbiAgICBbeHMgKGpzLWFyZ3VtZW50cyldXHJcbiAgICAoLmFwcGx5ICguLWVycm9yIGpzL2NvbnNvbGUpIGpzL2NvbnNvbGUgKGdhcnJheS9jbG9uZSB4cykpKSkpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIC1mbHVzaCwgOm1ldGEgezpkb2MgIkZsdXNoIHdyaXRlci4iLCA6YXJnbGlzdHMgKFt3cml0ZXJdKX0sIDpwcm90b2NvbCBJV3JpdGVyfSB7OnN5bSBjb21wbGV0aW5nLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSByZWR1Y2luZyBmdW5jdGlvbiBmIG9mIDIgYXJncyBhbmQgcmV0dXJucyBhIGZuIHN1aXRhYmxlIGZvclxuICB0cmFuc2R1Y2UgYnkgYWRkaW5nIGFuIGFyaXR5LTEgc2lnbmF0dXJlIHRoYXQgY2FsbHMgY2YgKGRlZmF1bHQgLVxuICBpZGVudGl0eSkgb24gdGhlIHJlc3VsdCBhcmd1bWVudC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjZl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBsZXRpbmdcclxuIFwiVGFrZXMgYSByZWR1Y2luZyBmdW5jdGlvbiBmIG9mIDIgYXJncyBhbmQgcmV0dXJucyBhIGZuIHN1aXRhYmxlIGZvclxcbiAgdHJhbnNkdWNlIGJ5IGFkZGluZyBhbiBhcml0eS0xIHNpZ25hdHVyZSB0aGF0IGNhbGxzIGNmIChkZWZhdWx0IC1cXG4gIGlkZW50aXR5KSBvbiB0aGUgcmVzdWx0IGFyZ3VtZW50LlwiXHJcbiAoW2ZdIChjb21wbGV0aW5nIGYgaWRlbnRpdHkpKVxyXG4gKFtmIGNmXSAoZm4gKFtdIChmKSkgKFt4XSAoY2YgeCkpIChbeCB5XSAoZiB4IHkpKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtbmVnYXRlLWludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtbmVnYXRlLWludCBbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtbmVnYXRlLWludCB4KSlcclxuIn0gezpzeW0gaGFzaC11bm9yZGVyZWQtY29sbCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGhhc2ggY29kZSwgY29uc2lzdGVudCB3aXRoID0sIGZvciBhbiBleHRlcm5hbCB1bm9yZGVyZWRcbiAgIGNvbGxlY3Rpb24gaW1wbGVtZW50aW5nIEl0ZXJhYmxlLiBGb3IgbWFwcywgdGhlIGl0ZXJhdG9yIHNob3VsZFxuICAgcmV0dXJuIG1hcCBlbnRyaWVzIHdob3NlIGhhc2ggaXMgY29tcHV0ZWQgYXNcbiAgICAgKGhhc2gtb3JkZXJlZC1jb2xsIFtrIHZdKS5cbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC11bm9yZGVyZWQtY29sbFxyXG4gXCJSZXR1cm5zIHRoZSBoYXNoIGNvZGUsIGNvbnNpc3RlbnQgd2l0aCA9LCBmb3IgYW4gZXh0ZXJuYWwgdW5vcmRlcmVkXFxuICAgY29sbGVjdGlvbiBpbXBsZW1lbnRpbmcgSXRlcmFibGUuIEZvciBtYXBzLCB0aGUgaXRlcmF0b3Igc2hvdWxkXFxuICAgcmV0dXJuIG1hcCBlbnRyaWVzIHdob3NlIGhhc2ggaXMgY29tcHV0ZWQgYXNcXG4gICAgIChoYXNoLW9yZGVyZWQtY29sbCBbayB2XSkuXFxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLlwiXHJcbiBbY29sbF1cclxuIChsb29wXHJcbiAgW24gMCBoYXNoLWNvZGUgMCBjb2xsIChzZXEgY29sbCldXHJcbiAgKGlmLW5vdFxyXG4gICAobmlsPyBjb2xsKVxyXG4gICAocmVjdXJcclxuICAgIChpbmMgbilcclxuICAgIChiaXQtb3IgKCsgaGFzaC1jb2RlIChoYXNoIChmaXJzdCBjb2xsKSkpIDApXHJcbiAgICAobmV4dCBjb2xsKSlcclxuICAgKG1peC1jb2xsZWN0aW9uLWhhc2ggaGFzaC1jb2RlIG4pKSkpXHJcbiJ9IHs6c3ltIHJlcGVhdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IChpbmZpbml0ZSEsIG9yIGxlbmd0aCBuIGlmIHN1cHBsaWVkKSBzZXF1ZW5jZSBvZiB4cy4iLCA6YXJnbGlzdHMgW1t4XSBbbiB4XV19LCA6c291cmNlICIoZGVmblxyXG4gcmVwZWF0XHJcbiBcIlJldHVybnMgYSBsYXp5IChpbmZpbml0ZSEsIG9yIGxlbmd0aCBuIGlmIHN1cHBsaWVkKSBzZXF1ZW5jZSBvZiB4cy5cIlxyXG4gKFt4XSAoUmVwZWF0LiBuaWwgLTEgeCBuaWwgbmlsKSlcclxuIChbbiB4XSAoaWYgKHBvcz8gbikgKFJlcGVhdC4gbmlsIG4geCBuaWwgbmlsKSAoLi1FTVBUWSBMaXN0KSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtaW5jLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1pbmMgW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLWluYyB4KSlcclxuIn0gezpzeW0gbnRobmV4dCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG50aCBuZXh0IG9mIGNvbGwsIChzZXEgY29sbCkgd2hlbiBuIGlzIDAuIiwgOmFyZ2xpc3RzIChbY29sbCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnRobmV4dFxyXG4gXCJSZXR1cm5zIHRoZSBudGggbmV4dCBvZiBjb2xsLCAoc2VxIGNvbGwpIHdoZW4gbiBpcyAwLlwiXHJcbiBbY29sbCBuXVxyXG4gKGxvb3BcclxuICBbbiBuIHhzIChzZXEgY29sbCldXHJcbiAgKGlmIChhbmQgeHMgKHBvcz8gbikpIChyZWN1ciAoZGVjIG4pIChuZXh0IHhzKSkgeHMpKSlcclxuIn0gezpzeW0gZ2V0LXZhbGlkYXRvciwgOm1ldGEgezpkb2MgIkdldHMgdGhlIHZhbGlkYXRvci1mbiBmb3IgYSB2YXIvcmVmL2FnZW50L2F0b20uIiwgOmFyZ2xpc3RzIChbaXJlZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC12YWxpZGF0b3JcclxuIFwiR2V0cyB0aGUgdmFsaWRhdG9yLWZuIGZvciBhIHZhci9yZWYvYWdlbnQvYXRvbS5cIlxyXG4gW2lyZWZdXHJcbiAoLi12YWxpZGF0b3IgaXJlZikpXHJcbiJ9IHs6c3ltIG51bWJlcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgbnVtYmVyLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1iZXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBudW1iZXIuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS9udW1iZXI/IHgpKVxyXG4ifSB7OnN5bSAtY29uaiEsIDptZXRhIHs6ZG9jICJBZGRzIHZhbHVlIHZhbCB0byB0Y29sbCBhbmQgcmV0dXJucyB0Y29sbC4iLCA6YXJnbGlzdHMgKFt0Y29sbCB2YWxdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50Q29sbGVjdGlvbn0gezpzeW0gY2h1bmstbmV4dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2h1bmstbmV4dFxyXG4gW3NdXHJcbiAoaWZcclxuICAoaW1wbGVtZW50cz8gSUNodW5rZWROZXh0IHMpXHJcbiAgKC1jaHVua2VkLW5leHQgcylcclxuICAoc2VxICgtY2h1bmtlZC1yZXN0IHMpKSkpXHJcbiJ9IHs6c3ltIHByaW50LXN0ciwgOm1ldGEgezpkb2MgInByaW50IHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXQiLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1zdHJcclxuIFwicHJpbnQgdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdFwiXHJcbiBbJiBvYmpzXVxyXG4gKHByLXN0ci13aXRoLW9wdHMgb2JqcyAoYXNzb2MgKHByLW9wdHMpIDpyZWFkYWJseSBmYWxzZSkpKVxyXG4ifSB7OnN5bSBub3QtYW55PywgOm1ldGEgezpkb2MgIlJldHVybnMgZmFsc2UgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBhbnkgeCBpbiBjb2xsLFxuICBlbHNlIHRydWUuIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm90LWFueT9cclxuIFwiUmV0dXJucyBmYWxzZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGFueSB4IGluIGNvbGwsXFxuICBlbHNlIHRydWUuXCJcclxuIFtwcmVkIGNvbGxdXHJcbiAobm90IChzb21lIHByZWQgY29sbCkpKVxyXG4ifSB7OnN5bSBpbnRvLWFycmF5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBhcnJheSB3aXRoIGNvbXBvbmVudHMgc2V0IHRvIHRoZSB2YWx1ZXMgaW4gYXNlcS4gT3B0aW9uYWwgdHlwZVxuICBhcmd1bWVudCBhY2NlcHRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENsb2p1cmUuIiwgOmFyZ2xpc3RzIFtbYXNlcV0gW3R5cGUgYXNlcV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludG8tYXJyYXlcclxuIFwiUmV0dXJucyBhbiBhcnJheSB3aXRoIGNvbXBvbmVudHMgc2V0IHRvIHRoZSB2YWx1ZXMgaW4gYXNlcS4gT3B0aW9uYWwgdHlwZVxcbiAgYXJndW1lbnQgYWNjZXB0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDbG9qdXJlLlwiXHJcbiAoW2FzZXFdIChpbnRvLWFycmF5IG5pbCBhc2VxKSlcclxuIChbdHlwZSBhc2VxXSAocmVkdWNlIChmbiBbYSB4XSAoLnB1c2ggYSB4KSBhKSAoYXJyYXkpIGFzZXEpKSlcclxuIn0gezpzeW0gLWhhc2gsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBoYXNoIGNvZGUgb2Ygby4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6cHJvdG9jb2wgSUhhc2h9IHs6c3ltIHF1YWxpZmllZC1zeW1ib2w/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCB3aXRoIGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1YWxpZmllZC1zeW1ib2w/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgd2l0aCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChib29sZWFuIChhbmQgKHN5bWJvbD8geCkgKG5hbWVzcGFjZSB4KSB0cnVlKSkpXHJcbiJ9IHs6c3ltIC1kaXNzb2MhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyB0cmFuc2llbnQgY29sbGVjdGlvbiBvZiB0Y29sbCB3aXRob3V0IHRoZSBtYXBwaW5nIGZvciBrZXkuIiwgOmFyZ2xpc3RzIChbdGNvbGwga2V5XSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudE1hcH0gezpzeW0gY2h1bmstYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NhcGFjaXR5XSl9LCA6c291cmNlICIoZGVmbiBjaHVuay1idWZmZXIgW2NhcGFjaXR5XSAoQ2h1bmtCdWZmZXIuIChtYWtlLWFycmF5IGNhcGFjaXR5KSAwKSlcclxuIn0gezpzeW0gc2VxYWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB0aGUgc2VxIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBmb3IgcyIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXFhYmxlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB0aGUgc2VxIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc1wiXHJcbiBbc11cclxuIChvciAobmlsPyBzKSAoc2F0aXNmaWVzPyBJU2VxYWJsZSBzKSAoYXJyYXk/IHMpIChzdHJpbmc/IHMpKSlcclxuIn0gezpzeW0gc3ltYm9sPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBTeW1ib2wiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBzeW1ib2w/IFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIFN5bWJvbFwiIFt4XSAoaW5zdGFuY2U/IFN5bWJvbCB4KSlcclxuIn0gezpzeW0gbTMtaGFzaC11bmVuY29kZWQtY2hhcnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtMy1oYXNoLXVuZW5jb2RlZC1jaGFyc1xyXG4gW2luXVxyXG4gKGxldFxyXG4gIFtoMVxyXG4gICAobG9vcFxyXG4gICAgW2kgMSBoMSBtMy1zZWVkXVxyXG4gICAgKGlmXHJcbiAgICAgKDwgaSAoLi1sZW5ndGggaW4pKVxyXG4gICAgIChyZWN1clxyXG4gICAgICAoKyBpIDIpXHJcbiAgICAgIChtMy1taXgtSDFcclxuICAgICAgIGgxXHJcbiAgICAgICAobTMtbWl4LUsxXHJcbiAgICAgICAgKGJpdC1vclxyXG4gICAgICAgICAoLmNoYXJDb2RlQXQgaW4gKGRlYyBpKSlcclxuICAgICAgICAgKGJpdC1zaGlmdC1sZWZ0ICguY2hhckNvZGVBdCBpbiBpKSAxNikpKSkpXHJcbiAgICAgaDEpKVxyXG4gICBoMVxyXG4gICAoaWZcclxuICAgICg9PSAoYml0LWFuZCAoLi1sZW5ndGggaW4pIDEpIDEpXHJcbiAgICAoYml0LXhvciBoMSAobTMtbWl4LUsxICguY2hhckNvZGVBdCBpbiAoZGVjICguLWxlbmd0aCBpbikpKSkpXHJcbiAgICBoMSldXHJcbiAgKG0zLWZtaXggaDEgKGltdWwgMiAoLi1sZW5ndGggaW4pKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtY2hhciBbeF0geClcclxuIn0gezpzeW0gc3lzdGVtLXRpbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGhpZ2hlc3QgcmVzb2x1dGlvbiB0aW1lIG9mZmVyZWQgYnkgaG9zdCBpbiBtaWxsaXNlY29uZHMuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3lzdGVtLXRpbWVcclxuIFwiUmV0dXJucyBoaWdoZXN0IHJlc29sdXRpb24gdGltZSBvZmZlcmVkIGJ5IGhvc3QgaW4gbWlsbGlzZWNvbmRzLlwiXHJcbiBbXVxyXG4gKGNvbmRcclxuICAoYW5kIChleGlzdHM/IGpzL3BlcmZvcm1hbmNlKSAobm90IChuaWw/ICguIGpzL3BlcmZvcm1hbmNlIC1ub3cpKSkpXHJcbiAgKC5ub3cganMvcGVyZm9ybWFuY2UpXHJcbiAgKGFuZCAoZXhpc3RzPyBqcy9wcm9jZXNzKSAobm90IChuaWw/ICguIGpzL3Byb2Nlc3MgLWhydGltZSkpKSlcclxuICAobGV0XHJcbiAgIFt0ICguaHJ0aW1lIGpzL3Byb2Nlc3MpXVxyXG4gICAoLyAoKyAoKiAoYWdldCB0IDApIDEuMEU5KSAoYWdldCB0IDEpKSAxMDAwMDAwLjApKVxyXG4gIDplbHNlXHJcbiAgKC5nZXRUaW1lIChqcy9EYXRlLikpKSlcclxuIn0gezpzeW0gLWludm9rZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSBbdGhpcyBhXSBbdGhpcyBhIGJdIFt0aGlzIGEgYiBjXSBbdGhpcyBhIGIgYyBkXSBbdGhpcyBhIGIgYyBkIGVdIFt0aGlzIGEgYiBjIGQgZSBmXSBbdGhpcyBhIGIgYyBkIGUgZiBnXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGhdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGtdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG5dIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHFdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzXSBbdGhpcyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHRdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCByZXN0XSl9LCA6cHJvdG9jb2wgSUZufSB7OnN5bSBjb2xsPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJQ29sbGVjdGlvbiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xsP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSUNvbGxlY3Rpb25cIlxyXG4gW3hdXHJcbiAoaWYgKG5pbD8geCkgZmFsc2UgKHNhdGlzZmllcz8gSUNvbGxlY3Rpb24geCkpKVxyXG4ifSB7OnN5bSBnZXQtaW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsXG4gIHdoZXJlIGtzIGlzIGEgc2VxdWVuY2Ugb2Yga2V5cy4gUmV0dXJucyBuaWwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudCxcbiAgb3IgdGhlIG5vdC1mb3VuZCB2YWx1ZSBpZiBzdXBwbGllZC4iLCA6YXJnbGlzdHMgW1ttIGtzXSBbbSBrcyBub3QtZm91bmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtaW5cclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLFxcbiAgd2hlcmUga3MgaXMgYSBzZXF1ZW5jZSBvZiBrZXlzLiBSZXR1cm5zIG5pbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LFxcbiAgb3IgdGhlIG5vdC1mb3VuZCB2YWx1ZSBpZiBzdXBwbGllZC5cIlxyXG4gezphZGRlZCBcIjEuMlwiLCA6c3RhdGljIHRydWV9XHJcbiAoW20ga3NdIChyZWR1Y2UgZ2V0IG0ga3MpKVxyXG4gKFttIGtzIG5vdC1mb3VuZF1cclxuICAobG9vcFxyXG4gICBbc2VudGluZWwgbG9va3VwLXNlbnRpbmVsIG0gbSBrcyAoc2VxIGtzKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8ga3MpXHJcbiAgICAobGV0XHJcbiAgICAgW20gKGdldCBtIChmaXJzdCBrcykgc2VudGluZWwpXVxyXG4gICAgIChpZlxyXG4gICAgICAoaWRlbnRpY2FsPyBzZW50aW5lbCBtKVxyXG4gICAgICBub3QtZm91bmRcclxuICAgICAgKHJlY3VyIHNlbnRpbmVsIG0gKG5leHQga3MpKSkpXHJcbiAgICBtKSkpKVxyXG4ifSB7OnN5bSBmbmV4dCwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKGZpcnN0IChuZXh0IHgpKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIGZuZXh0IFwiU2FtZSBhcyAoZmlyc3QgKG5leHQgeCkpXCIgW2NvbGxdIChmaXJzdCAobmV4dCBjb2xsKSkpXHJcbiJ9IHs6c3ltIElMaXN0LCA6bWV0YSB7OmRvYyAiTWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIGEgcGVyc2lzdGVudCBsaXN0In0sIDptZXRob2RzICgpfSB7OnN5bSAtdmFsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIG1hcCBlbnRyeS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSU1hcEVudHJ5fSB7OnN5bSBieXRlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBieXRlcyBbeF0geClcclxuIn0gezpzeW0gLXNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXEgb2Ygbywgb3IgbmlsIGlmIG8gaXMgZW1wdHkuIiwgOmFyZ2xpc3RzIChbb10pfSwgOnByb3RvY29sIElTZXFhYmxlfSksIGNsanMudG9vbHMucmVhZGVyLnJlYWRlci10eXBlcyAoezpzeW0gaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gSW5kZXhpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyIiwgOmFyZ2xpc3RzIFtbcy1vci1yZHJdIFtzLW9yLXJkciBidWYtbGVuXSBbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYW4gSW5kZXhpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyXCJcclxuIChbcy1vci1yZHJdIChpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIDEpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuXSAoaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuIG5pbCkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXVxyXG4gIChJbmRleGluZ1B1c2hiYWNrUmVhZGVyLlxyXG4gICAoaWZcclxuICAgIChzdHJpbmc/IHMtb3ItcmRyKVxyXG4gICAgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4pXHJcbiAgICBzLW9yLXJkcilcclxuICAgMVxyXG4gICAxXHJcbiAgIHRydWVcclxuICAgbmlsXHJcbiAgIDBcclxuICAgZmlsZS1uYW1lKSkpXHJcbiJ9IHs6c3ltIGxvZy1zb3VyY2UqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlYWRlciBmXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9nLXNvdXJjZSpcclxuIFtyZWFkZXIgZl1cclxuIChsZXRcclxuICBbYnVmZmVyICg6YnVmZmVyIEAoLi1mcmFtZXMgcmVhZGVyKSldXHJcbiAgKHRyeVxyXG4gICAoc3dhcCFcclxuICAgICguLWZyYW1lcyByZWFkZXIpXHJcbiAgICB1cGRhdGUtaW5cclxuICAgIFs6b2Zmc2V0XVxyXG4gICAgY29ualxyXG4gICAgKC5nZXRMZW5ndGggYnVmZmVyKSlcclxuICAgKGxldFxyXG4gICAgW3JldCAoZildXHJcbiAgICAoaWZcclxuICAgICAoaW1wbGVtZW50cz8gSU1ldGEgcmV0KVxyXG4gICAgIChtZXJnZS1tZXRhIHJldCB7OnNvdXJjZSAocGVlay1zb3VyY2UtbG9nIEAoLi1mcmFtZXMgcmVhZGVyKSl9KVxyXG4gICAgIHJldCkpXHJcbiAgIChmaW5hbGx5IChzd2FwISAoLi1mcmFtZXMgcmVhZGVyKSB1cGRhdGUtaW4gWzpvZmZzZXRdIHJlc3QpKSkpKVxyXG4ifSB7OnN5bSBtZXJnZS1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgYG9iamAsIHdpdGggaXRzXG5tZXRhZGF0YSBtZXJnZWQgb3ZlciBgbWAuIiwgOmFyZ2xpc3RzIChbb2JqIG1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS1tZXRhXHJcbiBcIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIGBvYmpgLCB3aXRoIGl0c1xcbm1ldGFkYXRhIG1lcmdlZCBvdmVyIGBtYC5cIlxyXG4gW29iaiBtXVxyXG4gKGxldFxyXG4gIFtvcmlnLW1ldGEgKG1ldGEgb2JqKV1cclxuICAod2l0aC1tZXRhIG9iaiAobWVyZ2UgbSAoZGlzc29jIG9yaWctbWV0YSA6c291cmNlKSkpKSlcclxuIn0gezpzeW0gUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAocGVlay1jaGFyIHJlYWQtY2hhcil9IHs6c3ltIHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXIiLCA6YXJnbGlzdHMgW1tzLW9yLXJkcl0gW3Mtb3ItcmRyIGJ1Zi1sZW5dIFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyXCJcclxuIChbcy1vci1yZHJdIChzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIDEpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuXVxyXG4gIChzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4gbmlsKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXHJcbiAgKFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cclxuICAgKGlmXHJcbiAgICAoc3RyaW5nPyBzLW9yLXJkcilcclxuICAgIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuKVxyXG4gICAgcy1vci1yZHIpXHJcbiAgIDFcclxuICAgMVxyXG4gICB0cnVlXHJcbiAgIG5pbFxyXG4gICAwXHJcbiAgIGZpbGUtbmFtZVxyXG4gICAoYXRvbSB7OmJ1ZmZlciAoU3RyaW5nQnVmZmVyLiksIDpvZmZzZXQgJygwKX0pKSkpXHJcbiJ9IHs6c3ltIHVucmVhZCwgOm1ldGEgezpkb2MgIlB1c2hlcyBiYWNrIGEgc2luZ2xlIGNoYXJhY3RlciBvbiB0byB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyIGNoXSl9LCA6cHJvdG9jb2wgSVB1c2hiYWNrUmVhZGVyfSB7OnN5bSBwZWVrLWNoYXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IGNoYXIgZnJvbSB0aGUgUmVhZGVyIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcmVhZGVyIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIFJlYWRlcn0gezpzeW0gSVB1c2hiYWNrUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodW5yZWFkKX0gezpzeW0gaW5kZXhpbmctcmVhZGVyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB0aGUgcmVhZGVyIHNhdGlzZmllcyBJbmRleGluZ1JlYWRlciIsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4aW5nLXJlYWRlcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHRoZSByZWFkZXIgc2F0aXNmaWVzIEluZGV4aW5nUmVhZGVyXCJcclxuIFtyZHJdXHJcbiAoaW1wbGVtZW50cz8gSW5kZXhpbmdSZWFkZXIgcmRyKSlcclxuIn0gezpzeW0gc3RyaW5nLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBTdHJpbmdSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyIsIDphcmdsaXN0cyBbW3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmctcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBTdHJpbmdSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZ1wiXHJcbiAoW3NdIChTdHJpbmdSZWFkZXIuIHMgKGNvdW50IHMpIDApKSlcclxuIn0gezpzeW0gcmVhZC1jaGFyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIFJlYWRlciwgbmlsIGlmIHRoZSBlbmQgb2Ygc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBSZWFkZXJ9IHs6c3ltIGdldC1jb2x1bW4tbnVtYmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0gezpzeW0gZ2V0LWZpbGUtbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpbGUgbmFtZSB0aGUgcmVhZGVyIGlzIHJlYWRpbmcgZnJvbSwgb3IgbmlsIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9IHs6c3ltIHJlYWQtbGluZSwgOm1ldGEgezpkb2MgIlJlYWRzIGEgbGluZSBmcm9tIHRoZSByZWFkZXIgb3IgZnJvbSAqaW4qIGlmIG5vIHJlYWRlciBpcyBzcGVjaWZpZWQiLCA6YXJnbGlzdHMgW1tyZHJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLWxpbmVcclxuIFwiUmVhZHMgYSBsaW5lIGZyb20gdGhlIHJlYWRlciBvciBmcm9tICppbiogaWYgbm8gcmVhZGVyIGlzIHNwZWNpZmllZFwiXHJcbiAoW3Jkcl1cclxuICAobG9vcFxyXG4gICBbYyAocmVhZC1jaGFyIHJkcikgcyAoU3RyaW5nQnVmZmVyLildXHJcbiAgIChpZiAobmV3bGluZT8gYykgKHN0ciBzKSAocmVjdXIgKHJlYWQtY2hhciByZHIpICguYXBwZW5kIHMgYykpKSkpKVxyXG4ifSB7OnN5bSBzdHJpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIiwgOmFyZ2xpc3RzIFtbc10gW3MgYnVmLWxlbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nXCJcclxuIChbc10gKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMgMSkpXHJcbiAoW3MgYnVmLWxlbl1cclxuICAoUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChzdHJpbmctcmVhZGVyIHMpXHJcbiAgIChvYmplY3QtYXJyYXkgYnVmLWxlbilcclxuICAgYnVmLWxlblxyXG4gICBidWYtbGVuKSkpXHJcbiJ9IHs6c3ltIGxpbmUtc3RhcnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciBhbmQgdGhlIGN1cnJlbnQgY2hhciBzdGFydHMgYSBuZXcgbGluZSIsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtc3RhcnQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIgYW5kIHRoZSBjdXJyZW50IGNoYXIgc3RhcnRzIGEgbmV3IGxpbmVcIlxyXG4gW3Jkcl1cclxuICh3aGVuIChpbmRleGluZy1yZWFkZXI/IHJkcikgKD09IDEgKGdldC1jb2x1bW4tbnVtYmVyIHJkcikpKSlcclxuIn0gezpzeW0gc291cmNlLWxvZ2dpbmctcmVhZGVyPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtbG9nZ2luZy1yZWFkZXI/XHJcbiBbcmRyXVxyXG4gKGluc3RhbmNlPyBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgcmRyKSlcclxuIn0gezpzeW0gSW5kZXhpbmdSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChnZXQtY29sdW1uLW51bWJlciBnZXQtZmlsZS1uYW1lIGdldC1saW5lLW51bWJlcil9IHs6c3ltIG5vZGUtcmVhZGFibGUtcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWFkYWJsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vZGUtcmVhZGFibGUtcHVzaC1iYWNrLXJlYWRlclxyXG4gW3JlYWRhYmxlXVxyXG4gKFB1c2hiYWNrUmVhZGVyLlxyXG4gIChOb2RlUmVhZGFibGVSZWFkZXIuIHJlYWRhYmxlIG5pbClcclxuICAob2JqZWN0LWFycmF5IDEpXHJcbiAgMVxyXG4gIDEpKVxyXG4ifSB7OnN5bSBnZXQtbGluZS1udW1iZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0pLCBjbGpzLmVudiAoezpzeW0gKmNvbXBpbGVyKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNvbXBpbGVyKiBuaWwpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtY29tcGlsZXItZW52KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcHRpb25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVmYXVsdC1jb21waWxlci1lbnYqXHJcbiBbb3B0aW9uc11cclxuIChtZXJnZVxyXG4gIHs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIHsnY2xqcy51c2VyIHs6bmFtZSAnY2xqcy51c2VyfX0sXHJcbiAgIDpjbGpzLmFuYWx5emVyL2NvbnN0YW50LXRhYmxlIHt9LFxyXG4gICA6Y2xqcy5hbmFseXplci9kYXRhLXJlYWRlcnMge30sXHJcbiAgIDpjbGpzLmFuYWx5emVyL2V4dGVybnNcclxuICAgIz8oOmNsaiAoZXh0ZXJucy9leHRlcm5zLW1hcCAoOmV4dGVybnMtc291cmNlcyBvcHRpb25zKSkgOmNsanMgbmlsKSxcclxuICAgOm9wdGlvbnMgb3B0aW9uc31cclxuICAjP0AoOmNsaiBbKHdoZW4gKGFuZCAoPSA6bm9kZWpzICg6dGFyZ2V0IG9wdGlvbnMpKSAobm90IChmYWxzZT8gKDpub2RlanMtcnQgb3B0aW9ucykpKSkgezpub2RlLW1vZHVsZS1pbmRleCBkZXBzL25hdGl2ZS1ub2RlLW1vZHVsZXN9KSB7OmpzLWRlcGVuZGVuY3ktaW5kZXggKGRlcHMvanMtZGVwZW5kZW5jeS1pbmRleCBvcHRpb25zKX1dKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtY29tcGlsZXItZW52LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW10gW29wdGlvbnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWZhdWx0LWNvbXBpbGVyLWVudlxyXG4gKFtdIChkZWZhdWx0LWNvbXBpbGVyLWVudiB7fSkpXHJcbiAoW29wdGlvbnNdIChhdG9tIChkZWZhdWx0LWNvbXBpbGVyLWVudiogb3B0aW9ucykpKSlcclxuIn0pLCBwYXJlbi1zb3VwLmNvbnNvbGUgKHs6c3ltIGNyZWF0ZS1jb25zb2xlLWhpc3RvcnksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3JlYXRlLWNvbnNvbGUtaGlzdG9yeVxyXG4gW11cclxuIChhdG9tIHs6Y3VycmVudC1saW5lIDAsIDpsaW5lcyBbXSwgOnN0YXJ0IDB9KSlcclxuIn0gezpzeW0gZ2V0LWNvbnNvbGUtc3RhcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jb25zb2xlLXN0YXJ0XHJcbiBbKmNvbnNvbGUtaGlzdG9yeV1cclxuICgtPiAqY29uc29sZS1oaXN0b3J5IGRlcmVmIDpzdGFydCkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1jb25zb2xlLXN0YXJ0ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5IHN0YXJ0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWNvbnNvbGUtc3RhcnQhXHJcbiBbKmNvbnNvbGUtaGlzdG9yeSBzdGFydF1cclxuIChzd2FwISAqY29uc29sZS1oaXN0b3J5IGFzc29jIDpzdGFydCBzdGFydCkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1jb25zb2xlLWhpc3RvcnkhLCA6bWV0YSB7OmRvYyAiVXBkYXRlcyB0aGUgY29uc29sZSBoaXN0b3J5IGF0b20uIiwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeSBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWNvbnNvbGUtaGlzdG9yeSFcclxuIFwiVXBkYXRlcyB0aGUgY29uc29sZSBoaXN0b3J5IGF0b20uXCJcclxuIFsqY29uc29sZS1oaXN0b3J5IGxpbmVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1saW5lIGxpbmVzXX0gQCpjb25zb2xlLWhpc3RvcnldXHJcbiAgKHN3YXAhXHJcbiAgICpjb25zb2xlLWhpc3RvcnlcclxuICAgKGZuXHJcbiAgICBbY29uc29sZS1oaXN0b3J5XVxyXG4gICAgKGxldFxyXG4gICAgIFtsaW5lc1xyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgKHNlcSBsaW5lKSAobm90PSBsaW5lIChsYXN0IGxpbmVzKSkpXHJcbiAgICAgICAoY29uaiBsaW5lcyBsaW5lKVxyXG4gICAgICAgbGluZXMpXVxyXG4gICAgIChhc3NvY1xyXG4gICAgICBjb25zb2xlLWhpc3RvcnlcclxuICAgICAgOmN1cnJlbnQtbGluZVxyXG4gICAgICAoY291bnQgbGluZXMpXHJcbiAgICAgIDpsaW5lc1xyXG4gICAgICBsaW5lcykpKSkpKVxyXG4ifSB7OnN5bSBnZXQtcHJldmlvdXMtbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByZXZpb3VzIGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtcHJldmlvdXMtbGluZVxyXG4gXCJSZXR1cm5zIHRoZSBwcmV2aW91cyBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWypjb25zb2xlLWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1saW5lIGxpbmVzXX0gQCpjb25zb2xlLWhpc3RvcnldXHJcbiAgKGdldCBsaW5lcyAoZGVjIGN1cnJlbnQtbGluZSkpKSlcclxuIn0gezpzeW0gZ2V0LW5leHQtbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1uZXh0LWxpbmVcclxuIFwiUmV0dXJucyB0aGUgbmV4dCBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWypjb25zb2xlLWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1saW5lIGxpbmVzXX0gQCpjb25zb2xlLWhpc3RvcnldXHJcbiAgKGdldCBsaW5lcyAoaW5jIGN1cnJlbnQtbGluZSkpKSlcclxuIn0gezpzeW0gdXAhLCA6bWV0YSB7OmRvYyAiQ2hhbmdlcyB0aGUgY3VycmVudCBsaW5lIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gdXAhXHJcbiBcIkNoYW5nZXMgdGhlIGN1cnJlbnQgbGluZSBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqY29uc29sZS1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFtsaW5lIChnZXQtcHJldmlvdXMtbGluZSAqY29uc29sZS1oaXN0b3J5KV1cclxuICAoaWZcclxuICAgbGluZVxyXG4gICAoc3dhcCEgKmNvbnNvbGUtaGlzdG9yeSB1cGRhdGUgOmN1cnJlbnQtbGluZSBkZWMpXHJcbiAgIChzd2FwISAqY29uc29sZS1oaXN0b3J5IGFzc29jIDpjdXJyZW50LWxpbmUgLTEpKVxyXG4gIGxpbmUpKVxyXG4ifSB7OnN5bSBkb3duISwgOm1ldGEgezpkb2MgIkNoYW5nZXMgdGhlIGN1cnJlbnQgbGluZSBhbmQgcmV0dXJucyB0aGUgbmV4dCBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZG93biFcclxuIFwiQ2hhbmdlcyB0aGUgY3VycmVudCBsaW5lIGFuZCByZXR1cm5zIHRoZSBuZXh0IGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmNvbnNvbGUtaGlzdG9yeV1cclxuIChsZXRcclxuICBbbGluZSAoZ2V0LW5leHQtbGluZSAqY29uc29sZS1oaXN0b3J5KV1cclxuICAoaWZcclxuICAgbGluZVxyXG4gICAoc3dhcCEgKmNvbnNvbGUtaGlzdG9yeSB1cGRhdGUgOmN1cnJlbnQtbGluZSBpbmMpXHJcbiAgIChzd2FwIVxyXG4gICAgKmNvbnNvbGUtaGlzdG9yeVxyXG4gICAgYXNzb2NcclxuICAgIDpjdXJyZW50LWxpbmVcclxuICAgICgtPiBAKmNvbnNvbGUtaGlzdG9yeSA6bGluZXMgY291bnQpKSlcclxuICBsaW5lKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMgKHs6c3ltIFB1YiwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHN1YiogdW5zdWIqIHVuc3ViLWFsbCopfSB7OnN5bSByZWR1Y2UsIDptZXRhIHs6ZG9jICJmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDIgYXJndW1lbnRzLiBSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nXG4gIHRoZSBzaW5nbGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gaW5pdCBhbmQgdGhlIGZpcnN0IGl0ZW0gZnJvbSB0aGVcbiAgY2hhbm5lbCwgdGhlbiBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWZcbiAgdGhlIGNoYW5uZWwgY2xvc2VzIHdpdGhvdXQgeWllbGRpbmcgaXRlbXMsIHJldHVybnMgaW5pdCBhbmQgZiBpcyBub3RcbiAgY2FsbGVkLiBjaCBtdXN0IGNsb3NlIGJlZm9yZSByZWR1Y2UgcHJvZHVjZXMgYSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbZiBpbml0IGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlXHJcbiBcImYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgMiBhcmd1bWVudHMuIFJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmdcXG4gIHRoZSBzaW5nbGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gaW5pdCBhbmQgdGhlIGZpcnN0IGl0ZW0gZnJvbSB0aGVcXG4gIGNoYW5uZWwsIHRoZW4gYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmXFxuICB0aGUgY2hhbm5lbCBjbG9zZXMgd2l0aG91dCB5aWVsZGluZyBpdGVtcywgcmV0dXJucyBpbml0IGFuZCBmIGlzIG5vdFxcbiAgY2FsbGVkLiBjaCBtdXN0IGNsb3NlIGJlZm9yZSByZWR1Y2UgcHJvZHVjZXMgYSByZXN1bHQuXCJcclxuIFtmIGluaXQgY2hdXHJcbiAoZ28tbG9vcFxyXG4gIFtyZXQgaW5pdF1cclxuICAobGV0XHJcbiAgIFt2ICg8ISBjaCldXHJcbiAgIChpZlxyXG4gICAgKG5pbD8gdilcclxuICAgIHJldFxyXG4gICAgKGxldCBbcmV0JyAoZiByZXQgdildIChpZiAocmVkdWNlZD8gcmV0JykgQHJldCcgKHJlY3VyIHJldCcpKSkpKSkpXHJcbiJ9IHs6c3ltIHJlbW92ZT4sIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgKFtwIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlPlxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gW3AgY2hdXHJcbiAoZmlsdGVyPiAoY29tcGxlbWVudCBwKSBjaCkpXHJcbiJ9IHs6c3ltIHRpbWVvdXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgY2xvc2UgYWZ0ZXIgbXNlY3MiLCA6YXJnbGlzdHMgKFttc2Vjc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRpbWVvdXRcclxuIFwiUmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIGNsb3NlIGFmdGVyIG1zZWNzXCJcclxuIFttc2Vjc11cclxuICh0aW1lcnMvdGltZW91dCBtc2VjcykpXHJcbiJ9IHs6c3ltIHVuc3ViKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwIHYgY2hdKX0sIDpwcm90b2NvbCBQdWJ9IHs6c3ltIGFkbWl4KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIGNoXSl9LCA6cHJvdG9jb2wgTWl4fSB7OnN5bSB1bm1peCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBjaF0pfSwgOnByb3RvY29sIE1peH0gezpzeW0gbWl4LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG1peCBvZiBvbmUgb3IgbW9yZSBpbnB1dCBjaGFubmVscyB3aGljaCB3aWxsXG4gIGJlIHB1dCBvbiB0aGUgc3VwcGxpZWQgb3V0IGNoYW5uZWwuIElucHV0IHNvdXJjZXMgY2FuIGJlIGFkZGVkIHRvXG4gIHRoZSBtaXggd2l0aCAnYWRtaXgnLCBhbmQgcmVtb3ZlZCB3aXRoICd1bm1peCcuIEEgbWl4IHN1cHBvcnRzXG4gIHNvbG9pbmcsIG11dGluZyBhbmQgcGF1c2luZyBtdWx0aXBsZSBpbnB1dHMgYXRvbWljYWxseSB1c2luZ1xuICAndG9nZ2xlJywgYW5kIGNhbiBzb2xvIHVzaW5nIGVpdGhlciBtdXRpbmcgb3IgcGF1c2luZyBhcyBkZXRlcm1pbmVkXG4gIGJ5ICdzb2xvLW1vZGUnLlxuXG4gIEVhY2ggY2hhbm5lbCBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgYm9vbGVhbiBtb2RlcyBzZXQgdmlhICd0b2dnbGUnOlxuXG4gIDpzb2xvIC0gd2hlbiB0cnVlLCBvbmx5IHRoaXMgKG9uZCBvdGhlciBzb2xvZWQpIGNoYW5uZWwocykgd2lsbCBhcHBlYXJcbiAgICAgICAgICBpbiB0aGUgbWl4IG91dHB1dCBjaGFubmVsLiA6bXV0ZSBhbmQgOnBhdXNlIHN0YXRlcyBvZiBzb2xvZWRcbiAgICAgICAgICBjaGFubmVscyBhcmUgaWdub3JlZC4gSWYgc29sby1tb2RlIGlzIDptdXRlLCBub24tc29sb2VkXG4gICAgICAgICAgY2hhbm5lbHMgYXJlIG11dGVkLCBpZiA6cGF1c2UsIG5vbi1zb2xvZWQgY2hhbm5lbHMgYXJlXG4gICAgICAgICAgcGF1c2VkLlxuXG4gIDptdXRlIC0gbXV0ZWQgY2hhbm5lbHMgd2lsbCBoYXZlIHRoZWlyIGNvbnRlbnRzIGNvbnN1bWVkIGJ1dCBub3QgaW5jbHVkZWQgaW4gdGhlIG1peFxuICA6cGF1c2UgLSBwYXVzZWQgY2hhbm5lbHMgd2lsbCBub3QgaGF2ZSB0aGVpciBjb250ZW50cyBjb25zdW1lZCAoYW5kIHRodXMgYWxzbyBub3QgaW5jbHVkZWQgaW4gdGhlIG1peClcbiIsIDphcmdsaXN0cyAoW291dF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1peFxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGEgbWl4IG9mIG9uZSBvciBtb3JlIGlucHV0IGNoYW5uZWxzIHdoaWNoIHdpbGxcXG4gIGJlIHB1dCBvbiB0aGUgc3VwcGxpZWQgb3V0IGNoYW5uZWwuIElucHV0IHNvdXJjZXMgY2FuIGJlIGFkZGVkIHRvXFxuICB0aGUgbWl4IHdpdGggJ2FkbWl4JywgYW5kIHJlbW92ZWQgd2l0aCAndW5taXgnLiBBIG1peCBzdXBwb3J0c1xcbiAgc29sb2luZywgbXV0aW5nIGFuZCBwYXVzaW5nIG11bHRpcGxlIGlucHV0cyBhdG9taWNhbGx5IHVzaW5nXFxuICAndG9nZ2xlJywgYW5kIGNhbiBzb2xvIHVzaW5nIGVpdGhlciBtdXRpbmcgb3IgcGF1c2luZyBhcyBkZXRlcm1pbmVkXFxuICBieSAnc29sby1tb2RlJy5cXG5cXG4gIEVhY2ggY2hhbm5lbCBjYW4gaGF2ZSB6ZXJvIG9yIG1vcmUgYm9vbGVhbiBtb2RlcyBzZXQgdmlhICd0b2dnbGUnOlxcblxcbiAgOnNvbG8gLSB3aGVuIHRydWUsIG9ubHkgdGhpcyAob25kIG90aGVyIHNvbG9lZCkgY2hhbm5lbChzKSB3aWxsIGFwcGVhclxcbiAgICAgICAgICBpbiB0aGUgbWl4IG91dHB1dCBjaGFubmVsLiA6bXV0ZSBhbmQgOnBhdXNlIHN0YXRlcyBvZiBzb2xvZWRcXG4gICAgICAgICAgY2hhbm5lbHMgYXJlIGlnbm9yZWQuIElmIHNvbG8tbW9kZSBpcyA6bXV0ZSwgbm9uLXNvbG9lZFxcbiAgICAgICAgICBjaGFubmVscyBhcmUgbXV0ZWQsIGlmIDpwYXVzZSwgbm9uLXNvbG9lZCBjaGFubmVscyBhcmVcXG4gICAgICAgICAgcGF1c2VkLlxcblxcbiAgOm11dGUgLSBtdXRlZCBjaGFubmVscyB3aWxsIGhhdmUgdGhlaXIgY29udGVudHMgY29uc3VtZWQgYnV0IG5vdCBpbmNsdWRlZCBpbiB0aGUgbWl4XFxuICA6cGF1c2UgLSBwYXVzZWQgY2hhbm5lbHMgd2lsbCBub3QgaGF2ZSB0aGVpciBjb250ZW50cyBjb25zdW1lZCAoYW5kIHRodXMgYWxzbyBub3QgaW5jbHVkZWQgaW4gdGhlIG1peClcXG5cIlxyXG4gW291dF1cclxuIChsZXRcclxuICBbY3NcclxuICAgKGF0b20ge30pXHJcbiAgIHNvbG8tbW9kZXNcclxuICAgI3s6cGF1c2UgOm11dGV9XHJcbiAgIGF0dHJzXHJcbiAgIChjb25qIHNvbG8tbW9kZXMgOnNvbG8pXHJcbiAgIHNvbG8tbW9kZVxyXG4gICAoYXRvbSA6bXV0ZSlcclxuICAgY2hhbmdlXHJcbiAgIChjaGFuKVxyXG4gICBjaGFuZ2VkXHJcbiAgIChmbiogW10gKHB1dCEgY2hhbmdlIHRydWUpKVxyXG4gICBwaWNrXHJcbiAgIChmblxyXG4gICAgW2F0dHIgY2hzXVxyXG4gICAgKHJlZHVjZS1rdiAoZm4gW3JldCBjIHZdIChpZiAoYXR0ciB2KSAoY29uaiByZXQgYykgcmV0KSkgI3t9IGNocykpXHJcbiAgIGNhbGMtc3RhdGVcclxuICAgKGZuXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFtjaHNcclxuICAgICAgQGNzXHJcbiAgICAgIG1vZGVcclxuICAgICAgQHNvbG8tbW9kZVxyXG4gICAgICBzb2xvc1xyXG4gICAgICAocGljayA6c29sbyBjaHMpXHJcbiAgICAgIHBhdXNlc1xyXG4gICAgICAocGljayA6cGF1c2UgY2hzKV1cclxuICAgICB7OnNvbG9zIHNvbG9zLFxyXG4gICAgICA6bXV0ZXMgKHBpY2sgOm11dGUgY2hzKSxcclxuICAgICAgOnJlYWRzXHJcbiAgICAgIChjb25qXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoYW5kICg9IG1vZGUgOnBhdXNlKSAobm90IChlbXB0eT8gc29sb3MpKSlcclxuICAgICAgICAodmVjIHNvbG9zKVxyXG4gICAgICAgICh2ZWMgKHJlbW92ZSBwYXVzZXMgKGtleXMgY2hzKSkpKVxyXG4gICAgICAgY2hhbmdlKX0pKVxyXG4gICBtXHJcbiAgIChyZWlmeVxyXG4gICAgTXV4XHJcbiAgICAobXV4Y2gqIFtfXSBvdXQpXHJcbiAgICBNaXhcclxuICAgIChhZG1peCogW18gY2hdIChzd2FwISBjcyBhc3NvYyBjaCB7fSkgKGNoYW5nZWQpKVxyXG4gICAgKHVubWl4KiBbXyBjaF0gKHN3YXAhIGNzIGRpc3NvYyBjaCkgKGNoYW5nZWQpKVxyXG4gICAgKHVubWl4LWFsbCogW19dIChyZXNldCEgY3Mge30pIChjaGFuZ2VkKSlcclxuICAgICh0b2dnbGUqXHJcbiAgICAgW18gc3RhdGUtbWFwXVxyXG4gICAgIChzd2FwISBjcyAocGFydGlhbCBtZXJnZS13aXRoIGNsanMuY29yZS9tZXJnZSkgc3RhdGUtbWFwKVxyXG4gICAgIChjaGFuZ2VkKSlcclxuICAgIChzb2xvLW1vZGUqXHJcbiAgICAgW18gbW9kZV1cclxuICAgICAoYXNzZXJ0XHJcbiAgICAgIChzb2xvLW1vZGVzIG1vZGUpXHJcbiAgICAgIChzdHIgXCJtb2RlIG11c3QgYmUgb25lIG9mOiBcIiBzb2xvLW1vZGVzKSlcclxuICAgICAocmVzZXQhIHNvbG8tbW9kZSBtb2RlKVxyXG4gICAgIChjaGFuZ2VkKSkpXVxyXG4gIChnby1sb29wXHJcbiAgIFt7OmtleXMgW3NvbG9zIG11dGVzIHJlYWRzXSwgOmFzIHN0YXRlfSAoY2FsYy1zdGF0ZSldXHJcbiAgIChsZXRcclxuICAgIFtbdiBjXSAoYWx0cyEgcmVhZHMpXVxyXG4gICAgKGlmXHJcbiAgICAgKG9yIChuaWw/IHYpICg9IGMgY2hhbmdlKSlcclxuICAgICAoZG8gKHdoZW4gKG5pbD8gdikgKHN3YXAhIGNzIGRpc3NvYyBjKSkgKHJlY3VyIChjYWxjLXN0YXRlKSkpXHJcbiAgICAgKGlmXHJcbiAgICAgIChvciAoc29sb3MgYykgKGFuZCAoZW1wdHk/IHNvbG9zKSAobm90IChtdXRlcyBjKSkpKVxyXG4gICAgICAod2hlbiAoPiEgb3V0IHYpIChyZWN1ciBzdGF0ZSkpXHJcbiAgICAgIChyZWN1ciBzdGF0ZSkpKSkpXHJcbiAgbSkpXHJcbiJ9IHs6c3ltIHB1YiwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBwdWIobGljYXRpb24pIG9mIHRoZSBzdXBwbGllZCBjaGFubmVsLFxuICBwYXJ0aXRpb25lZCBpbnRvIHRvcGljcyBieSB0aGUgdG9waWMtZm4uIHRvcGljLWZuIHdpbGwgYmUgYXBwbGllZCB0b1xuICBlYWNoIHZhbHVlIG9uIHRoZSBjaGFubmVsIGFuZCB0aGUgcmVzdWx0IHdpbGwgZGV0ZXJtaW5lIHRoZSAndG9waWMnXG4gIG9uIHdoaWNoIHRoYXQgdmFsdWUgd2lsbCBiZSBwdXQuIENoYW5uZWxzIGNhbiBiZSBzdWJzY3JpYmVkIHRvXG4gIHJlY2VpdmUgY29waWVzIG9mIHRvcGljcyB1c2luZyAnc3ViJywgYW5kIHVuc3Vic2NyaWJlZCB1c2luZ1xuICAndW5zdWInLiBFYWNoIHRvcGljIHdpbGwgYmUgaGFuZGxlZCBieSBhbiBpbnRlcm5hbCBtdWx0IG9uIGFcbiAgZGVkaWNhdGVkIGNoYW5uZWwuIEJ5IGRlZmF1bHQgdGhlc2UgaW50ZXJuYWwgY2hhbm5lbHMgYXJlXG4gIHVuYnVmZmVyZWQsIGJ1dCBhIGJ1Zi1mbiBjYW4gYmUgc3VwcGxpZWQgd2hpY2gsIGdpdmVuIGEgdG9waWMsXG4gIGNyZWF0ZXMgYSBidWZmZXIgd2l0aCBkZXNpcmVkIHByb3BlcnRpZXMuXG5cbiAgRWFjaCBpdGVtIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCBzdWJzIGluIHBhcmFsbGVsIGFuZCBzeW5jaHJvbm91c2x5LFxuICBpLmUuIGVhY2ggc3ViIG11c3QgYWNjZXB0IGJlZm9yZSB0aGUgbmV4dCBpdGVtIGlzIGRpc3RyaWJ1dGVkLiBVc2VcbiAgYnVmZmVyaW5nL3dpbmRvd2luZyB0byBwcmV2ZW50IHNsb3cgc3VicyBmcm9tIGhvbGRpbmcgdXAgdGhlIHB1Yi5cblxuICBJdGVtcyByZWNlaXZlZCB3aGVuIHRoZXJlIGFyZSBubyBtYXRjaGluZyBzdWJzIGdldCBkcm9wcGVkLlxuXG4gIE5vdGUgdGhhdCBpZiBidWYtZm5zIGFyZSB1c2VkIHRoZW4gZWFjaCB0b3BpYyBpcyBoYW5kbGVkXG4gIGFzeW5jaHJvbm91c2x5LCBpLmUuIGlmIGEgY2hhbm5lbCBpcyBzdWJzY3JpYmVkIHRvIG1vcmUgdGhhbiBvbmVcbiAgdG9waWMgaXQgc2hvdWxkIG5vdCBleHBlY3QgdGhlbSB0byBiZSBpbnRlcmxlYXZlZCBpZGVudGljYWxseSB3aXRoXG4gIHRoZSBzb3VyY2UuIiwgOmFyZ2xpc3RzIFtbY2ggdG9waWMtZm5dIFtjaCB0b3BpYy1mbiBidWYtZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwdWJcclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHB1YihsaWNhdGlvbikgb2YgdGhlIHN1cHBsaWVkIGNoYW5uZWwsXFxuICBwYXJ0aXRpb25lZCBpbnRvIHRvcGljcyBieSB0aGUgdG9waWMtZm4uIHRvcGljLWZuIHdpbGwgYmUgYXBwbGllZCB0b1xcbiAgZWFjaCB2YWx1ZSBvbiB0aGUgY2hhbm5lbCBhbmQgdGhlIHJlc3VsdCB3aWxsIGRldGVybWluZSB0aGUgJ3RvcGljJ1xcbiAgb24gd2hpY2ggdGhhdCB2YWx1ZSB3aWxsIGJlIHB1dC4gQ2hhbm5lbHMgY2FuIGJlIHN1YnNjcmliZWQgdG9cXG4gIHJlY2VpdmUgY29waWVzIG9mIHRvcGljcyB1c2luZyAnc3ViJywgYW5kIHVuc3Vic2NyaWJlZCB1c2luZ1xcbiAgJ3Vuc3ViJy4gRWFjaCB0b3BpYyB3aWxsIGJlIGhhbmRsZWQgYnkgYW4gaW50ZXJuYWwgbXVsdCBvbiBhXFxuICBkZWRpY2F0ZWQgY2hhbm5lbC4gQnkgZGVmYXVsdCB0aGVzZSBpbnRlcm5hbCBjaGFubmVscyBhcmVcXG4gIHVuYnVmZmVyZWQsIGJ1dCBhIGJ1Zi1mbiBjYW4gYmUgc3VwcGxpZWQgd2hpY2gsIGdpdmVuIGEgdG9waWMsXFxuICBjcmVhdGVzIGEgYnVmZmVyIHdpdGggZGVzaXJlZCBwcm9wZXJ0aWVzLlxcblxcbiAgRWFjaCBpdGVtIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCBzdWJzIGluIHBhcmFsbGVsIGFuZCBzeW5jaHJvbm91c2x5LFxcbiAgaS5lLiBlYWNoIHN1YiBtdXN0IGFjY2VwdCBiZWZvcmUgdGhlIG5leHQgaXRlbSBpcyBkaXN0cmlidXRlZC4gVXNlXFxuICBidWZmZXJpbmcvd2luZG93aW5nIHRvIHByZXZlbnQgc2xvdyBzdWJzIGZyb20gaG9sZGluZyB1cCB0aGUgcHViLlxcblxcbiAgSXRlbXMgcmVjZWl2ZWQgd2hlbiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgc3VicyBnZXQgZHJvcHBlZC5cXG5cXG4gIE5vdGUgdGhhdCBpZiBidWYtZm5zIGFyZSB1c2VkIHRoZW4gZWFjaCB0b3BpYyBpcyBoYW5kbGVkXFxuICBhc3luY2hyb25vdXNseSwgaS5lLiBpZiBhIGNoYW5uZWwgaXMgc3Vic2NyaWJlZCB0byBtb3JlIHRoYW4gb25lXFxuICB0b3BpYyBpdCBzaG91bGQgbm90IGV4cGVjdCB0aGVtIHRvIGJlIGludGVybGVhdmVkIGlkZW50aWNhbGx5IHdpdGhcXG4gIHRoZSBzb3VyY2UuXCJcclxuIChbY2ggdG9waWMtZm5dIChwdWIgY2ggdG9waWMtZm4gKGNvbnN0YW50bHkgbmlsKSkpXHJcbiAoW2NoIHRvcGljLWZuIGJ1Zi1mbl1cclxuICAobGV0XHJcbiAgIFttdWx0c1xyXG4gICAgKGF0b20ge30pXHJcbiAgICBlbnN1cmUtbXVsdFxyXG4gICAgKGZuXHJcbiAgICAgW3RvcGljXVxyXG4gICAgIChvclxyXG4gICAgICAoZ2V0IEBtdWx0cyB0b3BpYylcclxuICAgICAgKGdldFxyXG4gICAgICAgKHN3YXAhXHJcbiAgICAgICAgbXVsdHNcclxuICAgICAgICAoZm4qXHJcbiAgICAgICAgIFtwMV9fNDg2NjgjXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChwMV9fNDg2NjgjIHRvcGljKVxyXG4gICAgICAgICAgcDFfXzQ4NjY4I1xyXG4gICAgICAgICAgKGFzc29jIHAxX180ODY2OCMgdG9waWMgKG11bHQgKGNoYW4gKGJ1Zi1mbiB0b3BpYykpKSkpKSlcclxuICAgICAgIHRvcGljKSkpXHJcbiAgICBwXHJcbiAgICAocmVpZnlcclxuICAgICBNdXhcclxuICAgICAobXV4Y2gqIFtfXSBjaClcclxuICAgICBQdWJcclxuICAgICAoc3ViKlxyXG4gICAgICBbcCB0b3BpYyBjaCBjbG9zZT9dXHJcbiAgICAgIChsZXQgW20gKGVuc3VyZS1tdWx0IHRvcGljKV0gKHRhcCBtIGNoIGNsb3NlPykpKVxyXG4gICAgICh1bnN1YipcclxuICAgICAgW3AgdG9waWMgY2hdXHJcbiAgICAgICh3aGVuLWxldCBbbSAoZ2V0IEBtdWx0cyB0b3BpYyldICh1bnRhcCBtIGNoKSkpXHJcbiAgICAgKHVuc3ViLWFsbCogW19dIChyZXNldCEgbXVsdHMge30pKVxyXG4gICAgICh1bnN1Yi1hbGwqIFtfIHRvcGljXSAoc3dhcCEgbXVsdHMgZGlzc29jIHRvcGljKSkpXVxyXG4gICAoZ28tbG9vcFxyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbdmFsICg8ISBjaCldXHJcbiAgICAgKGlmXHJcbiAgICAgIChuaWw/IHZhbClcclxuICAgICAgKGRvc2VxIFttICh2YWxzIEBtdWx0cyldIChjbG9zZSEgKG11eGNoKiBtKSkpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFt0b3BpYyAodG9waWMtZm4gdmFsKSBtIChnZXQgQG11bHRzIHRvcGljKV1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgbVxyXG4gICAgICAgICh3aGVuLW5vdCAoPiEgKG11eGNoKiBtKSB2YWwpIChzd2FwISBtdWx0cyBkaXNzb2MgdG9waWMpKSlcclxuICAgICAgIChyZWN1cikpKSkpXHJcbiAgIHApKSlcclxuIn0gezpzeW0gdGFrZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCByZXR1cm4sIGF0IG1vc3QsIG4gaXRlbXMgZnJvbSBjaC4gQWZ0ZXIgbiBpdGVtc1xuICAgaGF2ZSBiZWVuIHJldHVybmVkLCBvciBjaCBoYXMgYmVlbiBjbG9zZWQsIHRoZSByZXR1cm4gY2hhbmVsIHdpbGwgY2xvc2UuXG5cbiAgVGhlIG91dHB1dCBjaGFubmVsIGlzIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgdW5sZXNzIGJ1Zi1vci1uIGlzIGdpdmVuLiIsIDphcmdsaXN0cyBbW24gY2hdIFtuIGNoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gdGFrZVxyXG4gXCJSZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgcmV0dXJuLCBhdCBtb3N0LCBuIGl0ZW1zIGZyb20gY2guIEFmdGVyIG4gaXRlbXNcXG4gICBoYXZlIGJlZW4gcmV0dXJuZWQsIG9yIGNoIGhhcyBiZWVuIGNsb3NlZCwgdGhlIHJldHVybiBjaGFuZWwgd2lsbCBjbG9zZS5cXG5cXG4gIFRoZSBvdXRwdXQgY2hhbm5lbCBpcyB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIHVubGVzcyBidWYtb3ItbiBpcyBnaXZlbi5cIlxyXG4gKFtuIGNoXSAodGFrZSBuIGNoIG5pbCkpXHJcbiAoW24gY2ggYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvXHJcbiAgICAobG9vcFxyXG4gICAgIFt4IDBdXHJcbiAgICAgKHdoZW5cclxuICAgICAgKDwgeCBuKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbdiAoPCEgY2gpXVxyXG4gICAgICAgKHdoZW4gKG5vdCAobmlsPyB2KSkgKD4hIG91dCB2KSAocmVjdXIgKGluYyB4KSkpKSkpXHJcbiAgICAoY2xvc2UhIG91dCkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSB1bnN1Yi1hbGwqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BdIFtwIHZdKX0sIDpwcm90b2NvbCBQdWJ9IHs6c3ltIDwhLCA6bWV0YSB7OmRvYyAidGFrZXMgYSB2YWwgZnJvbSBwb3J0LiBNdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gV2lsbFxuICByZXR1cm4gbmlsIGlmIGNsb3NlZC4gV2lsbCBwYXJrIGlmIG5vdGhpbmcgaXMgYXZhaWxhYmxlLlxuICBSZXR1cm5zIHRydWUgdW5sZXNzIHBvcnQgaXMgYWxyZWFkeSBjbG9zZWQiLCA6YXJnbGlzdHMgKFtwb3J0XSl9LCA6c291cmNlICIoZGVmblxyXG4gPCFcclxuIFwidGFrZXMgYSB2YWwgZnJvbSBwb3J0LiBNdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gV2lsbFxcbiAgcmV0dXJuIG5pbCBpZiBjbG9zZWQuIFdpbGwgcGFyayBpZiBub3RoaW5nIGlzIGF2YWlsYWJsZS5cXG4gIFJldHVybnMgdHJ1ZSB1bmxlc3MgcG9ydCBpcyBhbHJlYWR5IGNsb3NlZFwiXHJcbiBbcG9ydF1cclxuICh0aHJvdyAoanMvRXJyb3IuIFwiPCEgdXNlZCBub3QgaW4gKGdvIC4uLikgYmxvY2tcIikpKVxyXG4ifSB7OnN5bSBtYXAsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZ1bmN0aW9uIGFuZCBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNoYW5uZWxzLCBhbmQgcmV0dXJucyBhXG4gIGNoYW5uZWwgd2hpY2ggY29udGFpbnMgdGhlIHZhbHVlcyBwcm9kdWNlZCBieSBhcHBseWluZyBmIHRvIHRoZSBzZXRcbiAgb2YgZmlyc3QgaXRlbXMgdGFrZW4gZnJvbSBlYWNoIHNvdXJjZSBjaGFubmVsLCBmb2xsb3dlZCBieSBhcHBseWluZ1xuICBmIHRvIHRoZSBzZXQgb2Ygc2Vjb25kIGl0ZW1zIGZyb20gZWFjaCBjaGFubmVsLCB1bnRpbCBhbnkgb25lIG9mIHRoZVxuICBjaGFubmVscyBpcyBjbG9zZWQsIGF0IHdoaWNoIHBvaW50IHRoZSBvdXRwdXQgY2hhbm5lbCB3aWxsIGJlXG4gIGNsb3NlZC4gVGhlIHJldHVybmVkIGNoYW5uZWwgd2lsbCBiZSB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIGFcbiAgYnVmLW9yLW4gY2FuIGJlIHN1cHBsaWVkIiwgOmFyZ2xpc3RzIFtbZiBjaHNdIFtmIGNocyBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcFxyXG4gXCJUYWtlcyBhIGZ1bmN0aW9uIGFuZCBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNoYW5uZWxzLCBhbmQgcmV0dXJucyBhXFxuICBjaGFubmVsIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZXMgcHJvZHVjZWQgYnkgYXBwbHlpbmcgZiB0byB0aGUgc2V0XFxuICBvZiBmaXJzdCBpdGVtcyB0YWtlbiBmcm9tIGVhY2ggc291cmNlIGNoYW5uZWwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nXFxuICBmIHRvIHRoZSBzZXQgb2Ygc2Vjb25kIGl0ZW1zIGZyb20gZWFjaCBjaGFubmVsLCB1bnRpbCBhbnkgb25lIG9mIHRoZVxcbiAgY2hhbm5lbHMgaXMgY2xvc2VkLCBhdCB3aGljaCBwb2ludCB0aGUgb3V0cHV0IGNoYW5uZWwgd2lsbCBiZVxcbiAgY2xvc2VkLiBUaGUgcmV0dXJuZWQgY2hhbm5lbCB3aWxsIGJlIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgYVxcbiAgYnVmLW9yLW4gY2FuIGJlIHN1cHBsaWVkXCJcclxuIChbZiBjaHNdIChtYXAgZiBjaHMgbmlsKSlcclxuIChbZiBjaHMgYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbY2hzXHJcbiAgICAodmVjIGNocylcclxuICAgIG91dFxyXG4gICAgKGNoYW4gYnVmLW9yLW4pXHJcbiAgICBjbnRcclxuICAgIChjb3VudCBjaHMpXHJcbiAgICByZXRzXHJcbiAgICAob2JqZWN0LWFycmF5IGNudClcclxuICAgIGRjaGFuXHJcbiAgICAoY2hhbiAxKVxyXG4gICAgZGN0clxyXG4gICAgKGF0b20gbmlsKVxyXG4gICAgZG9uZVxyXG4gICAgKG1hcHZcclxuICAgICAoZm5cclxuICAgICAgW2ldXHJcbiAgICAgIChmblxyXG4gICAgICAgW3JldF1cclxuICAgICAgIChhc2V0IHJldHMgaSByZXQpXHJcbiAgICAgICAod2hlbiAoemVybz8gKHN3YXAhIGRjdHIgZGVjKSkgKHB1dCEgZGNoYW4gKC5zbGljZSByZXRzIDApKSkpKVxyXG4gICAgIChyYW5nZSBjbnQpKV1cclxuICAgKGdvLWxvb3BcclxuICAgIFtdXHJcbiAgICAocmVzZXQhIGRjdHIgY250KVxyXG4gICAgKGRvdGltZXNcclxuICAgICBbaSBjbnRdXHJcbiAgICAgKHRyeVxyXG4gICAgICAodGFrZSEgKGNocyBpKSAoZG9uZSBpKSlcclxuICAgICAgKGNhdGNoIGpzL09iamVjdCBlIChzd2FwISBkY3RyIGRlYykpKSlcclxuICAgIChsZXRcclxuICAgICBbcmV0cyAoPCEgZGNoYW4pXVxyXG4gICAgIChpZlxyXG4gICAgICAoc29tZSBuaWw/IHJldHMpXHJcbiAgICAgIChjbG9zZSEgb3V0KVxyXG4gICAgICAoZG8gKD4hIG91dCAoYXBwbHkgZiByZXRzKSkgKHJlY3VyKSkpKSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIE11eCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKG11eGNoKil9IHs6c3ltIG1hcGNhdD4sIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1tmIG91dF0gW2Ygb3V0IGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwY2F0PlxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtmIG91dF0gKG1hcGNhdD4gZiBvdXQgbmlsKSlcclxuIChbZiBvdXQgYnVmLW9yLW5dIChsZXQgW2luIChjaGFuIGJ1Zi1vci1uKV0gKG1hcGNhdCogZiBpbiBvdXQpIGluKSkpXHJcbiJ9IHs6c3ltIGJ1ZmZlciwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBmaXhlZCBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBibG9jay9wYXJrLiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBidWZmZXJcclxuIFwiUmV0dXJucyBhIGZpeGVkIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGJsb2NrL3BhcmsuXCJcclxuIFtuXVxyXG4gKGJ1ZmZlcnMvZml4ZWQtYnVmZmVyIG4pKVxyXG4ifSB7OnN5bSBjbG9zZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcG9ydF1dfSwgOnNvdXJjZSAiKGRlZm4gY2xvc2UhIChbcG9ydF0gKGltcGwvY2xvc2UhIHBvcnQpKSlcclxuIn0gezpzeW0gb2ZmZXIhLCA6bWV0YSB7OmRvYyAiUHV0cyBhIHZhbCBpbnRvIHBvcnQgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseS5cbiAgbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIE5ldmVyIGJsb2Nrcy4gUmV0dXJucyB0cnVlIGlmIG9mZmVyIHN1Y2NlZWRzLiIsIDphcmdsaXN0cyAoW3BvcnQgdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gb2ZmZXIhXHJcbiBcIlB1dHMgYSB2YWwgaW50byBwb3J0IGlmIGl0J3MgcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkuXFxuICBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gTmV2ZXIgYmxvY2tzLiBSZXR1cm5zIHRydWUgaWYgb2ZmZXIgc3VjY2VlZHMuXCJcclxuIFtwb3J0IHZhbF1cclxuIChsZXRcclxuICBbcmV0IChpbXBsL3B1dCEgcG9ydCB2YWwgKGZuLWhhbmRsZXIgbm9wIGZhbHNlKSldXHJcbiAgKHdoZW4gcmV0IEByZXQpKSlcclxuIn0gezpzeW0gY2hhbiwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBjaGFubmVsIHdpdGggYW4gb3B0aW9uYWwgYnVmZmVyLCBhbiBvcHRpb25hbCB0cmFuc2R1Y2VyIChsaWtlIChtYXAgZiksXG4gIChmaWx0ZXIgcCkgZXRjIG9yIGEgY29tcG9zaXRpb24gdGhlcmVvZiksIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gaGFuZGxlci5cbiAgSWYgYnVmLW9yLW4gaXMgYSBudW1iZXIsIHdpbGwgY3JlYXRlIGFuZCB1c2UgYSBmaXhlZCBidWZmZXIgb2YgdGhhdCBzaXplLiBJZiBhXG4gIHRyYW5zZHVjZXIgaXMgc3VwcGxpZWQgYSBidWZmZXIgbXVzdCBiZSBzcGVjaWZpZWQuIGV4LWhhbmRsZXIgbXVzdCBiZSBhXG4gIGZuIG9mIG9uZSBhcmd1bWVudCAtIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIHRyYW5zZm9ybWF0aW9uIGl0IHdpbGwgYmUgY2FsbGVkXG4gIHdpdGggdGhlIHRocm93biB2YWx1ZSBhcyBhbiBhcmd1bWVudCwgYW5kIGFueSBub24tbmlsIHJldHVybiB2YWx1ZSB3aWxsIGJlIHBsYWNlZFxuICBpbiB0aGUgY2hhbm5lbC4iLCA6YXJnbGlzdHMgW1tdIFtidWYtb3Itbl0gW2J1Zi1vci1uIHhmb3JtXSBbYnVmLW9yLW4geGZvcm0gZXgtaGFuZGxlcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYW5cclxuIFwiQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aCBhbiBvcHRpb25hbCBidWZmZXIsIGFuIG9wdGlvbmFsIHRyYW5zZHVjZXIgKGxpa2UgKG1hcCBmKSxcXG4gIChmaWx0ZXIgcCkgZXRjIG9yIGEgY29tcG9zaXRpb24gdGhlcmVvZiksIGFuZCBhbiBvcHRpb25hbCBleGNlcHRpb24gaGFuZGxlci5cXG4gIElmIGJ1Zi1vci1uIGlzIGEgbnVtYmVyLCB3aWxsIGNyZWF0ZSBhbmQgdXNlIGEgZml4ZWQgYnVmZmVyIG9mIHRoYXQgc2l6ZS4gSWYgYVxcbiAgdHJhbnNkdWNlciBpcyBzdXBwbGllZCBhIGJ1ZmZlciBtdXN0IGJlIHNwZWNpZmllZC4gZXgtaGFuZGxlciBtdXN0IGJlIGFcXG4gIGZuIG9mIG9uZSBhcmd1bWVudCAtIGlmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgZHVyaW5nIHRyYW5zZm9ybWF0aW9uIGl0IHdpbGwgYmUgY2FsbGVkXFxuICB3aXRoIHRoZSB0aHJvd24gdmFsdWUgYXMgYW4gYXJndW1lbnQsIGFuZCBhbnkgbm9uLW5pbCByZXR1cm4gdmFsdWUgd2lsbCBiZSBwbGFjZWRcXG4gIGluIHRoZSBjaGFubmVsLlwiXHJcbiAoW10gKGNoYW4gbmlsKSlcclxuIChbYnVmLW9yLW5dIChjaGFuIGJ1Zi1vci1uIG5pbCBuaWwpKVxyXG4gKFtidWYtb3ItbiB4Zm9ybV0gKGNoYW4gYnVmLW9yLW4geGZvcm0gbmlsKSlcclxuIChbYnVmLW9yLW4geGZvcm0gZXgtaGFuZGxlcl1cclxuICAobGV0XHJcbiAgIFtidWYtb3ItbiAoaWYgKD0gYnVmLW9yLW4gMCkgbmlsIGJ1Zi1vci1uKV1cclxuICAgKHdoZW5cclxuICAgIHhmb3JtXHJcbiAgICAoYXNzZXJ0IGJ1Zi1vci1uIFwiYnVmZmVyIG11c3QgYmUgc3VwcGxpZWQgd2hlbiB0cmFuc2R1Y2VyIGlzXCIpKVxyXG4gICAoY2hhbm5lbHMvY2hhblxyXG4gICAgKGlmIChudW1iZXI/IGJ1Zi1vci1uKSAoYnVmZmVyIGJ1Zi1vci1uKSBidWYtb3ItbilcclxuICAgIHhmb3JtXHJcbiAgICBleC1oYW5kbGVyKSkpKVxyXG4ifSB7OnN5bSBzb2xvLW1vZGUqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gbW9kZV0pfSwgOnByb3RvY29sIE1peH0gezpzeW0gdGFwLCA6bWV0YSB7OmRvYyAiQ29waWVzIHRoZSBtdWx0IHNvdXJjZSBvbnRvIHRoZSBzdXBwbGllZCBjaGFubmVsLlxuXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgc291cmNlIGNsb3NlcyxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLiIsIDphcmdsaXN0cyBbW211bHQgY2hdIFttdWx0IGNoIGNsb3NlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRhcFxyXG4gXCJDb3BpZXMgdGhlIG11bHQgc291cmNlIG9udG8gdGhlIHN1cHBsaWVkIGNoYW5uZWwuXFxuXFxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIHNvdXJjZSBjbG9zZXMsXFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuXCJcclxuIChbbXVsdCBjaF0gKHRhcCBtdWx0IGNoIHRydWUpKVxyXG4gKFttdWx0IGNoIGNsb3NlP10gKHRhcCogbXVsdCBjaCBjbG9zZT8pIGNoKSlcclxuIn0gezpzeW0gYWRtaXgsIDptZXRhIHs6ZG9jICJBZGRzIGNoIGFzIGFuIGlucHV0IHRvIHRoZSBtaXgiLCA6YXJnbGlzdHMgKFttaXggY2hdKX0sIDpzb3VyY2UgIihkZWZuIGFkbWl4IFwiQWRkcyBjaCBhcyBhbiBpbnB1dCB0byB0aGUgbWl4XCIgW21peCBjaF0gKGFkbWl4KiBtaXggY2gpKVxyXG4ifSB7OnN5bSBwcm9taXNlLWNoYW4sIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgcHJvbWlzZSBjaGFubmVsIHdpdGggYW4gb3B0aW9uYWwgdHJhbnNkdWNlciwgYW5kIGFuIG9wdGlvbmFsXG4gIGV4Y2VwdGlvbi1oYW5kbGVyLiBBIHByb21pc2UgY2hhbm5lbCBjYW4gdGFrZSBleGFjdGx5IG9uZSB2YWx1ZSB0aGF0IGNvbnN1bWVyc1xuICB3aWxsIHJlY2VpdmUuIE9uY2UgZnVsbCwgcHV0cyBjb21wbGV0ZSBidXQgdmFsIGlzIGRyb3BwZWQgKG5vIHRyYW5zZmVyKS5cbiAgQ29uc3VtZXJzIHdpbGwgYmxvY2sgdW50aWwgZWl0aGVyIGEgdmFsdWUgaXMgcGxhY2VkIGluIHRoZSBjaGFubmVsIG9yIHRoZVxuICBjaGFubmVsIGlzIGNsb3NlZC4gU2VlIGNoYW4gZm9yIHRoZSBzZW1hbnRpY3Mgb2YgeGZvcm0gYW5kIGV4LWhhbmRsZXIuIiwgOmFyZ2xpc3RzIFtbXSBbeGZvcm1dIFt4Zm9ybSBleC1oYW5kbGVyXV19LCA6c291cmNlICIoZGVmblxyXG4gcHJvbWlzZS1jaGFuXHJcbiBcIkNyZWF0ZXMgYSBwcm9taXNlIGNoYW5uZWwgd2l0aCBhbiBvcHRpb25hbCB0cmFuc2R1Y2VyLCBhbmQgYW4gb3B0aW9uYWxcXG4gIGV4Y2VwdGlvbi1oYW5kbGVyLiBBIHByb21pc2UgY2hhbm5lbCBjYW4gdGFrZSBleGFjdGx5IG9uZSB2YWx1ZSB0aGF0IGNvbnN1bWVyc1xcbiAgd2lsbCByZWNlaXZlLiBPbmNlIGZ1bGwsIHB1dHMgY29tcGxldGUgYnV0IHZhbCBpcyBkcm9wcGVkIChubyB0cmFuc2ZlcikuXFxuICBDb25zdW1lcnMgd2lsbCBibG9jayB1bnRpbCBlaXRoZXIgYSB2YWx1ZSBpcyBwbGFjZWQgaW4gdGhlIGNoYW5uZWwgb3IgdGhlXFxuICBjaGFubmVsIGlzIGNsb3NlZC4gU2VlIGNoYW4gZm9yIHRoZSBzZW1hbnRpY3Mgb2YgeGZvcm0gYW5kIGV4LWhhbmRsZXIuXCJcclxuIChbXSAocHJvbWlzZS1jaGFuIG5pbCkpXHJcbiAoW3hmb3JtXSAocHJvbWlzZS1jaGFuIHhmb3JtIG5pbCkpXHJcbiAoW3hmb3JtIGV4LWhhbmRsZXJdIChjaGFuIChidWZmZXJzL3Byb21pc2UtYnVmZmVyKSB4Zm9ybSBleC1oYW5kbGVyKSkpXHJcbiJ9IHs6c3ltIHVuaXF1ZSwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW2NoXSBbY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmlxdWVcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbY2hdICh1bmlxdWUgY2ggbmlsKSlcclxuIChbY2ggYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvXHJcbiAgICAobG9vcFxyXG4gICAgIFtsYXN0IG5pbF1cclxuICAgICAobGV0XHJcbiAgICAgIFt2ICg8ISBjaCldXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAobm90IChuaWw/IHYpKVxyXG4gICAgICAgKGlmICg9IHYgbGFzdCkgKHJlY3VyIGxhc3QpIChkbyAoPiEgb3V0IHYpIChyZWN1ciB2KSkpKSkpXHJcbiAgICAoY2xvc2UhIG91dCkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSBtdXhjaCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbX10pfSwgOnByb3RvY29sIE11eH0gezpzeW0gc29sby1tb2RlLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgc29sbyBtb2RlIG9mIHRoZSBtaXguIG1vZGUgbXVzdCBiZSBvbmUgb2YgOm11dGUgb3IgOnBhdXNlIiwgOmFyZ2xpc3RzIChbbWl4IG1vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb2xvLW1vZGVcclxuIFwiU2V0cyB0aGUgc29sbyBtb2RlIG9mIHRoZSBtaXguIG1vZGUgbXVzdCBiZSBvbmUgb2YgOm11dGUgb3IgOnBhdXNlXCJcclxuIFttaXggbW9kZV1cclxuIChzb2xvLW1vZGUqIG1peCBtb2RlKSlcclxuIn0gezpzeW0gdHJhbnNkdWNlLCA6bWV0YSB7OmRvYyAiYXN5bmMvcmVkdWNlcyBhIGNoYW5uZWwgd2l0aCBhIHRyYW5zZm9ybWF0aW9uICh4Zm9ybSBmKS5cbiAgUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZyB0aGUgcmVzdWx0LiAgY2ggbXVzdCBjbG9zZSBiZWZvcmVcbiAgdHJhbnNkdWNlIHByb2R1Y2VzIGEgcmVzdWx0LiIsIDphcmdsaXN0cyAoW3hmb3JtIGYgaW5pdCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zZHVjZVxyXG4gXCJhc3luYy9yZWR1Y2VzIGEgY2hhbm5lbCB3aXRoIGEgdHJhbnNmb3JtYXRpb24gKHhmb3JtIGYpLlxcbiAgUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZyB0aGUgcmVzdWx0LiAgY2ggbXVzdCBjbG9zZSBiZWZvcmVcXG4gIHRyYW5zZHVjZSBwcm9kdWNlcyBhIHJlc3VsdC5cIlxyXG4gW3hmb3JtIGYgaW5pdCBjaF1cclxuIChsZXQgW2YgKHhmb3JtIGYpXSAoZ28gKGxldCBbcmV0ICg8ISAocmVkdWNlIGYgaW5pdCBjaCkpXSAoZiByZXQpKSkpKVxyXG4ifSB7OnN5bSBvbnRvLWNoYW4sIDptZXRhIHs6ZG9jICJQdXRzIHRoZSBjb250ZW50cyBvZiBjb2xsIGludG8gdGhlIHN1cHBsaWVkIGNoYW5uZWwuXG5cbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCBhZnRlciB0aGUgaXRlbXMgYXJlIGNvcGllZCxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLlxuXG4gIFJldHVybnMgYSBjaGFubmVsIHdoaWNoIHdpbGwgY2xvc2UgYWZ0ZXIgdGhlIGl0ZW1zIGFyZSBjb3BpZWQuIiwgOmFyZ2xpc3RzIFtbY2ggY29sbF0gW2NoIGNvbGwgY2xvc2U/XV19LCA6c291cmNlICIoZGVmblxyXG4gb250by1jaGFuXHJcbiBcIlB1dHMgdGhlIGNvbnRlbnRzIG9mIGNvbGwgaW50byB0aGUgc3VwcGxpZWQgY2hhbm5lbC5cXG5cXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgdGhlIGl0ZW1zIGFyZSBjb3BpZWQsXFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuXFxuXFxuICBSZXR1cm5zIGEgY2hhbm5lbCB3aGljaCB3aWxsIGNsb3NlIGFmdGVyIHRoZSBpdGVtcyBhcmUgY29waWVkLlwiXHJcbiAoW2NoIGNvbGxdIChvbnRvLWNoYW4gY2ggY29sbCB0cnVlKSlcclxuIChbY2ggY29sbCBjbG9zZT9dXHJcbiAgKGdvLWxvb3BcclxuICAgW3ZzIChzZXEgY29sbCldXHJcbiAgIChpZlxyXG4gICAgKGFuZCB2cyAoPiEgY2ggKGZpcnN0IHZzKSkpXHJcbiAgICAocmVjdXIgKG5leHQgdnMpKVxyXG4gICAgKHdoZW4gY2xvc2U/IChjbG9zZSEgY2gpKSkpKSlcclxuIn0gezpzeW0gdG8tY2hhbiwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBjaGFubmVsIHdoaWNoIGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBjb2xsLFxuICBjbG9zaW5nIHdoZW4gZXhoYXVzdGVkLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0by1jaGFuXHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBjaGFubmVsIHdoaWNoIGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBjb2xsLFxcbiAgY2xvc2luZyB3aGVuIGV4aGF1c3RlZC5cIlxyXG4gW2NvbGxdXHJcbiAobGV0IFtjaCAoY2hhbiAoYm91bmRlZC1jb3VudCAxMDAgY29sbCkpXSAob250by1jaGFuIGNoIGNvbGwpIGNoKSlcclxuIn0gezpzeW0gZHJvcHBpbmctYnVmZmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGNvbXBsZXRlIGJ1dFxuICB2YWwgd2lsbCBiZSBkcm9wcGVkIChubyB0cmFuc2ZlcikuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRyb3BwaW5nLWJ1ZmZlclxyXG4gXCJSZXR1cm5zIGEgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgY29tcGxldGUgYnV0XFxuICB2YWwgd2lsbCBiZSBkcm9wcGVkIChubyB0cmFuc2ZlcikuXCJcclxuIFtuXVxyXG4gKGJ1ZmZlcnMvZHJvcHBpbmctYnVmZmVyIG4pKVxyXG4ifSB7OnN5bSB1bnRhcC1hbGwsIDptZXRhIHs6ZG9jICJEaXNjb25uZWN0cyBhbGwgdGFyZ2V0IGNoYW5uZWxzIGZyb20gYSBtdWx0IiwgOmFyZ2xpc3RzIChbbXVsdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVudGFwLWFsbFxyXG4gXCJEaXNjb25uZWN0cyBhbGwgdGFyZ2V0IGNoYW5uZWxzIGZyb20gYSBtdWx0XCJcclxuIFttdWx0XVxyXG4gKHVudGFwLWFsbCogbXVsdCkpXHJcbiJ9IHs6c3ltIGludG8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nIHRoZSBzaW5nbGUgKGNvbGxlY3Rpb24pIHJlc3VsdCBvZiB0aGVcbiAgaXRlbXMgdGFrZW4gZnJvbSB0aGUgY2hhbm5lbCBjb25qb2luZWQgdG8gdGhlIHN1cHBsaWVkXG4gIGNvbGxlY3Rpb24uIGNoIG11c3QgY2xvc2UgYmVmb3JlIGludG8gcHJvZHVjZXMgYSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbY29sbCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludG9cclxuIFwiUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZyB0aGUgc2luZ2xlIChjb2xsZWN0aW9uKSByZXN1bHQgb2YgdGhlXFxuICBpdGVtcyB0YWtlbiBmcm9tIHRoZSBjaGFubmVsIGNvbmpvaW5lZCB0byB0aGUgc3VwcGxpZWRcXG4gIGNvbGxlY3Rpb24uIGNoIG11c3QgY2xvc2UgYmVmb3JlIGludG8gcHJvZHVjZXMgYSByZXN1bHQuXCJcclxuIFtjb2xsIGNoXVxyXG4gKHJlZHVjZSBjb25qIGNvbGwgY2gpKVxyXG4ifSB7OnN5bSBwaXBlbGluZSwgOm1ldGEgezpkb2MgIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cbiAgY2hhbm5lbCwgc3ViamVjdCB0byB0aGUgdHJhbnNkdWNlciB4Ziwgd2l0aCBwYXJhbGxlbGlzbSBuLiBCZWNhdXNlXG4gIGl0IGlzIHBhcmFsbGVsLCB0aGUgdHJhbnNkdWNlciB3aWxsIGJlIGFwcGxpZWQgaW5kZXBlbmRlbnRseSB0byBlYWNoXG4gIGVsZW1lbnQsIG5vdCBhY3Jvc3MgZWxlbWVudHMsIGFuZCBtYXkgcHJvZHVjZSB6ZXJvIG9yIG1vcmUgb3V0cHV0c1xuICBwZXIgaW5wdXQuICBPdXRwdXRzIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIgcmVsYXRpdmUgdG8gdGhlXG4gIGlucHV0cy4gQnkgZGVmYXVsdCwgdGhlIHRvIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbVxuICBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbFxuICBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbSBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3Nlcy5cblxuICBOb3RlIHRoaXMgaXMgc3VwcGxpZWQgZm9yIEFQSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIENsb2p1cmUgdmVyc2lvbi5cbiAgVmFsdWVzIG9mIE4gPiAxIHdpbGwgbm90IHJlc3VsdCBpbiBhY3R1YWwgY29uY3VycmVuY3kgaW4gYVxuICBzaW5nbGUtdGhyZWFkZWQgcnVudGltZS4iLCA6YXJnbGlzdHMgW1tuIHRvIHhmIGZyb21dIFtuIHRvIHhmIGZyb20gY2xvc2U/XSBbbiB0byB4ZiBmcm9tIGNsb3NlPyBleC1oYW5kbGVyXV19LCA6c291cmNlICIoZGVmblxyXG4gcGlwZWxpbmVcclxuIFwiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xcbiAgY2hhbm5lbCwgc3ViamVjdCB0byB0aGUgdHJhbnNkdWNlciB4Ziwgd2l0aCBwYXJhbGxlbGlzbSBuLiBCZWNhdXNlXFxuICBpdCBpcyBwYXJhbGxlbCwgdGhlIHRyYW5zZHVjZXIgd2lsbCBiZSBhcHBsaWVkIGluZGVwZW5kZW50bHkgdG8gZWFjaFxcbiAgZWxlbWVudCwgbm90IGFjcm9zcyBlbGVtZW50cywgYW5kIG1heSBwcm9kdWNlIHplcm8gb3IgbW9yZSBvdXRwdXRzXFxuICBwZXIgaW5wdXQuICBPdXRwdXRzIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIgcmVsYXRpdmUgdG8gdGhlXFxuICBpbnB1dHMuIEJ5IGRlZmF1bHQsIHRoZSB0byBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb21cXG4gIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsXFxuICBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbSBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3Nlcy5cXG5cXG4gIE5vdGUgdGhpcyBpcyBzdXBwbGllZCBmb3IgQVBJIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQ2xvanVyZSB2ZXJzaW9uLlxcbiAgVmFsdWVzIG9mIE4gPiAxIHdpbGwgbm90IHJlc3VsdCBpbiBhY3R1YWwgY29uY3VycmVuY3kgaW4gYVxcbiAgc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWUuXCJcclxuIChbbiB0byB4ZiBmcm9tXSAocGlwZWxpbmUgbiB0byB4ZiBmcm9tIHRydWUpKVxyXG4gKFtuIHRvIHhmIGZyb20gY2xvc2U/XSAocGlwZWxpbmUgbiB0byB4ZiBmcm9tIGNsb3NlPyBuaWwpKVxyXG4gKFtuIHRvIHhmIGZyb20gY2xvc2U/IGV4LWhhbmRsZXJdXHJcbiAgKHBpcGVsaW5lKiBuIHRvIHhmIGZyb20gY2xvc2U/IGV4LWhhbmRsZXIgOmNvbXB1dGUpKSlcclxuIn0gezpzeW0gc3ViLCA6bWV0YSB7OmRvYyAiU3Vic2NyaWJlcyBhIGNoYW5uZWwgdG8gYSB0b3BpYyBvZiBhIHB1Yi5cblxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIHNvdXJjZSBjbG9zZXMsXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci4iLCA6YXJnbGlzdHMgW1twIHRvcGljIGNoXSBbcCB0b3BpYyBjaCBjbG9zZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdWJcclxuIFwiU3Vic2NyaWJlcyBhIGNoYW5uZWwgdG8gYSB0b3BpYyBvZiBhIHB1Yi5cXG5cXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgc291cmNlIGNsb3NlcyxcXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci5cIlxyXG4gKFtwIHRvcGljIGNoXSAoc3ViIHAgdG9waWMgY2ggdHJ1ZSkpXHJcbiAoW3AgdG9waWMgY2ggY2xvc2U/XSAoc3ViKiBwIHRvcGljIGNoIGNsb3NlPykpKVxyXG4ifSB7OnN5bSBtYXA+LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIChbZiBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcD5cclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIFtmIGNoXVxyXG4gKHJlaWZ5XHJcbiAgaW1wbC9DaGFubmVsXHJcbiAgKGNsb3NlISBbX10gKGltcGwvY2xvc2UhIGNoKSlcclxuICBpbXBsL1JlYWRQb3J0XHJcbiAgKHRha2UhIFtfIGZuMV0gKGltcGwvdGFrZSEgY2ggZm4xKSlcclxuICBpbXBsL1dyaXRlUG9ydFxyXG4gIChwdXQhIFtfIHZhbCBmbjFdIChpbXBsL3B1dCEgY2ggKGYgdmFsKSBmbjEpKSkpXHJcbiJ9IHs6c3ltIHBpcGUsIDptZXRhIHs6ZG9jICJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXG4gICBjaGFubmVsLiBCeSBkZWZhdWx0LCB0aGUgdG8gY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tXG4gICBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbFxuICAgc3RvcCBjb25zdW1pbmcgdGhlIGZyb20gY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXMiLCA6YXJnbGlzdHMgW1tmcm9tIHRvXSBbZnJvbSB0byBjbG9zZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwaXBlXHJcbiBcIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cXG4gICBjaGFubmVsLiBCeSBkZWZhdWx0LCB0aGUgdG8gY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tXFxuICAgY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGxcXG4gICBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbSBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3Nlc1wiXHJcbiAoW2Zyb20gdG9dIChwaXBlIGZyb20gdG8gdHJ1ZSkpXHJcbiAoW2Zyb20gdG8gY2xvc2U/XVxyXG4gIChnby1sb29wXHJcbiAgIFtdXHJcbiAgIChsZXRcclxuICAgIFt2ICg8ISBmcm9tKV1cclxuICAgIChpZiAobmlsPyB2KSAod2hlbiBjbG9zZT8gKGNsb3NlISB0bykpICh3aGVuICg+ISB0byB2KSAocmVjdXIpKSkpKVxyXG4gIHRvKSlcclxuIn0gezpzeW0gdW5taXgsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGNoIGFzIGFuIGlucHV0IHRvIHRoZSBtaXgiLCA6YXJnbGlzdHMgKFttaXggY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bm1peFxyXG4gXCJSZW1vdmVzIGNoIGFzIGFuIGlucHV0IHRvIHRoZSBtaXhcIlxyXG4gW21peCBjaF1cclxuICh1bm1peCogbWl4IGNoKSlcclxuIn0gezpzeW0gZmlsdGVyPCwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW3AgY2hdIFtwIGNoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gZmlsdGVyPFxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtwIGNoXSAoZmlsdGVyPCBwIGNoIG5pbCkpXHJcbiAoW3AgY2ggYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvLWxvb3BcclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW3ZhbCAoPCEgY2gpXVxyXG4gICAgIChpZlxyXG4gICAgICAobmlsPyB2YWwpXHJcbiAgICAgIChjbG9zZSEgb3V0KVxyXG4gICAgICAoZG8gKHdoZW4gKHAgdmFsKSAoPiEgb3V0IHZhbCkpIChyZWN1cikpKSkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSBzdWIqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3AgdiBjaCBjbG9zZT9dKX0sIDpwcm90b2NvbCBQdWJ9IHs6c3ltIHJlbW92ZTwsIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1twIGNoXSBbcCBjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZTxcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbcCBjaF0gKHJlbW92ZTwgcCBjaCBuaWwpKVxyXG4gKFtwIGNoIGJ1Zi1vci1uXSAoZmlsdGVyPCAoY29tcGxlbWVudCBwKSBjaCBidWYtb3ItbikpKVxyXG4ifSB7OnN5bSB1bnRhcCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBjaF0pfSwgOnByb3RvY29sIE11bHR9IHs6c3ltIHRvZ2dsZSwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgc2V0cyB0aGUgc3RhdGUocykgb2Ygb25lIG9yIG1vcmUgY2hhbm5lbHMgaW4gYSBtaXguIFRoZVxuICBzdGF0ZSBtYXAgaXMgYSBtYXAgb2YgY2hhbm5lbHMgLT4gY2hhbm5lbC1zdGF0ZS1tYXAuIEFcbiAgY2hhbm5lbC1zdGF0ZS1tYXAgaXMgYSBtYXAgb2YgYXR0cnMgLT4gYm9vbGVhbiwgd2hlcmUgYXR0ciBpcyBvbmUgb3JcbiAgbW9yZSBvZiA6bXV0ZSwgOnBhdXNlIG9yIDpzb2xvLiBBbnkgc3RhdGVzIHN1cHBsaWVkIGFyZSBtZXJnZWQgd2l0aFxuICB0aGUgY3VycmVudCBzdGF0ZS5cblxuICBOb3RlIHRoYXQgY2hhbm5lbHMgY2FuIGJlIGFkZGVkIHRvIGEgbWl4IHZpYSB0b2dnbGUsIHdoaWNoIGNhbiBiZVxuICB1c2VkIHRvIGFkZCBjaGFubmVscyBpbiBhIHBhcnRpY3VsYXIgKGUuZy4gcGF1c2VkKSBzdGF0ZS4iLCA6YXJnbGlzdHMgKFttaXggc3RhdGUtbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gdG9nZ2xlXHJcbiBcIkF0b21pY2FsbHkgc2V0cyB0aGUgc3RhdGUocykgb2Ygb25lIG9yIG1vcmUgY2hhbm5lbHMgaW4gYSBtaXguIFRoZVxcbiAgc3RhdGUgbWFwIGlzIGEgbWFwIG9mIGNoYW5uZWxzIC0+IGNoYW5uZWwtc3RhdGUtbWFwLiBBXFxuICBjaGFubmVsLXN0YXRlLW1hcCBpcyBhIG1hcCBvZiBhdHRycyAtPiBib29sZWFuLCB3aGVyZSBhdHRyIGlzIG9uZSBvclxcbiAgbW9yZSBvZiA6bXV0ZSwgOnBhdXNlIG9yIDpzb2xvLiBBbnkgc3RhdGVzIHN1cHBsaWVkIGFyZSBtZXJnZWQgd2l0aFxcbiAgdGhlIGN1cnJlbnQgc3RhdGUuXFxuXFxuICBOb3RlIHRoYXQgY2hhbm5lbHMgY2FuIGJlIGFkZGVkIHRvIGEgbWl4IHZpYSB0b2dnbGUsIHdoaWNoIGNhbiBiZVxcbiAgdXNlZCB0byBhZGQgY2hhbm5lbHMgaW4gYSBwYXJ0aWN1bGFyIChlLmcuIHBhdXNlZCkgc3RhdGUuXCJcclxuIFttaXggc3RhdGUtbWFwXVxyXG4gKHRvZ2dsZSogbWl4IHN0YXRlLW1hcCkpXHJcbiJ9IHs6c3ltIHVudGFwLWFsbCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbV0pfSwgOnByb3RvY29sIE11bHR9IHs6c3ltIHNsaWRpbmctYnVmZmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGNvbXBsZXRlLCBhbmQgYmVcbiAgYnVmZmVyZWQsIGJ1dCBvbGRlc3QgZWxlbWVudHMgaW4gYnVmZmVyIHdpbGwgYmUgZHJvcHBlZCAobm90XG4gIHRyYW5zZmVycmVkKS4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2xpZGluZy1idWZmZXJcclxuIFwiUmV0dXJucyBhIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGNvbXBsZXRlLCBhbmQgYmVcXG4gIGJ1ZmZlcmVkLCBidXQgb2xkZXN0IGVsZW1lbnRzIGluIGJ1ZmZlciB3aWxsIGJlIGRyb3BwZWQgKG5vdFxcbiAgdHJhbnNmZXJyZWQpLlwiXHJcbiBbbl1cclxuIChidWZmZXJzL3NsaWRpbmctYnVmZmVyIG4pKVxyXG4ifSB7OnN5bSBwYXJ0aXRpb24sIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1tuIGNoXSBbbiBjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpdGlvblxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtuIGNoXSAocGFydGl0aW9uIG4gY2ggbmlsKSlcclxuIChbbiBjaCBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ29cclxuICAgIChsb29wXHJcbiAgICAgW2FyciAobWFrZS1hcnJheSBuKSBpZHggMF1cclxuICAgICAobGV0XHJcbiAgICAgIFt2ICg8ISBjaCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG5vdCAobmlsPyB2KSlcclxuICAgICAgIChkb1xyXG4gICAgICAgIChhc2V0IGFyciBpZHggdilcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtuZXctaWR4IChpbmMgaWR4KV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAoPCBuZXctaWR4IG4pXHJcbiAgICAgICAgICAocmVjdXIgYXJyIG5ldy1pZHgpXHJcbiAgICAgICAgICAoZG8gKD4hIG91dCAodmVjIGFycikpIChyZWN1ciAobWFrZS1hcnJheSBuKSAwKSkpKSlcclxuICAgICAgIChkbyAod2hlbiAoPiBpZHggMCkgKD4hIG91dCAodmVjIGFycikpKSAoY2xvc2UhIG91dCkpKSkpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gTXVsdCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHRhcCogdW50YXAqIHVudGFwLWFsbCopfSB7OnN5bSBtZXJnZSwgOm1ldGEgezpkb2MgIlRha2VzIGEgY29sbGVjdGlvbiBvZiBzb3VyY2UgY2hhbm5lbHMgYW5kIHJldHVybnMgYSBjaGFubmVsIHdoaWNoXG4gIGNvbnRhaW5zIGFsbCB2YWx1ZXMgdGFrZW4gZnJvbSB0aGVtLiBUaGUgcmV0dXJuZWQgY2hhbm5lbCB3aWxsIGJlXG4gIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgYSBidWYtb3ItbiBjYW4gYmUgc3VwcGxpZWQuIFRoZSBjaGFubmVsXG4gIHdpbGwgY2xvc2UgYWZ0ZXIgYWxsIHRoZSBzb3VyY2UgY2hhbm5lbHMgaGF2ZSBjbG9zZWQuIiwgOmFyZ2xpc3RzIFtbY2hzXSBbY2hzIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2VcclxuIFwiVGFrZXMgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBjaGFubmVscyBhbmQgcmV0dXJucyBhIGNoYW5uZWwgd2hpY2hcXG4gIGNvbnRhaW5zIGFsbCB2YWx1ZXMgdGFrZW4gZnJvbSB0aGVtLiBUaGUgcmV0dXJuZWQgY2hhbm5lbCB3aWxsIGJlXFxuICB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIGEgYnVmLW9yLW4gY2FuIGJlIHN1cHBsaWVkLiBUaGUgY2hhbm5lbFxcbiAgd2lsbCBjbG9zZSBhZnRlciBhbGwgdGhlIHNvdXJjZSBjaGFubmVscyBoYXZlIGNsb3NlZC5cIlxyXG4gKFtjaHNdIChtZXJnZSBjaHMgbmlsKSlcclxuIChbY2hzIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnby1sb29wXHJcbiAgICBbY3MgKHZlYyBjaHMpXVxyXG4gICAgKGlmXHJcbiAgICAgKHBvcz8gKGNvdW50IGNzKSlcclxuICAgICAobGV0XHJcbiAgICAgIFtbdiBjXSAoYWx0cyEgY3MpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChuaWw/IHYpXHJcbiAgICAgICAocmVjdXIgKGZpbHRlcnYgKGZuKiBbcDFfXzQ4NjY5I10gKG5vdD0gYyBwMV9fNDg2NjkjKSkgY3MpKVxyXG4gICAgICAgKGRvICg+ISBvdXQgdikgKHJlY3VyIGNzKSkpKVxyXG4gICAgIChjbG9zZSEgb3V0KSkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSBwYXJ0aXRpb24tYnksIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1tmIGNoXSBbZiBjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpdGlvbi1ieVxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtmIGNoXSAocGFydGl0aW9uLWJ5IGYgY2ggbmlsKSlcclxuIChbZiBjaCBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ29cclxuICAgIChsb29wXHJcbiAgICAgW2xzdCAobWFrZS1hcnJheSAwKSBsYXN0IDpjbGpzLmNvcmUuYXN5bmMvbm90aGluZ11cclxuICAgICAobGV0XHJcbiAgICAgIFt2ICg8ISBjaCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG5vdCAobmlsPyB2KSlcclxuICAgICAgIChsZXRcclxuICAgICAgICBbbmV3LWl0bSAoZiB2KV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKG9yXHJcbiAgICAgICAgICAoPSBuZXctaXRtIGxhc3QpXHJcbiAgICAgICAgICAoa2V5d29yZC1pZGVudGljYWw/IGxhc3QgOmNsanMuY29yZS5hc3luYy9ub3RoaW5nKSlcclxuICAgICAgICAgKGRvICgucHVzaCBsc3QgdikgKHJlY3VyIGxzdCBuZXctaXRtKSlcclxuICAgICAgICAgKGRvXHJcbiAgICAgICAgICAoPiEgb3V0ICh2ZWMgbHN0KSlcclxuICAgICAgICAgIChsZXRcclxuICAgICAgICAgICBbbmV3LWxzdCAobWFrZS1hcnJheSAwKV1cclxuICAgICAgICAgICAoLnB1c2ggbmV3LWxzdCB2KVxyXG4gICAgICAgICAgIChyZWN1ciBuZXctbHN0IG5ldy1pdG0pKSkpKVxyXG4gICAgICAgKGRvXHJcbiAgICAgICAgKHdoZW4gKD4gKGFsZW5ndGggbHN0KSAwKSAoPiEgb3V0ICh2ZWMgbHN0KSkpXHJcbiAgICAgICAgKGNsb3NlISBvdXQpKSkpKSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIHVuc3ViLWFsbCwgOm1ldGEgezpkb2MgIlVuc3Vic2NyaWJlcyBhbGwgY2hhbm5lbHMgZnJvbSBhIHB1Yiwgb3IgYSB0b3BpYyBvZiBhIHB1YiIsIDphcmdsaXN0cyBbW3BdIFtwIHRvcGljXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5zdWItYWxsXHJcbiBcIlVuc3Vic2NyaWJlcyBhbGwgY2hhbm5lbHMgZnJvbSBhIHB1Yiwgb3IgYSB0b3BpYyBvZiBhIHB1YlwiXHJcbiAoW3BdICh1bnN1Yi1hbGwqIHApKVxyXG4gKFtwIHRvcGljXSAodW5zdWItYWxsKiBwIHRvcGljKSkpXHJcbiJ9IHs6c3ltID4hLCA6bWV0YSB7OmRvYyAicHV0cyBhIHZhbCBpbnRvIHBvcnQuIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBNdXN0IGJlIGNhbGxlZFxuICBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gV2lsbCBwYXJrIGlmIG5vIGJ1ZmZlciBzcGFjZSBpcyBhdmFpbGFibGUuXG4gIFJldHVybnMgdHJ1ZSB1bmxlc3MgcG9ydCBpcyBhbHJlYWR5IGNsb3NlZC4iLCA6YXJnbGlzdHMgKFtwb3J0IHZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuID4hXHJcbiBcInB1dHMgYSB2YWwgaW50byBwb3J0LiBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gTXVzdCBiZSBjYWxsZWRcXG4gIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBXaWxsIHBhcmsgaWYgbm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZS5cXG4gIFJldHVybnMgdHJ1ZSB1bmxlc3MgcG9ydCBpcyBhbHJlYWR5IGNsb3NlZC5cIlxyXG4gW3BvcnQgdmFsXVxyXG4gKHRocm93IChqcy9FcnJvci4gXCI+ISB1c2VkIG5vdCBpbiAoZ28gLi4uKSBibG9ja1wiKSkpXHJcbiJ9IHs6c3ltIHVubWl4LWFsbCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbV0pfSwgOnByb3RvY29sIE1peH0gezpzeW0gc3BsaXQsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHByZWRpY2F0ZSBhbmQgYSBzb3VyY2UgY2hhbm5lbCBhbmQgcmV0dXJucyBhIHZlY3RvciBvZiB0d29cbiAgY2hhbm5lbHMsIHRoZSBmaXJzdCBvZiB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlcyBmb3Igd2hpY2ggdGhlXG4gIHByZWRpY2F0ZSByZXR1cm5lZCB0cnVlLCB0aGUgc2Vjb25kIHRob3NlIGZvciB3aGljaCBpdCByZXR1cm5lZFxuICBmYWxzZS5cblxuICBUaGUgb3V0IGNoYW5uZWxzIHdpbGwgYmUgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciB0d28gYnVmLW9yLW5zIGNhblxuICBiZSBzdXBwbGllZC4gVGhlIGNoYW5uZWxzIHdpbGwgY2xvc2UgYWZ0ZXIgdGhlIHNvdXJjZSBjaGFubmVsIGhhc1xuICBjbG9zZWQuIiwgOmFyZ2xpc3RzIFtbcCBjaF0gW3AgY2ggdC1idWYtb3ItbiBmLWJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXRcclxuIFwiVGFrZXMgYSBwcmVkaWNhdGUgYW5kIGEgc291cmNlIGNoYW5uZWwgYW5kIHJldHVybnMgYSB2ZWN0b3Igb2YgdHdvXFxuICBjaGFubmVscywgdGhlIGZpcnN0IG9mIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgdmFsdWVzIGZvciB3aGljaCB0aGVcXG4gIHByZWRpY2F0ZSByZXR1cm5lZCB0cnVlLCB0aGUgc2Vjb25kIHRob3NlIGZvciB3aGljaCBpdCByZXR1cm5lZFxcbiAgZmFsc2UuXFxuXFxuICBUaGUgb3V0IGNoYW5uZWxzIHdpbGwgYmUgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciB0d28gYnVmLW9yLW5zIGNhblxcbiAgYmUgc3VwcGxpZWQuIFRoZSBjaGFubmVscyB3aWxsIGNsb3NlIGFmdGVyIHRoZSBzb3VyY2UgY2hhbm5lbCBoYXNcXG4gIGNsb3NlZC5cIlxyXG4gKFtwIGNoXSAoc3BsaXQgcCBjaCBuaWwgbmlsKSlcclxuIChbcCBjaCB0LWJ1Zi1vci1uIGYtYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbdGMgKGNoYW4gdC1idWYtb3ItbikgZmMgKGNoYW4gZi1idWYtb3ItbildXHJcbiAgIChnby1sb29wXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFt2ICg8ISBjaCldXHJcbiAgICAgKGlmXHJcbiAgICAgIChuaWw/IHYpXHJcbiAgICAgIChkbyAoY2xvc2UhIHRjKSAoY2xvc2UhIGZjKSlcclxuICAgICAgKHdoZW4gKD4hIChpZiAocCB2KSB0YyBmYykgdikgKHJlY3VyKSkpKSlcclxuICAgW3RjIGZjXSkpKVxyXG4ifSB7OnN5bSB1bm1peC1hbGwsIDptZXRhIHs6ZG9jICJyZW1vdmVzIGFsbCBpbnB1dHMgZnJvbSB0aGUgbWl4IiwgOmFyZ2xpc3RzIChbbWl4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5taXgtYWxsXHJcbiBcInJlbW92ZXMgYWxsIGlucHV0cyBmcm9tIHRoZSBtaXhcIlxyXG4gW21peF1cclxuICh1bm1peC1hbGwqIG1peCkpXHJcbiJ9IHs6c3ltIGZpbHRlcj4sIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgKFtwIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmlsdGVyPlxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gW3AgY2hdXHJcbiAocmVpZnlcclxuICBpbXBsL0NoYW5uZWxcclxuICAoY2xvc2UhIFtfXSAoaW1wbC9jbG9zZSEgY2gpKVxyXG4gIChjbG9zZWQ/IFtfXSAoaW1wbC9jbG9zZWQ/IGNoKSlcclxuICBpbXBsL1JlYWRQb3J0XHJcbiAgKHRha2UhIFtfIGZuMV0gKGltcGwvdGFrZSEgY2ggZm4xKSlcclxuICBpbXBsL1dyaXRlUG9ydFxyXG4gIChwdXQhXHJcbiAgIFtfIHZhbCBmbjFdXHJcbiAgIChpZlxyXG4gICAgKHAgdmFsKVxyXG4gICAgKGltcGwvcHV0ISBjaCB2YWwgZm4xKVxyXG4gICAgKGNoYW5uZWxzL2JveCAobm90IChpbXBsL2Nsb3NlZD8gY2gpKSkpKSkpXHJcbiJ9IHs6c3ltIHRhcCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBjaCBjbG9zZT9dKX0sIDpwcm90b2NvbCBNdWx0fSB7OnN5bSB1bnRhcCwgOm1ldGEgezpkb2MgIkRpc2Nvbm5lY3RzIGEgdGFyZ2V0IGNoYW5uZWwgZnJvbSBhIG11bHQiLCA6YXJnbGlzdHMgKFttdWx0IGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW50YXBcclxuIFwiRGlzY29ubmVjdHMgYSB0YXJnZXQgY2hhbm5lbCBmcm9tIGEgbXVsdFwiXHJcbiBbbXVsdCBjaF1cclxuICh1bnRhcCogbXVsdCBjaCkpXHJcbiJ9IHs6c3ltIGFsdHMhLCA6bWV0YSB7OmRvYyAiQ29tcGxldGVzIGF0IG1vc3Qgb25lIG9mIHNldmVyYWwgY2hhbm5lbCBvcGVyYXRpb25zLiBNdXN0IGJlIGNhbGxlZFxuICAgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIHBvcnRzIGlzIGEgdmVjdG9yIG9mIGNoYW5uZWwgZW5kcG9pbnRzLFxuICAgd2hpY2ggY2FuIGJlIGVpdGhlciBhIGNoYW5uZWwgdG8gdGFrZSBmcm9tIG9yIGEgdmVjdG9yIG9mXG4gIFtjaGFubmVsLXRvLXB1dC10byB2YWwtdG8tcHV0XSwgaW4gYW55IGNvbWJpbmF0aW9uLiBUYWtlcyB3aWxsIGJlXG4gIG1hZGUgYXMgaWYgYnkgPCEsIGFuZCBwdXRzIHdpbGwgYmUgbWFkZSBhcyBpZiBieSA+IS4gVW5sZXNzXG4gIHRoZSA6cHJpb3JpdHkgb3B0aW9uIGlzIHRydWUsIGlmIG1vcmUgdGhhbiBvbmUgcG9ydCBvcGVyYXRpb24gaXNcbiAgcmVhZHkgYSBub24tZGV0ZXJtaW5pc3RpYyBjaG9pY2Ugd2lsbCBiZSBtYWRlLiBJZiBubyBvcGVyYXRpb24gaXNcbiAgcmVhZHkgYW5kIGEgOmRlZmF1bHQgdmFsdWUgaXMgc3VwcGxpZWQsIFtkZWZhdWx0LXZhbCA6ZGVmYXVsdF0gd2lsbFxuICBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIGFsdHMhIHdpbGwgcGFyayB1bnRpbCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRvXG4gIGJlY29tZSByZWFkeSBjb21wbGV0ZXMuIFJldHVybnMgW3ZhbCBwb3J0XSBvZiB0aGUgY29tcGxldGVkXG4gIG9wZXJhdGlvbiwgd2hlcmUgdmFsIGlzIHRoZSB2YWx1ZSB0YWtlbiBmb3IgdGFrZXMsIGFuZCBhXG4gIGJvb2xlYW4gKHRydWUgdW5sZXNzIGFscmVhZHkgY2xvc2VkLCBhcyBwZXIgcHV0ISkgZm9yIHB1dHMuXG5cbiAgb3B0cyBhcmUgcGFzc2VkIGFzIDprZXkgdmFsIC4uLiBTdXBwb3J0ZWQgb3B0aW9uczpcblxuICA6ZGVmYXVsdCB2YWwgLSB0aGUgdmFsdWUgdG8gdXNlIGlmIG5vbmUgb2YgdGhlIG9wZXJhdGlvbnMgYXJlIGltbWVkaWF0ZWx5IHJlYWR5XG4gIDpwcmlvcml0eSB0cnVlIC0gKGRlZmF1bHQgbmlsKSB3aGVuIHRydWUsIHRoZSBvcGVyYXRpb25zIHdpbGwgYmUgdHJpZWQgaW4gb3JkZXIuXG5cbiAgTm90ZTogdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHBvcnQgZXhwcyBvciB2YWwgZXhwcnMgd2lsbCBiZVxuICB1c2VkLCBub3IgaW4gd2hhdCBvcmRlciBzaG91bGQgdGhleSBiZSwgc28gdGhleSBzaG91bGQgbm90IGJlXG4gIGRlcGVuZGVkIHVwb24gZm9yIHNpZGUgZWZmZWN0cy4iLCA6YXJnbGlzdHMgKFtwb3J0cyAmIHs6YXMgb3B0c31dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbHRzIVxyXG4gXCJDb21wbGV0ZXMgYXQgbW9zdCBvbmUgb2Ygc2V2ZXJhbCBjaGFubmVsIG9wZXJhdGlvbnMuIE11c3QgYmUgY2FsbGVkXFxuICAgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIHBvcnRzIGlzIGEgdmVjdG9yIG9mIGNoYW5uZWwgZW5kcG9pbnRzLFxcbiAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBjaGFubmVsIHRvIHRha2UgZnJvbSBvciBhIHZlY3RvciBvZlxcbiAgW2NoYW5uZWwtdG8tcHV0LXRvIHZhbC10by1wdXRdLCBpbiBhbnkgY29tYmluYXRpb24uIFRha2VzIHdpbGwgYmVcXG4gIG1hZGUgYXMgaWYgYnkgPCEsIGFuZCBwdXRzIHdpbGwgYmUgbWFkZSBhcyBpZiBieSA+IS4gVW5sZXNzXFxuICB0aGUgOnByaW9yaXR5IG9wdGlvbiBpcyB0cnVlLCBpZiBtb3JlIHRoYW4gb25lIHBvcnQgb3BlcmF0aW9uIGlzXFxuICByZWFkeSBhIG5vbi1kZXRlcm1pbmlzdGljIGNob2ljZSB3aWxsIGJlIG1hZGUuIElmIG5vIG9wZXJhdGlvbiBpc1xcbiAgcmVhZHkgYW5kIGEgOmRlZmF1bHQgdmFsdWUgaXMgc3VwcGxpZWQsIFtkZWZhdWx0LXZhbCA6ZGVmYXVsdF0gd2lsbFxcbiAgYmUgcmV0dXJuZWQsIG90aGVyd2lzZSBhbHRzISB3aWxsIHBhcmsgdW50aWwgdGhlIGZpcnN0IG9wZXJhdGlvbiB0b1xcbiAgYmVjb21lIHJlYWR5IGNvbXBsZXRlcy4gUmV0dXJucyBbdmFsIHBvcnRdIG9mIHRoZSBjb21wbGV0ZWRcXG4gIG9wZXJhdGlvbiwgd2hlcmUgdmFsIGlzIHRoZSB2YWx1ZSB0YWtlbiBmb3IgdGFrZXMsIGFuZCBhXFxuICBib29sZWFuICh0cnVlIHVubGVzcyBhbHJlYWR5IGNsb3NlZCwgYXMgcGVyIHB1dCEpIGZvciBwdXRzLlxcblxcbiAgb3B0cyBhcmUgcGFzc2VkIGFzIDprZXkgdmFsIC4uLiBTdXBwb3J0ZWQgb3B0aW9uczpcXG5cXG4gIDpkZWZhdWx0IHZhbCAtIHRoZSB2YWx1ZSB0byB1c2UgaWYgbm9uZSBvZiB0aGUgb3BlcmF0aW9ucyBhcmUgaW1tZWRpYXRlbHkgcmVhZHlcXG4gIDpwcmlvcml0eSB0cnVlIC0gKGRlZmF1bHQgbmlsKSB3aGVuIHRydWUsIHRoZSBvcGVyYXRpb25zIHdpbGwgYmUgdHJpZWQgaW4gb3JkZXIuXFxuXFxuICBOb3RlOiB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgcG9ydCBleHBzIG9yIHZhbCBleHBycyB3aWxsIGJlXFxuICB1c2VkLCBub3IgaW4gd2hhdCBvcmRlciBzaG91bGQgdGhleSBiZSwgc28gdGhleSBzaG91bGQgbm90IGJlXFxuICBkZXBlbmRlZCB1cG9uIGZvciBzaWRlIGVmZmVjdHMuXCJcclxuIFtwb3J0cyAmIHs6YXMgb3B0c31dXHJcbiAodGhyb3cgKGpzL0Vycm9yLiBcImFsdHMhIHVzZWQgbm90IGluIChnbyAuLi4pIGJsb2NrXCIpKSlcclxuIn0gezpzeW0gdW5zdWIsIDptZXRhIHs6ZG9jICJVbnN1YnNjcmliZXMgYSBjaGFubmVsIGZyb20gYSB0b3BpYyBvZiBhIHB1YiIsIDphcmdsaXN0cyAoW3AgdG9waWMgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnN1YlxyXG4gXCJVbnN1YnNjcmliZXMgYSBjaGFubmVsIGZyb20gYSB0b3BpYyBvZiBhIHB1YlwiXHJcbiBbcCB0b3BpYyBjaF1cclxuICh1bnN1YiogcCB0b3BpYyBjaCkpXHJcbiJ9IHs6c3ltIHBvbGwhLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSB2YWwgZnJvbSBwb3J0IGlmIGl0J3MgcG9zc2libGUgdG8gZG8gc28gaW1tZWRpYXRlbHkuXG4gIE5ldmVyIGJsb2Nrcy4gUmV0dXJucyB2YWx1ZSBpZiBzdWNjZXNzZnVsLCBuaWwgb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3BvcnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb2xsIVxyXG4gXCJUYWtlcyBhIHZhbCBmcm9tIHBvcnQgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseS5cXG4gIE5ldmVyIGJsb2Nrcy4gUmV0dXJucyB2YWx1ZSBpZiBzdWNjZXNzZnVsLCBuaWwgb3RoZXJ3aXNlLlwiXHJcbiBbcG9ydF1cclxuIChsZXQgW3JldCAoaW1wbC90YWtlISBwb3J0IChmbi1oYW5kbGVyIG5vcCBmYWxzZSkpXSAod2hlbiByZXQgQHJldCkpKVxyXG4ifSB7OnN5bSBtYXA8LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIChbZiBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcDxcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIFtmIGNoXVxyXG4gKHJlaWZ5XHJcbiAgaW1wbC9DaGFubmVsXHJcbiAgKGNsb3NlISBbX10gKGltcGwvY2xvc2UhIGNoKSlcclxuICAoY2xvc2VkPyBbX10gKGltcGwvY2xvc2VkPyBjaCkpXHJcbiAgaW1wbC9SZWFkUG9ydFxyXG4gICh0YWtlIVxyXG4gICBbXyBmbjFdXHJcbiAgIChsZXRcclxuICAgIFtyZXRcclxuICAgICAoaW1wbC90YWtlIVxyXG4gICAgICBjaFxyXG4gICAgICAocmVpZnlcclxuICAgICAgIGltcGwvSGFuZGxlclxyXG4gICAgICAgKGFjdGl2ZT8gW19dIChpbXBsL2FjdGl2ZT8gZm4xKSlcclxuICAgICAgIChibG9ja2FibGU/IFtfXSB0cnVlKVxyXG4gICAgICAgKGNvbW1pdFxyXG4gICAgICAgIFtfXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2YxIChpbXBsL2NvbW1pdCBmbjEpXVxyXG4gICAgICAgICAoZm4qXHJcbiAgICAgICAgICBbcDFfXzQ4NjcwI11cclxuICAgICAgICAgIChmMSAoaWYgKG5pbD8gcDFfXzQ4NjcwIykgbmlsIChmIHAxX180ODY3MCMpKSkpKSkpKV1cclxuICAgIChpZiAoYW5kIHJldCAobm90IChuaWw/IEByZXQpKSkgKGNoYW5uZWxzL2JveCAoZiBAcmV0KSkgcmV0KSkpXHJcbiAgaW1wbC9Xcml0ZVBvcnRcclxuICAocHV0ISBbXyB2YWwgZm4xXSAoaW1wbC9wdXQhIGNoIHZhbCBmbjEpKSkpXHJcbiJ9IHs6c3ltIGRvLWFsdHMsIDptZXRhIHs6ZG9jICJyZXR1cm5zIGRlcmVmYWJsZSBbdmFsIHBvcnRdIGlmIGltbWVkaWF0ZSwgbmlsIGlmIGVucXVldWVkIiwgOmFyZ2xpc3RzIChbZnJldCBwb3J0cyBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZG8tYWx0c1xyXG4gXCJyZXR1cm5zIGRlcmVmYWJsZSBbdmFsIHBvcnRdIGlmIGltbWVkaWF0ZSwgbmlsIGlmIGVucXVldWVkXCJcclxuIFtmcmV0IHBvcnRzIG9wdHNdXHJcbiAobGV0XHJcbiAgW2ZsYWdcclxuICAgKGFsdC1mbGFnKVxyXG4gICBuXHJcbiAgIChjb3VudCBwb3J0cylcclxuICAgaWR4c1xyXG4gICAocmFuZG9tLWFycmF5IG4pXHJcbiAgIHByaW9yaXR5XHJcbiAgICg6cHJpb3JpdHkgb3B0cylcclxuICAgcmV0XHJcbiAgIChsb29wXHJcbiAgICBbaSAwXVxyXG4gICAgKHdoZW5cclxuICAgICAoPCBpIG4pXHJcbiAgICAgKGxldFxyXG4gICAgICBbaWR4XHJcbiAgICAgICAoaWYgcHJpb3JpdHkgaSAoYWdldCBpZHhzIGkpKVxyXG4gICAgICAgcG9ydFxyXG4gICAgICAgKG50aCBwb3J0cyBpZHgpXHJcbiAgICAgICB3cG9ydFxyXG4gICAgICAgKHdoZW4gKHZlY3Rvcj8gcG9ydCkgKHBvcnQgMCkpXHJcbiAgICAgICB2Ym94XHJcbiAgICAgICAoaWZcclxuICAgICAgICB3cG9ydFxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3ZhbCAocG9ydCAxKV1cclxuICAgICAgICAgKGltcGwvcHV0IVxyXG4gICAgICAgICAgd3BvcnRcclxuICAgICAgICAgIHZhbFxyXG4gICAgICAgICAgKGFsdC1oYW5kbGVyXHJcbiAgICAgICAgICAgZmxhZ1xyXG4gICAgICAgICAgIChmbiogW3AxX180ODY2NiNdIChmcmV0IFtwMV9fNDg2NjYjIHdwb3J0XSkpKSkpXHJcbiAgICAgICAgKGltcGwvdGFrZSFcclxuICAgICAgICAgcG9ydFxyXG4gICAgICAgICAoYWx0LWhhbmRsZXJcclxuICAgICAgICAgIGZsYWdcclxuICAgICAgICAgIChmbiogW3AxX180ODY2NyNdIChmcmV0IFtwMV9fNDg2NjcjIHBvcnRdKSkpKSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgdmJveFxyXG4gICAgICAgKGNoYW5uZWxzL2JveCBbQHZib3ggKG9yIHdwb3J0IHBvcnQpXSlcclxuICAgICAgIChyZWN1ciAoaW5jIGkpKSkpKSldXHJcbiAgKG9yXHJcbiAgIHJldFxyXG4gICAod2hlblxyXG4gICAgKGNvbnRhaW5zPyBvcHRzIDpkZWZhdWx0KVxyXG4gICAgKHdoZW4tbGV0XHJcbiAgICAgW2dvdCAoYW5kIChpbXBsL2FjdGl2ZT8gZmxhZykgKGltcGwvY29tbWl0IGZsYWcpKV1cclxuICAgICAoY2hhbm5lbHMvYm94IFsoOmRlZmF1bHQgb3B0cykgOmRlZmF1bHRdKSkpKSkpXHJcbiJ9IHs6c3ltIHBpcGVsaW5lLWFzeW5jLCA6bWV0YSB7OmRvYyAiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xuICBjaGFubmVsLCBzdWJqZWN0IHRvIHRoZSBhc3luYyBmdW5jdGlvbiBhZiwgd2l0aCBwYXJhbGxlbGlzbSBuLiBhZlxuICBtdXN0IGJlIGEgZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFuIGlucHV0IHZhbHVlIGFuZFxuICB0aGUgc2Vjb25kIGEgY2hhbm5lbCBvbiB3aGljaCB0byBwbGFjZSB0aGUgcmVzdWx0KHMpLiBhZiBtdXN0IGNsb3NlIVxuICB0aGUgY2hhbm5lbCBiZWZvcmUgcmV0dXJuaW5nLiAgVGhlIHByZXN1bXB0aW9uIGlzIHRoYXQgYWYgd2lsbFxuICByZXR1cm4gaW1tZWRpYXRlbHksIGhhdmluZyBsYXVuY2hlZCBzb21lIGFzeW5jaHJvbm91cyBvcGVyYXRpb25cbiAgd2hvc2UgY29tcGxldGlvbi9jYWxsYmFjayB3aWxsIG1hbmlwdWxhdGUgdGhlIHJlc3VsdCBjaGFubmVsLiBPdXRwdXRzXG4gIHdpbGwgYmUgcmV0dXJuZWQgaW4gb3JkZXIgcmVsYXRpdmUgdG8gIHRoZSBpbnB1dHMuIEJ5IGRlZmF1bHQsIHRoZSB0b1xuICBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb20gY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmVcbiAgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGwgc3RvcCBjb25zdW1pbmcgdGhlIGZyb21cbiAgY2hhbm5lbCBpZiB0aGUgdG8gY2hhbm5lbCBjbG9zZXMuIiwgOmFyZ2xpc3RzIFtbbiB0byBhZiBmcm9tXSBbbiB0byBhZiBmcm9tIGNsb3NlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBpcGVsaW5lLWFzeW5jXHJcbiBcIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cXG4gIGNoYW5uZWwsIHN1YmplY3QgdG8gdGhlIGFzeW5jIGZ1bmN0aW9uIGFmLCB3aXRoIHBhcmFsbGVsaXNtIG4uIGFmXFxuICBtdXN0IGJlIGEgZnVuY3Rpb24gb2YgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGFuIGlucHV0IHZhbHVlIGFuZFxcbiAgdGhlIHNlY29uZCBhIGNoYW5uZWwgb24gd2hpY2ggdG8gcGxhY2UgdGhlIHJlc3VsdChzKS4gYWYgbXVzdCBjbG9zZSFcXG4gIHRoZSBjaGFubmVsIGJlZm9yZSByZXR1cm5pbmcuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCBhZiB3aWxsXFxuICByZXR1cm4gaW1tZWRpYXRlbHksIGhhdmluZyBsYXVuY2hlZCBzb21lIGFzeW5jaHJvbm91cyBvcGVyYXRpb25cXG4gIHdob3NlIGNvbXBsZXRpb24vY2FsbGJhY2sgd2lsbCBtYW5pcHVsYXRlIHRoZSByZXN1bHQgY2hhbm5lbC4gT3V0cHV0c1xcbiAgd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciByZWxhdGl2ZSB0byAgdGhlIGlucHV0cy4gQnkgZGVmYXVsdCwgdGhlIHRvXFxuICBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb20gY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmVcXG4gIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tXFxuICBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3Nlcy5cIlxyXG4gKFtuIHRvIGFmIGZyb21dIChwaXBlbGluZS1hc3luYyBuIHRvIGFmIGZyb20gdHJ1ZSkpXHJcbiAoW24gdG8gYWYgZnJvbSBjbG9zZT9dIChwaXBlbGluZSogbiB0byBhZiBmcm9tIGNsb3NlPyBuaWwgOmFzeW5jKSkpXHJcbiJ9IHs6c3ltIE1peCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGFkbWl4KiBzb2xvLW1vZGUqIHRvZ2dsZSogdW5taXgqIHVubWl4LWFsbCopfSB7OnN5bSB0b2dnbGUqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gc3RhdGUtbWFwXSl9LCA6cHJvdG9jb2wgTWl4fSB7OnN5bSBtdWx0LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG11bHQoaXBsZSkgb2YgdGhlIHN1cHBsaWVkIGNoYW5uZWwuIENoYW5uZWxzXG4gIGNvbnRhaW5pbmcgY29waWVzIG9mIHRoZSBjaGFubmVsIGNhbiBiZSBjcmVhdGVkIHdpdGggJ3RhcCcsIGFuZFxuICBkZXRhY2hlZCB3aXRoICd1bnRhcCcuXG5cbiAgRWFjaCBpdGVtIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCB0YXBzIGluIHBhcmFsbGVsIGFuZCBzeW5jaHJvbm91c2x5LFxuICBpLmUuIGVhY2ggdGFwIG11c3QgYWNjZXB0IGJlZm9yZSB0aGUgbmV4dCBpdGVtIGlzIGRpc3RyaWJ1dGVkLiBVc2VcbiAgYnVmZmVyaW5nL3dpbmRvd2luZyB0byBwcmV2ZW50IHNsb3cgdGFwcyBmcm9tIGhvbGRpbmcgdXAgdGhlIG11bHQuXG5cbiAgSXRlbXMgcmVjZWl2ZWQgd2hlbiB0aGVyZSBhcmUgbm8gdGFwcyBnZXQgZHJvcHBlZC5cblxuICBJZiBhIHRhcCBwdXRzIHRvIGEgY2xvc2VkIGNoYW5uZWwsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0LiIsIDphcmdsaXN0cyAoW2NoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVsdFxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGEgbXVsdChpcGxlKSBvZiB0aGUgc3VwcGxpZWQgY2hhbm5lbC4gQ2hhbm5lbHNcXG4gIGNvbnRhaW5pbmcgY29waWVzIG9mIHRoZSBjaGFubmVsIGNhbiBiZSBjcmVhdGVkIHdpdGggJ3RhcCcsIGFuZFxcbiAgZGV0YWNoZWQgd2l0aCAndW50YXAnLlxcblxcbiAgRWFjaCBpdGVtIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCB0YXBzIGluIHBhcmFsbGVsIGFuZCBzeW5jaHJvbm91c2x5LFxcbiAgaS5lLiBlYWNoIHRhcCBtdXN0IGFjY2VwdCBiZWZvcmUgdGhlIG5leHQgaXRlbSBpcyBkaXN0cmlidXRlZC4gVXNlXFxuICBidWZmZXJpbmcvd2luZG93aW5nIHRvIHByZXZlbnQgc2xvdyB0YXBzIGZyb20gaG9sZGluZyB1cCB0aGUgbXVsdC5cXG5cXG4gIEl0ZW1zIHJlY2VpdmVkIHdoZW4gdGhlcmUgYXJlIG5vIHRhcHMgZ2V0IGRyb3BwZWQuXFxuXFxuICBJZiBhIHRhcCBwdXRzIHRvIGEgY2xvc2VkIGNoYW5uZWwsIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtdWx0LlwiXHJcbiBbY2hdXHJcbiAobGV0XHJcbiAgW2NzXHJcbiAgIChhdG9tIHt9KVxyXG4gICBtXHJcbiAgIChyZWlmeVxyXG4gICAgTXV4XHJcbiAgICAobXV4Y2gqIFtfXSBjaClcclxuICAgIE11bHRcclxuICAgICh0YXAqIFtfIGNoIGNsb3NlP10gKHN3YXAhIGNzIGFzc29jIGNoIGNsb3NlPykgbmlsKVxyXG4gICAgKHVudGFwKiBbXyBjaF0gKHN3YXAhIGNzIGRpc3NvYyBjaCkgbmlsKVxyXG4gICAgKHVudGFwLWFsbCogW19dIChyZXNldCEgY3Mge30pIG5pbCkpXHJcbiAgIGRjaGFuXHJcbiAgIChjaGFuIDEpXHJcbiAgIGRjdHJcclxuICAgKGF0b20gbmlsKVxyXG4gICBkb25lXHJcbiAgIChmbiBbX10gKHdoZW4gKHplcm8/IChzd2FwISBkY3RyIGRlYykpIChwdXQhIGRjaGFuIHRydWUpKSldXHJcbiAgKGdvLWxvb3BcclxuICAgW11cclxuICAgKGxldFxyXG4gICAgW3ZhbCAoPCEgY2gpXVxyXG4gICAgKGlmXHJcbiAgICAgKG5pbD8gdmFsKVxyXG4gICAgIChkb3NlcSBbW2MgY2xvc2U/XSBAY3NdICh3aGVuIGNsb3NlPyAoY2xvc2UhIGMpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFtjaHMgKGtleXMgQGNzKV1cclxuICAgICAgKHJlc2V0ISBkY3RyIChjb3VudCBjaHMpKVxyXG4gICAgICAoZG9zZXFcclxuICAgICAgIFtjIGNoc11cclxuICAgICAgICh3aGVuLW5vdCAocHV0ISBjIHZhbCBkb25lKSAoZG9uZSBuaWwpICh1bnRhcCogbSBjKSkpXHJcbiAgICAgICh3aGVuIChzZXEgY2hzKSAoPCEgZGNoYW4pKVxyXG4gICAgICAocmVjdXIpKSkpKVxyXG4gIG0pKVxyXG4ifSB7OnN5bSBtYXBjYXQ8LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbZiBpbl0gW2YgaW4gYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXBjYXQ8XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW2YgaW5dIChtYXBjYXQ8IGYgaW4gbmlsKSlcclxuIChbZiBpbiBidWYtb3Itbl0gKGxldCBbb3V0IChjaGFuIGJ1Zi1vci1uKV0gKG1hcGNhdCogZiBpbiBvdXQpIG91dCkpKVxyXG4ifSB7OnN5bSBpb2MtYWx0cyEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgY29udC1ibG9jayBwb3J0cyAmIHs6YXMgb3B0c31dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpb2MtYWx0cyFcclxuIFtzdGF0ZSBjb250LWJsb2NrIHBvcnRzICYgezphcyBvcHRzfV1cclxuIChpb2MvYXNldC1hbGwhIHN0YXRlIGhlbHBlcnMvU1RBVEUtSURYIGNvbnQtYmxvY2spXHJcbiAod2hlbi1sZXRcclxuICBbY2JcclxuICAgKGNsanMuY29yZS5hc3luYy9kby1hbHRzXHJcbiAgICAoZm5cclxuICAgICBbdmFsXVxyXG4gICAgIChpb2MvYXNldC1hbGwhIHN0YXRlIGhlbHBlcnMvVkFMVUUtSURYIHZhbClcclxuICAgICAoaGVscGVycy9ydW4tc3RhdGUtbWFjaGluZS13cmFwcGVkIHN0YXRlKSlcclxuICAgIHBvcnRzXHJcbiAgICBvcHRzKV1cclxuICAoaW9jL2FzZXQtYWxsISBzdGF0ZSBoZWxwZXJzL1ZBTFVFLUlEWCBAY2IpXHJcbiAgOnJlY3VyKSlcclxuIn0gezpzeW0gdW5ibG9ja2luZy1idWZmZXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGEgY2hhbm5lbCBjcmVhdGVkIHdpdGggYnVmZiB3aWxsIG5ldmVyIGJsb2NrLiBUaGF0IGlzIHRvIHNheSxcbiAgIHB1dHMgaW50byB0aGlzIGJ1ZmZlciB3aWxsIG5ldmVyIGNhdXNlIHRoZSBidWZmZXIgdG8gYmUgZnVsbC4gIiwgOmFyZ2xpc3RzIChbYnVmZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuYmxvY2tpbmctYnVmZmVyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgYSBjaGFubmVsIGNyZWF0ZWQgd2l0aCBidWZmIHdpbGwgbmV2ZXIgYmxvY2suIFRoYXQgaXMgdG8gc2F5LFxcbiAgIHB1dHMgaW50byB0aGlzIGJ1ZmZlciB3aWxsIG5ldmVyIGNhdXNlIHRoZSBidWZmZXIgdG8gYmUgZnVsbC4gXCJcclxuIFtidWZmXVxyXG4gKHNhdGlzZmllcz8gaW1wbC9VbmJsb2NraW5nQnVmZmVyIGJ1ZmYpKVxyXG4ifSB7OnN5bSBwdXQhLCA6bWV0YSB7OmRvYyAiQXN5bmNocm9ub3VzbHkgcHV0cyBhIHZhbCBpbnRvIHBvcnQsIGNhbGxpbmcgZm4xIChpZiBzdXBwbGllZCkgd2hlblxuICAgY29tcGxldGUuIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBXaWxsIHRocm93IGlmIGNsb3NlZC4gSWZcbiAgIG9uLWNhbGxlcj8gKGRlZmF1bHQgdHJ1ZSkgaXMgdHJ1ZSwgYW5kIHRoZSBwdXQgaXMgaW1tZWRpYXRlbHlcbiAgIGFjY2VwdGVkLCB3aWxsIGNhbGwgZm4xIG9uIGNhbGxpbmcgdGhyZWFkLiAgUmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIFtbcG9ydCB2YWxdIFtwb3J0IHZhbCBmbjFdIFtwb3J0IHZhbCBmbjEgb24tY2FsbGVyP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHB1dCFcclxuIFwiQXN5bmNocm9ub3VzbHkgcHV0cyBhIHZhbCBpbnRvIHBvcnQsIGNhbGxpbmcgZm4xIChpZiBzdXBwbGllZCkgd2hlblxcbiAgIGNvbXBsZXRlLiBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gV2lsbCB0aHJvdyBpZiBjbG9zZWQuIElmXFxuICAgb24tY2FsbGVyPyAoZGVmYXVsdCB0cnVlKSBpcyB0cnVlLCBhbmQgdGhlIHB1dCBpcyBpbW1lZGlhdGVseVxcbiAgIGFjY2VwdGVkLCB3aWxsIGNhbGwgZm4xIG9uIGNhbGxpbmcgdGhyZWFkLiAgUmV0dXJucyBuaWwuXCJcclxuIChbcG9ydCB2YWxdIChpZi1sZXQgW3JldCAoaW1wbC9wdXQhIHBvcnQgdmFsIGZobm9wKV0gQHJldCB0cnVlKSlcclxuIChbcG9ydCB2YWwgZm4xXSAocHV0ISBwb3J0IHZhbCBmbjEgdHJ1ZSkpXHJcbiAoW3BvcnQgdmFsIGZuMSBvbi1jYWxsZXI/XVxyXG4gIChpZi1sZXRcclxuICAgW3JldGIgKGltcGwvcHV0ISBwb3J0IHZhbCAoZm4taGFuZGxlciBmbjEpKV1cclxuICAgKGxldFxyXG4gICAgW3JldCBAcmV0Yl1cclxuICAgIChpZiBvbi1jYWxsZXI/IChmbjEgcmV0KSAoZGlzcGF0Y2gvcnVuIChmbiogW10gKGZuMSByZXQpKSkpXHJcbiAgICByZXQpXHJcbiAgIHRydWUpKSlcclxuIn0gezpzeW0gdGFrZSEsIDptZXRhIHs6ZG9jICJBc3luY2hyb25vdXNseSB0YWtlcyBhIHZhbCBmcm9tIHBvcnQsIHBhc3NpbmcgdG8gZm4xLiBXaWxsIHBhc3MgbmlsXG4gICBpZiBjbG9zZWQuIElmIG9uLWNhbGxlcj8gKGRlZmF1bHQgdHJ1ZSkgaXMgdHJ1ZSwgYW5kIHZhbHVlIGlzXG4gICBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHdpbGwgY2FsbCBmbjEgb24gY2FsbGluZyB0aHJlYWQuXG4gICBSZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgW1twb3J0IGZuMV0gW3BvcnQgZm4xIG9uLWNhbGxlcj9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlIVxyXG4gXCJBc3luY2hyb25vdXNseSB0YWtlcyBhIHZhbCBmcm9tIHBvcnQsIHBhc3NpbmcgdG8gZm4xLiBXaWxsIHBhc3MgbmlsXFxuICAgaWYgY2xvc2VkLiBJZiBvbi1jYWxsZXI/IChkZWZhdWx0IHRydWUpIGlzIHRydWUsIGFuZCB2YWx1ZSBpc1xcbiAgIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgd2lsbCBjYWxsIGZuMSBvbiBjYWxsaW5nIHRocmVhZC5cXG4gICBSZXR1cm5zIG5pbC5cIlxyXG4gKFtwb3J0IGZuMV0gKHRha2UhIHBvcnQgZm4xIHRydWUpKVxyXG4gKFtwb3J0IGZuMSBvbi1jYWxsZXI/XVxyXG4gIChsZXRcclxuICAgW3JldCAoaW1wbC90YWtlISBwb3J0IChmbi1oYW5kbGVyIGZuMSkpXVxyXG4gICAod2hlblxyXG4gICAgcmV0XHJcbiAgICAobGV0XHJcbiAgICAgW3ZhbCBAcmV0XVxyXG4gICAgIChpZiBvbi1jYWxsZXI/IChmbjEgdmFsKSAoZGlzcGF0Y2gvcnVuIChmbiogW10gKGZuMSB2YWwpKSkpKSlcclxuICAgbmlsKSkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwuYnVmZmVycyAoezpzeW0gYWNvcHksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3JjIHNyYy1zdGFydCBkZXN0IGRlc3Qtc3RhcnQgbGVuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWNvcHlcclxuIFtzcmMgc3JjLXN0YXJ0IGRlc3QgZGVzdC1zdGFydCBsZW5dXHJcbiAobG9vcFxyXG4gIFtjbnQgMF1cclxuICAod2hlblxyXG4gICAoPCBjbnQgbGVuKVxyXG4gICAoYXNldCBkZXN0ICgrIGRlc3Qtc3RhcnQgY250KSAoYWdldCBzcmMgKCsgc3JjLXN0YXJ0IGNudCkpKVxyXG4gICAocmVjdXIgKGluYyBjbnQpKSkpKVxyXG4ifSB7OnN5bSByaW5nLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmluZy1idWZmZXJcclxuIFtuXVxyXG4gKGFzc2VydCAoPiBuIDApIFwiQ2FuJ3QgY3JlYXRlIGEgcmluZyBidWZmZXIgb2Ygc2l6ZSAwXCIpXHJcbiAoUmluZ0J1ZmZlci4gMCAwIDAgKG1ha2UtYXJyYXkgbikpKVxyXG4ifSB7OnN5bSBmaXhlZC1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm4gZml4ZWQtYnVmZmVyIFtuXSAoRml4ZWRCdWZmZXIuIChyaW5nLWJ1ZmZlciBuKSBuKSlcclxuIn0gezpzeW0gZHJvcHBpbmctYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuIGRyb3BwaW5nLWJ1ZmZlciBbbl0gKERyb3BwaW5nQnVmZmVyLiAocmluZy1idWZmZXIgbikgbikpXHJcbiJ9IHs6c3ltIHNsaWRpbmctYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuIHNsaWRpbmctYnVmZmVyIFtuXSAoU2xpZGluZ0J1ZmZlci4gKHJpbmctYnVmZmVyIG4pIG4pKVxyXG4ifSB7OnN5bSBwcm9taXNlLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIHByb21pc2UtYnVmZmVyIFtdIChQcm9taXNlQnVmZmVyLiBOTy1WQUwpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLnByb3RvY29scyAoezpzeW0gcmVtb3ZlISwgOm1ldGEgezpkb2MgInJlbW92ZSBhbmQgcmV0dXJuIG5leHQgaXRlbSBmcm9tIGJ1ZmZlciwgY2FsbGVkIHVuZGVyIGNoYW4gbXV0ZXgiLCA6YXJnbGlzdHMgKFtiXSl9LCA6cHJvdG9jb2wgQnVmZmVyfSB7OnN5bSBjbG9zZS1idWYhLCA6bWV0YSB7OmRvYyAiY2FsbGVkIG9uIGNoYW4gY2xvc2VkIHVuZGVyIGNoYW4gbXV0ZXgsIHJldHVybiBpZ25vcmVkIiwgOmFyZ2xpc3RzIChbYl0pfSwgOnByb3RvY29sIEJ1ZmZlcn0gezpzeW0gY2xvc2UhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NoYW5dKX0sIDpwcm90b2NvbCBDaGFubmVsfSB7OnN5bSBIYW5kbGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoYWN0aXZlPyBibG9ja2FibGU/IGNvbW1pdCl9IHs6c3ltIGJsb2NrYWJsZT8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRydWUgaWYgdGhpcyBoYW5kbGVyIG1heSBiZSBibG9ja2VkLCBvdGhlcndpc2UgaXQgbXVzdCBub3QgYmxvY2siLCA6YXJnbGlzdHMgKFtoXSl9LCA6cHJvdG9jb2wgSGFuZGxlcn0gezpzeW0gYWN0aXZlPywgOm1ldGEgezpkb2MgInJldHVybnMgdHJ1ZSBpZiBoYXMgY2FsbGJhY2suIE11c3Qgd29yayB3L28gbG9jayIsIDphcmdsaXN0cyAoW2hdKX0sIDpwcm90b2NvbCBIYW5kbGVyfSB7OnN5bSBCdWZmZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChhZGQhKiBjbG9zZS1idWYhIGZ1bGw/IHJlbW92ZSEpfSB7OnN5bSBmdWxsPywgOm1ldGEgezpkb2MgInJldHVybnMgdHJ1ZSBpZiBidWZmZXIgY2Fubm90IGFjY2VwdCBwdXQiLCA6YXJnbGlzdHMgKFtiXSl9LCA6cHJvdG9jb2wgQnVmZmVyfSB7OnN5bSBhZGQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2JdIFtiIGl0bV1dfSwgOnNvdXJjZSAiKGRlZm4gYWRkISAoW2JdIGIpIChbYiBpdG1dIChhc3NlcnQgKG5vdCAobmlsPyBpdG0pKSkgKGFkZCEqIGIgaXRtKSkpXHJcbiJ9IHs6c3ltIGFkZCEqLCA6bWV0YSB7OmRvYyAiaWYgcm9vbSwgYWRkIGl0ZW0gdG8gdGhlIGJ1ZmZlciwgcmV0dXJucyBiLCBjYWxsZWQgdW5kZXIgY2hhbiBtdXRleCIsIDphcmdsaXN0cyAoW2IgaXRtXSl9LCA6cHJvdG9jb2wgQnVmZmVyfSB7OnN5bSBSZWFkUG9ydCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHRha2UhKX0gezpzeW0gQ2hhbm5lbCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGNsb3NlISBjbG9zZWQ/KX0gezpzeW0gY2xvc2VkPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjaGFuXSl9LCA6cHJvdG9jb2wgQ2hhbm5lbH0gezpzeW0gVW5ibG9ja2luZ0J1ZmZlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKCl9IHs6c3ltIE1BWC1RVUVVRS1TSVpFLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNQVgtUVVFVUUtU0laRSAxMDI0KVxyXG4ifSB7OnN5bSBjb21taXQsIDptZXRhIHs6ZG9jICJjb21taXQgdG8gZnVsZmlsbGluZyBpdHMgZW5kIG9mIHRoZSB0cmFuc2ZlciwgcmV0dXJucyBjYi4gTXVzdCBiZSBjYWxsZWQgd2l0aGluIGxvY2siLCA6YXJnbGlzdHMgKFtoXSl9LCA6cHJvdG9jb2wgSGFuZGxlcn0gezpzeW0gcHV0ISwgOm1ldGEgezpkb2MgImRlcmVmYWJsZSBib29sZWFuIChmYWxzZSBpZiBhbHJlYWR5IGNsb3NlZCkgaWYgaGFuZGxlZCwgbmlsIGlmIHB1dCB3YXMgZW5xdWV1ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCB0aHJvdyBvbiBuaWwgdmFsLiIsIDphcmdsaXN0cyAoW3BvcnQgdmFsIGZuMS1oYW5kbGVyXSl9LCA6cHJvdG9jb2wgV3JpdGVQb3J0fSB7OnN5bSB0YWtlISwgOm1ldGEgezpkb2MgImRlcmVmYWJsZSB2YWwgaWYgdGFrZW4sIG5pbCBpZiB0YWtlIHdhcyBlbnF1ZXVlZCIsIDphcmdsaXN0cyAoW3BvcnQgZm4xLWhhbmRsZXJdKX0sIDpwcm90b2NvbCBSZWFkUG9ydH0gezpzeW0gV3JpdGVQb3J0LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAocHV0ISl9KSwgcnVtLmRlcml2ZWQtYXRvbSAoezpzeW0gZGVyaXZlZC1hdG9tLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3JlZnMga2V5IGZdIFtyZWZzIGtleSBmIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXJpdmVkLWF0b21cclxuIChbcmVmcyBrZXkgZl0gKGRlcml2ZWQtYXRvbSByZWZzIGtleSBmIHt9KSlcclxuIChbcmVmcyBrZXkgZiBvcHRzXVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbcmVmIGNoZWNrLWVxdWFscz9dLCA6b3Ige2NoZWNrLWVxdWFscz8gdHJ1ZX19XHJcbiAgICBvcHRzXHJcbiAgICByZWNhbGNcclxuICAgIChjYXNlXHJcbiAgICAgKGNvdW50IHJlZnMpXHJcbiAgICAgMVxyXG4gICAgIChsZXQgW1thXSByZWZzXSAoZm4qIFtdIChmIEBhKSkpXHJcbiAgICAgMlxyXG4gICAgIChsZXQgW1thIGJdIHJlZnNdIChmbiogW10gKGYgQGEgQGIpKSlcclxuICAgICAzXHJcbiAgICAgKGxldCBbW2EgYiBjXSByZWZzXSAoZm4qIFtdIChmIEBhIEBiIEBjKSkpXHJcbiAgICAgKGZuKiBbXSAoYXBwbHkgZiAobWFwIGRlcmVmIHJlZnMpKSkpXHJcbiAgICBzaW5rXHJcbiAgICAoaWYgcmVmIChkb3RvIHJlZiAocmVzZXQhIChyZWNhbGMpKSkgKGF0b20gKHJlY2FsYykpKVxyXG4gICAgd2F0Y2hcclxuICAgIChpZlxyXG4gICAgIGNoZWNrLWVxdWFscz9cclxuICAgICAoZm5cclxuICAgICAgW18gXyBfIF9dXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtuZXctdmFsIChyZWNhbGMpXVxyXG4gICAgICAgKHdoZW4gKG5vdD0gQHNpbmsgbmV3LXZhbCkgKHJlc2V0ISBzaW5rIG5ldy12YWwpKSkpXHJcbiAgICAgKGZuIFtfIF8gXyBfXSAocmVzZXQhIHNpbmsgKHJlY2FsYykpKSldXHJcbiAgIChkb3NlcSBbcmVmIHJlZnNdIChhZGQtd2F0Y2ggcmVmIGtleSB3YXRjaCkpXHJcbiAgIHNpbmspKSlcclxuIn0pLCBtaXN0YWtlcy13ZXJlLW1hZGUuY29yZSAoezpzeW0gY2FuLXJlZG8/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHdlIGNhbiByZWRvLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW4tcmVkbz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHdlIGNhbiByZWRvLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuIChzb21lPyAoZ2V0LW5leHQtc3RhdGUgKmVkaXQtaGlzdG9yeSkpKVxyXG4ifSB7OnN5bSBhdG9tPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGF0b20/XHJcbiAoZm4qXHJcbiAgW3AxX180OTAxNSNdXHJcbiAgKGluc3RhbmNlP1xyXG4gICAjPyg6Y2xqIGNsb2p1cmUubGFuZy5BdG9tIDpjbGpzIGNsanMuY29yZS9BdG9tKVxyXG4gICBwMV9fNDkwMTUjKSkpXHJcbiJ9IHs6c3ltIGdldC1jdXJyZW50LXN0YXRlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jdXJyZW50LXN0YXRlXHJcbiBcIlJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LXN0YXRlIHN0YXRlc119IEAqZWRpdC1oaXN0b3J5XVxyXG4gIChnZXQgc3RhdGVzIGN1cnJlbnQtc3RhdGUpKSlcclxuIn0gezpzeW0gdW5kbyEsIDptZXRhIHs6ZG9jICJDaGFuZ2VzIHRoZSBjdXJyZW50IHN0YXRlIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuZG8hXHJcbiBcIkNoYW5nZXMgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAod2hlbi1sZXRcclxuICBbc3RhdGUgKGdldC1wcmV2aW91cy1zdGF0ZSAqZWRpdC1oaXN0b3J5KV1cclxuICAoc3dhcCEgKmVkaXQtaGlzdG9yeSB1cGRhdGUgOmN1cnJlbnQtc3RhdGUgZGVjKVxyXG4gIHN0YXRlKSlcclxuIn0gezpzeW0gcmVkbyEsIDptZXRhIHs6ZG9jICJDaGFuZ2VzIHRoZSBjdXJyZW50IHN0YXRlIGFuZCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVkbyFcclxuIFwiQ2hhbmdlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKHdoZW4tbGV0XHJcbiAgW3N0YXRlIChnZXQtbmV4dC1zdGF0ZSAqZWRpdC1oaXN0b3J5KV1cclxuICAoc3dhcCEgKmVkaXQtaGlzdG9yeSB1cGRhdGUgOmN1cnJlbnQtc3RhdGUgaW5jKVxyXG4gIHN0YXRlKSlcclxuIn0gezpzeW0gY2FuLXVuZG8/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHdlIGNhbiB1bmRvLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW4tdW5kbz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHdlIGNhbiB1bmRvLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuIChzb21lPyAoZ2V0LXByZXZpb3VzLXN0YXRlICplZGl0LWhpc3RvcnkpKSlcclxuIn0gezpzeW0gZ2V0LW5leHQtc3RhdGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LW5leHQtc3RhdGVcclxuIFwiUmV0dXJucyB0aGUgbmV4dCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtc3RhdGUgc3RhdGVzXX0gQCplZGl0LWhpc3RvcnldXHJcbiAgKGdldCBzdGF0ZXMgKGluYyBjdXJyZW50LXN0YXRlKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtY3Vyc29yLXBvc2l0aW9uISwgOm1ldGEgezpkb2MgIlVwZGF0ZXMgb25seSB0aGUgY3Vyc29yIHBvc2l0aW9uLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnkgY3Vyc29yLXBvc2l0aW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWN1cnNvci1wb3NpdGlvbiFcclxuIFwiVXBkYXRlcyBvbmx5IHRoZSBjdXJzb3IgcG9zaXRpb24uXCJcclxuIFsqZWRpdC1oaXN0b3J5IGN1cnNvci1wb3NpdGlvbl1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LXN0YXRlXX0gQCplZGl0LWhpc3RvcnldXHJcbiAgKHdoZW5cclxuICAgKD49IGN1cnJlbnQtc3RhdGUgMClcclxuICAgKHN3YXAhXHJcbiAgICAqZWRpdC1oaXN0b3J5XHJcbiAgICBhc3NvYy1pblxyXG4gICAgWzpzdGF0ZXMgY3VycmVudC1zdGF0ZSA6Y3Vyc29yLXBvc2l0aW9uXVxyXG4gICAgY3Vyc29yLXBvc2l0aW9uKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtZWRpdC1oaXN0b3J5ISwgOm1ldGEgezpkb2MgIlVwZGF0ZXMgdGhlIGVkaXQgaGlzdG9yeSBhdG9tLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3Rvcnkgc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtZWRpdC1oaXN0b3J5IVxyXG4gXCJVcGRhdGVzIHRoZSBlZGl0IGhpc3RvcnkgYXRvbS5cIlxyXG4gWyplZGl0LWhpc3Rvcnkgc3RhdGVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZSBzdGF0ZXMgbGltaXRdfVxyXG4gICBAKmVkaXQtaGlzdG9yeVxyXG4gICBvbGQtc3RhdGVcclxuICAgKGdldCBzdGF0ZXMgY3VycmVudC1zdGF0ZSlcclxuICAgb2xkLWN1cnNvci1wb3NpdGlvblxyXG4gICAob3IgKGZpcnN0ICg6b3JpZ2luYWwtY3Vyc29yLXBvc2l0aW9uIG9sZC1zdGF0ZSkpIDApXHJcbiAgIG5ldy1jdXJzb3ItcG9zaXRpb25cclxuICAgKGZpcnN0ICg6Y3Vyc29yLXBvc2l0aW9uIHN0YXRlKSlcclxuICAgbmV3LWN1cnNvci1jaGFuZ2VcclxuICAgKC0gbmV3LWN1cnNvci1wb3NpdGlvbiBvbGQtY3Vyc29yLXBvc2l0aW9uKVxyXG4gICBzdGF0ZVxyXG4gICAoYXNzb2Mgc3RhdGUgOm9yaWdpbmFsLWN1cnNvci1wb3NpdGlvbiAoOmN1cnNvci1wb3NpdGlvbiBzdGF0ZSkpXVxyXG4gICh3aGVuXHJcbiAgIChvclxyXG4gICAgKG5vdD0gKDp0ZXh0IG9sZC1zdGF0ZSkgKDp0ZXh0IHN0YXRlKSlcclxuICAgICg6c2VsZWN0aW9uLWNoYW5nZT8gc3RhdGUpKVxyXG4gICAoc3dhcCFcclxuICAgICplZGl0LWhpc3RvcnlcclxuICAgIChmblxyXG4gICAgIFtlZGl0LWhpc3RvcnldXHJcbiAgICAgKGxldFxyXG4gICAgICBbbmV3LWN1cnJlbnQtc3RhdGVcclxuICAgICAgIChpZlxyXG4gICAgICAgIChvciAoPD0gY3VycmVudC1zdGF0ZSAxKSAobm90PSBuZXctY3Vyc29yLWNoYW5nZSAxKSlcclxuICAgICAgICAoaW5jIGN1cnJlbnQtc3RhdGUpXHJcbiAgICAgICAgY3VycmVudC1zdGF0ZSlcclxuICAgICAgIG5ldy1zdGF0ZXNcclxuICAgICAgIChzdWJ2ZWMgc3RhdGVzIDAgbmV3LWN1cnJlbnQtc3RhdGUpXHJcbiAgICAgICBuZXctc3RhdGVzXHJcbiAgICAgICAoY29uaiBuZXctc3RhdGVzIHN0YXRlKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIGxpbWl0ICg+IChjb3VudCBuZXctc3RhdGVzKSBsaW1pdCkpXHJcbiAgICAgICAoYXNzb2NcclxuICAgICAgICBlZGl0LWhpc3RvcnlcclxuICAgICAgICA6Y3VycmVudC1zdGF0ZVxyXG4gICAgICAgIChkZWMgbmV3LWN1cnJlbnQtc3RhdGUpXHJcbiAgICAgICAgOnN0YXRlc1xyXG4gICAgICAgIChzdWJ2ZWMgbmV3LXN0YXRlcyAxKSlcclxuICAgICAgIChhc3NvY1xyXG4gICAgICAgIGVkaXQtaGlzdG9yeVxyXG4gICAgICAgIDpjdXJyZW50LXN0YXRlXHJcbiAgICAgICAgbmV3LWN1cnJlbnQtc3RhdGVcclxuICAgICAgICA6c3RhdGVzXHJcbiAgICAgICAgbmV3LXN0YXRlcykpKSkpKSkpXHJcbiJ9IHs6c3ltIGNyZWF0ZS1lZGl0LWhpc3RvcnksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBjcmVhdGUtZWRpdC1oaXN0b3J5IFtdIChhdG9tIHs6Y3VycmVudC1zdGF0ZSAtMSwgOnN0YXRlcyBbXX0pKVxyXG4ifSB7OnN5bSBnZXQtcHJldmlvdXMtc3RhdGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1wcmV2aW91cy1zdGF0ZVxyXG4gXCJSZXR1cm5zIHRoZSBwcmV2aW91cyBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtc3RhdGUgc3RhdGVzXX0gQCplZGl0LWhpc3RvcnldXHJcbiAgKGdldCBzdGF0ZXMgKGRlYyBjdXJyZW50LXN0YXRlKSkpKVxyXG4ifSksIGNsanMudG9vbHMucmVhZGVyLmltcGwuaW5zcGVjdCAoezpzeW0gaW5zcGVjdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIHN0cmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgc3VwcGxpZWQuXG4gICBNYXkgYmUgdGhlIGEgc3RyaW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlIGl0c2VsZiAoZS5nLiBcInRydWVcIilcbiAgIG9yIGl0IG1heSBiZSBhIGRlc2NyaXB0aW9uIChlLmcuIFwiYW4gaW5zdGFuY2Ugb2YgRm9vXCIpLlxuICAgSWYgdHJ1bmNhdGUgaXMgdHJ1ZSB0aGVuIHJldHVybiBhIHZlcnkgdGVyc2UgdmVyc2lvbiBvZlxuICAgdGhlIGluc3BlY3Rpb24uIiwgOmFyZ2xpc3RzIFtbeF0gW3RydW5jYXRlIHhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnNwZWN0XHJcbiBcIlJldHVybiBhIHN0cmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgc3VwcGxpZWQuXFxuICAgTWF5IGJlIHRoZSBhIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpdHNlbGYgKGUuZy4gXFxcInRydWVcXFwiKVxcbiAgIG9yIGl0IG1heSBiZSBhIGRlc2NyaXB0aW9uIChlLmcuIFxcXCJhbiBpbnN0YW5jZSBvZiBGb29cXFwiKS5cXG4gICBJZiB0cnVuY2F0ZSBpcyB0cnVlIHRoZW4gcmV0dXJuIGEgdmVyeSB0ZXJzZSB2ZXJzaW9uIG9mXFxuICAgdGhlIGluc3BlY3Rpb24uXCJcclxuIChbeF0gKGluc3BlY3QqIGZhbHNlIHgpKVxyXG4gKFt0cnVuY2F0ZSB4XSAoaW5zcGVjdCogdHJ1bmNhdGUgeCkpKVxyXG4ifSksIHNhYmxvbm8uY29yZSAoezpzeW0gd3JhcC1hdHRycywgOm1ldGEgezpkb2MgIkFkZCBhbiBvcHRpb25hbCBhdHRyaWJ1dGUgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBlbGVtZW50IHZlY3Rvci4iLCA6YXJnbGlzdHMgKFtmdW5jXSl9LCA6c291cmNlICIoZGVmblxyXG4gd3JhcC1hdHRyc1xyXG4gXCJBZGQgYW4gb3B0aW9uYWwgYXR0cmlidXRlIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgZWxlbWVudCB2ZWN0b3IuXCJcclxuIFtmdW5jXVxyXG4gKGZuXHJcbiAgWyYgYXJnc11cclxuICAoaWZcclxuICAgKG1hcD8gKGZpcnN0IGFyZ3MpKVxyXG4gICAobGV0XHJcbiAgICBbW3RhZyAmIGJvZHldIChhcHBseSBmdW5jIChyZXN0IGFyZ3MpKV1cclxuICAgIChpZlxyXG4gICAgIChtYXA/IChmaXJzdCBib2R5KSlcclxuICAgICAoaW50byBbdGFnIChtZXJnZSAoZmlyc3QgYm9keSkgKGZpcnN0IGFyZ3MpKV0gKHJlc3QgYm9keSkpXHJcbiAgICAgKGludG8gW3RhZyAoZmlyc3QgYXJncyldIGJvZHkpKSlcclxuICAgKGFwcGx5IGZ1bmMgYXJncykpKSlcclxuIn0gezpzeW0gaW5jbHVkZS1jc3MsIDptZXRhIHs6ZG9jICJJbmNsdWRlIGEgbGlzdCBvZiBleHRlcm5hbCBzdHlsZXNoZWV0IGZpbGVzLiIsIDphcmdsaXN0cyAoWyYgc3R5bGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5jbHVkZS1jc3NcclxuIFwiSW5jbHVkZSBhIGxpc3Qgb2YgZXh0ZXJuYWwgc3R5bGVzaGVldCBmaWxlcy5cIlxyXG4gWyYgc3R5bGVzXVxyXG4gKGZvclxyXG4gIFtzdHlsZSBzdHlsZXNdXHJcbiAgWzpsaW5rIHs6dHlwZSBcInRleHQvY3NzXCIsIDpocmVmIChhcy1zdHIgc3R5bGUpLCA6cmVsIFwic3R5bGVzaGVldFwifV0pKVxyXG4ifSB7OnN5bSBpbmNsdWRlLWpzLCA6bWV0YSB7OmRvYyAiSW5jbHVkZSB0aGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGF0IGBzcmNgLiIsIDphcmdsaXN0cyAoW3NyY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluY2x1ZGUtanNcclxuIFwiSW5jbHVkZSB0aGUgSmF2YVNjcmlwdCBsaWJyYXJ5IGF0IGBzcmNgLlwiXHJcbiBbc3JjXVxyXG4gKGRvbS9hcHBlbmRDaGlsZFxyXG4gICguLWJvZHkgKGRvbS9nZXREb2N1bWVudCkpXHJcbiAgKGRvbS9jcmVhdGVEb20gXCJzY3JpcHRcIiAjanMgezpzcmMgc3JjfSkpKVxyXG4ifSB7OnN5bSBpbmNsdWRlLXJlYWN0LCA6bWV0YSB7OmRvYyAiSW5jbHVkZSBGYWNlYm9vaydzIFJlYWN0IEphdmFTY3JpcHQgbGlicmFyeS4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmNsdWRlLXJlYWN0XHJcbiBcIkluY2x1ZGUgRmFjZWJvb2sncyBSZWFjdCBKYXZhU2NyaXB0IGxpYnJhcnkuXCJcclxuIFtdXHJcbiAoaW5jbHVkZS1qcyBcImh0dHA6Ly9mYi5tZS9yZWFjdC0wLjEyLjIuanNcIikpXHJcbiJ9IHs6c3ltICpncm91cCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpncm91cCogW10pXHJcbiJ9IHs6c3ltIGZpbGUtdXBsb2FkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBmaWxlLXVwbG9hZCBmaWxlLWZpZWxkKVxyXG4ifSksIGNsb2p1cmUuc2V0ICh7OnN5bSB1bmlvbiwgOm1ldGEgezpkb2MgIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGUgaW5wdXQgc2V0cyIsIDphcmdsaXN0cyBbW10gW3MxXSBbczEgczJdIFtzMSBzMiAmIHNldHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmlvblxyXG4gXCJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhlIGlucHV0IHNldHNcIlxyXG4gKFtdICN7fSlcclxuIChbczFdIHMxKVxyXG4gKFtzMSBzMl1cclxuICAoaWZcclxuICAgKDwgKGNvdW50IHMxKSAoY291bnQgczIpKVxyXG4gICAocmVkdWNlIGNvbmogczIgczEpXHJcbiAgIChyZWR1Y2UgY29uaiBzMSBzMikpKVxyXG4gKFtzMSBzMiAmIHNldHNdXHJcbiAgKGxldFxyXG4gICBbYnViYmxlZC1zZXRzIChidWJibGUtbWF4LWtleSBjb3VudCAoY29uaiBzZXRzIHMyIHMxKSldXHJcbiAgIChyZWR1Y2UgaW50byAoZmlyc3QgYnViYmxlZC1zZXRzKSAocmVzdCBidWJibGVkLXNldHMpKSkpKVxyXG4ifSB7OnN5bSBtYXAtaW52ZXJ0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWFwIHdpdGggdGhlIHZhbHMgbWFwcGVkIHRvIHRoZSBrZXlzLiIsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtaW52ZXJ0XHJcbiBcIlJldHVybnMgdGhlIG1hcCB3aXRoIHRoZSB2YWxzIG1hcHBlZCB0byB0aGUga2V5cy5cIlxyXG4gW21dXHJcbiAocmVkdWNlIChmbiBbbSBbayB2XV0gKGFzc29jIG0gdiBrKSkge30gbSkpXHJcbiJ9IHs6c3ltIGpvaW4sIDptZXRhIHs6ZG9jICJXaGVuIHBhc3NlZCAyIHJlbHMsIHJldHVybnMgdGhlIHJlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYXR1cmFsXG4gIGpvaW4uIFdoZW4gcGFzc2VkIGFuIGFkZGl0aW9uYWwga2V5bWFwLCBqb2lucyBvbiB0aGUgY29ycmVzcG9uZGluZ1xuICBrZXlzLiIsIDphcmdsaXN0cyBbW3hyZWwgeXJlbF0gW3hyZWwgeXJlbCBrbV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpvaW5cclxuIFwiV2hlbiBwYXNzZWQgMiByZWxzLCByZXR1cm5zIHRoZSByZWwgY29ycmVzcG9uZGluZyB0byB0aGUgbmF0dXJhbFxcbiAgam9pbi4gV2hlbiBwYXNzZWQgYW4gYWRkaXRpb25hbCBrZXltYXAsIGpvaW5zIG9uIHRoZSBjb3JyZXNwb25kaW5nXFxuICBrZXlzLlwiXHJcbiAoW3hyZWwgeXJlbF1cclxuICAoaWZcclxuICAgKGFuZCAoc2VxIHhyZWwpIChzZXEgeXJlbCkpXHJcbiAgIChsZXRcclxuICAgIFtrc1xyXG4gICAgIChpbnRlcnNlY3Rpb24gKHNldCAoa2V5cyAoZmlyc3QgeHJlbCkpKSAoc2V0IChrZXlzIChmaXJzdCB5cmVsKSkpKVxyXG4gICAgIFtyIHNdXHJcbiAgICAgKGlmICg8PSAoY291bnQgeHJlbCkgKGNvdW50IHlyZWwpKSBbeHJlbCB5cmVsXSBbeXJlbCB4cmVsXSlcclxuICAgICBpZHhcclxuICAgICAoaW5kZXggciBrcyldXHJcbiAgICAocmVkdWNlXHJcbiAgICAgKGZuXHJcbiAgICAgIFtyZXQgeF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2ZvdW5kIChpZHggKHNlbGVjdC1rZXlzIHgga3MpKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIGZvdW5kXHJcbiAgICAgICAgKHJlZHVjZVxyXG4gICAgICAgICAoZm4qXHJcbiAgICAgICAgICBbcDFfXzQ4OTgyIyBwMl9fNDg5ODMjXVxyXG4gICAgICAgICAgKGNvbmogcDFfXzQ4OTgyIyAobWVyZ2UgcDJfXzQ4OTgzIyB4KSkpXHJcbiAgICAgICAgIHJldFxyXG4gICAgICAgICBmb3VuZClcclxuICAgICAgICByZXQpKSlcclxuICAgICAje31cclxuICAgICBzKSlcclxuICAgI3t9KSlcclxuIChbeHJlbCB5cmVsIGttXVxyXG4gIChsZXRcclxuICAgW1tyIHMga11cclxuICAgIChpZlxyXG4gICAgICg8PSAoY291bnQgeHJlbCkgKGNvdW50IHlyZWwpKVxyXG4gICAgIFt4cmVsIHlyZWwgKG1hcC1pbnZlcnQga20pXVxyXG4gICAgIFt5cmVsIHhyZWwga21dKVxyXG4gICAgaWR4XHJcbiAgICAoaW5kZXggciAodmFscyBrKSldXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFtyZXQgeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtmb3VuZCAoaWR4IChyZW5hbWUta2V5cyAoc2VsZWN0LWtleXMgeCAoa2V5cyBrKSkgaykpXVxyXG4gICAgICAoaWZcclxuICAgICAgIGZvdW5kXHJcbiAgICAgICAocmVkdWNlXHJcbiAgICAgICAgKGZuKlxyXG4gICAgICAgICBbcDFfXzQ4OTg0IyBwMl9fNDg5ODUjXVxyXG4gICAgICAgICAoY29uaiBwMV9fNDg5ODQjIChtZXJnZSBwMl9fNDg5ODUjIHgpKSlcclxuICAgICAgICByZXRcclxuICAgICAgICBmb3VuZClcclxuICAgICAgIHJldCkpKVxyXG4gICAgI3t9XHJcbiAgICBzKSkpKVxyXG4ifSB7OnN5bSBzZWxlY3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2V0IG9mIHRoZSBlbGVtZW50cyBmb3Igd2hpY2ggcHJlZCBpcyB0cnVlIiwgOmFyZ2xpc3RzIChbcHJlZCB4c2V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VsZWN0XHJcbiBcIlJldHVybnMgYSBzZXQgb2YgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBwcmVkIGlzIHRydWVcIlxyXG4gW3ByZWQgeHNldF1cclxuIChyZWR1Y2UgKGZuIFtzIGtdIChpZiAocHJlZCBrKSBzIChkaXNqIHMgaykpKSB4c2V0IHhzZXQpKVxyXG4ifSB7OnN5bSBpbnRlcnNlY3Rpb24sIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBpbnB1dCBzZXRzIiwgOmFyZ2xpc3RzIFtbczFdIFtzMSBzMl0gW3MxIHMyICYgc2V0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludGVyc2VjdGlvblxyXG4gXCJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBpbnB1dCBzZXRzXCJcclxuIChbczFdIHMxKVxyXG4gKFtzMSBzMl1cclxuICAoaWZcclxuICAgKDwgKGNvdW50IHMyKSAoY291bnQgczEpKVxyXG4gICAocmVjdXIgczIgczEpXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFtyZXN1bHQgaXRlbV1cclxuICAgICAoaWYgKGNvbnRhaW5zPyBzMiBpdGVtKSByZXN1bHQgKGRpc2ogcmVzdWx0IGl0ZW0pKSlcclxuICAgIHMxXHJcbiAgICBzMSkpKVxyXG4gKFtzMSBzMiAmIHNldHNdXHJcbiAgKGxldFxyXG4gICBbYnViYmxlZC1zZXRzXHJcbiAgICAoYnViYmxlLW1heC1rZXlcclxuICAgICAoZm4qIFtwMV9fNDg5NzkjXSAoLSAoY291bnQgcDFfXzQ4OTc5IykpKVxyXG4gICAgIChjb25qIHNldHMgczIgczEpKV1cclxuICAgKHJlZHVjZSBpbnRlcnNlY3Rpb24gKGZpcnN0IGJ1YmJsZWQtc2V0cykgKHJlc3QgYnViYmxlZC1zZXRzKSkpKSlcclxuIn0gezpzeW0gc3VwZXJzZXQ/LCA6bWV0YSB7OmRvYyAiSXMgc2V0MSBhIHN1cGVyc2V0IG9mIHNldDI/IiwgOmFyZ2xpc3RzIChbc2V0MSBzZXQyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3VwZXJzZXQ/XHJcbiBcIklzIHNldDEgYSBzdXBlcnNldCBvZiBzZXQyP1wiXHJcbiBbc2V0MSBzZXQyXVxyXG4gKGFuZFxyXG4gICg+PSAoY291bnQgc2V0MSkgKGNvdW50IHNldDIpKVxyXG4gIChldmVyeT8gKGZuKiBbcDFfXzQ4OTg3I10gKGNvbnRhaW5zPyBzZXQxIHAxX180ODk4NyMpKSBzZXQyKSkpXHJcbiJ9IHs6c3ltIGluZGV4LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCBvZiB0aGUgZGlzdGluY3QgdmFsdWVzIG9mIGtzIGluIHRoZSB4cmVsIG1hcHBlZCB0byBhXG4gIHNldCBvZiB0aGUgbWFwcyBpbiB4cmVsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIGtzLiIsIDphcmdsaXN0cyAoW3hyZWwga3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleFxyXG4gXCJSZXR1cm5zIGEgbWFwIG9mIHRoZSBkaXN0aW5jdCB2YWx1ZXMgb2Yga3MgaW4gdGhlIHhyZWwgbWFwcGVkIHRvIGFcXG4gIHNldCBvZiB0aGUgbWFwcyBpbiB4cmVsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIG9mIGtzLlwiXHJcbiBbeHJlbCBrc11cclxuIChyZWR1Y2VcclxuICAoZm5cclxuICAgW20geF1cclxuICAgKGxldCBbaWsgKHNlbGVjdC1rZXlzIHgga3MpXSAoYXNzb2MgbSBpayAoY29uaiAoZ2V0IG0gaWsgI3t9KSB4KSkpKVxyXG4gIHt9XHJcbiAgeHJlbCkpXHJcbiJ9IHs6c3ltIHN1YnNldD8sIDptZXRhIHs6ZG9jICJJcyBzZXQxIGEgc3Vic2V0IG9mIHNldDI/IiwgOmFyZ2xpc3RzIChbc2V0MSBzZXQyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3Vic2V0P1xyXG4gXCJJcyBzZXQxIGEgc3Vic2V0IG9mIHNldDI/XCJcclxuIFtzZXQxIHNldDJdXHJcbiAoYW5kXHJcbiAgKDw9IChjb3VudCBzZXQxKSAoY291bnQgc2V0MikpXHJcbiAgKGV2ZXJ5PyAoZm4qIFtwMV9fNDg5ODYjXSAoY29udGFpbnM/IHNldDIgcDFfXzQ4OTg2IykpIHNldDEpKSlcclxuIn0gezpzeW0gcmVuYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHJlbCBvZiB0aGUgbWFwcyBpbiB4cmVsIHdpdGggdGhlIGtleXMgaW4ga21hcCByZW5hbWVkIHRvIHRoZSB2YWxzIGluIGttYXAiLCA6YXJnbGlzdHMgKFt4cmVsIGttYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW5hbWVcclxuIFwiUmV0dXJucyBhIHJlbCBvZiB0aGUgbWFwcyBpbiB4cmVsIHdpdGggdGhlIGtleXMgaW4ga21hcCByZW5hbWVkIHRvIHRoZSB2YWxzIGluIGttYXBcIlxyXG4gW3hyZWwga21hcF1cclxuIChzZXQgKG1hcCAoZm4qIFtwMV9fNDg5ODEjXSAocmVuYW1lLWtleXMgcDFfXzQ4OTgxIyBrbWFwKSkgeHJlbCkpKVxyXG4ifSB7OnN5bSByZW5hbWUta2V5cywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1hcCB3aXRoIHRoZSBrZXlzIGluIGttYXAgcmVuYW1lZCB0byB0aGUgdmFscyBpbiBrbWFwIiwgOmFyZ2xpc3RzIChbbWFwIGttYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW5hbWUta2V5c1xyXG4gXCJSZXR1cm5zIHRoZSBtYXAgd2l0aCB0aGUga2V5cyBpbiBrbWFwIHJlbmFtZWQgdG8gdGhlIHZhbHMgaW4ga21hcFwiXHJcbiBbbWFwIGttYXBdXHJcbiAocmVkdWNlXHJcbiAgKGZuXHJcbiAgIFttIFtvbGQgbmV3XV1cclxuICAgKGlmIChjb250YWlucz8gbWFwIG9sZCkgKGFzc29jIG0gbmV3IChnZXQgbWFwIG9sZCkpIG0pKVxyXG4gIChhcHBseSBkaXNzb2MgbWFwIChrZXlzIGttYXApKVxyXG4gIGttYXApKVxyXG4ifSB7OnN5bSBwcm9qZWN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHJlbCBvZiB0aGUgZWxlbWVudHMgb2YgeHJlbCB3aXRoIG9ubHkgdGhlIGtleXMgaW4ga3MiLCA6YXJnbGlzdHMgKFt4cmVsIGtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJvamVjdFxyXG4gXCJSZXR1cm5zIGEgcmVsIG9mIHRoZSBlbGVtZW50cyBvZiB4cmVsIHdpdGggb25seSB0aGUga2V5cyBpbiBrc1wiXHJcbiBbeHJlbCBrc11cclxuIChzZXQgKG1hcCAoZm4qIFtwMV9fNDg5ODAjXSAoc2VsZWN0LWtleXMgcDFfXzQ4OTgwIyBrcykpIHhyZWwpKSlcclxuIn0gezpzeW0gZGlmZmVyZW5jZSwgOm1ldGEgezpkb2MgIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSBmaXJzdCBzZXQgd2l0aG91dCBlbGVtZW50cyBvZiB0aGUgcmVtYWluaW5nIHNldHMiLCA6YXJnbGlzdHMgW1tzMV0gW3MxIHMyXSBbczEgczIgJiBzZXRzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlmZmVyZW5jZVxyXG4gXCJSZXR1cm4gYSBzZXQgdGhhdCBpcyB0aGUgZmlyc3Qgc2V0IHdpdGhvdXQgZWxlbWVudHMgb2YgdGhlIHJlbWFpbmluZyBzZXRzXCJcclxuIChbczFdIHMxKVxyXG4gKFtzMSBzMl1cclxuICAoaWZcclxuICAgKDwgKGNvdW50IHMxKSAoY291bnQgczIpKVxyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbcmVzdWx0IGl0ZW1dXHJcbiAgICAgKGlmIChjb250YWlucz8gczIgaXRlbSkgKGRpc2ogcmVzdWx0IGl0ZW0pIHJlc3VsdCkpXHJcbiAgICBzMVxyXG4gICAgczEpXHJcbiAgIChyZWR1Y2UgZGlzaiBzMSBzMikpKVxyXG4gKFtzMSBzMiAmIHNldHNdIChyZWR1Y2UgZGlmZmVyZW5jZSBzMSAoY29uaiBzZXRzIHMyKSkpKVxyXG4ifSksIG9kb3lsZS5ydW0gKHs6c3ltICptYXRjaGVzKiwgOm1ldGEgezpkb2MgIklmIGJvdW5kIHRvIGFuIHZvbGF0aWxlIGNvbnRhaW5pbmcgYSBoYXNoIG1hcCxcbiAgICAgICAgICAgIG1hdGNoZXMgdHJpZ2dlcmVkIGJ5IGBmaXJlLXJ1bGVzYCB3aWxsIGJlIHN0b3JlZCBpbiBpdFxuICAgICAgICAgICAgcmF0aGVyIHRoYW4gaW4gdGhlIGF0b20gY3JlYXRlZCBieSBgcnVsZXNldGAuXG4gICAgICAgICAgICBUaGlzIGlzIGltcG9ydGFudCB3aGVuIG1vZGlmeWluZyB0aGUgc2Vzc2lvbiBpbiBhIHNlcnZlci1zaWRlXG4gICAgICAgICAgICByb3V0ZSBiZWNhdXNlIGl0IGVuc3VyZXMgdGhlIG1vZGlmaWNhdGlvbnMgd2lsbCBiZSBsb2NhbFxuICAgICAgICAgICAgYW5kIHdpbGwgbm90IGFmZmVjdCBvdGhlciBjb25uZWN0aW9ucyBoYXBwZW5pbmcgc2ltdWx0YW5lb3VzbHkuXG4gICAgICAgICAgICBEbyBub3QgdXNlIGl0IGZyb20gY2xvanVyZXNjcmlwdC4ifSwgOnNvdXJjZSAiKGRlZiAqbWF0Y2hlcyogbmlsKVxyXG4ifSB7OnN5bSBhdG9tLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBhdG9tIHRoYXQgY2FuIGhvbGQgbG9jYWwgc3RhdGUgZm9yIGEgY29tcG9uZW50LlxuICBPbmx5IHdvcmtzIGluIGEgOnRoZW4gYmxvY2suIiwgOmFyZ2xpc3RzIChbaW5pdGlhbC12YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGF0b21cclxuIFwiUmV0dXJucyBhbiBhdG9tIHRoYXQgY2FuIGhvbGQgbG9jYWwgc3RhdGUgZm9yIGEgY29tcG9uZW50LlxcbiAgT25seSB3b3JrcyBpbiBhIDp0aGVuIGJsb2NrLlwiXHJcbiBbaW5pdGlhbC12YWx1ZV1cclxuICh3aGVuLW5vdFxyXG4gICpsb2NhbC1wb2ludGVyKlxyXG4gICh0aHJvdyAoZXgtaW5mbyBcIllvdSBjYW5ub3QgY2FsbCBgYXRvbWAgaGVyZVwiIHt9KSkpXHJcbiAod2hlbi1ub3RcclxuICBAKmNhbi1yZXR1cm4tYXRvbT8qXHJcbiAgKHRocm93XHJcbiAgIChleC1pbmZvIFwiWW91IGNhbiBvbmx5IGNhbGwgYGF0b21gIG9uY2UgaW4gZWFjaCA6dGhlbiBibG9ja1wiIHt9KSkpXHJcbiAodnJlc2V0ISAqY2FuLXJldHVybi1hdG9tPyogZmFsc2UpXHJcbiAoaWYtbGV0XHJcbiAgWypsb2NhbCBAKmxvY2FsLXBvaW50ZXIqXVxyXG4gICpsb2NhbFxyXG4gIChsZXRcclxuICAgWypsb2NhbCAocmVzZXQhICpsb2NhbC1wb2ludGVyKiAoY2xvanVyZS5jb3JlL2F0b20gaW5pdGlhbC12YWx1ZSkpXVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtjbXAgKnJlYWN0LWNvbXBvbmVudCpdXHJcbiAgICAoYWRkLXdhdGNoXHJcbiAgICAgKmxvY2FsXHJcbiAgICAgOm9kb3lsZS5ydW0vbG9jYWxcclxuICAgICAoZm4gW18gXyBwIG5dICh3aGVuIChub3Q9IHAgbikgKC5mb3JjZVVwZGF0ZSBjbXApKSkpKVxyXG4gICAqbG9jYWwpKSlcclxuIn0gezpzeW0gcHJvcCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByb3Agc2VudCB0byB0aGUgY29tcG9uZW50LiBPbmx5IHdvcmtzIGluIGEgOnRoZW4gYmxvY2suIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJvcFxyXG4gXCJSZXR1cm5zIHRoZSBwcm9wIHNlbnQgdG8gdGhlIGNvbXBvbmVudC4gT25seSB3b3JrcyBpbiBhIDp0aGVuIGJsb2NrLlwiXHJcbiBbXVxyXG4gKHdoZW4tbm90XHJcbiAgKmxvY2FsLXBvaW50ZXIqXHJcbiAgKHRocm93IChleC1pbmZvIFwiWW91IGNhbm5vdCBjYWxsIGBwcm9wYCBoZXJlXCIge30pKSlcclxuICpwcm9wKilcclxuIn0gezpzeW0gcmVhY3RpdmUsIDptZXRhIHs6ZG9jICJBIHJ1bSBtaXhpbiB0aGF0IG1ha2VzIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCByZWFjdCB0byBjaGFuZ2VzIGZyb21cbiAgdGhlIHNlc3Npb24gYW5kIHRoZSBsb2NhbCBhdG9tLiIsIDphcmdsaXN0cyAoW3J1bGUta2V5ICptYXRjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWN0aXZlXHJcbiBcIkEgcnVtIG1peGluIHRoYXQgbWFrZXMgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IHJlYWN0IHRvIGNoYW5nZXMgZnJvbVxcbiAgdGhlIHNlc3Npb24gYW5kIHRoZSBsb2NhbCBhdG9tLlwiXHJcbiBbcnVsZS1rZXkgKm1hdGNoXVxyXG4gezppbml0XHJcbiAgKGZuXHJcbiAgIFtzdGF0ZSBwcm9wc11cclxuICAgKC0+XHJcbiAgICBzdGF0ZVxyXG4gICAgKGFzc29jIDpvZG95bGUucnVtL2xvY2FsLXBvaW50ZXIgKGNsb2p1cmUuY29yZS9hdG9tIG5pbCkpXHJcbiAgICAjPyg6Y2xqcyAoYXNzb2MgOm9kb3lsZS5ydW0vZ2xvYmFsLWtleSAobGV0IFtnbG9iYWwta2V5IChyYW5kb20tdXVpZCkgY21wICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSldIChhZGQtd2F0Y2ggKm1hdGNoIGdsb2JhbC1rZXkgKGZuIFtfIF8gcCBuXSAod2hlbiAobm90PSBwIG4pICguZm9yY2VVcGRhdGUgY21wKSkpKSBnbG9iYWwta2V5KSkpKSksXHJcbiAgOndyYXAtcmVuZGVyXHJcbiAgKGZuXHJcbiAgIFtyZW5kZXItZm5dXHJcbiAgIChmblxyXG4gICAgW3N0YXRlXVxyXG4gICAgKGJpbmRpbmdcclxuICAgICBbKmxvY2FsLXBvaW50ZXIqXHJcbiAgICAgICg6b2RveWxlLnJ1bS9sb2NhbC1wb2ludGVyIHN0YXRlKVxyXG4gICAgICAqcmVhY3QtY29tcG9uZW50KlxyXG4gICAgICAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpXHJcbiAgICAgICpjYW4tcmV0dXJuLWF0b20/KlxyXG4gICAgICAodm9sYXRpbGUhIHRydWUpXHJcbiAgICAgICpwcm9wKlxyXG4gICAgICAoZmlyc3QgKDpydW0vYXJncyBzdGF0ZSkpXHJcbiAgICAgIG8vKm1hdGNoKlxyXG4gICAgICAjPyg6Y2xqcyAoY2xvanVyZS5jb3JlL2RlcmVmICptYXRjaCkgOmNsaiAob3IgKHNvbWUtPiAqbWF0Y2hlcyogZGVyZWYgcnVsZS1rZXkpIChjbG9qdXJlLmNvcmUvZGVyZWYgKm1hdGNoKSkpXVxyXG4gICAgIChyZW5kZXItZm4gc3RhdGUpKSkpLFxyXG4gIDp3aWxsLXVubW91bnRcclxuICAoZm5cclxuICAgW3N0YXRlXVxyXG4gICAjPyg6Y2xqcyAocmVtb3ZlLXdhdGNoICptYXRjaCAoOm9kb3lsZS5ydW0vZ2xvYmFsLWtleSBzdGF0ZSkpKVxyXG4gICAod2hlbi1sZXRcclxuICAgIFsqbG9jYWwgQCg6b2RveWxlLnJ1bS9sb2NhbC1wb2ludGVyIHN0YXRlKV1cclxuICAgIChyZW1vdmUtd2F0Y2ggKmxvY2FsIDpvZG95bGUucnVtL2xvY2FsKSlcclxuICAgKGRpc3NvYyBzdGF0ZSA6b2RveWxlLnJ1bS9sb2NhbC1wb2ludGVyKSl9KVxyXG4ifSksIHBhcmVuLXNvdXAuaW5zdGFyZXBsICh7OnN5bSAqd2ViLXdvcmtlci1wYXRoKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKndlYi13b3JrZXItcGF0aCogbmlsKVxyXG4ifSB7OnN5bSBmb3JtLT5zZXJpYWxpemFibGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcm0tPnNlcmlhbGl6YWJsZVxyXG4gW2Zvcm1dXHJcbiAoaWZcclxuICAoaW5zdGFuY2U/IGpzL0Vycm9yIGZvcm0pXHJcbiAgKGFycmF5XHJcbiAgIChvciAoc29tZS0+IGZvcm0gLi1jYXVzZSAuLW1lc3NhZ2UpICguLW1lc3NhZ2UgZm9ybSkpXHJcbiAgICguLWZpbGVOYW1lIGZvcm0pXHJcbiAgICguLWxpbmVOdW1iZXIgZm9ybSkpXHJcbiAgKHByLXN0ciBmb3JtKSkpXHJcbiJ9IHs6c3ltIHJlc3VsdHMtPmh0bWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIEhUTUwgZm9yIHRoZSBnaXZlbiBldmFsIHJlc3VsdHMuIiwgOmFyZ2xpc3RzIChbcmVzdWx0cyBsb2NhdGlvbnMgbGltaXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXN1bHRzLT5odG1sXHJcbiBcIlJldHVybnMgSFRNTCBmb3IgdGhlIGdpdmVuIGV2YWwgcmVzdWx0cy5cIlxyXG4gW3Jlc3VsdHMgbG9jYXRpb25zIGxpbWl0XVxyXG4gKGxvb3BcclxuICBbaSAwIGV2YWxzICh0cmFuc2llbnQgW10pXVxyXG4gIChsZXRcclxuICAgW3JlcyAoZ2V0IHJlc3VsdHMgaSkgezprZXlzIFt0b3AgaGVpZ2h0XX0gKGdldCBsb2NhdGlvbnMgaSldXHJcbiAgIChpZlxyXG4gICAgKGFuZCByZXMgdG9wIGhlaWdodClcclxuICAgIChyZWN1clxyXG4gICAgIChpbmMgaSlcclxuICAgICAoY29uaiFcclxuICAgICAgZXZhbHNcclxuICAgICAgKGZvcm1hdFxyXG4gICAgICAgXCI8ZGl2IGNsYXNzPSclcycgc3R5bGU9J3RvcDogJXNweDsgaGVpZ2h0OiAlc3B4OyBtaW4taGVpZ2h0OiAlc3B4Jz4lczwvZGl2PlwiXHJcbiAgICAgICAoaWYgKGFycmF5PyByZXMpIFwicmVzdWx0IGVycm9yXCIgXCJyZXN1bHRcIilcclxuICAgICAgIHRvcFxyXG4gICAgICAgaGVpZ2h0XHJcbiAgICAgICBoZWlnaHRcclxuICAgICAgIChzb21lLT5cclxuICAgICAgICAoaWYgKGFycmF5PyByZXMpIChmaXJzdCByZXMpIHJlcylcclxuICAgICAgICAodHJ1bmNhdGUgbGltaXQpXHJcbiAgICAgICAgaHMvZXNjYXBlLWh0bWwtc3RyKSkpKVxyXG4gICAgKGpvaW4gKHBlcnNpc3RlbnQhIGV2YWxzKSkpKSkpXHJcbiJ9IHs6c3ltIHVzZS13ZWItd29ya2VyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1c2Utd2ViLXdvcmtlciFcclxuIFtdXHJcbiAoc2V0ISAqd2ViLXdvcmtlci1wYXRoKiBcInBhcmVuLXNvdXAtY29tcGlsZXIuanNcIikpXHJcbiJ9IHs6c3ltIGVsZW0/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBlbGVtPyAoZm4qIFtwMV9fNDkwNDAjXSAoaW5zdGFuY2U/IGpzL0VsZW1lbnQgcDFfXzQ5MDQwIykpKVxyXG4ifSB7OnN5bSBjb2xsZWN0aW9uLT5jb250ZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xsZWN0aW9uLT5jb250ZW50XHJcbiBbZWxlbV1cclxuIChsb29wXHJcbiAgW2UgZWxlbSBjb250ZW50ICguLXRleHRDb250ZW50IGVsZW0pXVxyXG4gIChpZi1sZXRcclxuICAgW3ByZXYgKC4tcHJldmlvdXNTaWJsaW5nIGUpXVxyXG4gICAoaWZcclxuICAgICh0ZXh0LW5vZGU/IHByZXYpXHJcbiAgICAocmVjdXIgcHJldiAoc3RyICguLXRleHRDb250ZW50IHByZXYpIGNvbnRlbnQpKVxyXG4gICAgY29udGVudClcclxuICAgY29udGVudCkpKVxyXG4ifSB7OnN5bSB0cnVuY2F0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0ZXh0IGxpbWl0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJ1bmNhdGVcclxuIFt0ZXh0IGxpbWl0XVxyXG4gKGlmICg+IChjb3VudCB0ZXh0KSBsaW1pdCkgKHN0ciAoc3VicyB0ZXh0IDAgbGltaXQpIFwiLi4uXCIpIHRleHQpKVxyXG4ifSB7OnN5bSBjcmVhdGUtY29tcGlsZXItZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNyZWF0ZS1jb21waWxlci1mblxyXG4gW29wdHNdXHJcbiAoaWYtbGV0XHJcbiAgW3dvcmtlciAoc29tZS0+ICp3ZWItd29ya2VyLXBhdGgqIGpzL1dvcmtlci4pXVxyXG4gIChmblxyXG4gICBbY29sbCByZWNlaXZlLWZuXVxyXG4gICAoc2V0IVxyXG4gICAgKC4tb25tZXNzYWdlIHdvcmtlcilcclxuICAgIChmbiogW3AxX180OTA0MSNdIChyZWNlaXZlLWZuICh2ZWMgKC4tZGF0YSBwMV9fNDkwNDEjKSkpKSlcclxuICAgKC5wb3N0TWVzc2FnZSB3b3JrZXIgKGludG8tYXJyYXkgY29sbCkpKVxyXG4gIChmblxyXG4gICBbY29sbCByZWNlaXZlLWZuXVxyXG4gICAoZXMvY29kZS0+cmVzdWx0c1xyXG4gICAgY29sbFxyXG4gICAgKGZuXHJcbiAgICAgW3Jlc3VsdHNdXHJcbiAgICAgKHJlY2VpdmUtZm4gKGludG8tYXJyYXkgKG1hcHYgZm9ybS0+c2VyaWFsaXphYmxlIHJlc3VsdHMpKSkpXHJcbiAgICBvcHRzKSkpKVxyXG4ifSB7OnN5bSBnZXQtY29sbGVjdGlvbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGNvbGxlY3Rpb25zIGZyb20gdGhlIGdpdmVuIERPTSBub2RlLiIsIDphcmdsaXN0cyAoW2VsZW1lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY29sbGVjdGlvbnNcclxuIFwiUmV0dXJucyBjb2xsZWN0aW9ucyBmcm9tIHRoZSBnaXZlbiBET00gbm9kZS5cIlxyXG4gW2VsZW1lbnRdXHJcbiAodmVjXHJcbiAgKGZvclxyXG4gICBbZWxlbVxyXG4gICAgKC0+IGVsZW1lbnQgLi1jaGlsZHJlbiBhcnJheS1zZXEpXHJcbiAgICA6bGV0XHJcbiAgICBbY2xhc3NlcyAoLi1jbGFzc0xpc3QgZWxlbSldXHJcbiAgICA6d2hlblxyXG4gICAgKG9yICguY29udGFpbnMgY2xhc3NlcyBcImNvbGxlY3Rpb25cIikgKC5jb250YWlucyBjbGFzc2VzIFwic3ltYm9sXCIpKV1cclxuICAgZWxlbSkpKVxyXG4ifSB7OnN5bSBlbGVtcy0+bG9jYXRpb25zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgZWFjaCBlbGVtLiIsIDphcmdsaXN0cyAoW2VsZW1zIHRvcC1vZmZzZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGVtcy0+bG9jYXRpb25zXHJcbiBcIlJldHVybnMgdGhlIGxvY2F0aW9uIG9mIGVhY2ggZWxlbS5cIlxyXG4gW2VsZW1zIHRvcC1vZmZzZXRdXHJcbiAobG9vcFxyXG4gIFtpIDAgbG9jYXRpb25zICh0cmFuc2llbnQgW10pXVxyXG4gIChpZi1sZXRcclxuICAgW2VsZW0gKGdldCBlbGVtcyBpKV1cclxuICAgKGxldFxyXG4gICAgW3RvcFxyXG4gICAgICgtPiBlbGVtIC4tb2Zmc2V0VG9wICgtIHRvcC1vZmZzZXQpKVxyXG4gICAgIGhlaWdodFxyXG4gICAgICgtPiBlbGVtIC4tb2Zmc2V0SGVpZ2h0KV1cclxuICAgIChyZWN1ciAoaW5jIGkpIChjb25qISBsb2NhdGlvbnMgezp0b3AgdG9wLCA6aGVpZ2h0IGhlaWdodH0pKSlcclxuICAgKHBlcnNpc3RlbnQhIGxvY2F0aW9ucykpKSlcclxuIn0pLCBjbGpzLnBwcmludCAoezpzeW0gcHByaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW29iamVjdF0gW29iamVjdCB3cml0ZXJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnRcclxuIChbb2JqZWN0XVxyXG4gIChsZXRcclxuICAgW3NiIChTdHJpbmdCdWZmZXIuKV1cclxuICAgKGJpbmRpbmdcclxuICAgIFsqb3V0KiAoU3RyaW5nQnVmZmVyV3JpdGVyLiBzYildXHJcbiAgICAocHByaW50IG9iamVjdCAqb3V0KilcclxuICAgIChzdHJpbmctcHJpbnQgKHN0ciBzYikpKSkpXHJcbiAoW29iamVjdCB3cml0ZXJdXHJcbiAgKHdpdGgtcHJldHR5LXdyaXRlclxyXG4gICB3cml0ZXJcclxuICAgKGJpbmRpbmcgWypwcmludC1wcmV0dHkqIHRydWVdICh3cml0ZS1vdXQgb2JqZWN0KSlcclxuICAgKGlmIChub3QgKD0gMCAoZ2V0LWNvbHVtbiAqb3V0KikpKSAoLXdyaXRlICpvdXQqIFxcbmV3bGluZSkpKSkpXHJcbiJ9IHs6c3ltIGdldC1wcmV0dHktd3JpdGVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgSVdyaXRlciBwYXNzZWQgaW4gd3JhcHBlZCBpbiBhIHByZXR0eSB3cml0ZXIgcHJveHksIHVubGVzcyBpdCdzXG5hbHJlYWR5IGEgcHJldHR5IHdyaXRlci4gR2VuZXJhbGx5LCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIHNpbmNlIHBwcmludCxcbndyaXRlLCBhbmQgY2wtZm9ybWF0IGFsbCBjYWxsIGl0IGlmIHRoZXkgbmVlZCB0by4gSG93ZXZlciBpZiB5b3Ugd2FudCB0aGUgc3RhdGUgdG8gYmVcbnByZXNlcnZlZCBhY3Jvc3MgY2FsbHMsIHlvdSB3aWxsIHdhbnQgdG8gd3JhcCB0aGVtIHdpdGggdGhpcy5cblxuRm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gZ2VuZXJhdGUgY29sdW1uLWF3YXJlIG91dHB1dCB3aXRoIG11bHRpcGxlIGNhbGxzIHRvIGNsLWZvcm1hdCxcbmRvIGl0IGxpa2UgaW4gdGhpcyBleGFtcGxlOlxuXG4gICAgKGRlZm4gcHJpbnQtdGFibGUgW2FzZXEgY29sdW1uLXdpZHRoXVxuICAgICAgKGJpbmRpbmcgWypvdXQqIChnZXQtcHJldHR5LXdyaXRlciAqb3V0KildXG4gICAgICAgIChkb3NlcSBbcm93IGFzZXFdXG4gICAgICAgICAgKGRvc2VxIFtjb2wgcm93XVxuICAgICAgICAgICAgKGNsLWZvcm1hdCB0cnVlIFwifjREfjcsdlRcIiBjb2wgY29sdW1uLXdpZHRoKSlcbiAgICAgICAgICAocHJuKSkpKVxuXG5Ob3cgd2hlbiB5b3UgcnVuOlxuXG4gICAgdXNlcj4gKHByaW50LXRhYmxlIChtYXAgIyh2ZWN0b3IgJSAoKiAlICUpICgqICUgJSAlKSkgKHJhbmdlIDEgMTEpKSA4KVxuXG5JdCBwcmludHMgYSB0YWJsZSBvZiBzcXVhcmVzIGFuZCBjdWJlcyBmb3IgdGhlIG51bWJlcnMgZnJvbSAxIHRvIDEwOlxuXG4gICAgICAgMSAgICAgIDEgICAgICAgMVxuICAgICAgIDIgICAgICA0ICAgICAgIDhcbiAgICAgICAzICAgICAgOSAgICAgIDI3XG4gICAgICAgNCAgICAgMTYgICAgICA2NFxuICAgICAgIDUgICAgIDI1ICAgICAxMjVcbiAgICAgICA2ICAgICAzNiAgICAgMjE2XG4gICAgICAgNyAgICAgNDkgICAgIDM0M1xuICAgICAgIDggICAgIDY0ICAgICA1MTJcbiAgICAgICA5ICAgICA4MSAgICAgNzI5XG4gICAgICAxMCAgICAxMDAgICAgMTAwMCIsIDphcmdsaXN0cyAoW3dyaXRlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1wcmV0dHktd3JpdGVyXHJcbiBcIlJldHVybnMgdGhlIElXcml0ZXIgcGFzc2VkIGluIHdyYXBwZWQgaW4gYSBwcmV0dHkgd3JpdGVyIHByb3h5LCB1bmxlc3MgaXQnc1xcbmFscmVhZHkgYSBwcmV0dHkgd3JpdGVyLiBHZW5lcmFsbHksIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgc2luY2UgcHByaW50LFxcbndyaXRlLCBhbmQgY2wtZm9ybWF0IGFsbCBjYWxsIGl0IGlmIHRoZXkgbmVlZCB0by4gSG93ZXZlciBpZiB5b3Ugd2FudCB0aGUgc3RhdGUgdG8gYmVcXG5wcmVzZXJ2ZWQgYWNyb3NzIGNhbGxzLCB5b3Ugd2lsbCB3YW50IHRvIHdyYXAgdGhlbSB3aXRoIHRoaXMuXFxuXFxuRm9yIGV4YW1wbGUsIHdoZW4geW91IHdhbnQgdG8gZ2VuZXJhdGUgY29sdW1uLWF3YXJlIG91dHB1dCB3aXRoIG11bHRpcGxlIGNhbGxzIHRvIGNsLWZvcm1hdCxcXG5kbyBpdCBsaWtlIGluIHRoaXMgZXhhbXBsZTpcXG5cXG4gICAgKGRlZm4gcHJpbnQtdGFibGUgW2FzZXEgY29sdW1uLXdpZHRoXVxcbiAgICAgIChiaW5kaW5nIFsqb3V0KiAoZ2V0LXByZXR0eS13cml0ZXIgKm91dCopXVxcbiAgICAgICAgKGRvc2VxIFtyb3cgYXNlcV1cXG4gICAgICAgICAgKGRvc2VxIFtjb2wgcm93XVxcbiAgICAgICAgICAgIChjbC1mb3JtYXQgdHJ1ZSBcXFwifjREfjcsdlRcXFwiIGNvbCBjb2x1bW4td2lkdGgpKVxcbiAgICAgICAgICAocHJuKSkpKVxcblxcbk5vdyB3aGVuIHlvdSBydW46XFxuXFxuICAgIHVzZXI+IChwcmludC10YWJsZSAobWFwICModmVjdG9yICUgKCogJSAlKSAoKiAlICUgJSkpIChyYW5nZSAxIDExKSkgOClcXG5cXG5JdCBwcmludHMgYSB0YWJsZSBvZiBzcXVhcmVzIGFuZCBjdWJlcyBmb3IgdGhlIG51bWJlcnMgZnJvbSAxIHRvIDEwOlxcblxcbiAgICAgICAxICAgICAgMSAgICAgICAxXFxuICAgICAgIDIgICAgICA0ICAgICAgIDhcXG4gICAgICAgMyAgICAgIDkgICAgICAyN1xcbiAgICAgICA0ICAgICAxNiAgICAgIDY0XFxuICAgICAgIDUgICAgIDI1ICAgICAxMjVcXG4gICAgICAgNiAgICAgMzYgICAgIDIxNlxcbiAgICAgICA3ICAgICA0OSAgICAgMzQzXFxuICAgICAgIDggICAgIDY0ICAgICA1MTJcXG4gICAgICAgOSAgICAgODEgICAgIDcyOVxcbiAgICAgIDEwICAgIDEwMCAgICAxMDAwXCJcclxuIFt3cml0ZXJdXHJcbiAoaWZcclxuICAocHJldHR5LXdyaXRlcj8gd3JpdGVyKVxyXG4gIHdyaXRlclxyXG4gIChwcmV0dHktd3JpdGVyIHdyaXRlciAqcHJpbnQtcmlnaHQtbWFyZ2luKiAqcHJpbnQtbWlzZXItd2lkdGgqKSkpXHJcbiJ9IHs6c3ltICpwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKiwgOm1ldGEgezpkb2MgIkRvbid0IHByaW50IG5hbWVzcGFjZXMgd2l0aCBzeW1ib2xzLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlblxucHJldHR5IHByaW50aW5nIHRoZSByZXN1bHRzIG9mIG1hY3JvIGV4cGFuc2lvbnMifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcyogbmlsKVxyXG4ifSB7OnN5bSBjaGFyLWNvZGUsIDptZXRhIHs6ZG9jICJDb252ZXJ0IGNoYXIgdG8gaW50IiwgOmFyZ2xpc3RzIChbY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYXItY29kZVxyXG4gXCJDb252ZXJ0IGNoYXIgdG8gaW50XCJcclxuIFtjXVxyXG4gKGNvbmRcclxuICAobnVtYmVyPyBjKVxyXG4gIGNcclxuICAoYW5kIChzdHJpbmc/IGMpICg9PSAoLi1sZW5ndGggYykgMSkpXHJcbiAgKC5jaGFyQ29kZUF0IGMgMClcclxuICA6ZWxzZVxyXG4gICh0aHJvd1xyXG4gICAoanMvRXJyb3IuIFwiQXJndW1lbnQgdG8gY2hhciBtdXN0IGJlIGEgY2hhcmFjdGVyIG9yIG51bWJlclwiKSkpKVxyXG4ifSB7OnN5bSAqcHJpbnQtcHJldHR5KiwgOm1ldGEgezpkb2MgIkJpbmQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB3cml0ZSB0byB1c2UgcHJldHR5IHByaW50aW5nIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LXByZXR0eSogdHJ1ZSlcclxuIn0gezpzeW0gKnByaW50LXBwcmludC1kaXNwYXRjaCosIDptZXRhIHs6ZG9jICJUaGUgcHJldHR5IHByaW50IGRpc3BhdGNoIGZ1bmN0aW9uLiBVc2Ugd2l0aC1wcHJpbnQtZGlzcGF0Y2ggb3JcbnNldC1wcHJpbnQtZGlzcGF0Y2ggdG8gbW9kaWZ5LiJ9LCA6c291cmNlICIoZGVmb25jZSAqcHJpbnQtcHByaW50LWRpc3BhdGNoKiBuaWwpXHJcbiJ9IHs6c3ltIHBwcmludC1uZXdsaW5lLCA6bWV0YSB7OmRvYyAiUHJpbnQgYSBjb25kaXRpb25hbCBuZXdsaW5lIHRvIGEgcHJldHR5IHByaW50aW5nIHN0cmVhbS4ga2luZCBzcGVjaWZpZXMgaWYgdGhlXG4gIG5ld2xpbmUgaXMgOmxpbmVhciwgOm1pc2VyLCA6ZmlsbCwgb3IgOm1hbmRhdG9yeS5cblxuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXG5cbiAgT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuIiwgOmFyZ2xpc3RzIChba2luZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludC1uZXdsaW5lXHJcbiBcIlByaW50IGEgY29uZGl0aW9uYWwgbmV3bGluZSB0byBhIHByZXR0eSBwcmludGluZyBzdHJlYW0uIGtpbmQgc3BlY2lmaWVzIGlmIHRoZVxcbiAgbmV3bGluZSBpcyA6bGluZWFyLCA6bWlzZXIsIDpmaWxsLCBvciA6bWFuZGF0b3J5LlxcblxcbiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxcblxcbiAgT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuXCJcclxuIFtraW5kXVxyXG4gKGNoZWNrLWVudW1lcmF0ZWQtYXJnIGtpbmQgI3s6bWFuZGF0b3J5IDptaXNlciA6ZmlsbCA6bGluZWFyfSlcclxuIChubCAqb3V0KiBraW5kKSlcclxuIn0gezpzeW0gZmxvYXQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG4gaXMgYW4gZmxvYXQuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZsb2F0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbiBpcyBhbiBmbG9hdC5cIlxyXG4gW25dXHJcbiAoYW5kXHJcbiAgKG51bWJlcj8gbilcclxuICAobm90IChqcy9pc05hTiBuKSlcclxuICAobm90IChpZGVudGljYWw/IG4ganMvSW5maW5pdHkpKVxyXG4gIChub3QgKD09IChqcy9wYXJzZUZsb2F0IG4pIChqcy9wYXJzZUludCBuIDEwKSkpKSlcclxuIn0gezpzeW0gcHByaW50LXRhYiwgOm1ldGEgezpkb2MgIlRhYiBhdCB0aGlzIHBvaW50IGluIHRoZSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBraW5kIHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0YWJcbmlzIDpsaW5lLCA6c2VjdGlvbiwgOmxpbmUtcmVsYXRpdmUsIG9yIDpzZWN0aW9uLXJlbGF0aXZlLlxuXG5Db2xudW0gYW5kIGNvbGluYyBzcGVjaWZ5IHRoZSB0YXJnZXQgY29sdW1uIGFuZCB0aGUgaW5jcmVtZW50IHRvIG1vdmUgdGhlIHRhcmdldFxuZm9yd2FyZCBpZiB0aGUgb3V0cHV0IGlzIGFscmVhZHkgcGFzdCB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuXG5UaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXG5cbk91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLlxuXG5USElTIEZVTkNUSU9OIElTIE5PVCBZRVQgSU1QTEVNRU5URUQuIiwgOmFyZ2xpc3RzIChba2luZCBjb2xudW0gY29saW5jXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50LXRhYlxyXG4gXCJUYWIgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJldHR5IHByaW50aW5nIHN0cmVhbS4ga2luZCBzcGVjaWZpZXMgd2hldGhlciB0aGUgdGFiXFxuaXMgOmxpbmUsIDpzZWN0aW9uLCA6bGluZS1yZWxhdGl2ZSwgb3IgOnNlY3Rpb24tcmVsYXRpdmUuXFxuXFxuQ29sbnVtIGFuZCBjb2xpbmMgc3BlY2lmeSB0aGUgdGFyZ2V0IGNvbHVtbiBhbmQgdGhlIGluY3JlbWVudCB0byBtb3ZlIHRoZSB0YXJnZXRcXG5mb3J3YXJkIGlmIHRoZSBvdXRwdXQgaXMgYWxyZWFkeSBwYXN0IHRoZSBvcmlnaW5hbCB0YXJnZXQuXFxuXFxuVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxcblxcbk91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLlxcblxcblRISVMgRlVOQ1RJT04gSVMgTk9UIFlFVCBJTVBMRU1FTlRFRC5cIlxyXG4gezphZGRlZCBcIjEuMlwifVxyXG4gW2tpbmQgY29sbnVtIGNvbGluY11cclxuIChjaGVjay1lbnVtZXJhdGVkLWFyZ1xyXG4gIGtpbmRcclxuICAjezpzZWN0aW9uIDpsaW5lIDpsaW5lLXJlbGF0aXZlIDpzZWN0aW9uLXJlbGF0aXZlfSlcclxuICh0aHJvdyAoanMvRXJyb3IuIFwicHByaW50LXRhYiBpcyBub3QgeWV0IGltcGxlbWVudGVkXCIpKSlcclxuIn0gezpzeW0gcHByaW50LXNldCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcHByaW50LXNldCAoZm9ybWF0dGVyLW91dCBcIn48I3t+O35Ae353fl4gfjpffn1+O31+Oj5cIikpXHJcbiJ9IHs6c3ltIHByaW50LXRhYmxlLCA6bWV0YSB7OmRvYyAiUHJpbnRzIGEgY29sbGVjdGlvbiBvZiBtYXBzIGluIGEgdGV4dHVhbCB0YWJsZS4gUHJpbnRzIHRhYmxlIGhlYWRpbmdzXG4gICBrcywgYW5kIHRoZW4gYSBsaW5lIG9mIG91dHB1dCBmb3IgZWFjaCByb3csIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleXNcbiAgIGluIGtzLiBJZiBrcyBhcmUgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBrZXlzIG9mIHRoZSBmaXJzdCBpdGVtIGluIHJvd3MuIiwgOmFyZ2xpc3RzIFtba3Mgcm93c10gW3Jvd3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC10YWJsZVxyXG4gXCJQcmludHMgYSBjb2xsZWN0aW9uIG9mIG1hcHMgaW4gYSB0ZXh0dWFsIHRhYmxlLiBQcmludHMgdGFibGUgaGVhZGluZ3NcXG4gICBrcywgYW5kIHRoZW4gYSBsaW5lIG9mIG91dHB1dCBmb3IgZWFjaCByb3csIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleXNcXG4gICBpbiBrcy4gSWYga3MgYXJlIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUga2V5cyBvZiB0aGUgZmlyc3QgaXRlbSBpbiByb3dzLlwiXHJcbiB7OmFkZGVkIFwiMS4zXCJ9XHJcbiAoW2tzIHJvd3NdXHJcbiAgKHdoZW5cclxuICAgKHNlcSByb3dzKVxyXG4gICAobGV0XHJcbiAgICBbd2lkdGhzXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm5cclxuICAgICAgIFtrXVxyXG4gICAgICAgKGFwcGx5XHJcbiAgICAgICAgbWF4XHJcbiAgICAgICAgKGNvdW50IChzdHIgaykpXHJcbiAgICAgICAgKG1hcFxyXG4gICAgICAgICAoZm4qIFtwMV9fNDg5MjgjXSAoY291bnQgKHN0ciAoZ2V0IHAxX180ODkyOCMgaykpKSlcclxuICAgICAgICAgcm93cykpKVxyXG4gICAgICBrcylcclxuICAgICBzcGFjZXJzXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm4qIFtwMV9fNDg5MjkjXSAoYXBwbHkgc3RyIChyZXBlYXQgcDFfXzQ4OTI5IyBcIi1cIikpKVxyXG4gICAgICB3aWR0aHMpXHJcbiAgICAgZm10LXJvd1xyXG4gICAgIChmblxyXG4gICAgICBbbGVhZGVyIGRpdmlkZXIgdHJhaWxlciByb3ddXHJcbiAgICAgIChzdHJcclxuICAgICAgIGxlYWRlclxyXG4gICAgICAgKGFwcGx5XHJcbiAgICAgICAgc3RyXHJcbiAgICAgICAgKGludGVycG9zZVxyXG4gICAgICAgICBkaXZpZGVyXHJcbiAgICAgICAgIChmb3JcclxuICAgICAgICAgIFtbY29sIHdpZHRoXVxyXG4gICAgICAgICAgIChtYXBcclxuICAgICAgICAgICAgdmVjdG9yXHJcbiAgICAgICAgICAgIChtYXAgKGZuKiBbcDFfXzQ4OTMwI10gKGdldCByb3cgcDFfXzQ4OTMwIykpIGtzKVxyXG4gICAgICAgICAgICB3aWR0aHMpXVxyXG4gICAgICAgICAgKGFkZC1wYWRkaW5nIHdpZHRoIChzdHIgY29sKSkpKSlcclxuICAgICAgIHRyYWlsZXIpKV1cclxuICAgIChjbGpzLmNvcmUvcHJpbnRsbilcclxuICAgIChjbGpzLmNvcmUvcHJpbnRsbiAoZm10LXJvdyBcInwgXCIgXCIgfCBcIiBcIiB8XCIgKHppcG1hcCBrcyBrcykpKVxyXG4gICAgKGNsanMuY29yZS9wcmludGxuIChmbXQtcm93IFwifC1cIiBcIi0rLVwiIFwiLXxcIiAoemlwbWFwIGtzIHNwYWNlcnMpKSlcclxuICAgIChkb3NlcVxyXG4gICAgIFtyb3cgcm93c11cclxuICAgICAoY2xqcy5jb3JlL3ByaW50bG4gKGZtdC1yb3cgXCJ8IFwiIFwiIHwgXCIgXCIgfFwiIHJvdykpKSkpKVxyXG4gKFtyb3dzXSAocHJpbnQtdGFibGUgKGtleXMgKGZpcnN0IHJvd3MpKSByb3dzKSkpXHJcbiJ9IHs6c3ltIHNldC1wcHJpbnQtZGlzcGF0Y2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZnVuY3Rpb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXQtcHByaW50LWRpc3BhdGNoXHJcbiBbZnVuY3Rpb25dXHJcbiAoc2V0ISAqcHJpbnQtcHByaW50LWRpc3BhdGNoKiBmdW5jdGlvbilcclxuIG5pbClcclxuIn0gezpzeW0gZnJlc2gtbGluZSwgOm1ldGEgezpkb2MgIk1ha2UgYSBuZXdsaW5lIGlmICpvdXQqIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuIElmICpvdXQqIGlzXG5ub3QgYSBwcmV0dHkgd3JpdGVyICh3aGljaCBrZWVwcyB0cmFjayBvZiBjb2x1bW5zKSwgdGhpcyBmdW5jdGlvbiBhbHdheXMgb3V0cHV0cyBhIG5ld2xpbmUuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZnJlc2gtbGluZVxyXG4gXCJNYWtlIGEgbmV3bGluZSBpZiAqb3V0KiBpcyBub3QgYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLiBJZiAqb3V0KiBpc1xcbm5vdCBhIHByZXR0eSB3cml0ZXIgKHdoaWNoIGtlZXBzIHRyYWNrIG9mIGNvbHVtbnMpLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyBvdXRwdXRzIGEgbmV3bGluZS5cIlxyXG4gW11cclxuIChpZlxyXG4gIChzYXRpc2ZpZXM/IElEZXJlZiAqb3V0KilcclxuICAoaWYgKG5vdCAoPSAwIChnZXQtY29sdW1uICg6YmFzZSBAQCpvdXQqKSkpKSAocHJuKSlcclxuICAocHJuKSkpXHJcbiJ9IHs6c3ltIHBwcmludC1pbmRlbnQsIDptZXRhIHs6ZG9jICJDcmVhdGUgYW4gaW5kZW50IGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByZXR0eSBwcmludGluZyBzdHJlYW0uIFRoaXMgZGVmaW5lcyBob3dcbmZvbGxvd2luZyBsaW5lcyBhcmUgaW5kZW50ZWQuIHJlbGF0aXZlLXRvIGNhbiBiZSBlaXRoZXIgOmJsb2NrIG9yIDpjdXJyZW50IGRlcGVuZGluZ1xud2hldGhlciB0aGUgaW5kZW50IHNob3VsZCBiZSBjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGxvZ2ljYWwgYmxvY2sgb3JcbnRoZSBjdXJyZW50IGNvbHVtbiBwb3NpdGlvbi4gbiBpcyBhbiBvZmZzZXQuXG5cblRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cblxuT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuIiwgOmFyZ2xpc3RzIChbcmVsYXRpdmUtdG8gbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludC1pbmRlbnRcclxuIFwiQ3JlYXRlIGFuIGluZGVudCBhdCB0aGlzIHBvaW50IGluIHRoZSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBUaGlzIGRlZmluZXMgaG93XFxuZm9sbG93aW5nIGxpbmVzIGFyZSBpbmRlbnRlZC4gcmVsYXRpdmUtdG8gY2FuIGJlIGVpdGhlciA6YmxvY2sgb3IgOmN1cnJlbnQgZGVwZW5kaW5nXFxud2hldGhlciB0aGUgaW5kZW50IHNob3VsZCBiZSBjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGxvZ2ljYWwgYmxvY2sgb3JcXG50aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb24uIG4gaXMgYW4gb2Zmc2V0LlxcblxcblRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cXG5cXG5PdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci5cIlxyXG4gW3JlbGF0aXZlLXRvIG5dXHJcbiAoY2hlY2stZW51bWVyYXRlZC1hcmcgcmVsYXRpdmUtdG8gI3s6YmxvY2sgOmN1cnJlbnR9KVxyXG4gKGluZGVudCAqb3V0KiByZWxhdGl2ZS10byBuKSlcclxuIn0gezpzeW0gKnByaW50LXJhZGl4KiwgOm1ldGEgezpkb2MgIlByaW50IGEgcmFkaXggc3BlY2lmaWVyIGluIGZyb250IG9mIGludGVnZXJzIGFuZCByYXRpb25hbHMuIElmICpwcmludC1iYXNlKiBpcyAyLCA4LFxub3IgMTYsIHRoZW4gdGhlIHJhZGl4IHNwZWNpZmllciB1c2VkIGlzICNiLCAjbywgb3IgI3gsIHJlc3BlY3RpdmVseS4gT3RoZXJ3aXNlIHRoZVxucmFkaXggc3BlY2lmaWVyIGlzIGluIHRoZSBmb3JtICNYWHIgd2hlcmUgWFggaXMgdGhlIGRlY2ltYWwgdmFsdWUgb2YgKnByaW50LWJhc2UqICJ9LCA6c291cmNlICIoZGVmICpwcmludC1yYWRpeCogbmlsKVxyXG4ifSB7OnN5bSBJUHJldHR5Rmx1c2gsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgtcHBmbHVzaCl9IHs6c3ltIGNsLWZvcm1hdCwgOm1ldGEgezpkb2MgIkFuIGltcGxlbWVudGF0aW9uIG9mIGEgQ29tbW9uIExpc3AgY29tcGF0aWJsZSBmb3JtYXQgZnVuY3Rpb24uIGNsLWZvcm1hdCBmb3JtYXRzIGl0c1xuYXJndW1lbnRzIHRvIGFuIG91dHB1dCBzdHJlYW0gb3Igc3RyaW5nIGJhc2VkIG9uIHRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgZ2l2ZW4uIEl0XG5zdXBwb3J0cyBzb3BoaXN0aWNhdGVkIGZvcm1hdHRpbmcgb2Ygc3RydWN0dXJlZCBkYXRhLlxuXG5Xcml0ZXIgc2F0aXNmaWVzIElXcml0ZXIsIHRydWUgdG8gb3V0cHV0IHZpYSAqcHJpbnQtZm4qIG9yIG5pbCB0byBvdXRwdXRcbnRvIGEgc3RyaW5nLCBmb3JtYXQtaW4gaXMgdGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBhbmQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHNcbmFyZSB0aGUgZGF0YSB0byBiZSBmb3JtYXR0ZWQuXG5cblRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgaXMgYSBzdHJpbmcgdG8gYmUgb3V0cHV0IHdpdGggZW1iZWRkZWQgJ2Zvcm1hdCBkaXJlY3RpdmVzJ1xuZGVzY3JpYmluZyBob3cgdG8gZm9ybWF0IHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBwYXNzZWQgaW4uXG5cbklmIHdyaXRlciBpcyBuaWwsIGNsLWZvcm1hdCByZXR1cm5zIHRoZSBmb3JtYXR0ZWQgcmVzdWx0IHN0cmluZy4gT3RoZXJ3aXNlLCBjbC1mb3JtYXRcbnJldHVybnMgbmlsLlxuXG5Gb3IgZXhhbXBsZTpcbiAobGV0IFtyZXN1bHRzIFs0NiAzOCAyMl1dXG4gICAgICAgIChjbC1mb3JtYXQgdHJ1ZSBcIlRoZXJlIH5bYXJlfjtpc346O2FyZX5dfjoqIH5kIHJlc3VsdH46cDogfnt+ZH5eLCB+fX4lXCJcbiAgICAgICAgICAgICAgICAgICAoY291bnQgcmVzdWx0cykgcmVzdWx0cykpXG5cblByaW50cyB2aWEgKnByaW50LWZuKjpcbiBUaGVyZSBhcmUgMyByZXN1bHRzOiA0NiwgMzgsIDIyXG5cbkRldGFpbGVkIGRvY3VtZW50YXRpb24gb24gZm9ybWF0IGNvbnRyb2wgc3RyaW5ncyBpcyBhdmFpbGFibGUgaW4gdGhlIFwiQ29tbW9uIExpc3AgdGhlXG5MYW5ndWFnZSwgMm5kIGVkaXRpb25cIiwgQ2hhcHRlciAyMiAoYXZhaWxhYmxlIG9ubGluZSBhdDpcbmh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MuY211LmVkdS9wcm9qZWN0L2FpLXJlcG9zaXRvcnkvYWkvaHRtbC9jbHRsL2NsbS9ub2RlMjAwLmh0bWwjU0VDVElPTjAwMjYzMzAwMDAwMDAwMDAwMDAwMClcbmFuZCBpbiB0aGUgQ29tbW9uIExpc3AgSHlwZXJTcGVjIGF0XG5odHRwOi8vd3d3Lmxpc3B3b3Jrcy5jb20vZG9jdW1lbnRhdGlvbi9IeXBlclNwZWMvQm9keS8yMl9jLmh0bSIsIDphcmdsaXN0cyAoW3dyaXRlciBmb3JtYXQtaW4gJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2wtZm9ybWF0XHJcbiBcIkFuIGltcGxlbWVudGF0aW9uIG9mIGEgQ29tbW9uIExpc3AgY29tcGF0aWJsZSBmb3JtYXQgZnVuY3Rpb24uIGNsLWZvcm1hdCBmb3JtYXRzIGl0c1xcbmFyZ3VtZW50cyB0byBhbiBvdXRwdXQgc3RyZWFtIG9yIHN0cmluZyBiYXNlZCBvbiB0aGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGdpdmVuLiBJdFxcbnN1cHBvcnRzIHNvcGhpc3RpY2F0ZWQgZm9ybWF0dGluZyBvZiBzdHJ1Y3R1cmVkIGRhdGEuXFxuXFxuV3JpdGVyIHNhdGlzZmllcyBJV3JpdGVyLCB0cnVlIHRvIG91dHB1dCB2aWEgKnByaW50LWZuKiBvciBuaWwgdG8gb3V0cHV0XFxudG8gYSBzdHJpbmcsIGZvcm1hdC1pbiBpcyB0aGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGFuZCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50c1xcbmFyZSB0aGUgZGF0YSB0byBiZSBmb3JtYXR0ZWQuXFxuXFxuVGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBpcyBhIHN0cmluZyB0byBiZSBvdXRwdXQgd2l0aCBlbWJlZGRlZCAnZm9ybWF0IGRpcmVjdGl2ZXMnXFxuZGVzY3JpYmluZyBob3cgdG8gZm9ybWF0IHRoZSB2YXJpb3VzIGFyZ3VtZW50cyBwYXNzZWQgaW4uXFxuXFxuSWYgd3JpdGVyIGlzIG5pbCwgY2wtZm9ybWF0IHJldHVybnMgdGhlIGZvcm1hdHRlZCByZXN1bHQgc3RyaW5nLiBPdGhlcndpc2UsIGNsLWZvcm1hdFxcbnJldHVybnMgbmlsLlxcblxcbkZvciBleGFtcGxlOlxcbiAobGV0IFtyZXN1bHRzIFs0NiAzOCAyMl1dXFxuICAgICAgICAoY2wtZm9ybWF0IHRydWUgXFxcIlRoZXJlIH5bYXJlfjtpc346O2FyZX5dfjoqIH5kIHJlc3VsdH46cDogfnt+ZH5eLCB+fX4lXFxcIlxcbiAgICAgICAgICAgICAgICAgICAoY291bnQgcmVzdWx0cykgcmVzdWx0cykpXFxuXFxuUHJpbnRzIHZpYSAqcHJpbnQtZm4qOlxcbiBUaGVyZSBhcmUgMyByZXN1bHRzOiA0NiwgMzgsIDIyXFxuXFxuRGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvbiBmb3JtYXQgY29udHJvbCBzdHJpbmdzIGlzIGF2YWlsYWJsZSBpbiB0aGUgXFxcIkNvbW1vbiBMaXNwIHRoZVxcbkxhbmd1YWdlLCAybmQgZWRpdGlvblxcXCIsIENoYXB0ZXIgMjIgKGF2YWlsYWJsZSBvbmxpbmUgYXQ6XFxuaHR0cDovL3d3dy5jcy5jbXUuZWR1L2Fmcy9jcy5jbXUuZWR1L3Byb2plY3QvYWktcmVwb3NpdG9yeS9haS9odG1sL2NsdGwvY2xtL25vZGUyMDAuaHRtbCNTRUNUSU9OMDAyNjMzMDAwMDAwMDAwMDAwMDAwKVxcbmFuZCBpbiB0aGUgQ29tbW9uIExpc3AgSHlwZXJTcGVjIGF0XFxuaHR0cDovL3d3dy5saXNwd29ya3MuY29tL2RvY3VtZW50YXRpb24vSHlwZXJTcGVjL0JvZHkvMjJfYy5odG1cIlxyXG4gezpzZWUtYWxzb1xyXG4gIFtbXCJodHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2NzLmNtdS5lZHUvcHJvamVjdC9haS1yZXBvc2l0b3J5L2FpL2h0bWwvY2x0bC9jbG0vbm9kZTIwMC5odG1sI1NFQ1RJT04wMDI2MzMwMDAwMDAwMDAwMDAwMDBcIlxyXG4gICAgXCJDb21tb24gTGlzcCB0aGUgTGFuZ3VhZ2VcIl1cclxuICAgW1wiaHR0cDovL3d3dy5saXNwd29ya3MuY29tL2RvY3VtZW50YXRpb24vSHlwZXJTcGVjL0JvZHkvMjJfYy5odG1cIlxyXG4gICAgXCJDb21tb24gTGlzcCBIeXBlclNwZWNcIl1dfVxyXG4gW3dyaXRlciBmb3JtYXQtaW4gJiBhcmdzXVxyXG4gKGxldFxyXG4gIFtjb21waWxlZC1mb3JtYXRcclxuICAgKGlmIChzdHJpbmc/IGZvcm1hdC1pbikgKGNvbXBpbGUtZm9ybWF0IGZvcm1hdC1pbikgZm9ybWF0LWluKVxyXG4gICBuYXZpZ2F0b3JcclxuICAgKGluaXQtbmF2aWdhdG9yIGFyZ3MpXVxyXG4gIChleGVjdXRlLWZvcm1hdCB3cml0ZXIgY29tcGlsZWQtZm9ybWF0IG5hdmlnYXRvcikpKVxyXG4ifSB7OnN5bSAqcHJpbnQtbWlzZXItd2lkdGgqLCA6bWV0YSB7OmRvYyAiVGhlIGNvbHVtbiBhdCB3aGljaCB0byBlbnRlciBtaXNlciBzdHlsZS4gRGVwZW5kaW5nIG9uIHRoZSBkaXNwYXRjaCB0YWJsZSxcbm1pc2VyIHN0eWxlIGFkZCBuZXdsaW5lcyBpbiBtb3JlIHBsYWNlcyB0byB0cnkgdG8ga2VlcCBsaW5lcyBzaG9ydCBhbGxvd2luZyBmb3IgZnVydGhlclxubGV2ZWxzIG9mIG5lc3RpbmcuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LW1pc2VyLXdpZHRoKiA0MClcclxuIn0gezpzeW0gd3JpdGUsIDptZXRhIHs6ZG9jICJXcml0ZSBhbiBvYmplY3Qgc3ViamVjdCB0byB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiB0aGUgcHJpbnRlciBjb250cm9sIHZhcmlhYmxlcy5cblVzZSB0aGUga3ctYXJncyBhcmd1bWVudCB0byBvdmVycmlkZSBpbmRpdmlkdWFsIHZhcmlhYmxlcyBmb3IgdGhpcyBjYWxsIChhbmQgYW55XG5yZWN1cnNpdmUgY2FsbHMpLiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVzdWx0IGlmIDpzdHJlYW0gaXMgbmlsIG9yIG5pbCBvdGhlcndpc2UuXG5cblRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB3aXRoIHZhbHVlczpcbiAgS2V5d29yZCAgICAgICAgICAgICAgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWVcbiAgOnN0cmVhbSAgICAgICAgICAgICAgV3JpdGVyIGZvciBvdXRwdXQgb3IgbmlsICAgICAgICAgICAgIHRydWUgKGluZGljYXRlcyAqb3V0KilcbiAgOmJhc2UgICAgICAgICAgICAgICAgQmFzZSB0byB1c2UgZm9yIHdyaXRpbmcgcmF0aW9uYWxzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWJhc2UqXG4gIDpjaXJjbGUqICAgICAgICAgICAgIElmIHRydWUsIG1hcmsgY2lyY3VsYXIgc3RydWN0dXJlcyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1jaXJjbGUqXG4gIDpsZW5ndGggICAgICAgICAgICAgIE1heGltdW0gZWxlbWVudHMgdG8gc2hvdyBpbiBzdWJsaXN0cyBDdXJyZW50IHZhbHVlIG9mICpwcmludC1sZW5ndGgqXG4gIDpsZXZlbCAgICAgICAgICAgICAgIE1heGltdW0gZGVwdGggICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1sZXZlbCpcbiAgOmxpbmVzKiAgICAgICAgICAgICAgTWF4aW11bSBsaW5lcyBvZiBvdXRwdXQgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxpbmVzKlxuICA6bWlzZXItd2lkdGggICAgICAgICBXaWR0aCB0byBlbnRlciBtaXNlciBtb2RlICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbWlzZXItd2lkdGgqXG4gIDpkaXNwYXRjaCAgICAgICAgICAgIFRoZSBwcmV0dHkgcHJpbnQgZGlzcGF0Y2ggZnVuY3Rpb24gICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1wcHJpbnQtZGlzcGF0Y2gqXG4gIDpwcmV0dHkgICAgICAgICAgICAgIElmIHRydWUsIGRvIHByZXR0eSBwcmludGluZyAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1wcmV0dHkqXG4gIDpyYWRpeCAgICAgICAgICAgICAgIElmIHRydWUsIHByZXBlbmQgYSByYWRpeCBzcGVjaWZpZXIgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yYWRpeCpcbiAgOnJlYWRhYmx5KiAgICAgICAgICAgSWYgdHJ1ZSwgcHJpbnQgcmVhZGFibHkgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJlYWRhYmx5KlxuICA6cmlnaHQtbWFyZ2luICAgICAgICBUaGUgY29sdW1uIGZvciB0aGUgcmlnaHQgbWFyZ2luICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmlnaHQtbWFyZ2luKlxuICA6c3VwcHJlc3MtbmFtZXNwYWNlcyBJZiB0cnVlLCBubyBuYW1lc3BhY2VzIGluIHN5bWJvbHMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcypcblxuICAqID0gbm90IHlldCBzdXBwb3J0ZWRcbiIsIDphcmdsaXN0cyAoW29iamVjdCAmIGt3LWFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3cml0ZVxyXG4gXCJXcml0ZSBhbiBvYmplY3Qgc3ViamVjdCB0byB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiB0aGUgcHJpbnRlciBjb250cm9sIHZhcmlhYmxlcy5cXG5Vc2UgdGhlIGt3LWFyZ3MgYXJndW1lbnQgdG8gb3ZlcnJpZGUgaW5kaXZpZHVhbCB2YXJpYWJsZXMgZm9yIHRoaXMgY2FsbCAoYW5kIGFueVxcbnJlY3Vyc2l2ZSBjYWxscykuIFJldHVybnMgdGhlIHN0cmluZyByZXN1bHQgaWYgOnN0cmVhbSBpcyBuaWwgb3IgbmlsIG90aGVyd2lzZS5cXG5cXG5UaGUgZm9sbG93aW5nIGtleXdvcmQgYXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgd2l0aCB2YWx1ZXM6XFxuICBLZXl3b3JkICAgICAgICAgICAgICBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZVxcbiAgOnN0cmVhbSAgICAgICAgICAgICAgV3JpdGVyIGZvciBvdXRwdXQgb3IgbmlsICAgICAgICAgICAgIHRydWUgKGluZGljYXRlcyAqb3V0KilcXG4gIDpiYXNlICAgICAgICAgICAgICAgIEJhc2UgdG8gdXNlIGZvciB3cml0aW5nIHJhdGlvbmFscyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1iYXNlKlxcbiAgOmNpcmNsZSogICAgICAgICAgICAgSWYgdHJ1ZSwgbWFyayBjaXJjdWxhciBzdHJ1Y3R1cmVzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWNpcmNsZSpcXG4gIDpsZW5ndGggICAgICAgICAgICAgIE1heGltdW0gZWxlbWVudHMgdG8gc2hvdyBpbiBzdWJsaXN0cyBDdXJyZW50IHZhbHVlIG9mICpwcmludC1sZW5ndGgqXFxuICA6bGV2ZWwgICAgICAgICAgICAgICBNYXhpbXVtIGRlcHRoICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGV2ZWwqXFxuICA6bGluZXMqICAgICAgICAgICAgICBNYXhpbXVtIGxpbmVzIG9mIG91dHB1dCAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGluZXMqXFxuICA6bWlzZXItd2lkdGggICAgICAgICBXaWR0aCB0byBlbnRlciBtaXNlciBtb2RlICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbWlzZXItd2lkdGgqXFxuICA6ZGlzcGF0Y2ggICAgICAgICAgICBUaGUgcHJldHR5IHByaW50IGRpc3BhdGNoIGZ1bmN0aW9uICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcHByaW50LWRpc3BhdGNoKlxcbiAgOnByZXR0eSAgICAgICAgICAgICAgSWYgdHJ1ZSwgZG8gcHJldHR5IHByaW50aW5nICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXByZXR0eSpcXG4gIDpyYWRpeCAgICAgICAgICAgICAgIElmIHRydWUsIHByZXBlbmQgYSByYWRpeCBzcGVjaWZpZXIgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yYWRpeCpcXG4gIDpyZWFkYWJseSogICAgICAgICAgIElmIHRydWUsIHByaW50IHJlYWRhYmx5ICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yZWFkYWJseSpcXG4gIDpyaWdodC1tYXJnaW4gICAgICAgIFRoZSBjb2x1bW4gZm9yIHRoZSByaWdodCBtYXJnaW4gICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yaWdodC1tYXJnaW4qXFxuICA6c3VwcHJlc3MtbmFtZXNwYWNlcyBJZiB0cnVlLCBubyBuYW1lc3BhY2VzIGluIHN5bWJvbHMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcypcXG5cXG4gICogPSBub3QgeWV0IHN1cHBvcnRlZFxcblwiXHJcbiBbb2JqZWN0ICYga3ctYXJnc11cclxuIChsZXRcclxuICBbb3B0aW9ucyAobWVyZ2UgezpzdHJlYW0gdHJ1ZX0gKGFwcGx5IGhhc2gtbWFwIGt3LWFyZ3MpKV1cclxuICAoYmluZGluZ1xyXG4gICBbY2xqcy5wcHJpbnQvKnByaW50LWJhc2UqXHJcbiAgICAoOmJhc2Ugb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtYmFzZSopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtY2lyY2xlKlxyXG4gICAgKDpjaXJjbGUgb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtY2lyY2xlKilcclxuICAgIGNsanMuY29yZS8qcHJpbnQtbGVuZ3RoKlxyXG4gICAgKDpsZW5ndGggb3B0aW9ucyBjbGpzLmNvcmUvKnByaW50LWxlbmd0aCopXHJcbiAgICBjbGpzLmNvcmUvKnByaW50LWxldmVsKlxyXG4gICAgKDpsZXZlbCBvcHRpb25zIGNsanMuY29yZS8qcHJpbnQtbGV2ZWwqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LWxpbmVzKlxyXG4gICAgKDpsaW5lcyBvcHRpb25zIGNsanMucHByaW50LypwcmludC1saW5lcyopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtbWlzZXItd2lkdGgqXHJcbiAgICAoOm1pc2VyLXdpZHRoIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LW1pc2VyLXdpZHRoKilcclxuICAgIGNsanMucHByaW50LypwcmludC1wcHJpbnQtZGlzcGF0Y2gqXHJcbiAgICAoOmRpc3BhdGNoIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LXBwcmludC1kaXNwYXRjaCopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtcHJldHR5KlxyXG4gICAgKDpwcmV0dHkgb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtcHJldHR5KilcclxuICAgIGNsanMucHByaW50LypwcmludC1yYWRpeCpcclxuICAgICg6cmFkaXggb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtcmFkaXgqKVxyXG4gICAgY2xqcy5jb3JlLypwcmludC1yZWFkYWJseSpcclxuICAgICg6cmVhZGFibHkgb3B0aW9ucyBjbGpzLmNvcmUvKnByaW50LXJlYWRhYmx5KilcclxuICAgIGNsanMucHByaW50LypwcmludC1yaWdodC1tYXJnaW4qXHJcbiAgICAoOnJpZ2h0LW1hcmdpbiBvcHRpb25zIGNsanMucHByaW50LypwcmludC1yaWdodC1tYXJnaW4qKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqXHJcbiAgICAoOnN1cHByZXNzLW5hbWVzcGFjZXNcclxuICAgICBvcHRpb25zXHJcbiAgICAgY2xqcy5wcHJpbnQvKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqKV1cclxuICAgKGJpbmRpbmdcclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW3NiXHJcbiAgICAgIChTdHJpbmdCdWZmZXIuKVxyXG4gICAgICBvcHR2YWxcclxuICAgICAgKGlmIChjb250YWlucz8gb3B0aW9ucyA6c3RyZWFtKSAoOnN0cmVhbSBvcHRpb25zKSB0cnVlKVxyXG4gICAgICBiYXNlLXdyaXRlclxyXG4gICAgICAoaWZcclxuICAgICAgIChvciAodHJ1ZT8gb3B0dmFsKSAobmlsPyBvcHR2YWwpKVxyXG4gICAgICAgKFN0cmluZ0J1ZmZlcldyaXRlci4gc2IpXHJcbiAgICAgICBvcHR2YWwpXVxyXG4gICAgIChpZlxyXG4gICAgICAqcHJpbnQtcHJldHR5KlxyXG4gICAgICAod2l0aC1wcmV0dHktd3JpdGVyIGJhc2Utd3JpdGVyICh3cml0ZS1vdXQgb2JqZWN0KSlcclxuICAgICAgKGJpbmRpbmcgWypvdXQqIGJhc2Utd3JpdGVyXSAocHIgb2JqZWN0KSkpXHJcbiAgICAgKGlmICh0cnVlPyBvcHR2YWwpIChzdHJpbmctcHJpbnQgKHN0ciBzYikpKVxyXG4gICAgIChpZiAobmlsPyBvcHR2YWwpIChzdHIgc2IpKSkpKSkpXHJcbiJ9IHs6c3ltIC1wcGZsdXNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BwXSl9LCA6cHJvdG9jb2wgSVByZXR0eUZsdXNofSB7OnN5bSAqcHJpbnQtcmlnaHQtbWFyZ2luKiwgOm1ldGEgezpkb2MgIlByZXR0eSBwcmludGluZyB3aWxsIHRyeSB0byBhdm9pZCBhbnl0aGluZyBnb2luZyBiZXlvbmQgdGhpcyBjb2x1bW4uXG5TZXQgaXQgdG8gbmlsIHRvIGhhdmUgcHByaW50IGxldCB0aGUgbGluZSBiZSBhcmJpdHJhcmlseSBsb25nLiBUaGlzIHdpbGwgaWdub3JlIGFsbFxubm9uLW1hbmRhdG9yeSBuZXdsaW5lcy4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtcmlnaHQtbWFyZ2luKiA3MilcclxuIn0gezpzeW0gd3JpdGUtb3V0LCA6bWV0YSB7OmRvYyAiV3JpdGUgYW4gb2JqZWN0IHRvICpvdXQqIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgYmluZGluZ3Mgb2YgdGhlIHByaW50ZXIgY29udHJvbFxudmFyaWFibGVzLiBVc2UgdGhlIGt3LWFyZ3MgYXJndW1lbnQgdG8gb3ZlcnJpZGUgaW5kaXZpZHVhbCB2YXJpYWJsZXMgZm9yIHRoaXMgY2FsbCAoYW5kXG5hbnkgcmVjdXJzaXZlIGNhbGxzKS5cblxuKm91dCogbXVzdCBiZSBhIFByZXR0eVdyaXRlciBpZiBwcmV0dHkgcHJpbnRpbmcgaXMgZW5hYmxlZC4gVGhpcyBpcyB0aGUgcmVzcG9uc2liaWxpdHlcbm9mIHRoZSBjYWxsZXIuXG5cblRoaXMgbWV0aG9kIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IHByZXR0eSBwcmludCBkaXNwYXRjaCBmdW5jdGlvbnMgdGhhdFxuYWxyZWFkeSBrbm93IHRoYXQgdGhlIHByZXR0eSBwcmludGVyIHdpbGwgaGF2ZSBzZXQgdXAgdGhlaXIgZW52aXJvbm1lbnQgYXBwcm9wcmlhdGVseS5cbk5vcm1hbCBsaWJyYXJ5IGNsaWVudHMgc2hvdWxkIHVzZSB0aGUgc3RhbmRhcmQgXCJ3cml0ZVwiIGludGVyZmFjZS4gIiwgOmFyZ2xpc3RzIChbb2JqZWN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gd3JpdGUtb3V0XHJcbiBcIldyaXRlIGFuIG9iamVjdCB0byAqb3V0KiBzdWJqZWN0IHRvIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIHRoZSBwcmludGVyIGNvbnRyb2xcXG52YXJpYWJsZXMuIFVzZSB0aGUga3ctYXJncyBhcmd1bWVudCB0byBvdmVycmlkZSBpbmRpdmlkdWFsIHZhcmlhYmxlcyBmb3IgdGhpcyBjYWxsIChhbmRcXG5hbnkgcmVjdXJzaXZlIGNhbGxzKS5cXG5cXG4qb3V0KiBtdXN0IGJlIGEgUHJldHR5V3JpdGVyIGlmIHByZXR0eSBwcmludGluZyBpcyBlbmFibGVkLiBUaGlzIGlzIHRoZSByZXNwb25zaWJpbGl0eVxcbm9mIHRoZSBjYWxsZXIuXFxuXFxuVGhpcyBtZXRob2QgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2UgYnkgcHJldHR5IHByaW50IGRpc3BhdGNoIGZ1bmN0aW9ucyB0aGF0XFxuYWxyZWFkeSBrbm93IHRoYXQgdGhlIHByZXR0eSBwcmludGVyIHdpbGwgaGF2ZSBzZXQgdXAgdGhlaXIgZW52aXJvbm1lbnQgYXBwcm9wcmlhdGVseS5cXG5Ob3JtYWwgbGlicmFyeSBjbGllbnRzIHNob3VsZCB1c2UgdGhlIHN0YW5kYXJkIFxcXCJ3cml0ZVxcXCIgaW50ZXJmYWNlLiBcIlxyXG4gW29iamVjdF1cclxuIChsZXRcclxuICBbbGVuZ3RoLXJlYWNoZWRcclxuICAgKGFuZFxyXG4gICAgKmN1cnJlbnQtbGVuZ3RoKlxyXG4gICAgKnByaW50LWxlbmd0aCpcclxuICAgICg+PSAqY3VycmVudC1sZW5ndGgqICpwcmludC1sZW5ndGgqKSldXHJcbiAgKGlmLW5vdFxyXG4gICAqcHJpbnQtcHJldHR5KlxyXG4gICAocHIgb2JqZWN0KVxyXG4gICAoaWZcclxuICAgIGxlbmd0aC1yZWFjaGVkXHJcbiAgICAoLXdyaXRlICpvdXQqIFwiLi4uXCIpXHJcbiAgICAoZG9cclxuICAgICAoaWZcclxuICAgICAgKmN1cnJlbnQtbGVuZ3RoKlxyXG4gICAgICAoc2V0ISAqY3VycmVudC1sZW5ndGgqIChpbmMgKmN1cnJlbnQtbGVuZ3RoKikpKVxyXG4gICAgICgqcHJpbnQtcHByaW50LWRpc3BhdGNoKiBvYmplY3QpKSkpXHJcbiAgbGVuZ3RoLXJlYWNoZWQpKVxyXG4ifSB7OnN5bSAqcHJpbnQtYmFzZSosIDptZXRhIHs6ZG9jICJUaGUgYmFzZSB0byB1c2UgZm9yIHByaW50aW5nIGludGVnZXJzIGFuZCByYXRpb25hbHMuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LWJhc2UqIDEwKVxyXG4ifSksIHJ1bS51dGlsICh7OnN5bSBjb2xsZWN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleSBtaXhpbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2xsZWN0XHJcbiBba2V5IG1peGluc11cclxuIChpbnRvIFtdIChrZWVwIChmbiBbbV0gKGdldCBtIGtleSkpKSBtaXhpbnMpKVxyXG4ifSB7OnN5bSBjb2xsZWN0KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXlzIG1peGluc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbGxlY3QqXHJcbiBba2V5cyBtaXhpbnNdXHJcbiAoaW50byBbXSAobWFwY2F0IChmbiBbbV0gKGtlZXAgKGZuIFtrXSAoZ2V0IG0gaykpIGtleXMpKSkgbWl4aW5zKSlcclxuIn0gezpzeW0gY2FsbC1hbGwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgZm5zICYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbGwtYWxsXHJcbiBbc3RhdGUgZm5zICYgYXJnc11cclxuIChyZWR1Y2UgKGZuIFtzdGF0ZSBmbl0gKGFwcGx5IGZuIHN0YXRlIGFyZ3MpKSBzdGF0ZSBmbnMpKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyLmltcGwuaW5zcGVjdCAoezpzeW0gaW5zcGVjdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIHN0cmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgc3VwcGxpZWQuXG4gICBNYXkgYmUgdGhlIGEgc3RyaW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlIGl0c2VsZiAoZS5nLiBcInRydWVcIilcbiAgIG9yIGl0IG1heSBiZSBhIGRlc2NyaXB0aW9uIChlLmcuIFwiYW4gaW5zdGFuY2Ugb2YgRm9vXCIpLlxuICAgSWYgdHJ1bmNhdGUgaXMgdHJ1ZSB0aGVuIHJldHVybiBhIHZlcnkgdGVyc2UgdmVyc2lvbiBvZlxuICAgdGhlIGluc3BlY3Rpb24uIiwgOmFyZ2xpc3RzIFtbeF0gW3RydW5jYXRlIHhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnNwZWN0XHJcbiBcIlJldHVybiBhIHN0cmluZyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUgc3VwcGxpZWQuXFxuICAgTWF5IGJlIHRoZSBhIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpdHNlbGYgKGUuZy4gXFxcInRydWVcXFwiKVxcbiAgIG9yIGl0IG1heSBiZSBhIGRlc2NyaXB0aW9uIChlLmcuIFxcXCJhbiBpbnN0YW5jZSBvZiBGb29cXFwiKS5cXG4gICBJZiB0cnVuY2F0ZSBpcyB0cnVlIHRoZW4gcmV0dXJuIGEgdmVyeSB0ZXJzZSB2ZXJzaW9uIG9mXFxuICAgdGhlIGluc3BlY3Rpb24uXCJcclxuIChbeF0gKGluc3BlY3QqIGZhbHNlIHgpKVxyXG4gKFt0cnVuY2F0ZSB4XSAoaW5zcGVjdCogdHJ1bmNhdGUgeCkpKVxyXG4ifSksIHNhYmxvbm8uaW50ZXJwcmV0ZXIgKHs6c3ltIGludGVycHJldCwgOm1ldGEgezpkb2MgIkludGVycHJldCBhIENsb2p1cmUgZGF0YSBzdHJ1Y3R1cmUgYXMgYSBSZWFjdCBmbiBjYWxsLiIsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBJSW50ZXJwcmV0ZXJ9IHs6c3ltIElJbnRlcnByZXRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGludGVycHJldCl9IHs6c3ltIGNvbnRyb2xsZWQtaW5wdXQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGB0eXBlYCBhbmQgYHByb3BzYCBhcmUgdXNlZCBhIGNvbnRyb2xsZWQgaW5wdXQsXG4gIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgKFt0eXBlIHByb3BzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29udHJvbGxlZC1pbnB1dD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGB0eXBlYCBhbmQgYHByb3BzYCBhcmUgdXNlZCBhIGNvbnRyb2xsZWQgaW5wdXQsXFxuICBvdGhlcndpc2UgZmFsc2UuXCJcclxuIFt0eXBlIHByb3BzXVxyXG4gIz8oOmNsanMgKGFuZCAob2JqZWN0PyBwcm9wcykgKGNhc2UgdHlwZSBcImlucHV0XCIgKG9yIChleGlzdHM/ICguLWNoZWNrZWQgcHJvcHMpKSAoZXhpc3RzPyAoLi12YWx1ZSBwcm9wcykpKSBcInNlbGVjdFwiIChleGlzdHM/ICguLXZhbHVlIHByb3BzKSkgXCJ0ZXh0YXJlYVwiIChleGlzdHM/ICguLXZhbHVlIHByb3BzKSkgZmFsc2UpKSkpXHJcbiJ9IHs6c3ltIGNyZWF0ZS1lbGVtZW50LCA6bWV0YSB7OmRvYyAiQ3JlYXRlIGEgUmVhY3QgZWxlbWVudC4gUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdoZW4gcnVubmluZ1xuICB1bmRlciBDbG9qdXJlU2NyaXB0LCBhbmQgYSBvbS5kb20uRWxlbWVudCByZWNvcmQgaW4gQ2xvanVyZS4iLCA6YXJnbGlzdHMgKFt0eXBlIHByb3BzICYgY2hpbGRyZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjcmVhdGUtZWxlbWVudFxyXG4gXCJDcmVhdGUgYSBSZWFjdCBlbGVtZW50LiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2hlbiBydW5uaW5nXFxuICB1bmRlciBDbG9qdXJlU2NyaXB0LCBhbmQgYSBvbS5kb20uRWxlbWVudCByZWNvcmQgaW4gQ2xvanVyZS5cIlxyXG4gW3R5cGUgcHJvcHMgJiBjaGlsZHJlbl1cclxuICM/KDpjbGogKGRvbS9lbGVtZW50IHs6YXR0cnMgcHJvcHMsIDpjaGlsZHJlbiBjaGlsZHJlbiwgOnJlYWN0LWtleSBuaWwsIDp0YWcgdHlwZX0pIDpjbGpzIChhcHBseSBqcy9SZWFjdC5jcmVhdGVFbGVtZW50IChlbGVtZW50LWNsYXNzIHR5cGUgcHJvcHMpIHByb3BzIGNoaWxkcmVuKSkpXHJcbiJ9IHs6c3ltIGF0dHJpYnV0ZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXR0cnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhdHRyaWJ1dGVzXHJcbiBbYXR0cnNdXHJcbiAjPyg6Y2xqICgtPiAodXRpbC9odG1sLXRvLWRvbS1hdHRycyBhdHRycykgKHVwZGF0ZSA6Y2xhc3NOYW1lIChmbiogW3AxX180OTA1MyNdIChzb21lLT4+IHAxX180OTA1MyMgKHN0ci9qb2luIFwiIFwiKSkpKSkgOmNsanMgKHdoZW4tbGV0IFtqcy1hdHRycyAoY2xqLT5qcyAodXRpbC9odG1sLXRvLWRvbS1hdHRycyBhdHRycykpXSAobGV0IFtjbGFzcyAoLi1jbGFzc05hbWUganMtYXR0cnMpIGNsYXNzIChpZiAoYXJyYXk/IGNsYXNzKSAoam9pbiBcIiBcIiBjbGFzcykgY2xhc3MpXSAoaWYgKGJsYW5rPyBjbGFzcykgKGpzLWRlbGV0ZSBqcy1hdHRycyBcImNsYXNzTmFtZVwiKSAoc2V0ISAoLi1jbGFzc05hbWUganMtYXR0cnMpIGNsYXNzKSkganMtYXR0cnMpKSkpXHJcbiJ9IHs6c3ltIGVsZW1lbnQsIDptZXRhIHs6ZG9jICJSZW5kZXIgYW4gZWxlbWVudCB2ZWN0b3IgYXMgYSBIVE1MIGVsZW1lbnQuIiwgOmFyZ2xpc3RzIChbZWxlbWVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsZW1lbnRcclxuIFwiUmVuZGVyIGFuIGVsZW1lbnQgdmVjdG9yIGFzIGEgSFRNTCBlbGVtZW50LlwiXHJcbiBbZWxlbWVudF1cclxuIChsZXRcclxuICBbW3R5cGUgYXR0cnMgY29udGVudF0gKG5vcm1hbGl6ZS9lbGVtZW50IGVsZW1lbnQpXVxyXG4gIChhcHBseVxyXG4gICBjcmVhdGUtZWxlbWVudFxyXG4gICB0eXBlXHJcbiAgIChhdHRyaWJ1dGVzIGF0dHJzKVxyXG4gICAoaW50ZXJwcmV0LXNlcSBjb250ZW50KSkpKVxyXG4ifSksIGVkbmEucGFyc2UgKHs6c3ltIGFjY2lkZW50YWxzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBhY2NpZGVudGFscyAje1xcIyBcXD0gXFxffSlcclxuIn0gezpzeW0gYWNjaWRlbnRhbC0+a2V5d29yZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgYWNjaWRlbnRhbC0+a2V5d29yZCB7XFwjIDpzaGFycCwgXFw9IDpmbGF0LCBcXF8gOm5hdHVyYWx9KVxyXG4ifSB7OnN5bSBub3RlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBub3RlPyBbeF0gKG5vdD0gOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkIChwYXJzZS1ub3RlIHgpKSlcclxuIn0gezpzeW0gZGlnaXRzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBkaWdpdHMgI3tcXDAgXFwxIFxcMiBcXDMgXFw0IFxcNSBcXDYgXFw3IFxcOCBcXDl9KVxyXG4ifSB7OnN5bSBpbnN0cnVtZW50cywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgaW5zdHJ1bWVudHMgKGdldC1pbnN0cnVtZW50cykpXHJcbiJ9IHs6c3ltIHBhcnNlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZVxyXG4gW2NvbnRlbnRdXHJcbiAobGV0XHJcbiAgW3JlcyAocy9jb25mb3JtIDplZG5hLnBhcnNlL3N1YnNjb3JlIGNvbnRlbnQpXVxyXG4gIChpZlxyXG4gICAoPSByZXMgOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkKVxyXG4gICAodGhyb3dcclxuICAgICgjPyg6Y2xqIEV4Y2VwdGlvbi4gOmNsanMganMvRXJyb3IuKVxyXG4gICAgIChleHBvdW5kL2V4cG91bmQtc3RyIDplZG5hLnBhcnNlL3N1YnNjb3JlIGNvbnRlbnQpKSlcclxuICAgcmVzKSkpXHJcbiJ9IHs6c3ltIG5vdGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBub3RlcyAje1xcYSBcXGIgXFxjIFxcZCBcXGUgXFxmIFxcZ30pXHJcbiJ9IHs6c3ltIG9jdGF2ZS1vcGVyYXRvcnMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG9jdGF2ZS1vcGVyYXRvcnMgI3tcXCsgXFwtfSlcclxuIn0gezpzeW0gcGFyc2Utbm90ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub3RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2Utbm90ZVxyXG4gW25vdGVdXHJcbiAoaWYtbm90XHJcbiAgKGtleXdvcmQ/IG5vdGUpXHJcbiAgOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgKHMvY29uZm9ybSA6ZWRuYS5wYXJzZS9ub3RlLXBhcnRzIChzZXEgKG5hbWUgbm90ZSkpKSkpXHJcbiJ9KSwgY2xqcy50b29scy5yZWFkZXIuaW1wbC51dGlscyAoezpzeW0gcmVhZGVyLWNvbmRpdGlvbmFsLCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbC5cbiAgSWYgdHJ1ZSwgc3BsaWNpbmc/IGluZGljYXRlcyByZWFkLWNvbmQtc3BsaWNpbmcuIiwgOmFyZ2xpc3RzIChbZm9ybSBzcGxpY2luZz9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItY29uZGl0aW9uYWxcclxuIFwiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbC5cXG4gIElmIHRydWUsIHNwbGljaW5nPyBpbmRpY2F0ZXMgcmVhZC1jb25kLXNwbGljaW5nLlwiXHJcbiBbZm9ybSBzcGxpY2luZz9dXHJcbiAoUmVhZGVyQ29uZGl0aW9uYWwuIHNwbGljaW5nPyBmb3JtKSlcclxuIn0gezpzeW0gd2hpdGVzcGFjZT8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlIiwgOmFyZ2xpc3RzIChbY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aGl0ZXNwYWNlP1xyXG4gXCJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlXCJcclxuIFtjaF1cclxuICh3aGVuLW5vdCAobmlsPyBjaCkgKGlmIChpZGVudGljYWw/IGNoIFxcLCkgdHJ1ZSAoLnRlc3Qgd3MtcnggY2gpKSkpXHJcbiJ9IHs6c3ltIGNoYXItY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjaCBiYXNlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hhci1jb2RlXHJcbiBbY2ggYmFzZV1cclxuIChsZXQgW2NvZGUgKGpzL3BhcnNlSW50IGNoIGJhc2UpXSAoaWYgKGpzL2lzTmFOIGNvZGUpIC0xIGNvZGUpKSlcclxuIn0gezpzeW0gbGFzdC1pZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbGFzdC1pZCAoYXRvbSAwKSlcclxuIn0gezpzeW0gY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBjaGFyIFt4XSAod2hlbi1ub3QgKG5pbD8geCkgKGNsanMuY29yZS9jaGFyIHgpKSlcclxuIn0gezpzeW0gbnVtZXJpYz8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBudW1lcmljIiwgOmFyZ2xpc3RzIChbY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1lcmljP1xyXG4gXCJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBudW1lcmljXCJcclxuIFtjaF1cclxuICh3aGVuLW5vdCAobmlsPyBjaCkgKGdzdHJpbmcvaXNOdW1lcmljIGNoKSkpXHJcbiJ9IHs6c3ltIHNlY29uZCcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbW2EgYl1dKX0sIDpzb3VyY2UgIihkZWZuIHNlY29uZCcgW1thIGJdXSAod2hlbi1ub3QgYSBiKSlcclxuIn0gezpzeW0gZGVzdWdhci1tZXRhLCA6bWV0YSB7OmRvYyAiUmVzb2x2ZXMgc3ludGFjdGljYWwgc3VnYXIgaW4gbWV0YWRhdGEiLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVzdWdhci1tZXRhXHJcbiBcIlJlc29sdmVzIHN5bnRhY3RpY2FsIHN1Z2FyIGluIG1ldGFkYXRhXCJcclxuIFtmXVxyXG4gKGNvbmRcclxuICAoa2V5d29yZD8gZilcclxuICB7ZiB0cnVlfVxyXG4gIChzeW1ib2w/IGYpXHJcbiAgezp0YWcgZn1cclxuICAoc3RyaW5nPyBmKVxyXG4gIHs6dGFnIGZ9XHJcbiAgOmVsc2VcclxuICBmKSlcclxuIn0gezpzeW0gbmV4dC1pZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIG5leHQtaWQgW10gKHN3YXAhIGxhc3QtaWQgaW5jKSlcclxuIn0gezpzeW0gZXgtaW5mbz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuIGV4LWluZm8/IFtleF0gKGluc3RhbmNlPyBjbGpzLmNvcmUuRXhjZXB0aW9uSW5mbyBleCkpXHJcbiJ9IHs6c3ltIHJlYWRlci1jb25kaXRpb25hbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwiLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1jb25kaXRpb25hbD9cclxuIFwiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsXCJcclxuIFt2YWx1ZV1cclxuIChpbnN0YW5jZT8gUmVhZGVyQ29uZGl0aW9uYWwgdmFsdWUpKVxyXG4ifSB7OnN5bSBuZXdsaW5lPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lIiwgOmFyZ2xpc3RzIChbY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5ld2xpbmU/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lXCJcclxuIFtjXVxyXG4gKG9yIChpZGVudGljYWw/IFxcbmV3bGluZSBjKSAoaWRlbnRpY2FsPyBcIlxcblwiIGMpIChuaWw/IGMpKSlcclxuIn0gezpzeW0gbmFtZXNwYWNlLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMga2V5c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hbWVzcGFjZS1rZXlzXHJcbiBbbnMga2V5c11cclxuIChmb3JcclxuICBba2V5IGtleXNdXHJcbiAgKGlmXHJcbiAgIChvciAoc3ltYm9sPyBrZXkpIChrZXl3b3JkPyBrZXkpKVxyXG4gICAobGV0XHJcbiAgICBbW2tleS1ucyBrZXktbmFtZV1cclxuICAgICAoKGp1eHQgbmFtZXNwYWNlIG5hbWUpIGtleSlcclxuICAgICAtPmtleVxyXG4gICAgIChpZiAoc3ltYm9sPyBrZXkpIHN5bWJvbCBrZXl3b3JkKV1cclxuICAgIChjb25kXHJcbiAgICAgKG5pbD8ga2V5LW5zKVxyXG4gICAgICgtPmtleSBucyBrZXktbmFtZSlcclxuICAgICAoPSBcIl9cIiBrZXktbnMpXHJcbiAgICAgKC0+a2V5IGtleS1uYW1lKVxyXG4gICAgIDplbHNlXHJcbiAgICAga2V5KSlcclxuICAga2V5KSkpXHJcbiJ9IHs6c3ltIHdzLXJ4LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB3cy1yeCAjXCJbXFxzXVwiKVxyXG4ifSksIGNsanMudGFnZ2VkLWxpdGVyYWxzICh7OnN5bSByZWFkLXF1ZXVlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXF1ZXVlXHJcbiBbZm9ybV1cclxuICh3aGVuLW5vdFxyXG4gICh2ZWN0b3I/IGZvcm0pXHJcbiAgKHRocm93XHJcbiAgICM/KDpjbGogKFJ1bnRpbWVFeGNlcHRpb24uIFwiUXVldWUgbGl0ZXJhbCBleHBlY3RzIGEgdmVjdG9yIGZvciBpdHMgZWxlbWVudHMuXCIpIDpjbGpzIChqcy9FcnJvci4gXCJRdWV1ZSBsaXRlcmFsIGV4cGVjdHMgYSB2ZWN0b3IgZm9yIGl0cyBlbGVtZW50cy5cIikpKSlcclxuIChsaXN0ICdjbGpzLmNvcmUvaW50byAnY2xqcy5jb3JlLlBlcnNpc3RlbnRRdWV1ZS5FTVBUWSBmb3JtKSlcclxuIn0gezpzeW0gdmFsaWQtanMtbGl0ZXJhbC1rZXk/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWxpZC1qcy1saXRlcmFsLWtleT9cclxuIFtrXVxyXG4gKG9yIChzdHJpbmc/IGspIChhbmQgKGtleXdvcmQ/IGspIChuaWw/IChuYW1lc3BhY2UgaykpKSkpXHJcbiJ9IHs6c3ltIHJlYWQtanMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtanNcclxuIFtmb3JtXVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yICh2ZWN0b3I/IGZvcm0pIChtYXA/IGZvcm0pKVxyXG4gICh0aHJvd1xyXG4gICAjPyg6Y2xqIChSdW50aW1lRXhjZXB0aW9uLiBcIkphdmFTY3JpcHQgbGl0ZXJhbCBtdXN0IHVzZSBtYXAgb3IgdmVjdG9yIG5vdGF0aW9uXCIpIDpjbGpzIChqcy9FcnJvci4gXCJKYXZhU2NyaXB0IGxpdGVyYWwgbXVzdCB1c2UgbWFwIG9yIHZlY3RvciBub3RhdGlvblwiKSkpKVxyXG4gKHdoZW4tbm90XHJcbiAgKG9yIChub3QgKG1hcD8gZm9ybSkpIChldmVyeT8gdmFsaWQtanMtbGl0ZXJhbC1rZXk/IChrZXlzIGZvcm0pKSlcclxuICAodGhyb3dcclxuICAgIz8oOmNsaiAoUnVudGltZUV4Y2VwdGlvbi4gXCJKYXZhU2NyaXB0IGxpdGVyYWwga2V5cyBtdXN0IGJlIHN0cmluZ3Mgb3IgdW5xdWFsaWZpZWQga2V5d29yZHNcIikgOmNsanMgKGpzL0Vycm9yLiBcIkphdmFTY3JpcHQgbGl0ZXJhbCBrZXlzIG11c3QgYmUgc3RyaW5ncyBvciB1bnF1YWxpZmllZCBrZXl3b3Jkc1wiKSkpKVxyXG4gKEpTVmFsdWUuIGZvcm0pKVxyXG4ifSB7OnN5bSAqY2xqcy1kYXRhLXJlYWRlcnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmNsanMtZGF0YS1yZWFkZXJzKlxyXG4gKG1lcmdlXHJcbiAgIz8oOmNsaiAqZGF0YS1yZWFkZXJzKilcclxuICB7J3F1ZXVlIHJlYWQtcXVldWUsICd1dWlkIHJlYWQtdXVpZCwgJ2luc3QgcmVhZC1pbnN0LCAnanMgcmVhZC1qc30pKVxyXG4ifSksIGNsanMuYW5hbHl6ZXIgKHs6c3ltIHR5cGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdHlwZT9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiB0XVxyXG4gKHdoZW5cclxuICAoYW5kIChzb21lPyB0KSAoc3ltYm9sPyB0KSlcclxuICAobGV0XHJcbiAgIFt2YXIgKHJlc29sdmUtdmFyIGVudiB0KV1cclxuICAgKGlmLXNvbWVcclxuICAgIFt0eXBlICg6dHlwZSB2YXIpXVxyXG4gICAgdHlwZVxyXG4gICAgKGlmLXNvbWVcclxuICAgICBbdHlwZSAoLT4gdmFyIDppbmZvIDp0eXBlKV1cclxuICAgICB0eXBlXHJcbiAgICAgKGlmLXNvbWVcclxuICAgICAgW3Byb3RvICg6cHJvdG9jb2wtc3ltYm9sIHZhcildXHJcbiAgICAgIHByb3RvXHJcbiAgICAgIChnZXQgJyN7Y2xqcy5jb3JlL1BlcnNpc3RlbnRIYXNoTWFwIGNsanMuY29yZS9MaXN0fSB0KSkpKSkpKVxyXG4ifSB7OnN5bSBnZXQtbmFtZXNwYWNlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2tleV0gW2NlbnYga2V5XV19LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LW5hbWVzcGFjZVxyXG4gKFtrZXldIChnZXQtbmFtZXNwYWNlIGVudi8qY29tcGlsZXIqIGtleSkpXHJcbiAoW2NlbnYga2V5XVxyXG4gIChpZi1zb21lXHJcbiAgIFtucyAoZ2V0LWluIEBjZW52IFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGtleV0pXVxyXG4gICBuc1xyXG4gICAod2hlbiAoPSAnY2xqcy51c2VyIGtleSkgezpuYW1lICdjbGpzLnVzZXJ9KSkpKVxyXG4ifSB7OnN5bSBlbGlkZS1yZWFkZXItbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxpZGUtcmVhZGVyLW1ldGFcclxuIFttXVxyXG4gKGRpc3NvYyBtIDpmaWxlIDpsaW5lIDpjb2x1bW4gOmVuZC1jb2x1bW4gOmVuZC1saW5lIDpzb3VyY2UpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXJlbmFtZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltIGNlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXJlbmFtZT9cclxuIFtzeW0gY2Vudl1cclxuIChsZXRcclxuICBbbGliIChzeW1ib2wgKG5hbWVzcGFjZSBzeW0pKSBzeW0gKHN5bWJvbCAobmFtZSBzeW0pKV1cclxuICAobWlzc2luZy11c2U/IGxpYiBzeW0gY2VudikpKVxyXG4ifSB7OnN5bSByZXNvbHZlLWludm9rZWFibGUtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMgY3VycmVudC1ucyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLWludm9rZWFibGUtbnNcclxuIFtucyBjdXJyZW50LW5zIGVudl1cclxuIChsZXRcclxuICBbbnMgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zKSBtb2R1bGUtdHlwZSAobnMtPm1vZHVsZS10eXBlIG5zKV1cclxuICAoY2FzZVxyXG4gICBtb2R1bGUtdHlwZVxyXG4gICA6anNcclxuICAgezpuYW1lXHJcbiAgICAoc3ltYm9sXHJcbiAgICAgKG9yXHJcbiAgICAgIChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6anMtbW9kdWxlLWluZGV4IG5zIDpuYW1lKVxyXG4gICAgICAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnMpKSksXHJcbiAgICA6b3AgOmpzLXZhcixcclxuICAgIDpucyAnanN9XHJcbiAgIDpub2RlXHJcbiAgIHs6bmFtZVxyXG4gICAgKHN5bWJvbFxyXG4gICAgIChzdHIgY3VycmVudC1ucylcclxuICAgICAobXVuZ2Utbm9kZS1saWIgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zKSkpLFxyXG4gICAgOm9wIDpqcy12YXIsXHJcbiAgICA6bnMgY3VycmVudC1uc31cclxuICAgOmdsb2JhbFxyXG4gICB7Om5hbWVcclxuICAgIChzeW1ib2xcclxuICAgICAoc3RyIGN1cnJlbnQtbnMpXHJcbiAgICAgKG11bmdlLWdsb2JhbC1leHBvcnQgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zKSkpLFxyXG4gICAgOm9wIDpqcy12YXIsXHJcbiAgICA6bnMgY3VycmVudC1uc30pKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW5jbC1lbnYgW18gYmluZGluZ3MgJiBleHBycyA6YXMgZm9ybV0gaXMtbG9vcCB3aWRlbmVkLXRhZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldFxyXG4gW2VuY2wtZW52IFtfIGJpbmRpbmdzICYgZXhwcnMgOmFzIGZvcm1dIGlzLWxvb3Agd2lkZW5lZC10YWdzXVxyXG4gKHdoZW4tbm90XHJcbiAgKGFuZCAodmVjdG9yPyBiaW5kaW5ncykgKGV2ZW4/IChjb3VudCBiaW5kaW5ncykpKVxyXG4gICh0aHJvd1xyXG4gICAoZXJyb3JcclxuICAgIGVuY2wtZW52XHJcbiAgICBcImJpbmRpbmdzIG11c3QgYmUgdmVjdG9yIG9mIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzXCIpKSlcclxuIChsZXRcclxuICBbY29udGV4dFxyXG4gICAoOmNvbnRleHQgZW5jbC1lbnYpXHJcbiAgIG9wXHJcbiAgIChpZiAodHJ1ZT8gaXMtbG9vcCkgOmxvb3AgOmxldClcclxuICAgYmluZGluZ3NcclxuICAgKGlmXHJcbiAgICB3aWRlbmVkLXRhZ3NcclxuICAgICh2ZWNcclxuICAgICAobWFwY2F0XHJcbiAgICAgIChmblxyXG4gICAgICAgW1tuYW1lIGluaXRdIHdpZGVuZWQtdGFnXVxyXG4gICAgICAgWyh2YXJ5LW1ldGEgbmFtZSBhc3NvYyA6dGFnIHdpZGVuZWQtdGFnKSBpbml0XSlcclxuICAgICAgKHBhcnRpdGlvbiAyIGJpbmRpbmdzKVxyXG4gICAgICB3aWRlbmVkLXRhZ3MpKVxyXG4gICAgYmluZGluZ3MpXHJcbiAgIFtiZXMgZW52XVxyXG4gICAoLT5cclxuICAgIGVuY2wtZW52XHJcbiAgICAoY29uZC0+ICh0cnVlPyBpcy1sb29wKSAoYXNzb2MgOmluLWxvb3AgdHJ1ZSkpXHJcbiAgICAoYW5hbHl6ZS1sZXQtYmluZGluZ3MgYmluZGluZ3Mgb3ApKVxyXG4gICByZWN1ci1mcmFtZVxyXG4gICAod2hlblxyXG4gICAgKHRydWU/IGlzLWxvb3ApXHJcbiAgICB7OnBhcmFtcyBiZXMsIDpmbGFnIChhdG9tIG5pbCksIDp0YWdzIChhdG9tIChtYXB2IDp0YWcgYmVzKSl9KVxyXG4gICByZWN1ci1mcmFtZXNcclxuICAgKGlmIHJlY3VyLWZyYW1lIChjb25zIHJlY3VyLWZyYW1lICpyZWN1ci1mcmFtZXMqKSAqcmVjdXItZnJhbWVzKilcclxuICAgbG9vcC1sZXRzXHJcbiAgIChjb25kXHJcbiAgICAodHJ1ZT8gaXMtbG9vcClcclxuICAgICpsb29wLWxldHMqXHJcbiAgICAoc29tZT8gKmxvb3AtbGV0cyopXHJcbiAgICAoY29ucyB7OnBhcmFtcyBiZXN9ICpsb29wLWxldHMqKSlcclxuICAgd2Fybi1hY2NcclxuICAgKHdoZW4gKGFuZCBpcy1sb29wIChub3Qgd2lkZW5lZC10YWdzKSkgKGF0b20gW10pKVxyXG4gICBleHByXHJcbiAgIChpZlxyXG4gICAgd2Fybi1hY2NcclxuICAgICh3aXRoLXdhcm5pbmctaGFuZGxlcnNcclxuICAgICBbKGFjY3VtdWxhdGluZy13YXJuaW5nLWhhbmRsZXIgd2Fybi1hY2MpXVxyXG4gICAgIChhbmFseXplLWxldC1ib2R5IGVudiBjb250ZXh0IGV4cHJzIHJlY3VyLWZyYW1lcyBsb29wLWxldHMpKVxyXG4gICAgKGFuYWx5emUtbGV0LWJvZHkgZW52IGNvbnRleHQgZXhwcnMgcmVjdXItZnJhbWVzIGxvb3AtbGV0cykpXHJcbiAgIGNoaWxkcmVuXHJcbiAgIFs6YmluZGluZ3MgOmJvZHldXHJcbiAgIG5pbC0+YW55XHJcbiAgIChmbmlsIGlkZW50aXR5ICdhbnkpXVxyXG4gIChpZlxyXG4gICAoYW5kXHJcbiAgICBpcy1sb29wXHJcbiAgICAobm90IHdpZGVuZWQtdGFncylcclxuICAgIChub3Q9XHJcbiAgICAgKG1hcHYgbmlsLT5hbnkgQCg6dGFncyByZWN1ci1mcmFtZSkpXHJcbiAgICAgKG1hcHYgKGNvbXAgbmlsLT5hbnkgOnRhZykgYmVzKSkpXHJcbiAgIChyZWN1ciBlbmNsLWVudiBmb3JtIGlzLWxvb3AgQCg6dGFncyByZWN1ci1mcmFtZSkpXHJcbiAgIChkb1xyXG4gICAgKHdoZW4gd2Fybi1hY2MgKHJlcGxheS1hY2N1bXVsYXRlZC13YXJuaW5ncyB3YXJuLWFjYykpXHJcbiAgICB7Om9wIG9wLFxyXG4gICAgIDplbnYgZW5jbC1lbnYsXHJcbiAgICAgOmJpbmRpbmdzIGJlcyxcclxuICAgICA6Ym9keSAoYXNzb2MgZXhwciA6Ym9keT8gdHJ1ZSksXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6Y2hpbGRyZW4gY2hpbGRyZW59KSkpKVxyXG4ifSB7OnN5bSB2YXItbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1t2YXJdIFt2YXIgZXhwci1lbnZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YXItbWV0YVxyXG4gKFt2YXJdICh2YXItbWV0YSB2YXIgbmlsKSlcclxuIChbdmFyIGV4cHItZW52XVxyXG4gIChsZXRcclxuICAgW3N5bVxyXG4gICAgKDpuYW1lIHZhcilcclxuICAgIGtzXHJcbiAgICBbOm5zIDpkb2MgOmZpbGUgOmxpbmUgOmNvbHVtbl1cclxuICAgIG1cclxuICAgIChtZXJnZVxyXG4gICAgIChsZXRcclxuICAgICAgW3VzZXItbWV0YSAoOm1ldGEgdmFyKSB1a3MgKGtleXMgdXNlci1tZXRhKV1cclxuICAgICAgKHppcG1hcFxyXG4gICAgICAgdWtzXHJcbiAgICAgICAobWFwXHJcbiAgICAgICAgKGZuKiBbcDFfXzQ4NTk2I10gKGxpc3QgJ3F1b3RlIChnZXQgdXNlci1tZXRhIHAxX180ODU5NiMpKSlcclxuICAgICAgICB1a3MpKSlcclxuICAgICAoYXNzb2NcclxuICAgICAgKHppcG1hcFxyXG4gICAgICAga3NcclxuICAgICAgIChtYXAgKGZuKiBbcDFfXzQ4NTk3I10gKGxpc3QgJ3F1b3RlIChnZXQgdmFyIHAxX180ODU5NyMpKSkga3MpKVxyXG4gICAgICA6bmFtZVxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAncXVvdGUpXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAoc3ltYm9sIChuYW1lICg6bmFtZSB2YXIpKSkpKSkpXHJcbiAgICAgIDp0ZXN0XHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvd2hlbilcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IHN5bSlcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnLi1jbGpzJGxhbmckdGVzdClcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBzeW0pKSkpKSkpKVxyXG4gICAgICA6YXJnbGlzdHNcclxuICAgICAgKGxldFxyXG4gICAgICAgW2FyZ2xpc3RzXHJcbiAgICAgICAgKDphcmdsaXN0cyB2YXIpXHJcbiAgICAgICAgYXJnbGlzdHMnXHJcbiAgICAgICAgKGlmICg9ICdxdW90ZSAoZmlyc3QgYXJnbGlzdHMpKSAoc2Vjb25kIGFyZ2xpc3RzKSBhcmdsaXN0cyldXHJcbiAgICAgICAobGlzdFxyXG4gICAgICAgICdxdW90ZVxyXG4gICAgICAgIChkb2FsbCAobWFwIHdpdGgtbWV0YSBhcmdsaXN0cycgKDphcmdsaXN0cy1tZXRhIHZhcikpKSkpKSldXHJcbiAgIChpZiBleHByLWVudiAoYW5hbHl6ZSBleHByLWVudiBtKSBtKSkpKVxyXG4ifSB7OnN5bSBkZXN1Z2FyLW5zLXNwZWNzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYW4gb3JpZ2luYWwgc2V0IG9mIG5zIHNwZWNzIGRlc3VnYXIgOmluY2x1ZGUtbWFjcm9zIGFuZCA6cmVmZXItbWFjcm9zXG4gICB1c2FnZSBpbnRvIG9ubHkgcHJpbWl0aXZlIHNwZWMgZm9ybXMgLSA6dXNlLCA6cmVxdWlyZSwgOnVzZS1tYWNyb3MsXG4gICA6cmVxdWlyZS1tYWNyb3MuIElmIGEgbGlicmFyeSBpbmNsdWRlcyBhIG1hY3JvIGZpbGUgb2Ygd2l0aCB0aGUgc2FtZSBuYW1lXG4gICBhcyB0aGUgbmFtZXNwYWNlIHdpbGwgYWxzbyBiZSBkZXN1Z2FyZWQuIiwgOmFyZ2xpc3RzIChbYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc3VnYXItbnMtc3BlY3NcclxuIFwiR2l2ZW4gYW4gb3JpZ2luYWwgc2V0IG9mIG5zIHNwZWNzIGRlc3VnYXIgOmluY2x1ZGUtbWFjcm9zIGFuZCA6cmVmZXItbWFjcm9zXFxuICAgdXNhZ2UgaW50byBvbmx5IHByaW1pdGl2ZSBzcGVjIGZvcm1zIC0gOnVzZSwgOnJlcXVpcmUsIDp1c2UtbWFjcm9zLFxcbiAgIDpyZXF1aXJlLW1hY3Jvcy4gSWYgYSBsaWJyYXJ5IGluY2x1ZGVzIGEgbWFjcm8gZmlsZSBvZiB3aXRoIHRoZSBzYW1lIG5hbWVcXG4gICBhcyB0aGUgbmFtZXNwYWNlIHdpbGwgYWxzbyBiZSBkZXN1Z2FyZWQuXCJcclxuIFthcmdzXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3JlcXVpcmVdLCA6YXMgaW5kZXhlZH1cclxuICAgKC0+PiBhcmdzIChtYXAgKGZuIFtbayAmIHNwZWNzXV0gW2sgKGludG8gW10gc3BlY3MpXSkpIChpbnRvIHt9KSlcclxuICAgc3VnYXIta2V5c1xyXG4gICAjezppbmNsdWRlLW1hY3JvcyA6cmVmZXItbWFjcm9zfVxyXG4gICByZW1vdmUtZnJvbS1zcGVjXHJcbiAgIChmblxyXG4gICAgW3ByZWQgc3BlY11cclxuICAgIChpZi1ub3RcclxuICAgICAoYW5kIChzZXF1ZW50aWFsPyBzcGVjKSAoc29tZSBwcmVkIHNwZWMpKVxyXG4gICAgIHNwZWNcclxuICAgICAobGV0XHJcbiAgICAgIFtbbCByXSAoc3BsaXQtd2l0aCAoY29tcGxlbWVudCBwcmVkKSBzcGVjKV1cclxuICAgICAgKHJlY3VyIHByZWQgKGNvbmNhdCBsIChkcm9wIDIgcikpKSkpKVxyXG4gICByZXBsYWNlLXJlZmVyLW1hY3Jvc1xyXG4gICAoZm5cclxuICAgIFtzcGVjXVxyXG4gICAgKGlmLW5vdFxyXG4gICAgIChzZXF1ZW50aWFsPyBzcGVjKVxyXG4gICAgIHNwZWNcclxuICAgICAobWFwIChmbiBbeF0gKGlmICg9IHggOnJlZmVyLW1hY3JvcykgOnJlZmVyIHgpKSBzcGVjKSkpXHJcbiAgIHJlbG9hZC1zcGVjP1xyXG4gICAoZm4qIFtwMV9fNDg2MjEjXSAoI3s6cmVsb2FkIDpyZWxvYWQtYWxsfSBwMV9fNDg2MjEjKSlcclxuICAgdG8tbWFjcm8tc3BlY3NcclxuICAgKGZuXHJcbiAgICBbc3BlY3NdXHJcbiAgICAoLT4+XHJcbiAgICAgc3BlY3NcclxuICAgICAoZmlsdGVyXHJcbiAgICAgIChmblxyXG4gICAgICAgW3hdXHJcbiAgICAgICAob3JcclxuICAgICAgICAoYW5kIChzZXF1ZW50aWFsPyB4KSAoc29tZSBzdWdhci1rZXlzIHgpKVxyXG4gICAgICAgIChyZWxvYWQtc3BlYz8geClcclxuICAgICAgICAobWFjcm8tYXV0b2xvYWQtbnM/IHgpKSkpXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm5cclxuICAgICAgIFt4XVxyXG4gICAgICAgKGlmLW5vdFxyXG4gICAgICAgIChyZWxvYWQtc3BlYz8geClcclxuICAgICAgICAoLT4+XHJcbiAgICAgICAgIHhcclxuICAgICAgICAgKHJlbW92ZS1mcm9tLXNwZWMgI3s6aW5jbHVkZS1tYWNyb3N9KVxyXG4gICAgICAgICAocmVtb3ZlLWZyb20tc3BlYyAjezpyZWZlcn0pXHJcbiAgICAgICAgIChyZW1vdmUtZnJvbS1zcGVjICN7OnJlbmFtZX0pXHJcbiAgICAgICAgIChyZXBsYWNlLXJlZmVyLW1hY3JvcykpXHJcbiAgICAgICAgeCkpKSkpXHJcbiAgIHJlbW92ZS1zdWdhclxyXG4gICAocGFydGlhbCByZW1vdmUtZnJvbS1zcGVjIHN1Z2FyLWtleXMpXVxyXG4gIChpZi1zb21lXHJcbiAgIFtyZXF1aXJlLXNwZWNzIChzZXEgKHRvLW1hY3JvLXNwZWNzIHJlcXVpcmUpKV1cclxuICAgKG1hcFxyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGlmLW5vdFxyXG4gICAgICAocmVsb2FkLXNwZWM/IHgpXHJcbiAgICAgIChsZXQgW1trIHZdIHhdIChjb25zIGsgKG1hcCByZW1vdmUtc3VnYXIgdikpKVxyXG4gICAgICB4KSlcclxuICAgICh1cGRhdGUtaW4gaW5kZXhlZCBbOnJlcXVpcmUtbWFjcm9zXSAoZm5pbCBpbnRvIFtdKSByZXF1aXJlLXNwZWNzKSlcclxuICAgYXJncykpKVxyXG4ifSB7OnN5bSBqcy10YWc/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy10YWc/XHJcbiBbeF1cclxuIChhbmQgKHN5bWJvbD8geCkgKG9yICg9ICdqcyB4KSAoPSBcImpzXCIgKG5hbWVzcGFjZSB4KSkpKSlcclxuIn0gezpzeW0gZW5zdXJlLWRlZnMsIDptZXRhIHs6ZG9jICJFbnN1cmVzIHRoYXQgYSBub24tbmlsIGRlZnMgbWFwIGV4aXN0cyBpbiB0aGUgY29tcGlsZXIgc3RhdGUgZm9yIGEgZ2l2ZW5cbiAgbnMuIChBIG5vbi1uaWwgZGVmcyBtYXAgc2lnbmlmaWVzIHRoYXQgdGhlIG5hbWVzcGFjZSBoYXMgYmVlbiBhbmFseXplZC4pIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbnN1cmUtZGVmc1xyXG4gXCJFbnN1cmVzIHRoYXQgYSBub24tbmlsIGRlZnMgbWFwIGV4aXN0cyBpbiB0aGUgY29tcGlsZXIgc3RhdGUgZm9yIGEgZ2l2ZW5cXG4gIG5zLiAoQSBub24tbmlsIGRlZnMgbWFwIHNpZ25pZmllcyB0aGF0IHRoZSBuYW1lc3BhY2UgaGFzIGJlZW4gYW5hbHl6ZWQuKVwiXHJcbiBbbnNdXHJcbiAoc3dhcCFcclxuICBlbnYvKmNvbXBpbGVyKlxyXG4gIHVwZGF0ZS1pblxyXG4gIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDpkZWZzXVxyXG4gIChmbiogW3AxX180ODY0NiNdIChvciBwMV9fNDg2NDYjIHt9KSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLW1hcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbWFwXHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW2V4cHItZW52XHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGtzXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgKG1hcHZcclxuICAgICAoZm4qIFtwMV9fNDg2MzUjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2MzUjKSlcclxuICAgICAoa2V5cyBmb3JtKSkpXHJcbiAgIHZzXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgKG1hcHZcclxuICAgICAoZm4qIFtwMV9fNDg2MzYjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2MzYjKSlcclxuICAgICAodmFscyBmb3JtKSkpXVxyXG4gIChhbmFseXplLXdyYXAtbWV0YVxyXG4gICB7Om9wIDptYXAsXHJcbiAgICA6ZW52IGVudixcclxuICAgIDpmb3JtIGZvcm0sXHJcbiAgICA6a2V5cyBrcyxcclxuICAgIDp2YWxzIHZzLFxyXG4gICAgOmNoaWxkcmVuIFs6a2V5cyA6dmFsc10sXHJcbiAgICA6dGFnICdjbGpzLmNvcmUvSU1hcH0pKSlcclxuIn0gezpzeW0gTlVNRVJJQ19TRVQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE5VTUVSSUNfU0VUICcje2FueSBsb25nIGRvdWJsZSBudW1iZXJ9KVxyXG4ifSB7OnN5bSBhbmFseXplLXJlY29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtcmVjb3JkXHJcbiBbZW52IHhdXHJcbiAobGV0XHJcbiAgW19pdGVtc19cclxuICAgKGRpc2FsbG93aW5nLXJlY3VyIChhbmFseXplIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpIChpbnRvIHt9IHgpKSlcclxuICAgW25zIG5hbWVdXHJcbiAgIChyZWNvcmQtbnMrbmFtZSB4KV1cclxuICB7Om9wIDpjb25zdCxcclxuICAgOnZhbCB4LFxyXG4gICA6ZW52IGVudixcclxuICAgOmZvcm0geCxcclxuICAgOnRhZyAoc3ltYm9sIChzdHIgbnMpIChzdHIgbmFtZSkpfSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtc2VxKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcCBlbnYgZm9ybSBuYW1lIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXNlcSpcclxuIFtvcCBlbnYgZm9ybSBuYW1lIG9wdHNdXHJcbiAoaWZcclxuICAoY29udGFpbnM/IHNwZWNpYWxzIG9wKVxyXG4gIChwYXJzZSBvcCBlbnYgZm9ybSBuYW1lIG9wdHMpXHJcbiAgKHBhcnNlLWludm9rZSBlbnYgZm9ybSkpKVxyXG4ifSB7OnN5bSBjb25zdGFudHMtbnMtc3ltLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gY29uc3RhbnRzLW5zLXN5bVxyXG4gXCJUaGUgbmFtZXNwYWNlIG9mIHRoZSBjb25zdGFudHMgdGFibGUgYXMgYSBzeW1ib2wuXCJcclxuICdjbGpzLmNvcmUuY29uc3RhbnRzKVxyXG4ifSB7OnN5bSByZXNvbHZlLWFsaWFzLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBuYW1lc3BhY2UgYW5kIGFuIHVucXVhbGlmaWVkIHN5bWJvbCBhbmQgcG90ZW50aWFsbHkgcmV0dXJucyBhIG5ld1xuICBzeW1ib2wgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIHRoZSBvcmlnaW5hbC4iLCA6YXJnbGlzdHMgKFtucyBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLWFsaWFzXHJcbiBcIlRha2VzIGEgbmFtZXNwYWNlIGFuZCBhbiB1bnF1YWxpZmllZCBzeW1ib2wgYW5kIHBvdGVudGlhbGx5IHJldHVybnMgYSBuZXdcXG4gIHN5bWJvbCB0byBiZSB1c2VkIGluIGxpZXUgb2YgdGhlIG9yaWdpbmFsLlwiXHJcbiBbbnMgc3ltXVxyXG4gKGlmXHJcbiAgKGFuZCAoPSAnY2xqcy5jb3JlIG5zKSAoJyN7YWdldCBhc2V0fSBzeW0pIChjaGVja2VkLWFycmF5cykpXHJcbiAgKGdldC1pblxyXG4gICAnezp3YXJuIHthZ2V0IGNoZWNrZWQtYWdldCwgYXNldCBjaGVja2VkLWFzZXR9LFxyXG4gICAgIDplcnJvciB7YWdldCBjaGVja2VkLWFnZXQnLCBhc2V0IGNoZWNrZWQtYXNldCd9fVxyXG4gICBbKGNoZWNrZWQtYXJyYXlzKSBzeW1dKVxyXG4gIHN5bSkpXHJcbiJ9IHs6c3ltICpjbGpzLWRlcC1zZXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1kZXAtc2V0KiAod2l0aC1tZXRhICN7fSB7OmRlcC1wYXRoIFtdfSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtdmFyLCA6bWV0YSB7OmRvYyAiUmVzb2x2ZSBhIHZhci4gQWNjZXB0cyBhIHNpZGUtZWZmZWN0aW5nIGNvbmZpcm0gZm4gZm9yIHByb2R1Y2luZ1xuICAgd2FybmluZ3MgYWJvdXQgdW5yZXNvbHZlZCB2YXJzLiIsIDphcmdsaXN0cyBbW2VudiBzeW1dIFtlbnYgc3ltIGNvbmZpcm1dIFtlbnYgc3ltIGNvbmZpcm0gZGVmYXVsdD9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXZhclxyXG4gXCJSZXNvbHZlIGEgdmFyLiBBY2NlcHRzIGEgc2lkZS1lZmZlY3RpbmcgY29uZmlybSBmbiBmb3IgcHJvZHVjaW5nXFxuICAgd2FybmluZ3MgYWJvdXQgdW5yZXNvbHZlZCB2YXJzLlwiXHJcbiAoW2VudiBzeW1dIChyZXNvbHZlLXZhciBlbnYgc3ltIG5pbCkpXHJcbiAoW2VudiBzeW0gY29uZmlybV0gKHJlc29sdmUtdmFyIGVudiBzeW0gY29uZmlybSB0cnVlKSlcclxuIChbZW52IHN5bSBjb25maXJtIGRlZmF1bHQ/XVxyXG4gIChsZXRcclxuICAgW2xvY2FscyAoOmxvY2FscyBlbnYpXVxyXG4gICAoaWZcclxuICAgICM/KDpjbGogKD0gXCJqc1wiIChuYW1lc3BhY2Ugc3ltKSkgOmNsanMgKGlkZW50aWNhbD8gXCJqc1wiIChuYW1lc3BhY2Ugc3ltKSkpXHJcbiAgICAobGV0XHJcbiAgICAgW3N5bW5cclxuICAgICAgKC0+IHN5bSBuYW1lIHN5bWJvbClcclxuICAgICAgc2hhZG93ZWQtYnktbG9jYWxcclxuICAgICAgKGhhbmRsZS1zeW1ib2wtbG9jYWwgc3ltbiAoZ2V0IGxvY2FscyBzeW1uKSldXHJcbiAgICAgKGNvbmRcclxuICAgICAgKHNvbWU/IHNoYWRvd2VkLWJ5LWxvY2FsKVxyXG4gICAgICAoZG9cclxuICAgICAgICh3YXJuaW5nIDpqcy1zaGFkb3dlZC1ieS1sb2NhbCBlbnYgezpuYW1lIHN5bX0pXHJcbiAgICAgICAoYXNzb2Mgc2hhZG93ZWQtYnktbG9jYWwgOm9wIDpsb2NhbCkpXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtwcmUgKC0+PiAoc3RyaW5nL3NwbGl0IChuYW1lIHN5bSkgI1wiXFwuXCIpIChtYXAgc3ltYm9sKSB2ZWMpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICAoYW5kXHJcbiAgICAgICAgIChub3QgKGhhcy1leHRlcm4/IHByZSkpXHJcbiAgICAgICAgIChub3QgKC0+IHN5bSBtZXRhIDpjbGpzLmFuYWx5emVyL25vLXJlc29sdmUpKSlcclxuICAgICAgICAoc3dhcCFcclxuICAgICAgICAgZW52Lypjb21waWxlcipcclxuICAgICAgICAgdXBkYXRlLWluXHJcbiAgICAgICAgIChpbnRvXHJcbiAgICAgICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoLT4gZW52IDpucyA6bmFtZSkgOmV4dGVybnNdXHJcbiAgICAgICAgICBwcmUpXHJcbiAgICAgICAgIG1lcmdlXHJcbiAgICAgICAgIHt9KSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIHs6bmFtZSBzeW0sXHJcbiAgICAgICAgIDpvcCA6anMtdmFyLFxyXG4gICAgICAgICA6bnMgJ2pzLFxyXG4gICAgICAgICA6dGFnXHJcbiAgICAgICAgICh3aXRoLW1ldGFcclxuICAgICAgICAgIChvciAoanMtdGFnIHByZSkgKDp0YWcgKG1ldGEgc3ltKSkgJ2pzKVxyXG4gICAgICAgICAgezpwcmVmaXggcHJlfSl9XHJcbiAgICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgIFtyZXQtdGFnIChqcy10YWcgcHJlIDpyZXQtdGFnKV1cclxuICAgICAgICAgezpqcy1mbi12YXIgdHJ1ZSwgOnJldC10YWcgcmV0LXRhZ30pKSkpKVxyXG4gICAgKGxldFxyXG4gICAgIFtzXHJcbiAgICAgIChzdHIgc3ltKVxyXG4gICAgICBsYlxyXG4gICAgICAoaGFuZGxlLXN5bWJvbC1sb2NhbCBzeW0gKGdldCBsb2NhbHMgc3ltKSlcclxuICAgICAgY3VycmVudC1uc1xyXG4gICAgICAoLT4gZW52IDpucyA6bmFtZSldXHJcbiAgICAgKGNvbmRcclxuICAgICAgKHNvbWU/IGxiKVxyXG4gICAgICAoYXNzb2MgbGIgOm9wIDpsb2NhbClcclxuICAgICAgKHNvbWU/IChuYW1lc3BhY2Ugc3ltKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW25zXHJcbiAgICAgICAgKG5hbWVzcGFjZSBzeW0pXHJcbiAgICAgICAgbnNcclxuICAgICAgICAoaWZcclxuICAgICAgICAgIz8oOmNsaiAoPSBcImNsb2p1cmUuY29yZVwiIG5zKSA6Y2xqcyAoaWRlbnRpY2FsPyBcImNsb2p1cmUuY29yZVwiIG5zKSlcclxuICAgICAgICAgXCJjbGpzLmNvcmVcIlxyXG4gICAgICAgICBucylcclxuICAgICAgICBmdWxsLW5zXHJcbiAgICAgICAgKHJlc29sdmUtbnMtYWxpYXNcclxuICAgICAgICAgZW52XHJcbiAgICAgICAgIG5zXHJcbiAgICAgICAgIChvclxyXG4gICAgICAgICAgKGFuZFxyXG4gICAgICAgICAgIChqcy1tb2R1bGUtZXhpc3RzPyBucylcclxuICAgICAgICAgICAoZ2V0cyBAZW52Lypjb21waWxlciogOmpzLW1vZHVsZS1pbmRleCBucyA6bmFtZSkpXHJcbiAgICAgICAgICAoc3ltYm9sIG5zKSkpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICAoc29tZT8gY29uZmlybSlcclxuICAgICAgICAod2hlbiAobm90PSBjdXJyZW50LW5zIGZ1bGwtbnMpIChjb25maXJtLW5zIGVudiBmdWxsLW5zKSlcclxuICAgICAgICAoY29uZmlybSBlbnYgZnVsbC1ucyAoc3ltYm9sIChuYW1lIHN5bSkpKSlcclxuICAgICAgIChyZXNvbHZlKiBlbnYgc3ltIGZ1bGwtbnMgY3VycmVudC1ucykpXHJcbiAgICAgIChkb3R0ZWQtc3ltYm9sPyBzeW0pXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtpZHhcclxuICAgICAgICAoLmluZGV4T2YgcyBcIi5cIilcclxuICAgICAgICBwcmVmaXhcclxuICAgICAgICAoc3ltYm9sIChzdWJzIHMgMCBpZHgpKVxyXG4gICAgICAgIHN1ZmZpeFxyXG4gICAgICAgIChzdWJzIHMgKGluYyBpZHgpKV1cclxuICAgICAgIChpZi1sZXRcclxuICAgICAgICBbcmVzb2x2ZWQgKHJlc29sdmUtdmFyIGVudiBwcmVmaXggbmlsIGZhbHNlKV1cclxuICAgICAgICAodXBkYXRlXHJcbiAgICAgICAgIHJlc29sdmVkXHJcbiAgICAgICAgIDpuYW1lXHJcbiAgICAgICAgIChmbiogW3AxX180ODU5NSNdIChzeW1ib2wgKHN0ciBwMV9fNDg1OTUjIFwiLlwiIHN1ZmZpeCkpKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtpZHhcclxuICAgICAgICAgICgubGFzdEluZGV4T2YgcyBcIi5cIilcclxuICAgICAgICAgIHByZVxyXG4gICAgICAgICAgKHN1YnMgcyAwIGlkeClcclxuICAgICAgICAgIHN1ZlxyXG4gICAgICAgICAgKHN1YnMgcyAoaW5jIGlkeCkpXVxyXG4gICAgICAgICB7Om9wIDp2YXIsIDpuYW1lIChzeW1ib2wgcHJlIHN1ZiksIDpucyAoc3ltYm9sIHByZSl9KSkpXHJcbiAgICAgIChzb21lP1xyXG4gICAgICAgKGdldHNcclxuICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgIDp1c2VzXHJcbiAgICAgICAgc3ltKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW2Z1bGwtbnNcclxuICAgICAgICAoZ2V0c1xyXG4gICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgIDp1c2VzXHJcbiAgICAgICAgIHN5bSldXHJcbiAgICAgICAocmVzb2x2ZSogZW52IHN5bSBmdWxsLW5zIGN1cnJlbnQtbnMpKVxyXG4gICAgICAoc29tZT9cclxuICAgICAgIChnZXRzXHJcbiAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICA6cmVuYW1lc1xyXG4gICAgICAgIHN5bSkpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtxdWFsaWZpZWQtc3ltYm9sXHJcbiAgICAgICAgKGdldHNcclxuICAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgICA6cmVuYW1lc1xyXG4gICAgICAgICBzeW0pXHJcbiAgICAgICAgZnVsbC1uc1xyXG4gICAgICAgIChzeW1ib2wgKG5hbWVzcGFjZSBxdWFsaWZpZWQtc3ltYm9sKSlcclxuICAgICAgICBzeW1cclxuICAgICAgICAoc3ltYm9sIChuYW1lIHF1YWxpZmllZC1zeW1ib2wpKV1cclxuICAgICAgIChyZXNvbHZlKiBlbnYgc3ltIGZ1bGwtbnMgY3VycmVudC1ucykpXHJcbiAgICAgIChzb21lP1xyXG4gICAgICAgKGdldHNcclxuICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgIDppbXBvcnRzXHJcbiAgICAgICAgc3ltKSlcclxuICAgICAgKHJlY3VyXHJcbiAgICAgICBlbnZcclxuICAgICAgIChnZXRzXHJcbiAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICA6aW1wb3J0c1xyXG4gICAgICAgIHN5bSlcclxuICAgICAgIGNvbmZpcm1cclxuICAgICAgIGRlZmF1bHQ/KVxyXG4gICAgICAoc29tZT9cclxuICAgICAgIChnZXRzXHJcbiAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICA6ZGVmc1xyXG4gICAgICAgIHN5bSkpXHJcbiAgICAgIChkb1xyXG4gICAgICAgKHdoZW4gKHNvbWU/IGNvbmZpcm0pIChjb25maXJtIGVudiBjdXJyZW50LW5zIHN5bSkpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICAoZ2V0c1xyXG4gICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgIDpkZWZzXHJcbiAgICAgICAgIHN5bSlcclxuICAgICAgICB7Om5hbWUgKHN5bWJvbCAoc3RyIGN1cnJlbnQtbnMpIChzdHIgc3ltKSksXHJcbiAgICAgICAgIDpvcCA6dmFyLFxyXG4gICAgICAgICA6bnMgY3VycmVudC1uc30pKVxyXG4gICAgICAoY29yZS1uYW1lPyBlbnYgc3ltKVxyXG4gICAgICAoZG9cclxuICAgICAgICh3aGVuIChzb21lPyBjb25maXJtKSAoY29uZmlybSBlbnYgJ2NsanMuY29yZSBzeW0pKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgKGdldHNcclxuICAgICAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICAgJ2NsanMuY29yZVxyXG4gICAgICAgICA6ZGVmc1xyXG4gICAgICAgICBzeW0pXHJcbiAgICAgICAgezpuYW1lIChzeW1ib2wgXCJjbGpzLmNvcmVcIiAoc3RyIHN5bSkpLFxyXG4gICAgICAgICA6b3AgOnZhcixcclxuICAgICAgICAgOm5zICdjbGpzLmNvcmV9KSlcclxuICAgICAgKGludm9rZWFibGUtbnM/IHMgZW52KVxyXG4gICAgICAocmVzb2x2ZS1pbnZva2VhYmxlLW5zIHMgY3VycmVudC1ucyBlbnYpXHJcbiAgICAgIDplbHNlXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBkZWZhdWx0P1xyXG4gICAgICAgKHdoZW4gKHNvbWU/IGNvbmZpcm0pIChjb25maXJtIGVudiBjdXJyZW50LW5zIHN5bSkpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICAoZ2V0c1xyXG4gICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgIDpkZWZzXHJcbiAgICAgICAgIHN5bSlcclxuICAgICAgICB7Om5hbWUgKHN5bWJvbCAoc3RyIGN1cnJlbnQtbnMpIChzdHIgc3ltKSksXHJcbiAgICAgICAgIDpvcCA6dmFyLFxyXG4gICAgICAgICA6bnMgY3VycmVudC1uc30pKSkpKSkpKVxyXG4ifSB7OnN5bSBqcy1zdGFyLXNlZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtc3Rhci1zZWdcclxuIFtzXVxyXG4gKGxldFxyXG4gIFtpZHggKC5pbmRleE9mIHMgXCJ+e1wiKV1cclxuICAoaWZcclxuICAgKD09IC0xIGlkeClcclxuICAgKGxpc3QgcylcclxuICAgKGxldFxyXG4gICAgW2VuZCAoLmluZGV4T2YgcyBcIn1cIiBpZHgpXVxyXG4gICAgKGxhenktc2VxXHJcbiAgICAgKGNvbnMgKHN1YnMgcyAwIGlkeCkgKGpzLXN0YXItc2VnIChzdWJzIHMgKGluYyBlbmQpKSkpKSkpKSlcclxuIn0gezpzeW0gZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbW9kdWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz9cclxuIFttb2R1bGVdXHJcbiAobGV0XHJcbiAgW2dsb2JhbC1leHBvcnRzXHJcbiAgIChnZXQtaW5cclxuICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgWzpqcy1kZXBlbmRlbmN5LWluZGV4IChzdHIgbW9kdWxlKSA6Z2xvYmFsLWV4cG9ydHNdKV1cclxuICAob3JcclxuICAgKGNvbnRhaW5zPyBnbG9iYWwtZXhwb3J0cyAoc3ltYm9sIG1vZHVsZSkpXHJcbiAgIChjb250YWlucz8gZ2xvYmFsLWV4cG9ydHMgKG5hbWUgbW9kdWxlKSkpKSlcclxuIn0gezpzeW0gcmVnaXN0ZXItc3BlY3MsIDptZXRhIHs6ZG9jICJSZWdpc3RlcnMgc3BlY2VkIHZhcnMgZm91bmQgaW4gYSBuYW1lc3BhY2UgYW5hbHlzaXMgY2FjaGUuIiwgOmFyZ2xpc3RzIChbY2FjaGVkLW5zXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnaXN0ZXItc3BlY3NcclxuIFwiUmVnaXN0ZXJzIHNwZWNlZCB2YXJzIGZvdW5kIGluIGEgbmFtZXNwYWNlIGFuYWx5c2lzIGNhY2hlLlwiXHJcbiBbY2FjaGVkLW5zXVxyXG4gIz8oOmNsaiAodHJ5IChsb2NraW5nIGxvYWQtbXV0ZXggKGNsb2p1cmUuY29yZS9yZXF1aXJlIChxdW90ZSBjbGpzLnNwZWMuYWxwaGEpKSkgKGNhdGNoIFRocm93YWJsZSB0KSkpXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbcmVnaXN0cnktcmVmIHNwZWNlZC12YXJzXX0gKGdldC1zcGVjLXZhcnMpXVxyXG4gICh3aGVuLWxldFxyXG4gICBbcmVnaXN0cnkgKHNlcSAoOmNsanMuc3BlYy9yZWdpc3RyeS1yZWYgY2FjaGVkLW5zKSldXHJcbiAgICh3aGVuIHJlZ2lzdHJ5LXJlZiAoc3dhcCEgQHJlZ2lzdHJ5LXJlZiBpbnRvIHJlZ2lzdHJ5KSkpXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFt2YXJzIChzZXEgKDpjbGpzLnNwZWMvc3BlY2VkLXZhcnMgY2FjaGVkLW5zKSldXHJcbiAgICh3aGVuIHNwZWNlZC12YXJzIChzd2FwISBAc3BlY2VkLXZhcnMgaW50byB2YXJzKSkpKSlcclxuIn0gezpzeW0gZ2V0LWV4dGVybnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBnZXQtZXh0ZXJucyBbXSAoOmNsanMuYW5hbHl6ZXIvZXh0ZXJucyBAZW52Lypjb21waWxlciopKVxyXG4ifSB7OnN5bSAqcGFzc2VzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnBhc3NlcyogbmlsKVxyXG4ifSB7OnN5bSBoYXMtZXh0ZXJuPyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcHJlIGV4dGVybnNdIFtwcmUgZXh0ZXJucyB0b3BdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXMtZXh0ZXJuPypcclxuIChbcHJlIGV4dGVybnNdXHJcbiAgKGxldFxyXG4gICBbcHJlXHJcbiAgICAoaWYtc29tZVxyXG4gICAgIFttZSAoZmluZCAoZ2V0LWluIGV4dGVybnMgJ1tXaW5kb3cgcHJvdG90eXBlXSkgKGZpcnN0IHByZSkpXVxyXG4gICAgIChpZi1zb21lXHJcbiAgICAgIFt0YWcgKC0+IG1lIGZpcnN0IG1ldGEgOnRhZyldXHJcbiAgICAgIChpbnRvIFt0YWcgJ3Byb3RvdHlwZV0gKG5leHQgcHJlKSlcclxuICAgICAgcHJlKVxyXG4gICAgIHByZSldXHJcbiAgIChoYXMtZXh0ZXJuPyogcHJlIGV4dGVybnMgZXh0ZXJucykpKVxyXG4gKFtwcmUgZXh0ZXJucyB0b3BdXHJcbiAgKGNvbmRcclxuICAgKGVtcHR5PyBwcmUpXHJcbiAgIHRydWVcclxuICAgOmVsc2VcclxuICAgKGxldFxyXG4gICAgW3ggKGZpcnN0IHByZSkgbWUgKGZpbmQgZXh0ZXJucyB4KV1cclxuICAgIChjb25kXHJcbiAgICAgKG5vdCBtZSlcclxuICAgICBmYWxzZVxyXG4gICAgIDplbHNlXHJcbiAgICAgKGxldFxyXG4gICAgICBbW3gnIGV4dGVybnMnXSBtZSB4bWV0YSAobWV0YSB4JyldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCAoPSAnRnVuY3Rpb24gKDp0YWcgeG1ldGEpKSAoOmN0b3IgeG1ldGEpKVxyXG4gICAgICAgKG9yXHJcbiAgICAgICAgKGhhcy1leHRlcm4/KiAoaW50byAnW3Byb3RvdHlwZV0gKG5leHQgcHJlKSkgZXh0ZXJucycgdG9wKVxyXG4gICAgICAgIChoYXMtZXh0ZXJuPyogKG5leHQgcHJlKSBleHRlcm5zJyB0b3ApKVxyXG4gICAgICAgKHJlY3VyIChuZXh0IHByZSkgZXh0ZXJucycgdG9wKSkpKSkpKSlcclxuIn0gezpzeW0gaGFuZGxlLXN5bWJvbC1sb2NhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW0gbGJdKX0sIDpzb3VyY2UgIihkZWZuIGhhbmRsZS1zeW1ib2wtbG9jYWwgW3N5bSBsYl0gKGlmIChzeW1ib2w/IGxiKSB7Om5hbWUgc3ltfSBsYikpXHJcbiJ9IHs6c3ltIGdldC1leHBhbmRlci1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbnN0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1leHBhbmRlci1uc1xyXG4gW2VudiBuc3RyXVxyXG4gKGxldFxyXG4gIFtyZXNcclxuICAgKG9yXHJcbiAgICAocmVzb2x2ZS1tYWNyby1ucy1hbGlhcyBlbnYgbnN0ciBuaWwpXHJcbiAgICAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnN0ciBuaWwpKVxyXG4gICBuc3RyXHJcbiAgIChpZiAoc29tZT8gcmVzKSAoc3RyIHJlcykgbnN0cildXHJcbiAgKGNvbmRcclxuICAgIz9AKDpjbGogWyg9IFwiY2xvanVyZS5jb3JlXCIgbnN0cikgKGZpbmQtbnMgKHF1b3RlIGNsanMuY29yZSkpXSA6Y2xqcyBbKGlkZW50aWNhbD8gXCJjbG9qdXJlLmNvcmVcIiBuc3RyKSAoZmluZC1tYWNyb3MtbnMgQ0xKU19DT1JFX01BQ1JPU19TWU0pXSlcclxuICAgIz9AKDpjbGogWyg9IFwiY2xvanVyZS5yZXBsXCIgbnN0cikgKGZpbmQtbnMgKHF1b3RlIGNsanMucmVwbCkpXSA6Y2xqcyBbKGlkZW50aWNhbD8gXCJjbG9qdXJlLnJlcGxcIiBuc3RyKSAoZmluZC1tYWNyb3MtbnMgKHF1b3RlIGNsanMucmVwbCkpXSlcclxuICAgIz9AKDpjbGogWyguY29udGFpbnMgbnN0ciBcIi5cIikgKGZpbmQtbnMgKHN5bWJvbCBuc3RyKSldIDpjbGpzIFsoZ29vZy5zdHJpbmcvY29udGFpbnMgbnN0ciBcIi5cIikgKGZpbmQtbWFjcm9zLW5zIChzeW1ib2wgbnN0cikpXSlcclxuICAgOmVsc2VcclxuICAgKHNvbWUtPlxyXG4gICAgZW52XHJcbiAgICA6bnNcclxuICAgIDpyZXF1aXJlLW1hY3Jvc1xyXG4gICAgKGdldCAoc3ltYm9sIG5zdHIpKVxyXG4gICAgIz8oOmNsaiBmaW5kLW5zIDpjbGpzIGZpbmQtbWFjcm9zLW5zKSkpKSlcclxuIn0gezpzeW0gbWVzc2FnZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lc3NhZ2VcclxuIFtlbnYgc11cclxuIChzdHJcclxuICBzXHJcbiAgKGlmXHJcbiAgICg6bGluZSBlbnYpXHJcbiAgIChzdHIgXCIgYXQgbGluZSBcIiAoOmxpbmUgZW52KSBcIiBcIiAqY2xqcy1maWxlKilcclxuICAgKHdoZW4gKmNsanMtZmlsZSogKHN0ciBcIiBpbiBmaWxlIFwiICpjbGpzLWZpbGUqKSkpKSlcclxuIn0gezpzeW0gcGFyc2UtaW52b2tlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtaW52b2tlXHJcbiBbZW52IGZvcm1dXHJcbiAoZGlzYWxsb3dpbmctcmVjdXIgKHBhcnNlLWludm9rZSogZW52IGZvcm0pKSlcclxuIn0gezpzeW0gKmNsanMtd2FybmluZy1oYW5kbGVycyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLXdhcm5pbmctaGFuZGxlcnMqIFtkZWZhdWx0LXdhcm5pbmctaGFuZGxlcl0pXHJcbiJ9IHs6c3ltIGFuYWx5emUtc2VxKi13cmFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wIGVudiBmb3JtIG5hbWUgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc2VxKi13cmFwXHJcbiBbb3AgZW52IGZvcm0gbmFtZSBvcHRzXVxyXG4gKHdyYXBwaW5nLWVycm9ycyBlbnYgKGFuYWx5emUtc2VxKiBvcCBlbnYgZm9ybSBuYW1lIG9wdHMpKSlcclxuIn0gezpzeW0gY29uZmlybS1iaW5kaW5ncywgOm1ldGEgezpkb2MgIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQgZW52LCBhbmQgbmFtZXMsIGEgbGlzdCBvZiBzeW1ib2xzLCBjb25maXJtXG4gICB0aGF0IGFsbCBjb3JyZXNwb25kIHRvIGRlY2xhcmVkIGR5bmFtaWMgdmFycy4iLCA6YXJnbGlzdHMgKFtlbnYgbmFtZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25maXJtLWJpbmRpbmdzXHJcbiBcIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQgZW52LCBhbmQgbmFtZXMsIGEgbGlzdCBvZiBzeW1ib2xzLCBjb25maXJtXFxuICAgdGhhdCBhbGwgY29ycmVzcG9uZCB0byBkZWNsYXJlZCBkeW5hbWljIHZhcnMuXCJcclxuIFtlbnYgbmFtZXNdXHJcbiAoZG9zZXFcclxuICBbbmFtZSBuYW1lc11cclxuICAobGV0XHJcbiAgIFtlbnZcclxuICAgIChhc3NvYyBlbnYgOm5zIChnZXQtbmFtZXNwYWNlICpjbGpzLW5zKikpXHJcbiAgICBldlxyXG4gICAgKHJlc29sdmUtZXhpc3RpbmctdmFyIGVudiBuYW1lKV1cclxuICAgKHdoZW5cclxuICAgIChhbmQgZXYgKG5vdCAoLT4gZXYgOmR5bmFtaWMpKSlcclxuICAgICh3YXJuaW5nIDpkeW5hbWljIGVudiB7OmV2IGV2LCA6bmFtZSAoOm5hbWUgZXYpfSkpKSkpXHJcbiJ9IHs6c3ltIGhhcy1leHRlcm4/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3ByZV0gW3ByZSBleHRlcm5zXV19LCA6c291cmNlICIoZGVmblxyXG4gaGFzLWV4dGVybj9cclxuIChbcHJlXSAoaGFzLWV4dGVybj8gcHJlIChnZXQtZXh0ZXJucykpKVxyXG4gKFtwcmUgZXh0ZXJuc11cclxuICAob3JcclxuICAgKGhhcy1leHRlcm4/KiBwcmUgZXh0ZXJucylcclxuICAgKHdoZW5cclxuICAgICg9IDEgKGNvdW50IHByZSkpXHJcbiAgICAobGV0XHJcbiAgICAgW3ggKGZpcnN0IHByZSldXHJcbiAgICAgKG9yXHJcbiAgICAgIChnZXQtaW4gZXh0ZXJucyAoY29uaiAnW1dpbmRvdyBwcm90b3R5cGVdIHgpKVxyXG4gICAgICAoZ2V0LWluIGV4dGVybnMgKGNvbmogJ1tOdW1iZXJdIHgpKSkpKVxyXG4gICAoLT4gKGxhc3QgcHJlKSBzdHIgKHN0cmluZy9zdGFydHMtd2l0aD8gXCJjbGpzJFwiKSkpKSlcclxuIn0gezpzeW0gZm9yZWlnbi1kZXA/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2RlcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcmVpZ24tZGVwP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZGVwXVxyXG4gKGxldFxyXG4gIFtqcy1pbmRleCAoOmpzLWRlcGVuZGVuY3ktaW5kZXggQGVudi8qY29tcGlsZXIqKV1cclxuICAoaWYtc29tZVxyXG4gICBbW18gezprZXlzIFtmb3JlaWduXX1dIChmaW5kIGpzLWluZGV4IChuYW1lIGRlcCkpXVxyXG4gICBmb3JlaWduXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctcmVuYW1lLW1hY3JvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXJlbmFtZS1tYWNybz9cclxuIFtzeW1dXHJcbiAobGV0XHJcbiAgW2xpYlxyXG4gICAoc3ltYm9sIChuYW1lc3BhY2Ugc3ltKSlcclxuICAgc3ltXHJcbiAgIChzeW1ib2wgKG5hbWUgc3ltKSlcclxuICAgdGhlLW5zXHJcbiAgICM/KDpjbGogKGZpbmQtbnMgbGliKSA6Y2xqcyAoZmluZC1tYWNyb3MtbnMgbGliKSldXHJcbiAgKG9yIChuaWw/IHRoZS1ucykgKG5pbD8gKC5maW5kSW50ZXJuZWRWYXIgdGhlLW5zIHN5bSkpKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctdXNlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt1c2VzIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctdXNlc1xyXG4gW3VzZXMgZW52XVxyXG4gKGxldFxyXG4gIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAoaW50b1xyXG4gICB7fVxyXG4gICAoZmlsdGVyIChmbiBbW3N5bSBsaWJdXSAobWlzc2luZy11c2U/IGxpYiBzeW0gY2VudikpIHVzZXMpKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctdXNlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtsaWIgc3ltIGNlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXVzZT9cclxuIFtsaWIgc3ltIGNlbnZdXHJcbiAobGV0XHJcbiAgW2pzLWxpYiAoZ2V0LWluIGNlbnYgWzpqcy1kZXBlbmRlbmN5LWluZGV4IChuYW1lIGxpYildKV1cclxuICAoYW5kXHJcbiAgICg9XHJcbiAgICAoZ2V0LWluXHJcbiAgICAgY2VudlxyXG4gICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGxpYiA6ZGVmcyBzeW1dXHJcbiAgICAgOmNsanMuYW5hbHl6ZXIvbm90LWZvdW5kKVxyXG4gICAgOmNsanMuYW5hbHl6ZXIvbm90LWZvdW5kKVxyXG4gICAobm90ICg9IChnZXQganMtbGliIDpncm91cCkgOmdvb2cpKVxyXG4gICAobm90IChnZXQganMtbGliIDpjbG9zdXJlLWxpYikpXHJcbiAgIChub3QgKG5vZGUtbW9kdWxlLWRlcD8gbGliKSlcclxuICAgKG5vdCAoZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz8gbGliKSkpKSlcclxuIn0gezpzeW0gZXM1LWFsbG93ZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGVzNS1hbGxvd2VkICN7XCJkZWZhdWx0XCJ9KVxyXG4ifSB7OnN5bSBhbmFseXplLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYW4gZW52aXJvbm1lbnQsIGEgbWFwIGNvbnRhaW5pbmcgezpsb2NhbHMgKG1hcHBpbmcgb2YgbmFtZXMgdG8gYmluZGluZ3MpLCA6Y29udGV4dFxuICAob25lIG9mIDpzdGF0ZW1lbnQsIDpleHByLCA6cmV0dXJuKSwgOm5zIChhIHN5bWJvbCBuYW1pbmcgdGhlXG4gIGNvbXBpbGF0aW9uIG5zKX0sIGFuZCBmb3JtLCByZXR1cm5zIGFuIGV4cHJlc3Npb24gb2JqZWN0IChhIG1hcFxuICBjb250YWluaW5nIGF0IGxlYXN0IDpmb3JtLCA6b3AgYW5kIDplbnYga2V5cykuIElmIGV4cHIgaGFzIGFueSAoaW1tZWRpYXRlbHkpXG4gIG5lc3RlZCBleHBycywgbXVzdCBoYXZlIGEgOmNoaWxkcmVuIGVudHJ5LiBUaGlzIG11c3QgYmUgYSB2ZWN0b3Igb2Yga2V5d29yZHMgbmFtaW5nXG4gIHRoZSBpbW1lZGlhdGVseSBuZXN0ZWQgZmllbGRzIG1hcHBlZCB0byBhbiBleHByIG9yIHZlY3RvciBvZiBleHBycy4gVGhpcyB3aWxsXG4gIGZhY2lsaXRhdGUgY29kZSB3YWxraW5nIHdpdGhvdXQga25vd2luZyB0aGUgZGV0YWlscyBvZiB0aGUgb3Agc2V0LiIsIDphcmdsaXN0cyBbW2VudiBmb3JtXSBbZW52IGZvcm0gbmFtZV0gW2VudiBmb3JtIG5hbWUgb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emVcclxuIFwiR2l2ZW4gYW4gZW52aXJvbm1lbnQsIGEgbWFwIGNvbnRhaW5pbmcgezpsb2NhbHMgKG1hcHBpbmcgb2YgbmFtZXMgdG8gYmluZGluZ3MpLCA6Y29udGV4dFxcbiAgKG9uZSBvZiA6c3RhdGVtZW50LCA6ZXhwciwgOnJldHVybiksIDpucyAoYSBzeW1ib2wgbmFtaW5nIHRoZVxcbiAgY29tcGlsYXRpb24gbnMpfSwgYW5kIGZvcm0sIHJldHVybnMgYW4gZXhwcmVzc2lvbiBvYmplY3QgKGEgbWFwXFxuICBjb250YWluaW5nIGF0IGxlYXN0IDpmb3JtLCA6b3AgYW5kIDplbnYga2V5cykuIElmIGV4cHIgaGFzIGFueSAoaW1tZWRpYXRlbHkpXFxuICBuZXN0ZWQgZXhwcnMsIG11c3QgaGF2ZSBhIDpjaGlsZHJlbiBlbnRyeS4gVGhpcyBtdXN0IGJlIGEgdmVjdG9yIG9mIGtleXdvcmRzIG5hbWluZ1xcbiAgdGhlIGltbWVkaWF0ZWx5IG5lc3RlZCBmaWVsZHMgbWFwcGVkIHRvIGFuIGV4cHIgb3IgdmVjdG9yIG9mIGV4cHJzLiBUaGlzIHdpbGxcXG4gIGZhY2lsaXRhdGUgY29kZSB3YWxraW5nIHdpdGhvdXQga25vd2luZyB0aGUgZGV0YWlscyBvZiB0aGUgb3Agc2V0LlwiXHJcbiAoW2VudiBmb3JtXSAoYW5hbHl6ZSBlbnYgZm9ybSBuaWwpKVxyXG4gKFtlbnYgZm9ybSBuYW1lXVxyXG4gIChhbmFseXplXHJcbiAgIGVudlxyXG4gICBmb3JtXHJcbiAgIG5hbWVcclxuICAgKHdoZW4gZW52Lypjb21waWxlciogKDpvcHRpb25zIEBlbnYvKmNvbXBpbGVyKikpKSlcclxuIChbZW52IGZvcm0gbmFtZSBvcHRzXVxyXG4gICh3cmFwcGluZy1lcnJvcnNcclxuICAgZW52XHJcbiAgIChpZlxyXG4gICAgKGFuYWx5emVkPyBmb3JtKVxyXG4gICAgKG5vLXdhcm4gKGFuYWx5emUqIGVudiBmb3JtIG5hbWUgb3B0cykpXHJcbiAgICAoYW5hbHl6ZSogZW52IGZvcm0gbmFtZSBvcHRzKSkpKSlcclxuIn0gezpzeW0gdXNlZD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVzZWQ/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgc3ltXVxyXG4gKG9yXHJcbiAgKHNvbWU/IChnZXRzIGVudiA6bnMgOnVzZS1tYWNyb3Mgc3ltKSlcclxuICAoc29tZT9cclxuICAgKGdldHNcclxuICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgKGdldHMgZW52IDpucyA6bmFtZSlcclxuICAgIDp1c2UtbWFjcm9zXHJcbiAgICBzeW0pKSkpXHJcbiJ9IHs6c3ltIG5vZGUtbW9kdWxlLWRlcD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbW9kdWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm9kZS1tb2R1bGUtZGVwP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbbW9kdWxlXVxyXG4gIz8oOmNsaiAoY29udGFpbnM/IChnZXQtaW4gKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikgWzpub2RlLW1vZHVsZS1pbmRleF0pIChzdHIgbW9kdWxlKSkgOmNsanMgKHRyeSAoYW5kICg9ICp0YXJnZXQqIFwibm9kZWpzXCIpIChib29sZWFuIChqcy9yZXF1aXJlLnJlc29sdmUgKHN0ciBtb2R1bGUpKSkpIChjYXRjaCA6ZGVmYXVsdCBfIGZhbHNlKSkpKVxyXG4ifSB7OnN5bSBwYXJzZS10eXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wIGVudiBbXyB0c3ltIGZpZWxkcyBwbWFza3MgYm9keSA6YXMgZm9ybV1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS10eXBlXHJcbiBbb3AgZW52IFtfIHRzeW0gZmllbGRzIHBtYXNrcyBib2R5IDphcyBmb3JtXV1cclxuIChsZXRcclxuICBbdFxyXG4gICAoOm5hbWUgKHJlc29sdmUtdmFyIChkaXNzb2MgZW52IDpsb2NhbHMpIHRzeW0pKVxyXG4gICBsb2NhbHNcclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW20gZmxkXVxyXG4gICAgIChhc3NvY1xyXG4gICAgICBtXHJcbiAgICAgIGZsZFxyXG4gICAgICB7Om5hbWUgZmxkLFxyXG4gICAgICAgOmZpZWxkIHRydWUsXHJcbiAgICAgICA6Y29sdW1uIChnZXQtY29sIGZsZCBlbnYpLFxyXG4gICAgICAgOnVuc3luY2hyb25pemVkLW11dGFibGUgKC0+IGZsZCBtZXRhIDp1bnN5bmNocm9uaXplZC1tdXRhYmxlKSxcclxuICAgICAgIDpsaW5lIChnZXQtbGluZSBmbGQgZW52KSxcclxuICAgICAgIDp0YWcgKC0+IGZsZCBtZXRhIDp0YWcpLFxyXG4gICAgICAgOm11dGFibGUgKC0+IGZsZCBtZXRhIDptdXRhYmxlKSxcclxuICAgICAgIDp2b2xhdGlsZS1tdXRhYmxlICgtPiBmbGQgbWV0YSA6dm9sYXRpbGUtbXV0YWJsZSksXHJcbiAgICAgICA6c2hhZG93IChtIGZsZCksXHJcbiAgICAgICA6bG9jYWwgOmZpZWxkfSkpXHJcbiAgICB7fVxyXG4gICAgKGlmXHJcbiAgICAgKD0gOmRlZnJlY29yZCBvcClcclxuICAgICAoY29uY2F0IGZpZWxkcyAnW19fbWV0YSBfX2V4dG1hcCBfX2hhc2hdKVxyXG4gICAgIGZpZWxkcykpXHJcbiAgIHByb3RvY29sc1xyXG4gICAoLT4gdHN5bSBtZXRhIDpwcm90b2NvbHMpXVxyXG4gIChzd2FwIVxyXG4gICBlbnYvKmNvbXBpbGVyKlxyXG4gICB1cGRhdGUtaW5cclxuICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKC0+IGVudiA6bnMgOm5hbWUpIDpkZWZzIHRzeW1dXHJcbiAgIChmblxyXG4gICAgW21dXHJcbiAgICAobGV0XHJcbiAgICAgW21cclxuICAgICAgKGFzc29jXHJcbiAgICAgICAob3IgbSB7fSlcclxuICAgICAgIDpuYW1lXHJcbiAgICAgICB0XHJcbiAgICAgICA6dGFnXHJcbiAgICAgICAnZnVuY3Rpb25cclxuICAgICAgIDp0eXBlXHJcbiAgICAgICB0cnVlXHJcbiAgICAgICA6bnVtLWZpZWxkc1xyXG4gICAgICAgKGNvdW50IGZpZWxkcylcclxuICAgICAgIDpyZWNvcmRcclxuICAgICAgICg9IDpkZWZyZWNvcmQgb3ApKV1cclxuICAgICAobWVyZ2VcclxuICAgICAgbVxyXG4gICAgICAoZGlzc29jIChtZXRhIHRzeW0pIDpwcm90b2NvbHMpXHJcbiAgICAgIHs6cHJvdG9jb2xzIHByb3RvY29sc31cclxuICAgICAgKHNvdXJjZS1pbmZvIHRzeW0gZW52KSkpKSlcclxuICB7OmNoaWxkcmVuIFs6Ym9keV0sXHJcbiAgIDpwbWFza3MgcG1hc2tzLFxyXG4gICA6cHJvdG9jb2xzIChkaXNqIHByb3RvY29scyAnY2xqcy5jb3JlL09iamVjdCksXHJcbiAgIDpmaWVsZHMgZmllbGRzLFxyXG4gICA6b3Agb3AsXHJcbiAgIDplbnYgZW52LFxyXG4gICA6dCB0LFxyXG4gICA6Zm9ybSBmb3JtLFxyXG4gICA6dGFnICdmdW5jdGlvbixcclxuICAgOmJvZHkgKGFuYWx5emUgKGFzc29jIGVudiA6bG9jYWxzIGxvY2FscykgYm9keSl9KSlcclxuIn0gezpzeW0gZ2V0cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1ttIGswIGsxXSBbbSBrMCBrMSBrMl0gW20gazAgazEgazIgazNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXRzXHJcbiAoW20gazAgazFdXHJcbiAgKGxldFxyXG4gICBbbSAoZ2V0IG0gazAgU0VOVElORUwpXVxyXG4gICAod2hlbi1ub3QgKGlkZW50aWNhbD8gbSBTRU5USU5FTCkgKGdldCBtIGsxKSkpKVxyXG4gKFttIGswIGsxIGsyXVxyXG4gIChsZXRcclxuICAgW20gKGdldCBtIGswIFNFTlRJTkVMKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKVxyXG4gICAgKGxldFxyXG4gICAgIFttIChnZXQgbSBrMSBTRU5USU5FTCldXHJcbiAgICAgKHdoZW4tbm90IChpZGVudGljYWw/IG0gU0VOVElORUwpIChnZXQgbSBrMikpKSkpKVxyXG4gKFttIGswIGsxIGsyIGszXVxyXG4gIChsZXRcclxuICAgW20gKGdldCBtIGswIFNFTlRJTkVMKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKVxyXG4gICAgKGxldFxyXG4gICAgIFttIChnZXQgbSBrMSBTRU5USU5FTCldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIChpZGVudGljYWw/IG0gU0VOVElORUwpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFttIChnZXQgbSBrMiBTRU5USU5FTCldXHJcbiAgICAgICAod2hlbi1ub3QgKGlkZW50aWNhbD8gbSBTRU5USU5FTCkgKGdldCBtIGszKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGNoZWNrLXJlbmFtZS1tYWNyb3MtaW5mZXJyaW5nLW1pc3NpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtuYW1lIHJlbmFtZXNdLCA6YXMgYXN0fSBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay1yZW5hbWUtbWFjcm9zLWluZmVycmluZy1taXNzaW5nXHJcbiBbezprZXlzIFtuYW1lIHJlbmFtZXNdLCA6YXMgYXN0fSBlbnZdXHJcbiAobGV0XHJcbiAgW21pc3NpbmctcmVuYW1lc1xyXG4gICAod2hlblxyXG4gICAgKGFuZCAqYW5hbHl6ZS1kZXBzKiAoc2VxIHJlbmFtZXMpKVxyXG4gICAgKG1pc3NpbmctcmVuYW1lcyByZW5hbWVzIGVudikpXHJcbiAgIG1heWJlLW1hY3Jvc1xyXG4gICAoYXBwbHkgZGlzc29jIHJlbmFtZXMgKGtleXMgbWlzc2luZy1yZW5hbWVzKSlcclxuICAgbWlzc2luZy1yZW5hbWUtbWFjcm9zXHJcbiAgIChpbmZlcnJlZC1yZW5hbWUtbWFjcm9zIG1pc3NpbmctcmVuYW1lcyBlbnYpXHJcbiAgIHJlbW92ZS1taXNzaW5nLXJlbmFtZXNcclxuICAgKGZuKiBbcDFfXzQ4NjE1I10gKGFwcGx5IGRpc3NvYyBwMV9fNDg2MTUjIChrZXlzIG1pc3NpbmctcmVuYW1lcykpKVxyXG4gICBhc3QnXHJcbiAgICgtPlxyXG4gICAgYXN0XHJcbiAgICAodXBkYXRlLWluXHJcbiAgICAgWzpyZW5hbWUtbWFjcm9zXVxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180ODYxNiNdXHJcbiAgICAgICgtPlxyXG4gICAgICAgcDFfXzQ4NjE2I1xyXG4gICAgICAgKG1lcmdlIG1pc3NpbmctcmVuYW1lLW1hY3JvcylcclxuICAgICAgIChtZXJnZSAoaW5mZXJyZWQtcmVuYW1lLW1hY3JvcyBtYXliZS1tYWNyb3MgZW52KSkpKSlcclxuICAgICh1cGRhdGUtaW4gWzpyZW5hbWVzXSByZW1vdmUtbWlzc2luZy1yZW5hbWVzKSldXHJcbiAgKHN3YXAhXHJcbiAgIGVudi8qY29tcGlsZXIqXHJcbiAgIChmbipcclxuICAgIFtwMV9fNDg2MTcjXVxyXG4gICAgKC0+XHJcbiAgICAgcDFfXzQ4NjE3I1xyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbmFtZSA6cmVuYW1lLW1hY3Jvc11cclxuICAgICAgbWVyZ2VcclxuICAgICAgKDpyZW5hbWUtbWFjcm9zIGFzdCcpKVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbmFtZSA6cmVuYW1lc11cclxuICAgICAgcmVtb3ZlLW1pc3NpbmctcmVuYW1lcykpKSlcclxuICBhc3QnKSlcclxuIn0gezpzeW0gKmFsbG93LW5zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmFsbG93LW5zKiB0cnVlKVxyXG4ifSB7OnN5bSBhbmFseXplLWNvbnN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1jb25zdFxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3RhZ119IChhbmFseXplIChhc3NvYyBlbnYgOnF1b3RlZD8gdHJ1ZSkgZm9ybSldXHJcbiAgezpvcCA6Y29uc3QsXHJcbiAgIDplbnYgZW52LFxyXG4gICA6bGl0ZXJhbD8gdHJ1ZSxcclxuICAgOnZhbCBmb3JtLFxyXG4gICA6dGFnIHRhZyxcclxuICAgOmZvcm0gZm9ybX0pKVxyXG4ifSB7OnN5bSBpbmZlci1pbnZva2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHtmIDpmbiwgOmtleXMgW2FyZ3NdLCA6YXMgZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlci1pbnZva2VcclxuIFtlbnYge2YgOmZuLCA6a2V5cyBbYXJnc10sIDphcyBlfV1cclxuIChsZXRcclxuICBbbWUgKGFzc29jIChmaW5kLW1hdGNoaW5nLW1ldGhvZCBmIGFyZ3MpIDpvcCA6Zm4tbWV0aG9kKV1cclxuICAoaWYtc29tZVxyXG4gICBbcmV0LXRhZyAoaW5mZXItdGFnIGVudiBtZSldXHJcbiAgIHJldC10YWdcclxuICAgKGxldFxyXG4gICAgW3s6a2V5cyBbaW5mb119IGZdXHJcbiAgICAoaWYtc29tZVxyXG4gICAgIFtyZXQtdGFnXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG9yICh0cnVlPyAoOmZuLXZhciBpbmZvKSkgKHRydWU/ICg6anMtZm4tdmFyIGluZm8pKSlcclxuICAgICAgICg6cmV0LXRhZyBpbmZvKVxyXG4gICAgICAgKHdoZW4gKD0gJ2pzICg6bnMgaW5mbykpICdqcykpXVxyXG4gICAgIHJldC10YWdcclxuICAgICBBTllfU1lNKSkpKSlcclxuIn0gezpzeW0gKmNsanMtc3RhdGljLWZucyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLXN0YXRpYy1mbnMqIGZhbHNlKVxyXG4ifSB7OnN5bSBhcnJheS10eXBlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGFycmF5LXR5cGVzXHJcbiAnI3tib29sZWFuIGZsb2F0cyBsb25ncyBvYmplY3RzIGFycmF5IGRvdWJsZXMgY2hhcnMgaW50cyBzaG9ydHNcclxuICAgIGJ5dGVzfSlcclxuIn0gezpzeW0gKmNoZWNrLWFsaWFzLWR1cGVzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNoZWNrLWFsaWFzLWR1cGVzKiB0cnVlKVxyXG4ifSB7OnN5bSBtYWNyby1ucy1uYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWNyby1ucy1uYW1lXHJcbiBbbmFtZV1cclxuIChsZXRcclxuICBbbmFtZS1zdHIgKHN0ciBuYW1lKV1cclxuICAoaWYtbm90XHJcbiAgICM/KDpjbGogKC5lbmRzV2l0aCBuYW1lLXN0ciBcIiRtYWNyb3NcIikgOmNsanMgKGdzdHJpbmcvZW5kc1dpdGggbmFtZS1zdHIgXCIkbWFjcm9zXCIpKVxyXG4gICAoc3ltYm9sIChzdHIgbmFtZS1zdHIgXCIkbWFjcm9zXCIpKVxyXG4gICBuYW1lKSkpXHJcbiJ9IHs6c3ltICpyZWxvYWQtbWFjcm9zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnJlbG9hZC1tYWNyb3MqIGZhbHNlKVxyXG4ifSB7OnN5bSBjb21waWxlci1vcHRpb25zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gY29tcGlsZXItb3B0aW9ucyBbXSAoZ2V0IEBlbnYvKmNvbXBpbGVyKiA6b3B0aW9ucykpXHJcbiJ9IHs6c3ltIHJlc29sdmUtZXhpc3RpbmctdmFyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIHN5bSwgYSBzeW1ib2wsIHJlc29sdmUgYW4gZXhpc3RpbmcgdmFyLlxuICAgRW1pdHMgYSB3YXJuaW5nIGlmIG5vIHN1Y2ggdmFyIGV4aXN0cy4iLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1leGlzdGluZy12YXJcclxuIFwiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIHN5bSwgYSBzeW1ib2wsIHJlc29sdmUgYW4gZXhpc3RpbmcgdmFyLlxcbiAgIEVtaXRzIGEgd2FybmluZyBpZiBubyBzdWNoIHZhciBleGlzdHMuXCJcclxuIFtlbnYgc3ltXVxyXG4gKGlmLW5vdFxyXG4gICgtPiBzeW0gbWV0YSA6Y2xqcy5hbmFseXplci9uby1yZXNvbHZlKVxyXG4gIChyZXNvbHZlLXZhciBlbnYgc3ltIGNvbmZpcm0tdmFyLWV4aXN0cylcclxuICAocmVzb2x2ZS12YXIgZW52IHN5bSkpKVxyXG4ifSB7OnN5bSByZXF1aXJlZD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVxdWlyZWQ/XHJcbiBbbnMgZW52XVxyXG4gKG9yXHJcbiAgKGNvbnRhaW5zPyAoc2V0ICh2YWxzIChnZXRzIGVudiA6bnMgOnJlcXVpcmVzKSkpIG5zKVxyXG4gIChjb250YWlucz8gKHNldCAodmFscyAoZ2V0cyBlbnYgOm5zIDp1c2VzKSkpIG5zKSkpXHJcbiJ9IHs6c3ltIG5vZGUtbGlrZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbXSBbb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vZGUtbGlrZT9cclxuIChbXSAobm9kZS1saWtlPyAoY29tcGlsZXItb3B0aW9ucykpKVxyXG4gKFtvcHRzXSAoYW5kICg9IDpub2RlanMgKDp0YXJnZXQgb3B0cykpIChmYWxzZT8gKDpub2RlanMtcnQgb3B0cykpKSkpXHJcbiJ9IHs6c3ltIE5PVF9OQVRJVkUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE5PVF9OQVRJVkUgJyN7Y2xqIG5vdC1uYXRpdmV9KVxyXG4ifSB7OnN5bSBJR05PUkVfU1lNLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBJR05PUkVfU1lNICdpZ25vcmUpXHJcbiJ9IHs6c3ltIHBhcnNlLWludm9rZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IFtmICYgYXJncyA6YXMgZm9ybV1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1pbnZva2UqXHJcbiBbZW52IFtmICYgYXJncyA6YXMgZm9ybV1dXHJcbiAobGV0XHJcbiAgW2VudmVcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgZmV4cHJcclxuICAgKGFuYWx5emUgZW52ZSBmKVxyXG4gICBhcmdjXHJcbiAgIChjb3VudCBhcmdzKVxyXG4gICBmbi12YXI/XHJcbiAgIChvciAoLT4gZmV4cHIgOmluZm8gOmZuLXZhcikgKC0+IGZleHByIDppbmZvIDpqcy1mbi12YXIpKVxyXG4gICBrdz9cclxuICAgKD0gJ2NsanMuY29yZS9LZXl3b3JkICg6dGFnIGZleHByKSlcclxuICAgY3VyLW5zXHJcbiAgICgtPiBlbnYgOm5zIDpuYW1lKVxyXG4gICBITy1pbnZva2U/XHJcbiAgIChhbmRcclxuICAgIChib29sZWFuICpjbGpzLXN0YXRpYy1mbnMqKVxyXG4gICAgKG5vdCBmbi12YXI/KVxyXG4gICAgKG5vdCAoanMtdGFnPyBmKSlcclxuICAgIChub3Qga3c/KVxyXG4gICAgKG5vdCAoYW5hbHl6ZWQ/IGYpKSlcclxuICAgYmluZC1mLWV4cHI/XHJcbiAgIChhbmQgSE8taW52b2tlPyAobm90IChzeW1ib2w/IGYpKSlcclxuICAgYmluZC1hcmdzP1xyXG4gICAoYW5kIEhPLWludm9rZT8gKG5vdCAoYWxsLXZhbHVlcz8gYXJncykpKV1cclxuICAod2hlblxyXG4gICBmbi12YXI/XHJcbiAgIChsZXRcclxuICAgIFt7dmFyaWFkaWMgOnZhcmlhZGljPyxcclxuICAgICAgOmtleXMgW21heC1maXhlZC1hcml0eSBtZXRob2QtcGFyYW1zIG5hbWUgbnMgbWFjcm9dfVxyXG4gICAgICg6aW5mbyBmZXhwcildXHJcbiAgICAod2hlblxyXG4gICAgIChhbmRcclxuICAgICAgIz8oOmNsanMgKG5vdCAoYW5kIChnc3RyaW5nL2VuZHNXaXRoIChzdHIgY3VyLW5zKSBcIiRtYWNyb3NcIikgKHN5bWJvbC1pZGVudGljYWw/IGN1ci1ucyBucykgKHRydWU/IG1hY3JvKSkpKVxyXG4gICAgICAoaW52YWxpZC1hcml0eT8gYXJnYyBtZXRob2QtcGFyYW1zIHZhcmlhZGljIG1heC1maXhlZC1hcml0eSkpXHJcbiAgICAgKHdhcm5pbmcgOmZuLWFyaXR5IGVudiB7Om5hbWUgbmFtZSwgOmFyZ2MgYXJnY30pKSkpXHJcbiAgKHdoZW5cclxuICAgKGFuZCBrdz8gKG5vdCAob3IgKD09IDEgYXJnYykgKD09IDIgYXJnYykpKSlcclxuICAgKHdhcm5pbmcgOmZuLWFyaXR5IGVudiB7Om5hbWUgKGZpcnN0IGZvcm0pLCA6YXJnYyBhcmdjfSkpXHJcbiAgKGxldFxyXG4gICBbZGVwcmVjYXRlZD9cclxuICAgICgtPiBmZXhwciA6aW5mbyA6ZGVwcmVjYXRlZClcclxuICAgIG5vLXdhcm4/XHJcbiAgICAoLT4gZm9ybSBtZXRhIDpkZXByZWNhdGlvbi1ub3dhcm4pXVxyXG4gICAod2hlblxyXG4gICAgKGFuZCAoYm9vbGVhbiBkZXByZWNhdGVkPykgKG5vdCAoYm9vbGVhbiBuby13YXJuPykpKVxyXG4gICAgKHdhcm5pbmcgOmZuLWRlcHJlY2F0ZWQgZW52IHs6ZmV4cHIgZmV4cHJ9KSkpXHJcbiAgKHdoZW5cclxuICAgKHNvbWU/ICgtPiBmZXhwciA6aW5mbyA6dHlwZSkpXHJcbiAgICh3YXJuaW5nIDppbnZva2UtY3RvciBlbnYgezpmZXhwciBmZXhwcn0pKVxyXG4gIChpZlxyXG4gICAob3IgYmluZC1hcmdzPyBiaW5kLWYtZXhwcj8pXHJcbiAgIChsZXRcclxuICAgIFthcmctc3ltc1xyXG4gICAgICh3aGVuIGJpbmQtYXJncz8gKHRha2UgYXJnYyAocmVwZWF0ZWRseSBnZW5zeW0pKSlcclxuICAgICBmLXN5bVxyXG4gICAgICh3aGVuIGJpbmQtZi1leHByPyAoZ2Vuc3ltIFwiZmV4cHJfX1wiKSlcclxuICAgICBiaW5kaW5nc1xyXG4gICAgIChjb25kLT5cclxuICAgICAgW11cclxuICAgICAgYmluZC1hcmdzP1xyXG4gICAgICAoaW50byAoaW50ZXJsZWF2ZSBhcmctc3ltcyBhcmdzKSlcclxuICAgICAgYmluZC1mLWV4cHI/XHJcbiAgICAgIChjb25qIGYtc3ltIChhbmFseXplZCBmKSkpXHJcbiAgICAgdGFnXHJcbiAgICAgKDp0YWcgKG1ldGEgZm9ybSkpXVxyXG4gICAgKGFuYWx5emVcclxuICAgICBlbnZcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL2xldClcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS92ZWNcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcSAoY2xvanVyZS5jb3JlL2NvbmNhdCBiaW5kaW5ncykpKSkpXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICh3aXRoLW1ldGFcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChhbmFseXplZCAoaWYgYmluZC1mLWV4cHI/IGYtc3ltIGYpKSlcclxuICAgICAgICAgICAgIChpZiBiaW5kLWFyZ3M/IGFyZy1zeW1zIGFyZ3MpKSkpXHJcbiAgICAgICAgICB7OnRhZyB0YWd9KSkpKSkpKVxyXG4gICAobGV0XHJcbiAgICBbYW5hLWV4cHJcclxuICAgICAoZm4qIFtwMV9fNDg2MzMjXSAoYW5hbHl6ZSBlbnZlIHAxX180ODYzMyMpKVxyXG4gICAgIGFyZ2V4cHJzXHJcbiAgICAgKG1hcHYgYW5hLWV4cHIgYXJncyldXHJcbiAgICAoaWZcclxuICAgICAoYW5kXHJcbiAgICAgIChhbmQgKGtleXdvcmQ/IGYpIChuaWw/IChuYW1lc3BhY2UgZikpKVxyXG4gICAgICAoPT0gMSAoY291bnQgYXJncykpXHJcbiAgICAgIChyZWNvcmQtd2l0aC1maWVsZD8gKDp0YWcgKGZpcnN0IGFyZ2V4cHJzKSkgKHN5bWJvbCAobmFtZSBmKSkpKVxyXG4gICAgIChsZXRcclxuICAgICAgW2ZpZWxkLWFjY2Vzcy1mb3JtIChsaXN0KiAoc3ltYm9sIChzdHIgXCIuLVwiIChuYW1lIGYpKSkgYXJncyldXHJcbiAgICAgIChuby13YXJuIChhbmFseXplIGVudiBmaWVsZC1hY2Nlc3MtZm9ybSkpKVxyXG4gICAgIHs6ZW52IGVudixcclxuICAgICAgOm9wIDppbnZva2UsXHJcbiAgICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgIDpmbiBmZXhwcixcclxuICAgICAgOmFyZ3MgYXJnZXhwcnMsXHJcbiAgICAgIDpjaGlsZHJlbiBbOmZuIDphcmdzXX0pKSkpKVxyXG4ifSB7OnN5bSAqY2hlY2tlZC1hcnJheXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2hlY2tlZC1hcnJheXMqIGZhbHNlKVxyXG4ifSB7OnN5bSBhc3QtY2hpbGRyZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXN0LWNoaWxkcmVuXHJcbiBbYXN0XVxyXG4gKG1hcGNhdFxyXG4gIChmbiBbY10gKGxldCBbZyAoZ2V0IGFzdCBjKV0gKGNvbmQgKHZlY3Rvcj8gZykgZyBnIFtnXSkpKVxyXG4gICg6Y2hpbGRyZW4gYXN0KSkpXHJcbiJ9IHs6c3ltIGxvYWRlZC1qcy1ucz8sIDptZXRhIHs6ZG9jICJDaGVjayBpZiBhIEphdmFTY3JpcHQgbmFtZXNwYWNlIGhhcyBiZWVuIGxvYWRlZC4gSmF2YVNjcmlwdCB2YXJzIGFyZVxuICBub3QgY3VycmVudGx5IGNoZWNrZWQuIiwgOmFyZ2xpc3RzIChbZW52IHByZWZpeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvYWRlZC1qcy1ucz9cclxuIFwiQ2hlY2sgaWYgYSBKYXZhU2NyaXB0IG5hbWVzcGFjZSBoYXMgYmVlbiBsb2FkZWQuIEphdmFTY3JpcHQgdmFycyBhcmVcXG4gIG5vdCBjdXJyZW50bHkgY2hlY2tlZC5cIlxyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHByZWZpeF1cclxuICh3aGVuLW5vdFxyXG4gIChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIHByZWZpeClcclxuICAobGV0XHJcbiAgIFtucyAoOm5zIGVudildXHJcbiAgIChvclxyXG4gICAgKHNvbWU/IChnZXQgKDpyZXF1aXJlcyBucykgcHJlZml4KSlcclxuICAgIChzb21lPyAoZ2V0ICg6aW1wb3J0cyBucykgcHJlZml4KSkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtdmVjdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS12ZWN0b3JcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbZXhwci1lbnZcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgaXRlbXNcclxuICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAobWFwdiAoZm4qIFtwMV9fNDg2MzgjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2MzgjKSkgZm9ybSkpXVxyXG4gIChhbmFseXplLXdyYXAtbWV0YVxyXG4gICB7Om9wIDp2ZWN0b3IsXHJcbiAgICA6ZW52IGVudixcclxuICAgIDpmb3JtIGZvcm0sXHJcbiAgICA6aXRlbXMgaXRlbXMsXHJcbiAgICA6Y2hpbGRyZW4gWzppdGVtc10sXHJcbiAgICA6dGFnICdjbGpzLmNvcmUvSVZlY3Rvcn0pKSlcclxuIn0gezpzeW0gdW53cmFwLXF1b3RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbb3BdLCA6YXMgZXhwcn1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bndyYXAtcXVvdGVcclxuIFt7OmtleXMgW29wXSwgOmFzIGV4cHJ9XVxyXG4gKGlmXHJcbiAgIz8oOmNsaiAoPSBvcCA6cXVvdGUpIDpjbGpzIChrZXl3b3JkLWlkZW50aWNhbD8gb3AgOnF1b3RlKSlcclxuICAoOmV4cHIgZXhwcilcclxuICBleHByKSlcclxuIn0gezpzeW0gbmFtZXNwYWNlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIG5hbWVzcGFjZXNcclxuICM/KDpjbGogKHJlaWZ5IGNsb2p1cmUubGFuZy5JRGVyZWYgKGRlcmVmIFtfXSAoaWYgKHNvbWU/IGVudi8qY29tcGlsZXIqKSAoOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSkgZGVmYXVsdC1uYW1lc3BhY2VzKSkpIDpjbGpzIChyZWlmeSBJRGVyZWYgKC1kZXJlZiBbX10gKGlmIChzb21lPyBlbnYvKmNvbXBpbGVyKikgKDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKGNsb2p1cmUuY29yZS9kZXJlZiBlbnYvKmNvbXBpbGVyKikpIGRlZmF1bHQtbmFtZXNwYWNlcykpKSkpXHJcbiJ9IHs6c3ltIGVsaWRlLWFuYWx5emVyLW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm4gZWxpZGUtYW5hbHl6ZXItbWV0YSBbbV0gKGRpc3NvYyBtIDpjbGpzLmFuYWx5emVyL2FuYWx5emVkKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQtYm9keSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgY29udGV4dCBleHBycyByZWN1ci1mcmFtZXMgbG9vcC1sZXRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXQtYm9keVxyXG4gW2VudiBjb250ZXh0IGV4cHJzIHJlY3VyLWZyYW1lcyBsb29wLWxldHNdXHJcbiAoYmluZGluZ1xyXG4gIFsqcmVjdXItZnJhbWVzKiByZWN1ci1mcmFtZXMgKmxvb3AtbGV0cyogbG9vcC1sZXRzXVxyXG4gIChhbmFseXplLWxldC1ib2R5KiBlbnYgY29udGV4dCBleHBycykpKVxyXG4ifSB7OnN5bSBleHRlcm4tcHJlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bSBjdXJyZW50LW5zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXh0ZXJuLXByZVxyXG4gW3N5bSBjdXJyZW50LW5zXVxyXG4gKGxldFxyXG4gIFtwcmVcclxuICAgKGludG9cclxuICAgICdbT2JqZWN0XVxyXG4gICAgKC0+PiAoc3RyaW5nL3NwbGl0IChuYW1lIHN5bSkgI1wiXFwuXCIpIChtYXAgc3ltYm9sKSB2ZWMpKV1cclxuICAod2hlbi1ub3RcclxuICAgKGhhcy1leHRlcm4/IHByZSlcclxuICAgKHN3YXAhXHJcbiAgICBlbnYvKmNvbXBpbGVyKlxyXG4gICAgdXBkYXRlLWluXHJcbiAgICAoaW50byBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBjdXJyZW50LW5zIDpleHRlcm5zXSBwcmUpXHJcbiAgICBtZXJnZVxyXG4gICAge30pKVxyXG4gIHByZSkpXHJcbiJ9IHs6c3ltIGdldC1jb2wsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCBlbnZdKX0sIDpzb3VyY2UgIihkZWZuIGdldC1jb2wgW3ggZW52XSAob3IgKC0+IHggbWV0YSA6Y29sdW1uKSAoOmNvbHVtbiBlbnYpKSlcclxuIn0gezpzeW0gYmFzaWMtdmFsaWRhdGUtbnMtc3BlYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbWFjcm9zPyBzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gYmFzaWMtdmFsaWRhdGUtbnMtc3BlY1xyXG4gW2VudiBtYWNyb3M/IHNwZWNdXHJcbiAod2hlbi1ub3RcclxuICAob3IgKHN5bWJvbD8gc3BlYykgKHN0cmluZz8gc3BlYykgKHNlcXVlbnRpYWw/IHNwZWMpKVxyXG4gICh0aHJvd1xyXG4gICAoZXJyb3JcclxuICAgIGVudlxyXG4gICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgIHNwZWNcclxuICAgICBcIk9ubHkgW2xpYi5ucyAmIG9wdGlvbnNdIGFuZCBsaWIubnMgc3BlY3Mgc3VwcG9ydGVkIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpXHJcbiAod2hlblxyXG4gIChzZXF1ZW50aWFsPyBzcGVjKVxyXG4gICh3aGVuLW5vdFxyXG4gICAob3IgKHN5bWJvbD8gKGZpcnN0IHNwZWMpKSAoc3RyaW5nPyAoZmlyc3Qgc3BlYykpKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvclxyXG4gICAgIGVudlxyXG4gICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgc3BlY1xyXG4gICAgICBcIkxpYnJhcnkgbmFtZSBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIHN5bWJvbCBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKVxyXG4gICh3aGVuLW5vdFxyXG4gICAob2RkPyAoY291bnQgc3BlYykpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yXHJcbiAgICAgZW52XHJcbiAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICBzcGVjXHJcbiAgICAgIFwiT25seSA6YXMgYWxpYXMsIDpyZWZlciAobmFtZXMpIGFuZCA6cmVuYW1lIHtmcm9tIHRvfSBvcHRpb25zIHN1cHBvcnRlZCBpbiA6cmVxdWlyZVwiKSkpKVxyXG4gICh3aGVuLW5vdFxyXG4gICAoZXZlcnk/ICN7OmFzIDpyZW5hbWUgOnJlZmVyfSAobWFwIGZpcnN0IChwYXJ0aXRpb24gMiAobmV4dCBzcGVjKSkpKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvclxyXG4gICAgIGVudlxyXG4gICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgc3BlY1xyXG4gICAgICBcIk9ubHkgOmFzLCA6cmVmZXIgYW5kIDpyZW5hbWUgb3B0aW9ucyBzdXBwb3J0ZWQgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSlcclxuICAod2hlbi1ub3RcclxuICAgKGxldFxyXG4gICAgW2ZzIChmcmVxdWVuY2llcyAobmV4dCBzcGVjKSldXHJcbiAgICAoYW5kICg8PSAoZnMgOmFzIDApIDEpICg8PSAoZnMgOnJlZmVyIDApIDEpKSlcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3JcclxuICAgICBlbnZcclxuICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgIHNwZWNcclxuICAgICAgXCJFYWNoIG9mIDphcyBhbmQgOnJlZmVyIG9wdGlvbnMgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSkpKVxyXG4ifSB7OnN5bSAqY2xqcy13YXJuaW5ncyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqY2xqcy13YXJuaW5ncypcclxuIHs6aW52b2tlLWN0b3IgdHJ1ZSxcclxuICA6ZXh0ZW5kaW5nLWJhc2UtanMtdHlwZSB0cnVlLFxyXG4gIDp1bnN1cHBvcnRlZC1wcmVwcm9jZXNzLXZhbHVlIHRydWUsXHJcbiAgOnJlZGVmIHRydWUsXHJcbiAgOmpzLXNoYWRvd2VkLWJ5LWxvY2FsIHRydWUsXHJcbiAgOnVuc3VwcG9ydGVkLWpzLW1vZHVsZS10eXBlIHRydWUsXHJcbiAgOmludmFsaWQtcHJvdG9jb2wtc3ltYm9sIHRydWUsXHJcbiAgOnByaXZhdGUtdmFyLWFjY2VzcyB0cnVlLFxyXG4gIDpwcm90b2NvbC1kdXBlZC1tZXRob2QgdHJ1ZSxcclxuICA6bXVuZ2VkLW5hbWVzcGFjZSB0cnVlLFxyXG4gIDpzaW5nbGUtc2VnbWVudC1uYW1lc3BhY2UgdHJ1ZSxcclxuICA6Zm4tYXJpdHkgdHJ1ZSxcclxuICA6aW5mZXItd2FybmluZyBmYWxzZSxcclxuICA6dmFyaWFkaWMtbWF4LWFyaXR5IHRydWUsXHJcbiAgOnByb3RvY29sLXdpdGgtdmFyaWFkaWMtbWV0aG9kIHRydWUsXHJcbiAgOmZuLWRlcHJlY2F0ZWQgdHJ1ZSxcclxuICA6dW5kZWNsYXJlZC12YXIgdHJ1ZSxcclxuICA6ZGVjbGFyZWQtYXJnbGlzdHMtbWlzbWF0Y2ggdHJ1ZSxcclxuICA6cHJlYW1ibGUtbWlzc2luZyB0cnVlLFxyXG4gIDp1bmRlY2xhcmVkLXByb3RvY29sLXN5bWJvbCB0cnVlLFxyXG4gIDpwcm90b2NvbC13aXRoLW92ZXJ3cml0aW5nLW1ldGhvZCB0cnVlLFxyXG4gIDpkeW5hbWljIHRydWUsXHJcbiAgOmludmFsaWQtYXJyYXktYWNjZXNzIHRydWUsXHJcbiAgOnVucHJvdmlkZWQgdHJ1ZSxcclxuICA6bnMtdmFyLWNsYXNoIHRydWUsXHJcbiAgOnVuZGVjbGFyZWQtbnMgdHJ1ZSxcclxuICA6bm9uLWR5bmFtaWMtZWFybXVmZmVkLXZhciB0cnVlLFxyXG4gIDp1bmRlY2xhcmVkLW5zLWZvcm0gdHJ1ZSxcclxuICA6aW52YWxpZC1hcml0aG1ldGljIHRydWUsXHJcbiAgOnByb3RvY29sLWRlcHJlY2F0ZWQgdHJ1ZSxcclxuICA6Zm4tdmFyIHRydWUsXHJcbiAgOnByb3RvY29sLWltcGwtcmVjdXItd2l0aC10YXJnZXQgdHJ1ZSxcclxuICA6b3ZlcmxvYWQtYXJpdHkgdHJ1ZSxcclxuICA6cHJvdG9jb2wtbXVsdGlwbGUtaW1wbHMgdHJ1ZSxcclxuICA6cmVkZWYtaW4tZmlsZSB0cnVlLFxyXG4gIDpwcm90b2NvbC1pbnZhbGlkLW1ldGhvZCB0cnVlLFxyXG4gIDpleHRlbmQtdHlwZS1pbnZhbGlkLW1ldGhvZC1zaGFwZSB0cnVlLFxyXG4gIDptdWx0aXBsZS12YXJpYWRpYy1vdmVybG9hZHMgdHJ1ZSxcclxuICA6cHJvdG9jb2wtaW1wbC13aXRoLXZhcmlhZGljLW1ldGhvZCB0cnVlfSlcclxuIn0gezpzeW0gYWxpYXMtPnR5cGUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBhbGlhcy0+dHlwZVxyXG4gJ3tvYmplY3QgT2JqZWN0LFxyXG4gICBzdHJpbmcgU3RyaW5nLFxyXG4gICBudW1iZXIgTnVtYmVyLFxyXG4gICBhcnJheSBBcnJheSxcclxuICAgZnVuY3Rpb24gRnVuY3Rpb24sXHJcbiAgIGJvb2xlYW4gQm9vbGVhbixcclxuICAgc3ltYm9sIFN5bWJvbH0pXHJcbiJ9IHs6c3ltIGFuYWx5emVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgYm9vbGVhbiBpZiB0aGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBhbmFseXplZC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZWQ/XHJcbiBcIlJldHVybnMgYm9vbGVhbiBpZiB0aGUgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIG1hcmtlZCBhcyBhbmFseXplZC5cIlxyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbeF1cclxuIChib29sZWFuXHJcbiAgKGNvbmRcclxuICAgKHVuc29ydGVkLW1hcD8geClcclxuICAgKDpjbGpzLmFuYWx5emVyL2FuYWx5emVkIHgpXHJcbiAgIDplbHNlXHJcbiAgICg6Y2xqcy5hbmFseXplci9hbmFseXplZCAobWV0YSB4KSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1kZXBzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBsaWIsIGEgbmFtZXNwYWNlLCBkZXBzLCBpdHMgZGVwZW5kZW5jaWVzLCBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50XG4gICBhbmQgb3B0cywgY29tcGlsZXIgb3B0aW9ucyAtIGFuYWx5emUgYWxsIG9mIHRoZSBkZXBlbmRlbmNpZXMuIFJlcXVpcmVkIHRvXG4gICBjb3JyZWN0bHkgYW5hbHl6ZSB1c2FnZSBvZiBvdGhlciBuYW1lc3BhY2VzLiIsIDphcmdsaXN0cyBbW2xpYiBkZXBzIGVudl0gW2xpYiBkZXBzIGVudiBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1kZXBzXHJcbiBcIkdpdmVuIGEgbGliLCBhIG5hbWVzcGFjZSwgZGVwcywgaXRzIGRlcGVuZGVuY2llcywgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudFxcbiAgIGFuZCBvcHRzLCBjb21waWxlciBvcHRpb25zIC0gYW5hbHl6ZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gUmVxdWlyZWQgdG9cXG4gICBjb3JyZWN0bHkgYW5hbHl6ZSB1c2FnZSBvZiBvdGhlciBuYW1lc3BhY2VzLlwiXHJcbiAoW2xpYiBkZXBzIGVudl1cclxuICAoYW5hbHl6ZS1kZXBzXHJcbiAgIGxpYlxyXG4gICBkZXBzXHJcbiAgIGVudlxyXG4gICAod2hlbiBlbnYvKmNvbXBpbGVyKiAoOm9wdGlvbnMgQGVudi8qY29tcGlsZXIqKSkpKVxyXG4gKFtsaWIgZGVwcyBlbnYgb3B0c11cclxuICAobGV0XHJcbiAgIFtjb21waWxlciBAZW52Lypjb21waWxlcipdXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbKmNsanMtZGVwLXNldCpcclxuICAgICAodmFyeS1tZXRhXHJcbiAgICAgIChjb25qICpjbGpzLWRlcC1zZXQqIGxpYilcclxuICAgICAgdXBkYXRlLWluXHJcbiAgICAgIFs6ZGVwLXBhdGhdXHJcbiAgICAgIGNvbmpcclxuICAgICAgbGliKV1cclxuICAgIChhc3NlcnRcclxuICAgICAoZXZlcnk/XHJcbiAgICAgIChmbiogW3AxX180ODYxMSNdIChub3QgKGNvbnRhaW5zPyAqY2xqcy1kZXAtc2V0KiBwMV9fNDg2MTEjKSkpXHJcbiAgICAgIGRlcHMpXHJcbiAgICAgKHN0clxyXG4gICAgICBcIkNpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQsIFwiXHJcbiAgICAgIChhcHBseVxyXG4gICAgICAgc3RyXHJcbiAgICAgICAoaW50ZXJwb3NlXHJcbiAgICAgICAgXCIgLT4gXCJcclxuICAgICAgICAoY29ualxyXG4gICAgICAgICAoLT4gKmNsanMtZGVwLXNldCogbWV0YSA6ZGVwLXBhdGgpXHJcbiAgICAgICAgIChzb21lICpjbGpzLWRlcC1zZXQqIGRlcHMpKSkpKSlcclxuICAgIChkb3NlcVxyXG4gICAgIFtkZXAgZGVwc11cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKG9yXHJcbiAgICAgICAoc29tZT8gKGdldC1pbiBjb21waWxlciBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBkZXAgOmRlZnNdKSlcclxuICAgICAgIChub2RlLW1vZHVsZS1kZXA/IGRlcClcclxuICAgICAgIChqcy1tb2R1bGUtZXhpc3RzPyAobmFtZSBkZXApKVxyXG4gICAgICAgIz8oOmNsaiAoZGVwcy9maW5kLWNsYXNzcGF0aC1saWIgZGVwKSkpXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGNvbnRhaW5zPyAoOmpzLWRlcGVuZGVuY3ktaW5kZXggY29tcGlsZXIpIChuYW1lIGRlcCkpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW2RlcC1uYW1lIChuYW1lIGRlcCldXHJcbiAgICAgICAgKHdoZW5cclxuICAgICAgICAgKHN0cmluZy9zdGFydHMtd2l0aD8gZGVwLW5hbWUgXCJnb29nLlwiKVxyXG4gICAgICAgICAjPyg6Y2xqIChsZXQgW2pzLWxpYiAoZ2V0LWluIGNvbXBpbGVyIFs6anMtZGVwZW5kZW5jeS1pbmRleCBkZXAtbmFtZV0pIG5zIChleHRlcm5zL2FuYWx5emUtZ29vZy1maWxlICg6ZmlsZSBqcy1saWIpIChzeW1ib2wgZGVwLW5hbWUpKV0gKHN3YXAhIGVudi8qY29tcGlsZXIqIHVwZGF0ZS1pbiBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBkZXBdIG1lcmdlIG5zKSkpKSlcclxuICAgICAgICM/KDpjbGogKGlmLXNvbWUgW3NyYyAobG9jYXRlLXNyYyBkZXApXSAoYW5hbHl6ZS1maWxlIHNyYyBvcHRzKSAodGhyb3cgKGVycm9yIGVudiAoZXJyb3ItbWVzc2FnZSA6dW5kZWNsYXJlZC1ucyB7Om5zLXN5bSBkZXAsIDpqcy1wcm92aWRlIChuYW1lIGRlcCl9KSkpKSA6Y2xqcyAodGhyb3cgKGVycm9yIGVudiAoZXJyb3ItbWVzc2FnZSA6dW5kZWNsYXJlZC1ucyB7Om5zLXN5bSBkZXAsIDpqcy1wcm92aWRlIChuYW1lIGRlcCl9KSkpKSkpKSkpKSlcclxuIn0gezpzeW0gYXJyYXktdHlwZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5LXR5cGU/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFt0XVxyXG4gKGNvbmRcclxuICAobmlsPyB0KVxyXG4gIHRydWVcclxuICAoPSAnY2xqLW5pbCB0KVxyXG4gIHRydWVcclxuICAoanMtdGFnPyB0KVxyXG4gIHRydWVcclxuICAoPSAnYW55IHQpXHJcbiAgdHJ1ZVxyXG4gIChjb250YWlucz8gYXJyYXktdHlwZXMgdClcclxuICB0cnVlXHJcbiAgOmVsc2VcclxuICAoYm9vbGVhblxyXG4gICAod2hlblxyXG4gICAgIz8oOmNsaiAoc2V0PyB0KSA6Y2xqcyAoY2xqcy1zZXQ/IHQpKVxyXG4gICAgKG9yIChjb250YWlucz8gdCAnYW55KSAoY29udGFpbnM/IHQgJ2pzKSAoc29tZSBhcnJheS10eXBlcyB0KSkpKSkpXHJcbiJ9IHs6c3ltIGRvdHRlZC1zeW1ib2w/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvdHRlZC1zeW1ib2w/XHJcbiBbc3ltXVxyXG4gKGxldFxyXG4gIFtzIChzdHIgc3ltKV1cclxuICAjPyg6Y2xqIChhbmQgKC5jb250YWlucyBzIFwiLlwiKSAobm90ICguY29udGFpbnMgcyBcIi4uXCIpKSkgOmNsanMgKGFuZCAoZ29vZy5zdHJpbmcvY29udGFpbnMgcyBcIi5cIikgKG5vdCAoZ29vZy5zdHJpbmcvY29udGFpbnMgcyBcIi4uXCIpKSkpKSlcclxuIn0gezpzeW0gKmNsanMtbWFjcm9zLWlzLWNsYXNzcGF0aCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLW1hY3Jvcy1pcy1jbGFzc3BhdGgqIHRydWUpXHJcbiJ9IHs6c3ltICphbGxvdy1yZWRlZiosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICphbGxvdy1yZWRlZiogZmFsc2UpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZm4tbWV0aG9kLWJvZHksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm0gcmVjdXItZnJhbWVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1mbi1tZXRob2QtYm9keVxyXG4gW2VudiBmb3JtIHJlY3VyLWZyYW1lc11cclxuIChiaW5kaW5nIFsqcmVjdXItZnJhbWVzKiByZWN1ci1mcmFtZXNdIChhbmFseXplIGVudiBmb3JtKSkpXHJcbiJ9IHs6c3ltIGluZmVyLXR5cGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHs6a2V5cyBbdGFnXSwgOmFzIGFzdH0gX10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVyLXR5cGVcclxuIFtlbnYgezprZXlzIFt0YWddLCA6YXMgYXN0fSBfXVxyXG4gKGlmXHJcbiAgKG9yIChuaWw/IHRhZykgKD0gJ2Z1bmN0aW9uIHRhZykpXHJcbiAgKGlmXHJcbiAgICg9IDpmbiAoOm9wIGFzdCkpXHJcbiAgICh1cGRhdGVcclxuICAgIGFzdFxyXG4gICAgOm1ldGhvZHNcclxuICAgIChmblxyXG4gICAgIFttc11cclxuICAgICAoaW50b1xyXG4gICAgICBbXVxyXG4gICAgICAobWFwIChmbiogW3AxX180ODY0MyNdIChpbmZlci10eXBlIGVudiBwMV9fNDg2NDMjIF8pKSlcclxuICAgICAgbXMpKSlcclxuICAgKGlmLXNvbWUgW3RhZyAoaW5mZXItdGFnIGVudiBhc3QpXSAoYXNzb2MgYXN0IDp0YWcgdGFnKSBhc3QpKVxyXG4gIGFzdCkpXHJcbiJ9IHs6c3ltIHBhcnNlLWltcG9ydC1zcGVjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBkZXBzIHNwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1pbXBvcnQtc3BlY1xyXG4gW2VudiBkZXBzIHNwZWNdXHJcbiAod2hlbi1ub3RcclxuICAob3JcclxuICAgKGFuZCAoc2VxdWVudGlhbD8gc3BlYykgKGV2ZXJ5PyBzeW1ib2w/IHNwZWMpKVxyXG4gICAoYW5kIChzeW1ib2w/IHNwZWMpIChuaWw/IChuYW1lc3BhY2Ugc3BlYykpKSlcclxuICAodGhyb3dcclxuICAgKGVycm9yXHJcbiAgICBlbnZcclxuICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICBzcGVjXHJcbiAgICAgXCJPbmx5IGxpYi5ucy5DdG9yIG9yIFtsaWIubnMgQ3RvcipdIHNwZWMgc3VwcG9ydGVkIGluIDppbXBvcnRcIikpKSlcclxuIChsZXRcclxuICBbaW1wb3J0LW1hcFxyXG4gICAoY29uZFxyXG4gICAgKHNlcXVlbnRpYWw/IHNwZWMpXHJcbiAgICAoLT4+XHJcbiAgICAgKHJlc3Qgc3BlYylcclxuICAgICAobWFwXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg2MjAjXVxyXG4gICAgICAgKHZlY3RvciBwMV9fNDg2MjAjIChzeW1ib2wgKHN0ciAoZmlyc3Qgc3BlYykgXCIuXCIgcDFfXzQ4NjIwIykpKSkpXHJcbiAgICAgKGludG8ge30pKVxyXG4gICAgKG5vdCAoPT0gLTEgKC5pbmRleE9mIChzdHIgc3BlYykgXCIuXCIpKSlcclxuICAgIHsoc3ltYm9sIChsYXN0IChzdHJpbmcvc3BsaXQgKHN0ciBzcGVjKSAjXCJcXC5cIikpKSBzcGVjfVxyXG4gICAgOmVsc2VcclxuICAgIHt9KV1cclxuICAoZG9zZXEgW1tfIHNwZWNdIGltcG9ydC1tYXBdIChzd2FwISBkZXBzIGNvbmogc3BlYykpXHJcbiAgezppbXBvcnQgaW1wb3J0LW1hcCwgOnJlcXVpcmUgaW1wb3J0LW1hcH0pKVxyXG4ifSB7OnN5bSBjbGotbnMtPmNsanMtbnMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHN5bWJvbCB0aGF0IHN0YXJ0cyB3aXRoIGNsb2p1cmUgYXMgdGhlIGZpcnN0IHNlZ21lbnQgcmV0dXJuIHRoZVxuICAgc2FtZSBzeW1ib2wgd2l0aCB0aGUgZmlyc3Qgc2VnbWVudCByZXBsYWNlZCB3aXRoIGNsanMiLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGotbnMtPmNsanMtbnNcclxuIFwiR2l2ZW4gYSBzeW1ib2wgdGhhdCBzdGFydHMgd2l0aCBjbG9qdXJlIGFzIHRoZSBmaXJzdCBzZWdtZW50IHJldHVybiB0aGVcXG4gICBzYW1lIHN5bWJvbCB3aXRoIHRoZSBmaXJzdCBzZWdtZW50IHJlcGxhY2VkIHdpdGggY2xqc1wiXHJcbiBbc3ltXVxyXG4gKGxldFxyXG4gIFtzZWdzIChzdHJpbmcvc3BsaXQgKGNsb2p1cmUuY29yZS9uYW1lIHN5bSkgI1wiXFwuXCIpXVxyXG4gIChpZlxyXG4gICAoPSBcImNsb2p1cmVcIiAoZmlyc3Qgc2VncykpXHJcbiAgIChzeW1ib2wgKHN0cmluZy9qb2luIFwiLlwiIChjb25zIFwiY2xqc1wiIChuZXh0IHNlZ3MpKSkpXHJcbiAgIHN5bSkpKVxyXG4ifSB7OnN5bSBjb25zdGFudC12YWx1ZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtvcF0sIDphcyBhc3R9XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uc3RhbnQtdmFsdWU/XHJcbiBbezprZXlzIFtvcF0sIDphcyBhc3R9XVxyXG4gKG9yXHJcbiAgKCN7OmNvbnN0IDpxdW90ZX0gb3ApXHJcbiAgKGFuZFxyXG4gICAoI3s6dmVjdG9yIDpzZXQgOm1hcH0gb3ApXHJcbiAgIChldmVyeT8gY29uc3RhbnQtdmFsdWU/IChhc3QtY2hpbGRyZW4gYXN0KSkpKSlcclxuIn0gezpzeW0gZHVtcC1zcGVjcywgOm1ldGEgezpkb2MgIkR1bXBzIHJlZ2lzdGVyZWQgc3BlY2VkIHZhcnMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlIGludG8gdGhlIGNvbXBpbGVyXG4gIGVudmlyb25tZW50LiIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZHVtcC1zcGVjc1xyXG4gXCJEdW1wcyByZWdpc3RlcmVkIHNwZWNlZCB2YXJzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSBpbnRvIHRoZSBjb21waWxlclxcbiAgZW52aXJvbm1lbnQuXCJcclxuIFtuc11cclxuIChsZXRcclxuICBbc3BlYy12YXJzIChnZXQtc3BlYy12YXJzKSBucy1zdHIgKHN0ciBucyldXHJcbiAgKHN3YXAhXHJcbiAgIGVudi8qY29tcGlsZXIqXHJcbiAgIHVwZGF0ZS1pblxyXG4gICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuc11cclxuICAgbWVyZ2VcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcmVnaXN0cnktcmVmICg6cmVnaXN0cnktcmVmIHNwZWMtdmFycyldXHJcbiAgICB7OmNsanMuc3BlYy9yZWdpc3RyeS1yZWZcclxuICAgICAoaW50b1xyXG4gICAgICBbXVxyXG4gICAgICAoZmlsdGVyIChmbiBbW2sgX11dICg9IG5zLXN0ciAobmFtZXNwYWNlIGspKSkpXHJcbiAgICAgIEBAcmVnaXN0cnktcmVmKX0pXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3NwZWNlZC12YXJzICg6c3BlY2VkLXZhcnMgc3BlYy12YXJzKV1cclxuICAgIHs6Y2xqcy5zcGVjL3NwZWNlZC12YXJzXHJcbiAgICAgKGludG9cclxuICAgICAgW11cclxuICAgICAgKGZpbHRlclxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW3ZdXHJcbiAgICAgICAgKG9yICg9IG5zLXN0ciAobmFtZXNwYWNlIHYpKSAoPSBucyAoLT4gdiBtZXRhIDpmZGVmLW5zKSkpKSlcclxuICAgICAgQEBzcGVjZWQtdmFycyl9KSkpKVxyXG4ifSB7OnN5bSAqZm4taW52b2tlLWRpcmVjdCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpmbi1pbnZva2UtZGlyZWN0KiBmYWxzZSlcclxuIn0gezpzeW0gdXNlLT5yZXF1aXJlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBbbGliICYgZmlsdGVycyA6YXMgc3BlY11dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1c2UtPnJlcXVpcmVcclxuIFtlbnYgW2xpYiAmIGZpbHRlcnMgOmFzIHNwZWNdXVxyXG4gKHdoZW4tbm90XHJcbiAgKGFuZCAoc3ltYm9sPyBsaWIpIChvZGQ/IChjb3VudCBzcGVjKSkpXHJcbiAgKHRocm93XHJcbiAgIChlcnJvclxyXG4gICAgZW52XHJcbiAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgc3BlY1xyXG4gICAgIFwiT25seSBbbGliLm5zIDpvbmx5IChuYW1lcyldIGFuZCBvcHRpb25hbGx5IGA6cmVuYW1lIHtmcm9tIHRvfWAgc3BlY3Mgc3VwcG9ydGVkIGluIDp1c2UgLyA6dXNlLW1hY3Jvc1wiKSkpKVxyXG4gKGxvb3BcclxuICBbZnMgKHNlcSBmaWx0ZXJzKSByZXQgW2xpYl0gZXJyIGZhbHNlXVxyXG4gIChjb25kXHJcbiAgICh0cnVlPyBlcnIpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yXHJcbiAgICAgZW52XHJcbiAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICBzcGVjXHJcbiAgICAgIFwiT25seSBbbGliLm5zIDpvbmx5IChuYW1lcyldIGFuZCBvcHRpb25hbGx5IGA6cmVuYW1lIHtmcm9tIHRvfWAgc3BlY3Mgc3VwcG9ydGVkIGluIDp1c2UgLyA6dXNlLW1hY3Jvc1wiKSkpXHJcbiAgIChzb21lPyBmcylcclxuICAgKGxldFxyXG4gICAgW2t3IChmaXJzdCBmcykgb25seT8gKD0ga3cgOm9ubHkpXVxyXG4gICAgKGlmXHJcbiAgICAgKG9yIG9ubHk/ICg9IGt3IDpyZW5hbWUpKVxyXG4gICAgIChpZlxyXG4gICAgICAoc29tZT8gKHNvbWUgI3soaWYgb25seT8gOnJlZmVyIGt3KX0gcmV0KSlcclxuICAgICAgKHRocm93XHJcbiAgICAgICAoZXJyb3JcclxuICAgICAgICBlbnZcclxuICAgICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgICAgIHNwZWNcclxuICAgICAgICAgXCJFYWNoIG9mIDpvbmx5IGFuZCA6cmVuYW1lIG9wdGlvbnMgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uY2UgaW4gOnVzZSAvIDp1c2UtbWFjcm9zXCIpKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW3JlZnMgKHNlY29uZCBmcyldXHJcbiAgICAgICAoaWYtbm90XHJcbiAgICAgICAgKG9yXHJcbiAgICAgICAgIChhbmQgb25seT8gKHNlcXVlbnRpYWw/IHJlZnMpIChldmVyeT8gc3ltYm9sPyByZWZzKSlcclxuICAgICAgICAgKGFuZFxyXG4gICAgICAgICAgKD0ga3cgOnJlbmFtZSlcclxuICAgICAgICAgIChtYXA/IHJlZnMpXHJcbiAgICAgICAgICAoZXZlcnk/XHJcbiAgICAgICAgICAgKGZuKiBbcDFfXzQ4NjE5I10gKGV2ZXJ5PyBzeW1ib2w/IHAxX180ODYxOSMpKVxyXG4gICAgICAgICAgIHJlZnMpKSlcclxuICAgICAgICAocmVjdXIgZnMgcmV0IHRydWUpXHJcbiAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgIChubmV4dCBmcylcclxuICAgICAgICAgKGludG8gcmV0IFsoaWYgb25seT8gOnJlZmVyIGt3KSByZWZzXSlcclxuICAgICAgICAgZmFsc2UpKSkpXHJcbiAgICAgKHJlY3VyIGZzIHJldCB0cnVlKSkpXHJcbiAgIDplbHNlXHJcbiAgIChpZiAoc29tZT8gKHNvbWUgI3s6cmVmZXJ9IHJldCkpIHJldCAocmVjdXIgZnMgcmV0IHRydWUpKSkpKVxyXG4ifSB7OnN5bSBpbmZlcnJlZC11c2UtbWFjcm9zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3VzZS1tYWNyb3MgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXJyZWQtdXNlLW1hY3Jvc1xyXG4gW3VzZS1tYWNyb3MgZW52XVxyXG4gKGxldFxyXG4gIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAoaW50b1xyXG4gICB7fVxyXG4gICAoZmlsdGVyXHJcbiAgICAoZm4gW1tzeW0gbGliXV0gKG5vdCAobWlzc2luZy11c2UtbWFjcm8/IGxpYiBzeW0pKSlcclxuICAgIHVzZS1tYWNyb3MpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtc3ltYm9sLCA6bWV0YSB7OmRvYyAiRmluZHMgdGhlIHZhciBhc3NvY2lhdGVkIHdpdGggc3ltIiwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc3ltYm9sXHJcbiBcIkZpbmRzIHRoZSB2YXIgYXNzb2NpYXRlZCB3aXRoIHN5bVwiXHJcbiBbZW52IHN5bV1cclxuIChpZlxyXG4gICg6cXVvdGVkPyBlbnYpXHJcbiAgKGRvXHJcbiAgIChyZWdpc3Rlci1jb25zdGFudCEgZW52IHN5bSlcclxuICAgKGFuYWx5emUtd3JhcC1tZXRhXHJcbiAgICB7Om9wIDpjb25zdCxcclxuICAgICA6dmFsIHN5bSxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBzeW0sXHJcbiAgICAgOnRhZyAnY2xqcy5jb3JlL1N5bWJvbH0pKVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBbbGluZSBjb2x1bW5dfVxyXG4gICAgKG1ldGEgc3ltKVxyXG4gICAgZW52XHJcbiAgICAoaWYtbm90IChuaWw/IGxpbmUpIChhc3NvYyBlbnYgOmxpbmUgbGluZSkgZW52KVxyXG4gICAgZW52XHJcbiAgICAoaWYtbm90IChuaWw/IGNvbHVtbikgKGFzc29jIGVudiA6Y29sdW1uIGNvbHVtbikgZW52KVxyXG4gICAgcmV0XHJcbiAgICB7OmVudiBlbnYsIDpmb3JtIHN5bX1cclxuICAgIGxjbHNcclxuICAgICg6bG9jYWxzIGVudildXHJcbiAgIChpZi1zb21lXHJcbiAgICBbbGIgKGhhbmRsZS1zeW1ib2wtbG9jYWwgc3ltIChnZXQgbGNscyBzeW0pKV1cclxuICAgIChtZXJnZVxyXG4gICAgIChhc3NvYyByZXQgOm9wIDpsb2NhbCA6aW5mbyBsYilcclxuICAgICAod2hlblxyXG4gICAgICAobWFwPyBsYilcclxuICAgICAgKHNlbGVjdC1rZXlzIGxiIFs6bmFtZSA6bG9jYWwgOmFyZy1pZCA6dmFyaWFkaWM/IDppbml0XSkpKVxyXG4gICAgKGxldFxyXG4gICAgIFtzeW0tbWV0YVxyXG4gICAgICAobWV0YSBzeW0pXHJcbiAgICAgIHN5bS1uc1xyXG4gICAgICAobmFtZXNwYWNlIHN5bSlcclxuICAgICAgY3VyLW5zXHJcbiAgICAgIChzdHIgKC0+IGVudiA6bnMgOm5hbWUpKVxyXG4gICAgICAjP0AoOmNsanMgW3N5bSAoaWYgKGFuZCBzeW0tbnMgKG5vdD0gc3ltLW5zIFwiY2xqcy5jb3JlXCIpIChnc3RyaW5nL2VuZHNXaXRoIGN1ci1ucyBcIiRtYWNyb3NcIikgKG5vdCAoZ3N0cmluZy9lbmRzV2l0aCBzeW0tbnMgXCIkbWFjcm9zXCIpKSAoPSBzeW0tbnMgKHN1YnMgY3VyLW5zIDAgKC0gKGNvdW50IGN1ci1ucykgNykpKSkgKHN5bWJvbCAoc3RyIHN5bS1ucyBcIiRtYWNyb3NcIikgKG5hbWUgc3ltKSkgc3ltKV0pXHJcbiAgICAgIGluZm9cclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKGNvbnRhaW5zPyBzeW0tbWV0YSA6Y2xqcy5hbmFseXplci9hbmFseXplZClcclxuICAgICAgIChyZXNvbHZlLWV4aXN0aW5nLXZhciBlbnYgc3ltKVxyXG4gICAgICAgKHJlc29sdmUtdmFyIGVudiBzeW0pKV1cclxuICAgICAoYXNzZXJ0ICg6b3AgaW5mbykgKDpvcCBpbmZvKSlcclxuICAgICAoZGVzdWdhci1kb3R0ZWQtZXhwclxyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAodHJ1ZT8gKDpkZWYtdmFyIGVudikpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICAoYXNzb2MgcmV0IDppbmZvIGluZm8pXHJcbiAgICAgICAgKHNlbGVjdC1rZXlzIGluZm8gWzpvcCA6bmFtZSA6bnMgOnRhZ10pXHJcbiAgICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgIFtjb25zdC1leHByICg6Y29uc3QtZXhwciBpbmZvKV1cclxuICAgICAgICAgezpjb25zdC1leHByIGNvbnN0LWV4cHJ9KSlcclxuICAgICAgIChsZXRcclxuICAgICAgICBbaW5mbyAocmVzb2x2ZS12YXIgZW52IHN5bSldXHJcbiAgICAgICAgKG1lcmdlXHJcbiAgICAgICAgIChhc3NvYyByZXQgOm9wIDp2YXIgOmluZm8gaW5mbylcclxuICAgICAgICAgKHNlbGVjdC1rZXlzIGluZm8gWzpvcCA6bmFtZSA6bnMgOnRhZ10pKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGNvbmZpcm0tdmFyLWV4aXN0cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnYgcHJlZml4IHN1ZmZpeF0gW2VudiBwcmVmaXggc3VmZml4IG1pc3NpbmctZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25maXJtLXZhci1leGlzdHNcclxuIChbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAgKGxldFxyXG4gICBbd2FybiAoY29uZmlybS12YXItZXhpc3Qtd2FybmluZyBlbnYgcHJlZml4IHN1ZmZpeCldXHJcbiAgIChjb25maXJtLXZhci1leGlzdHMgZW52IHByZWZpeCBzdWZmaXggd2FybikpKVxyXG4gKFtlbnYgcHJlZml4IHN1ZmZpeCBtaXNzaW5nLWZuXVxyXG4gIChsZXRcclxuICAgW3N1ZnN0clxyXG4gICAgKHN0ciBzdWZmaXgpXHJcbiAgICBzdWZmaXgtc3RyXHJcbiAgICAoaWZcclxuICAgICAoYW5kXHJcbiAgICAgICM/KDpjbGogKG5vdD0gXCIuLlwiIHN1ZnN0cikgOmNsanMgKG5vdCAoaWRlbnRpY2FsPyBcIi4uXCIgc3Vmc3RyKSkpXHJcbiAgICAgICM/KDpjbGogKHJlLWZpbmQgI1wiXFwuXCIgc3Vmc3RyKSA6Y2xqcyAoLnRlc3QgI1wiXFwuXCIgc3Vmc3RyKSkpXHJcbiAgICAgKGZpcnN0IChzdHJpbmcvc3BsaXQgc3Vmc3RyICNcIlxcLlwiKSlcclxuICAgICBzdWZmaXgpXHJcbiAgICBzdWZmaXhcclxuICAgIChzeW1ib2wgc3VmZml4LXN0cildXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kXHJcbiAgICAgKG5vdCAoaW1wbGljaXQtaW1wb3J0PyBlbnYgcHJlZml4IHN1ZmZpeCkpXHJcbiAgICAgKG5vdCAobG9hZGVkLWpzLW5zPyBlbnYgcHJlZml4KSlcclxuICAgICAobm90IChhbmQgKD0gJ2NsanMuY29yZSBwcmVmaXgpICg9ICd1bnF1b3RlIHN1ZmZpeCkpKVxyXG4gICAgIChuaWw/XHJcbiAgICAgIChnZXRzXHJcbiAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgIHByZWZpeFxyXG4gICAgICAgOmRlZnNcclxuICAgICAgIHN1ZmZpeCkpXHJcbiAgICAgKG5vdCAoanMtbW9kdWxlLWV4aXN0cz8gcHJlZml4KSkpXHJcbiAgICAobWlzc2luZy1mbiBlbnYgcHJlZml4IHN1ZmZpeCkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUta2V5d29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1rZXl3b3JkXHJcbiBbZW52IHN5bV1cclxuIChyZWdpc3Rlci1jb25zdGFudCEgZW52IHN5bSlcclxuIHs6b3AgOmNvbnN0LCA6dmFsIHN5bSwgOmVudiBlbnYsIDpmb3JtIHN5bSwgOnRhZyAnY2xqcy5jb3JlL0tleXdvcmR9KVxyXG4ifSB7OnN5bSBhbmFseXplLWxldC1iaW5kaW5ncywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbmNsLWVudiBiaW5kaW5ncyBvcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0LWJpbmRpbmdzXHJcbiBbZW5jbC1lbnYgYmluZGluZ3Mgb3BdXHJcbiAoZGlzYWxsb3dpbmctcmVjdXIgKGFuYWx5emUtbGV0LWJpbmRpbmdzKiBlbmNsLWVudiBiaW5kaW5ncyBvcCkpKVxyXG4ifSB7OnN5bSBtdW5nZS1nbG9iYWwtZXhwb3J0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZS1nbG9iYWwtZXhwb3J0XHJcbiBbbmFtZV1cclxuIChzdHJcclxuICBcImdsb2JhbCRtb2R1bGUkXCJcclxuICAobXVuZ2VcclxuICAgKHN0cmluZy9yZXBsYWNlIChzdHIgbmFtZSkgI1wiWy5cXC9dXCIgIz8oOmNsaiBcIlxcXFwkXCIgOmNsanMgXCIkJFwiKSkpKSlcclxuIn0gezpzeW0gKmxvb3AtbGV0cyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpsb29wLWxldHMqICgpKVxyXG4ifSB7OnN5bSAtPnR5cGUtc2V0LCA6bWV0YSB7OmRvYyAiRW5zdXJlcyB0aGF0IGEgdHlwZSB0YWcgaXMgYSBzZXQuIiwgOmFyZ2xpc3RzIChbdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIC0+dHlwZS1zZXRcclxuIFwiRW5zdXJlcyB0aGF0IGEgdHlwZSB0YWcgaXMgYSBzZXQuXCJcclxuIFt0XVxyXG4gKGlmICM/KDpjbGogKHNldD8gdCkgOmNsanMgKGNsanMtc2V0PyB0KSkgdCAje3R9KSlcclxuIn0gezpzeW0ganMtdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3ByZV0gW3ByZSB0YWctdHlwZV0gW3ByZSB0YWctdHlwZSBleHRlcm5zXSBbcHJlIHRhZy10eXBlIGV4dGVybnMgdG9wXV19LCA6c291cmNlICIoZGVmblxyXG4ganMtdGFnXHJcbiAoW3ByZV0gKGpzLXRhZyBwcmUgOnRhZykpXHJcbiAoW3ByZSB0YWctdHlwZV0gKGpzLXRhZyBwcmUgdGFnLXR5cGUgKGdldC1leHRlcm5zKSkpXHJcbiAoW3ByZSB0YWctdHlwZSBleHRlcm5zXSAoanMtdGFnIHByZSB0YWctdHlwZSBleHRlcm5zIGV4dGVybnMpKVxyXG4gKFtwcmUgdGFnLXR5cGUgZXh0ZXJucyB0b3BdXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtbcCBleHRlcm5zJyA6YXMgbWVdIChmaW5kIGV4dGVybnMgKGZpcnN0IHByZSkpXVxyXG4gICAobGV0XHJcbiAgICBbdGFnICgtPiBwIG1ldGEgdGFnLXR5cGUpXVxyXG4gICAgKGlmXHJcbiAgICAgKD0gKGNvdW50IHByZSkgMSlcclxuICAgICAod2hlbiB0YWcgKHN5bWJvbCBcImpzXCIgKHN0ciAoYWxpYXMtPnR5cGUgdGFnIHRhZykpKSlcclxuICAgICAob3JcclxuICAgICAgKGpzLXRhZyAobmV4dCBwcmUpIHRhZy10eXBlIGV4dGVybnMnIHRvcClcclxuICAgICAgKGpzLXRhZ1xyXG4gICAgICAgKGludG8gJ1twcm90b3R5cGVdIChuZXh0IHByZSkpXHJcbiAgICAgICB0YWctdHlwZVxyXG4gICAgICAgKGdldCB0b3AgdGFnKVxyXG4gICAgICAgdG9wKSkpKSkpKVxyXG4ifSB7OnN5bSBqcy1yZXNlcnZlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGpzLXJlc2VydmVkXHJcbiAje1widHlwZW9mXCIgXCJmbG9hdFwiIFwiaW1wbGVtZW50c1wiIFwiZWxzZVwiIFwiYm9vbGVhblwiIFwiYWJzdHJhY3RcIiBcImludFwiXHJcbiAgIFwic3RhdGljXCIgXCJwYWNrYWdlXCIgXCJ0aGlzXCIgXCJhd2FpdFwiIFwieWllbGRcIiBcImludGVyZmFjZVwiIFwidm9pZFwiXHJcbiAgIFwiZGVsZXRlXCIgXCJjbGFzc1wiIFwiZXhwb3J0XCIgXCJ2YXJcIiBcInRyeVwiIFwibG9uZ1wiIFwibnVsbFwiIFwicmV0dXJuXCJcclxuICAgXCJtZXRob2RzXCIgXCJuYXRpdmVcIiBcInByaXZhdGVcIiBcIm5ld1wiIFwiZm9yXCIgXCJjYXRjaFwiIFwiZXh0ZW5kc1wiIFwic2hvcnRcIlxyXG4gICBcInByb3RlY3RlZFwiIFwidGhyb3dzXCIgXCJzeW5jaHJvbml6ZWRcIiBcInRyYW5zaWVudFwiIFwic3VwZXJcIiBcImlmXCIgXCJsZXRcIlxyXG4gICBcImltcG9ydFwiIFwiY2hhclwiIFwic3dpdGNoXCIgXCJjb25zdFwiIFwiY2FzZVwiIFwiYnJlYWtcIiBcInZvbGF0aWxlXCJcclxuICAgXCJmdW5jdGlvblwiIFwiY29udGludWVcIiBcImZpbmFsXCIgXCJkb1wiIFwiZG91YmxlXCIgXCJ3aGlsZVwiIFwicHVibGljXCJcclxuICAgXCJhcmd1bWVudHNcIiBcImRlYnVnZ2VyXCIgXCJ3aXRoXCIgXCJpbnN0YW5jZW9mXCIgXCJkZWZhdWx0XCIgXCJ0aHJvd1wiIFwiZ290b1wiXHJcbiAgIFwiZmluYWxseVwiIFwiYnl0ZVwiIFwiY29uc3RydWN0b3JcIiBcImluXCIgXCJlbnVtXCJ9KVxyXG4ifSB7OnN5bSAqbG9hZC10ZXN0cyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpsb2FkLXRlc3RzKiB0cnVlKVxyXG4ifSB7OnN5bSBjaGVjay11c2UtbWFjcm9zLWluZmVycmluZy1taXNzaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbbmFtZSB1c2VzIHVzZS1tYWNyb3NdLCA6YXMgYXN0fSBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay11c2UtbWFjcm9zLWluZmVycmluZy1taXNzaW5nXHJcbiBbezprZXlzIFtuYW1lIHVzZXMgdXNlLW1hY3Jvc10sIDphcyBhc3R9IGVudl1cclxuIChsZXRcclxuICBbbWlzc2luZy11c2VzXHJcbiAgICh3aGVuIChhbmQgKmFuYWx5emUtZGVwcyogKHNlcSB1c2VzKSkgKG1pc3NpbmctdXNlcyB1c2VzIGVudikpXHJcbiAgIG1heWJlLW1hY3Jvc1xyXG4gICAoYXBwbHkgZGlzc29jIHVzZXMgKGtleXMgbWlzc2luZy11c2VzKSlcclxuICAgcmVtb3ZlLW1pc3NpbmctdXNlc1xyXG4gICAoZm4qIFtwMV9fNDg2MTIjXSAoYXBwbHkgZGlzc29jIHAxX180ODYxMiMgKGtleXMgbWlzc2luZy11c2VzKSkpXHJcbiAgIGFzdCdcclxuICAgKC0+XHJcbiAgICBhc3RcclxuICAgICh1cGRhdGUtaW5cclxuICAgICBbOnVzZS1tYWNyb3NdXHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ4NjEzI11cclxuICAgICAgKC0+XHJcbiAgICAgICBwMV9fNDg2MTMjXHJcbiAgICAgICAobWVyZ2UgKGNoZWNrLXVzZS1tYWNyb3MgdXNlLW1hY3JvcyBtaXNzaW5nLXVzZXMgZW52KSlcclxuICAgICAgIChtZXJnZSAoaW5mZXJyZWQtdXNlLW1hY3JvcyBtYXliZS1tYWNyb3MgZW52KSkpKSlcclxuICAgICh1cGRhdGUtaW4gWzp1c2VzXSByZW1vdmUtbWlzc2luZy11c2VzKSldXHJcbiAgKHN3YXAhXHJcbiAgIGVudi8qY29tcGlsZXIqXHJcbiAgIChmbipcclxuICAgIFtwMV9fNDg2MTQjXVxyXG4gICAgKC0+XHJcbiAgICAgcDFfXzQ4NjE0I1xyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbmFtZSA6dXNlLW1hY3Jvc11cclxuICAgICAgbWVyZ2VcclxuICAgICAgKDp1c2UtbWFjcm9zIGFzdCcpKVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbmFtZSA6dXNlc11cclxuICAgICAgcmVtb3ZlLW1pc3NpbmctdXNlcykpKSlcclxuICBhc3QnKSlcclxuIn0gezpzeW0gY2Fub25pY2FsaXplLXR5cGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbm9uaWNhbGl6ZS10eXBlXHJcbiBbdF1cclxuIFwiRW5zdXJlcyB0aGF0IGEgdHlwZSB0YWcgaXMgZWl0aGVyIG5pbCwgYSB0eXBlIHN5bWJvbCwgb3IgYSBub24tc2luZ2xldG9uXFxuICBzZXQgb2YgdHlwZSBzeW1ib2xzLCBhYnNvcmJpbmcgY2xqLW5pbCBpbnRvIHNlcSBhbmQgYWxsIHR5cGVzIGludG8gYW55LlwiXHJcbiAoY29uZFxyXG4gIChzeW1ib2w/IHQpXHJcbiAgdFxyXG4gIChlbXB0eT8gdClcclxuICBuaWxcclxuICAoPT0gMSAoY291bnQgdCkpXHJcbiAgKGZpcnN0IHQpXHJcbiAgKGNvbnRhaW5zPyB0ICdhbnkpXHJcbiAgJ2FueVxyXG4gIChjb250YWlucz8gdCAnc2VxKVxyXG4gIChsZXQgW3JlcyAoZGlzaiB0ICdjbGotbmlsKV0gKGlmICg9PSAxIChjb3VudCByZXMpKSAnc2VxIHJlcykpXHJcbiAgOmVsc2VcclxuICB0KSlcclxuIn0gezpzeW0gbWFjcm9leHBhbmQtMSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWNyb2V4cGFuZC0xKlxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFtvcCAoZmlyc3QgZm9ybSldXHJcbiAgKGlmXHJcbiAgIChjb250YWlucz8gc3BlY2lhbHMgb3ApXHJcbiAgIChkb1xyXG4gICAgKHdoZW5cclxuICAgICAoPSAnbnMgb3ApXHJcbiAgICAgKGRvLW1hY3JvZXhwYW5kLWNoZWNrXHJcbiAgICAgIGVudlxyXG4gICAgICBmb3JtXHJcbiAgICAgIChnZXQtZXhwYW5kZXIgJ2NsanMuY29yZS9ucy1zcGVjaWFsLWZvcm0gZW52KSkpXHJcbiAgICBmb3JtKVxyXG4gICAoaWYtc29tZVxyXG4gICAgW21hYy12YXIgKHdoZW4gKHN5bWJvbD8gb3ApIChnZXQtZXhwYW5kZXIgb3AgZW52KSldXHJcbiAgICAoIz9AKDpjbGogW2JpbmRpbmcgWypucyogKGNyZWF0ZS1ucyAqY2xqcy1ucyopXV0gOmNsanMgW2RvXSlcclxuICAgICAoZG8tbWFjcm9leHBhbmQtY2hlY2sgZW52IGZvcm0gbWFjLXZhcilcclxuICAgICAobGV0XHJcbiAgICAgIFtmb3JtJ1xyXG4gICAgICAgKHRyeVxyXG4gICAgICAgICM/KDpjbGpzIChjaGVjay1tYWNyby1hcml0eSBtYWMtdmFyIGZvcm0pKVxyXG4gICAgICAgIChhcHBseSBAbWFjLXZhciBmb3JtIGVudiAocmVzdCBmb3JtKSlcclxuICAgICAgICAjPyg6Y2xqIChjYXRjaCBBcml0eUV4Y2VwdGlvbiBlICh0aHJvdyAoQXJpdHlFeGNlcHRpb24uICgtICguYWN0dWFsIGUpIDIpICgubmFtZSBlKSkpKSlcclxuICAgICAgICAoY2F0Y2hcclxuICAgICAgICAgIz8oOmNsaiBUaHJvd2FibGUgOmNsanMgOmRlZmF1bHQpXHJcbiAgICAgICAgIGVcclxuICAgICAgICAgKHRocm93XHJcbiAgICAgICAgICAoZXgtaW5mb1xyXG4gICAgICAgICAgIG5pbFxyXG4gICAgICAgICAgIChlcnJvci1kYXRhIGVudiA6bWFjcm9leHBhbnNpb24gKHZhci0+c3ltIG1hYy12YXIpKVxyXG4gICAgICAgICAgIGUpKSkpXVxyXG4gICAgICAoaWZcclxuICAgICAgICM/KDpjbGogKHNlcT8gZm9ybScpIDpjbGpzIChjbGpzLXNlcT8gZm9ybScpKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtzeW0nIChmaXJzdCBmb3JtJykgc3ltIChmaXJzdCBmb3JtKV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgIz8oOmNsaiAoPSBzeW0nIChxdW90ZSBqcyopKSA6Y2xqcyAoc3ltYm9sLWlkZW50aWNhbD8gc3ltJyBKU19TVEFSX1NZTSkpXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtzeW1cclxuICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgKHNvbWU/IChuYW1lc3BhY2Ugc3ltKSlcclxuICAgICAgICAgICAgc3ltXHJcbiAgICAgICAgICAgIChzeW1ib2wgXCJjbGpzLmNvcmVcIiAoc3RyIHN5bSkpKVxyXG4gICAgICAgICAgIGpzLW9wXHJcbiAgICAgICAgICAgezpqcy1vcCBzeW19XHJcbiAgICAgICAgICAgbnVtZXJpY1xyXG4gICAgICAgICAgICM/KDpjbGogKC0+IG1hYy12YXIgbWV0YSA6Y2xqcy5hbmFseXplci9udW1lcmljKSA6Y2xqcyAobGV0IFttYWMtdmFyLW5zIChzeW1ib2wgKG5hbWVzcGFjZSAoLi1zeW0gbWFjLXZhcikpKSBtYWMtdmFyLW5hbWUgKHN5bWJvbCAobmFtZSAoLi1zeW0gbWFjLXZhcikpKV0gKGdldC1pbiAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBtYWMtdmFyLW5zIDpkZWZzIG1hYy12YXItbmFtZSA6bWV0YSA6Y2xqcy5hbmFseXplci9udW1lcmljXSkpKVxyXG4gICAgICAgICAgIGpzLW9wXHJcbiAgICAgICAgICAgKGlmICh0cnVlPyBudW1lcmljKSAoYXNzb2MganMtb3AgOm51bWVyaWMgdHJ1ZSkganMtb3ApXVxyXG4gICAgICAgICAgKHZhcnktbWV0YSBmb3JtJyBtZXJnZSBqcy1vcCkpXHJcbiAgICAgICAgIGZvcm0nKSlcclxuICAgICAgIGZvcm0nKSkpXHJcbiAgICAoaWZcclxuICAgICAoc3ltYm9sPyBvcClcclxuICAgICAobGV0XHJcbiAgICAgIFtvcG5hbWUgKHN0ciBvcCldXHJcbiAgICAgIChjb25kXHJcbiAgICAgICAoaWRlbnRpY2FsPyBcXC4gIz8oOmNsaiAoZmlyc3Qgb3BuYW1lKSA6Y2xqcyAoLmNoYXJBdCBvcG5hbWUgMCkpKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtbdGFyZ2V0ICYgYXJnc10gKG5leHQgZm9ybSldXHJcbiAgICAgICAgKHdpdGgtbWV0YVxyXG4gICAgICAgICAobGlzdCpcclxuICAgICAgICAgICM/KDpjbGogKHF1b3RlIC4pIDpjbGpzIERPVF9TWU0pXHJcbiAgICAgICAgICB0YXJnZXRcclxuICAgICAgICAgIChzeW1ib2wgKHN1YnMgb3BuYW1lIDEpKVxyXG4gICAgICAgICAgYXJncylcclxuICAgICAgICAgKG1ldGEgZm9ybSkpKVxyXG4gICAgICAgKGlkZW50aWNhbD9cclxuICAgICAgICBcXC5cclxuICAgICAgICAjPyg6Y2xqIChsYXN0IG9wbmFtZSkgOmNsanMgKC5jaGFyQXQgb3BuYW1lIChkZWMgKC4gb3BuYW1lIC1sZW5ndGgpKSkpKVxyXG4gICAgICAgKHdpdGgtbWV0YVxyXG4gICAgICAgIChsaXN0KlxyXG4gICAgICAgICAjPyg6Y2xqIChxdW90ZSBuZXcpIDpjbGpzIE5FV19TWU0pXHJcbiAgICAgICAgIChzeW1ib2wgKHN1YnMgb3BuYW1lIDAgKGRlYyAoY291bnQgb3BuYW1lKSkpKVxyXG4gICAgICAgICAobmV4dCBmb3JtKSlcclxuICAgICAgICAobWV0YSBmb3JtKSlcclxuICAgICAgIDplbHNlXHJcbiAgICAgICBmb3JtKSlcclxuICAgICBmb3JtKSkpKSlcclxuIn0gezpzeW0gY2hlY2stdXNlLW1hY3JvcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1t1c2UtbWFjcm9zIGVudl0gW3VzZS1tYWNyb3MgbWlzc2luZy11c2VzIGVudl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLXVzZS1tYWNyb3NcclxuIChbdXNlLW1hY3JvcyBlbnZdIChjaGVjay11c2UtbWFjcm9zIHVzZS1tYWNyb3MgbmlsIGVudikpXHJcbiAoW3VzZS1tYWNyb3MgbWlzc2luZy11c2VzIGVudl1cclxuICAobGV0XHJcbiAgIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAgKGRvc2VxXHJcbiAgICBbW3N5bSBsaWJdIHVzZS1tYWNyb3NdXHJcbiAgICAod2hlblxyXG4gICAgIChtaXNzaW5nLXVzZS1tYWNybz8gbGliIHN5bSlcclxuICAgICAodGhyb3dcclxuICAgICAgKGVycm9yXHJcbiAgICAgICBlbnZcclxuICAgICAgIChlcnJvci1tZXNzYWdlXHJcbiAgICAgICAgOnVuZGVjbGFyZWQtbnMtZm9ybVxyXG4gICAgICAgIHs6dHlwZSBcIm1hY3JvXCIsIDpsaWIgbGliLCA6c3ltIHN5bX0pKSkpKVxyXG4gICAoY2hlY2stdXNlcyAobWlzc2luZy11c2UtbWFjcm9zIG1pc3NpbmctdXNlcyBlbnYpIGVudilcclxuICAgKGluZmVycmVkLXVzZS1tYWNyb3MgbWlzc2luZy11c2VzIGVudikpKSlcclxuIn0gezpzeW0gZ2V0LWV4cGFuZGVyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzeW0sIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGEgbWFjcm8sIGFuZCBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50XG4gICByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgQ2xvanVyZSBtYWNyb2V4cGFuZGVyLiIsIDphcmdsaXN0cyAoW3N5bSBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtZXhwYW5kZXJcclxuIFwiR2l2ZW4gYSBzeW0sIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGEgbWFjcm8sIGFuZCBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50XFxuICAgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIENsb2p1cmUgbWFjcm9leHBhbmRlci5cIlxyXG4gW3N5bSBlbnZdXHJcbiAobGV0XHJcbiAgW212YXIgKGdldC1leHBhbmRlciogc3ltIGVudildXHJcbiAgKHdoZW5cclxuICAgKGFuZCAoc29tZT8gbXZhcikgIz8oOmNsaiAoLmlzTWFjcm8gbXZhcikgOmNsanMgKC5pc01hY3JvIG12YXIpKSlcclxuICAgbXZhcikpKVxyXG4ifSB7OnN5bSBhbmFseXplLWpzLXN0YXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGpzZm9ybSBhcmdzIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWpzLXN0YXJcclxuIFtlbnYganNmb3JtIGFyZ3MgZm9ybV1cclxuIChkaXNhbGxvd2luZy1yZWN1ciAoYW5hbHl6ZS1qcy1zdGFyKiBlbnYganNmb3JtIGFyZ3MgZm9ybSkpKVxyXG4ifSB7OnN5bSBqcy1zdGFyLWludGVycCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLXN0YXItaW50ZXJwXHJcbiBbZW52IHNdXHJcbiAobGV0XHJcbiAgW2lkeCAoLmluZGV4T2YgcyBcIn57XCIpXVxyXG4gIChpZlxyXG4gICAoPT0gLTEgaWR4KVxyXG4gICAobGlzdCBzKVxyXG4gICAobGV0XHJcbiAgICBbZW5kXHJcbiAgICAgKC5pbmRleE9mIHMgXCJ9XCIgaWR4KVxyXG4gICAgIGlubmVyXHJcbiAgICAgKDpuYW1lXHJcbiAgICAgIChyZXNvbHZlLWV4aXN0aW5nLXZhciBlbnYgKHN5bWJvbCAoc3VicyBzICgrIDIgaWR4KSBlbmQpKSkpXVxyXG4gICAgKGxhenktc2VxXHJcbiAgICAgKGNvbnNcclxuICAgICAgKHN1YnMgcyAwIGlkeClcclxuICAgICAgKGNvbnMgaW5uZXIgKGpzLXN0YXItaW50ZXJwIGVudiAoc3VicyBzIChpbmMgZW5kKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSAqcmVjdXItZnJhbWVzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnJlY3VyLWZyYW1lcyogbmlsKVxyXG4ifSB7OnN5bSBhbmFseXplLWZuLW1ldGhvZHMtcGFzczIqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21lbnYgbG9jYWxzIHR5cGUgbWV0aHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWZuLW1ldGhvZHMtcGFzczIqXHJcbiBbbWVudiBsb2NhbHMgdHlwZSBtZXRoc11cclxuIChtYXB2XHJcbiAgKGZuKlxyXG4gICBbcDFfXzQ4NjA1I11cclxuICAgKGFuYWx5emUtZm4tbWV0aG9kIG1lbnYgbG9jYWxzIHAxX180ODYwNSMgdHlwZSB0cnVlKSlcclxuICBtZXRocykpXHJcbiJ9IHs6c3ltIG1hY3JvZXhwYW5kLTEsIDptZXRhIHs6ZG9jICJHaXZlbiBhIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBmb3JtLCBhIENsb2p1cmVTY3JpcHQgZm9ybSxcbiAgIG1hY3JvZXhwYW5kIHRoZSBmb3JtIG9uY2UuIiwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWNyb2V4cGFuZC0xXHJcbiBcIkdpdmVuIGEgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIGZvcm0sIGEgQ2xvanVyZVNjcmlwdCBmb3JtLFxcbiAgIG1hY3JvZXhwYW5kIHRoZSBmb3JtIG9uY2UuXCJcclxuIFtlbnYgZm9ybV1cclxuICh3cmFwcGluZy1lcnJvcnMgZW52IChtYWNyb2V4cGFuZC0xKiBlbnYgZm9ybSkpKVxyXG4ifSB7OnN5bSByZXNvbHZlLW1hY3JvLXZhciwgOm1ldGEgezpkb2MgIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBzeW0sIGEgc3ltYm9sLCByZXNvbHZlIGEgbWFjcm8uIiwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtbWFjcm8tdmFyXHJcbiBcIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBzeW0sIGEgc3ltYm9sLCByZXNvbHZlIGEgbWFjcm8uXCJcclxuIFtlbnYgc3ltXVxyXG4gKGxldFxyXG4gIFtuc1xyXG4gICAoLT4gZW52IDpucyA6bmFtZSlcclxuICAgbmFtZXNwYWNlc1xyXG4gICAoZ2V0IEBlbnYvKmNvbXBpbGVyKiA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzKV1cclxuICAoY29uZFxyXG4gICAoc29tZT8gKG5hbWVzcGFjZSBzeW0pKVxyXG4gICAobGV0XHJcbiAgICBbbnNcclxuICAgICAobmFtZXNwYWNlIHN5bSlcclxuICAgICBuc1xyXG4gICAgIChpZiAoPSBcImNsb2p1cmUuY29yZVwiIG5zKSBcImNsanMuY29yZVwiIG5zKVxyXG4gICAgIGZ1bGwtbnNcclxuICAgICAocmVzb2x2ZS1tYWNyby1ucy1hbGlhcyBlbnYgbnMpXHJcbiAgICAgIz9AKDpjbGpzIFtmdWxsLW5zIChpZi1ub3QgKHN0cmluZy9lbmRzLXdpdGg/IChzdHIgZnVsbC1ucykgXCIkbWFjcm9zXCIpIChzeW1ib2wgKHN0ciBmdWxsLW5zIFwiJG1hY3Jvc1wiKSkgZnVsbC1ucyldKV1cclxuICAgICM/KDpjbGogKGdldC1pbiBuYW1lc3BhY2VzIFtmdWxsLW5zIDptYWNyb3MgKHN5bWJvbCAobmFtZSBzeW0pKV0pIDpjbGpzIChnZXQtaW4gbmFtZXNwYWNlcyBbZnVsbC1ucyA6ZGVmcyAoc3ltYm9sIChuYW1lIHN5bSkpXSkpKVxyXG4gICAoc29tZT8gKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6dXNlLW1hY3JvcyBzeW1dKSlcclxuICAgKGxldFxyXG4gICAgW2Z1bGwtbnMgKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6dXNlLW1hY3JvcyBzeW1dKV1cclxuICAgIChnZXQtaW4gbmFtZXNwYWNlcyBbZnVsbC1ucyA6bWFjcm9zIHN5bV0pKVxyXG4gICAoc29tZT8gKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6cmVuYW1lLW1hY3JvcyBzeW1dKSlcclxuICAgKGxldFxyXG4gICAgW3F1YWxpZmllZC1zeW1ib2xcclxuICAgICAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDpyZW5hbWUtbWFjcm9zIHN5bV0pXHJcbiAgICAgZnVsbC1uc1xyXG4gICAgIChzeW1ib2wgKG5hbWVzcGFjZSBxdWFsaWZpZWQtc3ltYm9sKSlcclxuICAgICBzeW1cclxuICAgICAoc3ltYm9sIChuYW1lIHF1YWxpZmllZC1zeW1ib2wpKV1cclxuICAgIChnZXQtaW4gbmFtZXNwYWNlcyBbZnVsbC1ucyA6bWFjcm9zIHN5bV0pKVxyXG4gICA6ZWxzZVxyXG4gICAobGV0XHJcbiAgICBbbnNcclxuICAgICAoY29uZFxyXG4gICAgICAoc29tZT8gKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6bWFjcm9zIHN5bV0pKVxyXG4gICAgICBuc1xyXG4gICAgICAoY29yZS1uYW1lPyBlbnYgc3ltKVxyXG4gICAgICAjPyg6Y2xqIChxdW90ZSBjbGpzLmNvcmUpIDpjbGpzIENMSlNfQ09SRV9NQUNST1NfU1lNKSldXHJcbiAgICAod2hlblxyXG4gICAgIChzb21lPyBucylcclxuICAgICAjPyg6Y2xqIChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOm1hY3JvcyBzeW1dKSA6Y2xqcyAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDpkZWZzIHN5bV0pKSkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LWJpbmRpbmctaW5pdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgaW5pdCBsb29wLWxldHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldC1iaW5kaW5nLWluaXRcclxuIFtlbnYgaW5pdCBsb29wLWxldHNdXHJcbiAoYmluZGluZyBbKmxvb3AtbGV0cyogbG9vcC1sZXRzXSAoYW5hbHl6ZSBlbnYgaW5pdCkpKVxyXG4ifSB7OnN5bSBpbmZlci10YWcsIDptZXRhIHs6ZG9jICJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgZSwgYW4gQVNUIG5vZGUsIHJldHVybiB0aGUgaW5mZXJyZWRcbiAgIHR5cGUgb2YgdGhlIG5vZGUiLCA6YXJnbGlzdHMgKFtlbnYgZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVyLXRhZ1xyXG4gXCJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgZSwgYW4gQVNUIG5vZGUsIHJldHVybiB0aGUgaW5mZXJyZWRcXG4gICB0eXBlIG9mIHRoZSBub2RlXCJcclxuIFtlbnYgZV1cclxuIChpZi1zb21lXHJcbiAgW3RhZyAoZ2V0LXRhZyBlKV1cclxuICB0YWdcclxuICAoY2FzZVxyXG4gICAoOm9wIGUpXHJcbiAgIDpyZWN1clxyXG4gICBJR05PUkVfU1lNXHJcbiAgIDp0aHJvd1xyXG4gICBJR05PUkVfU1lNXHJcbiAgIDpsZXRcclxuICAgKGluZmVyLXRhZyBlbnYgKDpib2R5IGUpKVxyXG4gICA6bG9vcFxyXG4gICAoaW5mZXItdGFnIGVudiAoOmJvZHkgZSkpXHJcbiAgIDpkb1xyXG4gICAoaW5mZXItdGFnIGVudiAoOnJldCBlKSlcclxuICAgOmZuLW1ldGhvZFxyXG4gICAoaW5mZXItdGFnIGVudiAoOmJvZHkgZSkpXHJcbiAgIDpkZWZcclxuICAgKGluZmVyLXRhZyBlbnYgKDppbml0IGUpKVxyXG4gICA6aW52b2tlXHJcbiAgIChpbmZlci1pbnZva2UgZW52IGUpXHJcbiAgIDppZlxyXG4gICAoaW5mZXItaWYgZW52IGUpXHJcbiAgIDpjb25zdFxyXG4gICAoY2FzZSAoOmZvcm0gZSkgdHJ1ZSBCT09MRUFOX1NZTSBmYWxzZSBCT09MRUFOX1NZTSBBTllfU1lNKVxyXG4gICA6cXVvdGVcclxuICAgKGluZmVyLXRhZyBlbnYgKDpleHByIGUpKVxyXG4gICAoOnZhciA6bG9jYWwgOmpzLXZhciA6YmluZGluZylcclxuICAgKGlmLXNvbWVcclxuICAgIFtpbml0ICg6aW5pdCBlKV1cclxuICAgIChpbmZlci10YWcgZW52IGluaXQpXHJcbiAgICAoaW5mZXItdGFnIGVudiAoOmluZm8gZSkpKVxyXG4gICAoOmhvc3QtZmllbGQgOmhvc3QtY2FsbClcclxuICAgQU5ZX1NZTVxyXG4gICA6anNcclxuICAgQU5ZX1NZTVxyXG4gICBuaWwpKSlcclxuIn0gezpzeW0gY2Fub25pY2FsaXplLWltcG9ydC1zcGVjcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbm9uaWNhbGl6ZS1pbXBvcnQtc3BlY3NcclxuIFtzcGVjc11cclxuIChsZXRmblxyXG4gIFsoY2Fub25pY2FsaXplXHJcbiAgICBbcXVvdGVkLXNwZWMtb3Ita3ddXHJcbiAgICAoaWZcclxuICAgICAoa2V5d29yZD8gcXVvdGVkLXNwZWMtb3Ita3cpXHJcbiAgICAgcXVvdGVkLXNwZWMtb3Ita3dcclxuICAgICAoc2Vjb25kIHF1b3RlZC1zcGVjLW9yLWt3KSkpXVxyXG4gIChtYXAgY2Fub25pY2FsaXplIHNwZWNzKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZm9ybS1zZXEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZm9ybXNdIFtmb3JtcyBvcHRzXSBbZm9ybXMgb3B0cyByZXR1cm4tbGFzdD9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWZvcm0tc2VxXHJcbiAoW2Zvcm1zXVxyXG4gIChhbmFseXplLWZvcm0tc2VxXHJcbiAgIGZvcm1zXHJcbiAgICh3aGVuIGVudi8qY29tcGlsZXIqICg6b3B0aW9ucyBAZW52Lypjb21waWxlciopKSkpXHJcbiAoW2Zvcm1zIG9wdHNdIChhbmFseXplLWZvcm0tc2VxIGZvcm1zIG9wdHMgZmFsc2UpKVxyXG4gKFtmb3JtcyBvcHRzIHJldHVybi1sYXN0P11cclxuICAobGV0XHJcbiAgIFtlbnYgKGFzc29jIChlbXB0eS1lbnYpIDpidWlsZC1vcHRpb25zIG9wdHMpXVxyXG4gICAoYmluZGluZ1xyXG4gICAgWypmaWxlLWRlZnMqXHJcbiAgICAgbmlsXHJcbiAgICAgIz9AKDpjbGogWyp1bmNoZWNrZWQtaWYqIGZhbHNlICp1bmNoZWNrZWQtYXJyYXlzKiBmYWxzZV0pXHJcbiAgICAgKmNsanMtbnMqXHJcbiAgICAgJ2NsanMudXNlclxyXG4gICAgICpjbGpzLWZpbGUqXHJcbiAgICAgbmlsXHJcbiAgICAgcmVhZGVyLyphbGlhcy1tYXAqXHJcbiAgICAgKG9yIHJlYWRlci8qYWxpYXMtbWFwKiB7fSldXHJcbiAgICAobG9vcFxyXG4gICAgIFtucyBuaWwgZm9ybXMgZm9ybXMgbGFzdC1hc3QgbmlsXVxyXG4gICAgIChpZlxyXG4gICAgICAoc29tZT8gZm9ybXMpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtmb3JtXHJcbiAgICAgICAgKGZpcnN0IGZvcm1zKVxyXG4gICAgICAgIGVudlxyXG4gICAgICAgIChhc3NvYyBlbnYgOm5zIChnZXQtbmFtZXNwYWNlICpjbGpzLW5zKikpXHJcbiAgICAgICAgYXN0XHJcbiAgICAgICAgKGFuYWx5emUgZW52IGZvcm0gbmlsIG9wdHMpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKD0gKDpvcCBhc3QpIDpucylcclxuICAgICAgICAocmVjdXIgKDpuYW1lIGFzdCkgKG5leHQgZm9ybXMpIGFzdClcclxuICAgICAgICAocmVjdXIgbnMgKG5leHQgZm9ybXMpIGFzdCkpKVxyXG4gICAgICAoaWYgcmV0dXJuLWxhc3Q/IGxhc3QtYXN0IG5zKSkpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWxldC1ib2R5KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgY29udGV4dCBleHByc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0LWJvZHkqXHJcbiBbZW52IGNvbnRleHQgZXhwcnNdXHJcbiAoYW5hbHl6ZVxyXG4gIChhc3NvYyBlbnYgOmNvbnRleHQgKGlmICg9IDpleHByIGNvbnRleHQpIDpyZXR1cm4gY29udGV4dCkpXHJcbiAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgKGNsb2p1cmUuY29yZS9jb25jYXQgKGNsb2p1cmUuY29yZS9saXN0ICdkbykgZXhwcnMpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWpzLXN0YXIqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBqc2Zvcm0gYXJncyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1qcy1zdGFyKlxyXG4gW2VudiBqc2Zvcm0gYXJncyBmb3JtXVxyXG4gKGxldFxyXG4gIFtlbnZlXHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGZvcm0tbWV0YVxyXG4gICAobWV0YSBmb3JtKVxyXG4gICBzZWdzXHJcbiAgIChqcy1zdGFyLXNlZyBqc2Zvcm0pXHJcbiAgIHRhZ1xyXG4gICAoZ2V0LWpzLXRhZyBmb3JtKVxyXG4gICBqcy1vcFxyXG4gICAoOmpzLW9wIGZvcm0tbWV0YSlcclxuICAgYXJnZXhwcnNcclxuICAgKGFuYWx5emUtanMtc3Rhci1hcmdzIGpzLW9wIGVudmUgYXJncylcclxuICAgbnVtZXJpY1xyXG4gICAoOm51bWVyaWMgZm9ybS1tZXRhKVxyXG4gICB2YWxpZGF0ZVxyXG4gICAoZm5cclxuICAgIFt3YXJuaW5nLXR5cGUgdmFsaWQtdHlwZXM/XVxyXG4gICAgKGxldFxyXG4gICAgIFt0eXBlc1xyXG4gICAgICAobWFwIChmbiogW3AxX180ODYzMCNdIChpbmZlci10YWcgZW52IHAxX180ODYzMCMpKSBhcmdleHBycyldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgICh2YWxpZC10eXBlcz8gdHlwZXMpXHJcbiAgICAgICh3YXJuaW5nXHJcbiAgICAgICB3YXJuaW5nLXR5cGVcclxuICAgICAgIGVudlxyXG4gICAgICAgezpqcy1vcCBqcy1vcCwgOnR5cGVzIChpbnRvIFtdIHR5cGVzKX0pKSkpXHJcbiAgIG9wLW1hdGNoP1xyXG4gICAoZm5cclxuICAgIFtzeW1dXHJcbiAgICAjPyg6Y2xqICg9IHN5bSAoOmpzLW9wIGZvcm0tbWV0YSkpIDpjbGpzIChzeW1ib2wtaWRlbnRpY2FsPyBzeW0gKDpqcy1vcCBmb3JtLW1ldGEpKSkpXVxyXG4gICh3aGVuXHJcbiAgICh0cnVlPyBudW1lcmljKVxyXG4gICAodmFsaWRhdGVcclxuICAgIDppbnZhbGlkLWFyaXRobWV0aWNcclxuICAgIChmbiogW3AxX180ODYzMSNdIChldmVyeT8gbnVtZXJpYy10eXBlPyBwMV9fNDg2MzEjKSkpKVxyXG4gIHs6YXJncyBhcmdleHBycyxcclxuICAgOmNoaWxkcmVuIFs6YXJnc10sXHJcbiAgIDpudW1lcmljIG51bWVyaWMsXHJcbiAgIDpzZWdzIHNlZ3MsXHJcbiAgIDpvcCA6anMsXHJcbiAgIDplbnYgZW52LFxyXG4gICA6anMtb3AganMtb3AsXHJcbiAgIDpmb3JtIGZvcm0sXHJcbiAgIDp0YWcgdGFnfSkpXHJcbiJ9IHs6c3ltIGluZmVycmVkLXJlbmFtZS1tYWNyb3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVuYW1lLW1hY3JvcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlcnJlZC1yZW5hbWUtbWFjcm9zXHJcbiBbcmVuYW1lLW1hY3JvcyBlbnZdXHJcbiAoaW50b1xyXG4gIHt9XHJcbiAgKGZpbHRlclxyXG4gICAoZm4gW1tfIHF1YWxpZmllZC1zeW1dXSAobm90IChtaXNzaW5nLXJlbmFtZS1tYWNybz8gcXVhbGlmaWVkLXN5bSkpKVxyXG4gICByZW5hbWUtbWFjcm9zKSkpXHJcbiJ9IHs6c3ltIHBhcnNlLW5zLWVycm9yLW1zZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIG1zZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gW3NwZWMgbXNnXVxyXG4gKHN0ciBtc2cgXCI7IG9mZmVuZGluZyBzcGVjOiBcIiAocHItc3RyIHNwZWMpKSlcclxuIn0gezpzeW0gbWlzc2luZy11c2UtbWFjcm8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2xpYiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXVzZS1tYWNybz9cclxuIFtsaWIgc3ltXVxyXG4gKHdoZW5cclxuICAoc3ltYm9sPyBsaWIpXHJcbiAgKGxldFxyXG4gICBbdGhlLW5zICM/KDpjbGogKGZpbmQtbnMgbGliKSA6Y2xqcyAoZmluZC1tYWNyb3MtbnMgbGliKSldXHJcbiAgIChvciAobmlsPyB0aGUtbnMpIChuaWw/ICguZmluZEludGVybmVkVmFyIHRoZS1ucyBzeW0pKSkpKSlcclxuIn0gezpzeW0gcmVjb3JkLW5zK25hbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlY29yZC1ucytuYW1lXHJcbiBbeF1cclxuIChtYXBcclxuICBzeW1ib2xcclxuICAjPyg6Y2xqICgoanV4dCAoY29tcCAoZm4qIFtwMV9fNDg2NDIjXSAoc3RyaW5nL2pvaW4gXCIuXCIgcDFfXzQ4NjQyIykpIGJ1dGxhc3QpIGxhc3QpIChzdHJpbmcvc3BsaXQgKC5nZXROYW1lICh0eXBlIHgpKSAjXCJcXC5cIikpIDpjbGpzIChzdHJpbmcvc3BsaXQgKHByLXN0ciAodHlwZSB4KSkgI1wiL1wiKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplZCwgOm1ldGEgezpkb2MgIk1hcmsgYSBmb3JtIGFzIGJlaW5nIGFuYWx5emVkLiBBc3N1bWVzIHggc2F0aXNmaWVzIElNZXRhLiBVc2VmdWwgdG8gc3VwcHJlc3NcbiAgd2FybmluZ3MgdGhhdCB3aWxsIGhhdmUgYmVlbiBjYXVnaHQgYnkgYSBmaXJzdCBjb21waWxlciBwYXNzLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplZFxyXG4gXCJNYXJrIGEgZm9ybSBhcyBiZWluZyBhbmFseXplZC4gQXNzdW1lcyB4IHNhdGlzZmllcyBJTWV0YS4gVXNlZnVsIHRvIHN1cHByZXNzXFxuICB3YXJuaW5ncyB0aGF0IHdpbGwgaGF2ZSBiZWVuIGNhdWdodCBieSBhIGZpcnN0IGNvbXBpbGVyIHBhc3MuXCJcclxuIFt4XVxyXG4gKGNvbmRcclxuICAodW5zb3J0ZWQtbWFwPyB4KVxyXG4gIChhc3NvYyB4IDpjbGpzLmFuYWx5emVyL2FuYWx5emVkIHRydWUpXHJcbiAgOmVsc2VcclxuICAodmFyeS1tZXRhIHggYXNzb2MgOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQgdHJ1ZSkpKVxyXG4ifSB7OnN5bSByZXNvbHZlLXN5bWJvbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXN5bWJvbFxyXG4gW3N5bV1cclxuIChpZlxyXG4gIChhbmQgKG5vdCAobmFtZXNwYWNlIHN5bSkpIChkb3R0ZWQtc3ltYm9sPyBzeW0pKVxyXG4gIHN5bVxyXG4gICg6bmFtZVxyXG4gICAoYmluZGluZ1xyXG4gICAgWypwcml2YXRlLXZhci1hY2Nlc3Mtbm93YXJuKiB0cnVlXVxyXG4gICAgKHJlc29sdmUtdmFyXHJcbiAgICAgKGFzc29jIEBlbnYvKmNvbXBpbGVyKiA6bnMgKGdldC1uYW1lc3BhY2UgKmNsanMtbnMqKSlcclxuICAgICBzeW0pKSkpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXJlbmFtZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVuYW1lcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXJlbmFtZXNcclxuIFtyZW5hbWVzIGVudl1cclxuIChsZXRcclxuICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgKGludG9cclxuICAge31cclxuICAgKGZpbHRlclxyXG4gICAgKGZuIFtbXyBxdWFsaWZpZWQtc3ltXV0gKG1pc3NpbmctcmVuYW1lPyBxdWFsaWZpZWQtc3ltIGNlbnYpKVxyXG4gICAgcmVuYW1lcykpKSlcclxuIn0gezpzeW0gZGVmYXVsdC1wYXNzZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBkZWZhdWx0LXBhc3Nlc1xyXG4gIz8oOmNsaiBbaW5mZXItdHlwZSBjaGVjay1pbnZva2UtYXJnLXR5cGVzIG5zLXNpZGUtZWZmZWN0c10gOmNsanMgW2luZmVyLXR5cGUgY2hlY2staW52b2tlLWFyZy10eXBlc10pKVxyXG4ifSB7OnN5bSAqY2xqcy1tYWNyb3MtcGF0aCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLW1hY3Jvcy1wYXRoKiBcIi9jbGpzL2NvcmVcIilcclxuIn0gezpzeW0gY29uZmlybS12YXItZXhpc3Qtd2FybmluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgcHJlZml4IHN1ZmZpeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZpcm0tdmFyLWV4aXN0LXdhcm5pbmdcclxuIFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuIChmblxyXG4gIFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuICAod2FybmluZ1xyXG4gICA6dW5kZWNsYXJlZC12YXJcclxuICAgZW52XHJcbiAgIHs6cHJlZml4IHByZWZpeCxcclxuICAgIDpzdWZmaXggc3VmZml4LFxyXG4gICAgOm1hY3JvLXByZXNlbnQ/XHJcbiAgICAobm90XHJcbiAgICAgKG5pbD8gKGdldC1leHBhbmRlciAoc3ltYm9sIChzdHIgcHJlZml4KSAoc3RyIHN1ZmZpeCkpIGVudikpKX0pKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWFycmF5cz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtYXJyYXlzPyBbXSAqdW5jaGVja2VkLWFycmF5cyopXHJcbiJ9IHs6c3ltIGFuYWx5emUtZG90LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB0YXJnZXQgZmllbGQgbWVtYmVyKyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1kb3RcclxuIFtlbnYgdGFyZ2V0IGZpZWxkIG1lbWJlcisgZm9ybV1cclxuIChsZXRcclxuICBbdlxyXG4gICBbdGFyZ2V0IGZpZWxkIG1lbWJlcitdXHJcbiAgIHs6a2V5cyBbZG90LWFjdGlvbiB0YXJnZXQgbWV0aG9kIGZpZWxkIGFyZ3NdfVxyXG4gICAoYnVpbGQtZG90LWZvcm0gdilcclxuICAgZW52ZVxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICB0YXJnZXRleHByXHJcbiAgIChhbmFseXplIGVudmUgdGFyZ2V0KVxyXG4gICBmb3JtLW1ldGFcclxuICAgKG1ldGEgZm9ybSlcclxuICAgdGFyZ2V0LXRhZ1xyXG4gICAoOnRhZyB0YXJnZXRleHByKVxyXG4gICBwcm9wXHJcbiAgIChvciBmaWVsZCBtZXRob2QpXHJcbiAgIHRhZ1xyXG4gICAob3JcclxuICAgICg6dGFnIGZvcm0tbWV0YSlcclxuICAgIChhbmRcclxuICAgICAoanMtdGFnPyB0YXJnZXQtdGFnKVxyXG4gICAgICh2YXJ5LW1ldGFcclxuICAgICAgKG5vcm1hbGl6ZS1qcy10YWcgdGFyZ2V0LXRhZylcclxuICAgICAgdXBkYXRlLWluXHJcbiAgICAgIFs6cHJlZml4XVxyXG4gICAgICAoZm5pbCBjb25qICdbT2JqZWN0XSlcclxuICAgICAgcHJvcCkpXHJcbiAgICBuaWwpXVxyXG4gICh3aGVuXHJcbiAgIChhbmRcclxuICAgIChub3Q9ICdjb25zdHJ1Y3RvciBwcm9wKVxyXG4gICAgKG5vdCAoc3RyaW5nL3N0YXJ0cy13aXRoPyAoc3RyIHByb3ApIFwiY2xqcyRcIikpXHJcbiAgICAobm90ICgtPiBwcm9wIG1ldGEgOnByb3RvY29sLW1ldGhvZCkpKVxyXG4gICAod2hlblxyXG4gICAgKD0gJ09iamVjdCAoZmlyc3QgKC0+IHRhZyBtZXRhIDpwcmVmaXgpKSlcclxuICAgICh3YXJuaW5nXHJcbiAgICAgOmluZmVyLXdhcm5pbmdcclxuICAgICBlbnZcclxuICAgICB7Ondhcm4tdHlwZSA6b2JqZWN0LCA6Zm9ybSBmb3JtLCA6cHJvcGVydHkgcHJvcH0pKVxyXG4gICAod2hlblxyXG4gICAgKG5vdD0gJ2pzIHRhcmdldC10YWcpXHJcbiAgICAod2hlblxyXG4gICAgIChvciAobmlsPyB0YXJnZXQtdGFnKSAoJyN7YW55fSB0YXJnZXQtdGFnKSlcclxuICAgICAod2FybmluZ1xyXG4gICAgICA6aW5mZXItd2FybmluZ1xyXG4gICAgICBlbnZcclxuICAgICAgezp3YXJuLXR5cGUgOnRhcmdldCwgOmZvcm0gZm9ybSwgOnByb3BlcnR5IHByb3B9KSlcclxuICAgIChsZXRcclxuICAgICBbW3ByZScgcHJlXSAoKGp1eHQgYnV0bGFzdCBpZGVudGl0eSkgKC0+IHRhZyBtZXRhIDpwcmVmaXgpKV1cclxuICAgICAod2hlblxyXG4gICAgICAoYW5kIChoYXMtZXh0ZXJuPyBwcmUnKSAobm90IChoYXMtZXh0ZXJuPyBwcmUpKSlcclxuICAgICAgKHdhcm5pbmdcclxuICAgICAgIDppbmZlci13YXJuaW5nXHJcbiAgICAgICBlbnZcclxuICAgICAgIHs6d2Fybi10eXBlIDpwcm9wZXJ0eSxcclxuICAgICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgICAgIDp0eXBlXHJcbiAgICAgICAgKHN5bWJvbFxyXG4gICAgICAgICBcImpzXCJcclxuICAgICAgICAgKHN0cmluZy9qb2luXHJcbiAgICAgICAgICBcIi5cIlxyXG4gICAgICAgICAgKGNvbmQtPiBwcmUnICg9ICdwcm90b3R5cGUgKGxhc3QgcHJlJykpIGJ1dGxhc3QpKSksXHJcbiAgICAgICAgOnByb3BlcnR5IHByb3B9KSkpKSlcclxuICAod2hlblxyXG4gICAoanMtdGFnPyB0YWcpXHJcbiAgIChsZXRcclxuICAgIFtwcmUgKC0+IHRhZyBtZXRhIDpwcmVmaXgpXVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKGhhcy1leHRlcm4/IHByZSlcclxuICAgICAoc3dhcCFcclxuICAgICAgZW52Lypjb21waWxlcipcclxuICAgICAgdXBkYXRlLWluXHJcbiAgICAgIChpbnRvXHJcbiAgICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoLT4gZW52IDpucyA6bmFtZSkgOmV4dGVybnNdXHJcbiAgICAgICBwcmUpXHJcbiAgICAgIG1lcmdlXHJcbiAgICAgIHt9KSkpKVxyXG4gIChjYXNlXHJcbiAgIGRvdC1hY3Rpb25cclxuICAgOmNsanMuYW5hbHl6ZXIvYWNjZXNzXHJcbiAgIChsZXRcclxuICAgIFtjaGlsZHJlbiBbOnRhcmdldF1dXHJcbiAgICB7Om9wIDpob3N0LWZpZWxkLFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOnRhcmdldCB0YXJnZXRleHByLFxyXG4gICAgIDpmaWVsZCBmaWVsZCxcclxuICAgICA6Y2hpbGRyZW4gY2hpbGRyZW4sXHJcbiAgICAgOnRhZ1xyXG4gICAgIChpZlxyXG4gICAgICAoanMtdGFnPyB0YWcpXHJcbiAgICAgIChvciAoanMtdGFnICgtPiB0YWcgbWV0YSA6cHJlZml4KSA6dGFnKSB0YWcpXHJcbiAgICAgIHRhZyl9KVxyXG4gICA6Y2xqcy5hbmFseXplci9jYWxsXHJcbiAgIChsZXRcclxuICAgIFthcmdleHByc1xyXG4gICAgIChtYXB2IChmbiogW3AxX180ODYyOSNdIChhbmFseXplIGVudmUgcDFfXzQ4NjI5IykpIGFyZ3MpXHJcbiAgICAgY2hpbGRyZW5cclxuICAgICBbOnRhcmdldCA6YXJnc11dXHJcbiAgICB7Om9wIDpob3N0LWNhbGwsXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6dGFyZ2V0IHRhcmdldGV4cHIsXHJcbiAgICAgOm1ldGhvZCBtZXRob2QsXHJcbiAgICAgOmFyZ3MgYXJnZXhwcnMsXHJcbiAgICAgOmNoaWxkcmVuIGNoaWxkcmVuLFxyXG4gICAgIDp0YWdcclxuICAgICAoaWZcclxuICAgICAgKGpzLXRhZz8gdGFnKVxyXG4gICAgICAob3IgKGpzLXRhZyAoLT4gdGFnIG1ldGEgOnByZWZpeCkgOnJldC10YWcpICdqcylcclxuICAgICAgdGFnKX0pKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZG8tc3RhdGVtZW50cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZXhwcnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWRvLXN0YXRlbWVudHNcclxuIFtlbnYgZXhwcnNdXHJcbiAoZGlzYWxsb3dpbmctcmVjdXIgKGFuYWx5emUtZG8tc3RhdGVtZW50cyogZW52IGV4cHJzKSkpXHJcbiJ9IHs6c3ltIGdldC1saW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggZW52XSl9LCA6c291cmNlICIoZGVmbiBnZXQtbGluZSBbeCBlbnZdIChvciAoLT4geCBtZXRhIDpsaW5lKSAoOmxpbmUgZW52KSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZG8tc3RhdGVtZW50cyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGV4cHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1kby1zdGF0ZW1lbnRzKlxyXG4gW2VudiBleHByc11cclxuIChtYXB2XHJcbiAgKGZuKlxyXG4gICBbcDFfXzQ4NjA3I11cclxuICAgKGFuYWx5emUgKGFzc29jIGVudiA6Y29udGV4dCA6c3RhdGVtZW50KSBwMV9fNDg2MDcjKSlcclxuICAoYnV0bGFzdCBleHBycykpKVxyXG4ifSB7OnN5bSBhbmFseXplLXNlcSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnYgZm9ybSBuYW1lXSBbZW52IGZvcm0gbmFtZSBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zZXFcclxuIChbZW52IGZvcm0gbmFtZV1cclxuICAoYW5hbHl6ZS1zZXFcclxuICAgZW52XHJcbiAgIGZvcm1cclxuICAgbmFtZVxyXG4gICAod2hlbiBlbnYvKmNvbXBpbGVyKiAoOm9wdGlvbnMgQGVudi8qY29tcGlsZXIqKSkpKVxyXG4gKFtlbnYgZm9ybSBuYW1lIG9wdHNdXHJcbiAgKGlmXHJcbiAgICg6cXVvdGVkPyBlbnYpXHJcbiAgIChhbmFseXplLWxpc3QgZW52IGZvcm0pXHJcbiAgIChsZXRcclxuICAgIFtsaW5lXHJcbiAgICAgKC0+IGZvcm0gbWV0YSA6bGluZSlcclxuICAgICBsaW5lXHJcbiAgICAgKGlmIChuaWw/IGxpbmUpICg6bGluZSBlbnYpIGxpbmUpXHJcbiAgICAgY29sXHJcbiAgICAgKC0+IGZvcm0gbWV0YSA6Y29sdW1uKVxyXG4gICAgIGNvbFxyXG4gICAgIChpZiAobmlsPyBjb2wpICg6Y29sdW1uIGVudikgY29sKVxyXG4gICAgIGVudlxyXG4gICAgIChhc3NvYyBlbnYgOmxpbmUgbGluZSA6Y29sdW1uIGNvbCldXHJcbiAgICAobGV0XHJcbiAgICAgW29wIChmaXJzdCBmb3JtKV1cclxuICAgICAod2hlbiAobmlsPyBvcCkgKHRocm93IChlcnJvciBlbnYgXCJDYW4ndCBjYWxsIG5pbFwiKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbbWZvcm0gKG1hY3JvZXhwYW5kLTEgZW52IGZvcm0pXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpZGVudGljYWw/IGZvcm0gbWZvcm0pXHJcbiAgICAgICAoYW5hbHl6ZS1zZXEqLXdyYXAgb3AgZW52IGZvcm0gbmFtZSBvcHRzKVxyXG4gICAgICAgKGFuYWx5emUgZW52IG1mb3JtIG5hbWUgb3B0cykpKSkpKSkpXHJcbiJ9IHs6c3ltIGRlc3VnYXItZG90dGVkLWV4cHIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtvcF0sIDphcyBleHByfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlc3VnYXItZG90dGVkLWV4cHJcclxuIFt7OmtleXMgW29wXSwgOmFzIGV4cHJ9XVxyXG4gKGNhc2VcclxuICBvcFxyXG4gICg6dmFyIDpsb2NhbClcclxuICAoaWZcclxuICAgKGRvdHRlZC1zeW1ib2w/IChzeW1ib2wgKG5hbWUgKDpuYW1lIGV4cHIpKSkpXHJcbiAgIChsZXRcclxuICAgIFtzXHJcbiAgICAgKG5hbWUgKDpuYW1lIGV4cHIpKVxyXG4gICAgIGlkeFxyXG4gICAgICgubGFzdEluZGV4T2YgcyBcIi5cIilcclxuICAgICBfXHJcbiAgICAgKGFzc2VydCAobm90PSAoaW5jIGlkeCkgKGNvdW50IHMpKSlcclxuICAgICBwcmVmaXhcclxuICAgICAod2l0aC1tZXRhXHJcbiAgICAgIChzeW1ib2wgKG5hbWVzcGFjZSAoOm5hbWUgZXhwcikpIChzdWJzIHMgMCBpZHgpKVxyXG4gICAgICAobWV0YSAoOmZvcm0gZXhwcikpKVxyXG4gICAgIGZpZWxkXHJcbiAgICAgKHN5bWJvbCAoc3VicyBzIChpbmMgaWR4KSkpXVxyXG4gICAgKGFzc2VydCAobm90ICg6Y29uc3QtZXhwciBleHByKSkpXHJcbiAgICB7Om9wIDpob3N0LWZpZWxkLFxyXG4gICAgIDplbnYgKDplbnYgZXhwciksXHJcbiAgICAgOmZvcm0gKGxpc3QgJy4gcHJlZml4IGZpZWxkKSxcclxuICAgICA6dGFyZ2V0XHJcbiAgICAgKGRlc3VnYXItZG90dGVkLWV4cHJcclxuICAgICAgKC0+XHJcbiAgICAgICBleHByXHJcbiAgICAgICAoYXNzb2MgOm5hbWUgcHJlZml4IDpmb3JtIHByZWZpeClcclxuICAgICAgIChkaXNzb2MgOnRhZylcclxuICAgICAgIChhc3NvYy1pbiBbOmluZm8gOm5hbWVdIHByZWZpeClcclxuICAgICAgIChhc3NvYy1pbiBbOmVudiA6Y29udGV4dF0gOmV4cHIpKSksXHJcbiAgICAgOmZpZWxkIGZpZWxkLFxyXG4gICAgIDp0YWcgKDp0YWcgZXhwciksXHJcbiAgICAgOmNoaWxkcmVuIFs6dGFyZ2V0XX0pXHJcbiAgIGV4cHIpXHJcbiAgZXhwcikpXHJcbiJ9IHs6c3ltIGZpbmQtZGVmLWNsYXNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBucyBzZWdtZW50c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtZGVmLWNsYXNoXHJcbiBbZW52IG5zIHNlZ21lbnRzXVxyXG4gKGxldFxyXG4gIFt0by1jaGVja1xyXG4gICAobWFwXHJcbiAgICAoZm5cclxuICAgICBbeHNdXHJcbiAgICAgWyhzeW1ib2wgKHN0cmluZy9qb2luIFwiLlwiIChidXRsYXN0IHhzKSkpIChzeW1ib2wgKGxhc3QgeHMpKV0pXHJcbiAgICAoZHJvcCAyIChyZWR1Y3Rpb25zIGNvbmogW10gc2VnbWVudHMpKSldXHJcbiAgKGRvc2VxXHJcbiAgIFtbY2xhc2gtbnMgbmFtZV0gdG8tY2hlY2tdXHJcbiAgICh3aGVuXHJcbiAgICAoZ2V0LWluXHJcbiAgICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgY2xhc2gtbnMgOmRlZnMgbmFtZV0pXHJcbiAgICAod2FybmluZ1xyXG4gICAgIDpucy12YXItY2xhc2hcclxuICAgICBlbnZcclxuICAgICB7Om5zIG5zLCA6dmFyIChzeW1ib2wgKHN0ciBjbGFzaC1ucykgKHN0ciBuYW1lKSl9KSkpKSlcclxuIn0gezpzeW0gaGFzLWVycm9yLWRhdGE/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzLWVycm9yLWRhdGE/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtleF1cclxuIChjb250YWlucz8gKGV4LWRhdGEgZXgpIDpjbG9qdXJlLmVycm9yL3BoYXNlKSlcclxuIn0gezpzeW0gZm4tbmFtZS12YXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGxvY2FscyBuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm4tbmFtZS12YXJcclxuIFtlbnYgbG9jYWxzIG5hbWVdXHJcbiAod2hlblxyXG4gIChzb21lPyBuYW1lKVxyXG4gIChsZXRcclxuICAgW25zXHJcbiAgICAoLT4gZW52IDpucyA6bmFtZSlcclxuICAgIHNoYWRvd1xyXG4gICAgKGhhbmRsZS1zeW1ib2wtbG9jYWwgbmFtZSAoZ2V0IGxvY2FscyBuYW1lKSlcclxuICAgIHNoYWRvd1xyXG4gICAgKHdoZW4gKG5pbD8gc2hhZG93KSAoZ2V0LWluIGVudiBbOmpzLWdsb2JhbHMgbmFtZV0pKVxyXG4gICAgZm4tc2NvcGVcclxuICAgICg6Zm4tc2NvcGUgZW52KVxyXG4gICAgbmFtZS12YXJcclxuICAgIHs6bmFtZSBuYW1lLFxyXG4gICAgIDpvcCA6YmluZGluZyxcclxuICAgICA6bG9jYWwgOmZuLFxyXG4gICAgIDppbmZvXHJcbiAgICAgezpmbi1zZWxmLW5hbWUgdHJ1ZSwgOmZuLXNjb3BlIGZuLXNjb3BlLCA6bnMgbnMsIDpzaGFkb3cgc2hhZG93fX1cclxuICAgIHRhZ1xyXG4gICAgKC0+IG5hbWUgbWV0YSA6dGFnKVxyXG4gICAgcmV0LXRhZ1xyXG4gICAgKHdoZW4gKHNvbWU/IHRhZykgezpyZXQtdGFnIHRhZ30pXVxyXG4gICAobWVyZ2UgbmFtZS12YXIgcmV0LXRhZykpKSlcclxuIn0gezpzeW0gbXVuZ2Utbm9kZS1saWIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlLW5vZGUtbGliXHJcbiBbbmFtZV1cclxuIChzdHJcclxuICBcIm5vZGUkbW9kdWxlJFwiXHJcbiAgKG11bmdlXHJcbiAgIChzdHJpbmcvcmVwbGFjZSAoc3RyIG5hbWUpICNcIlsuXFwvXVwiICM/KDpjbGogXCJcXFxcJFwiIDpjbGpzIFwiJCRcIikpKSkpXHJcbiJ9IHs6c3ltICpsb2FkLW1hY3JvcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpsb2FkLW1hY3JvcyogdHJ1ZSlcclxuIn0gezpzeW0gYWRkLXR5cGVzLCA6bWV0YSB7OmRvYyAiUHJvZHVjZXMgYSB1bmlvbiBvZiB0eXBlcy4iLCA6YXJnbGlzdHMgW1tdIFt0MV0gW3QxIHQyXSBbdDEgdDIgJiB0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC10eXBlc1xyXG4gXCJQcm9kdWNlcyBhIHVuaW9uIG9mIHR5cGVzLlwiXHJcbiAoW10gJ2FueSlcclxuIChbdDFdIHQxKVxyXG4gKFt0MSB0Ml1cclxuICAoaWZcclxuICAgKG9yIChuaWw/IHQxKSAobmlsPyB0MikpXHJcbiAgICdhbnlcclxuICAgKC0+IChzZXQvdW5pb24gKC0+dHlwZS1zZXQgdDEpICgtPnR5cGUtc2V0IHQyKSkgY2Fub25pY2FsaXplLXR5cGUpKSlcclxuIChbdDEgdDIgJiB0c10gKGFwcGx5IGFkZC10eXBlcyAoYWRkLXR5cGVzIHQxIHQyKSB0cykpKVxyXG4ifSB7OnN5bSBleGNsdWRlZD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4Y2x1ZGVkP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHN5bV1cclxuIChvclxyXG4gIChzb21lPyAoZ2V0cyBlbnYgOm5zIDpleGNsdWRlcyBzeW0pKVxyXG4gIChzb21lP1xyXG4gICAoZ2V0c1xyXG4gICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAoZ2V0cyBlbnYgOm5zIDpuYW1lKVxyXG4gICAgOmV4Y2x1ZGVzXHJcbiAgICBzeW0pKSkpXHJcbiJ9IHs6c3ltIGVtcHR5LWVudiwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhbiBlbXB0eSBhbmFseXNpcyBlbnZpcm9ubWVudC4gUmVxdWlyZWQgdG8gYW5hbHl6ZSBmb3Jtcy4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbXB0eS1lbnZcclxuIFwiQ29uc3RydWN0IGFuIGVtcHR5IGFuYWx5c2lzIGVudmlyb25tZW50LiBSZXF1aXJlZCB0byBhbmFseXplIGZvcm1zLlwiXHJcbiBbXVxyXG4gKGVuc3VyZVxyXG4gIHs6bnMgKGdldC1uYW1lc3BhY2UgKmNsanMtbnMqKSxcclxuICAgOmNvbnRleHQgOnN0YXRlbWVudCxcclxuICAgOmxvY2FscyB7fSxcclxuICAgOmZuLXNjb3BlIFtdLFxyXG4gICA6anMtZ2xvYmFsc1xyXG4gICAoaW50b1xyXG4gICAge31cclxuICAgIChtYXBcclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDg1OTIjXVxyXG4gICAgICAodmVjdG9yIHAxX180ODU5MiMgezpvcCA6anMtdmFyLCA6bmFtZSBwMV9fNDg1OTIjLCA6bnMgJ2pzfSkpXHJcbiAgICAgJyhhbGVydFxyXG4gICAgICAgd2luZG93XHJcbiAgICAgICBkb2N1bWVudFxyXG4gICAgICAgY29uc29sZVxyXG4gICAgICAgZXNjYXBlXHJcbiAgICAgICB1bmVzY2FwZVxyXG4gICAgICAgc2NyZWVuXHJcbiAgICAgICBsb2NhdGlvblxyXG4gICAgICAgbmF2aWdhdG9yXHJcbiAgICAgICBoaXN0b3J5XHJcbiAgICAgICBsb2NhdGlvblxyXG4gICAgICAgZ2xvYmFsXHJcbiAgICAgICBwcm9jZXNzXHJcbiAgICAgICByZXF1aXJlXHJcbiAgICAgICBtb2R1bGVcclxuICAgICAgIGV4cG9ydHMpKSl9KSlcclxuIn0gezpzeW0gcHVibGljLW5hbWU/LCA6bWV0YSB7OmRvYyAiSXMgc3ltIHB1YmxpYz8iLCA6YXJnbGlzdHMgKFtucyBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwdWJsaWMtbmFtZT9cclxuIFwiSXMgc3ltIHB1YmxpYz9cIlxyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbbnMgc3ltXVxyXG4gKGxldFxyXG4gIFt2YXItYXN0XHJcbiAgIChvclxyXG4gICAgKGdldHMgQGVudi8qY29tcGlsZXIqIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOmRlZnMgc3ltKVxyXG4gICAgIz8oOmNsaiAoZ2V0cyAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDptYWNyb3Mgc3ltKSA6Y2xqcyAoZ2V0cyAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIChzeW1ib2wgKHN0ciAobmFtZSBucykgXCIkbWFjcm9zXCIpKSA6ZGVmcyBzeW0pKSldXHJcbiAgKGFuZFxyXG4gICAoc29tZT8gdmFyLWFzdClcclxuICAgKG5vdCAob3IgKDpwcml2YXRlIHZhci1hc3QpICg6YW5vbnltb3VzIHZhci1hc3QpKSkpKSlcclxuIn0gezpzeW0gZGVmYXVsdC13YXJuaW5nLWhhbmRsZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbd2FybmluZy10eXBlIGVudiBleHRyYV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZmF1bHQtd2FybmluZy1oYW5kbGVyXHJcbiBbd2FybmluZy10eXBlIGVudiBleHRyYV1cclxuICh3aGVuXHJcbiAgKHdhcm5pbmctdHlwZSAqY2xqcy13YXJuaW5ncyopXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtzIChlcnJvci1tZXNzYWdlIHdhcm5pbmctdHlwZSBleHRyYSldXHJcbiAgICM/KDpjbGogKGJpbmRpbmcgWypvdXQqICplcnIqXSAocHJpbnRsbiAobWVzc2FnZSBlbnYgKHN0ciBcIldBUk5JTkc6IFwiIHMpKSkpIDpjbGpzIChiaW5kaW5nIFsqcHJpbnQtZm4qICpwcmludC1lcnItZm4qXSAocHJpbnRsbiAobWVzc2FnZSBlbnYgKHN0ciBcIldBUk5JTkc6IFwiIHMpKSkpKSkpKVxyXG4ifSB7OnN5bSByZXNvbHZlLW5zLWFsaWFzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2VudiBuYW1lXSBbZW52IG5hbWUgbm90LWZvdW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1ucy1hbGlhc1xyXG4gKFtlbnYgbmFtZV0gKHJlc29sdmUtbnMtYWxpYXMgZW52IG5hbWUgKHN5bWJvbCBuYW1lKSkpXHJcbiAoW2VudiBuYW1lIG5vdC1mb3VuZF1cclxuICAobGV0IFtzeW0gKHN5bWJvbCBuYW1lKV0gKGdldCAoOnJlcXVpcmVzICg6bnMgZW52KSkgc3ltIG5vdC1mb3VuZCkpKSlcclxuIn0gezpzeW0gaW50ZXJuLW1hY3JvcywgOm1ldGEgezpkb2MgIkdpdmVuIGEgQ2xvanVyZSBuYW1lc3BhY2UgaW50ZXJuIGFsbCBtYWNyb3MgaW50byB0aGUgYW1iaWVudCBDbG9qdXJlU2NyaXB0XG4gICBhbmFseXNpcyBlbnZpcm9ubWVudC4iLCA6YXJnbGlzdHMgW1tuc10gW25zIHJlbG9hZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludGVybi1tYWNyb3NcclxuIFwiR2l2ZW4gYSBDbG9qdXJlIG5hbWVzcGFjZSBpbnRlcm4gYWxsIG1hY3JvcyBpbnRvIHRoZSBhbWJpZW50IENsb2p1cmVTY3JpcHRcXG4gICBhbmFseXNpcyBlbnZpcm9ubWVudC5cIlxyXG4gKFtuc10gKGludGVybi1tYWNyb3MgbnMgZmFsc2UpKVxyXG4gKFtucyByZWxvYWRdXHJcbiAgKHdoZW5cclxuICAgKG9yXHJcbiAgICAobmlsPyAoZ2V0cyBAZW52Lypjb21waWxlciogOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6bWFjcm9zKSlcclxuICAgIHJlbG9hZClcclxuICAgKHN3YXAhXHJcbiAgICBlbnYvKmNvbXBpbGVyKlxyXG4gICAgYXNzb2MtaW5cclxuICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDptYWNyb3NdXHJcbiAgICAoLT4+XHJcbiAgICAgIz8oOmNsaiAobnMtaW50ZXJucyBucykgOmNsanMgKG5zLWludGVybnMqIG5zKSlcclxuICAgICAoZmlsdGVyIChmbiBbW18gdl1dICguaXNNYWNybyB2KSkpXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm5cclxuICAgICAgIFtbayB2XV1cclxuICAgICAgIFtrXHJcbiAgICAgICAgKGFzLT5cclxuICAgICAgICAgKG1ldGEgdilcclxuICAgICAgICAgdm1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW25zICguZ2V0TmFtZSAoOm5zIHZtKSldXHJcbiAgICAgICAgICAoYXNzb2NcclxuICAgICAgICAgICB2bVxyXG4gICAgICAgICAgIDpuc1xyXG4gICAgICAgICAgIG5zXHJcbiAgICAgICAgICAgOm5hbWVcclxuICAgICAgICAgICAoc3ltYm9sIChzdHIgbnMpIChzdHIgaykpXHJcbiAgICAgICAgICAgOm1hY3JvXHJcbiAgICAgICAgICAgdHJ1ZSkpKV0pKVxyXG4gICAgIChpbnRvIHt9KSkpKSkpXHJcbiJ9IHs6c3ltIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbb3BdLCA6YXMgZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZVxyXG4gW3s6a2V5cyBbb3BdLCA6YXMgZX1dXHJcbiAoY2FzZVxyXG4gIG9wXHJcbiAgOnF1b3RlXHJcbiAgKGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlICg6ZXhwciBlKSlcclxuICA6Y29uc3RcclxuICAoOnZhbCBlKVxyXG4gIDptYXBcclxuICAoemlwbWFwXHJcbiAgIChtYXAgY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUgKDprZXlzIGUpKVxyXG4gICAobWFwIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlICg6dmFscyBlKSkpXHJcbiAgOnNldFxyXG4gIChpbnRvICN7fSAobWFwIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlICg6aXRlbXMgZSkpKVxyXG4gIDp2ZWN0b3JcclxuICAoaW50byBbXSAobWFwIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlICg6aXRlbXMgZSkpKSkpXHJcbiJ9IHs6c3ltIEJPT0xFQU5fT1JfU0VRLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBCT09MRUFOX09SX1NFUSAnI3tzZXEgYm9vbGVhbn0pXHJcbiJ9IHs6c3ltICptYWNyby1pbmZlciosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICptYWNyby1pbmZlciogdHJ1ZSlcclxuIn0gezpzeW0gZ2VuLWNvbnN0YW50LWlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2VuLWNvbnN0YW50LWlkXHJcbiBbdmFsdWVdXHJcbiAobGV0XHJcbiAgW3ByZWZpeFxyXG4gICAoY29uZFxyXG4gICAgKGtleXdvcmQ/IHZhbHVlKVxyXG4gICAgXCJjc3Qka3ckXCJcclxuICAgIChzeW1ib2w/IHZhbHVlKVxyXG4gICAgXCJjc3Qkc3ltJFwiXHJcbiAgICA6ZWxzZVxyXG4gICAgKHRocm93XHJcbiAgICAgIz8oOmNsaiAoRXhjZXB0aW9uLiAoc3RyIFwiY29uc3RhbnQgdHlwZSBcIiAodHlwZSB2YWx1ZSkgXCIgbm90IHN1cHBvcnRlZFwiKSkgOmNsanMgKGpzL0Vycm9yLiAoc3RyIFwiY29uc3RhbnQgdHlwZSBcIiAodHlwZSB2YWx1ZSkgXCIgbm90IHN1cHBvcnRlZFwiKSkpKSlcclxuICAgbmFtZVxyXG4gICAoaWYgKGtleXdvcmQ/IHZhbHVlKSAoc3VicyAoc3RyIHZhbHVlKSAxKSAoc3RyIHZhbHVlKSlcclxuICAgbmFtZVxyXG4gICAoaWZcclxuICAgICg9IFwiLlwiIG5hbWUpXHJcbiAgICBcIl9ET1RfXCJcclxuICAgICgtPlxyXG4gICAgIG5hbWVcclxuICAgICAoc3RyaW5nL3JlcGxhY2UgXCItXCIgXCJfREFTSF9cIilcclxuICAgICAobXVuZ2UpXHJcbiAgICAgKHN0cmluZy9yZXBsYWNlIFwiLlwiIFwiJFwiKVxyXG4gICAgIChzdHJpbmcvcmVwbGFjZVxyXG4gICAgICAjXCIoP2kpW15hLXowLTkkX11cIlxyXG4gICAgICAoZm4qIFtwMV9fNDg1OTEjXSAoaGV4LWZvcm1hdCBwMV9fNDg1OTEjIDQpKSkpKV1cclxuICAoc3ltYm9sIChzdHIgcHJlZml4IG5hbWUpKSkpXHJcbiJ9IHs6c3ltIEJPT0xFQU5fU1lNLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBCT09MRUFOX1NZTSAnYm9vbGVhbilcclxuIn0gezpzeW0gbWFjcm8tYXV0b2xvYWQtbnM/LCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGZvcm0gY2hlY2sgd2hldGhlciB0aGUgc3BlYyBuYW1lc3BhY2UgcmVxdWlyZXMgYSBtYWNybyBmaWxlXG4gICBvZiB0aGUgc2FtZSBuYW1lLiBJZiBzbyByZXR1cm4gdHJ1ZS4iLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFjcm8tYXV0b2xvYWQtbnM/XHJcbiBcIkdpdmVuIGEgc3BlYyBmb3JtIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWMgbmFtZXNwYWNlIHJlcXVpcmVzIGEgbWFjcm8gZmlsZVxcbiAgIG9mIHRoZSBzYW1lIG5hbWUuIElmIHNvIHJldHVybiB0cnVlLlwiXHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtmb3JtXVxyXG4gKHdoZW5cclxuICAqbWFjcm8taW5mZXIqXHJcbiAgKGxldFxyXG4gICBbbnNcclxuICAgIChpZiAoc2VxdWVudGlhbD8gZm9ybSkgKGZpcnN0IGZvcm0pIGZvcm0pXHJcbiAgICB7OmtleXMgW3VzZS1tYWNyb3MgcmVxdWlyZS1tYWNyb3NdfVxyXG4gICAgKG9yXHJcbiAgICAgKGdldC1pbiBAZW52Lypjb21waWxlciogWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnNdKVxyXG4gICAgICM/KDpjbGogKHdoZW4tbGV0IFtyZXMgKHV0aWwvbnMtPnNvdXJjZSBucyldICg6YXN0IChwYXJzZS1ucyByZXMpKSkpKV1cclxuICAgKG9yXHJcbiAgICAoc29tZSAje25zfSAodmFscyB1c2UtbWFjcm9zKSlcclxuICAgIChzb21lICN7bnN9ICh2YWxzIHJlcXVpcmUtbWFjcm9zKSkpKSkpXHJcbiJ9IHs6c3ltIGdldC10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC10YWdcclxuIFtlXVxyXG4gKGlmLXNvbWVcclxuICBbdGFnICgtPiBlIDpmb3JtIG1ldGEgOnRhZyldXHJcbiAgdGFnXHJcbiAgKGlmLXNvbWUgW3RhZyAoLT4gZSA6dGFnKV0gdGFnICgtPiBlIDppbmZvIDp0YWcpKSkpXHJcbiJ9IHs6c3ltIGltcGxpY2l0LW5zZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbXBsaWNpdC1uc2VzXHJcbiAnI3tTdHJpbmcgZ29vZy5zdHJpbmcgZ29vZyBnb29nLm9iamVjdCBNYXRoIGdvb2cuYXJyYXl9KVxyXG4ifSB7OnN5bSB2YWxpZC1wcm90bywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB2YWxpZC1wcm90byBbeF0gKHdoZW4gKHN5bWJvbD8geCkgeCkpXHJcbiJ9IHs6c3ltIG5vcm1hbGl6ZS1qcy10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vcm1hbGl6ZS1qcy10YWdcclxuIFt4XVxyXG4gKGlmLW5vdFxyXG4gICg9ICdqcyB4KVxyXG4gICh3aXRoLW1ldGFcclxuICAgJ2pzXHJcbiAgIHs6cHJlZml4XHJcbiAgICAoY29ualxyXG4gICAgICgtPj4gKHN0cmluZy9zcGxpdCAobmFtZSB4KSAjXCJcXC5cIikgKG1hcCBzeW1ib2wpIHZlYylcclxuICAgICAncHJvdG90eXBlKX0pXHJcbiAgeCkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGlzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGlzdFxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFtleHByLWVudlxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBpdGVtc1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgIChtYXB2IChmbiogW3AxX180ODYzNyNdIChhbmFseXplIGV4cHItZW52IHAxX180ODYzNyMpKSBmb3JtKSldXHJcbiAgKGFuYWx5emUtd3JhcC1tZXRhXHJcbiAgIHs6b3AgOmxpc3QsXHJcbiAgICA6ZW52IGVudixcclxuICAgIDpmb3JtIGZvcm0sXHJcbiAgICA6aXRlbXMgaXRlbXMsXHJcbiAgICA6Y2hpbGRyZW4gWzppdGVtc10sXHJcbiAgICA6dGFnICdjbGpzLmNvcmUvSUxpc3R9KSkpXHJcbiJ9IHs6c3ltIHdhcm5pbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbd2FybmluZy10eXBlIGVudiBleHRyYV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdhcm5pbmdcclxuIFt3YXJuaW5nLXR5cGUgZW52IGV4dHJhXVxyXG4gKGRvc2VxXHJcbiAgW2hhbmRsZXIgKmNsanMtd2FybmluZy1oYW5kbGVycypdXHJcbiAgKGhhbmRsZXIgd2FybmluZy10eXBlIGVudiBleHRyYSkpKVxyXG4ifSB7OnN5bSBpbXBsaWNpdC1pbXBvcnQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBwcmVmaXggc3VmZml4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW1wbGljaXQtaW1wb3J0P1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAoY29udGFpbnM/IGltcGxpY2l0LW5zZXMgcHJlZml4KSlcclxuIn0gezpzeW0gbWlzc2luZy11c2UtbWFjcm9zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3VzZS1tYWNyb3MgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy11c2UtbWFjcm9zXHJcbiBbdXNlLW1hY3JvcyBlbnZdXHJcbiAobGV0XHJcbiAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gIChpbnRvXHJcbiAgIHt9XHJcbiAgIChmaWx0ZXIgKGZuIFtbc3ltIGxpYl1dIChtaXNzaW5nLXVzZS1tYWNybz8gbGliIHN5bSkpIHVzZS1tYWNyb3MpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtIG5hbWUgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUqXHJcbiBbZW52IGZvcm0gbmFtZSBvcHRzXVxyXG4gKGxldFxyXG4gIFtwYXNzZXNcclxuICAgKnBhc3NlcypcclxuICAgcGFzc2VzXHJcbiAgIChpZiAobmlsPyBwYXNzZXMpIGRlZmF1bHQtcGFzc2VzIHBhc3NlcylcclxuICAgZm9ybVxyXG4gICAoaWYgKGluc3RhbmNlPyBMYXp5U2VxIGZvcm0pIChpZiAoc2VxIGZvcm0pIGZvcm0gKCkpIGZvcm0pXHJcbiAgIGFzdFxyXG4gICAoYW5hbHl6ZS1mb3JtIGVudiBmb3JtIG5hbWUgb3B0cyldXHJcbiAgKHJlZHVjZSAoZm4gW2FzdCBwYXNzXSAocGFzcyBlbnYgYXN0IG9wdHMpKSBhc3QgcGFzc2VzKSkpXHJcbiJ9IHs6c3ltIC1jbGpzLW1hY3Jvcy1sb2FkZWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIC1jbGpzLW1hY3Jvcy1sb2FkZWQgKGF0b20gZmFsc2UpKVxyXG4ifSB7OnN5bSBjaGVjay11c2VzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3VzZXMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stdXNlc1xyXG4gW3VzZXMgZW52XVxyXG4gKGxldFxyXG4gIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAoZG9zZXFcclxuICAgW1tzeW0gbGliXSB1c2VzXVxyXG4gICAod2hlblxyXG4gICAgKG1pc3NpbmctdXNlPyBsaWIgc3ltIGNlbnYpXHJcbiAgICAodGhyb3dcclxuICAgICAoZXJyb3JcclxuICAgICAgZW52XHJcbiAgICAgIChlcnJvci1tZXNzYWdlXHJcbiAgICAgICA6dW5kZWNsYXJlZC1ucy1mb3JtXHJcbiAgICAgICB7OnR5cGUgXCJ2YXJcIiwgOmxpYiBsaWIsIDpzeW0gc3ltfSkpKSkpKSlcclxuIn0gezpzeW0gZmluZC1tYXRjaGluZy1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZiBwYXJhbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLW1hdGNoaW5nLW1ldGhvZFxyXG4gW2YgcGFyYW1zXVxyXG4gKGxldFxyXG4gIFttZXRob2RzIChvciAoOm1ldGhvZHMgZikgKC0+IGYgOmluZm8gOm1ldGhvZHMpKSBjIChjb3VudCBwYXJhbXMpXVxyXG4gIChzb21lXHJcbiAgIChmbiBbbV0gKGFuZCAob3IgKD09ICg6Zml4ZWQtYXJpdHkgbSkgYykgKDp2YXJpYWRpYz8gbSkpIG0pKVxyXG4gICBtZXRob2RzKSkpXHJcbiJ9IHs6c3ltICpwcml2YXRlLXZhci1hY2Nlc3Mtbm93YXJuKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnByaXZhdGUtdmFyLWFjY2Vzcy1ub3dhcm4qIGZhbHNlKVxyXG4ifSB7OnN5bSBpbnZva2UtYXJnLXR5cGUtdmFsaWRhdG9ycywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludm9rZS1hcmctdHlwZS12YWxpZGF0b3JzXHJcbiAobGV0XHJcbiAgW2FnZXQtdmFsaWRhdG9yXHJcbiAgIHs6dmFsaWQ/XHJcbiAgICAoZm4qXHJcbiAgICAgW3AxX180ODY0NCNdXHJcbiAgICAgKGFuZFxyXG4gICAgICAoYXJyYXktdHlwZT8gKGZpcnN0IHAxX180ODY0NCMpKVxyXG4gICAgICAoZXZlcnk/IG51bWVyaWMtdHlwZT8gKHJlc3QgcDFfXzQ4NjQ0IykpKSksXHJcbiAgICA6d2FybmluZy10eXBlIDppbnZhbGlkLWFycmF5LWFjY2Vzc31cclxuICAgYXNldC12YWxpZGF0b3JcclxuICAgezp2YWxpZD9cclxuICAgIChmbipcclxuICAgICBbcDFfXzQ4NjQ1I11cclxuICAgICAoYW5kXHJcbiAgICAgIChhcnJheS10eXBlPyAoZmlyc3QgcDFfXzQ4NjQ1IykpXHJcbiAgICAgIChldmVyeT8gbnVtZXJpYy10eXBlPyAoYnV0bGFzdCAocmVzdCBwMV9fNDg2NDUjKSkpKSksXHJcbiAgICA6d2FybmluZy10eXBlIDppbnZhbGlkLWFycmF5LWFjY2Vzc31dXHJcbiAgeydjbGpzLmNvcmUvY2hlY2tlZC1hZ2V0IGFnZXQtdmFsaWRhdG9yLFxyXG4gICAnY2xqcy5jb3JlL2NoZWNrZWQtYXNldCBhc2V0LXZhbGlkYXRvcixcclxuICAgJ2NsanMuY29yZS9jaGVja2VkLWFnZXQnIGFnZXQtdmFsaWRhdG9yLFxyXG4gICAnY2xqcy5jb3JlL2NoZWNrZWQtYXNldCcgYXNldC12YWxpZGF0b3J9KSlcclxuIn0gezpzeW0gKmNsanMtZmlsZSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLWZpbGUqIG5pbClcclxuIn0gezpzeW0gKmZpbGUtZGVmcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpmaWxlLWRlZnMqIG5pbClcclxuIn0gezpzeW0gaW5mZXItaWYsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlci1pZlxyXG4gW2VudiBlXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW29wIGZvcm1dfVxyXG4gICAodW53cmFwLXF1b3RlICg6dGVzdCBlKSlcclxuICAgdGhlbi10YWdcclxuICAgKGluZmVyLXRhZyBlbnYgKDp0aGVuIGUpKV1cclxuICAoaWZcclxuICAgKGFuZFxyXG4gICAgIz8oOmNsaiAoPSBvcCA6Y29uc3QpIDpjbGpzIChrZXl3b3JkLWlkZW50aWNhbD8gb3AgOmNvbnN0KSlcclxuICAgIChub3QgKG5pbD8gZm9ybSkpXHJcbiAgICAobm90IChmYWxzZT8gZm9ybSkpKVxyXG4gICB0aGVuLXRhZ1xyXG4gICAobGV0XHJcbiAgICBbZWxzZS10YWcgKGluZmVyLXRhZyBlbnYgKDplbHNlIGUpKV1cclxuICAgIChjb25kXHJcbiAgICAgKG9yXHJcbiAgICAgICM/KDpjbGogKD0gdGhlbi10YWcgZWxzZS10YWcpIDpjbGpzIChzeW1ib2wtaWRlbnRpY2FsPyB0aGVuLXRhZyBlbHNlLXRhZykpXHJcbiAgICAgICM/KDpjbGogKD0gZWxzZS10YWcgSUdOT1JFX1NZTSkgOmNsanMgKHN5bWJvbC1pZGVudGljYWw/IGVsc2UtdGFnIElHTk9SRV9TWU0pKSlcclxuICAgICB0aGVuLXRhZ1xyXG4gICAgICM/KDpjbGogKD0gdGhlbi10YWcgSUdOT1JFX1NZTSkgOmNsanMgKHN5bWJvbC1pZGVudGljYWw/IHRoZW4tdGFnIElHTk9SRV9TWU0pKVxyXG4gICAgIGVsc2UtdGFnXHJcbiAgICAgKGFuZFxyXG4gICAgICAob3IgKHNvbWU/IChnZXQgTk9UX05BVElWRSB0aGVuLXRhZykpICh0eXBlPyBlbnYgdGhlbi10YWcpKVxyXG4gICAgICAob3IgKHNvbWU/IChnZXQgTk9UX05BVElWRSBlbHNlLXRhZykpICh0eXBlPyBlbnYgZWxzZS10YWcpKSlcclxuICAgICAnY2xqXHJcbiAgICAgOmVsc2VcclxuICAgICAoaWZcclxuICAgICAgKGFuZFxyXG4gICAgICAgKHNvbWU/IChnZXQgQk9PTEVBTl9PUl9TRVEgdGhlbi10YWcpKVxyXG4gICAgICAgKHNvbWU/IChnZXQgQk9PTEVBTl9PUl9TRVEgZWxzZS10YWcpKSlcclxuICAgICAgJ3NlcVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbdGhlbi10YWdcclxuICAgICAgICAoaWZcclxuICAgICAgICAgIz8oOmNsaiAoc2V0PyB0aGVuLXRhZykgOmNsanMgKGNsanMtc2V0PyB0aGVuLXRhZykpXHJcbiAgICAgICAgIHRoZW4tdGFnXHJcbiAgICAgICAgICN7dGhlbi10YWd9KVxyXG4gICAgICAgIGVsc2UtdGFnXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICM/KDpjbGogKHNldD8gZWxzZS10YWcpIDpjbGpzIChjbGpzLXNldD8gZWxzZS10YWcpKVxyXG4gICAgICAgICBlbHNlLXRhZ1xyXG4gICAgICAgICAje2Vsc2UtdGFnfSldXHJcbiAgICAgICAoaW50byB0aGVuLXRhZyBlbHNlLXRhZykpKSkpKSkpXHJcbiJ9IHs6c3ltICp2ZXJib3NlKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnZlcmJvc2UqIGZhbHNlKVxyXG4ifSB7OnN5bSBhbmFseXplLWpzLXZhbHVlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1qcy12YWx1ZVxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFt2YWwgKC4tdmFsIGZvcm0pIGV4cHItZW52IChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXVxyXG4gIChpZlxyXG4gICAobWFwPyB2YWwpXHJcbiAgIChsZXRcclxuICAgIFtrZXlzXHJcbiAgICAgKHZlYyAoa2V5cyB2YWwpKVxyXG4gICAgIHZhbHNcclxuICAgICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgICAgKG1hcHZcclxuICAgICAgIChmbiogW3AxX180ODY0MCNdIChhbmFseXplIGV4cHItZW52IHAxX180ODY0MCMpKVxyXG4gICAgICAgKHZhbHMgdmFsKSkpXVxyXG4gICAgezpvcCA6anMtb2JqZWN0LFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOmtleXMga2V5cyxcclxuICAgICA6dmFscyB2YWxzLFxyXG4gICAgIDpjaGlsZHJlbiBbOnZhbHNdLFxyXG4gICAgIDp0YWcgJ29iamVjdH0pXHJcbiAgIChsZXRcclxuICAgIFtpdGVtc1xyXG4gICAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgICAobWFwdiAoZm4qIFtwMV9fNDg2NDEjXSAoYW5hbHl6ZSBleHByLWVudiBwMV9fNDg2NDEjKSkgdmFsKSldXHJcbiAgICB7Om9wIDpqcy1hcnJheSxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDppdGVtcyBpdGVtcyxcclxuICAgICA6Y2hpbGRyZW4gWzppdGVtc10sXHJcbiAgICAgOnRhZyAnYXJyYXl9KSkpKVxyXG4ifSB7OnN5bSBucy0+bW9kdWxlLXR5cGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBucy0+bW9kdWxlLXR5cGVcclxuIFtuc11cclxuIChjb25kXHJcbiAgKGpzLW1vZHVsZS1leGlzdHM/IG5zKVxyXG4gIDpqc1xyXG4gIChub2RlLW1vZHVsZS1kZXA/IG5zKVxyXG4gIDpub2RlXHJcbiAgKGRlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/IG5zKVxyXG4gIDpnbG9iYWwpKVxyXG4ifSB7OnN5bSBzb3VyY2UtaW5mbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnZdIFtuYW1lIGVudl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1pbmZvXHJcbiAoW2Vudl0gKHdoZW4gKDpsaW5lIGVudikgKHNvdXJjZS1pbmZvIG5pbCBlbnYpKSlcclxuIChbbmFtZSBlbnZdXHJcbiAgKGNvbmQtPlxyXG4gICB7OmZpbGVcclxuICAgIChpZlxyXG4gICAgICg9ICgtPiBlbnYgOm5zIDpuYW1lKSAnY2xqcy5jb3JlKVxyXG4gICAgIFwiY2xqcy9jb3JlLmNsanNcIlxyXG4gICAgICpjbGpzLWZpbGUqKSxcclxuICAgIDpsaW5lIChnZXQtbGluZSBuYW1lIGVudiksXHJcbiAgICA6Y29sdW1uIChnZXQtY29sIG5hbWUgZW52KX1cclxuICAgKDpyb290LXNvdXJjZS1pbmZvIGVudilcclxuICAgKG1lcmdlIChzZWxlY3Qta2V5cyBlbnYgWzpyb290LXNvdXJjZS1pbmZvXSkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZm4tbWV0aG9kLXBhcmFtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Vudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZm4tbWV0aG9kLXBhcmFtXHJcbiBbZW52XVxyXG4gKGZuXHJcbiAgW1tsb2NhbHMgcGFyYW1zXSBbYXJnLWlkIG5hbWVdXVxyXG4gICh3aGVuXHJcbiAgIChuYW1lc3BhY2UgbmFtZSlcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3IgZW52IChzdHIgXCJDYW4ndCB1c2UgcXVhbGlmaWVkIG5hbWUgYXMgcGFyYW1ldGVyOiBcIiBuYW1lKSkpKVxyXG4gIChsZXRcclxuICAgW2xpbmVcclxuICAgIChnZXQtbGluZSBuYW1lIGVudilcclxuICAgIGNvbHVtblxyXG4gICAgKGdldC1jb2wgbmFtZSBlbnYpXHJcbiAgICBubWV0YVxyXG4gICAgKG1ldGEgbmFtZSlcclxuICAgIHRhZ1xyXG4gICAgKDp0YWcgbm1ldGEpXHJcbiAgICBzaGFkb3dcclxuICAgICh3aGVuIChzb21lPyBsb2NhbHMpIChoYW5kbGUtc3ltYm9sLWxvY2FsIG5hbWUgKGxvY2FscyBuYW1lKSkpXHJcbiAgICBlbnZcclxuICAgIChtZXJnZSAoc2VsZWN0LWtleXMgZW52IFs6Y29udGV4dF0pIHs6bGluZSBsaW5lLCA6Y29sdW1uIGNvbHVtbn0pXHJcbiAgICBwYXJhbVxyXG4gICAgezpuYW1lIG5hbWUsXHJcbiAgICAgOmJpbmRpbmctZm9ybT8gdHJ1ZSxcclxuICAgICA6b3AgOmJpbmRpbmcsXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmNvbHVtbiBjb2x1bW4sXHJcbiAgICAgOmxpbmUgbGluZSxcclxuICAgICA6YXJnLWlkIGFyZy1pZCxcclxuICAgICA6aW5mbyB7Om5hbWUgbmFtZSwgOnNoYWRvdyBzaGFkb3d9LFxyXG4gICAgIDp0YWcgdGFnLFxyXG4gICAgIDpzaGFkb3cgc2hhZG93LFxyXG4gICAgIDpsb2NhbCA6YXJnfV1cclxuICAgWyhhc3NvYyBsb2NhbHMgbmFtZSBwYXJhbSkgKGNvbmogcGFyYW1zIHBhcmFtKV0pKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXNldFxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFtleHByLWVudlxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBpdGVtc1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgIChtYXB2IChmbiogW3AxX180ODYzOSNdIChhbmFseXplIGV4cHItZW52IHAxX180ODYzOSMpKSBmb3JtKSldXHJcbiAgKGFuYWx5emUtd3JhcC1tZXRhXHJcbiAgIHs6b3AgOnNldCxcclxuICAgIDplbnYgZW52LFxyXG4gICAgOmZvcm0gZm9ybSxcclxuICAgIDppdGVtcyBpdGVtcyxcclxuICAgIDpjaGlsZHJlbiBbOml0ZW1zXSxcclxuICAgIDp0YWcgJ2NsanMuY29yZS9JU2V0fSkpKVxyXG4ifSB7OnN5bSBudW1lcmljLXR5cGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1lcmljLXR5cGU/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFt0XVxyXG4gKGNvbmRcclxuICAobmlsPyB0KVxyXG4gIHRydWVcclxuICAoPSAnY2xqLW5pbCB0KVxyXG4gIHRydWVcclxuICAoanMtdGFnPyB0KVxyXG4gIHRydWVcclxuICA6ZWxzZVxyXG4gIChpZlxyXG4gICAoYW5kIChzeW1ib2w/IHQpIChzb21lPyAoZ2V0IE5VTUVSSUNfU0VUIHQpKSlcclxuICAgdHJ1ZVxyXG4gICAod2hlblxyXG4gICAgIz8oOmNsaiAoc2V0PyB0KSA6Y2xqcyAoY2xqcy1zZXQ/IHQpKVxyXG4gICAgKG9yXHJcbiAgICAgKGNvbnRhaW5zPyB0ICdudW1iZXIpXHJcbiAgICAgKGNvbnRhaW5zPyB0ICdsb25nKVxyXG4gICAgIChjb250YWlucz8gdCAnZG91YmxlKVxyXG4gICAgIChjb250YWlucz8gdCAnYW55KVxyXG4gICAgIChjb250YWlucz8gdCAnanMpKSkpKSlcclxuIn0gezpzeW0gYXN0PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXN0P1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbeF1cclxuIChhbmQgKG1hcD8geCkgKGNvbnRhaW5zPyB4IDpvcCkpKVxyXG4ifSB7OnN5bSBjaGVja2VkLWFycmF5cywgOm1ldGEgezpkb2MgIlJldHVybnMgZmFsc2UteSwgOndhcm4sIG9yIDplcnJvciBiYXNlZCBvbiBjb25maWd1cmF0aW9uIGFuZCB0aGVcbiAgIGN1cnJlbnQgdmFsdWUgb2YgKnVuY2hlY2tlZC1hcnJheXMqLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrZWQtYXJyYXlzXHJcbiBcIlJldHVybnMgZmFsc2UteSwgOndhcm4sIG9yIDplcnJvciBiYXNlZCBvbiBjb25maWd1cmF0aW9uIGFuZCB0aGVcXG4gICBjdXJyZW50IHZhbHVlIG9mICp1bmNoZWNrZWQtYXJyYXlzKi5cIlxyXG4gW11cclxuICh3aGVuXHJcbiAgKGFuZCAobm90ICg6YWR2YW5jZWQgKGNvbXBpbGVyLW9wdGlvbnMpKSkgKG5vdCAqdW5jaGVja2VkLWFycmF5cyopKVxyXG4gICpjaGVja2VkLWFycmF5cyopKVxyXG4ifSB7OnN5bSBlbGlkZS1lbnYsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGFzdCBvcHRzXSl9LCA6c291cmNlICIoZGVmbiBlbGlkZS1lbnYgW2VudiBhc3Qgb3B0c10gKGRpc3NvYyBhc3QgOmVudikpXHJcbiJ9IHs6c3ltIGpzLW1vZHVsZS1leGlzdHM/KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYganMtbW9kdWxlLWV4aXN0cz8qIChtZW1vaXplIGludGVybmFsLWpzLW1vZHVsZS1leGlzdHM/KSlcclxuIn0gezpzeW0gcGFyc2UtcmVxdWlyZS1zcGVjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBtYWNyb3M/IGRlcHMgYWxpYXNlcyBzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtcmVxdWlyZS1zcGVjXHJcbiBbZW52IG1hY3Jvcz8gZGVwcyBhbGlhc2VzIHNwZWNdXHJcbiAoaWZcclxuICAob3IgKHN5bWJvbD8gc3BlYykgKHN0cmluZz8gc3BlYykpXHJcbiAgKHJlY3VyIGVudiBtYWNyb3M/IGRlcHMgYWxpYXNlcyBbc3BlY10pXHJcbiAgKGRvXHJcbiAgIChiYXNpYy12YWxpZGF0ZS1ucy1zcGVjIGVudiBtYWNyb3M/IHNwZWMpXHJcbiAgIChsZXRcclxuICAgIFtbbGliICYgb3B0c11cclxuICAgICBzcGVjXHJcbiAgICAgW2xpYiBqcy1tb2R1bGUtcHJvdmlkZXNdXHJcbiAgICAgKGlmLXNvbWVcclxuICAgICAgW2pzLW1vZHVsZS1uYW1lXHJcbiAgICAgICAoZ2V0cyBAZW52Lypjb21waWxlciogOmpzLW1vZHVsZS1pbmRleCAoc3RyIGxpYikgOm5hbWUpXVxyXG4gICAgICBbKHN5bWJvbCBqcy1tb2R1bGUtbmFtZSkgbGliXVxyXG4gICAgICBbbGliIG5pbF0pXHJcbiAgICAge2FsaWFzIDphcyxcclxuICAgICAgcmVmZXJyZWQgOnJlZmVyLFxyXG4gICAgICByZW5hbWVkIDpyZW5hbWUsXHJcbiAgICAgIDpvciB7YWxpYXMgKGlmIChzdHJpbmc/IGxpYikgKHN5bWJvbCAobXVuZ2UgbGliKSkgbGliKX19XHJcbiAgICAgKGFwcGx5IGhhc2gtbWFwIG9wdHMpXHJcbiAgICAgcmVmZXJyZWQtd2l0aG91dC1yZW5hbWVkXHJcbiAgICAgKHNlcSAocmVtb3ZlIChzZXQgKGtleXMgcmVuYW1lZCkpIHJlZmVycmVkKSlcclxuICAgICBbcmsgdWsgcmVua11cclxuICAgICAoaWZcclxuICAgICAgbWFjcm9zP1xyXG4gICAgICBbOnJlcXVpcmUtbWFjcm9zIDp1c2UtbWFjcm9zIDpyZW5hbWUtbWFjcm9zXVxyXG4gICAgICBbOnJlcXVpcmUgOnVzZSA6cmVuYW1lXSldXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAob3IgKHN5bWJvbD8gYWxpYXMpIChuaWw/IGFsaWFzKSlcclxuICAgICAodGhyb3dcclxuICAgICAgKGVycm9yXHJcbiAgICAgICBlbnZcclxuICAgICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgICBzcGVjXHJcbiAgICAgICAgXCI6YXMgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHN5bWJvbCBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKVxyXG4gICAgKHdoZW5cclxuICAgICAoc29tZT8gYWxpYXMpXHJcbiAgICAgKGxldFxyXG4gICAgICBbYWxpYXMtdHlwZVxyXG4gICAgICAgKGlmIG1hY3Jvcz8gOm1hY3JvcyA6Zm5zKVxyXG4gICAgICAgbGliJ1xyXG4gICAgICAgKChhbGlhcy10eXBlIEBhbGlhc2VzKSBhbGlhcyldXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoYW5kIChzb21lPyBsaWInKSAobm90PSBsaWIgbGliJykpXHJcbiAgICAgICAodGhyb3dcclxuICAgICAgICAoZXJyb3JcclxuICAgICAgICAgZW52XHJcbiAgICAgICAgIChwYXJzZS1ucy1lcnJvci1tc2cgc3BlYyBcIjphcyBhbGlhcyBtdXN0IGJlIHVuaXF1ZVwiKSkpKVxyXG4gICAgICAoc3dhcCFcclxuICAgICAgIGFsaWFzZXNcclxuICAgICAgIHVwZGF0ZS1pblxyXG4gICAgICAgW2FsaWFzLXR5cGVdXHJcbiAgICAgICBjb25qXHJcbiAgICAgICBbYWxpYXMgbGliXVxyXG4gICAgICAgKHdoZW4ganMtbW9kdWxlLXByb3ZpZGVzIFtqcy1tb2R1bGUtcHJvdmlkZXMgbGliXSkpKSlcclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChvclxyXG4gICAgICAoYW5kIChzZXF1ZW50aWFsPyByZWZlcnJlZCkgKGV2ZXJ5PyBzeW1ib2w/IHJlZmVycmVkKSlcclxuICAgICAgKG5pbD8gcmVmZXJyZWQpKVxyXG4gICAgICh0aHJvd1xyXG4gICAgICAoZXJyb3JcclxuICAgICAgIGVudlxyXG4gICAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICAgIHNwZWNcclxuICAgICAgICBcIjpyZWZlciBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2Ugb2Ygc3ltYm9scyBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKVxyXG4gICAgKHdoZW4tbm90IG1hY3Jvcz8gKHN3YXAhIGRlcHMgY29uaiBsaWIpKVxyXG4gICAgKG1lcmdlXHJcbiAgICAgKHdoZW5cclxuICAgICAgKHNvbWU/IGFsaWFzKVxyXG4gICAgICB7cmtcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIHthbGlhcyBsaWJ9XHJcbiAgICAgICAge2xpYiBsaWJ9XHJcbiAgICAgICAgKHdoZW4ganMtbW9kdWxlLXByb3ZpZGVzIHtqcy1tb2R1bGUtcHJvdmlkZXMgbGlifSkpfSlcclxuICAgICAod2hlblxyXG4gICAgICAoc29tZT8gcmVmZXJyZWQtd2l0aG91dC1yZW5hbWVkKVxyXG4gICAgICB7dWtcclxuICAgICAgIChhcHBseVxyXG4gICAgICAgIGhhc2gtbWFwXHJcbiAgICAgICAgKGludGVybGVhdmUgcmVmZXJyZWQtd2l0aG91dC1yZW5hbWVkIChyZXBlYXQgbGliKSkpfSlcclxuICAgICAod2hlblxyXG4gICAgICAoc29tZT8gcmVuYW1lZClcclxuICAgICAge3JlbmtcclxuICAgICAgIChyZWR1Y2VcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW20gW29yaWdpbmFsIHJlbmFtZWRdXVxyXG4gICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgIChzb21lICN7b3JpZ2luYWx9IHJlZmVycmVkKVxyXG4gICAgICAgICAgKHRocm93XHJcbiAgICAgICAgICAgKGVycm9yXHJcbiAgICAgICAgICAgIGVudlxyXG4gICAgICAgICAgICAoc3RyIFwiUmVuYW1lZCBzeW1ib2wgXCIgb3JpZ2luYWwgXCIgbm90IHJlZmVycmVkXCIpKSkpXHJcbiAgICAgICAgIChhc3NvYyBtIHJlbmFtZWQgKHN5bWJvbCAoc3RyIGxpYikgKHN0ciBvcmlnaW5hbCkpKSlcclxuICAgICAgICB7fVxyXG4gICAgICAgIHJlbmFtZWQpfSkpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLXdyYXAtbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHByXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS13cmFwLW1ldGFcclxuIFtleHByXVxyXG4gKGxldFxyXG4gIFtmb3JtICg6Zm9ybSBleHByKSBtIChlbGlkZS1pcnJlbGV2YW50LW1ldGEgKG1ldGEgZm9ybSkpXVxyXG4gIChpZlxyXG4gICAoc29tZT8gKHNlcSBtKSlcclxuICAgKGxldFxyXG4gICAgW2VudlxyXG4gICAgICg6ZW52IGV4cHIpXHJcbiAgICAgZXhwclxyXG4gICAgIChhc3NvYy1pbiBleHByIFs6ZW52IDpjb250ZXh0XSA6ZXhwcilcclxuICAgICBtZXRhLWV4cHJcclxuICAgICAoYW5hbHl6ZS1tYXAgKDplbnYgZXhwcikgbSldXHJcbiAgICB7Om9wIDp3aXRoLW1ldGEsXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6bWV0YSBtZXRhLWV4cHIsXHJcbiAgICAgOmV4cHIgZXhwcixcclxuICAgICA6Y2hpbGRyZW4gWzptZXRhIDpleHByXX0pXHJcbiAgIGV4cHIpKSlcclxuIn0gezpzeW0gQU5ZX1NZTSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgQU5ZX1NZTSAnYW55KVxyXG4ifSB7OnN5bSBnZXQtanMtdGFnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtanMtdGFnXHJcbiBbZm9ybV1cclxuIChsZXRcclxuICBbZm9ybS1tZXRhIChtZXRhIGZvcm0pXVxyXG4gIChpZi1zb21lXHJcbiAgIFt0YWcgKDp0YWcgZm9ybS1tZXRhKV1cclxuICAgdGFnXHJcbiAgICh3aGVuICh0cnVlPyAoOm51bWVyaWMgZm9ybS1tZXRhKSkgJ251bWJlcikpKSlcclxuIn0gezpzeW0gKmFuYWx5emUtZGVwcyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICphbmFseXplLWRlcHMqIHRydWUpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LWJpbmRpbmdzKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbmNsLWVudiBiaW5kaW5ncyBvcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0LWJpbmRpbmdzKlxyXG4gW2VuY2wtZW52IGJpbmRpbmdzIG9wXVxyXG4gKGxvb3BcclxuICBbYmVzXHJcbiAgIFtdXHJcbiAgIGVudlxyXG4gICAoYXNzb2MgZW5jbC1lbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGJpbmRpbmdzXHJcbiAgIChzZXEgKHBhcnRpdGlvbiAyIGJpbmRpbmdzKSldXHJcbiAgKGlmLXNvbWVcclxuICAgW1tuYW1lIGluaXRdIChmaXJzdCBiaW5kaW5ncyldXHJcbiAgIChsZXRcclxuICAgIFtdXHJcbiAgICAod2hlblxyXG4gICAgIChvclxyXG4gICAgICAoc29tZT8gKG5hbWVzcGFjZSBuYW1lKSlcclxuICAgICAgIz8oOmNsaiAoLmNvbnRhaW5zIChzdHIgbmFtZSkgXCIuXCIpIDpjbGpzIChnb29nLnN0cmluZy9jb250YWlucyAoc3RyIG5hbWUpIFwiLlwiKSkpXHJcbiAgICAgKHRocm93IChlcnJvciBlbmNsLWVudiAoc3RyIFwiSW52YWxpZCBsb2NhbCBuYW1lOiBcIiBuYW1lKSkpKVxyXG4gICAgKGxldFxyXG4gICAgIFtpbml0LWV4cHJcclxuICAgICAgKGFuYWx5emUtbGV0LWJpbmRpbmctaW5pdFxyXG4gICAgICAgZW52XHJcbiAgICAgICBpbml0XHJcbiAgICAgICAoY29ucyB7OnBhcmFtcyBiZXN9ICpsb29wLWxldHMqKSlcclxuICAgICAgbGluZVxyXG4gICAgICAoZ2V0LWxpbmUgbmFtZSBlbnYpXHJcbiAgICAgIGNvbFxyXG4gICAgICAoZ2V0LWNvbCBuYW1lIGVudilcclxuICAgICAgc2hhZG93XHJcbiAgICAgIChoYW5kbGUtc3ltYm9sLWxvY2FsIG5hbWUgKGdldC1pbiBlbnYgWzpsb2NhbHMgbmFtZV0pKVxyXG4gICAgICBiZVxyXG4gICAgICB7OmluaXQgaW5pdC1leHByLFxyXG4gICAgICAgOm5hbWUgbmFtZSxcclxuICAgICAgIDpiaW5kaW5nLWZvcm0/IHRydWUsXHJcbiAgICAgICA6b3AgOmJpbmRpbmcsXHJcbiAgICAgICA6ZW52IHs6bGluZSBsaW5lLCA6Y29sdW1uIGNvbH0sXHJcbiAgICAgICA6Y29sdW1uIGNvbCxcclxuICAgICAgIDpsaW5lIGxpbmUsXHJcbiAgICAgICA6aW5mbyB7Om5hbWUgbmFtZSwgOnNoYWRvdyBzaGFkb3d9LFxyXG4gICAgICAgOnRhZyAoZ2V0LWxldC10YWcgbmFtZSBpbml0LWV4cHIpLFxyXG4gICAgICAgOnNoYWRvdyBzaGFkb3csXHJcbiAgICAgICA6bG9jYWwgb3B9XHJcbiAgICAgIGJlXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD0gOmZuICg6b3AgaW5pdC1leHByKSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIGJlXHJcbiAgICAgICAgezpmbi12YXIgdHJ1ZSxcclxuICAgICAgICAgOm1ldGhvZHNcclxuICAgICAgICAgKGludG9cclxuICAgICAgICAgIFtdXHJcbiAgICAgICAgICAobWFwXHJcbiAgICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgICBbcDFfXzQ4NjA4I11cclxuICAgICAgICAgICAgKHNlbGVjdC1rZXlzIHAxX180ODYwOCMgWzp0YWcgOmZpeGVkLWFyaXR5IDp2YXJpYWRpYz9dKSlcclxuICAgICAgICAgICAoOm1ldGhvZHMgaW5pdC1leHByKSkpLFxyXG4gICAgICAgICA6dmFyaWFkaWM/ICg6dmFyaWFkaWM/IGluaXQtZXhwciksXHJcbiAgICAgICAgIDptYXgtZml4ZWQtYXJpdHkgKDptYXgtZml4ZWQtYXJpdHkgaW5pdC1leHByKSxcclxuICAgICAgICAgOm1ldGhvZC1wYXJhbXMgKG1hcCA6cGFyYW1zICg6bWV0aG9kcyBpbml0LWV4cHIpKX0pXHJcbiAgICAgICBiZSldXHJcbiAgICAgKHJlY3VyXHJcbiAgICAgIChjb25qIGJlcyBiZSlcclxuICAgICAgKGFzc29jLWluIGVudiBbOmxvY2FscyBuYW1lXSBiZSlcclxuICAgICAgKG5leHQgYmluZGluZ3MpKSkpXHJcbiAgIFtiZXMgZW52XSkpKVxyXG4ifSB7OnN5bSBhbmFseXNpcy1lcnJvcj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXNpcy1lcnJvcj9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2V4XVxyXG4gKD0gOmNsanMvYW5hbHlzaXMtZXJyb3IgKDp0YWcgKGV4LWRhdGEgZXgpKSkpXHJcbiJ9IHs6c3ltIHJlcGxhY2UtZW52LXBhc3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmV3LWVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGxhY2UtZW52LXBhc3NcclxuIFtuZXctZW52XVxyXG4gKGZuIFtlbnYgYXN0IG9wdHNdIChhc3NvYyBhc3QgOmVudiBuZXctZW52KSkpXHJcbiJ9IHs6c3ltIHBhcnNlLW5zLWV4Y2x1ZGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtbnMtZXhjbHVkZXNcclxuIFtlbnYgYXJnc11cclxuIChyZWR1Y2VcclxuICAoZm5cclxuICAgW3MgW2sgJiBmaWx0ZXJzXV1cclxuICAgKGlmXHJcbiAgICAoPSBrIDpyZWZlci1jbG9qdXJlKVxyXG4gICAgKGRvXHJcbiAgICAgKHdoZW5cclxuICAgICAgKHNlcSAoOmV4Y2x1ZGVzIHMpKVxyXG4gICAgICAodGhyb3dcclxuICAgICAgIChlcnJvclxyXG4gICAgICAgIGVudlxyXG4gICAgICAgIFwiT25seSBvbmUgOnJlZmVyLWNsb2p1cmUgZm9ybSBpcyBhbGxvd2VkIHBlciBuYW1lc3BhY2UgZGVmaW5pdGlvblwiKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbdmFsaWQta3dzXHJcbiAgICAgICAjezpleGNsdWRlIDpyZW5hbWV9XHJcbiAgICAgICB4c1xyXG4gICAgICAgKGxvb3BcclxuICAgICAgICBbZnNcclxuICAgICAgICAgKHNlcSBmaWx0ZXJzKVxyXG4gICAgICAgICByZXRcclxuICAgICAgICAgezpleGNsdWRlcyAje30sIDpyZW5hbWVzIHt9fVxyXG4gICAgICAgICBlcnJcclxuICAgICAgICAgKG5vdCAoZXZlbj8gKGNvdW50IGZpbHRlcnMpKSldXHJcbiAgICAgICAgKGNvbmRcclxuICAgICAgICAgKHRydWU/IGVycilcclxuICAgICAgICAgKHRocm93XHJcbiAgICAgICAgICAoZXJyb3JcclxuICAgICAgICAgICBlbnZcclxuICAgICAgICAgICBcIk9ubHkgWzpyZWZlci1jbG9qdXJlIDpleGNsdWRlIChuYW1lcyldIGFuZCBvcHRpb25hbGx5IGA6cmVuYW1lIHtmcm9tIHRvfWAgc3BlY3Mgc3VwcG9ydGVkXCIpKVxyXG4gICAgICAgICAoc29tZT8gZnMpXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtrdyAoZmlyc3QgZnMpXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKHZhbGlkLWt3cyBrdylcclxuICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgIFtyZWZzIChzZWNvbmQgZnMpXVxyXG4gICAgICAgICAgICAoY29uZFxyXG4gICAgICAgICAgICAgKG5vdFxyXG4gICAgICAgICAgICAgIChvclxyXG4gICAgICAgICAgICAgICAoYW5kXHJcbiAgICAgICAgICAgICAgICAoPSBrdyA6ZXhjbHVkZSlcclxuICAgICAgICAgICAgICAgIChzZXF1ZW50aWFsPyByZWZzKVxyXG4gICAgICAgICAgICAgICAgKGV2ZXJ5PyBzeW1ib2w/IHJlZnMpKVxyXG4gICAgICAgICAgICAgICAoYW5kXHJcbiAgICAgICAgICAgICAgICAoPSBrdyA6cmVuYW1lKVxyXG4gICAgICAgICAgICAgICAgKG1hcD8gcmVmcylcclxuICAgICAgICAgICAgICAgIChldmVyeT9cclxuICAgICAgICAgICAgICAgICAoZm4qIFtwMV9fNDg2MTgjXSAoZXZlcnk/IHN5bWJvbD8gcDFfXzQ4NjE4IykpXHJcbiAgICAgICAgICAgICAgICAgcmVmcykpKSlcclxuICAgICAgICAgICAgIChyZWN1ciBmcyByZXQgdHJ1ZSlcclxuICAgICAgICAgICAgICg9IGt3IDpleGNsdWRlKVxyXG4gICAgICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgICAgKG5uZXh0IGZzKVxyXG4gICAgICAgICAgICAgICh1cGRhdGUtaW4gcmV0IFs6ZXhjbHVkZXNdIGludG8gcmVmcylcclxuICAgICAgICAgICAgICBmYWxzZSlcclxuICAgICAgICAgICAgICg9IGt3IDpyZW5hbWUpXHJcbiAgICAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAgICAobm5leHQgZnMpXHJcbiAgICAgICAgICAgICAgKHVwZGF0ZS1pbiByZXQgWzpyZW5hbWVzXSBtZXJnZSByZWZzKVxyXG4gICAgICAgICAgICAgIGZhbHNlKSkpXHJcbiAgICAgICAgICAgKHJlY3VyIGZzIHJldCB0cnVlKSkpXHJcbiAgICAgICAgIDplbHNlXHJcbiAgICAgICAgIHJldCkpXVxyXG4gICAgICAobWVyZ2Utd2l0aCBpbnRvIHMgeHMpKSlcclxuICAgIHMpKVxyXG4gIHs6ZXhjbHVkZXMgI3t9LCA6cmVuYW1lcyB7fX1cclxuICBhcmdzKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1mbi1tZXRob2RzLXBhc3MyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21lbnYgbG9jYWxzIHR5cGUgbWV0aHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWZuLW1ldGhvZHMtcGFzczJcclxuIFttZW52IGxvY2FscyB0eXBlIG1ldGhzXVxyXG4gKGFuYWx5emUtZm4tbWV0aG9kcy1wYXNzMiogbWVudiBsb2NhbHMgdHlwZSBtZXRocykpXHJcbiJ9IHs6c3ltIGNvcmUtbmFtZT8sIDptZXRhIHs6ZG9jICJJcyBzeW0gdmlzaWJsZSBmcm9tIGNvcmUgaW4gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gbmFtZXNwYWNlPyIsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb3JlLW5hbWU/XHJcbiBcIklzIHN5bSB2aXNpYmxlIGZyb20gY29yZSBpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiBuYW1lc3BhY2U/XCJcclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiBzeW1dXHJcbiAoYW5kXHJcbiAgKG9yXHJcbiAgIChzb21lP1xyXG4gICAgKGdldHNcclxuICAgICBAZW52Lypjb21waWxlcipcclxuICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgJ2NsanMuY29yZVxyXG4gICAgIDpkZWZzXHJcbiAgICAgc3ltKSlcclxuICAgKGlmLXNvbWVcclxuICAgIFttYWMgKGdldC1leHBhbmRlciBzeW0gZW52KV1cclxuICAgIChsZXRcclxuICAgICBbbnMgKC0+IG1hYyBtZXRhIDpucyldXHJcbiAgICAgKD1cclxuICAgICAgKC5nZXROYW1lIG5zKVxyXG4gICAgICAjPyg6Y2xqIChxdW90ZSBjbGpzLmNvcmUpIDpjbGpzIChxdW90ZSBjbGpzLmNvcmUkbWFjcm9zKSkpKVxyXG4gICAgZmFsc2UpKVxyXG4gIChub3QgKGNvbnRhaW5zPyAoLT4gZW52IDpucyA6ZXhjbHVkZXMpIHN5bSkpKSlcclxuIn0gezpzeW0gZ2V0LWxldC10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZSBpbml0LWV4cHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbGV0LXRhZ1xyXG4gW25hbWUgaW5pdC1leHByXVxyXG4gKGlmLXNvbWVcclxuICBbdGFnICgtPiBuYW1lIG1ldGEgOnRhZyldXHJcbiAgdGFnXHJcbiAgKGlmLXNvbWUgW3RhZyAoLT4gaW5pdC1leHByIDp0YWcpXSB0YWcgKC0+IGluaXQtZXhwciA6aW5mbyA6dGFnKSkpKVxyXG4ifSB7OnN5bSBzcGVjaWFscywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHNwZWNpYWxzXHJcbiAnI3smIGNhc2UqIGRlZnJlY29yZCogdHJ5IG5zKiBsb29wKiBkbyBsZXRmbiogaWYgbmV3IG5zIGRlZnR5cGUqIGxldCpcclxuICAgIGpzKiBmbiogcmVjdXIgc2V0ISAuIHZhciBxdW90ZSB0aHJvdyBkZWZ9KVxyXG4ifSB7OnN5bSBlbGlkZS1pcnJlbGV2YW50LW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsaWRlLWlycmVsZXZhbnQtbWV0YVxyXG4gW21dXHJcbiAoLT4gbSBlbGlkZS1yZWFkZXItbWV0YSBlbGlkZS1hbmFseXplci1tZXRhKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1tYWNyby1ucy1hbGlhcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnYgbmFtZV0gW2VudiBuYW1lIG5vdC1mb3VuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtbWFjcm8tbnMtYWxpYXNcclxuIChbZW52IG5hbWVdIChyZXNvbHZlLW1hY3JvLW5zLWFsaWFzIGVudiBuYW1lIChzeW1ib2wgbmFtZSkpKVxyXG4gKFtlbnYgbmFtZSBub3QtZm91bmRdXHJcbiAgKGxldFxyXG4gICBbc3ltIChzeW1ib2wgbmFtZSldXHJcbiAgIChnZXQgKDpyZXF1aXJlLW1hY3JvcyAoOm5zIGVudikpIHN5bSBub3QtZm91bmQpKSkpXHJcbiJ9IHs6c3ltIGNoZWNrLWludm9rZS1hcmctdHlwZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHs6a2V5cyBbb3BdLCA6YXMgYXN0fSBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2staW52b2tlLWFyZy10eXBlc1xyXG4gW2VudiB7OmtleXMgW29wXSwgOmFzIGFzdH0gb3B0c11cclxuICh3aGVuXHJcbiAgKGFuZFxyXG4gICAobm90IChhbmFseXplZD8gYXN0KSlcclxuICAgIz8oOmNsaiAoPSA6aW52b2tlIG9wKSA6Y2xqcyAoa2V5d29yZC1pZGVudGljYWw/IDppbnZva2Ugb3ApKSlcclxuICAod2hlbi1zb21lXHJcbiAgIFtbbmFtZSB7OmtleXMgW3ZhbGlkPyB3YXJuaW5nLXR5cGVdfV1cclxuICAgIChmaW5kIGludm9rZS1hcmctdHlwZS12YWxpZGF0b3JzICgtPiBhc3QgOmZuIDppbmZvIDpuYW1lKSldXHJcbiAgIChsZXRcclxuICAgIFt0eXBlcyAobWFwdiA6dGFnICg6YXJncyBhc3QpKV1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgICh2YWxpZD8gdHlwZXMpXHJcbiAgICAgKHdhcm5pbmcgd2FybmluZy10eXBlIGVudiB7Om5hbWUgbmFtZSwgOnR5cGVzIHR5cGVzfSkpKSkpXHJcbiAoYW5hbHl6ZWQgYXN0KSlcclxuIn0gezpzeW0gY29uZmlybS1ucywgOm1ldGEgezpkb2MgIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBucy1zeW0sIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGFcbiAgIG5hbWVzcGFjZSwgY29uZmlybSB0aGF0IHRoZSBuYW1lc3BhY2UgZXhpc3RzLiBXYXJuIGlmIG5vdCBmb3VuZC4iLCA6YXJnbGlzdHMgKFtlbnYgbnMtc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uZmlybS1uc1xyXG4gXCJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgbnMtc3ltLCBhIHN5bWJvbCBpZGVudGlmeWluZyBhXFxuICAgbmFtZXNwYWNlLCBjb25maXJtIHRoYXQgdGhlIG5hbWVzcGFjZSBleGlzdHMuIFdhcm4gaWYgbm90IGZvdW5kLlwiXHJcbiBbZW52IG5zLXN5bV1cclxuICh3aGVuXHJcbiAgKGFuZFxyXG4gICAobm90PSAnY2xqcy5jb3JlIG5zLXN5bSlcclxuICAgKG5pbD8gKGdldCBpbXBsaWNpdC1uc2VzIG5zLXN5bSkpXHJcbiAgIChuaWw/IChnZXQgKC0+IGVudiA6bnMgOnJlcXVpcmVzKSBucy1zeW0pKVxyXG4gICAobmlsPyAoZ2V0cyBAZW52Lypjb21waWxlciogOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucy1zeW0pKVxyXG4gICAjPyg6Y2xqIChuaWw/ICh1dGlsL25zLT5zb3VyY2UgbnMtc3ltKSkpXHJcbiAgIChub3QgKGpzLW1vZHVsZS1leGlzdHM/IG5zLXN5bSkpKVxyXG4gICh3YXJuaW5nIDp1bmRlY2xhcmVkLW5zIGVudiB7Om5zLXN5bSBucy1zeW0sIDpqcy1wcm92aWRlIG5zLXN5bX0pKSlcclxuIn0gezpzeW0gZGVmYXVsdC1uYW1lc3BhY2VzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZGVmYXVsdC1uYW1lc3BhY2VzXHJcbiAne2NsanMuY29yZSB7Om5hbWUgY2xqcy5jb3JlfSwgY2xqcy51c2VyIHs6bmFtZSBjbGpzLnVzZXJ9fSlcclxuIn0gezpzeW0gY2Fub25pY2FsaXplLXNwZWNzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWNzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2Fub25pY2FsaXplLXNwZWNzXHJcbiBbc3BlY3NdXHJcbiAobGV0Zm5cclxuICBbKGNhbm9uaWNhbGl6ZVxyXG4gICAgW3F1b3RlZC1zcGVjLW9yLWt3XVxyXG4gICAgKGlmXHJcbiAgICAgKGtleXdvcmQ/IHF1b3RlZC1zcGVjLW9yLWt3KVxyXG4gICAgIHF1b3RlZC1zcGVjLW9yLWt3XHJcbiAgICAgKGFzLT5cclxuICAgICAgKHNlY29uZCBxdW90ZWQtc3BlYy1vci1rdylcclxuICAgICAgc3BlY1xyXG4gICAgICAoaWYgKG9yICh2ZWN0b3I/IHNwZWMpIChtYXA/IHNwZWMpKSBzcGVjIFtzcGVjXSkpKSldXHJcbiAgKG1hcCBjYW5vbmljYWxpemUgc3BlY3MpKSlcclxuIn0gezpzeW0gY29uZmlybS12YXItZXhpc3RzLXRocm93LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZpcm0tdmFyLWV4aXN0cy10aHJvd1xyXG4gW11cclxuIChmblxyXG4gIFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuICAoY29uZmlybS12YXItZXhpc3RzXHJcbiAgIGVudlxyXG4gICBwcmVmaXhcclxuICAgc3VmZml4XHJcbiAgIChmblxyXG4gICAgW2VudiBwcmVmaXggc3VmZml4XVxyXG4gICAgKHRocm93XHJcbiAgICAgKGVycm9yXHJcbiAgICAgIGVudlxyXG4gICAgICAoc3RyIFwiVW5hYmxlIHRvIHJlc29sdmUgdmFyOiBcIiBzdWZmaXggXCIgaW4gdGhpcyBjb250ZXh0XCIpKSkpKSkpXHJcbiJ9IHs6c3ltIGpzLW1vZHVsZS1leGlzdHM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21vZHVsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLW1vZHVsZS1leGlzdHM/XHJcbiBbbW9kdWxlXVxyXG4gKGpzLW1vZHVsZS1leGlzdHM/KlxyXG4gIChnZXQtaW4gQGVudi8qY29tcGlsZXIqIFs6anMtbW9kdWxlLWluZGV4XSlcclxuICBtb2R1bGUpKVxyXG4ifSB7OnN5bSB2YXItYXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YXItYXN0XHJcbiBbZW52IHN5bV1cclxuIChiaW5kaW5nXHJcbiAgWypwcml2YXRlLXZhci1hY2Nlc3Mtbm93YXJuKiB0cnVlXVxyXG4gIChsZXRcclxuICAgW2VudlxyXG4gICAgKGRpc3NvYyBlbnYgOmxvY2FscylcclxuICAgIHZhclxyXG4gICAgKHJlc29sdmUtdmFyIGVudiBzeW0gKGNvbmZpcm0tdmFyLWV4aXN0cy10aHJvdykpXHJcbiAgICBleHByLWVudlxyXG4gICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcildXHJcbiAgICh3aGVuLXNvbWVcclxuICAgIFt2YXItbnMgKDpucyB2YXIpXVxyXG4gICAgezp2YXIgKGFuYWx5emUgZXhwci1lbnYgc3ltKSxcclxuICAgICA6c3ltXHJcbiAgICAgKGFuYWx5emVcclxuICAgICAgZXhwci1lbnZcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ3F1b3RlKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgIChzeW1ib2wgKG5hbWUgdmFyLW5zKSAobmFtZSAoOm5hbWUgdmFyKSkpKSkpKSksXHJcbiAgICAgOm1ldGEgKHZhci1tZXRhIHZhciBleHByLWVudil9KSkpKVxyXG4ifSB7OnN5bSBhZGQtY29uc3RzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBjb21waWxlciBzdGF0ZSBhbmQgYSBtYXAgZnJvbSBmdWxseSBxdWFsaWZpZWQgc3ltYm9scyB0byBjb25zdGFudFxuICBFRE4gdmFsdWVzLCB1cGRhdGUgdGhlIGNvbXBpbGVyIHN0YXRlIG1hcmtpbmcgdGhlc2UgdmFycyBhcyBjb25zdCB0byBzdXBwb3J0XG4gIGRpcmVjdCBzdWJzdGl0dXRpb24gb2YgdGhlc2UgdmFycyBpbiBzb3VyY2UuIiwgOmFyZ2xpc3RzIChbY29tcGlsZXItc3RhdGUgY29uc3RhbnRzLW1hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1jb25zdHNcclxuIFwiR2l2ZW4gYSBjb21waWxlciBzdGF0ZSBhbmQgYSBtYXAgZnJvbSBmdWxseSBxdWFsaWZpZWQgc3ltYm9scyB0byBjb25zdGFudFxcbiAgRUROIHZhbHVlcywgdXBkYXRlIHRoZSBjb21waWxlciBzdGF0ZSBtYXJraW5nIHRoZXNlIHZhcnMgYXMgY29uc3QgdG8gc3VwcG9ydFxcbiAgZGlyZWN0IHN1YnN0aXR1dGlvbiBvZiB0aGVzZSB2YXJzIGluIHNvdXJjZS5cIlxyXG4gW2NvbXBpbGVyLXN0YXRlIGNvbnN0YW50cy1tYXBdXHJcbiAocmVkdWNlLWt2XHJcbiAgKGZuXHJcbiAgIFtjb21waWxlci1zdGF0ZSBzeW0gdmFsdWVdXHJcbiAgIChsZXRcclxuICAgIFtucyAoc3ltYm9sIChuYW1lc3BhY2Ugc3ltKSldXHJcbiAgICAodXBkYXRlLWluXHJcbiAgICAgY29tcGlsZXItc3RhdGVcclxuICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6ZGVmcyAoc3ltYm9sIChuYW1lIHN5bSkpXVxyXG4gICAgIG1lcmdlXHJcbiAgICAgezpjb25zdC1leHByXHJcbiAgICAgIChiaW5kaW5nXHJcbiAgICAgICBbKnBhc3NlcyogKGNvbmogKnBhc3NlcyogKHJlcGxhY2UtZW52LXBhc3Mgezpjb250ZXh0IDpleHByfSkpXVxyXG4gICAgICAgKGFuYWx5emUgKGVtcHR5LWVudikgdmFsdWUpKX0pKSlcclxuICBjb21waWxlci1zdGF0ZVxyXG4gIGNvbnN0YW50cy1tYXApKVxyXG4ifSB7OnN5bSBlcnJvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tlbnYgbXNnXSBbZW52IG1zZyBjYXVzZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVycm9yXHJcbiAoW2VudiBtc2ddIChlcnJvciBlbnYgbXNnIG5pbCkpXHJcbiAoW2VudiBtc2cgY2F1c2VdXHJcbiAgKGV4LWluZm9cclxuICAgKG1lc3NhZ2UgZW52IG1zZylcclxuICAgKGFzc29jIChzb3VyY2UtaW5mbyBlbnYpIDp0YWcgOmNsanMvYW5hbHlzaXMtZXJyb3IpXHJcbiAgIGNhdXNlKSkpXHJcbiJ9IHs6c3ltIGludm9rZWFibGUtbnM/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG5zIGlzIGEgcmVxdWlyZWQgbmFtZXNwYWNlIGFuZCBhIEphdmFTY3JpcHQgbW9kdWxlIHRoYXRcbiAgIG1pZ2h0IGJlIGludm9rZWFibGUgYXMgYSBmdW5jdGlvbi4iLCA6YXJnbGlzdHMgKFtucyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnZva2VhYmxlLW5zP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbnMgaXMgYSByZXF1aXJlZCBuYW1lc3BhY2UgYW5kIGEgSmF2YVNjcmlwdCBtb2R1bGUgdGhhdFxcbiAgIG1pZ2h0IGJlIGludm9rZWFibGUgYXMgYSBmdW5jdGlvbi5cIlxyXG4gW25zIGVudl1cclxuIChsZXRcclxuICBbbnMgKHJlc29sdmUtbnMtYWxpYXMgZW52IG5zKV1cclxuICAoYW5kXHJcbiAgIChyZXF1aXJlZD8gbnMgZW52KVxyXG4gICAob3JcclxuICAgIChqcy1tb2R1bGUtZXhpc3RzPyBucylcclxuICAgIChub2RlLW1vZHVsZS1kZXA/IG5zKVxyXG4gICAgKGRlcC1oYXMtZ2xvYmFsLWV4cG9ydHM/IG5zKSkpKSlcclxuIn0gezpzeW0gKmNsanMtbnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xqcy1ucyogJ2NsanMudXNlcilcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlci5yZWFkZXItdHlwZXMgKHs6c3ltIGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIEluZGV4aW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlciIsIDphcmdsaXN0cyBbW3Mtb3ItcmRyXSBbcy1vci1yZHIgYnVmLWxlbl0gW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGFuIEluZGV4aW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlclwiXHJcbiAoW3Mtb3ItcmRyXSAoaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciAxKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbl0gKGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbiBuaWwpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1cclxuICAoSW5kZXhpbmdQdXNoYmFja1JlYWRlci5cclxuICAgKGlmXHJcbiAgICAoc3RyaW5nPyBzLW9yLXJkcilcclxuICAgIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuKVxyXG4gICAgcy1vci1yZHIpXHJcbiAgIDFcclxuICAgMVxyXG4gICB0cnVlXHJcbiAgIG5pbFxyXG4gICAwXHJcbiAgIGZpbGUtbmFtZSkpKVxyXG4ifSB7OnN5bSBsb2ctc291cmNlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWFkZXIgZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxvZy1zb3VyY2UqXHJcbiBbcmVhZGVyIGZdXHJcbiAobGV0XHJcbiAgW2J1ZmZlciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHJlYWRlcikpXVxyXG4gICh0cnlcclxuICAgKHN3YXAhXHJcbiAgICAoLi1mcmFtZXMgcmVhZGVyKVxyXG4gICAgdXBkYXRlLWluXHJcbiAgICBbOm9mZnNldF1cclxuICAgIGNvbmpcclxuICAgICguZ2V0TGVuZ3RoIGJ1ZmZlcikpXHJcbiAgIChsZXRcclxuICAgIFtyZXQgKGYpXVxyXG4gICAgKGlmXHJcbiAgICAgKGltcGxlbWVudHM/IElNZXRhIHJldClcclxuICAgICAobWVyZ2UtbWV0YSByZXQgezpzb3VyY2UgKHBlZWstc291cmNlLWxvZyBAKC4tZnJhbWVzIHJlYWRlcikpfSlcclxuICAgICByZXQpKVxyXG4gICAoZmluYWxseSAoc3dhcCEgKC4tZnJhbWVzIHJlYWRlcikgdXBkYXRlLWluIFs6b2Zmc2V0XSByZXN0KSkpKSlcclxuIn0gezpzeW0gbWVyZ2UtbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIGBvYmpgLCB3aXRoIGl0c1xubWV0YWRhdGEgbWVyZ2VkIG92ZXIgYG1gLiIsIDphcmdsaXN0cyAoW29iaiBtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2UtbWV0YVxyXG4gXCJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBgb2JqYCwgd2l0aCBpdHNcXG5tZXRhZGF0YSBtZXJnZWQgb3ZlciBgbWAuXCJcclxuIFtvYmogbV1cclxuIChsZXRcclxuICBbb3JpZy1tZXRhIChtZXRhIG9iaildXHJcbiAgKHdpdGgtbWV0YSBvYmogKG1lcmdlIG0gKGRpc3NvYyBvcmlnLW1ldGEgOnNvdXJjZSkpKSkpXHJcbiJ9IHs6c3ltIFJlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHBlZWstY2hhciByZWFkLWNoYXIpfSB7OnN5bSBzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyIiwgOmFyZ2xpc3RzIFtbcy1vci1yZHJdIFtzLW9yLXJkciBidWYtbGVuXSBbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlclwiXHJcbiAoW3Mtb3ItcmRyXSAoc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciAxKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbl1cclxuICAoc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuIG5pbCkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXVxyXG4gIChTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChpZlxyXG4gICAgKHN0cmluZz8gcy1vci1yZHIpXHJcbiAgICAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbilcclxuICAgIHMtb3ItcmRyKVxyXG4gICAxXHJcbiAgIDFcclxuICAgdHJ1ZVxyXG4gICBuaWxcclxuICAgMFxyXG4gICBmaWxlLW5hbWVcclxuICAgKGF0b20gezpidWZmZXIgKFN0cmluZ0J1ZmZlci4pLCA6b2Zmc2V0ICcoMCl9KSkpKVxyXG4ifSB7OnN5bSB1bnJlYWQsIDptZXRhIHs6ZG9jICJQdXNoZXMgYmFjayBhIHNpbmdsZSBjaGFyYWN0ZXIgb24gdG8gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlciBjaF0pfSwgOnByb3RvY29sIElQdXNoYmFja1JlYWRlcn0gezpzeW0gcGVlay1jaGFyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIFJlYWRlciB3aXRob3V0IHJlbW92aW5nIGl0IGZyb20gdGhlIHJlYWRlciBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBSZWFkZXJ9IHs6c3ltIElQdXNoYmFja1JlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHVucmVhZCl9IHs6c3ltIGluZGV4aW5nLXJlYWRlcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgdGhlIHJlYWRlciBzYXRpc2ZpZXMgSW5kZXhpbmdSZWFkZXIiLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGluZy1yZWFkZXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB0aGUgcmVhZGVyIHNhdGlzZmllcyBJbmRleGluZ1JlYWRlclwiXHJcbiBbcmRyXVxyXG4gKGltcGxlbWVudHM/IEluZGV4aW5nUmVhZGVyIHJkcikpXHJcbiJ9IHs6c3ltIHN0cmluZy1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgU3RyaW5nUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmciLCA6YXJnbGlzdHMgW1tzXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgU3RyaW5nUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmdcIlxyXG4gKFtzXSAoU3RyaW5nUmVhZGVyLiBzIChjb3VudCBzKSAwKSkpXHJcbiJ9IHs6c3ltIHJlYWQtY2hhciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgY2hhciBmcm9tIHRoZSBSZWFkZXIsIG5pbCBpZiB0aGUgZW5kIG9mIHN0cmVhbSBoYXMgYmVlbiByZWFjaGVkIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgUmVhZGVyfSB7OnN5bSBnZXQtY29sdW1uLW51bWJlciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9IHs6c3ltIGdldC1maWxlLW5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaWxlIG5hbWUgdGhlIHJlYWRlciBpcyByZWFkaW5nIGZyb20sIG9yIG5pbCIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSB7OnN5bSByZWFkLWxpbmUsIDptZXRhIHs6ZG9jICJSZWFkcyBhIGxpbmUgZnJvbSB0aGUgcmVhZGVyIG9yIGZyb20gKmluKiBpZiBubyByZWFkZXIgaXMgc3BlY2lmaWVkIiwgOmFyZ2xpc3RzIFtbcmRyXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1saW5lXHJcbiBcIlJlYWRzIGEgbGluZSBmcm9tIHRoZSByZWFkZXIgb3IgZnJvbSAqaW4qIGlmIG5vIHJlYWRlciBpcyBzcGVjaWZpZWRcIlxyXG4gKFtyZHJdXHJcbiAgKGxvb3BcclxuICAgW2MgKHJlYWQtY2hhciByZHIpIHMgKFN0cmluZ0J1ZmZlci4pXVxyXG4gICAoaWYgKG5ld2xpbmU/IGMpIChzdHIgcykgKHJlY3VyIChyZWFkLWNoYXIgcmRyKSAoLmFwcGVuZCBzIGMpKSkpKSlcclxuIn0gezpzeW0gc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyIsIDphcmdsaXN0cyBbW3NdIFtzIGJ1Zi1sZW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZ1wiXHJcbiAoW3NdIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzIDEpKVxyXG4gKFtzIGJ1Zi1sZW5dXHJcbiAgKFB1c2hiYWNrUmVhZGVyLlxyXG4gICAoc3RyaW5nLXJlYWRlciBzKVxyXG4gICAob2JqZWN0LWFycmF5IGJ1Zi1sZW4pXHJcbiAgIGJ1Zi1sZW5cclxuICAgYnVmLWxlbikpKVxyXG4ifSB7OnN5bSBsaW5lLXN0YXJ0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIgYW5kIHRoZSBjdXJyZW50IGNoYXIgc3RhcnRzIGEgbmV3IGxpbmUiLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaW5lLXN0YXJ0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyIGFuZCB0aGUgY3VycmVudCBjaGFyIHN0YXJ0cyBhIG5ldyBsaW5lXCJcclxuIFtyZHJdXHJcbiAod2hlbiAoaW5kZXhpbmctcmVhZGVyPyByZHIpICg9PSAxIChnZXQtY29sdW1uLW51bWJlciByZHIpKSkpXHJcbiJ9IHs6c3ltIHNvdXJjZS1sb2dnaW5nLXJlYWRlcj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWxvZ2dpbmctcmVhZGVyP1xyXG4gW3Jkcl1cclxuIChpbnN0YW5jZT8gU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIHJkcikpXHJcbiJ9IHs6c3ltIEluZGV4aW5nUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoZ2V0LWNvbHVtbi1udW1iZXIgZ2V0LWZpbGUtbmFtZSBnZXQtbGluZS1udW1iZXIpfSB7OnN5bSBub2RlLXJlYWRhYmxlLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVhZGFibGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub2RlLXJlYWRhYmxlLXB1c2gtYmFjay1yZWFkZXJcclxuIFtyZWFkYWJsZV1cclxuIChQdXNoYmFja1JlYWRlci5cclxuICAoTm9kZVJlYWRhYmxlUmVhZGVyLiByZWFkYWJsZSBuaWwpXHJcbiAgKG9iamVjdC1hcnJheSAxKVxyXG4gIDFcclxuICAxKSlcclxuIn0gezpzeW0gZ2V0LWxpbmUtbnVtYmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9KSwgc2FibG9uby5ub3JtYWxpemUgKHs6c3ltIG1hcC1sb29rdXA/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGB4YCBpcyBhIG1hcCBsb29rdXAgZm9ybSwgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtbG9va3VwP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgYHhgIGlzIGEgbWFwIGxvb2t1cCBmb3JtLCBvdGhlcndpc2UgZmFsc2UuXCJcclxuIFt4XVxyXG4gKGFuZCAobGlzdD8geCkgKGtleXdvcmQ/IChmaXJzdCB4KSkpKVxyXG4ifSB7OnN5bSBhdHRyaWJ1dGVzLCA6bWV0YSB7OmRvYyAiTm9ybWFsaXplIHRoZSBgYXR0cnNgIG9mIGFuIGVsZW1lbnQuIiwgOmFyZ2xpc3RzIChbYXR0cnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhdHRyaWJ1dGVzXHJcbiBcIk5vcm1hbGl6ZSB0aGUgYGF0dHJzYCBvZiBhbiBlbGVtZW50LlwiXHJcbiBbYXR0cnNdXHJcbiAoY29uZC0+IGF0dHJzICg6Y2xhc3MgYXR0cnMpICh1cGRhdGUtaW4gWzpjbGFzc10gY2xhc3MpKSlcclxuIn0gezpzeW0gY29tcGFjdC1tYXAsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGFsbCBtYXAgZW50cmllcyB3aGVyZSB0aGUgdmFsdWUgb2YgdGhlIGVudHJ5IGlzIGVtcHR5LiIsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYWN0LW1hcFxyXG4gXCJSZW1vdmVzIGFsbCBtYXAgZW50cmllcyB3aGVyZSB0aGUgdmFsdWUgb2YgdGhlIGVudHJ5IGlzIGVtcHR5LlwiXHJcbiBbbV1cclxuICh3aGVuIG0gKGludG8ge30gKHJlbW92ZSAoZm4gW1tfIHZdXSAoZW1wdHk/IHYpKSkgbSkpKVxyXG4ifSB7OnN5bSBjaGlsZHJlbiwgOm1ldGEgezpkb2MgIk5vcm1hbGl6ZSB0aGUgY2hpbGRyZW4gb2YgYSBIVE1MIGVsZW1lbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoaWxkcmVuXHJcbiBcIk5vcm1hbGl6ZSB0aGUgY2hpbGRyZW4gb2YgYSBIVE1MIGVsZW1lbnQuXCJcclxuIFt4XVxyXG4gKC0+PlxyXG4gIChjb25kXHJcbiAgIChuaWw/IHgpXHJcbiAgICcoKVxyXG4gICAoc3RyaW5nPyB4KVxyXG4gICAobGlzdCB4KVxyXG4gICAodXRpbC9lbGVtZW50PyB4KVxyXG4gICAobGlzdCB4KVxyXG4gICAoYW5kIChsaXN0PyB4KSAoc3ltYm9sPyAoZmlyc3QgeCkpKVxyXG4gICAobGlzdCB4KVxyXG4gICAobGlzdD8geClcclxuICAgeFxyXG4gICAoYW5kXHJcbiAgICAoc2VxdWVudGlhbD8geClcclxuICAgICg9IChjb3VudCB4KSAxKVxyXG4gICAgKHNlcXVlbnRpYWw/IChmaXJzdCB4KSlcclxuICAgIChub3QgKHN0cmluZz8gKGZpcnN0IHgpKSlcclxuICAgIChub3QgKHV0aWwvZWxlbWVudD8gKGZpcnN0IHgpKSkpXHJcbiAgIChjaGlsZHJlbiAoZmlyc3QgeCkpXHJcbiAgIChzZXF1ZW50aWFsPyB4KVxyXG4gICB4XHJcbiAgIDplbHNlXHJcbiAgIChsaXN0IHgpKVxyXG4gIChyZW1vdmUgbmlsPykpKVxyXG4ifSB7OnN5bSBlbGVtZW50LCA6bWV0YSB7OmRvYyAiRW5zdXJlIGFuIGVsZW1lbnQgdmVjdG9yIGlzIG9mIHRoZSBmb3JtIFt0YWctbmFtZSBhdHRycyBjb250ZW50XS4iLCA6YXJnbGlzdHMgKFtbdGFnICYgY29udGVudF1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGVtZW50XHJcbiBcIkVuc3VyZSBhbiBlbGVtZW50IHZlY3RvciBpcyBvZiB0aGUgZm9ybSBbdGFnLW5hbWUgYXR0cnMgY29udGVudF0uXCJcclxuIFtbdGFnICYgY29udGVudF1dXHJcbiAod2hlbi1ub3RcclxuICAob3IgKGtleXdvcmQ/IHRhZykgKHN5bWJvbD8gdGFnKSAoc3RyaW5nPyB0YWcpKVxyXG4gICh0aHJvd1xyXG4gICAoZXgtaW5mb1xyXG4gICAgKHN0ciB0YWcgXCIgaXMgbm90IGEgdmFsaWQgZWxlbWVudCBuYW1lLlwiKVxyXG4gICAgezp0YWcgdGFnLCA6Y29udGVudCBjb250ZW50fSkpKVxyXG4gKGxldFxyXG4gIFtbdGFnIGlkIGNsYXNzXVxyXG4gICAobWF0Y2gtdGFnIHRhZylcclxuICAgdGFnLWF0dHJzXHJcbiAgIChjb21wYWN0LW1hcCB7OmlkIGlkLCA6Y2xhc3MgY2xhc3N9KVxyXG4gICBtYXAtYXR0cnNcclxuICAgKGZpcnN0IGNvbnRlbnQpXVxyXG4gIChpZlxyXG4gICAoYXR0cnM/IG1hcC1hdHRycylcclxuICAgW3RhZ1xyXG4gICAgKG1lcmdlLXdpdGgtY2xhc3MgdGFnLWF0dHJzIG1hcC1hdHRycylcclxuICAgIChjaGlsZHJlbiAobmV4dCBjb250ZW50KSldXHJcbiAgIFt0YWcgKGF0dHJpYnV0ZXMgdGFnLWF0dHJzKSAoY2hpbGRyZW4gY29udGVudCldKSkpXHJcbiJ9IHs6c3ltIG1hdGNoLXRhZywgOm1ldGEgezpkb2MgIk1hdGNoIGBzYCBhcyBhIENTUyB0YWcgYW5kIHJldHVybiBhIHZlY3RvciBvZiB0YWcgbmFtZSwgQ1NTIGlkIGFuZFxuICBDU1MgY2xhc3Nlcy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF0Y2gtdGFnXHJcbiBcIk1hdGNoIGBzYCBhcyBhIENTUyB0YWcgYW5kIHJldHVybiBhIHZlY3RvciBvZiB0YWcgbmFtZSwgQ1NTIGlkIGFuZFxcbiAgQ1NTIGNsYXNzZXMuXCJcclxuIFtzXVxyXG4gKGxldFxyXG4gIFttYXRjaGVzXHJcbiAgIChyZS1zZXEgI1wiWyMuXT9bXiMuXStcIiAobmFtZSBzKSlcclxuICAgW3RhZy1uYW1lIG5hbWVzXVxyXG4gICAoY29uZFxyXG4gICAgKGVtcHR5PyBtYXRjaGVzKVxyXG4gICAgKHRocm93IChleC1pbmZvIChzdHIgXCJDYW4ndCBtYXRjaCBDU1MgdGFnOiBcIiBzKSB7OnRhZyBzfSkpXHJcbiAgICAoI3tcXCMgXFwufSAoZmZpcnN0IG1hdGNoZXMpKVxyXG4gICAgW1wiZGl2XCIgbWF0Y2hlc11cclxuICAgIDpkZWZhdWx0XHJcbiAgICBbKGZpcnN0IG1hdGNoZXMpIChyZXN0IG1hdGNoZXMpXSldXHJcbiAgW3RhZy1uYW1lXHJcbiAgIChzdHJpcC1jc3NcclxuICAgIChzb21lXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDU1I10gKHdoZW4gKD0gXFwjIChmaXJzdCBwMV9fNDkwNTUjKSkgcDFfXzQ5MDU1IykpXHJcbiAgICAgbmFtZXMpKVxyXG4gICAoaW50b1xyXG4gICAgW11cclxuICAgIChjb21wXHJcbiAgICAgKGZpbHRlciAoZm4qIFtwMV9fNDkwNTYjXSAoPSBcXC4gKGZpcnN0IHAxX180OTA1NiMpKSkpXHJcbiAgICAgKG1hcCBzdHJpcC1jc3MpKVxyXG4gICAgbmFtZXMpXSkpXHJcbiJ9IHs6c3ltIHN0cmlwLWNzcywgOm1ldGEgezpkb2MgIlN0cmlwIHRoZSAjIGFuZCAuIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGBzYC4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RyaXAtY3NzXHJcbiBcIlN0cmlwIHRoZSAjIGFuZCAuIGNoYXJhY3RlcnMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGBzYC5cIlxyXG4gW3NdXHJcbiAod2hlbiBzIChzdHIvcmVwbGFjZSBzICNcIl5bLiNdXCIgXCJcIikpKVxyXG4ifSB7OnN5bSBjbGFzcywgOm1ldGEgezpkb2MgIk5vcm1hbGl6ZSBgY2xhc3NgIGludG8gYSB2ZWN0b3Igb2YgY2xhc3Nlcy4iLCA6YXJnbGlzdHMgKFtjbGFzc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsYXNzXHJcbiBcIk5vcm1hbGl6ZSBgY2xhc3NgIGludG8gYSB2ZWN0b3Igb2YgY2xhc3Nlcy5cIlxyXG4gW2NsYXNzXVxyXG4gKGNvbmRcclxuICAobmlsPyBjbGFzcylcclxuICBuaWxcclxuICAobWFwLWxvb2t1cD8gY2xhc3MpXHJcbiAgW2NsYXNzXVxyXG4gIChsaXN0PyBjbGFzcylcclxuICAoaWYgKHN5bWJvbD8gKGZpcnN0IGNsYXNzKSkgW2NsYXNzXSAobWFwIGNsYXNzLW5hbWUgY2xhc3MpKVxyXG4gIChzeW1ib2w/IGNsYXNzKVxyXG4gIFtjbGFzc11cclxuICAoc3RyaW5nPyBjbGFzcylcclxuICBbY2xhc3NdXHJcbiAgKGtleXdvcmQ/IGNsYXNzKVxyXG4gIFsoY2xhc3MtbmFtZSBjbGFzcyldXHJcbiAgKGFuZFxyXG4gICAob3IgKHNldD8gY2xhc3MpIChzZXF1ZW50aWFsPyBjbGFzcykpXHJcbiAgIChldmVyeT9cclxuICAgIChmbiogW3AxX180OTA1NCNdIChvciAoa2V5d29yZD8gcDFfXzQ5MDU0IykgKHN0cmluZz8gcDFfXzQ5MDU0IykpKVxyXG4gICAgY2xhc3MpKVxyXG4gIChtYXB2IGNsYXNzLW5hbWUgY2xhc3MpXHJcbiAgKGFuZCAob3IgKHNldD8gY2xhc3MpIChzZXF1ZW50aWFsPyBjbGFzcykpKVxyXG4gIChtYXB2IGNsYXNzLW5hbWUgY2xhc3MpXHJcbiAgOmVsc2VcclxuICBjbGFzcykpXHJcbiJ9IHs6c3ltIGNsYXNzLW5hbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsYXNzLW5hbWVcclxuIFt4XVxyXG4gKGNvbmQgKHN0cmluZz8geCkgeCAoa2V5d29yZD8geCkgKG5hbWUgeCkgOmVsc2UgeCkpXHJcbiJ9IHs6c3ltIG1lcmdlLXdpdGgtY2xhc3MsIDptZXRhIHs6ZG9jICJMaWtlIGNsb2p1cmUuY29yZS9tZXJnZSBidXQgY29uY2F0ZW5hdGUgOmNsYXNzIGVudHJpZXMuIiwgOmFyZ2xpc3RzIChbJiBtYXBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2Utd2l0aC1jbGFzc1xyXG4gXCJMaWtlIGNsb2p1cmUuY29yZS9tZXJnZSBidXQgY29uY2F0ZW5hdGUgOmNsYXNzIGVudHJpZXMuXCJcclxuIFsmIG1hcHNdXHJcbiAobGV0XHJcbiAgW21hcHMgKG1hcCBhdHRyaWJ1dGVzIG1hcHMpIGNsYXNzZXMgKG1hcGNhdCA6Y2xhc3MgbWFwcyldXHJcbiAgKHdoZW5cclxuICAgKHNlcSBtYXBzKVxyXG4gICAoY29uZC0+XHJcbiAgICAocmVkdWNlIGludG8ge30gbWFwcylcclxuICAgIChub3QgKGVtcHR5PyBjbGFzc2VzKSlcclxuICAgIChhc3NvYyA6Y2xhc3MgKHZlYyBjbGFzc2VzKSkpKSkpXHJcbiJ9KSwgZWRuYS5leGFtcGxlcyAoezpzeW0gYWVyaXRocy10aGVtZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGFlcml0aHMtdGhlbWVcclxuIChlZG5hLT5kYXRhLXVyaVxyXG4gIFs6cGlhbm9cclxuICAgezpvY3RhdmUgNCwgOnRlbXBvIDc0fVxyXG4gICBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDEvMiAjezpmIyA6K2R9XVxyXG4gICBbMS84ICN7Oi1lIDplIDorY30gOmEgMS8yICN7OmUgOmN9XVxyXG4gICBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDorZCA6K2MjIDorZSA6K2QgOmIgOitjI11cclxuICAgWzEvMiAjezotZSA6YyA6YX0gMS8yICN7OmUgOmN9XV0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJBIHR1bmUgZnJvbSBGaW5hbCBGYW50YXN5IFZJSSIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyB7Om9jdGF2ZSA0LCA6dGVtcG8gNzR9IFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgMS8yICN7OmYjIDorZH1dIFsxLzggI3s6LWUgOmUgOitjfSA6YSAxLzIgI3s6ZSA6Y31dIFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgOitkIDorYyMgOitlIDorZCA6YiA6K2MjXSBbMS8yICN7Oi1lIDpjIDphfSAxLzIgI3s6ZSA6Y31dXX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGFlcml0aHMtdGhlbWUpLCA6Ym9keS1zdHIgIls6cGlhbm9cclxuIHs6b2N0YXZlIDQsIDp0ZW1wbyA3NH1cclxuIFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgMS8yICN7OmYjIDorZH1dXHJcbiBbMS84ICN7Oi1lIDplIDorY30gOmEgMS8yICN7OmUgOmN9XVxyXG4gWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSA6K2QgOitjIyA6K2UgOitkIDpiIDorYyNdXHJcbiBbMS8yICN7Oi1lIDpjIDphfSAxLzIgI3s6ZSA6Y31dXVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvYWVyaXRocy10aGVtZS8wIn1dfSB7OnN5bSBkdWVsaW5nLWJhbmpvcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGR1ZWxpbmctYmFuam9zXHJcbiAoZWRuYS0+ZGF0YS11cmlcclxuICAje1s6Z3VpdGFyIHs6b2N0YXZlIDN9IDEvMTYgOnIgOnIgMS84IDpnIDpyIDpkIDpyIDpnIDpnIDpkXVxyXG4gICAgWzpiYW5qbyB7Om9jdGF2ZSAzfSAxLzE2IDpiIDorYyAxLzggOitkIDpiIDorYyA6YSA6YiA6ZyA6YV19KSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiUHV0IGRpZmZlcmVudCBwaWVjZXMgaW4gYSBzZXQgdG8gbWFrZSB0aGVtIHBsYXkgc2ltdWx0YW5lb3VzbHkiLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByICN7WzpndWl0YXIgezpvY3RhdmUgM30gMS8xNiA6ciA6ciAxLzggOmcgOnIgOmQgOnIgOmcgOmcgOmRdIFs6YmFuam8gezpvY3RhdmUgM30gMS8xNiA6YiA6K2MgMS84IDorZCA6YiA6K2MgOmEgOmIgOmcgOmFdfX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGR1ZWxpbmctYmFuam9zKSwgOmJvZHktc3RyICIje1s6Z3VpdGFyIHs6b2N0YXZlIDN9IDEvMTYgOnIgOnIgMS84IDpnIDpyIDpkIDpyIDpnIDpnIDpkXVxyXG4gIFs6YmFuam8gezpvY3RhdmUgM30gMS8xNiA6YiA6K2MgMS84IDorZCA6YiA6K2MgOmEgOmIgOmcgOmFdfVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvZHVlbGluZy1iYW5qb3MvMCJ9XX0gezpzeW0gaW50cm8tMS1zaW5nbGUtbm90ZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBpbnRyby0xLXNpbmdsZS1ub3Rlc1xyXG4gKGVkbmEtPmRhdGEtdXJpIFs6cGlhbm8gOmMgOmMjIDpkIDpkIyA6ZSA6ZiA6ZiMgOmcgOmcjIDphIDphIyA6Yl0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJIZXJlIGFyZSBhbGwgdHdlbHZlIG5vdGVzIiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vIDpjIDpjIyA6ZCA6ZCMgOmUgOmYgOmYjIDpnIDpnIyA6YSA6YSMgOmJdfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tMS1zaW5nbGUtbm90ZXMpLCA6Ym9keS1zdHIgIls6cGlhbm8gOmMgOmMjIDpkIDpkIyA6ZSA6ZiA6ZiMgOmcgOmcjIDphIDphIyA6Yl1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTEtc2luZ2xlLW5vdGVzLzAifV19IHs6c3ltIGludHJvLTItYXR0cmlidXRlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludHJvLTItYXR0cmlidXRlc1xyXG4gKGVkbmEtPmRhdGEtdXJpIFs6cGlhbm8gOmMgOmQgezpvY3RhdmUgM30gOmMgOmRdKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiSGFzaCBtYXBzIGxldCB5b3UgY2hhbmdlIHRoZSBhdHRyaWJ1dGVzIG9mIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBhZnRlciB0aGVtLlxuICAgSGVyZSBhcmUgYWxsIHRoZSBhdHRyaWJ1dGVzIHlvdSBjYW4gY2hhbmdlOlxuICAgXG4gICA6b2N0YXZlICAgICAgICAtIFRoZSBvY3RhdmUgKGRlZmF1bHQgaXMgNClcbiAgIDpsZW5ndGggICAgICAgIC0gVGhlIG5vdGUgbGVuZ3RoIChkZWZhdWx0IGlzIDEvNClcbiAgIDp0ZW1wbyAgICAgICAgIC0gSG93IGZhc3Qgb3Igc2xvdyBub3RlcyBhcmUgcGxheWVkIChkZWZhdWx0IGlzIDEyMClcbiAgIDpwYW4gICAgICAgICAgIC0gSG93IGZhciBsZWZ0L3JpZ2h0IHRoZSBub3RlIGlzIHBhbm5lZCBpbiB5b3VyIHNwZWFrZXIgKGRlZmF1bHQgaXMgNTApXG4gICA6cXVhbnRpemUgICAgICAtIFRoZSBwZXJjZW50YWdlIG9mIGEgbm90ZSdzIGZ1bGwgZHVyYXRpb24gdGhhdCBpcyBoZWFyZCAoZGVmYXVsdCBpcyA5MClcbiAgIDp0cmFuc3Bvc2UgICAgIC0gTW92ZXMgYWxsIG5vdGVzIHVwIG9yIGRvd24gYnkgYSBkZXNpcmVkIG51bWJlciBvZiBzZW1pdG9uZXMgKGRlZmF1bHQgaXMgMClcbiAgIDp2b2x1bWUgICAgICAgIC0gVGhlIHZvbHVtZSAoZGVmYXVsdCBpcyAxMDApXG4gICA6a2V5LXNpZ25hdHVyZSAtIEEgc2V0IG9mIG5vdGVzIHdpdGggYWNjaWRlbnRhbHMgLS0gZWl0aGVyIGEgc2hhcnAgKCMpLCBmbGF0ICg9KSwgb3IgbmF0dXJhbCAoXykgLS1cbiAgICAgICAgICAgICAgICAgICAgd2hvc2UgcHVycG9zZSBpcyB0byBzZXQgdGhlIGRlZmF1bHQgYWNjaWRlbnRhbCBmb3IgdGhhdCBub3RlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgaXQgZG9lc24ndCBpbmNsdWRlIG9uZSAoZGVmYXVsdCBpcyAje30pXG4gICA6cGxheT8gICAgICAgICAtIFdoZXRoZXIgb3Igbm90IHRvIHBsYXkgKGRlZmF1bHQgaXMgdHJ1ZSlcbiAgIFxuICAgUmVhZCBtb3JlIGFib3V0IGF0dHJpYnV0ZXMgaGVyZTpcbiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGRhLWxhbmcvYWxkYS9ibG9iL21hc3Rlci9kb2MvYXR0cmlidXRlcy5tZCIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyA6YyA6ZCB7Om9jdGF2ZSAzfSA6YyA6ZF19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBpbnRyby0yLWF0dHJpYnV0ZXMpLCA6Ym9keS1zdHIgIls6cGlhbm8gOmMgOmQgezpvY3RhdmUgM30gOmMgOmRdXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9pbnRyby0yLWF0dHJpYnV0ZXMvMCJ9XX0gezpzeW0gaW50cm8tMy1vY3RhdmUtc2hvcnRoYW5kLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQgKGVkbmEtPmRhdGEtdXJpIFs6cGlhbm8gOmMgOi1jIDorMmNdKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiWW91IGNhbiBjaGFuZ2UgYW4gaW5kaXZpZHVhbCBub3RlJ3MgcmVsYXRpdmUgb2N0YXZlIHdpdGggYSArIG9yIC0gaW5zaWRlIHRoZSBrZXl3b3JkLlxuICAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIGJ5IG1vcmUgdGhhbiBvbmUgb2N0YXZlLCBqdXN0IHB1dCBhIG51bWJlciBhZnRlci4iLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gOmMgOi1jIDorMmNdfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tMy1vY3RhdmUtc2hvcnRoYW5kKSwgOmJvZHktc3RyICJbOnBpYW5vIDpjIDotYyA6KzJjXVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvaW50cm8tMy1vY3RhdmUtc2hvcnRoYW5kLzAifV19IHs6c3ltIGludHJvLTQtbGVuZ3RoLXNob3J0aGFuZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludHJvLTQtbGVuZ3RoLXNob3J0aGFuZFxyXG4gKGVkbmEtPmRhdGEtdXJpIFs6cGlhbm8gOmMgOmQgMS8yIDplIDpmXSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIkEgc2hvcnRoYW5kIHdheSBvZiBjaGFuZ2luZyB0aGUgbm90ZSBsZW5ndGggaXMgc2ltcGx5IHRvIHdyaXRlIHRoZSBudW1iZXIuIiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vIDpjIDpkIDEvMiA6ZSA6Zl19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmQpLCA6Ym9keS1zdHIgIls6cGlhbm8gOmMgOmQgMS8yIDplIDpmXVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kLzAifV19IHs6c3ltIGludHJvLTUtY2hvcmQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGludHJvLTUtY2hvcmQgKGVkbmEtPmRhdGEtdXJpIFs6cGlhbm8gI3s6YyA6ZH1dKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiQSBjaG9yZCBpcyBqdXN0IG5vdGVzIGluIGEgc2V0IiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vICN7OmMgOmR9XX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGludHJvLTUtY2hvcmQpLCA6Ym9keS1zdHIgIls6cGlhbm8gI3s6YyA6ZH1dXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9pbnRyby01LWNob3JkLzAifV19KSwgZXhwb3VuZC51dGlsICh7OnN5bSBhc3NlcnQtbWVzc2FnZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGFzc2VydC1tZXNzYWdlXHJcbiBcIkludGVybmFsIEV4cG91bmQgYXNzZXJ0aW9uIGZhaWxlZC4gUGxlYXNlIHJlcG9ydCB0aGlzIGJ1ZyBhdCBodHRwczovL2dpdGh1Yi5jb20vYmhiL2V4cG91bmQvaXNzdWVzXCIpXHJcbiJ9IHs6c3ltIG5hbj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hbj9cclxuIFt4XVxyXG4gIz8oOmNsaiAoYW5kIChudW1iZXI/IHgpIChEb3VibGUvaXNOYU4geCkpIDpjbGpzIChhbmQgKG51bWJlcj8geCkgKGpzL2lzTmFOIHgpKSkpXHJcbiJ9KSwgY2xqcy5zb3VyY2UtbWFwICh7OnN5bSB1cGRhdGUtcmVzdWx0LCA6bWV0YSB7OmRvYyAiSGVscGVyIGZvciBkZWNvZGUuIFRha2UgYSBzb3VyY2UgbWFwIGFuZCB1cGRhdGUgaXQgYmFzZWQgb24gYVxuICBzZWdtZW50IG1hcC4iLCA6YXJnbGlzdHMgKFtyZXN1bHQgc2VnbWFwIGdsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLXJlc3VsdFxyXG4gXCJIZWxwZXIgZm9yIGRlY29kZS4gVGFrZSBhIHNvdXJjZSBtYXAgYW5kIHVwZGF0ZSBpdCBiYXNlZCBvbiBhXFxuICBzZWdtZW50IG1hcC5cIlxyXG4gW3Jlc3VsdCBzZWdtYXAgZ2xpbmVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbZ2NvbCBzb3VyY2UgbGluZSBjb2wgbmFtZV19XHJcbiAgIHNlZ21hcFxyXG4gICBkXHJcbiAgIHs6bGluZSBsaW5lLCA6Y29sIGNvbCwgOnNvdXJjZSBzb3VyY2V9XHJcbiAgIGRcclxuICAgKGlmIG5hbWUgKGFzc29jIGQgOm5hbWUgbmFtZSkgZCldXHJcbiAgKHVwZGF0ZS1pblxyXG4gICByZXN1bHRcclxuICAgW2dsaW5lXVxyXG4gICAoZm5pbFxyXG4gICAgKGZuXHJcbiAgICAgW21dXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBtXHJcbiAgICAgIFtnY29sXVxyXG4gICAgICAoZm5pbCAoZm4qIFtwMV9fNDg5MzEjXSAoY29uaiBwMV9fNDg5MzEjIGQpKSBbXSkpKVxyXG4gICAgKHNvcnRlZC1tYXApKSkpKVxyXG4ifSB7OnN5bSBlbmNvZGUsIDptZXRhIHs6ZG9jICJUYWtlIGFuIGludGVybmFsIHNvdXJjZSBtYXAgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50ZWQgYXMgbmVzdGVkXG4gICBzb3J0ZWQgbWFwcyBvZiBmaWxlLCBsaW5lLCBjb2x1bW4gYW5kIHJldHVybiBhIHNvdXJjZSBtYXAgdjMgSlNPTlxuICAgc3RyaW5nLiIsIDphcmdsaXN0cyAoW20gb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuY29kZVxyXG4gXCJUYWtlIGFuIGludGVybmFsIHNvdXJjZSBtYXAgcmVwcmVzZW50YXRpb24gcmVwcmVzZW50ZWQgYXMgbmVzdGVkXFxuICAgc29ydGVkIG1hcHMgb2YgZmlsZSwgbGluZSwgY29sdW1uIGFuZCByZXR1cm4gYSBzb3VyY2UgbWFwIHYzIEpTT05cXG4gICBzdHJpbmcuXCJcclxuIFttIG9wdHNdXHJcbiAobGV0XHJcbiAgW2xpbmVzXHJcbiAgIChhdG9tIFtbXV0pXHJcbiAgIG5hbWVzLT5pZHhcclxuICAgKGF0b20ge30pXHJcbiAgIG5hbWUtaWR4XHJcbiAgIChhdG9tIDApXHJcbiAgIHByZWFtYmxlLWxpbmVzXHJcbiAgICh0YWtlIChvciAoOnByZWFtYmxlLWxpbmUtY291bnQgb3B0cykgMCkgKHJlcGVhdCBbXSkpXHJcbiAgIGluZm8tPnNlZ3ZcclxuICAgKGZuXHJcbiAgICBbaW5mbyBzb3VyY2UtaWR4IGxpbmUgY29sXVxyXG4gICAgKGxldFxyXG4gICAgIFtzZWd2IFsoOmdjb2wgaW5mbykgc291cmNlLWlkeCBsaW5lIGNvbF1dXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbbmFtZSAoOm5hbWUgaW5mbyldXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtpZHhcclxuICAgICAgICAoaWYtbGV0XHJcbiAgICAgICAgIFtpZHggKGdldCBAbmFtZXMtPmlkeCBuYW1lKV1cclxuICAgICAgICAgaWR4XHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtjaWR4IEBuYW1lLWlkeF1cclxuICAgICAgICAgIChzd2FwISBuYW1lcy0+aWR4IGFzc29jIG5hbWUgY2lkeClcclxuICAgICAgICAgIChzd2FwISBuYW1lLWlkeCBpbmMpXHJcbiAgICAgICAgICBjaWR4KSldXHJcbiAgICAgICAoY29uaiBzZWd2IGlkeCkpXHJcbiAgICAgIHNlZ3YpKSlcclxuICAgZW5jb2RlLWNvbHNcclxuICAgKGZuXHJcbiAgICBbaW5mb3Mgc291cmNlLWlkeCBsaW5lIGNvbF1cclxuICAgIChkb3NlcVxyXG4gICAgIFtpbmZvIGluZm9zXVxyXG4gICAgIChsZXRcclxuICAgICAgW3NlZ3ZcclxuICAgICAgIChpbmZvLT5zZWd2IGluZm8gc291cmNlLWlkeCBsaW5lIGNvbClcclxuICAgICAgIGdsaW5lXHJcbiAgICAgICAoOmdsaW5lIGluZm8pXHJcbiAgICAgICBsY1xyXG4gICAgICAgKGNvdW50IEBsaW5lcyldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD4gZ2xpbmUgKGRlYyBsYykpXHJcbiAgICAgICAoc3dhcCFcclxuICAgICAgICBsaW5lc1xyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbbGluZXNdXHJcbiAgICAgICAgIChjb25qXHJcbiAgICAgICAgICAoaW50byBsaW5lcyAocmVwZWF0IChkZWMgKC0gZ2xpbmUgKGRlYyBsYykpKSBbXSkpXHJcbiAgICAgICAgICBbc2Vndl0pKSlcclxuICAgICAgIChzd2FwIVxyXG4gICAgICAgIGxpbmVzXHJcbiAgICAgICAgKGZuIFtsaW5lc10gKHVwZGF0ZS1pbiBsaW5lcyBbZ2xpbmVdIGNvbmogc2VndikpKSkpKSldXHJcbiAgKGRvc2VxXHJcbiAgIFtbc291cmNlLWlkeCBbXyBsaW5lc11dIChtYXAtaW5kZXhlZCAoZm4gW2kgdl0gW2kgdl0pIG0pXVxyXG4gICAoZG9zZXFcclxuICAgIFtbbGluZSBjb2xzXSBsaW5lc11cclxuICAgIChkb3NlcVxyXG4gICAgIFtbY29sIGluZm9zXSBjb2xzXVxyXG4gICAgIChlbmNvZGUtY29scyBpbmZvcyBzb3VyY2UtaWR4IGxpbmUgY29sKSkpKVxyXG4gIChsZXRcclxuICAgW3NvdXJjZS1tYXAtZmlsZS1jb250ZW50c1xyXG4gICAgKGNvbmQtPlxyXG4gICAgICNqcyB7XCJ2ZXJzaW9uXCIgMywgXCJmaWxlXCIgKDpmaWxlIG9wdHMpLCBcInNvdXJjZXNcIiAobGV0IFtwYXRocyAoa2V5cyBtKSBmIChjb21wIChpZiAodHJ1ZT8gKDpzb3VyY2UtbWFwLXRpbWVzdGFtcCBvcHRzKSkgKGZuKiBbcDFfXzQ4OTMyI10gKHN0ciBwMV9fNDg5MzIjIFwiP3JlbD1cIiAoLnZhbHVlT2YgKGpzL0RhdGUuKSkpKSBpZGVudGl0eSkgKGZuKiBbcDFfXzQ4OTMzI10gKGxhc3QgKHN0cmluZy9zcGxpdCBwMV9fNDg5MzMjICNcIi9cIikpKSldICgtPj4gcGF0aHMgKG1hcCBmKSAoaW50by1hcnJheSkpKSwgXCJsaW5lQ291bnRcIiAoOmxpbmVzIG9wdHMpLCBcIm1hcHBpbmdzXCIgKC0+PiAobGluZXMtPnNlZ3MgKGNvbmNhdCBwcmVhbWJsZS1saW5lcyAoY2xvanVyZS5jb3JlL2RlcmVmIGxpbmVzKSkpIChtYXAgKGZuKiBbcDFfXzQ4OTM0I10gKHN0cmluZy9qb2luIFwiLFwiIHAxX180ODkzNCMpKSkgKHN0cmluZy9qb2luIFwiO1wiKSksIFwibmFtZXNcIiAoaW50by1hcnJheSAobWFwIChzZXQvbWFwLWludmVydCAoY2xvanVyZS5jb3JlL2RlcmVmIG5hbWVzLT5pZHgpKSAocmFuZ2UgKGNvdW50IChjbG9qdXJlLmNvcmUvZGVyZWYgbmFtZXMtPmlkeCkpKSkpfVxyXG4gICAgICg6c291cmNlcy1jb250ZW50IG9wdHMpXHJcbiAgICAgKGRvdG9cclxuICAgICAgKGdvYmovc2V0XHJcbiAgICAgICBcInNvdXJjZXNDb250ZW50XCJcclxuICAgICAgIChpbnRvLWFycmF5ICg6c291cmNlcy1jb250ZW50IG9wdHMpKSkpKV1cclxuICAgKC5zdHJpbmdpZnkganMvSlNPTiBzb3VyY2UtbWFwLWZpbGUtY29udGVudHMpKSkpXHJcbiJ9IHs6c3ltIGludmVydC1yZXZlcnNlLW1hcCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgQ2xvanVyZVNjcmlwdCB0byBKYXZhU2NyaXB0IHNvdXJjZSBtYXAsIGludmVydCBpdC4gVXNlZnVsIHdoZW5cbiAgIG1hcHBpbmcgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMgd2hlbiBlbnZpcm9ubWVudCBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlLiIsIDphcmdsaXN0cyAoW3JldmVyc2UtbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW52ZXJ0LXJldmVyc2UtbWFwXHJcbiBcIkdpdmVuIGEgQ2xvanVyZVNjcmlwdCB0byBKYXZhU2NyaXB0IHNvdXJjZSBtYXAsIGludmVydCBpdC4gVXNlZnVsIHdoZW5cXG4gICBtYXBwaW5nIEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzIHdoZW4gZW52aXJvbm1lbnQgc3VwcG9ydCBpcyB1bmF2YWlsYWJsZS5cIlxyXG4gW3JldmVyc2UtbWFwXVxyXG4gKGxldFxyXG4gIFtpbnZlcnRlZCAoYXRvbSAoc29ydGVkLW1hcCkpXVxyXG4gIChkb3NlcVxyXG4gICBbW2xpbmUgY29sdW1uc10gcmV2ZXJzZS1tYXBdXHJcbiAgIChkb3NlcVxyXG4gICAgW1tjb2x1bW4gY29sdW1uLWluZm9dIGNvbHVtbnNdXHJcbiAgICAoZG9zZXFcclxuICAgICBbezprZXlzIFtnbGluZSBnY29sIG5hbWVdfSBjb2x1bW4taW5mb11cclxuICAgICAoc3dhcCFcclxuICAgICAgaW52ZXJ0ZWRcclxuICAgICAgdXBkYXRlLWluXHJcbiAgICAgIFtnbGluZV1cclxuICAgICAgKGZuaWxcclxuICAgICAgIChmblxyXG4gICAgICAgIFtjb2x1bW5zXVxyXG4gICAgICAgICh1cGRhdGUtaW5cclxuICAgICAgICAgY29sdW1uc1xyXG4gICAgICAgICBbZ2NvbF1cclxuICAgICAgICAgKGZuaWwgY29uaiBbXSlcclxuICAgICAgICAgezpsaW5lIGxpbmUsIDpjb2wgY29sdW1uLCA6bmFtZSBuYW1lfSkpXHJcbiAgICAgICAoc29ydGVkLW1hcCkpKSkpKVxyXG4gIEBpbnZlcnRlZCkpXHJcbiJ9IHs6c3ltIGRlY29kZSwgOm1ldGEgezpkb2MgIkNvbnZlcnQgYSB2MyBzb3VyY2UgbWFwIEpTT04gb2JqZWN0IGludG8gYSBzb3VyY2UgbWFwIG1hcHBpbmdcbiAgZ2VuZXJhdGVkIEphdmFTY3JpcHQgc291cmNlIGxvY2F0aW9ucyB0byB0aGUgb3JpZ2luYWxcbiAgQ2xvanVyZVNjcmlwdC4iLCA6YXJnbGlzdHMgW1tzb3VyY2UtbWFwXSBbbWFwcGluZ3Mgc291cmNlLW1hcF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlY29kZVxyXG4gXCJDb252ZXJ0IGEgdjMgc291cmNlIG1hcCBKU09OIG9iamVjdCBpbnRvIGEgc291cmNlIG1hcCBtYXBwaW5nXFxuICBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgbG9jYXRpb25zIHRvIHRoZSBvcmlnaW5hbFxcbiAgQ2xvanVyZVNjcmlwdC5cIlxyXG4gKFtzb3VyY2UtbWFwXSAoZGVjb2RlIChnb2JqL2dldCBzb3VyY2UtbWFwIFwibWFwcGluZ3NcIikgc291cmNlLW1hcCkpXHJcbiAoW21hcHBpbmdzIHNvdXJjZS1tYXBdXHJcbiAgKGxldFxyXG4gICBbc291cmNlc1xyXG4gICAgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJzb3VyY2VzXCIpXHJcbiAgICByZWxzZWctaW5pdFxyXG4gICAgWzAgMCAwIDAgMF1cclxuICAgIGxpbmVzXHJcbiAgICAoc2VxIChzdHJpbmcvc3BsaXQgbWFwcGluZ3MgI1wiO1wiKSldXHJcbiAgIChsb29wXHJcbiAgICBbZ2xpbmUgMCBsaW5lcyBsaW5lcyByZWxzZWcgcmVsc2VnLWluaXQgcmVzdWx0IHt9XVxyXG4gICAgKGlmXHJcbiAgICAgbGluZXNcclxuICAgICAobGV0XHJcbiAgICAgIFtsaW5lXHJcbiAgICAgICAoZmlyc3QgbGluZXMpXHJcbiAgICAgICBbcmVzdWx0IHJlbHNlZ11cclxuICAgICAgIChpZlxyXG4gICAgICAgIChzdHJpbmcvYmxhbms/IGxpbmUpXHJcbiAgICAgICAgW3Jlc3VsdCByZWxzZWddXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbc2VncyAoc2VxIChzdHJpbmcvc3BsaXQgbGluZSAjXCIsXCIpKV1cclxuICAgICAgICAgKGxvb3BcclxuICAgICAgICAgIFtzZWdzIHNlZ3MgcmVsc2VnIHJlbHNlZyByZXN1bHQgcmVzdWx0XVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgc2Vnc1xyXG4gICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgW3NlZ1xyXG4gICAgICAgICAgICAgKGZpcnN0IHNlZ3MpXHJcbiAgICAgICAgICAgICBucmVsc2VnXHJcbiAgICAgICAgICAgICAoc2VnLWNvbWJpbmUgKGJhc2U2NC12bHEvZGVjb2RlIHNlZykgcmVsc2VnKV1cclxuICAgICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgICAobmV4dCBzZWdzKVxyXG4gICAgICAgICAgICAgbnJlbHNlZ1xyXG4gICAgICAgICAgICAgKHVwZGF0ZS1yZXN1bHRcclxuICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAoc2VnLT5tYXAgbnJlbHNlZyBzb3VyY2UtbWFwKVxyXG4gICAgICAgICAgICAgIGdsaW5lKSkpXHJcbiAgICAgICAgICAgW3Jlc3VsdCByZWxzZWddKSkpKV1cclxuICAgICAgKHJlY3VyIChpbmMgZ2xpbmUpIChuZXh0IGxpbmVzKSAoYXNzb2MgcmVsc2VnIDAgMCkgcmVzdWx0KSlcclxuICAgICByZXN1bHQpKSkpKVxyXG4ifSB7OnN5bSBzZWctPm1hcCwgOm1ldGEgezpkb2MgIlRha2UgYSBzb3VyY2UgbWFwIHNlZ21lbnQgcmVwcmVzZW50ZWQgYXMgYSB2ZWN0b3JcbiAgIGFuZCByZXR1cm4gYSBtYXAuIiwgOmFyZ2xpc3RzIChbc2VnIHNvdXJjZS1tYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZWctPm1hcFxyXG4gXCJUYWtlIGEgc291cmNlIG1hcCBzZWdtZW50IHJlcHJlc2VudGVkIGFzIGEgdmVjdG9yXFxuICAgYW5kIHJldHVybiBhIG1hcC5cIlxyXG4gW3NlZyBzb3VyY2UtbWFwXVxyXG4gKGxldFxyXG4gIFtbZ2NvbCBzb3VyY2UgbGluZSBjb2wgbmFtZV0gc2VnXVxyXG4gIHs6Z2NvbCBnY29sLFxyXG4gICA6c291cmNlIChhZ2V0IChnb2JqL2dldCBzb3VyY2UtbWFwIFwic291cmNlc1wiKSBzb3VyY2UpLFxyXG4gICA6bGluZSBsaW5lLFxyXG4gICA6Y29sIGNvbCxcclxuICAgOm5hbWVcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbbmFtZSAoLT4gc2VnIG1ldGEgOm5hbWUpXVxyXG4gICAgKGFnZXQgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJuYW1lc1wiKSBuYW1lKSl9KSlcclxuIn0gezpzeW0gc291cmNlLWNvbXBhcmUsIDptZXRhIHs6ZG9jICJUYWtlIGEgc2VxIG9mIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCByZXR1cm4gYSBjb21wYXJhdG9yXG4gICB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBhIHNvcnRlZCBtYXAuIEZvciByZXZlcnNlXG4gICBzb3VyY2UgbWFwcy4iLCA6YXJnbGlzdHMgKFtzb3VyY2VzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWNvbXBhcmVcclxuIFwiVGFrZSBhIHNlcSBvZiBzb3VyY2UgZmlsZSBuYW1lcyBhbmQgcmV0dXJuIGEgY29tcGFyYXRvclxcbiAgIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgc29ydGVkIG1hcC4gRm9yIHJldmVyc2VcXG4gICBzb3VyY2UgbWFwcy5cIlxyXG4gW3NvdXJjZXNdXHJcbiAobGV0XHJcbiAgW3NvdXJjZXMgKGluZGV4ZWQtc291cmNlcyBzb3VyY2VzKV1cclxuICAoZm4gW2EgYl0gKGNvbXBhcmUgKHNvdXJjZXMgYSkgKHNvdXJjZXMgYikpKSkpXHJcbiJ9IHs6c3ltIGRlY29kZS1yZXZlcnNlLCA6bWV0YSB7OmRvYyAiQ29udmVydCBhIHYzIHNvdXJjZSBtYXAgSlNPTiBvYmplY3QgaW50byBhIHJldmVyc2Ugc291cmNlIG1hcFxuICBtYXBwaW5nIG9yaWdpbmFsIENsb2p1cmVTY3JpcHQgc291cmNlIGxvY2F0aW9ucyB0byB0aGUgZ2VuZXJhdGVkXG4gIEphdmFTY3JpcHQuIiwgOmFyZ2xpc3RzIFtbc291cmNlLW1hcF0gW21hcHBpbmdzIHNvdXJjZS1tYXBdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWNvZGUtcmV2ZXJzZVxyXG4gXCJDb252ZXJ0IGEgdjMgc291cmNlIG1hcCBKU09OIG9iamVjdCBpbnRvIGEgcmV2ZXJzZSBzb3VyY2UgbWFwXFxuICBtYXBwaW5nIG9yaWdpbmFsIENsb2p1cmVTY3JpcHQgc291cmNlIGxvY2F0aW9ucyB0byB0aGUgZ2VuZXJhdGVkXFxuICBKYXZhU2NyaXB0LlwiXHJcbiAoW3NvdXJjZS1tYXBdXHJcbiAgKGRlY29kZS1yZXZlcnNlIChnb2JqL2dldCBzb3VyY2UtbWFwIFwibWFwcGluZ3NcIikgc291cmNlLW1hcCkpXHJcbiAoW21hcHBpbmdzIHNvdXJjZS1tYXBdXHJcbiAgKGxldFxyXG4gICBbc291cmNlc1xyXG4gICAgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJzb3VyY2VzXCIpXHJcbiAgICByZWxzZWctaW5pdFxyXG4gICAgWzAgMCAwIDAgMF1cclxuICAgIGxpbmVzXHJcbiAgICAoc2VxIChzdHJpbmcvc3BsaXQgbWFwcGluZ3MgI1wiO1wiKSldXHJcbiAgIChsb29wXHJcbiAgICBbZ2xpbmVcclxuICAgICAwXHJcbiAgICAgbGluZXNcclxuICAgICBsaW5lc1xyXG4gICAgIHJlbHNlZ1xyXG4gICAgIHJlbHNlZy1pbml0XHJcbiAgICAgcmVzdWx0XHJcbiAgICAgKHNvcnRlZC1tYXAtYnkgKHNvdXJjZS1jb21wYXJlIHNvdXJjZXMpKV1cclxuICAgIChpZlxyXG4gICAgIGxpbmVzXHJcbiAgICAgKGxldFxyXG4gICAgICBbbGluZVxyXG4gICAgICAgKGZpcnN0IGxpbmVzKVxyXG4gICAgICAgW3Jlc3VsdCByZWxzZWddXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoc3RyaW5nL2JsYW5rPyBsaW5lKVxyXG4gICAgICAgIFtyZXN1bHQgcmVsc2VnXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3NlZ3MgKHNlcSAoc3RyaW5nL3NwbGl0IGxpbmUgI1wiLFwiKSldXHJcbiAgICAgICAgIChsb29wXHJcbiAgICAgICAgICBbc2VncyBzZWdzIHJlbHNlZyByZWxzZWcgcmVzdWx0IHJlc3VsdF1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIHNlZ3NcclxuICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgIFtzZWdcclxuICAgICAgICAgICAgIChmaXJzdCBzZWdzKVxyXG4gICAgICAgICAgICAgbnJlbHNlZ1xyXG4gICAgICAgICAgICAgKHNlZy1jb21iaW5lIChiYXNlNjQtdmxxL2RlY29kZSBzZWcpIHJlbHNlZyldXHJcbiAgICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICAgKG5leHQgc2VncylcclxuICAgICAgICAgICAgIG5yZWxzZWdcclxuICAgICAgICAgICAgICh1cGRhdGUtcmV2ZXJzZS1yZXN1bHRcclxuICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAoc2VnLT5tYXAgbnJlbHNlZyBzb3VyY2UtbWFwKVxyXG4gICAgICAgICAgICAgIGdsaW5lKSkpXHJcbiAgICAgICAgICAgW3Jlc3VsdCByZWxzZWddKSkpKV1cclxuICAgICAgKHJlY3VyIChpbmMgZ2xpbmUpIChuZXh0IGxpbmVzKSAoYXNzb2MgcmVsc2VnIDAgMCkgcmVzdWx0KSlcclxuICAgICByZXN1bHQpKSkpKVxyXG4ifSB7OnN5bSBsaW5lcy0+c2VncywgOm1ldGEgezpkb2MgIlRha2UgYSBuZXN0ZWQgc29ydGVkIG1hcCBlbmNvZGluZyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb25cbiAgIGZvciBhIGZpbGUgYW5kIHJldHVybiBhIHZlY3RvciBvZiB2ZWN0b3JzIG9mIGVuY29kZWQgc2VnbWVudHMuXG4gICBFYWNoIHZlY3RvciByZXByZXNlbnRzIGEgbGluZSwgYW5kIHRoZSBpbnRlcm5hbCB2ZWN0b3JzIGFyZSBzZWdtZW50c1xuICAgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgbGluZS4iLCA6YXJnbGlzdHMgKFtsaW5lc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmVzLT5zZWdzXHJcbiBcIlRha2UgYSBuZXN0ZWQgc29ydGVkIG1hcCBlbmNvZGluZyBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb25cXG4gICBmb3IgYSBmaWxlIGFuZCByZXR1cm4gYSB2ZWN0b3Igb2YgdmVjdG9ycyBvZiBlbmNvZGVkIHNlZ21lbnRzLlxcbiAgIEVhY2ggdmVjdG9yIHJlcHJlc2VudHMgYSBsaW5lLCBhbmQgdGhlIGludGVybmFsIHZlY3RvcnMgYXJlIHNlZ21lbnRzXFxuICAgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgbGluZS5cIlxyXG4gW2xpbmVzXVxyXG4gKGxldFxyXG4gIFtyZWxzZWcgKGF0b20gWzAgMCAwIDAgMF0pXVxyXG4gIChyZWR1Y2VcclxuICAgKGZuXHJcbiAgICBbc2VncyBjb2xzXVxyXG4gICAgKHN3YXAhXHJcbiAgICAgcmVsc2VnXHJcbiAgICAgKGZuIFtbXyBzb3VyY2UgbGluZSBjb2wgbmFtZV1dIFswIHNvdXJjZSBsaW5lIGNvbCBuYW1lXSkpXHJcbiAgICAoY29ualxyXG4gICAgIHNlZ3NcclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmblxyXG4gICAgICAgW2NvbHMgW2djb2wgc2lkeCBsaW5lIGNvbCBuYW1lIDphcyBzZWddXVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtvZmZzZXQgKG1hcCAtIHNlZyBAcmVsc2VnKV1cclxuICAgICAgICAoc3dhcCFcclxuICAgICAgICAgcmVsc2VnXHJcbiAgICAgICAgIChmbiBbW18gXyBfIF8gbG5hbWVdXSBbZ2NvbCBzaWR4IGxpbmUgY29sIChvciBuYW1lIGxuYW1lKV0pKVxyXG4gICAgICAgIChjb25qIGNvbHMgKGJhc2U2NC12bHEvZW5jb2RlIG9mZnNldCkpKSlcclxuICAgICAgW11cclxuICAgICAgY29scykpKVxyXG4gICBbXVxyXG4gICBsaW5lcykpKVxyXG4ifSB7OnN5bSBtZXJnZS1zb3VyY2UtbWFwcywgOm1ldGEgezpkb2MgIk1lcmdlIGFuIGludGVybmFsIHNvdXJjZSBtYXAgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGVcbiAgIENsb2p1cmVTY3JpcHQgZmlsZSBtYXBwaW5nIG9yaWdpbmFsIHRvIGdlbmVyYXRlZCB3aXRoIGFcbiAgIHNlY29uZCBzb3VyY2UgbWFwIG1hcHBpbmcgb3JpZ2luYWwgSlMgdG8gZ2VuZXJhdGVkIEpTLlxuICAgVGhlIGlzIHRvIHN1cHBvcnQgc291cmNlIG1hcHMgdGhhdCB3b3JrIHRocm91Z2ggbXVsdGlwbGVcbiAgIGNvbXBpbGF0aW9uIHN0ZXBzIGxpa2UgR29vZ2xlIENsb3N1cmUgb3B0aW1pemF0aW9uIHBhc3Nlcy4iLCA6YXJnbGlzdHMgKFtjbGpzLW1hcCBqcy1tYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS1zb3VyY2UtbWFwc1xyXG4gXCJNZXJnZSBhbiBpbnRlcm5hbCBzb3VyY2UgbWFwIHJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlXFxuICAgQ2xvanVyZVNjcmlwdCBmaWxlIG1hcHBpbmcgb3JpZ2luYWwgdG8gZ2VuZXJhdGVkIHdpdGggYVxcbiAgIHNlY29uZCBzb3VyY2UgbWFwIG1hcHBpbmcgb3JpZ2luYWwgSlMgdG8gZ2VuZXJhdGVkIEpTLlxcbiAgIFRoZSBpcyB0byBzdXBwb3J0IHNvdXJjZSBtYXBzIHRoYXQgd29yayB0aHJvdWdoIG11bHRpcGxlXFxuICAgY29tcGlsYXRpb24gc3RlcHMgbGlrZSBHb29nbGUgQ2xvc3VyZSBvcHRpbWl6YXRpb24gcGFzc2VzLlwiXHJcbiBbY2xqcy1tYXAganMtbWFwXVxyXG4gKGxvb3BcclxuICBbbGluZS1tYXAtc2VxIChzZXEgY2xqcy1tYXApIG5ldy1saW5lcyAoc29ydGVkLW1hcCldXHJcbiAgKGlmXHJcbiAgIGxpbmUtbWFwLXNlcVxyXG4gICAobGV0XHJcbiAgICBbW2xpbmUgY29sLW1hcF1cclxuICAgICAoZmlyc3QgbGluZS1tYXAtc2VxKVxyXG4gICAgIG5ldy1jb2xzXHJcbiAgICAgKGxvb3BcclxuICAgICAgW2NvbC1tYXAtc2VxIChzZXEgY29sLW1hcCkgbmV3LWNvbHMgKHNvcnRlZC1tYXApXVxyXG4gICAgICAoaWZcclxuICAgICAgIGNvbC1tYXAtc2VxXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW1tjb2wgaW5mb3NdIChmaXJzdCBjb2wtbWFwLXNlcSldXHJcbiAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgIChuZXh0IGNvbC1tYXAtc2VxKVxyXG4gICAgICAgICAoYXNzb2NcclxuICAgICAgICAgIG5ldy1jb2xzXHJcbiAgICAgICAgICBjb2xcclxuICAgICAgICAgIChyZWR1Y2VcclxuICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgW3YgezprZXlzIFtnbGluZSBnY29sXX1dXHJcbiAgICAgICAgICAgIChpbnRvIHYgKGdldC1pbiBqcy1tYXAgW2dsaW5lIGdjb2xdKSkpXHJcbiAgICAgICAgICAgW11cclxuICAgICAgICAgICBpbmZvcykpKSlcclxuICAgICAgIG5ldy1jb2xzKSldXHJcbiAgICAocmVjdXIgKG5leHQgbGluZS1tYXAtc2VxKSAoYXNzb2MgbmV3LWxpbmVzIGxpbmUgbmV3LWNvbHMpKSlcclxuICAgbmV3LWxpbmVzKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1yZXZlcnNlLXJlc3VsdCwgOm1ldGEgezpkb2MgIkhlbHBlciBmb3IgZGVjb2RlLXJldmVyc2UuIFRha2UgYSByZXZlcnNlIHNvdXJjZSBtYXAgYW5kXG4gIHVwZGF0ZSBpdCB3aXRoIGEgc2VnbWVudCBtYXAuIiwgOmFyZ2xpc3RzIChbcmVzdWx0IHNlZ21hcCBnbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1yZXZlcnNlLXJlc3VsdFxyXG4gXCJIZWxwZXIgZm9yIGRlY29kZS1yZXZlcnNlLiBUYWtlIGEgcmV2ZXJzZSBzb3VyY2UgbWFwIGFuZFxcbiAgdXBkYXRlIGl0IHdpdGggYSBzZWdtZW50IG1hcC5cIlxyXG4gW3Jlc3VsdCBzZWdtYXAgZ2xpbmVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbZ2NvbCBzb3VyY2UgbGluZSBjb2wgbmFtZV19XHJcbiAgIHNlZ21hcFxyXG4gICBkXHJcbiAgIHs6Z2xpbmUgZ2xpbmUsIDpnY29sIGdjb2x9XHJcbiAgIGRcclxuICAgKGlmIG5hbWUgKGFzc29jIGQgOm5hbWUgbmFtZSkgZCldXHJcbiAgKHVwZGF0ZS1pblxyXG4gICByZXN1bHRcclxuICAgW3NvdXJjZV1cclxuICAgKGZuaWxcclxuICAgIChmblxyXG4gICAgIFttXVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgbVxyXG4gICAgICBbbGluZV1cclxuICAgICAgKGZuaWxcclxuICAgICAgIChmbiBbbV0gKHVwZGF0ZS1pbiBtIFtjb2xdIChmbmlsIChmbiBbdl0gKGNvbmogdiBkKSkgW10pKSlcclxuICAgICAgIChzb3J0ZWQtbWFwKSkpKVxyXG4gICAgKHNvcnRlZC1tYXApKSkpKVxyXG4ifSB7OnN5bSBpbmRleGVkLXNvdXJjZXMsIDptZXRhIHs6ZG9jICJUYWtlIGEgc2VxIG9mIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCByZXR1cm4gYSBtYXAgZnJvbVxuICAgZmlsZSBudW1iZXIgdG8gaW50ZWdlciBpbmRleC4gRm9yIHJldmVyc2Ugc291cmNlIG1hcHMuIiwgOmFyZ2xpc3RzIChbc291cmNlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4ZWQtc291cmNlc1xyXG4gXCJUYWtlIGEgc2VxIG9mIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCByZXR1cm4gYSBtYXAgZnJvbVxcbiAgIGZpbGUgbnVtYmVyIHRvIGludGVnZXIgaW5kZXguIEZvciByZXZlcnNlIHNvdXJjZSBtYXBzLlwiXHJcbiBbc291cmNlc11cclxuICgtPj5cclxuICBzb3VyY2VzXHJcbiAgKG1hcC1pbmRleGVkIChmbiBbYSBiXSBbYSBiXSkpXHJcbiAgKHJlZHVjZSAoZm4gW20gW2kgdl1dIChhc3NvYyBtIHYgaSkpIHt9KSkpXHJcbiJ9IHs6c3ltIHNlZy1jb21iaW5lLCA6bWV0YSB7OmRvYyAiQ29tYmluZSBhIHNvdXJjZSBtYXAgc2VnbWVudCB2ZWN0b3IgYW5kIGEgcmVsYXRpdmVcbiAgIHNvdXJjZSBtYXAgc2VnbWVudCB2ZWN0b3IgYW5kIGNvbWJpbmUgdGhlbSB0byBnZXRcbiAgIGFuIGFic29sdXRlIHNlZ21lbnQgcG9zaXRpdG9uIGluZm9ybWF0aW9uIGFzIGEgdmVjdG9yLiIsIDphcmdsaXN0cyAoW3NlZyByZWxzZWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZWctY29tYmluZVxyXG4gXCJDb21iaW5lIGEgc291cmNlIG1hcCBzZWdtZW50IHZlY3RvciBhbmQgYSByZWxhdGl2ZVxcbiAgIHNvdXJjZSBtYXAgc2VnbWVudCB2ZWN0b3IgYW5kIGNvbWJpbmUgdGhlbSB0byBnZXRcXG4gICBhbiBhYnNvbHV0ZSBzZWdtZW50IHBvc2l0aXRvbiBpbmZvcm1hdGlvbiBhcyBhIHZlY3Rvci5cIlxyXG4gW3NlZyByZWxzZWddXHJcbiAobGV0XHJcbiAgW1tnY29sIHNvdXJjZSBsaW5lIGNvbCBuYW1lXVxyXG4gICBzZWdcclxuICAgW3JnY29sIHJzb3VyY2UgcmxpbmUgcmNvbCBybmFtZV1cclxuICAgcmVsc2VnXHJcbiAgIG5zZWdcclxuICAgWygrIGdjb2wgcmdjb2wpXHJcbiAgICAoKyAob3Igc291cmNlIDApIHJzb3VyY2UpXHJcbiAgICAoKyAob3IgbGluZSAwKSBybGluZSlcclxuICAgICgrIChvciBjb2wgMCkgcmNvbClcclxuICAgICgrIChvciBuYW1lIDApIHJuYW1lKV1dXHJcbiAgKGlmIG5hbWUgKHdpdGgtbWV0YSBuc2VnIHs6bmFtZSAoKyBuYW1lIHJuYW1lKX0pIG5zZWcpKSlcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmNvbW1vbnMgKHs6c3ltIG1hdGNoLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF0Y2gtbnVtYmVyXHJcbiBbc11cclxuIChpZlxyXG4gIChtYXRjaGVzPyBpbnQtcGF0dGVybiBzKVxyXG4gIChtYXRjaC1pbnQgcylcclxuICAoaWZcclxuICAgKG1hdGNoZXM/IGZsb2F0LXBhdHRlcm4gcylcclxuICAgKG1hdGNoLWZsb2F0IHMpXHJcbiAgICh3aGVuIChtYXRjaGVzPyByYXRpby1wYXR0ZXJuIHMpIChtYXRjaC1yYXRpbyBzKSkpKSlcclxuIn0gezpzeW0gc2tpcC1saW5lLCA6bWV0YSB7OmRvYyAiQWR2YW5jZXMgdGhlIHJlYWRlciB0byB0aGUgZW5kIG9mIGEgbGluZS4gUmV0dXJucyB0aGUgcmVhZGVyIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2tpcC1saW5lXHJcbiBcIkFkdmFuY2VzIHRoZSByZWFkZXIgdG8gdGhlIGVuZCBvZiBhIGxpbmUuIFJldHVybnMgdGhlIHJlYWRlclwiXHJcbiBbcmVhZGVyXVxyXG4gKGxvb3AgW10gKHdoZW4tbm90IChuZXdsaW5lPyAocmVhZC1jaGFyIHJlYWRlcikpIChyZWN1cikpKVxyXG4gcmVhZGVyKVxyXG4ifSB7OnN5bSBpbnQtcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludC1wYXR0ZXJuXHJcbiAjXCJeKFstK10/KSg/OigwKXwoWzEtOV1bMC05XSopfDBbeFhdKFswLTlBLUZhLWZdKyl8MChbMC03XSspfChbMS05XVswLTldPylbclJdKFswLTlBLVphLXpdKyl8MFswLTldKykoTik/JFwiKVxyXG4ifSB7OnN5bSByZWFkLWNvbW1lbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyICYgX10pfSwgOnNvdXJjZSAiKGRlZm4gcmVhZC1jb21tZW50IFtyZHIgJiBfXSAoc2tpcC1saW5lIHJkcikpXHJcbiJ9IHs6c3ltIHBhcnNlLXN5bWJvbCwgOm1ldGEgezpkb2MgIlBhcnNlcyBhIHN0cmluZyBpbnRvIGEgdmVjdG9yIG9mIHRoZSBuYW1lc3BhY2UgYW5kIHN5bWJvbCIsIDphcmdsaXN0cyAoW3Rva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2Utc3ltYm9sXHJcbiBcIlBhcnNlcyBhIHN0cmluZyBpbnRvIGEgdmVjdG9yIG9mIHRoZSBuYW1lc3BhY2UgYW5kIHN5bWJvbFwiXHJcbiBbdG9rZW5dXHJcbiAod2hlbi1ub3RcclxuICAob3JcclxuICAgKGlkZW50aWNhbD8gXCJcIiB0b2tlbilcclxuICAgKHRydWU/ICgudGVzdCAjXCI6JFwiIHRva2VuKSlcclxuICAgKHRydWU/ICgudGVzdCAjXCJeOjpcIiB0b2tlbikpKVxyXG4gIChsZXRcclxuICAgW25zLWlkeFxyXG4gICAgKC5pbmRleE9mIHRva2VuIFwiL1wiKVxyXG4gICAgbnNcclxuICAgICh3aGVuIChwb3M/IG5zLWlkeCkgKHN1YnMgdG9rZW4gMCBucy1pZHgpKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8gbnMpXHJcbiAgICAobGV0XHJcbiAgICAgW25zLWlkeCAoaW5jIG5zLWlkeCldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgICg9PSBucy1pZHggKGNvdW50IHRva2VuKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW3N5bSAoc3VicyB0b2tlbiBucy1pZHgpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICAoYW5kXHJcbiAgICAgICAgIChub3QgKG51bWVyaWM/IChudGggc3ltIDApKSlcclxuICAgICAgICAgKG5vdCAoaWRlbnRpY2FsPyBcIlwiIHN5bSkpXHJcbiAgICAgICAgIChmYWxzZT8gKC50ZXN0ICNcIjokXCIgbnMpKVxyXG4gICAgICAgICAob3IgKGlkZW50aWNhbD8gc3ltIFwiL1wiKSAoPT0gLTEgKC5pbmRleE9mIHN5bSBcIi9cIikpKSlcclxuICAgICAgICBbbnMgc3ltXSkpKSlcclxuICAgICh3aGVuXHJcbiAgICAgKG9yIChpZGVudGljYWw/IHRva2VuIFwiL1wiKSAoPT0gLTEgKC5pbmRleE9mIHRva2VuIFwiL1wiKSkpXHJcbiAgICAgW25pbCB0b2tlbl0pKSkpKVxyXG4ifSB7OnN5bSBudW1iZXItbGl0ZXJhbD8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciB0aGUgcmVhZGVyIGlzIGF0IHRoZSBzdGFydCBvZiBhIG51bWJlciBsaXRlcmFsIiwgOmFyZ2xpc3RzIChbcmVhZGVyIGluaXRjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWJlci1saXRlcmFsP1xyXG4gXCJDaGVja3Mgd2hldGhlciB0aGUgcmVhZGVyIGlzIGF0IHRoZSBzdGFydCBvZiBhIG51bWJlciBsaXRlcmFsXCJcclxuIFtyZWFkZXIgaW5pdGNoXVxyXG4gKG9yXHJcbiAgKG51bWVyaWM/IGluaXRjaClcclxuICAoYW5kXHJcbiAgIChvciAoaWRlbnRpY2FsPyBcXCsgaW5pdGNoKSAoaWRlbnRpY2FsPyBcXC0gaW5pdGNoKSlcclxuICAgKG51bWVyaWM/IChwZWVrLWNoYXIgcmVhZGVyKSkpKSlcclxuIn0gezpzeW0gcmVhZC1wYXN0LCA6bWV0YSB7OmRvYyAiUmVhZCB1bnRpbCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IG1hdGNoIHByZWQsIHJldHVybmluZ1xuICAgY2hhci4iLCA6YXJnbGlzdHMgKFtwcmVkIHJkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtcGFzdFxyXG4gXCJSZWFkIHVudGlsIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgbWF0Y2ggcHJlZCwgcmV0dXJuaW5nXFxuICAgY2hhci5cIlxyXG4gW3ByZWQgcmRyXVxyXG4gKGxvb3AgW2NoIChyZWFkLWNoYXIgcmRyKV0gKGlmIChwcmVkIGNoKSAocmVjdXIgKHJlYWQtY2hhciByZHIpKSBjaCkpKVxyXG4ifSB7OnN5bSBmbG9hdC1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBmbG9hdC1wYXR0ZXJuICNcIihbLStdP1swLTldKyhcXC5bMC05XSopPyhbZUVdWy0rXT9bMC05XSspPykoTSk/XCIpXHJcbiJ9IHs6c3ltIG1hdGNoZXM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BhdHRlcm4gc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hdGNoZXM/XHJcbiBbcGF0dGVybiBzXVxyXG4gKGxldCBbW21hdGNoXSAocmUtZmluZCBwYXR0ZXJuIHMpXSAoaWRlbnRpY2FsPyBtYXRjaCBzKSkpXHJcbiJ9IHs6c3ltIHRocm93aW5nLXJlYWRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttc2ddKX0sIDpzb3VyY2UgIihkZWZuIHRocm93aW5nLXJlYWRlciBbbXNnXSAoZm4gW3JkciAmIF9dIChyZWFkZXItZXJyb3IgcmRyIG1zZykpKVxyXG4ifSB7OnN5bSByYXRpby1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiByYXRpby1wYXR0ZXJuICNcIihbLStdP1swLTldKykvKFswLTldKylcIilcclxuIn0pLCBkeW5hZG9jLnRyYW5zZm9ybSAoezpzeW0gd2l0aC1mb2N1cy0+YmluZGluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt3aXRoLWZvY3VzXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2l0aC1mb2N1cy0+YmluZGluZ1xyXG4gW3dpdGgtZm9jdXNdXHJcbiAobGV0XHJcbiAgW2Zvcm1cclxuICAgKG9yICg6Zm9ybSB3aXRoLWZvY3VzKSAoOmJpbmRpbmcgd2l0aC1mb2N1cykpXHJcbiAgIFtiaW5kaW5nLXR5cGUgYmluZGluZy12YWxdXHJcbiAgIGZvcm1dXHJcbiAgKHdoZW4gKCN7OmxvY2FsLXN5bWJvbCA6c3ltfSBiaW5kaW5nLXR5cGUpIGJpbmRpbmctdmFsKSkpXHJcbiJ9IHs6c3ltIGFkZC1mb2N1cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHdpdGgtZm9jdXMgYm9keV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1mb2N1c1xyXG4gW2Zvcm0gd2l0aC1mb2N1cyBib2R5XVxyXG4gKGlmLWxldFxyXG4gIFtiaW5kICh3aXRoLWZvY3VzLT5iaW5kaW5nIHdpdGgtZm9jdXMpXVxyXG4gIChwb3N0d2FsayAoZm4gW3hdIChpZiAoPSB4IGJpbmQpIGZvcm0geCkpIGJvZHkpXHJcbiAgZm9ybSkpXHJcbiJ9IHs6c3ltIGFkZC1jYXJkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gd2l0aC1jYXJkIGlkXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWNhcmRcclxuIFtmb3JtIHdpdGgtY2FyZCBpZF1cclxuIChsaXN0XHJcbiAgJ2xldFxyXG4gIFt3aXRoLWNhcmRcclxuICAgIz8oOmNsanMgKGxpc3QgKHF1b3RlIC5nZXRFbGVtZW50QnlJZCkgKHF1b3RlIGpzL2RvY3VtZW50KSBpZCkgOmNsaiBpZCldXHJcbiAgZm9ybSkpXHJcbiJ9IHs6c3ltIGFkZC1jYWxsYmFjaywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHdpdGgtY2FsbGJhY2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtY2FsbGJhY2tcclxuIFtmb3JtIHdpdGgtY2FsbGJhY2tdXHJcbiAobGlzdFxyXG4gICdsZXRcclxuICBbJ2VzLWNoYW5uZWxcclxuICAgJyhkeW5hZG9jLmFsaWFzZXMvY2hhbilcclxuICAgd2l0aC1jYWxsYmFja1xyXG4gICAnKGZuIFtkYXRhXSAoZHluYWRvYy5hbGlhc2VzL3B1dCEgZXMtY2hhbm5lbCBkYXRhKSldXHJcbiAgZm9ybVxyXG4gICcoZHluYWRvYy5hbGlhc2VzLzwhISBlcy1jaGFubmVsKSkpXHJcbiJ9IHs6c3ltIHRyYW5zZm9ybSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tleGFtcGxlXSBbezprZXlzIFtib2R5IGlkIHdpdGgtZm9jdXMgd2l0aC1jYXJkIHdpdGgtY2FsbGJhY2tdfSBmb3JtXV19LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNmb3JtXHJcbiAoW2V4YW1wbGVdXHJcbiAgKHRyYW5zZm9ybVxyXG4gICBleGFtcGxlXHJcbiAgIChvciAoc29tZS0+IGV4YW1wbGUgOndpdGgtZm9jdXMgOmluaXQtZXhwcikgKDpib2R5IGV4YW1wbGUpKSkpXHJcbiAoW3s6a2V5cyBbYm9keSBpZCB3aXRoLWZvY3VzIHdpdGgtY2FyZCB3aXRoLWNhbGxiYWNrXX0gZm9ybV1cclxuICAoY29uZC0+XHJcbiAgIGZvcm1cclxuICAgKHNvbWU/IHdpdGgtZm9jdXMpXHJcbiAgIChhZGQtZm9jdXMgd2l0aC1mb2N1cyBib2R5KVxyXG4gICAoc29tZT8gd2l0aC1jYXJkKVxyXG4gICAoYWRkLWNhcmQgd2l0aC1jYXJkIGlkKVxyXG4gICAoc29tZT8gd2l0aC1jYWxsYmFjaylcclxuICAgKGFkZC1jYWxsYmFjayB3aXRoLWNhbGxiYWNrKSkpKVxyXG4ifSksIG9kb3lsZS5ydWxlcyAoezpzeW0gLT5ydWxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW1tydWxlLW5hbWUgcnVsZV1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiAtPnJ1bGVcclxuIFtbcnVsZS1uYW1lIHJ1bGVdXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3doYXQtYmxvY2sgd2hlbi1ibG9jayB0aGVuLWJsb2NrXX1cclxuICAgcnVsZVxyXG4gICBjb25kaXRpb25zXHJcbiAgIChtYXB2IC0+Y29uZGl0aW9uICg6Ym9keSB3aGF0LWJsb2NrKSlcclxuICAgd2hlbi1ib2R5XHJcbiAgICg6Ym9keSB3aGVuLWJsb2NrKVxyXG4gICB3aGVuLWJvZHlcclxuICAgKGlmICg+IChjb3VudCB3aGVuLWJvZHkpIDEpIChjb25zICdhbmQgd2hlbi1ib2R5KSAoZmlyc3Qgd2hlbi1ib2R5KSlcclxuICAgdGhlbi1ib2R5XHJcbiAgICg6Ym9keSB0aGVuLWJsb2NrKVxyXG4gICBzeW1zXHJcbiAgICgtPj4gY29uZGl0aW9ucyAobWFwY2F0IDpiaW5kaW5ncykgKG1hcCA6c3ltKSBzZXQgdmVjKV1cclxuICB7OnJ1bGUtbmFtZSBydWxlLW5hbWUsXHJcbiAgIDpmbi1uYW1lXHJcbiAgICgtPlxyXG4gICAgKHN0ciAobmFtZXNwYWNlIHJ1bGUtbmFtZSkgXCItXCIgKG5hbWUgcnVsZS1uYW1lKSlcclxuICAgIChzdHIvcmVwbGFjZSBcIi5cIiBcIi1cIilcclxuICAgIHN5bWJvbCksXHJcbiAgIDpjb25kaXRpb25zIGNvbmRpdGlvbnMsXHJcbiAgIDphcmcgezprZXlzIHN5bXN9LFxyXG4gICA6d2hlbi1ib2R5IHdoZW4tYm9keSxcclxuICAgOnRoZW4tYm9keSB0aGVuLWJvZHl9KSlcclxuIn0gezpzeW0gZmlyZS1ydWxlcywgOm1ldGEgezpkb2MgIkZpcmVzIDp0aGVuIGJsb2NrcyBmb3IgYW55IHJ1bGVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgbWF0Y2hlcy4iLCA6YXJnbGlzdHMgKFtzZXNzaW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmlyZS1ydWxlc1xyXG4gXCJGaXJlcyA6dGhlbiBibG9ja3MgZm9yIGFueSBydWxlcyB3aXRoIGEgY29tcGxldGUgc2V0IG9mIG1hdGNoZXMuXCJcclxuIFtzZXNzaW9uXVxyXG4gKGxldFxyXG4gIFt0aGVuLXF1ZXVlICg6dGhlbi1xdWV1ZSBzZXNzaW9uKV1cclxuICAoaWZcclxuICAgKGFuZCAoc2VxIHRoZW4tcXVldWUpIChuaWw/ICpzZXNzaW9uKikpXHJcbiAgIChsZXRcclxuICAgIFsqdHJpZ2dlci1xdWV1ZVxyXG4gICAgICh2b2xhdGlsZSEgW10pXHJcbiAgICAgc2Vzc2lvblxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuXHJcbiAgICAgICBbc2Vzc2lvbiBbbm9kZS1pZCBpZCthdHRyc11dXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW25vZGUtcGF0aFxyXG4gICAgICAgICBbOmJldGEtbm9kZXMgbm9kZS1pZF1cclxuICAgICAgICAgbm9kZVxyXG4gICAgICAgICAoZ2V0LWluIHNlc3Npb24gbm9kZS1wYXRoKVxyXG4gICAgICAgICB7OmtleXMgW21hdGNoZXMgcnVsZS1uYW1lXX1cclxuICAgICAgICAgbm9kZVxyXG4gICAgICAgICBydWxlLWZuXHJcbiAgICAgICAgIChvclxyXG4gICAgICAgICAgKGdldC1pbiBzZXNzaW9uIFs6cnVsZS1mbnMgcnVsZS1uYW1lXSlcclxuICAgICAgICAgICh0aHJvdyAoZXgtaW5mbyAoc3RyIHJ1bGUtbmFtZSBcIiBub3QgZm91bmRcIikge30pKSldXHJcbiAgICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgIFt7OmtleXMgW3ZhcnMgZW5hYmxlZF19IChnZXQgbWF0Y2hlcyBpZCthdHRycyldXHJcbiAgICAgICAgICh3aGVuIGVuYWJsZWQgKHZzd2FwISAqdHJpZ2dlci1xdWV1ZSBjb25qIFtydWxlLWZuIHZhcnNdKSkpXHJcbiAgICAgICAgKHVwZGF0ZS1pbiBzZXNzaW9uIG5vZGUtcGF0aCBhc3NvYyA6dHJpZ2dlciBmYWxzZSkpKVxyXG4gICAgICBzZXNzaW9uXHJcbiAgICAgIHRoZW4tcXVldWUpXHJcbiAgICAgc2Vzc2lvblxyXG4gICAgIChhc3NvYyBzZXNzaW9uIDp0aGVuLXF1ZXVlICN7fSldXHJcbiAgICAoLT4+XHJcbiAgICAgQCp0cmlnZ2VyLXF1ZXVlXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm5cclxuICAgICAgIFtzZXNzaW9uIFtydWxlLWZuIG1hdGNoXV1cclxuICAgICAgIChiaW5kaW5nXHJcbiAgICAgICAgWypzZXNzaW9uKlxyXG4gICAgICAgICBzZXNzaW9uXHJcbiAgICAgICAgICptdXRhYmxlLXNlc3Npb24qXHJcbiAgICAgICAgICh2b2xhdGlsZSEgc2Vzc2lvbilcclxuICAgICAgICAgKm1hdGNoKlxyXG4gICAgICAgICBtYXRjaF1cclxuICAgICAgICAocnVsZS1mbiBtYXRjaClcclxuICAgICAgICBAKm11dGFibGUtc2Vzc2lvbiopKVxyXG4gICAgICBzZXNzaW9uKVxyXG4gICAgIGZpcmUtcnVsZXMpKVxyXG4gICBzZXNzaW9uKSkpXHJcbiJ9IHs6c3ltIGluc2VydCwgOm1ldGEgezpkb2MgIkluc2VydHMgYSBmYWN0IGludG8gdGhlIHNlc3Npb24uIENhbiBvcHRpb25hbGx5IGluc2VydCBtdWx0aXBsZSBmYWN0cyB3aXRoIHRoZSBzYW1lIGlkLiIsIDphcmdsaXN0cyBbW3Nlc3Npb24gaWQgYXR0ci0+dmFsdWVdIFtzZXNzaW9uIGlkIGF0dHIgdmFsdWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnNlcnRcclxuIFwiSW5zZXJ0cyBhIGZhY3QgaW50byB0aGUgc2Vzc2lvbi4gQ2FuIG9wdGlvbmFsbHkgaW5zZXJ0IG11bHRpcGxlIGZhY3RzIHdpdGggdGhlIHNhbWUgaWQuXCJcclxuIChbc2Vzc2lvbiBpZCBhdHRyLT52YWx1ZV1cclxuICAocmVkdWNlLWt2XHJcbiAgIChmbiBbc2Vzc2lvbiBhdHRyIHZhbHVlXSAoaW5zZXJ0IHNlc3Npb24gaWQgYXR0ciB2YWx1ZSkpXHJcbiAgIHNlc3Npb25cclxuICAgYXR0ci0+dmFsdWUpKVxyXG4gKFtzZXNzaW9uIGlkIGF0dHIgdmFsdWVdXHJcbiAgKC0+PlxyXG4gICAoZ2V0LWFscGhhLW5vZGVzLWZvci1mYWN0XHJcbiAgICBzZXNzaW9uXHJcbiAgICAoOmFscGhhLW5vZGUgc2Vzc2lvbilcclxuICAgIGlkXHJcbiAgICBhdHRyXHJcbiAgICB2YWx1ZVxyXG4gICAgdHJ1ZSlcclxuICAgKHVwc2VydC1mYWN0IHNlc3Npb24gaWQgYXR0ciB2YWx1ZSkpKSlcclxuIn0gezpzeW0gKm1hdGNoKiwgOm1ldGEgezpkb2MgIlByb3ZpZGVzIGEgbWFwIG9mIGFsbCB0aGUgbWF0Y2hlZCB2YWx1ZXMgZnJvbSBpbnNpZGUgYSA6dGhlbiBibG9jay4ifSwgOnNvdXJjZSAiKGRlZiAqbWF0Y2gqIG5pbClcclxuIn0gezpzeW0gYWRkLXJ1bGUsIDptZXRhIHs6ZG9jICJBZGRzIGEgcnVsZSB0byB0aGUgZ2l2ZW4gc2Vzc2lvbi4iLCA6YXJnbGlzdHMgKFtzZXNzaW9uIHJ1bGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtcnVsZVxyXG4gXCJBZGRzIGEgcnVsZSB0byB0aGUgZ2l2ZW4gc2Vzc2lvbi5cIlxyXG4gW3Nlc3Npb24gcnVsZV1cclxuICh3aGVuXHJcbiAgKGdldC1pbiBzZXNzaW9uIFs6cnVsZS1mbnMgKDpuYW1lIHJ1bGUpXSlcclxuICAodGhyb3cgKGV4LWluZm8gKHN0ciAoOm5hbWUgcnVsZSkgXCIgYWxyZWFkeSBleGlzdHMgaW4gc2Vzc2lvblwiKSB7fSkpKVxyXG4gKGxldFxyXG4gIFtjb25kaXRpb25zXHJcbiAgICg6Y29uZGl0aW9ucyBydWxlKVxyXG4gICBzZXNzaW9uXHJcbiAgIChyZWR1Y2UgYWRkLWNvbmRpdGlvbiBzZXNzaW9uIGNvbmRpdGlvbnMpXHJcbiAgIGxlYWYtbm9kZS1pZFxyXG4gICAoLT4gc2Vzc2lvbiA6bWVtLW5vZGUtaWRzIGxhc3QpXHJcbiAgIGJpbmRpbmdzXHJcbiAgICg6YmluZGluZ3Mgc2Vzc2lvbilcclxuICAgc2Vzc2lvblxyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbc2Vzc2lvbiBtZW0tbm9kZS1pZF1cclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIHNlc3Npb25cclxuICAgICAgWzpiZXRhLW5vZGVzIG1lbS1ub2RlLWlkXVxyXG4gICAgICAoZm5cclxuICAgICAgIFttZW0tbm9kZV1cclxuICAgICAgIChhc3NvY1xyXG4gICAgICAgIG1lbS1ub2RlXHJcbiAgICAgICAgOnJ1bGUtbmFtZVxyXG4gICAgICAgICg6bmFtZSBydWxlKVxyXG4gICAgICAgIDpsZWFmLW5vZGUtaWRcclxuICAgICAgICBsZWFmLW5vZGUtaWQpKSkpXHJcbiAgICBzZXNzaW9uXHJcbiAgICAoOm1lbS1ub2RlLWlkcyBzZXNzaW9uKSlcclxuICAgc2Vzc2lvblxyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbc2Vzc2lvbiBqb2luLW5vZGUtaWRdXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBzZXNzaW9uXHJcbiAgICAgIFs6YmV0YS1ub2RlcyBqb2luLW5vZGUtaWRdXHJcbiAgICAgIChmblxyXG4gICAgICAgW2pvaW4tbm9kZV1cclxuICAgICAgIChhc3NvY1xyXG4gICAgICAgIGpvaW4tbm9kZVxyXG4gICAgICAgIDppZC1rZXlcclxuICAgICAgICAoc29tZVxyXG4gICAgICAgICAoZm5cclxuICAgICAgICAgIFt7OmtleXMgW2ZpZWxkIGtleV19XVxyXG4gICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAoYW5kICg9IDppZCBmaWVsZCkgKGNvbnRhaW5zPyAoOmpvaW5zIGJpbmRpbmdzKSBrZXkpKVxyXG4gICAgICAgICAgIGtleSkpXHJcbiAgICAgICAgICgtPiBqb2luLW5vZGUgOmNvbmRpdGlvbiA6YmluZGluZ3MpKVxyXG4gICAgICAgIDpkaXNhYmxlLWZhc3QtdXBkYXRlc1xyXG4gICAgICAgIChjb250YWlucz9cclxuICAgICAgICAgKDpqb2lucyBiaW5kaW5ncylcclxuICAgICAgICAgKHNvbWVcclxuICAgICAgICAgIChmbiBbezprZXlzIFtmaWVsZCBrZXldfV0gKHdoZW4gKD0gOnZhbHVlIGZpZWxkKSBrZXkpKVxyXG4gICAgICAgICAgKC0+IGpvaW4tbm9kZSA6Y29uZGl0aW9uIDpiaW5kaW5ncykpKSkpKSlcclxuICAgIHNlc3Npb25cclxuICAgICg6am9pbi1ub2RlLWlkcyBzZXNzaW9uKSldXHJcbiAgKC0+XHJcbiAgIHNlc3Npb25cclxuICAgKGFzc29jLWluIFs6YmV0YS1ub2RlcyBsZWFmLW5vZGUtaWQgOmZpbHRlci1mbl0gKDpmaWx0ZXItZm4gcnVsZSkpXHJcbiAgIChhc3NvYy1pbiBbOnJ1bGUtaWRzICg6bmFtZSBydWxlKV0gbGVhZi1ub2RlLWlkKVxyXG4gICAoYXNzb2MtaW4gWzpydWxlLWZucyAoOm5hbWUgcnVsZSldICg6cnVsZS1mbiBydWxlKSlcclxuICAgKGRpc3NvYyA6bWVtLW5vZGUtaWRzIDpqb2luLW5vZGUtaWRzIDpiaW5kaW5ncykpKSlcclxuIn0gezpzeW0gLT5zZXNzaW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBlbXB0eSBzZXNzaW9uLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIC0+c2Vzc2lvblxyXG4gXCJSZXR1cm5zIGFuIGVtcHR5IHNlc3Npb24uXCJcclxuIFtdXHJcbiAobWFwLT5TZXNzaW9uXHJcbiAgezphbHBoYS1ub2RlXHJcbiAgIChtYXAtPkFscGhhTm9kZVxyXG4gICAgezpwYXRoIG5pbCxcclxuICAgICA6dGVzdC1maWVsZCBuaWwsXHJcbiAgICAgOnRlc3QtdmFsdWUgbmlsLFxyXG4gICAgIDpjaGlsZHJlbiBbXSxcclxuICAgICA6c3VjY2Vzc29ycyBbXSxcclxuICAgICA6ZmFjdHMge319KSxcclxuICAgOmJldGEtbm9kZXMge30sXHJcbiAgIDpsYXN0LWlkIC0xLFxyXG4gICA6cnVsZS1mbnMge30sXHJcbiAgIDpydWxlLWlkcyB7fSxcclxuICAgOmlkLWF0dHItbm9kZXMge30sXHJcbiAgIDp0aGVuLXF1ZXVlICN7fX0pKVxyXG4ifSB7OnN5bSByZXNldCEsIDptZXRhIHs6ZG9jICJNdXRhdGVzIHRoZSBzZXNzaW9uIGZyb20gYSA6dGhlbiBibG9jay4iLCA6YXJnbGlzdHMgKFtuZXctc2Vzc2lvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc2V0IVxyXG4gXCJNdXRhdGVzIHRoZSBzZXNzaW9uIGZyb20gYSA6dGhlbiBibG9jay5cIlxyXG4gW25ldy1zZXNzaW9uXVxyXG4gKGlmXHJcbiAgKm11dGFibGUtc2Vzc2lvbipcclxuICAoaWZcclxuICAgKD0gKnNlc3Npb24qIEAqbXV0YWJsZS1zZXNzaW9uKilcclxuICAgKHZyZXNldCEgKm11dGFibGUtc2Vzc2lvbiogbmV3LXNlc3Npb24pXHJcbiAgICh0aHJvd1xyXG4gICAgKGV4LWluZm8gXCJZb3UgbWF5IG9ubHkgY2FsbCBgcmVzZXQhYCBvbmNlIGluIGEgOnRoZW4gYmxvY2tcIiB7fSkpKVxyXG4gICh0aHJvdyAoZXgtaW5mbyBcIllvdSBtYXkgb25seSBjYWxsIGByZXNldCFgIGluIGEgOnRoZW4gYmxvY2tcIiB7fSkpKSlcclxuIn0gezpzeW0gcmV0cmFjdCEsIDptZXRhIHs6ZG9jICJTYW1lIGFzIGByZXRyYWN0YCBidXQgY2FuIGJlIHVzZWQgaW5zaWRlIG9mIGEgOnRoZW4gYmxvY2suXG4gIFxuICBUaGUgZnVuY3Rpb24gaXMgREVQUkVDQVRFRC4gSXQgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBidXQgcHJlZmVyIHRoaXMgaW5zdGVhZDpcbiAgXG4gIChvL3Jlc2V0ISAoby9yZXRyYWN0IG8vKnNlc3Npb24qIGlkIGF0dHIpKSIsIDphcmdsaXN0cyAoW2lkIGF0dHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXRyYWN0IVxyXG4gXCJTYW1lIGFzIGByZXRyYWN0YCBidXQgY2FuIGJlIHVzZWQgaW5zaWRlIG9mIGEgOnRoZW4gYmxvY2suXFxuICBcXG4gIFRoZSBmdW5jdGlvbiBpcyBERVBSRUNBVEVELiBJdCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQsIGJ1dCBwcmVmZXIgdGhpcyBpbnN0ZWFkOlxcbiAgXFxuICAoby9yZXNldCEgKG8vcmV0cmFjdCBvLypzZXNzaW9uKiBpZCBhdHRyKSlcIlxyXG4gW2lkIGF0dHJdXHJcbiAoaWZcclxuICAqbXV0YWJsZS1zZXNzaW9uKlxyXG4gICh2c3dhcCEgKm11dGFibGUtc2Vzc2lvbiogcmV0cmFjdCBpZCBhdHRyKVxyXG4gICh0aHJvd1xyXG4gICAoZXgtaW5mbyBcIlRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSA6dGhlbiBibG9ja1wiIHt9KSkpKVxyXG4ifSB7OnN5bSBpbnNlcnQhLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBgaW5zZXJ0YCBidXQgY2FuIGJlIHVzZWQgaW5zaWRlIG9mIGEgOnRoZW4gYmxvY2suXG4gIFxuICBUaGUgZnVuY3Rpb24gaXMgREVQUkVDQVRFRC4gSXQgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBidXQgcHJlZmVyIHRoaXMgaW5zdGVhZDpcbiAgXG4gIChvL3Jlc2V0ISAoby9pbnNlcnQgby8qc2Vzc2lvbiogaWQgYXR0cikpIiwgOmFyZ2xpc3RzIFtbaWQgYXR0ci0+dmFsdWVdIFtpZCBhdHRyIHZhbHVlXV19LCA6c291cmNlICIoZGVmblxyXG4gaW5zZXJ0IVxyXG4gXCJTYW1lIGFzIGBpbnNlcnRgIGJ1dCBjYW4gYmUgdXNlZCBpbnNpZGUgb2YgYSA6dGhlbiBibG9jay5cXG4gIFxcbiAgVGhlIGZ1bmN0aW9uIGlzIERFUFJFQ0FURUQuIEl0IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgYnV0IHByZWZlciB0aGlzIGluc3RlYWQ6XFxuICBcXG4gIChvL3Jlc2V0ISAoby9pbnNlcnQgby8qc2Vzc2lvbiogaWQgYXR0cikpXCJcclxuIChbaWQgYXR0ci0+dmFsdWVdXHJcbiAgKHJ1biEgKGZuIFtbYXR0ciB2YWx1ZV1dIChpbnNlcnQhIGlkIGF0dHIgdmFsdWUpKSBhdHRyLT52YWx1ZSkpXHJcbiAoW2lkIGF0dHIgdmFsdWVdXHJcbiAgKGlmXHJcbiAgICptdXRhYmxlLXNlc3Npb24qXHJcbiAgICh2c3dhcCEgKm11dGFibGUtc2Vzc2lvbiogaW5zZXJ0IGlkIGF0dHIgdmFsdWUpXHJcbiAgICh0aHJvd1xyXG4gICAgKGV4LWluZm8gXCJUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGluIGEgOnRoZW4gYmxvY2tcIiB7fSkpKSkpXHJcbiJ9IHs6c3ltICpzZXNzaW9uKiwgOm1ldGEgezpkb2MgIlByb3ZpZGVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBzZXNzaW9uIGZyb20gaW5zaWRlIGEgOnRoZW4gYmxvY2suXG4gIE5vcm1hbGx5IHVzZWQgdG8gYWxsb3cgcXVlcnlpbmcgdGhlIHNlc3Npb24gZnJvbSBpbnNpZGUgYSBydWxlLiJ9LCA6c291cmNlICIoZGVmICpzZXNzaW9uKiBuaWwpXHJcbiJ9IHs6c3ltIHJldHJhY3QsIDptZXRhIHs6ZG9jICJSZXRyYWN0cyB0aGUgZmFjdCB3aXRoIHRoZSBnaXZlbiBpZCArIGF0dHIgY29tYm8uIiwgOmFyZ2xpc3RzIChbc2Vzc2lvbiBpZCBhdHRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV0cmFjdFxyXG4gXCJSZXRyYWN0cyB0aGUgZmFjdCB3aXRoIHRoZSBnaXZlbiBpZCArIGF0dHIgY29tYm8uXCJcclxuIFtzZXNzaW9uIGlkIGF0dHJdXHJcbiAobGV0XHJcbiAgW2lkK2F0dHJcclxuICAgW2lkIGF0dHJdXHJcbiAgIG5vZGUtcGF0aHNcclxuICAgKGdldC1pbiBzZXNzaW9uIFs6aWQtYXR0ci1ub2RlcyBpZCthdHRyXSldXHJcbiAgKHdoZW4tbm90XHJcbiAgIG5vZGUtcGF0aHNcclxuICAgKHRocm93IChleC1pbmZvIChzdHIgaWQrYXR0ciBcIiBub3QgaW4gc2Vzc2lvblwiKSB7fSkpKVxyXG4gIChyZWR1Y2VcclxuICAgKGZuXHJcbiAgICBbc2Vzc2lvbiBub2RlLXBhdGhdXHJcbiAgICAobGV0XHJcbiAgICAgW25vZGVcclxuICAgICAgKGdldC1pbiBzZXNzaW9uIG5vZGUtcGF0aClcclxuICAgICAgZmFjdFxyXG4gICAgICAoZ2V0LWluIG5vZGUgWzpmYWN0cyBpZCBhdHRyXSldXHJcbiAgICAgKHJpZ2h0LWFjdGl2YXRlLWFscGhhLW5vZGVcclxuICAgICAgc2Vzc2lvblxyXG4gICAgICBub2RlLXBhdGhcclxuICAgICAgKC0+VG9rZW4gZmFjdCA6cmV0cmFjdCBuaWwpKSkpXHJcbiAgIHNlc3Npb25cclxuICAgbm9kZS1wYXRocykpKVxyXG4ifSB7OnN5bSBxdWVyeS1hbGwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdmVjdG9yIG9mIG1hcHMgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoZXMgZm9yIHRoZSBnaXZlbiBydWxlLiIsIDphcmdsaXN0cyAoW3Nlc3Npb24gcnVsZS1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVlcnktYWxsXHJcbiBcIlJldHVybnMgYSB2ZWN0b3Igb2YgbWFwcyBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hlcyBmb3IgdGhlIGdpdmVuIHJ1bGUuXCJcclxuIFtzZXNzaW9uIHJ1bGUtbmFtZV1cclxuIChsZXRcclxuICBbcnVsZS1pZFxyXG4gICAob3JcclxuICAgIChnZXQtaW4gc2Vzc2lvbiBbOnJ1bGUtaWRzIHJ1bGUtbmFtZV0pXHJcbiAgICAodGhyb3cgKGV4LWluZm8gKHN0ciBydWxlLW5hbWUgXCIgbm90IGluIHNlc3Npb25cIikge30pKSlcclxuICAgcnVsZVxyXG4gICAoZ2V0LWluIHNlc3Npb24gWzpiZXRhLW5vZGVzIHJ1bGUtaWRdKV1cclxuICAocmVkdWNlLWt2XHJcbiAgIChmbiBbdiBfIHs6a2V5cyBbdmFycyBlbmFibGVkXX1dIChpZiBlbmFibGVkIChjb25qIHYgdmFycykgdikpXHJcbiAgIFtdXHJcbiAgICg6bWF0Y2hlcyBydWxlKSkpKVxyXG4ifSB7OnN5bSBwYXJzZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIGNvbnRlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZVxyXG4gW3NwZWMgY29udGVudF1cclxuIChsZXRcclxuICBbcmVzIChzL2NvbmZvcm0gc3BlYyBjb250ZW50KV1cclxuICAoaWZcclxuICAgKD0gOmNsb2p1cmUuc3BlYy5hbHBoYS9pbnZhbGlkIHJlcylcclxuICAgKHRocm93IChleC1pbmZvIChleHBvdW5kL2V4cG91bmQtc3RyIHNwZWMgY29udGVudCkge30pKVxyXG4gICByZXMpKSlcclxuIn0pLCBjcm9zcy1wYXJpbmZlci5jb3JlICh7OnN5bSBwYXJlbi1tb2RlLCA6bWV0YSB7OmRvYyAiUnVucyBwYXJlbiBtb2RlIG9uIHRoZSBnaXZlbiB0ZXh0LiIsIDphcmdsaXN0cyAoW3RleHQgeCBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyZW4tbW9kZVxyXG4gXCJSdW5zIHBhcmVuIG1vZGUgb24gdGhlIGdpdmVuIHRleHQuXCJcclxuIFt0ZXh0IHggbGluZV1cclxuICM/KDpjbGogKGxldCBbcmVzICh0cnkgKFBhcmluZmVyL3BhcmVuTW9kZSB0ZXh0IChpbnQgeCkgKGludCBsaW5lKSBuaWwgZmFsc2UpIChjYXRjaCBFeGNlcHRpb24gXyAoUGFyaW5mZXIvcGFyZW5Nb2RlIHRleHQgKGludCAwKSAoaW50IDApIG5pbCBmYWxzZSkpKV0gezp4ICguLWN1cnNvclggcmVzKSwgOnRleHQgKC4tdGV4dCByZXMpfSkgOmNsanMgKGxldCBbcmVzICgucGFyZW5Nb2RlIGpzL3BhcmluZmVyIHRleHQgI2pzIHs6Y3Vyc29yTGluZSBsaW5lLCA6Y3Vyc29yWCB4fSldIHs6eCAoYWdldCByZXMgXCJjdXJzb3JYXCIpLCA6dGV4dCAoYWdldCByZXMgXCJ0ZXh0XCIpfSkpKVxyXG4ifSB7OnN5bSBhZGQtaW5kZW50LCA6bWV0YSB7OmRvYyAiQWRkcyBpbmRlbnQgdG8gdGhlIHN0YXRlLiIsIDphcmdsaXN0cyAoW3N0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWluZGVudFxyXG4gXCJBZGRzIGluZGVudCB0byB0aGUgc3RhdGUuXCJcclxuIFtzdGF0ZV1cclxuIChsZXRcclxuICBbezprZXlzIFt0ZXh0IGN1cnNvci1wb3NpdGlvbiBpbmRlbnQtdHlwZV19XHJcbiAgIHN0YXRlXHJcbiAgIFtzdGFydC1wb3MgZW5kLXBvc11cclxuICAgY3Vyc29yLXBvc2l0aW9uXHJcbiAgIFtzdGFydC1saW5lIHN0YXJ0LXhdXHJcbiAgIChwb3NpdGlvbi0+cm93LWNvbCB0ZXh0IHN0YXJ0LXBvcylcclxuICAgW2VuZC1saW5lIF9dXHJcbiAgIChwb3NpdGlvbi0+cm93LWNvbCB0ZXh0IGVuZC1wb3MpXHJcbiAgIGxpbmVzXHJcbiAgIChzcGxpdC1saW5lcyB0ZXh0KVxyXG4gICB0YWdzXHJcbiAgICh0cy9jb2RlLT50YWdzIHRleHQpXHJcbiAgIG5ldy1pbmRlbnQtbGV2ZWxcclxuICAgKGNhc2VcclxuICAgIGluZGVudC10eXBlXHJcbiAgICA6cmV0dXJuXHJcbiAgICAodHMvaW5kZW50LWZvci1saW5lIHRhZ3MgKGluYyBzdGFydC1saW5lKSlcclxuICAgIDpiYWNrXHJcbiAgICAodHMvYmFjay1pbmRlbnQtZm9yLWxpbmVcclxuICAgICB0YWdzXHJcbiAgICAgKGluYyBzdGFydC1saW5lKVxyXG4gICAgIChpbmRlbnQtY291bnQgKGdldCBsaW5lcyBzdGFydC1saW5lKSkpXHJcbiAgICA6Zm9yd2FyZFxyXG4gICAgKHRzL2ZvcndhcmQtaW5kZW50LWZvci1saW5lXHJcbiAgICAgdGFnc1xyXG4gICAgIChpbmMgc3RhcnQtbGluZSlcclxuICAgICAoaW5kZW50LWNvdW50IChnZXQgbGluZXMgc3RhcnQtbGluZSkpKVxyXG4gICAgOm5vcm1hbFxyXG4gICAgc3RhcnQteClcclxuICAgbGluZXNcclxuICAgKGlmXHJcbiAgICAoPSBpbmRlbnQtdHlwZSA6bm9ybWFsKVxyXG4gICAgKGxvb3BcclxuICAgICBbbGluZXMgbGluZXMgdGFncyB0YWdzIGxpbmUtbnVtIChpbmMgc3RhcnQtbGluZSldXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbbGluZSAoZ2V0IGxpbmVzIGxpbmUtbnVtKV1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2luZGVudFxyXG4gICAgICAgICh0cy9pbmRlbnQtZm9yLWxpbmUgdGFncyAoaW5jIGxpbmUtbnVtKSlcclxuICAgICAgICBjdXJyZW50LWluZGVudFxyXG4gICAgICAgIChpbmRlbnQtY291bnQgbGluZSldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoYW5kICg+IGluZGVudCAwKSAoPiBpbmRlbnQgc3RhcnQteCkpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbbGluZXNcclxuICAgICAgICAgICh1cGRhdGUtaW5kZW50ICgtIGluZGVudCBjdXJyZW50LWluZGVudCkgbGluZXMgbGluZS1udW0pXHJcbiAgICAgICAgICB0ZXh0XHJcbiAgICAgICAgICAoc3RyL2pvaW4gXFxuZXdsaW5lIGxpbmVzKVxyXG4gICAgICAgICAgdGFnc1xyXG4gICAgICAgICAgKHRzL2NvZGUtPnRhZ3MgdGV4dCldXHJcbiAgICAgICAgIChyZWN1ciBsaW5lcyB0YWdzIChpbmMgbGluZS1udW0pKSlcclxuICAgICAgICBsaW5lcykpXHJcbiAgICAgIGxpbmVzKSlcclxuICAgIChsZXRcclxuICAgICBbb2xkLWluZGVudC1sZXZlbFxyXG4gICAgICAoaW5kZW50LWNvdW50IChnZXQgbGluZXMgc3RhcnQtbGluZSkpXHJcbiAgICAgIGRpZmZcclxuICAgICAgKC0gbmV3LWluZGVudC1sZXZlbCBvbGQtaW5kZW50LWxldmVsKVxyXG4gICAgICBkaWZmXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG5lZz8gZGlmZilcclxuICAgICAgICgtPj5cclxuICAgICAgICAoc2VxIChnZXQgbGluZXMgc3RhcnQtbGluZSkpXHJcbiAgICAgICAgKHNwbGl0LXdpdGggKGZuKiBbcDFfXzQ4OTkwI10gKD0gcDFfXzQ4OTkwIyBcXHNwYWNlKSkpXHJcbiAgICAgICAgZmlyc3RcclxuICAgICAgICAodGFrZSAoKiAtMSBkaWZmKSlcclxuICAgICAgICBjb3VudFxyXG4gICAgICAgICgqIC0xKSlcclxuICAgICAgIGRpZmYpXVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKHBhcnRpYWwgdXBkYXRlLWluZGVudCBkaWZmKVxyXG4gICAgICBsaW5lc1xyXG4gICAgICAocmFuZ2Ugc3RhcnQtbGluZSAoaW5jIGVuZC1saW5lKSkpKSlcclxuICAgdGV4dFxyXG4gICAoc3RyL2pvaW4gXFxuZXdsaW5lIGxpbmVzKVxyXG4gICB0ZXh0XHJcbiAgICg6dGV4dCAoaW5kZW50LW1vZGUgdGV4dCBuZXctaW5kZW50LWxldmVsIHN0YXJ0LWxpbmUgdHJ1ZSkpXHJcbiAgIGxpbmVzXHJcbiAgIChzcGxpdC1saW5lcyB0ZXh0KV1cclxuICB7OmN1cnNvci1wb3NpdGlvblxyXG4gICAoaWZcclxuICAgICg9IHN0YXJ0LXBvcyBlbmQtcG9zKVxyXG4gICAgKGxldFxyXG4gICAgIFtwb3MgKHJvdy1jb2wtPnBvc2l0aW9uIHRleHQgc3RhcnQtbGluZSBuZXctaW5kZW50LWxldmVsKV1cclxuICAgICBbcG9zIHBvc10pXHJcbiAgICBbKHJvdy1jb2wtPnBvc2l0aW9uIHRleHQgc3RhcnQtbGluZSAwKVxyXG4gICAgIChyb3ctY29sLT5wb3NpdGlvbiB0ZXh0IGVuZC1saW5lIChjb3VudCAoZ2V0IGxpbmVzIGVuZC1saW5lKSkpXSksXHJcbiAgIDp0ZXh0IHRleHR9KSlcclxuIn0gezpzeW0gaW5kZW50LWNvdW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2xpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRlbnQtY291bnRcclxuIFtsaW5lXVxyXG4gKC0+PlxyXG4gIGxpbmVcclxuICBzZXFcclxuICAodGFrZS13aGlsZSAoZm4qIFtwMV9fNDg5ODgjXSAoPSBwMV9fNDg5ODgjIFxcc3BhY2UpKSlcclxuICBjb3VudCkpXHJcbiJ9IHs6c3ltIHJvdy1jb2wtPnBvc2l0aW9uLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgYSByb3cgYW5kIGNvbHVtbiBudW1iZXIgdG8gYSBwb3NpdGlvbi4iLCA6YXJnbGlzdHMgKFt0ZXh0IHJvdyBjb2xdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByb3ctY29sLT5wb3NpdGlvblxyXG4gXCJDb252ZXJ0cyBhIHJvdyBhbmQgY29sdW1uIG51bWJlciB0byBhIHBvc2l0aW9uLlwiXHJcbiBbdGV4dCByb3cgY29sXVxyXG4gKGxldFxyXG4gIFthbGwtbGluZXNcclxuICAgKHZlYyAoc3BsaXQtbGluZXMgdGV4dCkpXHJcbiAgIGxpbmVzXHJcbiAgICh2ZWMgKHRha2Ugcm93IGFsbC1saW5lcykpXHJcbiAgIGxhc3QtbGluZVxyXG4gICAoZ2V0IGFsbC1saW5lcyByb3cpXHJcbiAgIGxpbmVzXHJcbiAgIChpZlxyXG4gICAgKGFuZCBsYXN0LWxpbmUgKD49IChjb3VudCBsYXN0LWxpbmUpIGNvbCkpXHJcbiAgICAoY29uaiBsaW5lcyAoc3VicyBsYXN0LWxpbmUgMCBjb2wpKVxyXG4gICAgbGluZXMpXHJcbiAgIHRleHRcclxuICAgKHN0ci9qb2luIFwiXFxuXCIgbGluZXMpXVxyXG4gIChjb3VudCB0ZXh0KSkpXHJcbiJ9IHs6c3ltIHBvc2l0aW9uLT5yb3ctY29sLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgYSBwb3NpdGlvbiB0byBhIHJvdyBhbmQgY29sdW1uIG51bWJlci4iLCA6YXJnbGlzdHMgKFt0ZXh0IHBvc2l0aW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9zaXRpb24tPnJvdy1jb2xcclxuIFwiQ29udmVydHMgYSBwb3NpdGlvbiB0byBhIHJvdyBhbmQgY29sdW1uIG51bWJlci5cIlxyXG4gW3RleHQgcG9zaXRpb25dXHJcbiAobGV0XHJcbiAgW3RleHRcclxuICAgKHN1YnMgdGV4dCAwIHBvc2l0aW9uKVxyXG4gICBsYXN0LW5ld2xpbmVcclxuICAgKC5sYXN0SW5kZXhPZiB0ZXh0IFwiXFxuXCIpXHJcbiAgIHJvd1xyXG4gICAoY291bnQgKHJlLXNlcSAjXCJcXG5cIiB0ZXh0KSlcclxuICAgY29sXHJcbiAgIChpZiAoPj0gbGFzdC1uZXdsaW5lIDApICgtIHBvc2l0aW9uIGxhc3QtbmV3bGluZSAxKSBwb3NpdGlvbildXHJcbiAgW3JvdyBjb2xdKSlcclxuIn0gezpzeW0gc3BsaXQtbGluZXMsIDptZXRhIHs6ZG9jICJTcGxpdHMgdGhlIHN0cmluZyBpbnRvIGxpbmVzLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdC1saW5lc1xyXG4gXCJTcGxpdHMgdGhlIHN0cmluZyBpbnRvIGxpbmVzLlwiXHJcbiBbc11cclxuICh2ZWMgKC5zcGxpdCBzIFwiXFxuXCIgLTEpKSlcclxuIn0gezpzeW0gdXBkYXRlLWluZGVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtkaWZmIGxpbmVzIGxpbmUtbnVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLWluZGVudFxyXG4gW2RpZmYgbGluZXMgbGluZS1udW1dXHJcbiAodXBkYXRlXHJcbiAgbGluZXNcclxuICBsaW5lLW51bVxyXG4gIChmblxyXG4gICBbbGluZV1cclxuICAgKGxldFxyXG4gICAgW1tzcGFjZXMgY29kZV1cclxuICAgICAoc3BsaXQtd2l0aCAoZm4qIFtwMV9fNDg5ODkjXSAoPSBwMV9fNDg5ODkjIFxcc3BhY2UpKSAoc2VxIGxpbmUpKVxyXG4gICAgIHNwYWNlc1xyXG4gICAgIChpZlxyXG4gICAgICAocG9zPyBkaWZmKVxyXG4gICAgICAoY29uY2F0IHNwYWNlcyAocmVwZWF0IGRpZmYgXFxzcGFjZSkpXHJcbiAgICAgIChkcm9wICgqIC0xIGRpZmYpIHNwYWNlcykpXVxyXG4gICAgKHN0ciAoc3RyL2pvaW4gc3BhY2VzKSAoc3RyL2pvaW4gY29kZSkpKSkpKVxyXG4ifSB7OnN5bSBtb2RlLCA6bWV0YSB7OmRvYyAiUnVucyB0aGUgc3BlY2lmaWVkIG1vZGUsIHdoaWNoIGNhbiBiZSA6cGFyZW4sIDppbmRlbnQsIG9yIDpib3RoLiIsIDphcmdsaXN0cyAoW21vZGUtdHlwZSB0ZXh0IHggbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1vZGVcclxuIFwiUnVucyB0aGUgc3BlY2lmaWVkIG1vZGUsIHdoaWNoIGNhbiBiZSA6cGFyZW4sIDppbmRlbnQsIG9yIDpib3RoLlwiXHJcbiBbbW9kZS10eXBlIHRleHQgeCBsaW5lXVxyXG4gKGNhc2VcclxuICBtb2RlLXR5cGVcclxuICA6cGFyZW5cclxuICAocGFyZW4tbW9kZSB0ZXh0IHggbGluZSlcclxuICA6aW5kZW50XHJcbiAgKGluZGVudC1tb2RlIHRleHQgeCBsaW5lKVxyXG4gIDpib3RoXHJcbiAgKC0+IHRleHQgKHBhcmVuLW1vZGUgeCBsaW5lKSA6dGV4dCAoaW5kZW50LW1vZGUgeCBsaW5lKSkpKVxyXG4ifSB7OnN5bSBpbmRlbnQtbW9kZSwgOm1ldGEgezpkb2MgIlJ1bnMgaW5kZW50IG1vZGUgb24gdGhlIGdpdmVuIHRleHQuIiwgOmFyZ2xpc3RzIFtbdGV4dCB4IGxpbmVdIFt0ZXh0IHggbGluZSBwcmV2aWV3LWN1cnNvci1zY29wZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRlbnQtbW9kZVxyXG4gXCJSdW5zIGluZGVudCBtb2RlIG9uIHRoZSBnaXZlbiB0ZXh0LlwiXHJcbiAoW3RleHQgeCBsaW5lXSAoaW5kZW50LW1vZGUgdGV4dCB4IGxpbmUgZmFsc2UpKVxyXG4gKFt0ZXh0IHggbGluZSBwcmV2aWV3LWN1cnNvci1zY29wZT9dXHJcbiAgIz8oOmNsaiAobGV0IFtyZXMgKHRyeSAoUGFyaW5mZXIvaW5kZW50TW9kZSB0ZXh0IChpbnQgeCkgKGludCBsaW5lKSBuaWwgcHJldmlldy1jdXJzb3Itc2NvcGU/KSAoY2F0Y2ggRXhjZXB0aW9uIF8gKFBhcmluZmVyL2luZGVudE1vZGUgdGV4dCAoaW50IDApIChpbnQgMCkgbmlsIHByZXZpZXctY3Vyc29yLXNjb3BlPykpKV0gezp4ICguLWN1cnNvclggcmVzKSwgOnRleHQgKC4tdGV4dCByZXMpfSkgOmNsanMgKGxldCBbcmVzICguaW5kZW50TW9kZSBqcy9wYXJpbmZlciB0ZXh0ICNqcyB7OmN1cnNvckxpbmUgbGluZSwgOmN1cnNvclggeCwgOnByZXZpZXdDdXJzb3JTY29wZSBwcmV2aWV3LWN1cnNvci1zY29wZT99KV0gezp4IChhZ2V0IHJlcyBcImN1cnNvclhcIiksIDp0ZXh0IChhZ2V0IHJlcyBcInRleHRcIil9KSkpKVxyXG4ifSB7OnN5bSBhZGQtcGFyaW5mZXIsIDptZXRhIHs6ZG9jICJBZGRzIHBhcmluZmVyIHRvIHRoZSBzdGF0ZS4iLCA6YXJnbGlzdHMgKFttb2RlLXR5cGUgc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtcGFyaW5mZXJcclxuIFwiQWRkcyBwYXJpbmZlciB0byB0aGUgc3RhdGUuXCJcclxuIFttb2RlLXR5cGUgc3RhdGVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3Vyc29yLXBvc2l0aW9uIHRleHRdfVxyXG4gICBzdGF0ZVxyXG4gICBbc3RhcnQtcG9zIGVuZC1wb3NdXHJcbiAgIGN1cnNvci1wb3NpdGlvblxyXG4gICBbcm93IGNvbF1cclxuICAgKHBvc2l0aW9uLT5yb3ctY29sIHRleHQgc3RhcnQtcG9zKVxyXG4gICByZXN1bHRcclxuICAgKG1vZGUgbW9kZS10eXBlIHRleHQgY29sIHJvdyldXHJcbiAgKGlmXHJcbiAgIChub3Q9IHN0YXJ0LXBvcyBlbmQtcG9zKVxyXG4gICAoYXNzb2Mgc3RhdGUgOnRleHQgKDp0ZXh0IHJlc3VsdCkpXHJcbiAgIChsZXRcclxuICAgIFtwb3MgKHJvdy1jb2wtPnBvc2l0aW9uICg6dGV4dCByZXN1bHQpIHJvdyAoOnggcmVzdWx0KSldXHJcbiAgICAoYXNzb2Mgc3RhdGUgOnRleHQgKDp0ZXh0IHJlc3VsdCkgOmN1cnNvci1wb3NpdGlvbiBbcG9zIHBvc10pKSkpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLmlvYy1oZWxwZXJzICh7OnN5bSBFWENFUFRJT04tRlJBTUVTLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBFWENFUFRJT04tRlJBTUVTIDQpXHJcbiJ9IHs6c3ltIHByb2Nlc3MtZXhjZXB0aW9uLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJvY2Vzcy1leGNlcHRpb25cclxuIFtzdGF0ZV1cclxuIChsZXRcclxuICBbZXhjZXB0aW9uLWZyYW1lXHJcbiAgIChhZ2V0LW9iamVjdCBzdGF0ZSBFWENFUFRJT04tRlJBTUVTKVxyXG4gICBjYXRjaC1ibG9ja1xyXG4gICAoOmNhdGNoLWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSlcclxuICAgY2F0Y2gtZXhjZXB0aW9uXHJcbiAgICg6Y2F0Y2gtZXhjZXB0aW9uIGV4Y2VwdGlvbi1mcmFtZSlcclxuICAgZXhjZXB0aW9uXHJcbiAgIChhZ2V0LW9iamVjdCBzdGF0ZSBDVVJSRU5ULUVYQ0VQVElPTildXHJcbiAgKGNvbmRcclxuICAgKGFuZCBleGNlcHRpb24gKG5vdCBleGNlcHRpb24tZnJhbWUpKVxyXG4gICAodGhyb3cgZXhjZXB0aW9uKVxyXG4gICAoYW5kXHJcbiAgICBleGNlcHRpb25cclxuICAgIGNhdGNoLWJsb2NrXHJcbiAgICAob3JcclxuICAgICAoPSA6ZGVmYXVsdCBjYXRjaC1leGNlcHRpb24pXHJcbiAgICAgKGluc3RhbmNlPyBjYXRjaC1leGNlcHRpb24gZXhjZXB0aW9uKSkpXHJcbiAgIChpb2MvYXNldC1hbGwhXHJcbiAgICBzdGF0ZVxyXG4gICAgU1RBVEUtSURYXHJcbiAgICBjYXRjaC1ibG9ja1xyXG4gICAgVkFMVUUtSURYXHJcbiAgICBleGNlcHRpb25cclxuICAgIENVUlJFTlQtRVhDRVBUSU9OXHJcbiAgICBuaWxcclxuICAgIEVYQ0VQVElPTi1GUkFNRVNcclxuICAgIChhc3NvYyBleGNlcHRpb24tZnJhbWUgOmNhdGNoLWJsb2NrIG5pbCA6Y2F0Y2gtZXhjZXB0aW9uIG5pbCkpXHJcbiAgIChhbmRcclxuICAgIGV4Y2VwdGlvblxyXG4gICAgKG5vdCBjYXRjaC1ibG9jaylcclxuICAgIChub3QgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSkpKVxyXG4gICAoZG9cclxuICAgIChpb2MvYXNldC1hbGwhIHN0YXRlIEVYQ0VQVElPTi1GUkFNRVMgKDpwcmV2IGV4Y2VwdGlvbi1mcmFtZSkpXHJcbiAgICAocmVjdXIgc3RhdGUpKVxyXG4gICAoYW5kIGV4Y2VwdGlvbiAobm90IGNhdGNoLWJsb2NrKSAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKSlcclxuICAgKGlvYy9hc2V0LWFsbCFcclxuICAgIHN0YXRlXHJcbiAgICBTVEFURS1JRFhcclxuICAgICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpXHJcbiAgICBFWENFUFRJT04tRlJBTUVTXHJcbiAgICAoYXNzb2MgZXhjZXB0aW9uLWZyYW1lIDpmaW5hbGx5LWJsb2NrIG5pbCkpXHJcbiAgIChhbmQgKG5vdCBleGNlcHRpb24pICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpKVxyXG4gICAoZG9cclxuICAgIChpb2MvYXNldC1hbGwhXHJcbiAgICAgc3RhdGVcclxuICAgICBTVEFURS1JRFhcclxuICAgICAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKVxyXG4gICAgIEVYQ0VQVElPTi1GUkFNRVNcclxuICAgICAoYXNzb2MgZXhjZXB0aW9uLWZyYW1lIDpmaW5hbGx5LWJsb2NrIG5pbCkpKVxyXG4gICAoYW5kIChub3QgZXhjZXB0aW9uKSAobm90ICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpKSlcclxuICAgKGRvXHJcbiAgICAoaW9jL2FzZXQtYWxsIVxyXG4gICAgIHN0YXRlXHJcbiAgICAgU1RBVEUtSURYXHJcbiAgICAgKDpjb250aW51ZS1ibG9jayBleGNlcHRpb24tZnJhbWUpXHJcbiAgICAgRVhDRVBUSU9OLUZSQU1FU1xyXG4gICAgICg6cHJldiBleGNlcHRpb24tZnJhbWUpKSlcclxuICAgOmVsc2VcclxuICAgKHRocm93IChqcy9FcnJvci4gXCJObyBtYXRjaGluZyBjbGF1c2VcIikpKSkpXHJcbiJ9IHs6c3ltIFNUQVRFLUlEWCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgU1RBVEUtSURYIDEpXHJcbiJ9IHs6c3ltIGFzZXQtb2JqZWN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FyciBpZHggb10pfSwgOnNvdXJjZSAiKGRlZm4gYXNldC1vYmplY3QgW2FyciBpZHggb10gKGFnZXQgYXJyIGlkeCBvKSlcclxuIn0gezpzeW0gYWRkLWV4Y2VwdGlvbi1mcmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBjYXRjaC1ibG9jayBjYXRjaC1leGNlcHRpb24gZmluYWxseS1ibG9jayBjb250aW51ZS1ibG9ja10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1leGNlcHRpb24tZnJhbWVcclxuIFtzdGF0ZSBjYXRjaC1ibG9jayBjYXRjaC1leGNlcHRpb24gZmluYWxseS1ibG9jayBjb250aW51ZS1ibG9ja11cclxuIChpb2MvYXNldC1hbGwhXHJcbiAgc3RhdGVcclxuICBFWENFUFRJT04tRlJBTUVTXHJcbiAgKC0+RXhjZXB0aW9uRnJhbWVcclxuICAgY2F0Y2gtYmxvY2tcclxuICAgY2F0Y2gtZXhjZXB0aW9uXHJcbiAgIGZpbmFsbHktYmxvY2tcclxuICAgY29udGludWUtYmxvY2tcclxuICAgKGFnZXQtb2JqZWN0IHN0YXRlIEVYQ0VQVElPTi1GUkFNRVMpKSkpXHJcbiJ9IHs6c3ltIHJ1bi1zdGF0ZS1tYWNoaW5lLXdyYXBwZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBydW4tc3RhdGUtbWFjaGluZS13cmFwcGVkXHJcbiBbc3RhdGVdXHJcbiAodHJ5XHJcbiAgKHJ1bi1zdGF0ZS1tYWNoaW5lIHN0YXRlKVxyXG4gIChjYXRjaFxyXG4gICBqcy9PYmplY3RcclxuICAgZXhcclxuICAgKGltcGwvY2xvc2UhIChhZ2V0LW9iamVjdCBzdGF0ZSBVU0VSLVNUQVJULUlEWCkpXHJcbiAgICh0aHJvdyBleCkpKSlcclxuIn0gezpzeW0gRk4tSURYLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBGTi1JRFggMClcclxuIn0gezpzeW0gYWdldC1vYmplY3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXJyIGlkeF0pfSwgOnNvdXJjZSAiKGRlZm4gYWdldC1vYmplY3QgW2FyciBpZHhdIChhZ2V0IGFyciBpZHgpKVxyXG4ifSB7OnN5bSByZXR1cm4tY2hhbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSB2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldHVybi1jaGFuXHJcbiBbc3RhdGUgdmFsdWVdXHJcbiAobGV0XHJcbiAgW2MgKGFnZXQgc3RhdGUgVVNFUi1TVEFSVC1JRFgpXVxyXG4gICh3aGVuLW5vdCAobmlsPyB2YWx1ZSkgKGltcGwvcHV0ISBjIHZhbHVlIChmbi1oYW5kbGVyIChmbiBbXSBuaWwpKSkpXHJcbiAgKGltcGwvY2xvc2UhIGMpXHJcbiAgYykpXHJcbiJ9IHs6c3ltIEJJTkRJTkdTLUlEWCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgQklORElOR1MtSURYIDMpXHJcbiJ9IHs6c3ltIENVUlJFTlQtRVhDRVBUSU9OLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBDVVJSRU5ULUVYQ0VQVElPTiA1KVxyXG4ifSB7OnN5bSBydW4tc3RhdGUtbWFjaGluZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm4gcnVuLXN0YXRlLW1hY2hpbmUgW3N0YXRlXSAoKGFnZXQtb2JqZWN0IHN0YXRlIEZOLUlEWCkgc3RhdGUpKVxyXG4ifSB7OnN5bSBmaW5pc2hlZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgdGhlIG1hY2hpbmUgaXMgaW4gYSBmaW5pc2hlZCBzdGF0ZSIsIDphcmdsaXN0cyAoW3N0YXRlLWFycmF5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluaXNoZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB0aGUgbWFjaGluZSBpcyBpbiBhIGZpbmlzaGVkIHN0YXRlXCJcclxuIFtzdGF0ZS1hcnJheV1cclxuIChrZXl3b3JkLWlkZW50aWNhbD8gKGFnZXQgc3RhdGUtYXJyYXkgU1RBVEUtSURYKSA6ZmluaXNoZWQpKVxyXG4ifSB7OnN5bSBVU0VSLVNUQVJULUlEWCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgVVNFUi1TVEFSVC1JRFggNilcclxuIn0gezpzeW0gcHV0ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBibGsgYyB2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwdXQhXHJcbiBbc3RhdGUgYmxrIGMgdmFsXVxyXG4gKGlmLWxldFxyXG4gIFtjYlxyXG4gICAoaW1wbC9wdXQhXHJcbiAgICBjXHJcbiAgICB2YWxcclxuICAgIChmbi1oYW5kbGVyXHJcbiAgICAgKGZuXHJcbiAgICAgIFtyZXQtdmFsXVxyXG4gICAgICAoaW9jL2FzZXQtYWxsISBzdGF0ZSBWQUxVRS1JRFggcmV0LXZhbCBTVEFURS1JRFggYmxrKVxyXG4gICAgICAocnVuLXN0YXRlLW1hY2hpbmUtd3JhcHBlZCBzdGF0ZSkpKSldXHJcbiAgKGRvIChpb2MvYXNldC1hbGwhIHN0YXRlIFZBTFVFLUlEWCBAY2IgU1RBVEUtSURYIGJsaykgOnJlY3VyKVxyXG4gIG5pbCkpXHJcbiJ9IHs6c3ltIHRha2UhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIGJsayBjXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFrZSFcclxuIFtzdGF0ZSBibGsgY11cclxuIChpZi1sZXRcclxuICBbY2JcclxuICAgKGltcGwvdGFrZSFcclxuICAgIGNcclxuICAgIChmbi1oYW5kbGVyXHJcbiAgICAgKGZuXHJcbiAgICAgIFt4XVxyXG4gICAgICAoaW9jL2FzZXQtYWxsISBzdGF0ZSBWQUxVRS1JRFggeCBTVEFURS1JRFggYmxrKVxyXG4gICAgICAocnVuLXN0YXRlLW1hY2hpbmUtd3JhcHBlZCBzdGF0ZSkpKSldXHJcbiAgKGRvIChpb2MvYXNldC1hbGwhIHN0YXRlIFZBTFVFLUlEWCBAY2IgU1RBVEUtSURYIGJsaykgOnJlY3VyKVxyXG4gIG5pbCkpXHJcbiJ9IHs6c3ltIFZBTFVFLUlEWCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgVkFMVUUtSURYIDIpXHJcbiJ9KSwgZHluYWRvYy5hbGlhc2VzICh7OnN5bSBjaGFuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBjaGFuIGFzeW5jL3Byb21pc2UtY2hhbilcclxuIn0gezpzeW0gcHV0ISwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcHV0ISBhc3luYy9wdXQhKVxyXG4ifSB7OnN5bSA8ISEsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIDwhISAjPyg6Y2xqIGFzeW5jLzwhISA6Y2xqcyBpZGVudGl0eSkpXHJcbiJ9KSwgY2xvanVyZS5zdHJpbmcgKHs6c3ltIGVuZHMtd2l0aD8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHMgZW5kcyB3aXRoIHN1YnN0ci4iLCA6YXJnbGlzdHMgKFtzIHN1YnN0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuZHMtd2l0aD9cclxuIFwiVHJ1ZSBpZiBzIGVuZHMgd2l0aCBzdWJzdHIuXCJcclxuIFtzIHN1YnN0cl1cclxuIChnc3RyaW5nL2VuZHNXaXRoIHMgc3Vic3RyKSlcclxuIn0gezpzeW0gY2FwaXRhbGl6ZSwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIHRvIHVwcGVyLWNhc2UsIGFsbCBvdGhlclxuICBjaGFyYWN0ZXJzIHRvIGxvd2VyLWNhc2UuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhcGl0YWxpemVcclxuIFwiQ29udmVydHMgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgdG8gdXBwZXItY2FzZSwgYWxsIG90aGVyXFxuICBjaGFyYWN0ZXJzIHRvIGxvd2VyLWNhc2UuXCJcclxuIFtzXVxyXG4gKGdzdHJpbmcvY2FwaXRhbGl6ZSBzKSlcclxuIn0gezpzeW0gcmV2ZXJzZSwgOm1ldGEgezpkb2MgIlJldHVybnMgcyB3aXRoIGl0cyBjaGFyYWN0ZXJzIHJldmVyc2VkLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXZlcnNlXHJcbiBcIlJldHVybnMgcyB3aXRoIGl0cyBjaGFyYWN0ZXJzIHJldmVyc2VkLlwiXHJcbiBbc11cclxuICgtPlxyXG4gICgucmVwbGFjZSBzIHJlLXN1cnJvZ2F0ZS1wYWlyIFwiJDIkMVwiKVxyXG4gICguLiAoc3BsaXQgXCJcIikgKHJldmVyc2UpIChqb2luIFwiXCIpKSkpXHJcbiJ9IHs6c3ltIGpvaW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc3RyaW5nIG9mIGFsbCBlbGVtZW50cyBpbiBjb2xsLCBhcyByZXR1cm5lZCBieSAoc2VxIGNvbGwpLFxuICBzZXBhcmF0ZWQgYnkgYW4gb3B0aW9uYWwgc2VwYXJhdG9yLiIsIDphcmdsaXN0cyBbW2NvbGxdIFtzZXBhcmF0b3IgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpvaW5cclxuIFwiUmV0dXJucyBhIHN0cmluZyBvZiBhbGwgZWxlbWVudHMgaW4gY29sbCwgYXMgcmV0dXJuZWQgYnkgKHNlcSBjb2xsKSxcXG4gIHNlcGFyYXRlZCBieSBhbiBvcHRpb25hbCBzZXBhcmF0b3IuXCJcclxuIChbY29sbF1cclxuICAobG9vcFxyXG4gICBbc2IgKFN0cmluZ0J1ZmZlci4pIGNvbGwgKHNlcSBjb2xsKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8gY29sbClcclxuICAgIChyZWN1ciAoLiBzYiAoYXBwZW5kIChzdHIgKGZpcnN0IGNvbGwpKSkpIChuZXh0IGNvbGwpKVxyXG4gICAgKC50b1N0cmluZyBzYikpKSlcclxuIChbc2VwYXJhdG9yIGNvbGxdXHJcbiAgKGxvb3BcclxuICAgW3NiIChTdHJpbmdCdWZmZXIuKSBjb2xsIChzZXEgY29sbCldXHJcbiAgIChpZi1ub3RcclxuICAgIChuaWw/IGNvbGwpXHJcbiAgICAoZG9cclxuICAgICAoLiBzYiAoYXBwZW5kIChzdHIgKGZpcnN0IGNvbGwpKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbY29sbCAobmV4dCBjb2xsKV1cclxuICAgICAgKHdoZW4tbm90IChuaWw/IGNvbGwpICguIHNiIChhcHBlbmQgc2VwYXJhdG9yKSkpXHJcbiAgICAgIChyZWN1ciBzYiBjb2xsKSkpXHJcbiAgICAoLnRvU3RyaW5nIHNiKSkpKSlcclxuIn0gezpzeW0gcmVwbGFjZS1maXJzdCwgOm1ldGEgezpkb2MgIlJlcGxhY2VzIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBtYXRjaCB3aXRoIHJlcGxhY2VtZW50IGluIHMuXG5cbiAgIG1hdGNoL3JlcGxhY2VtZW50IGNhbiBiZTpcblxuICAgc3RyaW5nIC8gc3RyaW5nXG4gICBwYXR0ZXJuIC8gKHN0cmluZyBvciBmdW5jdGlvbiBvZiBtYXRjaCkuXG5cbiAgIFNlZSBhbHNvIHJlcGxhY2UuXG5cbiAgIFRoZSByZXBsYWNlbWVudCBpcyBsaXRlcmFsIChpLmUuIG5vbmUgb2YgaXRzIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWRcbiAgIHNwZWNpYWxseSkgZm9yIGFsbCBjYXNlcyBhYm92ZSBleGNlcHQgcGF0dGVybiAvIHN0cmluZy5cblxuICAgRm9yIHBhdHRlcm4gLyBzdHJpbmcsICQxLCAkMiwgZXRjLiBpbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGFyZVxuICAgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZ1xuICAgcGFyZW50aGVzaXplZCBncm91cCBpbiB0aGUgcGF0dGVybi5cblxuICAgRXhhbXBsZTpcbiAgIChjbG9qdXJlLnN0cmluZy9yZXBsYWNlLWZpcnN0IFwic3dhcCBmaXJzdCB0d28gd29yZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wiKFxcdyspKFxccyspKFxcdyspXCIgXCIkMyQyJDFcIilcbiAgIC0+IFwiZmlyc3Qgc3dhcCB0d28gd29yZHNcIiIsIDphcmdsaXN0cyAoW3MgbWF0Y2ggcmVwbGFjZW1lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBsYWNlLWZpcnN0XHJcbiBcIlJlcGxhY2VzIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBtYXRjaCB3aXRoIHJlcGxhY2VtZW50IGluIHMuXFxuXFxuICAgbWF0Y2gvcmVwbGFjZW1lbnQgY2FuIGJlOlxcblxcbiAgIHN0cmluZyAvIHN0cmluZ1xcbiAgIHBhdHRlcm4gLyAoc3RyaW5nIG9yIGZ1bmN0aW9uIG9mIG1hdGNoKS5cXG5cXG4gICBTZWUgYWxzbyByZXBsYWNlLlxcblxcbiAgIFRoZSByZXBsYWNlbWVudCBpcyBsaXRlcmFsIChpLmUuIG5vbmUgb2YgaXRzIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWRcXG4gICBzcGVjaWFsbHkpIGZvciBhbGwgY2FzZXMgYWJvdmUgZXhjZXB0IHBhdHRlcm4gLyBzdHJpbmcuXFxuXFxuICAgRm9yIHBhdHRlcm4gLyBzdHJpbmcsICQxLCAkMiwgZXRjLiBpbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGFyZVxcbiAgIHN1YnN0aXR1dGVkIHdpdGggdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIGNvcnJlc3BvbmRpbmdcXG4gICBwYXJlbnRoZXNpemVkIGdyb3VwIGluIHRoZSBwYXR0ZXJuLlxcblxcbiAgIEV4YW1wbGU6XFxuICAgKGNsb2p1cmUuc3RyaW5nL3JlcGxhY2UtZmlyc3QgXFxcInN3YXAgZmlyc3QgdHdvIHdvcmRzXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcXFwiKFxcXFx3KykoXFxcXHMrKShcXFxcdyspXFxcIiBcXFwiJDMkMiQxXFxcIilcXG4gICAtPiBcXFwiZmlyc3Qgc3dhcCB0d28gd29yZHNcXFwiXCJcclxuIFtzIG1hdGNoIHJlcGxhY2VtZW50XVxyXG4gKC5yZXBsYWNlIHMgbWF0Y2ggcmVwbGFjZW1lbnQpKVxyXG4ifSB7OnN5bSBzdGFydHMtd2l0aD8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHMgc3RhcnRzIHdpdGggc3Vic3RyLiIsIDphcmdsaXN0cyAoW3Mgc3Vic3RyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RhcnRzLXdpdGg/XHJcbiBcIlRydWUgaWYgcyBzdGFydHMgd2l0aCBzdWJzdHIuXCJcclxuIFtzIHN1YnN0cl1cclxuIChnc3RyaW5nL3N0YXJ0c1dpdGggcyBzdWJzdHIpKVxyXG4ifSB7OnN5bSBlc2NhcGUsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBuZXcgc3RyaW5nLCB1c2luZyBjbWFwIHRvIGVzY2FwZSBlYWNoIGNoYXJhY3RlciBjaFxuICAgZnJvbSBzIGFzIGZvbGxvd3M6XG5cbiAgIElmIChjbWFwIGNoKSBpcyBuaWwsIGFwcGVuZCBjaCB0byB0aGUgbmV3IHN0cmluZy5cbiAgIElmIChjbWFwIGNoKSBpcyBub24tbmlsLCBhcHBlbmQgKHN0ciAoY21hcCBjaCkpIGluc3RlYWQuIiwgOmFyZ2xpc3RzIChbcyBjbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjYXBlXHJcbiBcIlJldHVybiBhIG5ldyBzdHJpbmcsIHVzaW5nIGNtYXAgdG8gZXNjYXBlIGVhY2ggY2hhcmFjdGVyIGNoXFxuICAgZnJvbSBzIGFzIGZvbGxvd3M6XFxuXFxuICAgSWYgKGNtYXAgY2gpIGlzIG5pbCwgYXBwZW5kIGNoIHRvIHRoZSBuZXcgc3RyaW5nLlxcbiAgIElmIChjbWFwIGNoKSBpcyBub24tbmlsLCBhcHBlbmQgKHN0ciAoY21hcCBjaCkpIGluc3RlYWQuXCJcclxuIFtzIGNtYXBdXHJcbiAobGV0XHJcbiAgW2J1ZmZlciAoU3RyaW5nQnVmZmVyLikgbGVuZ3RoICguLWxlbmd0aCBzKV1cclxuICAobG9vcFxyXG4gICBbaW5kZXggMF1cclxuICAgKGlmXHJcbiAgICAoPT0gbGVuZ3RoIGluZGV4KVxyXG4gICAgKC4gYnVmZmVyICh0b1N0cmluZykpXHJcbiAgICAobGV0XHJcbiAgICAgW2NoICguY2hhckF0IHMgaW5kZXgpIHJlcGxhY2VtZW50IChnZXQgY21hcCBjaCldXHJcbiAgICAgKGlmLW5vdFxyXG4gICAgICAobmlsPyByZXBsYWNlbWVudClcclxuICAgICAgKC5hcHBlbmQgYnVmZmVyIChzdHIgcmVwbGFjZW1lbnQpKVxyXG4gICAgICAoLmFwcGVuZCBidWZmZXIgY2gpKVxyXG4gICAgIChyZWN1ciAoaW5jIGluZGV4KSkpKSkpKVxyXG4ifSB7OnN5bSBsYXN0LWluZGV4LW9mLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGxhc3QgaW5kZXggb2YgdmFsdWUgKHN0cmluZyBvciBjaGFyKSBpbiBzLCBvcHRpb25hbGx5XG4gIHNlYXJjaGluZyBiYWNrd2FyZCBmcm9tIGZyb20taW5kZXggb3IgbmlsIGlmIG5vdCBmb3VuZC4iLCA6YXJnbGlzdHMgW1tzIHZhbHVlXSBbcyB2YWx1ZSBmcm9tLWluZGV4XV19LCA6c291cmNlICIoZGVmblxyXG4gbGFzdC1pbmRleC1vZlxyXG4gXCJSZXR1cm4gbGFzdCBpbmRleCBvZiB2YWx1ZSAoc3RyaW5nIG9yIGNoYXIpIGluIHMsIG9wdGlvbmFsbHlcXG4gIHNlYXJjaGluZyBiYWNrd2FyZCBmcm9tIGZyb20taW5kZXggb3IgbmlsIGlmIG5vdCBmb3VuZC5cIlxyXG4gKFtzIHZhbHVlXVxyXG4gIChsZXQgW3Jlc3VsdCAoLmxhc3RJbmRleE9mIHMgdmFsdWUpXSAoaWYgKG5lZz8gcmVzdWx0KSBuaWwgcmVzdWx0KSkpXHJcbiAoW3MgdmFsdWUgZnJvbS1pbmRleF1cclxuICAobGV0XHJcbiAgIFtyZXN1bHQgKC5sYXN0SW5kZXhPZiBzIHZhbHVlIGZyb20taW5kZXgpXVxyXG4gICAoaWYgKG5lZz8gcmVzdWx0KSBuaWwgcmVzdWx0KSkpKVxyXG4ifSB7OnN5bSBpbmNsdWRlcz8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHMgaW5jbHVkZXMgc3Vic3RyLiIsIDphcmdsaXN0cyAoW3Mgc3Vic3RyXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5jbHVkZXM/XHJcbiBcIlRydWUgaWYgcyBpbmNsdWRlcyBzdWJzdHIuXCJcclxuIFtzIHN1YnN0cl1cclxuIChnc3RyaW5nL2NvbnRhaW5zIHMgc3Vic3RyKSlcclxuIn0gezpzeW0gcmVwbGFjZSwgOm1ldGEgezpkb2MgIlJlcGxhY2VzIGFsbCBpbnN0YW5jZSBvZiBtYXRjaCB3aXRoIHJlcGxhY2VtZW50IGluIHMuXG5cbiAgIG1hdGNoL3JlcGxhY2VtZW50IGNhbiBiZTpcblxuICAgc3RyaW5nIC8gc3RyaW5nXG4gICBwYXR0ZXJuIC8gKHN0cmluZyBvciBmdW5jdGlvbiBvZiBtYXRjaCkuXG5cbiAgIFNlZSBhbHNvIHJlcGxhY2UtZmlyc3QuXG5cbiAgIFRoZSByZXBsYWNlbWVudCBpcyBsaXRlcmFsIChpLmUuIG5vbmUgb2YgaXRzIGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWRcbiAgIHNwZWNpYWxseSkgZm9yIGFsbCBjYXNlcyBhYm92ZSBleGNlcHQgcGF0dGVybiAvIHN0cmluZy5cblxuICAgRm9yIHBhdHRlcm4gLyBzdHJpbmcsICQxLCAkMiwgZXRjLiBpbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIGFyZVxuICAgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZ1xuICAgcGFyZW50aGVzaXplZCBncm91cCBpbiB0aGUgcGF0dGVybi5cblxuICAgRXhhbXBsZTpcbiAgIChjbG9qdXJlLnN0cmluZy9yZXBsYWNlIFwiQWxtb3N0IFBpZyBMYXRpblwiICNcIlxcYihcXHcpKFxcdyspXFxiXCIgXCIkMiQxYXlcIilcbiAgIC0+IFwibG1vc3RBYXkgaWdQYXkgYXRpbkxheVwiIiwgOmFyZ2xpc3RzIChbcyBtYXRjaCByZXBsYWNlbWVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGxhY2VcclxuIFwiUmVwbGFjZXMgYWxsIGluc3RhbmNlIG9mIG1hdGNoIHdpdGggcmVwbGFjZW1lbnQgaW4gcy5cXG5cXG4gICBtYXRjaC9yZXBsYWNlbWVudCBjYW4gYmU6XFxuXFxuICAgc3RyaW5nIC8gc3RyaW5nXFxuICAgcGF0dGVybiAvIChzdHJpbmcgb3IgZnVuY3Rpb24gb2YgbWF0Y2gpLlxcblxcbiAgIFNlZSBhbHNvIHJlcGxhY2UtZmlyc3QuXFxuXFxuICAgVGhlIHJlcGxhY2VtZW50IGlzIGxpdGVyYWwgKGkuZS4gbm9uZSBvZiBpdHMgY2hhcmFjdGVycyBhcmUgdHJlYXRlZFxcbiAgIHNwZWNpYWxseSkgZm9yIGFsbCBjYXNlcyBhYm92ZSBleGNlcHQgcGF0dGVybiAvIHN0cmluZy5cXG5cXG4gICBGb3IgcGF0dGVybiAvIHN0cmluZywgJDEsICQyLCBldGMuIGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXJlXFxuICAgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZ1xcbiAgIHBhcmVudGhlc2l6ZWQgZ3JvdXAgaW4gdGhlIHBhdHRlcm4uXFxuXFxuICAgRXhhbXBsZTpcXG4gICAoY2xvanVyZS5zdHJpbmcvcmVwbGFjZSBcXFwiQWxtb3N0IFBpZyBMYXRpblxcXCIgI1xcXCJcXFxcYihcXFxcdykoXFxcXHcrKVxcXFxiXFxcIiBcXFwiJDIkMWF5XFxcIilcXG4gICAtPiBcXFwibG1vc3RBYXkgaWdQYXkgYXRpbkxheVxcXCJcIlxyXG4gW3MgbWF0Y2ggcmVwbGFjZW1lbnRdXHJcbiAoY29uZFxyXG4gIChzdHJpbmc/IG1hdGNoKVxyXG4gICgucmVwbGFjZVxyXG4gICBzXHJcbiAgIChqcy9SZWdFeHAuIChnc3RyaW5nL3JlZ0V4cEVzY2FwZSBtYXRjaCkgXCJnXCIpXHJcbiAgIHJlcGxhY2VtZW50KVxyXG4gIChpbnN0YW5jZT8ganMvUmVnRXhwIG1hdGNoKVxyXG4gIChpZlxyXG4gICAoc3RyaW5nPyByZXBsYWNlbWVudClcclxuICAgKHJlcGxhY2UtYWxsIHMgbWF0Y2ggcmVwbGFjZW1lbnQpXHJcbiAgIChyZXBsYWNlLWFsbCBzIG1hdGNoIChyZXBsYWNlLXdpdGggcmVwbGFjZW1lbnQpKSlcclxuICA6ZWxzZVxyXG4gICh0aHJvdyAoc3RyIFwiSW52YWxpZCBtYXRjaCBhcmc6IFwiIG1hdGNoKSkpKVxyXG4ifSB7OnN5bSBzcGxpdC1saW5lcywgOm1ldGEgezpkb2MgIlNwbGl0cyBzIG9uIFxcbiBvciBcXHJcXG4uIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0LWxpbmVzXHJcbiBcIlNwbGl0cyBzIG9uIFxcXFxuIG9yIFxcXFxyXFxcXG4uXCJcclxuIFtzXVxyXG4gKHNwbGl0IHMgI1wiXFxufFxcclxcblwiKSlcclxuIn0gezpzeW0gbG93ZXItY2FzZSwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIHN0cmluZyB0byBhbGwgbG93ZXItY2FzZS4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG93ZXItY2FzZVxyXG4gXCJDb252ZXJ0cyBzdHJpbmcgdG8gYWxsIGxvd2VyLWNhc2UuXCJcclxuIFtzXVxyXG4gKC50b0xvd2VyQ2FzZSBzKSlcclxuIn0gezpzeW0gdHJpbS1uZXdsaW5lLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBhbGwgdHJhaWxpbmcgbmV3bGluZSBcXG4gb3IgcmV0dXJuIFxcciBjaGFyYWN0ZXJzIGZyb21cbiAgc3RyaW5nLiAgU2ltaWxhciB0byBQZXJsJ3MgY2hvbXAuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyaW0tbmV3bGluZVxyXG4gXCJSZW1vdmVzIGFsbCB0cmFpbGluZyBuZXdsaW5lIFxcXFxuIG9yIHJldHVybiBcXFxcciBjaGFyYWN0ZXJzIGZyb21cXG4gIHN0cmluZy4gIFNpbWlsYXIgdG8gUGVybCdzIGNob21wLlwiXHJcbiBbc11cclxuIChsb29wXHJcbiAgW2luZGV4ICguLWxlbmd0aCBzKV1cclxuICAoaWZcclxuICAgKHplcm8/IGluZGV4KVxyXG4gICBcIlwiXHJcbiAgIChsZXRcclxuICAgIFtjaCAoZ2V0IHMgKGRlYyBpbmRleCkpXVxyXG4gICAgKGlmXHJcbiAgICAgKG9yIChpZGVudGljYWw/IFxcbmV3bGluZSBjaCkgKGlkZW50aWNhbD8gXFxyZXR1cm4gY2gpKVxyXG4gICAgIChyZWN1ciAoZGVjIGluZGV4KSlcclxuICAgICAoLnN1YnN0cmluZyBzIDAgaW5kZXgpKSkpKSlcclxuIn0gezpzeW0gdXBwZXItY2FzZSwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIHN0cmluZyB0byBhbGwgdXBwZXItY2FzZS4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBwZXItY2FzZVxyXG4gXCJDb252ZXJ0cyBzdHJpbmcgdG8gYWxsIHVwcGVyLWNhc2UuXCJcclxuIFtzXVxyXG4gKC50b1VwcGVyQ2FzZSBzKSlcclxuIn0gezpzeW0gc3BsaXQsIDptZXRhIHs6ZG9jICJTcGxpdHMgc3RyaW5nIG9uIGEgcmVndWxhciBleHByZXNzaW9uLiBPcHRpb25hbCBhcmd1bWVudCBsaW1pdCBpc1xuICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzLiBOb3QgbGF6eS4gUmV0dXJucyB2ZWN0b3Igb2YgdGhlIHNwbGl0cy4iLCA6YXJnbGlzdHMgW1tzIHJlXSBbcyByZSBsaW1pdF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0XHJcbiBcIlNwbGl0cyBzdHJpbmcgb24gYSByZWd1bGFyIGV4cHJlc3Npb24uIE9wdGlvbmFsIGFyZ3VtZW50IGxpbWl0IGlzXFxuICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3BsaXRzLiBOb3QgbGF6eS4gUmV0dXJucyB2ZWN0b3Igb2YgdGhlIHNwbGl0cy5cIlxyXG4gKFtzIHJlXSAoc3BsaXQgcyByZSAwKSlcclxuIChbcyByZSBsaW1pdF1cclxuICAoZGlzY2FyZC10cmFpbGluZy1pZi1uZWVkZWRcclxuICAgbGltaXRcclxuICAgKGlmXHJcbiAgICAoaWRlbnRpY2FsPyBcIi8oPzopL1wiIChzdHIgcmUpKVxyXG4gICAgKHNwbGl0LXdpdGgtZW1wdHktcmVnZXggcyBsaW1pdClcclxuICAgIChpZlxyXG4gICAgICg8IGxpbWl0IDEpXHJcbiAgICAgKHZlYyAoLnNwbGl0IChzdHIgcykgcmUpKVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtzIHMgbGltaXQgbGltaXQgcGFydHMgW11dXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD09IDEgbGltaXQpXHJcbiAgICAgICAoY29uaiBwYXJ0cyBzKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFttIChyZS1maW5kIHJlIHMpXVxyXG4gICAgICAgIChpZi1ub3RcclxuICAgICAgICAgKG5pbD8gbSlcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW2luZGV4ICguaW5kZXhPZiBzIG0pXVxyXG4gICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgKC5zdWJzdHJpbmcgcyAoKyBpbmRleCAoY291bnQgbSkpKVxyXG4gICAgICAgICAgIChkZWMgbGltaXQpXHJcbiAgICAgICAgICAgKGNvbmogcGFydHMgKC5zdWJzdHJpbmcgcyAwIGluZGV4KSkpKVxyXG4gICAgICAgICAoY29uaiBwYXJ0cyBzKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSB0cmltciwgOm1ldGEgezpkb2MgIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJpbXJcclxuIFwiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nLlwiXHJcbiBbc11cclxuIChnc3RyaW5nL3RyaW1SaWdodCBzKSlcclxuIn0gezpzeW0gaW5kZXgtb2YsIDptZXRhIHs6ZG9jICJSZXR1cm4gaW5kZXggb2YgdmFsdWUgKHN0cmluZyBvciBjaGFyKSBpbiBzLCBvcHRpb25hbGx5IHNlYXJjaGluZ1xuICBmb3J3YXJkIGZyb20gZnJvbS1pbmRleCBvciBuaWwgaWYgbm90IGZvdW5kLiIsIDphcmdsaXN0cyBbW3MgdmFsdWVdIFtzIHZhbHVlIGZyb20taW5kZXhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleC1vZlxyXG4gXCJSZXR1cm4gaW5kZXggb2YgdmFsdWUgKHN0cmluZyBvciBjaGFyKSBpbiBzLCBvcHRpb25hbGx5IHNlYXJjaGluZ1xcbiAgZm9yd2FyZCBmcm9tIGZyb20taW5kZXggb3IgbmlsIGlmIG5vdCBmb3VuZC5cIlxyXG4gKFtzIHZhbHVlXVxyXG4gIChsZXQgW3Jlc3VsdCAoLmluZGV4T2YgcyB2YWx1ZSldIChpZiAobmVnPyByZXN1bHQpIG5pbCByZXN1bHQpKSlcclxuIChbcyB2YWx1ZSBmcm9tLWluZGV4XVxyXG4gIChsZXRcclxuICAgW3Jlc3VsdCAoLmluZGV4T2YgcyB2YWx1ZSBmcm9tLWluZGV4KV1cclxuICAgKGlmIChuZWc/IHJlc3VsdCkgbmlsIHJlc3VsdCkpKSlcclxuIn0gezpzeW0gdHJpbSwgOm1ldGEgezpkb2MgIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIGJvdGggZW5kcyBvZiBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyaW1cclxuIFwiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gYm90aCBlbmRzIG9mIHN0cmluZy5cIlxyXG4gW3NdXHJcbiAoZ3N0cmluZy90cmltIHMpKVxyXG4ifSB7OnN5bSB0cmltbCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSBsZWZ0IHNpZGUgb2Ygc3RyaW5nLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmltbFxyXG4gXCJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHN0cmluZy5cIlxyXG4gW3NdXHJcbiAoZ3N0cmluZy90cmltTGVmdCBzKSlcclxuIn0gezpzeW0gYmxhbms/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpcyBzIGlzIG5pbCwgZW1wdHksIG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYmxhbms/XHJcbiBcIlRydWUgaXMgcyBpcyBuaWwsIGVtcHR5LCBvciBjb250YWlucyBvbmx5IHdoaXRlc3BhY2UuXCJcclxuIFtzXVxyXG4gKGdzdHJpbmcvaXNFbXB0eU9yV2hpdGVzcGFjZSAoZ3N0cmluZy9tYWtlU2FmZSBzKSkpXHJcbiJ9KSwgY2xqcy5zcGVjLmFscGhhICh7OnN5bSBmb3JtLCA6bWV0YSB7OmRvYyAicmV0dXJucyB0aGUgc3BlYyBhcyBkYXRhIiwgOmFyZ2xpc3RzIChbc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcm1cclxuIFwicmV0dXJucyB0aGUgc3BlYyBhcyBkYXRhXCJcclxuIFtzcGVjXVxyXG4gKGRlc2NyaWJlKiAoc3BlY2l6ZSBzcGVjKSkpXHJcbiJ9IHs6c3ltIG5pbGFibGUtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbmlsYWJsZSciLCA6YXJnbGlzdHMgKFtmb3JtIHByZWQgZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmlsYWJsZS1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbmlsYWJsZSdcIlxyXG4gW2Zvcm0gcHJlZCBnZm5dXHJcbiAobGV0XHJcbiAgW3NwZWMgKGRlbGF5IChzcGVjaXplIHByZWQgZm9ybSkpXVxyXG4gIChyZWlmeVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qIFtfIHhdIChpZiAobmlsPyB4KSBuaWwgKGNvbmZvcm0qIEBzcGVjIHgpKSlcclxuICAgKHVuZm9ybSogW18geF0gKGlmIChuaWw/IHgpIG5pbCAodW5mb3JtKiBAc3BlYyB4KSkpXHJcbiAgIChleHBsYWluKlxyXG4gICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChjL29yIChwdmFsaWQ/IEBzcGVjIHgpIChuaWw/IHgpKVxyXG4gICAgIChjb25qXHJcbiAgICAgIChleHBsYWluLTEgZm9ybSBwcmVkIChjb25qIHBhdGggOmNsanMuc3BlYy5hbHBoYS9wcmVkKSB2aWEgaW4geClcclxuICAgICAgezpwYXRoIChjb25qIHBhdGggOmNsanMuc3BlYy5hbHBoYS9uaWwpLFxyXG4gICAgICAgOnByZWQgJ25pbD8sXHJcbiAgICAgICA6dmFsIHgsXHJcbiAgICAgICA6dmlhIHZpYSxcclxuICAgICAgIDppbiBpbn0pKSlcclxuICAgKGdlbipcclxuICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAoaWZcclxuICAgICBnZm5cclxuICAgICAoZ2ZuKVxyXG4gICAgIChnZW4vZnJlcXVlbmN5XHJcbiAgICAgIFtbMSAoZ2VuL2RlbGF5IChnZW4vcmV0dXJuIG5pbCkpXVxyXG4gICAgICAgWzlcclxuICAgICAgICAoZ2VuL2RlbGF5XHJcbiAgICAgICAgIChnZW5zdWJcclxuICAgICAgICAgIHByZWRcclxuICAgICAgICAgIG92ZXJyaWRlc1xyXG4gICAgICAgICAgKGNvbmogcGF0aCA6Y2xqcy5zcGVjLmFscGhhL3ByZWQpXHJcbiAgICAgICAgICBybWFwXHJcbiAgICAgICAgICBmb3JtKSldXSkpKVxyXG4gICAod2l0aC1nZW4qIFtfIGdmbl0gKG5pbGFibGUtaW1wbCBmb3JtIHByZWQgZ2ZuKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL25pbGFibGUpXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKHMvbXJlcyBmb3JtKSkpKSkpKSkpXHJcbiJ9IHs6c3ltICpyZWN1cnNpb24tbGltaXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKnJlY3Vyc2lvbi1saW1pdCpcclxuIFwiQSBzb2Z0IGxpbWl0IG9uIGhvdyBtYW55IHRpbWVzIGEgYnJhbmNoaW5nIHNwZWMgKG9yL2FsdC8qL29wdC1rZXlzL211bHRpLXNwZWMpXFxuICBjYW4gYmUgcmVjdXJzZWQgdGhyb3VnaCBkdXJpbmcgZ2VuZXJhdGlvbi4gQWZ0ZXIgdGhpcyBhXFxuICBub24tcmVjdXJzaXZlIGJyYW5jaCB3aWxsIGJlIGNob3Nlbi5cIlxyXG4gNClcclxuIn0gezpzeW0gKmNvbGwtZXJyb3ItbGltaXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmNvbGwtZXJyb3ItbGltaXQqXHJcbiBcIlRoZSBudW1iZXIgb2YgZXJyb3JzIHJlcG9ydGVkIGJ5IGV4cGxhaW4gaW4gYSBjb2xsZWN0aW9uIHNwZWMnZWQgd2l0aCAnZXZlcnknXCJcclxuIDIwKVxyXG4ifSB7OnN5bSBleHBsYWluLXByaW50ZXIsIDptZXRhIHs6ZG9jICJEZWZhdWx0IHByaW50ZXIgZm9yIGV4cGxhaW4tZGF0YS4gbmlsIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi4iLCA6YXJnbGlzdHMgKFtlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tcHJpbnRlclxyXG4gXCJEZWZhdWx0IHByaW50ZXIgZm9yIGV4cGxhaW4tZGF0YS4gbmlsIGluZGljYXRlcyBhIHN1Y2Nlc3NmdWwgdmFsaWRhdGlvbi5cIlxyXG4gW2VkXVxyXG4gKGlmXHJcbiAgZWRcclxuICAobGV0XHJcbiAgIFtwcm9ibGVtc1xyXG4gICAgKC0+PlxyXG4gICAgICg6Y2xqcy5zcGVjLmFscGhhL3Byb2JsZW1zIGVkKVxyXG4gICAgIChzb3J0LWJ5IChmbiogW3AxX180ODkzNiNdICgtIChjb3VudCAoOmluIHAxX180ODkzNiMpKSkpKVxyXG4gICAgIChzb3J0LWJ5IChmbiogW3AxX180ODkzNyNdICgtIChjb3VudCAoOnBhdGggcDFfXzQ4OTM3IykpKSkpKV1cclxuICAgKHByaW50XHJcbiAgICAod2l0aC1vdXQtc3RyXHJcbiAgICAgKGRvc2VxXHJcbiAgICAgIFt7OmtleXMgW3BhdGggcHJlZCB2YWwgcmVhc29uIHZpYSBpbl0sIDphcyBwcm9ifSBwcm9ibGVtc11cclxuICAgICAgKHByIHZhbClcclxuICAgICAgKHByaW50IFwiIC0gZmFpbGVkOiBcIilcclxuICAgICAgKGlmIHJlYXNvbiAocHJpbnQgcmVhc29uKSAocHIgKGFiYnJldiBwcmVkKSkpXHJcbiAgICAgICh3aGVuLW5vdCAoZW1wdHk/IGluKSAocHJpbnQgKHN0ciBcIiBpbjogXCIgKHByLXN0ciBpbikpKSlcclxuICAgICAgKHdoZW4tbm90IChlbXB0eT8gcGF0aCkgKHByaW50IChzdHIgXCIgYXQ6IFwiIChwci1zdHIgcGF0aCkpKSlcclxuICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAoZW1wdHk/IHZpYSlcclxuICAgICAgIChwcmludCAoc3RyIFwiIHNwZWM6IFwiIChwci1zdHIgKGxhc3QgdmlhKSkpKSlcclxuICAgICAgKGRvc2VxXHJcbiAgICAgICBbW2sgdl0gcHJvYl1cclxuICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICgjezpwYXRoIDpwcmVkIDp2aWEgOnZhbCA6cmVhc29uIDppbn0gaylcclxuICAgICAgICAocHJpbnQgXCJcXG5cXHRcIiAocHItc3RyIGspIFwiIFwiKVxyXG4gICAgICAgIChwciB2KSkpXHJcbiAgICAgIChuZXdsaW5lKSkpKSlcclxuICAocHJpbnRsbiBcIlN1Y2Nlc3MhXCIpKSlcclxuIn0gezpzeW0gU3BlY2l6ZSwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKHNwZWNpemUqKX0gezpzeW0gYWx0LWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2FsdCciLCA6YXJnbGlzdHMgKFtrcyBwcyBmb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFsdC1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYWx0J1wiXHJcbiBba3MgcHMgZm9ybXNdXHJcbiAoYXNzb2MgKGFsdCogcHMga3MgZm9ybXMpIDppZCAocmFuZG9tLXV1aWQpKSlcclxuIn0gezpzeW0gZGVmLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2RlZiciLCA6YXJnbGlzdHMgKFtrIGZvcm0gc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZi1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZGVmJ1wiXHJcbiBbayBmb3JtIHNwZWNdXHJcbiAoYXNzZXJ0XHJcbiAgKGMvYW5kIChpZGVudD8gaykgKG5hbWVzcGFjZSBrKSlcclxuICBcImsgbXVzdCBiZSBuYW1lc3BhY2VkIGtleXdvcmQgb3IgcmVzb2x2ZWFibGUgc3ltYm9sXCIpXHJcbiAoaWZcclxuICAobmlsPyBzcGVjKVxyXG4gIChzd2FwISByZWdpc3RyeS1yZWYgZGlzc29jIGspXHJcbiAgKGxldFxyXG4gICBbc3BlY1xyXG4gICAgKGlmXHJcbiAgICAgKGMvb3IgKHNwZWM/IHNwZWMpIChyZWdleD8gc3BlYykgKGdldCBAcmVnaXN0cnktcmVmIHNwZWMpKVxyXG4gICAgIHNwZWNcclxuICAgICAoc3BlYy1pbXBsIGZvcm0gc3BlYyBuaWwgbmlsKSldXHJcbiAgIChzd2FwISByZWdpc3RyeS1yZWYgYXNzb2MgayAod2l0aC1uYW1lIHNwZWMgaykpKSlcclxuIGspXHJcbiJ9IHs6c3ltICpleHBsYWluLW91dCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpleHBsYWluLW91dCogZXhwbGFpbi1wcmludGVyKVxyXG4ifSB7OnN5bSByZWdleC1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnIHdpdGggYSByZWdleCBvcCBhcmd1bWVudCIsIDphcmdsaXN0cyAoW3JlIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2V4LXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnIHdpdGggYSByZWdleCBvcCBhcmd1bWVudFwiXHJcbiBbcmUgZ2ZuXVxyXG4gKHJlaWZ5XHJcbiAgU3BlY2l6ZVxyXG4gIChzcGVjaXplKiBbc10gcylcclxuICAoc3BlY2l6ZSogW3MgX10gcylcclxuICBTcGVjXHJcbiAgKGNvbmZvcm0qXHJcbiAgIFtfIHhdXHJcbiAgIChpZlxyXG4gICAgKGMvb3IgKG5pbD8geCkgKHNlcXVlbnRpYWw/IHgpKVxyXG4gICAgKHJlLWNvbmZvcm0gcmUgKHNlcSB4KSlcclxuICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpXHJcbiAgKHVuZm9ybSogW18geF0gKG9wLXVuZm9ybSByZSB4KSlcclxuICAoZXhwbGFpbipcclxuICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgKGlmXHJcbiAgICAoYy9vciAobmlsPyB4KSAoc2VxdWVudGlhbD8geCkpXHJcbiAgICAocmUtZXhwbGFpbiBwYXRoIHZpYSBpbiByZSAoc2VxIHgpKVxyXG4gICAgW3s6cGF0aCBwYXRoLFxyXG4gICAgICA6cHJlZFxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL2ZuKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvdmVjXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXQgKGNsb2p1cmUuY29yZS9saXN0ICclKSkpKSkpXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuY29yZS9vcilcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvbmlsPylcclxuICAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJyUpKSkpKVxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS9zZXF1ZW50aWFsPylcclxuICAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJyUpKSkpKSkpKSkpKSksXHJcbiAgICAgIDp2YWwgeCxcclxuICAgICAgOnZpYSB2aWEsXHJcbiAgICAgIDppbiBpbn1dKSlcclxuICAoZ2VuKlxyXG4gICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAoaWYgZ2ZuIChnZm4pIChyZS1nZW4gcmUgb3ZlcnJpZGVzIHBhdGggcm1hcCAob3AtZGVzY3JpYmUgcmUpKSkpXHJcbiAgKHdpdGgtZ2VuKiBbXyBnZm5dIChyZWdleC1zcGVjLWltcGwgcmUgZ2ZuKSlcclxuICAoZGVzY3JpYmUqIFtfXSAob3AtZGVzY3JpYmUgcmUpKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbWVyZ2UnIiwgOmFyZ2xpc3RzIChbZm9ybXMgcHJlZHMgZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2Utc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbWVyZ2UnXCJcclxuIFtmb3JtcyBwcmVkcyBnZm5dXHJcbiAocmVpZnlcclxuICBTcGVjaXplXHJcbiAgKHNwZWNpemUqIFtzXSBzKVxyXG4gIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gIFNwZWNcclxuICAoY29uZm9ybSpcclxuICAgW18geF1cclxuICAgKGxldFxyXG4gICAgW21zXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm4qIFtwMV9fNDg5NDkjIHAyX180ODk1MCNdIChkdCBwMV9fNDg5NDkjIHggcDJfXzQ4OTUwIykpXHJcbiAgICAgIHByZWRzXHJcbiAgICAgIGZvcm1zKV1cclxuICAgIChpZlxyXG4gICAgIChzb21lIGludmFsaWQ/IG1zKVxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgIChhcHBseSBjL21lcmdlIG1zKSkpKVxyXG4gICh1bmZvcm0qXHJcbiAgIFtfIHhdXHJcbiAgIChhcHBseVxyXG4gICAgYy9tZXJnZVxyXG4gICAgKG1hcCAoZm4qIFtwMV9fNDg5NTEjXSAodW5mb3JtIHAxX180ODk1MSMgeCkpIChyZXZlcnNlIHByZWRzKSkpKVxyXG4gIChleHBsYWluKlxyXG4gICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAoYXBwbHlcclxuICAgIGNvbmNhdFxyXG4gICAgKG1hcFxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180ODk1MiMgcDJfXzQ4OTUzI11cclxuICAgICAgKGV4cGxhaW4tMSBwMV9fNDg5NTIjIHAyX180ODk1MyMgcGF0aCB2aWEgaW4geCkpXHJcbiAgICAgZm9ybXNcclxuICAgICBwcmVkcykpKVxyXG4gIChnZW4qXHJcbiAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgIChpZlxyXG4gICAgZ2ZuXHJcbiAgICAoZ2ZuKVxyXG4gICAgKGdlbi9mbWFwXHJcbiAgICAgKGZuKiBbcDFfXzQ4OTU0I10gKGFwcGx5IGMvbWVyZ2UgcDFfXzQ4OTU0IykpXHJcbiAgICAgKGFwcGx5XHJcbiAgICAgIGdlbi90dXBsZVxyXG4gICAgICAobWFwXHJcbiAgICAgICAoZm4qXHJcbiAgICAgICAgW3AxX180ODk1NSMgcDJfXzQ4OTU2I11cclxuICAgICAgICAoZ2Vuc3ViIHAxX180ODk1NSMgb3ZlcnJpZGVzIHBhdGggcm1hcCBwMl9fNDg5NTYjKSlcclxuICAgICAgIHByZWRzXHJcbiAgICAgICBmb3JtcykpKSkpXHJcbiAgKHdpdGgtZ2VuKiBbXyBnZm5dIChtZXJnZS1zcGVjLWltcGwgZm9ybXMgcHJlZHMgZ2ZuKSlcclxuICAoZGVzY3JpYmUqXHJcbiAgIFtfXVxyXG4gICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL21lcmdlKVxyXG4gICAgICBmb3JtcykpKSkpKVxyXG4ifSB7OnN5bSBleHBsYWluLWRhdGEqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgcGF0aCB2aWEgaW4geF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tZGF0YSpcclxuIFtzcGVjIHBhdGggdmlhIGluIHhdXHJcbiAod2hlbi1sZXRcclxuICBbcHJvYnMgKGV4cGxhaW4qIChzcGVjaXplIHNwZWMpIHBhdGggdmlhIGluIHgpXVxyXG4gICh3aGVuLW5vdFxyXG4gICAoZW1wdHk/IHByb2JzKVxyXG4gICB7OmNsanMuc3BlYy5hbHBoYS9wcm9ibGVtcyBwcm9icyxcclxuICAgIDpjbGpzLnNwZWMuYWxwaGEvc3BlYyBzcGVjLFxyXG4gICAgOmNsanMuc3BlYy5hbHBoYS92YWx1ZSB4fSkpKVxyXG4ifSB7OnN5bSBNQVhfSU5ULCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNQVhfSU5UIDkwMDcxOTkyNTQ3NDA5OTEpXHJcbiJ9IHs6c3ltIGNoZWNrLWFzc2VydHMsIDptZXRhIHs6ZG9jICJFbmFibGUgb3IgZGlzYWJsZSBzcGVjIGFzc2VydHMgdGhhdCBoYXZlIGJlZW4gY29tcGlsZWRcbndpdGggJypjb21waWxlLWFzc2VydHMqJyB0cnVlLiAgU2VlICdhc3NlcnQnLlxuSW5pdGlhbGx5IHNldCB0byBib29sZWFuIHZhbHVlIG9mIGNsanMuc3BlYy5hbHBoYS8qcnVudGltZS1hc3NlcnRzKi5cbkRlZmF1bHRzIHRvIGZhbHNlLiIsIDphcmdsaXN0cyAoW2ZsYWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay1hc3NlcnRzXHJcbiBcIkVuYWJsZSBvciBkaXNhYmxlIHNwZWMgYXNzZXJ0cyB0aGF0IGhhdmUgYmVlbiBjb21waWxlZFxcbndpdGggJypjb21waWxlLWFzc2VydHMqJyB0cnVlLiAgU2VlICdhc3NlcnQnLlxcbkluaXRpYWxseSBzZXQgdG8gYm9vbGVhbiB2YWx1ZSBvZiBjbGpzLnNwZWMuYWxwaGEvKnJ1bnRpbWUtYXNzZXJ0cyouXFxuRGVmYXVsdHMgdG8gZmFsc2UuXCJcclxuIFtmbGFnXVxyXG4gKHNldCEgKnJ1bnRpbWUtYXNzZXJ0cyogZmxhZykpXHJcbiJ9IHs6c3ltIGFzc2VydCosIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2Fzc2VydCcuIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXNzZXJ0KlxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2Fzc2VydCcuXCJcclxuIFtzcGVjIHhdXHJcbiAoaWZcclxuICAodmFsaWQ/IHNwZWMgeClcclxuICB4XHJcbiAgKGxldFxyXG4gICBbZWRcclxuICAgIChjL21lcmdlXHJcbiAgICAgKGFzc29jXHJcbiAgICAgIChleHBsYWluLWRhdGEqIHNwZWMgW10gW10gW10geClcclxuICAgICAgOmNsanMuc3BlYy5hbHBoYS9mYWlsdXJlXHJcbiAgICAgIDphc3NlcnRpb24tZmFpbGVkKSldXHJcbiAgICh0aHJvd1xyXG4gICAgKGpzL0Vycm9yLlxyXG4gICAgIChzdHJcclxuICAgICAgXCJTcGVjIGFzc2VydGlvbiBmYWlsZWRcXG5cIlxyXG4gICAgICAod2l0aC1vdXQtc3RyIChleHBsYWluLW91dCBlZCkpKSkpKSkpXHJcbiJ9IHs6c3ltIGluc3QtaW4tcmFuZ2U/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgaW5zdCBhdCBvciBhZnRlciBzdGFydCBhbmQgYmVmb3JlIGVuZCIsIDphcmdsaXN0cyAoW3N0YXJ0IGVuZCBpbnN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5zdC1pbi1yYW5nZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgaW5zdCBhdCBvciBhZnRlciBzdGFydCBhbmQgYmVmb3JlIGVuZFwiXHJcbiBbc3RhcnQgZW5kIGluc3RdXHJcbiAoYy9hbmRcclxuICAoaW5zdD8gaW5zdClcclxuICAobGV0XHJcbiAgIFt0IChpbnN0LW1zIGluc3QpXVxyXG4gICAoYy9hbmQgKDw9IChpbnN0LW1zIHN0YXJ0KSB0KSAoPCB0IChpbnN0LW1zIGVuZCkpKSkpKVxyXG4ifSB7OnN5bSBhbmQtc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhbmQnIiwgOmFyZ2xpc3RzIChbZm9ybXMgcHJlZHMgZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5kLXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2FuZCdcIlxyXG4gW2Zvcm1zIHByZWRzIGdmbl1cclxuIChsZXRcclxuICBbc3BlY3NcclxuICAgKGRlbGF5IChtYXB2IHNwZWNpemUgcHJlZHMgZm9ybXMpKVxyXG4gICBjZm9ybVxyXG4gICAoY2FzZVxyXG4gICAgKGNvdW50IHByZWRzKVxyXG4gICAgMlxyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzIHJldCAoY29uZm9ybSogKHNwZWNzIDApIHgpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgIChjb25mb3JtKiAoc3BlY3MgMSkgcmV0KSkpKVxyXG4gICAgM1xyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzIHJldCAoY29uZm9ybSogKHNwZWNzIDApIHgpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgIChsZXRcclxuICAgICAgICBbcmV0IChjb25mb3JtKiAoc3BlY3MgMSkgcmV0KV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgIChjb25mb3JtKiAoc3BlY3MgMikgcmV0KSkpKSkpXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3NdXHJcbiAgICAgIChsb29wXHJcbiAgICAgICBbcmV0IHggaSAwXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKDwgaSAoY291bnQgc3BlY3MpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW25yZXQgKGNvbmZvcm0qIChzcGVjcyBpKSByZXQpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChpbnZhbGlkPyBucmV0KVxyXG4gICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICAocmVjdXIgbnJldCAoaW5jIGkpKSkpXHJcbiAgICAgICAgcmV0KSkpKSldXHJcbiAgKHJlaWZ5XHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSogW18geF0gKGNmb3JtIHgpKVxyXG4gICAodW5mb3JtKlxyXG4gICAgW18geF1cclxuICAgIChyZWR1Y2VcclxuICAgICAoZm4qIFtwMV9fNDg5NDgjIHAyX180ODk0NyNdICh1bmZvcm0gcDJfXzQ4OTQ3IyBwMV9fNDg5NDgjKSlcclxuICAgICB4XHJcbiAgICAgKHJldmVyc2UgcHJlZHMpKSlcclxuICAgKGV4cGxhaW4qXHJcbiAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgKGV4cGxhaW4tcHJlZC1saXN0IGZvcm1zIHByZWRzIHBhdGggdmlhIGluIHgpKVxyXG4gICAoZ2VuKlxyXG4gICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgIChpZlxyXG4gICAgIGdmblxyXG4gICAgIChnZm4pXHJcbiAgICAgKGdlbnN1YiAoZmlyc3QgcHJlZHMpIG92ZXJyaWRlcyBwYXRoIHJtYXAgKGZpcnN0IGZvcm1zKSkpKVxyXG4gICAod2l0aC1nZW4qIFtfIGdmbl0gKGFuZC1zcGVjLWltcGwgZm9ybXMgcHJlZHMgZ2ZuKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL2FuZClcclxuICAgICAgIGZvcm1zKSkpKSkpKVxyXG4ifSB7OnN5bSBkZXNjcmliZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlY10pfSwgOnByb3RvY29sIFNwZWN9IHs6c3ltIG1hcC1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnIHdpdGggYSBtYXAgYXJndW1lbnQiLCA6YXJnbGlzdHMgKFt7OmtleXMgW3JlcS11biBvcHQtdW4ga2V5cy1wcmVkIHByZWQtZXhwcnMgb3B0LWtleXMgcmVxLXNwZWNzIHJlcSByZXEta2V5cyBvcHQtc3BlY3MgcHJlZC1mb3JtcyBvcHQgZ2ZuXSwgOmFzIGFyZ219XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLXNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnIHdpdGggYSBtYXAgYXJndW1lbnRcIlxyXG4gW3s6a2V5c1xyXG4gICBbcmVxLXVuXHJcbiAgICBvcHQtdW5cclxuICAgIGtleXMtcHJlZFxyXG4gICAgcHJlZC1leHByc1xyXG4gICAgb3B0LWtleXNcclxuICAgIHJlcS1zcGVjc1xyXG4gICAgcmVxXHJcbiAgICByZXEta2V5c1xyXG4gICAgb3B0LXNwZWNzXHJcbiAgICBwcmVkLWZvcm1zXHJcbiAgICBvcHRcclxuICAgIGdmbl0sXHJcbiAgIDphcyBhcmdtfV1cclxuIChsZXRcclxuICBbay0+c1xyXG4gICAoemlwbWFwIChjb25jYXQgcmVxLWtleXMgb3B0LWtleXMpIChjb25jYXQgcmVxLXNwZWNzIG9wdC1zcGVjcykpXHJcbiAgIGtleXMtPnNwZWNuYW1lc1xyXG4gICAoZm4qIFtwMV9fNDg5MzkjXSAoYy9vciAoay0+cyBwMV9fNDg5MzkjKSBwMV9fNDg5MzkjKSlcclxuICAgaWRcclxuICAgKHJhbmRvbS11dWlkKV1cclxuICAocmVpZnlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKlxyXG4gICAgW18gbV1cclxuICAgIChpZlxyXG4gICAgIChrZXlzLXByZWQgbSlcclxuICAgICAobGV0XHJcbiAgICAgIFtyZWcgKHJlZ2lzdHJ5KV1cclxuICAgICAgKGxvb3BcclxuICAgICAgIFtyZXQgbSBbW2sgdl0gJiBrcyA6YXMga2V5c10gbV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIGtleXNcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzbmFtZSAoa2V5cy0+c3BlY25hbWVzIGspXVxyXG4gICAgICAgICAoaWYtbGV0XHJcbiAgICAgICAgICBbcyAoZ2V0IHJlZyBzbmFtZSldXHJcbiAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgW2N2IChjb25mb3JtIHMgdildXHJcbiAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgIChpbnZhbGlkPyBjdilcclxuICAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICAgIChyZWN1ciAoaWYgKGlkZW50aWNhbD8gY3YgdikgcmV0IChhc3NvYyByZXQgayBjdikpIGtzKSkpXHJcbiAgICAgICAgICAocmVjdXIgcmV0IGtzKSkpXHJcbiAgICAgICAgcmV0KSkpXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSlcclxuICAgKHVuZm9ybSpcclxuICAgIFtfIG1dXHJcbiAgICAobGV0XHJcbiAgICAgW3JlZyAocmVnaXN0cnkpXVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtyZXQgbSBbayAmIGtzIDphcyBrZXlzXSAoYy9rZXlzIG0pXVxyXG4gICAgICAoaWZcclxuICAgICAgIGtleXNcclxuICAgICAgIChpZlxyXG4gICAgICAgIChjb250YWlucz8gcmVnIChrZXlzLT5zcGVjbmFtZXMgaykpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbY3YgKGdldCBtIGspIHYgKHVuZm9ybSAoa2V5cy0+c3BlY25hbWVzIGspIGN2KV1cclxuICAgICAgICAgKHJlY3VyIChpZiAoaWRlbnRpY2FsPyBjdiB2KSByZXQgKGFzc29jIHJldCBrIHYpKSBrcykpXHJcbiAgICAgICAgKHJlY3VyIHJldCBrcykpXHJcbiAgICAgICByZXQpKSkpXHJcbiAgIChleHBsYWluKlxyXG4gICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgIChpZi1ub3RcclxuICAgICAobWFwPyB4KVxyXG4gICAgIFt7OnBhdGggcGF0aCwgOnByZWQgJ2Nsb2p1cmUuY29yZS9tYXA/LCA6dmFsIHgsIDp2aWEgdmlhLCA6aW4gaW59XVxyXG4gICAgIChsZXRcclxuICAgICAgW3JlZyAocmVnaXN0cnkpXVxyXG4gICAgICAoYXBwbHlcclxuICAgICAgIGNvbmNhdFxyXG4gICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICAgW3Byb2JzXHJcbiAgICAgICAgICgtPj5cclxuICAgICAgICAgIChtYXBcclxuICAgICAgICAgICAoZm4gW3ByZWQgZm9ybV0gKHdoZW4tbm90IChwcmVkIHgpIGZvcm0pKVxyXG4gICAgICAgICAgIHByZWQtZXhwcnNcclxuICAgICAgICAgICBwcmVkLWZvcm1zKVxyXG4gICAgICAgICAgKGtlZXAgaWRlbnRpdHkpXHJcbiAgICAgICAgICBzZXEpXVxyXG4gICAgICAgIChtYXBcclxuICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgW3AxX180ODk0MCNdXHJcbiAgICAgICAgICAoaWRlbnRpdHlcclxuICAgICAgICAgICB7OnBhdGggcGF0aCwgOnByZWQgcDFfXzQ4OTQwIywgOnZhbCB4LCA6dmlhIHZpYSwgOmluIGlufSkpXHJcbiAgICAgICAgIHByb2JzKSlcclxuICAgICAgIChtYXBcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW1trIHZdXVxyXG4gICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgIChjL29yXHJcbiAgICAgICAgICAgKG5vdCAoY29udGFpbnM/IHJlZyAoa2V5cy0+c3BlY25hbWVzIGspKSlcclxuICAgICAgICAgICAocHZhbGlkPyAoa2V5cy0+c3BlY25hbWVzIGspIHYgaykpXHJcbiAgICAgICAgICAoZXhwbGFpbi0xXHJcbiAgICAgICAgICAgKGtleXMtPnNwZWNuYW1lcyBrKVxyXG4gICAgICAgICAgIChrZXlzLT5zcGVjbmFtZXMgaylcclxuICAgICAgICAgICAoY29uaiBwYXRoIGspXHJcbiAgICAgICAgICAgdmlhXHJcbiAgICAgICAgICAgKGNvbmogaW4gaylcclxuICAgICAgICAgICB2KSkpXHJcbiAgICAgICAgKHNlcSB4KSkpKSkpXHJcbiAgIChnZW4qXHJcbiAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgKGlmXHJcbiAgICAgZ2ZuXHJcbiAgICAgKGdmbilcclxuICAgICAobGV0XHJcbiAgICAgIFtybWFwXHJcbiAgICAgICAoaW5jayBybWFwIGlkKVxyXG4gICAgICAgcmdlblxyXG4gICAgICAgKGZuIFtrIHNdIFtrIChnZW5zdWIgcyBvdmVycmlkZXMgKGNvbmogcGF0aCBrKSBybWFwIGspXSlcclxuICAgICAgIG9nZW5cclxuICAgICAgIChmblxyXG4gICAgICAgIFtrIHNdXHJcbiAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgIChyZWN1ci1saW1pdD8gcm1hcCBpZCBwYXRoIGspXHJcbiAgICAgICAgIFtrIChnZW4vZGVsYXkgKGdlbnN1YiBzIG92ZXJyaWRlcyAoY29uaiBwYXRoIGspIHJtYXAgaykpXSkpXHJcbiAgICAgICByZXFzXHJcbiAgICAgICAobWFwIHJnZW4gcmVxLWtleXMgcmVxLXNwZWNzKVxyXG4gICAgICAgb3B0c1xyXG4gICAgICAgKHJlbW92ZSBuaWw/IChtYXAgb2dlbiBvcHQta2V5cyBvcHQtc3BlY3MpKV1cclxuICAgICAgKHdoZW5cclxuICAgICAgIChldmVyeT8gaWRlbnRpdHkgKGNvbmNhdCAobWFwIHNlY29uZCByZXFzKSAobWFwIHNlY29uZCBvcHRzKSkpXHJcbiAgICAgICAoZ2VuL2JpbmRcclxuICAgICAgICAoZ2VuL3R1cGxlXHJcbiAgICAgICAgIChhbmQtay1nZW4gcmVxKVxyXG4gICAgICAgICAob3Itay1nZW4gb3B0KVxyXG4gICAgICAgICAoYW5kLWstZ2VuIHJlcS11bilcclxuICAgICAgICAgKG9yLWstZ2VuIG9wdC11bikpXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtbcmVxLWtzIG9wdC1rcyByZXEtdW4ta3Mgb3B0LXVuLWtzXV1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3Frc1xyXG4gICAgICAgICAgIChmbGF0dGVuIChjb25jYXQgcmVxLWtzIG9wdC1rcykpXHJcbiAgICAgICAgICAgdW5xa3NcclxuICAgICAgICAgICAobWFwXHJcbiAgICAgICAgICAgIChjb21wIGtleXdvcmQgbmFtZSlcclxuICAgICAgICAgICAgKGZsYXR0ZW4gKGNvbmNhdCByZXEtdW4ta3Mgb3B0LXVuLWtzKSkpXVxyXG4gICAgICAgICAgKC0+PlxyXG4gICAgICAgICAgIChpbnRvIHJlcXMgb3B0cylcclxuICAgICAgICAgICAoZmlsdGVyXHJcbiAgICAgICAgICAgIChmbipcclxuICAgICAgICAgICAgIFtwMV9fNDg5NDEjXVxyXG4gICAgICAgICAgICAgKChzZXQgKGNvbmNhdCBxa3MgdW5xa3MpKSAoZmlyc3QgcDFfXzQ4OTQxIykpKSlcclxuICAgICAgICAgICAoYXBwbHkgY29uY2F0KVxyXG4gICAgICAgICAgIChhcHBseSBnZW4vaGFzaC1tYXApKSkpKSkpKSlcclxuICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChtYXAtc3BlYy1pbXBsIChhc3NvYyBhcmdtIDpnZm4gZ2ZuKSkpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNvbnNcclxuICAgICAnY2xqcy5zcGVjLmFscGhhL2tleXNcclxuICAgICAoY29uZC0+XHJcbiAgICAgIFtdXHJcbiAgICAgIHJlcVxyXG4gICAgICAoY29uaiA6cmVxIHJlcSlcclxuICAgICAgb3B0XHJcbiAgICAgIChjb25qIDpvcHQgb3B0KVxyXG4gICAgICByZXEtdW5cclxuICAgICAgKGNvbmogOnJlcS11biByZXEtdW4pXHJcbiAgICAgIG9wdC11blxyXG4gICAgICAoY29uaiA6b3B0LXVuIG9wdC11bikpKSkpKSlcclxuIn0gezpzeW0gZXhwbGFpbiwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB0aGF0IGZhaWxzIHRvIGNvbmZvcm0sIHByaW50cyBhbiBleHBsYW5hdGlvbiB0byAqb3V0Ki4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluXHJcbiBcIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB0aGF0IGZhaWxzIHRvIGNvbmZvcm0sIHByaW50cyBhbiBleHBsYW5hdGlvbiB0byAqb3V0Ki5cIlxyXG4gW3NwZWMgeF1cclxuIChleHBsYWluLW91dCAoZXhwbGFpbi1kYXRhIHNwZWMgeCkpKVxyXG4ifSB7OnN5bSB3aXRoLWdlbiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBnZm5dKX0sIDpwcm90b2NvbCBTcGVjfSB7OnN5bSBvci1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ29yJyIsIDphcmdsaXN0cyAoW2tleXMgZm9ybXMgcHJlZHMgZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gb3Itc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnb3InXCJcclxuIFtrZXlzIGZvcm1zIHByZWRzIGdmbl1cclxuIChsZXRcclxuICBbaWRcclxuICAgKHJhbmRvbS11dWlkKVxyXG4gICBrcHNcclxuICAgKHppcG1hcCBrZXlzIHByZWRzKVxyXG4gICBzcGVjc1xyXG4gICAoZGVsYXkgKG1hcHYgc3BlY2l6ZSBwcmVkcyBmb3JtcykpXHJcbiAgIGNmb3JtXHJcbiAgIChjYXNlXHJcbiAgICAoY291bnQgcHJlZHMpXHJcbiAgICAyXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3MgcmV0IChjb25mb3JtKiAoc3BlY3MgMCkgeCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgIChsZXRcclxuICAgICAgICBbcmV0IChjb25mb3JtKiAoc3BlY3MgMSkgeCldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAodGFnZ2VkLXJldCAoa2V5cyAxKSByZXQpKSlcclxuICAgICAgICh0YWdnZWQtcmV0IChrZXlzIDApIHJldCkpKSlcclxuICAgIDNcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjcyByZXQgKGNvbmZvcm0qIChzcGVjcyAwKSB4KV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtyZXQgKGNvbmZvcm0qIChzcGVjcyAxKSB4KV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3JldCAoY29uZm9ybSogKHNwZWNzIDIpIHgpXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgICAodGFnZ2VkLXJldCAoa2V5cyAyKSByZXQpKSlcclxuICAgICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgMSkgcmV0KSkpXHJcbiAgICAgICAodGFnZ2VkLXJldCAoa2V5cyAwKSByZXQpKSkpXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3NdXHJcbiAgICAgIChsb29wXHJcbiAgICAgICBbaSAwXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKDwgaSAoY291bnQgc3BlY3MpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3NwZWMgKHNwZWNzIGkpXVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbcmV0IChjb25mb3JtKiBzcGVjIHgpXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgICAgICAocmVjdXIgKGluYyBpKSlcclxuICAgICAgICAgICAodGFnZ2VkLXJldCAoa2V5cyBpKSByZXQpKSkpXHJcbiAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSkpKSldXHJcbiAgKHJlaWZ5XHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSogW18geF0gKGNmb3JtIHgpKVxyXG4gICAodW5mb3JtKiBbXyBbayB4XV0gKHVuZm9ybSAoa3BzIGspIHgpKVxyXG4gICAoZXhwbGFpbipcclxuICAgIFt0aGlzIHBhdGggdmlhIGluIHhdXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAocHZhbGlkPyB0aGlzIHgpXHJcbiAgICAgKGFwcGx5XHJcbiAgICAgIGNvbmNhdFxyXG4gICAgICAobWFwXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbayBmb3JtIHByZWRdXHJcbiAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgIChwdmFsaWQ/IHByZWQgeClcclxuICAgICAgICAgKGV4cGxhaW4tMSBmb3JtIHByZWQgKGNvbmogcGF0aCBrKSB2aWEgaW4geCkpKVxyXG4gICAgICAga2V5c1xyXG4gICAgICAgZm9ybXNcclxuICAgICAgIHByZWRzKSkpKVxyXG4gICAoZ2VuKlxyXG4gICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgIChpZlxyXG4gICAgIGdmblxyXG4gICAgIChnZm4pXHJcbiAgICAgKGxldFxyXG4gICAgICBbZ2VuXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbayBwIGZdXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbcm1hcCAoaW5jayBybWFwIGlkKV1cclxuICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAocmVjdXItbGltaXQ/IHJtYXAgaWQgcGF0aCBrKVxyXG4gICAgICAgICAgKGdlbi9kZWxheSAoZ2Vuc3ViIHAgb3ZlcnJpZGVzIChjb25qIHBhdGggaykgcm1hcCBmKSkpKSlcclxuICAgICAgIGdzXHJcbiAgICAgICAocmVtb3ZlIG5pbD8gKG1hcCBnZW4ga2V5cyBwcmVkcyBmb3JtcykpXVxyXG4gICAgICAod2hlbi1ub3QgKGVtcHR5PyBncykgKGdlbi9vbmUtb2YgZ3MpKSkpKVxyXG4gICAod2l0aC1nZW4qIFtfIGdmbl0gKG9yLXNwZWMtaW1wbCBrZXlzIGZvcm1zIHByZWRzIGdmbikpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9vcilcclxuICAgICAgIChtYXBjYXQgdmVjdG9yIGtleXMgZm9ybXMpKSkpKSkpKVxyXG4ifSB7OnN5bSAqZnNwZWMtaXRlcmF0aW9ucyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqZnNwZWMtaXRlcmF0aW9ucypcclxuIFwiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBhbm9ueW1vdXMgZm4gc3BlY2lmaWVkIGJ5IGZzcGVjIHdpbGwgYmUgKGdlbmVyYXRpdmVseSkgdGVzdGVkIGR1cmluZyBjb25mb3JtXCJcclxuIDIxKVxyXG4ifSB7OnN5bSBTcGVjLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoY29uZm9ybSogZGVzY3JpYmUqIGV4cGxhaW4qIGdlbiogdW5mb3JtKiB3aXRoLWdlbiopfSB7OnN5bSB1bmZvcm0sIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgY3JlYXRlZCBieSBvciBjb21wbGlhbnQgd2l0aCBhIGNhbGwgdG9cbiAgJ2NvbmZvcm0nIHdpdGggdGhlIHNhbWUgc3BlYywgcmV0dXJucyBhIHZhbHVlIHdpdGggYWxsIGNvbmZvcm1cbiAgIGRlc3RydWN0dXJpbmcgdW5kb25lLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuZm9ybVxyXG4gXCJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgY3JlYXRlZCBieSBvciBjb21wbGlhbnQgd2l0aCBhIGNhbGwgdG9cXG4gICdjb25mb3JtJyB3aXRoIHRoZSBzYW1lIHNwZWMsIHJldHVybnMgYSB2YWx1ZSB3aXRoIGFsbCBjb25mb3JtXFxuICAgZGVzdHJ1Y3R1cmluZyB1bmRvbmUuXCJcclxuIFtzcGVjIHhdXHJcbiAodW5mb3JtKiAoc3BlY2l6ZSBzcGVjKSB4KSlcclxuIn0gezpzeW0gdmFsaWQ/LCA6bWV0YSB7OmRvYyAiSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIHdoZW4geCBpcyB2YWxpZCBmb3Igc3BlYy4iLCA6YXJnbGlzdHMgW1tzcGVjIHhdIFtzcGVjIHggZm9ybV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbGlkP1xyXG4gXCJIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHZhbGlkIGZvciBzcGVjLlwiXHJcbiAoW3NwZWMgeF1cclxuICAobGV0IFtzcGVjIChzcGVjaXplIHNwZWMpXSAobm90IChpbnZhbGlkPyAoY29uZm9ybSogc3BlYyB4KSkpKSlcclxuIChbc3BlYyB4IGZvcm1dXHJcbiAgKGxldCBbc3BlYyAoc3BlY2l6ZSBzcGVjIGZvcm0pXSAobm90IChpbnZhbGlkPyAoY29uZm9ybSogc3BlYyB4KSkpKSkpXHJcbiJ9IHs6c3ltIGdlbiwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYywgcmV0dXJucyB0aGUgZ2VuZXJhdG9yIGZvciBpdCwgb3IgdGhyb3dzIGlmIG5vbmUgY2FuXG4gIGJlIGNvbnN0cnVjdGVkLiBPcHRpb25hbGx5IGFuIG92ZXJyaWRlcyBtYXAgY2FuIGJlIHByb3ZpZGVkIHdoaWNoXG4gIHNob3VsZCBtYXAgc3BlYyBuYW1lcyBvciBwYXRocyAodmVjdG9ycyBvZiBrZXl3b3JkcykgdG8gbm8tYXJnXG4gIGdlbmVyYXRvci1jcmVhdGluZyBmbnMuIFRoZXNlIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBnZW5lcmF0b3JzIGF0IHRob3NlXG4gIG5hbWVzL3BhdGhzLiBOb3RlIHRoYXQgcGFyZW50IGdlbmVyYXRvciAoaW4gdGhlIHNwZWMgb3Igb3ZlcnJpZGVzXG4gIG1hcCkgd2lsbCBzdXBlcnNlZGUgdGhvc2Ugb2YgYW55IHN1YnRyZWVzLiBBIGdlbmVyYXRvciBmb3IgYSByZWdleFxuICBvcCBtdXN0IGFsd2F5cyByZXR1cm4gYSBzZXF1ZW50aWFsIGNvbGxlY3Rpb24gKGkuZS4gYSBnZW5lcmF0b3IgZm9yXG4gIHMvPyBzaG91bGQgcmV0dXJuIGVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZS92ZWN0b3Igb3IgYVxuICBzZXF1ZW5jZS92ZWN0b3Igd2l0aCBvbmUgaXRlbSBpbiBpdCkiLCA6YXJnbGlzdHMgW1tzcGVjXSBbc3BlYyBvdmVycmlkZXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZW5cclxuIFwiR2l2ZW4gYSBzcGVjLCByZXR1cm5zIHRoZSBnZW5lcmF0b3IgZm9yIGl0LCBvciB0aHJvd3MgaWYgbm9uZSBjYW5cXG4gIGJlIGNvbnN0cnVjdGVkLiBPcHRpb25hbGx5IGFuIG92ZXJyaWRlcyBtYXAgY2FuIGJlIHByb3ZpZGVkIHdoaWNoXFxuICBzaG91bGQgbWFwIHNwZWMgbmFtZXMgb3IgcGF0aHMgKHZlY3RvcnMgb2Yga2V5d29yZHMpIHRvIG5vLWFyZ1xcbiAgZ2VuZXJhdG9yLWNyZWF0aW5nIGZucy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGdlbmVyYXRvcnMgYXQgdGhvc2VcXG4gIG5hbWVzL3BhdGhzLiBOb3RlIHRoYXQgcGFyZW50IGdlbmVyYXRvciAoaW4gdGhlIHNwZWMgb3Igb3ZlcnJpZGVzXFxuICBtYXApIHdpbGwgc3VwZXJzZWRlIHRob3NlIG9mIGFueSBzdWJ0cmVlcy4gQSBnZW5lcmF0b3IgZm9yIGEgcmVnZXhcXG4gIG9wIG11c3QgYWx3YXlzIHJldHVybiBhIHNlcXVlbnRpYWwgY29sbGVjdGlvbiAoaS5lLiBhIGdlbmVyYXRvciBmb3JcXG4gIHMvPyBzaG91bGQgcmV0dXJuIGVpdGhlciBhbiBlbXB0eSBzZXF1ZW5jZS92ZWN0b3Igb3IgYVxcbiAgc2VxdWVuY2UvdmVjdG9yIHdpdGggb25lIGl0ZW0gaW4gaXQpXCJcclxuIChbc3BlY10gKGdlbiBzcGVjIG5pbCkpXHJcbiAoW3NwZWMgb3ZlcnJpZGVzXVxyXG4gIChnZW5zdWJcclxuICAgc3BlY1xyXG4gICBvdmVycmlkZXNcclxuICAgW11cclxuICAgezpjbGpzLnNwZWMuYWxwaGEvcmVjdXJzaW9uLWxpbWl0ICpyZWN1cnNpb24tbGltaXQqfVxyXG4gICBzcGVjKSkpXHJcbiJ9IHs6c3ltIG5vbmNvbmZvcm1pbmcsIDptZXRhIHs6ZG9jICJ0YWtlcyBhIHNwZWMgYW5kIHJldHVybnMgYSBzcGVjIHRoYXQgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgZXhjZXB0XG4gICdjb25mb3JtJyByZXR1cm5zIHRoZSBvcmlnaW5hbCAobm90IHRoZSBjb25mb3JtZWQpIHZhbHVlLiBOb3RlLCB3aWxsIHNwZWNpemUgcmVnZXggb3BzLiIsIDphcmdsaXN0cyAoW3NwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub25jb25mb3JtaW5nXHJcbiBcInRha2VzIGEgc3BlYyBhbmQgcmV0dXJucyBhIHNwZWMgdGhhdCBoYXMgdGhlIHNhbWUgcHJvcGVydGllcyBleGNlcHRcXG4gICdjb25mb3JtJyByZXR1cm5zIHRoZSBvcmlnaW5hbCAobm90IHRoZSBjb25mb3JtZWQpIHZhbHVlLiBOb3RlLCB3aWxsIHNwZWNpemUgcmVnZXggb3BzLlwiXHJcbiBbc3BlY11cclxuIChsZXRcclxuICBbc3BlYyAoZGVsYXkgKHNwZWNpemUgc3BlYykpXVxyXG4gIChyZWlmeVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qXHJcbiAgICBbXyB4XVxyXG4gICAgKGxldFxyXG4gICAgIFtyZXQgKGNvbmZvcm0qIEBzcGVjIHgpXVxyXG4gICAgIChpZiAoaW52YWxpZD8gcmV0KSA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQgeCkpKVxyXG4gICAodW5mb3JtKiBbXyB4XSAodW5mb3JtKiBAc3BlYyB4KSlcclxuICAgKGV4cGxhaW4qIFtfIHBhdGggdmlhIGluIHhdIChleHBsYWluKiBAc3BlYyBwYXRoIHZpYSBpbiB4KSlcclxuICAgKGdlbiogW18gb3ZlcnJpZGVzIHBhdGggcm1hcF0gKGdlbiogQHNwZWMgb3ZlcnJpZGVzIHBhdGggcm1hcCkpXHJcbiAgICh3aXRoLWdlbiogW18gZ2ZuXSAobm9uY29uZm9ybWluZyAod2l0aC1nZW4qIEBzcGVjIGdmbikpKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvbm9uY29uZm9ybWluZylcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAoZGVzY3JpYmUqIEBzcGVjKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIHVuZm9ybSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyB5XSl9LCA6cHJvdG9jb2wgU3BlY30gezpzeW0gYWJicmV2LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhYmJyZXZcclxuIFtmb3JtXVxyXG4gKGNvbmRcclxuICAoc2VxPyBmb3JtKVxyXG4gICh3YWxrL3Bvc3R3YWxrXHJcbiAgIChmblxyXG4gICAgW2Zvcm1dXHJcbiAgICAoY29uZFxyXG4gICAgIChjL2FuZCAoc3ltYm9sPyBmb3JtKSAobmFtZXNwYWNlIGZvcm0pKVxyXG4gICAgICgtPiBmb3JtIG5hbWUgc3ltYm9sKVxyXG4gICAgIChjL2FuZCAoc2VxPyBmb3JtKSAoPSAnZm4gKGZpcnN0IGZvcm0pKSAoPSAnWyVdIChzZWNvbmQgZm9ybSkpKVxyXG4gICAgIChsYXN0IGZvcm0pXHJcbiAgICAgOmVsc2VcclxuICAgICBmb3JtKSlcclxuICAgZm9ybSlcclxuICAoYy9hbmQgKHN5bWJvbD8gZm9ybSkgKG5hbWVzcGFjZSBmb3JtKSlcclxuICAoLT4gZm9ybSBuYW1lIHN5bWJvbClcclxuICA6ZWxzZVxyXG4gIGZvcm0pKVxyXG4ifSB7OnN5bSByZWdleD8sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHggaWYgeCBpcyBhIChjbGpzLnNwZWMuYWxwaGEpIHJlZ2V4IG9wLCBlbHNlIGxvZ2ljYWwgZmFsc2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnZXg/XHJcbiBcInJldHVybnMgeCBpZiB4IGlzIGEgKGNsanMuc3BlYy5hbHBoYSkgcmVnZXggb3AsIGVsc2UgbG9naWNhbCBmYWxzZVwiXHJcbiBbeF1cclxuIChjL2FuZCAoOmNsanMuc3BlYy5hbHBoYS9vcCB4KSB4KSlcclxuIn0gezpzeW0gaW50LWluLXJhbmdlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHN0YXJ0IDw9IHZhbCwgdmFsIDwgZW5kIGFuZCB2YWwgaXMgYSBmaXhlZFxuICBwcmVjaXNpb24gaW50ZWdlci4iLCA6YXJnbGlzdHMgKFtzdGFydCBlbmQgdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50LWluLXJhbmdlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiBzdGFydCA8PSB2YWwsIHZhbCA8IGVuZCBhbmQgdmFsIGlzIGEgZml4ZWRcXG4gIHByZWNpc2lvbiBpbnRlZ2VyLlwiXHJcbiBbc3RhcnQgZW5kIHZhbF1cclxuIChjb25kXHJcbiAgKGludGVnZXI/IHZhbClcclxuICAoYy9hbmQgKDw9IHN0YXJ0IHZhbCkgKDwgdmFsIGVuZCkpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguTG9uZyB2YWwpXHJcbiAgKGMvYW5kICgubGVzc1RoYW5PckVxdWFsIHN0YXJ0IHZhbCkgKC5sZXNzVGhhbiB2YWwgZW5kKSlcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5JbnRlZ2VyIHZhbClcclxuICAoYy9hbmQgKC5sZXNzVGhhbk9yRXF1YWwgc3RhcnQgdmFsKSAoLmxlc3NUaGFuIHZhbCBlbmQpKVxyXG4gIDplbHNlXHJcbiAgZmFsc2UpKVxyXG4ifSB7OnN5bSBzcGVjPywgOm1ldGEgezpkb2MgInJldHVybnMgeCBpZiB4IGlzIGEgc3BlYyBvYmplY3QsIGVsc2UgbG9naWNhbCBmYWxzZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGVjP1xyXG4gXCJyZXR1cm5zIHggaWYgeCBpcyBhIHNwZWMgb2JqZWN0LCBlbHNlIGxvZ2ljYWwgZmFsc2VcIlxyXG4gW3hdXHJcbiAod2hlbiAoaW1wbGVtZW50cz8gU3BlYyB4KSB4KSlcclxuIn0gezpzeW0gcmVnaXN0cnksIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRoZSByZWdpc3RyeSBtYXAsIHByZWZlciAnZ2V0LXNwZWMnIHRvIGxvb2t1cCBhIHNwZWMgYnkgbmFtZSIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2lzdHJ5XHJcbiBcInJldHVybnMgdGhlIHJlZ2lzdHJ5IG1hcCwgcHJlZmVyICdnZXQtc3BlYycgdG8gbG9va3VwIGEgc3BlYyBieSBuYW1lXCJcclxuIFtdXHJcbiBAcmVnaXN0cnktcmVmKVxyXG4ifSB7OnN5bSByZXAraW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnKyciLCA6YXJnbGlzdHMgKFtmb3JtIHBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXAraW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJysnXCJcclxuIFtmb3JtIHBdXHJcbiAocGNhdCpcclxuICB7OnBzIFtwIChyZXAqIHAgcCBbXSB0cnVlIGZvcm0pXSxcclxuICAgOmZvcm1zXHJcbiAgIChjbG9qdXJlLmNvcmUvdmVjXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBmb3JtKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS8qKVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBmb3JtKSkpKSkpKSkpLFxyXG4gICA6cmV0IFtdLFxyXG4gICA6cmVwKyBmb3JtfSkpXHJcbiJ9IHs6c3ltIGV4ZXJjaXNlLCA6bWV0YSB7OmRvYyAiZ2VuZXJhdGVzIGEgbnVtYmVyIChkZWZhdWx0IDEwKSBvZiB2YWx1ZXMgY29tcGF0aWJsZSB3aXRoIHNwZWMgYW5kIG1hcHMgY29uZm9ybSBvdmVyIHRoZW0sXG4gIHJldHVybmluZyBhIHNlcXVlbmNlIG9mIFt2YWwgY29uZm9ybWVkLXZhbF0gdHVwbGVzLiBPcHRpb25hbGx5IHRha2VzXG4gIGEgZ2VuZXJhdG9yIG92ZXJyaWRlcyBtYXAgYXMgcGVyIGdlbiIsIDphcmdsaXN0cyBbW3NwZWNdIFtzcGVjIG5dIFtzcGVjIG4gb3ZlcnJpZGVzXV19LCA6c291cmNlICIoZGVmblxyXG4gZXhlcmNpc2VcclxuIFwiZ2VuZXJhdGVzIGEgbnVtYmVyIChkZWZhdWx0IDEwKSBvZiB2YWx1ZXMgY29tcGF0aWJsZSB3aXRoIHNwZWMgYW5kIG1hcHMgY29uZm9ybSBvdmVyIHRoZW0sXFxuICByZXR1cm5pbmcgYSBzZXF1ZW5jZSBvZiBbdmFsIGNvbmZvcm1lZC12YWxdIHR1cGxlcy4gT3B0aW9uYWxseSB0YWtlc1xcbiAgYSBnZW5lcmF0b3Igb3ZlcnJpZGVzIG1hcCBhcyBwZXIgZ2VuXCJcclxuIChbc3BlY10gKGV4ZXJjaXNlIHNwZWMgMTApKVxyXG4gKFtzcGVjIG5dIChleGVyY2lzZSBzcGVjIG4gbmlsKSlcclxuIChbc3BlYyBuIG92ZXJyaWRlc11cclxuICAobWFwXHJcbiAgIChmbiogW3AxX180ODk3MiNdICh2ZWN0b3IgcDFfXzQ4OTcyIyAoY29uZm9ybSBzcGVjIHAxX180ODk3MiMpKSlcclxuICAgKGdlbi9zYW1wbGUgKGdlbiBzcGVjIG92ZXJyaWRlcykgbikpKSlcclxuIn0gezpzeW0gZXhwbGFpbi1kYXRhLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHggd2hpY2ggb3VnaHQgdG8gY29uZm9ybSwgcmV0dXJucyBuaWwgaWYgeFxuICBjb25mb3JtcywgZWxzZSBhIG1hcCB3aXRoIGF0IGxlYXN0IHRoZSBrZXkgOjpwcm9ibGVtcyB3aG9zZSB2YWx1ZSBpc1xuICBhIGNvbGxlY3Rpb24gb2YgcHJvYmxlbS1tYXBzLCB3aGVyZSBwcm9ibGVtLW1hcCBoYXMgYXQgbGVhc3QgOnBhdGggOnByZWQgYW5kIDp2YWxcbiAga2V5cyBkZXNjcmliaW5nIHRoZSBwcmVkaWNhdGUgYW5kIHRoZSB2YWx1ZSB0aGF0IGZhaWxlZCBhdCB0aGF0XG4gIHBhdGguIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1kYXRhXHJcbiBcIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB4IHdoaWNoIG91Z2h0IHRvIGNvbmZvcm0sIHJldHVybnMgbmlsIGlmIHhcXG4gIGNvbmZvcm1zLCBlbHNlIGEgbWFwIHdpdGggYXQgbGVhc3QgdGhlIGtleSA6OnByb2JsZW1zIHdob3NlIHZhbHVlIGlzXFxuICBhIGNvbGxlY3Rpb24gb2YgcHJvYmxlbS1tYXBzLCB3aGVyZSBwcm9ibGVtLW1hcCBoYXMgYXQgbGVhc3QgOnBhdGggOnByZWQgYW5kIDp2YWxcXG4gIGtleXMgZGVzY3JpYmluZyB0aGUgcHJlZGljYXRlIGFuZCB0aGUgdmFsdWUgdGhhdCBmYWlsZWQgYXQgdGhhdFxcbiAgcGF0aC5cIlxyXG4gW3NwZWMgeF1cclxuIChleHBsYWluLWRhdGEqXHJcbiAgc3BlY1xyXG4gIFtdXHJcbiAgKGlmLWxldCBbbmFtZSAoc3BlYy1uYW1lIHNwZWMpXSBbbmFtZV0gW10pXHJcbiAgW11cclxuICB4KSlcclxuIn0gezpzeW0gdHVwbGUtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAndHVwbGUnIiwgOmFyZ2xpc3RzIFtbZm9ybXMgcHJlZHNdIFtmb3JtcyBwcmVkcyBnZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0dXBsZS1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAndHVwbGUnXCJcclxuIChbZm9ybXMgcHJlZHNdICh0dXBsZS1pbXBsIGZvcm1zIHByZWRzIG5pbCkpXHJcbiAoW2Zvcm1zIHByZWRzIGdmbl1cclxuICAobGV0XHJcbiAgIFtzcGVjcyAoZGVsYXkgKG1hcHYgc3BlY2l6ZSBwcmVkcyBmb3JtcykpIGNudCAoY291bnQgcHJlZHMpXVxyXG4gICAocmVpZnlcclxuICAgIFNwZWNpemVcclxuICAgIChzcGVjaXplKiBbc10gcylcclxuICAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICAgU3BlY1xyXG4gICAgKGNvbmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3NdXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgIChjL2FuZCAodmVjdG9yPyB4KSAoPSAoY291bnQgeCkgY250KSlcclxuICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgKGxvb3BcclxuICAgICAgICBbcmV0IHggaSAwXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoPSBpIGNudClcclxuICAgICAgICAgcmV0XHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt2ICh4IGkpIGN2IChjb25mb3JtKiAoc3BlY3MgaSkgdildXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoaW52YWxpZD8gY3YpXHJcbiAgICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgIChpZiAoaWRlbnRpY2FsPyBjdiB2KSByZXQgKGFzc29jIHJldCBpIGN2KSlcclxuICAgICAgICAgICAgKGluYyBpKSkpKSkpKSkpXHJcbiAgICAodW5mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGFzc2VydCAoYy9hbmQgKHZlY3Rvcj8geCkgKD0gKGNvdW50IHgpIChjb3VudCBwcmVkcykpKSlcclxuICAgICAobG9vcFxyXG4gICAgICBbcmV0IHggaSAwXVxyXG4gICAgICAoaWZcclxuICAgICAgICg9IGkgKGNvdW50IHgpKVxyXG4gICAgICAgcmV0XHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW2N2ICh4IGkpIHYgKHVuZm9ybSAocHJlZHMgaSkgY3YpXVxyXG4gICAgICAgIChyZWN1ciAoaWYgKGlkZW50aWNhbD8gY3YgdikgcmV0IChhc3NvYyByZXQgaSB2KSkgKGluYyBpKSkpKSkpXHJcbiAgICAoZXhwbGFpbipcclxuICAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgIChjb25kXHJcbiAgICAgIChub3QgKHZlY3Rvcj8geCkpXHJcbiAgICAgIFt7OnBhdGggcGF0aCxcclxuICAgICAgICA6cHJlZCAnY2xvanVyZS5jb3JlL3ZlY3Rvcj8sXHJcbiAgICAgICAgOnZhbCB4LFxyXG4gICAgICAgIDp2aWEgdmlhLFxyXG4gICAgICAgIDppbiBpbn1dXHJcbiAgICAgIChub3Q9IChjb3VudCB4KSAoY291bnQgcHJlZHMpKVxyXG4gICAgICBbezpwYXRoIHBhdGgsXHJcbiAgICAgICAgOnByZWRcclxuICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlLz0pXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvY291bnQpXHJcbiAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnJSkpKSkpXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChjb3VudCBwcmVkcykpKSkpLFxyXG4gICAgICAgIDp2YWwgeCxcclxuICAgICAgICA6dmlhIHZpYSxcclxuICAgICAgICA6aW4gaW59XVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICAoYXBwbHlcclxuICAgICAgIGNvbmNhdFxyXG4gICAgICAgKG1hcFxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbaSBmb3JtIHByZWRdXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFt2ICh4IGkpXVxyXG4gICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAgKHB2YWxpZD8gcHJlZCB2KVxyXG4gICAgICAgICAgIChleHBsYWluLTEgZm9ybSBwcmVkIChjb25qIHBhdGggaSkgdmlhIChjb25qIGluIGkpIHYpKSkpXHJcbiAgICAgICAgKHJhbmdlIChjb3VudCBwcmVkcykpXHJcbiAgICAgICAgZm9ybXNcclxuICAgICAgICBwcmVkcykpKSlcclxuICAgIChnZW4qXHJcbiAgICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgICAoaWZcclxuICAgICAgZ2ZuXHJcbiAgICAgIChnZm4pXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtnZW5cclxuICAgICAgICAoZm4gW2kgcCBmXSAoZ2Vuc3ViIHAgb3ZlcnJpZGVzIChjb25qIHBhdGggaSkgcm1hcCBmKSlcclxuICAgICAgICBnc1xyXG4gICAgICAgIChtYXAgZ2VuIChyYW5nZSAoY291bnQgcHJlZHMpKSBwcmVkcyBmb3JtcyldXHJcbiAgICAgICAod2hlbiAoZXZlcnk/IGlkZW50aXR5IGdzKSAoYXBwbHkgZ2VuL3R1cGxlIGdzKSkpKSlcclxuICAgICh3aXRoLWdlbiogW18gZ2ZuXSAodHVwbGUtaW1wbCBmb3JtcyBwcmVkcyBnZm4pKVxyXG4gICAgKGRlc2NyaWJlKlxyXG4gICAgIFtfXVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvdHVwbGUpXHJcbiAgICAgICAgZm9ybXMpKSkpKSkpKVxyXG4ifSB7OnN5bSBtdWx0aS1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ211bHRpLXNwZWMnIiwgOmFyZ2xpc3RzIFtbZm9ybSBtbXZhciByZXRhZ10gW2Zvcm0gbW12YXIgcmV0YWcgZ2ZuXV19LCA6c291cmNlICIoZGVmblxyXG4gbXVsdGktc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbXVsdGktc3BlYydcIlxyXG4gKFtmb3JtIG1tdmFyIHJldGFnXSAobXVsdGktc3BlYy1pbXBsIGZvcm0gbW12YXIgcmV0YWcgbmlsKSlcclxuIChbZm9ybSBtbXZhciByZXRhZyBnZm5dXHJcbiAgKGxldFxyXG4gICBbaWRcclxuICAgIChyYW5kb20tdXVpZClcclxuICAgIHByZWR4XHJcbiAgICAoZm4qXHJcbiAgICAgW3AxX180ODk0MiNdXHJcbiAgICAgKGxldFxyXG4gICAgICBbbW0gQG1tdmFyXVxyXG4gICAgICAoYy9hbmRcclxuICAgICAgICgtZ2V0LW1ldGhvZCBtbSAoKC1kaXNwYXRjaC1mbiBtbSkgcDFfXzQ4OTQyIykpXHJcbiAgICAgICAobW0gcDFfXzQ4OTQyIykpKSlcclxuICAgIGR2YWxcclxuICAgIChmbiogW3AxX180ODk0MyNdICgoLWRpc3BhdGNoLWZuIEBtbXZhcikgcDFfXzQ4OTQzIykpXHJcbiAgICB0YWdcclxuICAgIChpZlxyXG4gICAgIChrZXl3b3JkPyByZXRhZylcclxuICAgICAoZm4qIFtwMV9fNDg5NDQjIHAyX180ODk0NSNdIChhc3NvYyBwMV9fNDg5NDQjIHJldGFnIHAyX180ODk0NSMpKVxyXG4gICAgIHJldGFnKV1cclxuICAgKHJlaWZ5XHJcbiAgICBTcGVjaXplXHJcbiAgICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgIFNwZWNcclxuICAgIChjb25mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbcHJlZCAocHJlZHggeCldXHJcbiAgICAgIChkdCBwcmVkIHggZm9ybSlcclxuICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSlcclxuICAgICh1bmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtwcmVkIChwcmVkeCB4KV1cclxuICAgICAgKHVuZm9ybSBwcmVkIHgpXHJcbiAgICAgICh0aHJvd1xyXG4gICAgICAgKGpzL0Vycm9yLlxyXG4gICAgICAgIChzdHJcclxuICAgICAgICAgXCJObyBtZXRob2Qgb2Y6IFwiXHJcbiAgICAgICAgIGZvcm1cclxuICAgICAgICAgXCIgZm9yIGRpc3BhdGNoIHZhbHVlOiBcIlxyXG4gICAgICAgICAoZHZhbCB4KSkpKSkpXHJcbiAgICAoZXhwbGFpbipcclxuICAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgIChsZXRcclxuICAgICAgW2R2IChkdmFsIHgpIHBhdGggKGNvbmogcGF0aCBkdildXHJcbiAgICAgIChpZi1sZXRcclxuICAgICAgIFtwcmVkIChwcmVkeCB4KV1cclxuICAgICAgIChleHBsYWluLTEgZm9ybSBwcmVkIHBhdGggdmlhIGluIHgpXHJcbiAgICAgICBbezpwYXRoIHBhdGgsXHJcbiAgICAgICAgIDpwcmVkIGZvcm0sXHJcbiAgICAgICAgIDp2YWwgeCxcclxuICAgICAgICAgOnJlYXNvbiBcIm5vIG1ldGhvZFwiLFxyXG4gICAgICAgICA6dmlhIHZpYSxcclxuICAgICAgICAgOmluIGlufV0pKSlcclxuICAgIChnZW4qXHJcbiAgICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgICAoaWZcclxuICAgICAgZ2ZuXHJcbiAgICAgIChnZm4pXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtnZW5cclxuICAgICAgICAoZm5cclxuICAgICAgICAgW1trIGZdXVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbcCAoZiBuaWwpXVxyXG4gICAgICAgICAgKGxldFxyXG4gICAgICAgICAgIFtybWFwIChpbmNrIHJtYXAgaWQpXVxyXG4gICAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgICAocmVjdXItbGltaXQ/IHJtYXAgaWQgcGF0aCBrKVxyXG4gICAgICAgICAgICAoZ2VuL2RlbGF5XHJcbiAgICAgICAgICAgICAoZ2VuL2ZtYXBcclxuICAgICAgICAgICAgICAoZm4qIFtwMV9fNDg5NDYjXSAodGFnIHAxX180ODk0NiMgaykpXHJcbiAgICAgICAgICAgICAgKGdlbnN1YlxyXG4gICAgICAgICAgICAgICBwXHJcbiAgICAgICAgICAgICAgIG92ZXJyaWRlc1xyXG4gICAgICAgICAgICAgICAoY29uaiBwYXRoIGspXHJcbiAgICAgICAgICAgICAgIHJtYXBcclxuICAgICAgICAgICAgICAgKGxpc3QgJ21ldGhvZCBmb3JtIGspKSkpKSkpKVxyXG4gICAgICAgIGdzXHJcbiAgICAgICAgKC0+PlxyXG4gICAgICAgICAobWV0aG9kcyBAbW12YXIpXHJcbiAgICAgICAgIChyZW1vdmUgKGZuIFtba11dIChpbnZhbGlkPyBrKSkpXHJcbiAgICAgICAgIChtYXAgZ2VuKVxyXG4gICAgICAgICAocmVtb3ZlIG5pbD8pKV1cclxuICAgICAgICh3aGVuIChldmVyeT8gaWRlbnRpdHkgZ3MpIChnZW4vb25lLW9mIGdzKSkpKSlcclxuICAgICh3aXRoLWdlbiogW18gZ2ZuXSAobXVsdGktc3BlYy1pbXBsIGZvcm0gbW12YXIgcmV0YWcgZ2ZuKSlcclxuICAgIChkZXNjcmliZSpcclxuICAgICBbX11cclxuICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL211bHRpLXNwZWMpXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IGZvcm0pXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IHJldGFnKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGNvbmZvcm0sIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUsIHJldHVybnMgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkIGlmIHZhbHVlIGRvZXNcbiAgbm90IG1hdGNoIHNwZWMsIGVsc2UgdGhlIChwb3NzaWJseSBkZXN0cnVjdHVyZWQpIHZhbHVlLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZvcm1cclxuIFwiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlLCByZXR1cm5zIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCBpZiB2YWx1ZSBkb2VzXFxuICBub3QgbWF0Y2ggc3BlYywgZWxzZSB0aGUgKHBvc3NpYmx5IGRlc3RydWN0dXJlZCkgdmFsdWUuXCJcclxuIFtzcGVjIHhdXHJcbiAoY29uZm9ybSogKHNwZWNpemUgc3BlYykgeCkpXHJcbiJ9IHs6c3ltIGdlbiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBvdmVycmlkZXMgcGF0aCBybWFwXSl9LCA6cHJvdG9jb2wgU3BlY30gezpzeW0gZnNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZnNwZWMnIiwgOmFyZ2xpc3RzIChbYXJnc3BlYyBhZm9ybSByZXRzcGVjIHJmb3JtIGZuc3BlYyBmZm9ybSBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZnNwZWMnXCJcclxuIFthcmdzcGVjIGFmb3JtIHJldHNwZWMgcmZvcm0gZm5zcGVjIGZmb3JtIGdmbl1cclxuIChsZXRcclxuICBbc3BlY3MgezphcmdzIGFyZ3NwZWMsIDpyZXQgcmV0c3BlYywgOmZuIGZuc3BlY31dXHJcbiAgKHJlaWZ5XHJcbiAgIElMb29rdXBcclxuICAgKC1sb29rdXAgW3RoaXMga10gKGdldCBzcGVjcyBrKSlcclxuICAgKC1sb29rdXAgW18gayBub3QtZm91bmRdIChnZXQgc3BlY3MgayBub3QtZm91bmQpKVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qXHJcbiAgICBbXyBmXVxyXG4gICAgKGlmXHJcbiAgICAgKGlmbj8gZilcclxuICAgICAoaWZcclxuICAgICAgKGlkZW50aWNhbD8gZiAodmFsaWRhdGUtZm4gZiBzcGVjcyAqZnNwZWMtaXRlcmF0aW9ucyopKVxyXG4gICAgICBmXHJcbiAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZClcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKVxyXG4gICAodW5mb3JtKiBbXyBmXSBmKVxyXG4gICAoZXhwbGFpbipcclxuICAgIFtfIHBhdGggdmlhIGluIGZdXHJcbiAgICAoaWZcclxuICAgICAoaWZuPyBmKVxyXG4gICAgIChsZXRcclxuICAgICAgW2FyZ3MgKHZhbGlkYXRlLWZuIGYgc3BlY3MgMTAwKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaWRlbnRpY2FsPyBmIGFyZ3MpXHJcbiAgICAgICBuaWxcclxuICAgICAgIChsZXRcclxuICAgICAgICBbcmV0ICh0cnkgKGFwcGx5IGYgYXJncykgKGNhdGNoIGpzL0Vycm9yIHQgdCkpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoaW5zdGFuY2U/IGpzL0Vycm9yIHJldClcclxuICAgICAgICAgW3s6cGF0aCBwYXRoLFxyXG4gICAgICAgICAgIDpwcmVkICcoYXBwbHkgZm4pLFxyXG4gICAgICAgICAgIDp2YWwgYXJncyxcclxuICAgICAgICAgICA6cmVhc29uICguLW1lc3NhZ2UgcmV0KSxcclxuICAgICAgICAgICA6dmlhIHZpYSxcclxuICAgICAgICAgICA6aW4gaW59XVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbY3JldCAoZHQgcmV0c3BlYyByZXQgcmZvcm0pXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGludmFsaWQ/IGNyZXQpXHJcbiAgICAgICAgICAgKGV4cGxhaW4tMSByZm9ybSByZXRzcGVjIChjb25qIHBhdGggOnJldCkgdmlhIGluIHJldClcclxuICAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICBmbnNwZWNcclxuICAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICAgW2NhcmdzIChjb25mb3JtIGFyZ3NwZWMgYXJncyldXHJcbiAgICAgICAgICAgICAoZXhwbGFpbi0xXHJcbiAgICAgICAgICAgICAgZmZvcm1cclxuICAgICAgICAgICAgICBmbnNwZWNcclxuICAgICAgICAgICAgICAoY29uaiBwYXRoIDpmbilcclxuICAgICAgICAgICAgICB2aWFcclxuICAgICAgICAgICAgICBpblxyXG4gICAgICAgICAgICAgIHs6YXJncyBjYXJncywgOnJldCBjcmV0fSkpKSkpKSkpKVxyXG4gICAgIFt7OnBhdGggcGF0aCwgOnByZWQgJ2lmbj8sIDp2YWwgZiwgOnZpYSB2aWEsIDppbiBpbn1dKSlcclxuICAgKGdlbipcclxuICAgIFtfIG92ZXJyaWRlcyBfIF9dXHJcbiAgICAoaWZcclxuICAgICBnZm5cclxuICAgICAoZ2ZuKVxyXG4gICAgIChnZW4vcmV0dXJuXHJcbiAgICAgIChmblxyXG4gICAgICAgWyYgYXJnc11cclxuICAgICAgIChhc3NlcnRcclxuICAgICAgICAocHZhbGlkPyBhcmdzcGVjIGFyZ3MpXHJcbiAgICAgICAgKHdpdGgtb3V0LXN0ciAoZXhwbGFpbiBhcmdzcGVjIGFyZ3MpKSlcclxuICAgICAgIChnZW4vZ2VuZXJhdGUgKGdlbiByZXRzcGVjIG92ZXJyaWRlcykpKSkpKVxyXG4gICAod2l0aC1nZW4qXHJcbiAgICBbXyBnZm5dXHJcbiAgICAoZnNwZWMtaW1wbCBhcmdzcGVjIGFmb3JtIHJldHNwZWMgcmZvcm0gZm5zcGVjIGZmb3JtIGdmbikpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9mc3BlYylcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCA6YXJncylcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBhZm9ybSlcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCA6cmV0KVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IHJmb3JtKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IDpmbilcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCBmZm9ybSkpKSkpKSkpXHJcbiJ9IHs6c3ltICpjb2xsLWNoZWNrLWxpbWl0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpjb2xsLWNoZWNrLWxpbWl0KlxyXG4gXCJUaGUgbnVtYmVyIG9mIGl0ZW1zIHZhbGlkYXRlZCBpbiBhIGNvbGxlY3Rpb24gc3BlYydlZCB3aXRoICdldmVyeSdcIlxyXG4gMTAxKVxyXG4ifSB7OnN5bSBnZXQtc3BlYywgOm1ldGEgezpkb2MgIlJldHVybnMgc3BlYyByZWdpc3RlcmVkIGZvciBrZXl3b3JkL3N5bWJvbC92YXIgaywgb3IgbmlsLiIsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtc3BlY1xyXG4gXCJSZXR1cm5zIHNwZWMgcmVnaXN0ZXJlZCBmb3Iga2V5d29yZC9zeW1ib2wvdmFyIGssIG9yIG5pbC5cIlxyXG4gW2tdXHJcbiAoZ2V0IChyZWdpc3RyeSkgKGlmIChrZXl3b3JkPyBrKSBrICgtPnN5bSBrKSkpKVxyXG4ifSB7OnN5bSBldmVyeS1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdldmVyeScsICdldmVyeS1rdicsICdjb2xsLW9mJyBvciAnbWFwLW9mJyIsIDphcmdsaXN0cyBbW2Zvcm0gcHJlZCBvcHRzXSBbZm9ybSBwcmVkIHtjb25mb3JtLWludG8gOmludG8sIGRlc2NyaWJlLWZvcm0gOmNsanMuc3BlYy5hbHBoYS9kZXNjcmliZSwgOmtleXMgW2tpbmQgOmNsanMuc3BlYy5hbHBoYS9raW5kLWZvcm0gY291bnQgbWF4LWNvdW50IG1pbi1jb3VudCBkaXN0aW5jdCBnZW4tbWF4IDpjbGpzLnNwZWMuYWxwaGEva2ZuIDpjbGpzLnNwZWMuYWxwaGEvY3ByZWQgY29uZm9ybS1rZXlzIDpjbGpzLnNwZWMuYWxwaGEvY29uZm9ybS1hbGxdLCA6b3Ige2dlbi1tYXggMjB9LCA6YXMgb3B0c30gZ2ZuXV19LCA6c291cmNlICIoZGVmblxyXG4gZXZlcnktaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2V2ZXJ5JywgJ2V2ZXJ5LWt2JywgJ2NvbGwtb2YnIG9yICdtYXAtb2YnXCJcclxuIChbZm9ybSBwcmVkIG9wdHNdIChldmVyeS1pbXBsIGZvcm0gcHJlZCBvcHRzIG5pbCkpXHJcbiAoW2Zvcm1cclxuICAgcHJlZFxyXG4gICB7Y29uZm9ybS1pbnRvIDppbnRvLFxyXG4gICAgZGVzY3JpYmUtZm9ybSA6Y2xqcy5zcGVjLmFscGhhL2Rlc2NyaWJlLFxyXG4gICAgOmtleXNcclxuICAgIFtraW5kXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9raW5kLWZvcm1cclxuICAgICBjb3VudFxyXG4gICAgIG1heC1jb3VudFxyXG4gICAgIG1pbi1jb3VudFxyXG4gICAgIGRpc3RpbmN0XHJcbiAgICAgZ2VuLW1heFxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEva2ZuXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9jcHJlZFxyXG4gICAgIGNvbmZvcm0ta2V5c1xyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEvY29uZm9ybS1hbGxdLFxyXG4gICAgOm9yIHtnZW4tbWF4IDIwfSxcclxuICAgIDphcyBvcHRzfVxyXG4gICBnZm5dXHJcbiAgKGxldFxyXG4gICBbZ2VuLWludG9cclxuICAgIChpZiBjb25mb3JtLWludG8gKGVtcHR5IGNvbmZvcm0taW50bykgKGdldCBlbXB0eS1jb2xsIGtpbmQtZm9ybSkpXHJcbiAgICBzcGVjXHJcbiAgICAoZGVsYXkgKHNwZWNpemUgcHJlZCkpXHJcbiAgICBjaGVjaz9cclxuICAgIChmbiogW3AxX180ODk1NyNdICh2YWxpZD8gQHNwZWMgcDFfXzQ4OTU3IykpXHJcbiAgICBrZm5cclxuICAgIChjL29yIGtmbiAoZm4gW2kgdl0gaSkpXHJcbiAgICBhZGRjdlxyXG4gICAgKGZuIFtyZXQgaSB2IGN2XSAoY29uaiByZXQgY3YpKVxyXG4gICAgY2Zuc1xyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGNvbmRcclxuICAgICAgKGMvYW5kXHJcbiAgICAgICAodmVjdG9yPyB4KVxyXG4gICAgICAgKGMvb3IgKG5vdCBjb25mb3JtLWludG8pICh2ZWN0b3I/IGNvbmZvcm0taW50bykpKVxyXG4gICAgICBbaWRlbnRpdHlcclxuICAgICAgIChmbiBbcmV0IGkgdiBjdl0gKGlmIChpZGVudGljYWw/IHYgY3YpIHJldCAoYXNzb2MgcmV0IGkgY3YpKSlcclxuICAgICAgIGlkZW50aXR5XVxyXG4gICAgICAoYy9hbmRcclxuICAgICAgIChtYXA/IHgpXHJcbiAgICAgICAoYy9vciAoYy9hbmQga2luZCAobm90IGNvbmZvcm0taW50bykpIChtYXA/IGNvbmZvcm0taW50bykpKVxyXG4gICAgICBbKGlmIGNvbmZvcm0ta2V5cyBlbXB0eSBpZGVudGl0eSlcclxuICAgICAgIChmblxyXG4gICAgICAgIFtyZXQgaSB2IGN2XVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoYy9hbmQgKGlkZW50aWNhbD8gdiBjdikgKG5vdCBjb25mb3JtLWtleXMpKVxyXG4gICAgICAgICByZXRcclxuICAgICAgICAgKGFzc29jIHJldCAobnRoIChpZiBjb25mb3JtLWtleXMgY3YgdikgMCkgKG50aCBjdiAxKSkpKVxyXG4gICAgICAgaWRlbnRpdHldXHJcbiAgICAgIChjL29yXHJcbiAgICAgICAobGlzdD8gY29uZm9ybS1pbnRvKVxyXG4gICAgICAgKHNlcT8gY29uZm9ybS1pbnRvKVxyXG4gICAgICAgKGMvYW5kIChub3QgY29uZm9ybS1pbnRvKSAoYy9vciAobGlzdD8geCkgKHNlcT8geCkpKSlcclxuICAgICAgW2VtcHR5IGFkZGN2IHJldmVyc2VdXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIFsoZm4qIFtwMV9fNDg5NTgjXSAoZW1wdHkgKGMvb3IgY29uZm9ybS1pbnRvIHAxX180ODk1OCMpKSlcclxuICAgICAgIGFkZGN2XHJcbiAgICAgICBpZGVudGl0eV0pKV1cclxuICAgKHJlaWZ5XHJcbiAgICBTcGVjaXplXHJcbiAgICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgIFNwZWNcclxuICAgIChjb25mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlYyBAc3BlY11cclxuICAgICAgKGNvbmRcclxuICAgICAgIChub3QgKGNwcmVkIHgpKVxyXG4gICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICBjb25mb3JtLWFsbFxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtbaW5pdCBhZGQgY29tcGxldGVdIChjZm5zIHgpXVxyXG4gICAgICAgIChsb29wXHJcbiAgICAgICAgIFtyZXQgKGluaXQgeCkgaSAwIFt2ICYgdnMgOmFzIHZzZXFdIChzZXEgeCldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgdnNlcVxyXG4gICAgICAgICAgKGxldFxyXG4gICAgICAgICAgIFtjdiAoY29uZm9ybSogc3BlYyB2KV1cclxuICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgKGludmFsaWQ/IGN2KVxyXG4gICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgICAgKHJlY3VyIChhZGQgcmV0IGkgdiBjdikgKGluYyBpKSB2cykpKVxyXG4gICAgICAgICAgKGNvbXBsZXRlIHJldCkpKSlcclxuICAgICAgIDplbHNlXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoaW5kZXhlZD8geClcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzdGVwIChtYXggMSAobG9uZyAoLyAoYy9jb3VudCB4KSAqY29sbC1jaGVjay1saW1pdCopKSldXHJcbiAgICAgICAgIChsb29wXHJcbiAgICAgICAgICBbaSAwXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKD49IGkgKGMvY291bnQgeCkpXHJcbiAgICAgICAgICAgeFxyXG4gICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAodmFsaWQ/IHNwZWMgKG50aCB4IGkpKVxyXG4gICAgICAgICAgICAocmVjdXIgKGMvKyBpIHN0ZXApKVxyXG4gICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKSkpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbbGltaXQgKmNvbGwtY2hlY2stbGltaXQqXVxyXG4gICAgICAgICAobG9vcFxyXG4gICAgICAgICAgW2kgMCBbdiAmIHZzIDphcyB2c2VxXSAoc2VxIHgpXVxyXG4gICAgICAgICAgKGNvbmRcclxuICAgICAgICAgICAoYy9vciAobmlsPyB2c2VxKSAoPSBpIGxpbWl0KSlcclxuICAgICAgICAgICB4XHJcbiAgICAgICAgICAgKHZhbGlkPyBzcGVjIHYpXHJcbiAgICAgICAgICAgKHJlY3VyIChpbmMgaSkgdnMpXHJcbiAgICAgICAgICAgOmVsc2VcclxuICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKSkpKSkpXHJcbiAgICAodW5mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGlmXHJcbiAgICAgIGNvbmZvcm0tYWxsXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtzcGVjIEBzcGVjIFtpbml0IGFkZCBjb21wbGV0ZV0gKGNmbnMgeCldXHJcbiAgICAgICAobG9vcFxyXG4gICAgICAgIFtyZXQgKGluaXQgeCkgaSAwIFt2ICYgdnMgOmFzIHZzZXFdIChzZXEgeCldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICg+PSBpIChjL2NvdW50IHgpKVxyXG4gICAgICAgICAoY29tcGxldGUgcmV0KVxyXG4gICAgICAgICAocmVjdXIgKGFkZCByZXQgaSB2ICh1bmZvcm0qIHNwZWMgdikpIChpbmMgaSkgdnMpKSkpXHJcbiAgICAgIHgpKVxyXG4gICAgKGV4cGxhaW4qXHJcbiAgICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgICAoYy9vclxyXG4gICAgICAoY29sbC1wcm9iXHJcbiAgICAgICB4XHJcbiAgICAgICBraW5kXHJcbiAgICAgICBraW5kLWZvcm1cclxuICAgICAgIGRpc3RpbmN0XHJcbiAgICAgICBjb3VudFxyXG4gICAgICAgbWluLWNvdW50XHJcbiAgICAgICBtYXgtY291bnRcclxuICAgICAgIHBhdGhcclxuICAgICAgIHZpYVxyXG4gICAgICAgaW4pXHJcbiAgICAgIChhcHBseVxyXG4gICAgICAgY29uY2F0XHJcbiAgICAgICAoKGlmIGNvbmZvcm0tYWxsIGlkZW50aXR5IChwYXJ0aWFsIHRha2UgKmNvbGwtZXJyb3ItbGltaXQqKSlcclxuICAgICAgICAoa2VlcFxyXG4gICAgICAgICBpZGVudGl0eVxyXG4gICAgICAgICAobWFwXHJcbiAgICAgICAgICAoZm5cclxuICAgICAgICAgICBbaSB2XVxyXG4gICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgW2sgKGtmbiBpIHYpXVxyXG4gICAgICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgICAgIChjaGVjaz8gdilcclxuICAgICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgICBbcHJvYiAoZXhwbGFpbi0xIGZvcm0gcHJlZCBwYXRoIHZpYSAoY29uaiBpbiBrKSB2KV1cclxuICAgICAgICAgICAgICBwcm9iKSkpKVxyXG4gICAgICAgICAgKHJhbmdlKVxyXG4gICAgICAgICAgeCkpKSkpKVxyXG4gICAgKGdlbipcclxuICAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgIChpZlxyXG4gICAgICBnZm5cclxuICAgICAgKGdmbilcclxuICAgICAgKGxldFxyXG4gICAgICAgW3BnZW4gKGdlbnN1YiBwcmVkIG92ZXJyaWRlcyBwYXRoIHJtYXAgZm9ybSldXHJcbiAgICAgICAoZ2VuL2JpbmRcclxuICAgICAgICAoY29uZFxyXG4gICAgICAgICBnZW4taW50b1xyXG4gICAgICAgICAoZ2VuL3JldHVybiBnZW4taW50bylcclxuICAgICAgICAga2luZFxyXG4gICAgICAgICAoZ2VuL2ZtYXBcclxuICAgICAgICAgIChmbipcclxuICAgICAgICAgICBbcDFfXzQ4OTU5I11cclxuICAgICAgICAgICAoaWYgKGVtcHR5PyBwMV9fNDg5NTkjKSBwMV9fNDg5NTkjIChlbXB0eSBwMV9fNDg5NTkjKSkpXHJcbiAgICAgICAgICAoZ2Vuc3ViIGtpbmQgb3ZlcnJpZGVzIHBhdGggcm1hcCBmb3JtKSlcclxuICAgICAgICAgOmVsc2VcclxuICAgICAgICAgKGdlbi9yZXR1cm4gW10pKVxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbaW5pdF1cclxuICAgICAgICAgKGdlbi9mbWFwXHJcbiAgICAgICAgICAoZm4qXHJcbiAgICAgICAgICAgW3AxX180ODk2MCNdXHJcbiAgICAgICAgICAgKGlmICh2ZWN0b3I/IGluaXQpIHAxX180ODk2MCMgKGludG8gaW5pdCBwMV9fNDg5NjAjKSkpXHJcbiAgICAgICAgICAoY29uZFxyXG4gICAgICAgICAgIGRpc3RpbmN0XHJcbiAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgIGNvdW50XHJcbiAgICAgICAgICAgIChnZW4vdmVjdG9yLWRpc3RpbmN0XHJcbiAgICAgICAgICAgICBwZ2VuXHJcbiAgICAgICAgICAgICB7Om51bS1lbGVtZW50cyBjb3VudCwgOm1heC10cmllcyAxMDB9KVxyXG4gICAgICAgICAgICAoZ2VuL3ZlY3Rvci1kaXN0aW5jdFxyXG4gICAgICAgICAgICAgcGdlblxyXG4gICAgICAgICAgICAgezptaW4tZWxlbWVudHMgKGMvb3IgbWluLWNvdW50IDApLFxyXG4gICAgICAgICAgICAgIDptYXgtZWxlbWVudHNcclxuICAgICAgICAgICAgICAoYy9vclxyXG4gICAgICAgICAgICAgICBtYXgtY291bnRcclxuICAgICAgICAgICAgICAgKG1heCBnZW4tbWF4IChjLyogMiAoYy9vciBtaW4tY291bnQgMCkpKSksXHJcbiAgICAgICAgICAgICAgOm1heC10cmllcyAxMDB9KSlcclxuICAgICAgICAgICBjb3VudFxyXG4gICAgICAgICAgIChnZW4vdmVjdG9yIHBnZW4gY291bnQpXHJcbiAgICAgICAgICAgKGMvb3IgbWluLWNvdW50IG1heC1jb3VudClcclxuICAgICAgICAgICAoZ2VuL3ZlY3RvclxyXG4gICAgICAgICAgICBwZ2VuXHJcbiAgICAgICAgICAgIChjL29yIG1pbi1jb3VudCAwKVxyXG4gICAgICAgICAgICAoYy9vciBtYXgtY291bnQgKG1heCBnZW4tbWF4IChjLyogMiAoYy9vciBtaW4tY291bnQgMCkpKSkpXHJcbiAgICAgICAgICAgOmVsc2VcclxuICAgICAgICAgICAoZ2VuL3ZlY3RvciBwZ2VuIDAgZ2VuLW1heCkpKSkpKSkpXHJcbiAgICAod2l0aC1nZW4qIFtfIGdmbl0gKGV2ZXJ5LWltcGwgZm9ybSBwcmVkIG9wdHMgZ2ZuKSlcclxuICAgIChkZXNjcmliZSpcclxuICAgICBbX11cclxuICAgICAoYy9vclxyXG4gICAgICBkZXNjcmliZS1mb3JtXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvZXZlcnkpXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAocy9tcmVzIGZvcm0pKVxyXG4gICAgICAgICAobWFwY2F0IGlkZW50aXR5IG9wdHMpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIHNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYyciLCA6YXJnbGlzdHMgW1tmb3JtIHByZWQgZ2ZuIGNwcmVkP10gW2Zvcm0gcHJlZCBnZm4gY3ByZWQ/IHVuY11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwZWMtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ3NwZWMnXCJcclxuIChbZm9ybSBwcmVkIGdmbiBjcHJlZD9dIChzcGVjLWltcGwgZm9ybSBwcmVkIGdmbiBjcHJlZD8gbmlsKSlcclxuIChbZm9ybSBwcmVkIGdmbiBjcHJlZD8gdW5jXVxyXG4gIChjb25kXHJcbiAgIChzcGVjPyBwcmVkKVxyXG4gICAoY29uZC0+IHByZWQgZ2ZuICh3aXRoLWdlbiBnZm4pKVxyXG4gICAocmVnZXg/IHByZWQpXHJcbiAgIChyZWdleC1zcGVjLWltcGwgcHJlZCBnZm4pXHJcbiAgIChpZGVudD8gcHJlZClcclxuICAgKGNvbmQtPiAodGhlLXNwZWMgcHJlZCkgZ2ZuICh3aXRoLWdlbiBnZm4pKVxyXG4gICA6ZWxzZVxyXG4gICAocmVpZnlcclxuICAgIFNwZWNpemVcclxuICAgIChzcGVjaXplKiBbc10gcylcclxuICAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICAgU3BlY1xyXG4gICAgKGNvbmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAobGV0XHJcbiAgICAgIFtyZXQgKHByZWQgeCldXHJcbiAgICAgIChpZiBjcHJlZD8gcmV0IChpZiByZXQgeCA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKSkpXHJcbiAgICAodW5mb3JtKlxyXG4gICAgIFtfIHhdXHJcbiAgICAgKGlmXHJcbiAgICAgIGNwcmVkP1xyXG4gICAgICAoaWYgdW5jICh1bmMgeCkgKHRocm93IChqcy9FcnJvci4gXCJubyB1bmZvcm0gZm4gZm9yIGNvbmZvcm1lclwiKSkpXHJcbiAgICAgIHgpKVxyXG4gICAgKGV4cGxhaW4qXHJcbiAgICAgW18gcGF0aCB2aWEgaW4geF1cclxuICAgICAod2hlblxyXG4gICAgICAoaW52YWxpZD8gKGR0IHByZWQgeCBmb3JtIGNwcmVkPykpXHJcbiAgICAgIFt7OnBhdGggcGF0aCwgOnByZWQgZm9ybSwgOnZhbCB4LCA6dmlhIHZpYSwgOmluIGlufV0pKVxyXG4gICAgKGdlbiogW18gXyBfIF9dIChpZiBnZm4gKGdmbikgKGdlbi9nZW4tZm9yLXByZWQgcHJlZCkpKVxyXG4gICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChzcGVjLWltcGwgZm9ybSBwcmVkIGdmbiBjcHJlZD8gdW5jKSlcclxuICAgIChkZXNjcmliZSogW19dIGZvcm0pKSkpKVxyXG4ifSB7OnN5bSBpbnZhbGlkPywgOm1ldGEgezpkb2MgInRlc3RzIHRoZSB2YWxpZGl0eSBvZiBhIGNvbmZvcm0gcmV0dXJuIHZhbHVlIiwgOmFyZ2xpc3RzIChbcmV0XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW52YWxpZD9cclxuIFwidGVzdHMgdGhlIHZhbGlkaXR5IG9mIGEgY29uZm9ybSByZXR1cm4gdmFsdWVcIlxyXG4gW3JldF1cclxuIChrZXl3b3JkLWlkZW50aWNhbD8gOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkIHJldCkpXHJcbiJ9IHs6c3ltIGFtcC1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcmJyIsIDphcmdsaXN0cyAoW3JlIHJlLWZvcm0gcHJlZHMgcHJlZC1mb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFtcC1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnJidcIlxyXG4gW3JlIHJlLWZvcm0gcHJlZHMgcHJlZC1mb3Jtc11cclxuIHs6Y2xqcy5zcGVjLmFscGhhL29wIDpjbGpzLnNwZWMuYWxwaGEvYW1wLFxyXG4gIDpwMSByZSxcclxuICA6YW1wIHJlLWZvcm0sXHJcbiAgOnBzIHByZWRzLFxyXG4gIDpmb3JtcyBwcmVkLWZvcm1zfSlcclxuIn0gezpzeW0gY2F0LWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2NhdCciLCA6YXJnbGlzdHMgKFtrcyBwcyBmb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhdC1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnY2F0J1wiXHJcbiBba3MgcHMgZm9ybXNdXHJcbiAocGNhdCogezprcyBrcywgOnBzIHBzLCA6Zm9ybXMgZm9ybXMsIDpyZXQge319KSlcclxuIn0gezpzeW0gZXhwbGFpbi1zdHIsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgdGhhdCBmYWlscyB0byBjb25mb3JtLCByZXR1cm5zIGFuIGV4cGxhbmF0aW9uIGFzIGEgc3RyaW5nLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tc3RyXHJcbiBcIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB0aGF0IGZhaWxzIHRvIGNvbmZvcm0sIHJldHVybnMgYW4gZXhwbGFuYXRpb24gYXMgYSBzdHJpbmcuXCJcclxuIFtzcGVjIHhdXHJcbiAod2l0aC1vdXQtc3RyIChleHBsYWluIHNwZWMgeCkpKVxyXG4ifSB7OnN5bSAqY29tcGlsZS1hc3NlcnRzKiwgOm1ldGEgezpkb2MgIklmIHRydWUsIGNvbXBpbGVyIHdpbGwgZW5hYmxlIHNwZWMgYXNzZXJ0cywgd2hpY2ggYXJlIHRoZW5cbnN1YmplY3QgdG8gcnVudGltZSBjb250cm9sIHZpYSBjaGVjay1hc3NlcnRzPyBJZiBmYWxzZSwgY29tcGlsZXJcbndpbGwgZWxpbWluYXRlIGFsbCBzcGVjIGFzc2VydCBvdmVyaGVhZC4gU2VlICdhc3NlcnQnLlxuSW5pdGlhbGx5IHNldCB0byB0aGUgbmVnYXRpb24gb2YgdGhlICc6ZWxpZGUtYXNzZXJ0cycgY29tcGlsZXIgb3B0aW9uLlxuRGVmYXVsdHMgdG8gdHJ1ZS4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKmNvbXBpbGUtYXNzZXJ0cyogKHMvaW5pdC1jb21waWxlLWFzc2VydHMpKVxyXG4ifSB7OnN5bSB3aXRoLWdlbiwgOm1ldGEgezpkb2MgIlRha2VzIGEgc3BlYyBhbmQgYSBuby1hcmcsIGdlbmVyYXRvci1yZXR1cm5pbmcgZm4gYW5kIHJldHVybnMgYSB2ZXJzaW9uIG9mIHRoYXQgc3BlYyB0aGF0IHVzZXMgdGhhdCBnZW5lcmF0b3IiLCA6YXJnbGlzdHMgKFtzcGVjIGdlbi1mbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdpdGgtZ2VuXHJcbiBcIlRha2VzIGEgc3BlYyBhbmQgYSBuby1hcmcsIGdlbmVyYXRvci1yZXR1cm5pbmcgZm4gYW5kIHJldHVybnMgYSB2ZXJzaW9uIG9mIHRoYXQgc3BlYyB0aGF0IHVzZXMgdGhhdCBnZW5lcmF0b3JcIlxyXG4gW3NwZWMgZ2VuLWZuXVxyXG4gKGxldFxyXG4gIFtzcGVjIChyZWctcmVzb2x2ZSBzcGVjKV1cclxuICAoaWZcclxuICAgKHJlZ2V4PyBzcGVjKVxyXG4gICAoYXNzb2Mgc3BlYyA6Y2xqcy5zcGVjLmFscGhhL2dmbiBnZW4tZm4pXHJcbiAgICh3aXRoLWdlbiogKHNwZWNpemUgc3BlYykgZ2VuLWZuKSkpKVxyXG4ifSB7OnN5bSBjb25mb3JtKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpwcm90b2NvbCBTcGVjfSB7OnN5bSBjaGVjay1hc3NlcnRzPywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIHNldCBieSBjaGVjay1hc3NlcnRzLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLWFzc2VydHM/XHJcbiBcIlJldHVybnMgdGhlIHZhbHVlIHNldCBieSBjaGVjay1hc3NlcnRzLlwiXHJcbiBbXVxyXG4gKnJ1bnRpbWUtYXNzZXJ0cyopXHJcbiJ9IHs6c3ltIHJlcC1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcqJyIsIDphcmdsaXN0cyAoW2Zvcm0gcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcC1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnKidcIlxyXG4gW2Zvcm0gcF1cclxuIChyZXAqIHAgcCBbXSBmYWxzZSBmb3JtKSlcclxuIn0gezpzeW0gZGVzY3JpYmUsIDptZXRhIHs6ZG9jICJyZXR1cm5zIGFuIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGVjIGFzIGRhdGEiLCA6YXJnbGlzdHMgKFtzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVzY3JpYmVcclxuIFwicmV0dXJucyBhbiBhYmJyZXZpYXRlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlYyBhcyBkYXRhXCJcclxuIFtzcGVjXVxyXG4gKGFiYnJldiAoZm9ybSBzcGVjKSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tb3V0LCA6bWV0YSB7OmRvYyAiUHJpbnRzIGV4cGxhbmF0aW9uIGRhdGEgKHBlciAnZXhwbGFpbi1kYXRhJykgdG8gKm91dCogdXNpbmcgdGhlIHByaW50ZXIgaW4gKmV4cGxhaW4tb3V0KixcbiAgICBieSBkZWZhdWx0IGV4cGxhaW4tcHJpbnRlci4iLCA6YXJnbGlzdHMgKFtlZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW4tb3V0XHJcbiBcIlByaW50cyBleHBsYW5hdGlvbiBkYXRhIChwZXIgJ2V4cGxhaW4tZGF0YScpIHRvICpvdXQqIHVzaW5nIHRoZSBwcmludGVyIGluICpleHBsYWluLW91dCosXFxuICAgIGJ5IGRlZmF1bHQgZXhwbGFpbi1wcmludGVyLlwiXHJcbiBbZWRdXHJcbiAoKmV4cGxhaW4tb3V0KiBlZCkpXHJcbiJ9IHs6c3ltIHNwZWNpemUqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW19dIFtfIGZvcm1dKX0sIDpwcm90b2NvbCBTcGVjaXplfSB7OnN5bSBtYXliZS1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICc/JyIsIDphcmdsaXN0cyAoW3AgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1heWJlLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICc/J1wiXHJcbiBbcCBmb3JtXVxyXG4gKGFzc29jXHJcbiAgKGFsdCpcclxuICAgW3AgKGFjY2VwdCA6Y2xqcy5zcGVjLmFscGhhL25pbCldXHJcbiAgIG5pbFxyXG4gICBbZm9ybSA6Y2xqcy5zcGVjLmFscGhhL25pbF0pXHJcbiAgOm1heWJlXHJcbiAgZm9ybSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgcGF0aCB2aWEgaW4geF0pfSwgOnByb3RvY29sIFNwZWN9KSwgY2xqcy5yZWFkZXIgKHs6c3ltICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qIChhdG9tIG5pbCkpXHJcbiJ9IHs6c3ltIHJlYWQsIDptZXRhIHs6ZG9jICJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gY2xqcy50b29scy5yZWFkZXIucmVhZGVyLXR5cGVzL0lQdXNoYmFja1JlYWRlci5cbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUgb3RoZXJ3aXNlIHJldHVybnMgZW9mLlxuICAgSWYgbm8gcmVhZGVyIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cblxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcblxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQgZG9lc24ndCBkZXBlbmQgb24gZHluYW1pYyBWYXJzLCBhbGwgY29uZmlndXJhdGlvblxuICAgaXMgZG9uZSBieSBwYXNzaW5nIGFuIG9wdCBtYXAuXG5cbiAgIG9wdHMgaXMgYSBtYXAgdGhhdCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleXM6XG4gICA6ZW9mIC0gdmFsdWUgdG8gcmV0dXJuIG9uIGVuZC1vZi1maWxlLiBXaGVuIG5vdCBzdXBwbGllZCwgZW9mIHRocm93cyBhbiBleGNlcHRpb24uXG4gICA6cmVhZGVycyAgLSBhIG1hcCBvZiB0YWcgc3ltYm9scyB0byBkYXRhLXJlYWRlciBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZCBiZWZvcmUgZGVmYXVsdC1kYXRhLXJlYWRlcnMuXG4gICAgICAgICAgICAgIFdoZW4gbm90IHN1cHBsaWVkLCBvbmx5IHRoZSBkZWZhdWx0LWRhdGEtcmVhZGVycyB3aWxsIGJlIHVzZWQuXG4gICA6ZGVmYXVsdCAtIEEgZnVuY3Rpb24gb2YgdHdvIGFyZ3MsIHRoYXQgd2lsbCwgaWYgcHJlc2VudCBhbmQgbm8gcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyxcbiAgICAgICAgICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHRhZyBhbmQgdGhlIHZhbHVlLiIsIDphcmdsaXN0cyBbW3JlYWRlcl0gW3s6a2V5cyBbZW9mXSwgOmFzIG9wdHN9IHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IGVvZiBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZFxyXG4gXCJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gY2xqcy50b29scy5yZWFkZXIucmVhZGVyLXR5cGVzL0lQdXNoYmFja1JlYWRlci5cXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlIG90aGVyd2lzZSByZXR1cm5zIGVvZi5cXG4gICBJZiBubyByZWFkZXIgaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxcblxcbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xcblxcbiAgIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkIGRvZXNuJ3QgZGVwZW5kIG9uIGR5bmFtaWMgVmFycywgYWxsIGNvbmZpZ3VyYXRpb25cXG4gICBpcyBkb25lIGJ5IHBhc3NpbmcgYW4gb3B0IG1hcC5cXG5cXG4gICBvcHRzIGlzIGEgbWFwIHRoYXQgY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBrZXlzOlxcbiAgIDplb2YgLSB2YWx1ZSB0byByZXR1cm4gb24gZW5kLW9mLWZpbGUuIFdoZW4gbm90IHN1cHBsaWVkLCBlb2YgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cXG4gICA6cmVhZGVycyAgLSBhIG1hcCBvZiB0YWcgc3ltYm9scyB0byBkYXRhLXJlYWRlciBmdW5jdGlvbnMgdG8gYmUgY29uc2lkZXJlZCBiZWZvcmUgZGVmYXVsdC1kYXRhLXJlYWRlcnMuXFxuICAgICAgICAgICAgICBXaGVuIG5vdCBzdXBwbGllZCwgb25seSB0aGUgZGVmYXVsdC1kYXRhLXJlYWRlcnMgd2lsbCBiZSB1c2VkLlxcbiAgIDpkZWZhdWx0IC0gQSBmdW5jdGlvbiBvZiB0d28gYXJncywgdGhhdCB3aWxsLCBpZiBwcmVzZW50IGFuZCBubyByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnLFxcbiAgICAgICAgICAgICAgYmUgY2FsbGVkIHdpdGggdGhlIHRhZyBhbmQgdGhlIHZhbHVlLlwiXHJcbiAoW3JlYWRlcl1cclxuICAoZWRuL3JlYWRcclxuICAgezpyZWFkZXJzIEAqdGFnLXRhYmxlKixcclxuICAgIDpkZWZhdWx0IEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiosXHJcbiAgICA6ZW9mIG5pbH1cclxuICAgcmVhZGVyKSlcclxuIChbezprZXlzIFtlb2ZdLCA6YXMgb3B0c30gcmVhZGVyXVxyXG4gIChlZG4vcmVhZFxyXG4gICAodXBkYXRlXHJcbiAgICAobWVyZ2Ugb3B0cyB7OmRlZmF1bHQgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKn0pXHJcbiAgICA6cmVhZGVyc1xyXG4gICAgKGZuIFttXSAobWVyZ2UgQCp0YWctdGFibGUqIG0pKSlcclxuICAgcmVhZGVyKSlcclxuIChbcmVhZGVyIGVvZi1lcnJvcj8gZW9mIG9wdHNdXHJcbiAgKGVkbi9yZWFkXHJcbiAgIHJlYWRlclxyXG4gICBlb2YtZXJyb3I/XHJcbiAgIGVvZlxyXG4gICAodXBkYXRlXHJcbiAgICAobWVyZ2Ugb3B0cyB7OmRlZmF1bHQgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKn0pXHJcbiAgICA6cmVhZGVyc1xyXG4gICAgKGZuIFttXSAobWVyZ2UgQCp0YWctdGFibGUqIG0pKSkpKSlcclxuIn0gezpzeW0gKnRhZy10YWJsZSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqdGFnLXRhYmxlKlxyXG4gKGF0b21cclxuICAoYWRkLWRhdGEtcmVhZGVyc1xyXG4gICB7J2luc3QgcmVhZC1kYXRlLFxyXG4gICAgJ3V1aWQgcmVhZC11dWlkLFxyXG4gICAgJ3F1ZXVlIHJlYWQtcXVldWUsXHJcbiAgICAnanMgcmVhZC1qc30pKSlcclxuIn0gezpzeW0gcGFyc2UtYW5kLXZhbGlkYXRlLXRpbWVzdGFtcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtYW5kLXZhbGlkYXRlLXRpbWVzdGFtcFxyXG4gW3NdXHJcbiAobGV0XHJcbiAgW1tfXHJcbiAgICB5ZWFyc1xyXG4gICAgbW9udGhzXHJcbiAgICBkYXlzXHJcbiAgICBob3Vyc1xyXG4gICAgbWludXRlc1xyXG4gICAgc2Vjb25kc1xyXG4gICAgZnJhY3Rpb25cclxuICAgIG9mZnNldC1zaWduXHJcbiAgICBvZmZzZXQtaG91cnNcclxuICAgIG9mZnNldC1taW51dGVzXHJcbiAgICA6YXNcclxuICAgIHZdXHJcbiAgIChyZS1tYXRjaGVzIHRpbWVzdGFtcC1yZWdleCBzKV1cclxuICAoaWYtbm90XHJcbiAgIHZcclxuICAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIlVucmVjb2duaXplZCBkYXRlL3RpbWUgc3ludGF4OiBcIiBzKSkpXHJcbiAgIChsZXRcclxuICAgIFt5ZWFyc1xyXG4gICAgIChwYXJzZS1pbnQgeWVhcnMpXHJcbiAgICAgbW9udGhzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgbW9udGhzKSAxKVxyXG4gICAgIGRheXNcclxuICAgICAob3IgKHBhcnNlLWludCBkYXlzKSAxKVxyXG4gICAgIGhvdXJzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgaG91cnMpIDApXHJcbiAgICAgbWludXRlc1xyXG4gICAgIChvciAocGFyc2UtaW50IG1pbnV0ZXMpIDApXHJcbiAgICAgc2Vjb25kc1xyXG4gICAgIChvciAocGFyc2UtaW50IHNlY29uZHMpIDApXHJcbiAgICAgZnJhY3Rpb25cclxuICAgICAob3IgKHBhcnNlLWludCAoemVyby1maWxsLXJpZ2h0LWFuZC10cnVuY2F0ZSBmcmFjdGlvbiAzKSkgMClcclxuICAgICBvZmZzZXQtc2lnblxyXG4gICAgIChpZiAoPSBvZmZzZXQtc2lnbiBcIi1cIikgLTEgMSlcclxuICAgICBvZmZzZXQtaG91cnNcclxuICAgICAob3IgKHBhcnNlLWludCBvZmZzZXQtaG91cnMpIDApXHJcbiAgICAgb2Zmc2V0LW1pbnV0ZXNcclxuICAgICAob3IgKHBhcnNlLWludCBvZmZzZXQtbWludXRlcykgMClcclxuICAgICBvZmZzZXRcclxuICAgICAoKiBvZmZzZXQtc2lnbiAoKyAoKiBvZmZzZXQtaG91cnMgNjApIG9mZnNldC1taW51dGVzKSldXHJcbiAgICBbeWVhcnNcclxuICAgICAoY2hlY2sgMSBtb250aHMgMTIgXCJ0aW1lc3RhbXAgbW9udGggZmllbGQgbXVzdCBiZSBpbiByYW5nZSAxLi4xMlwiKVxyXG4gICAgIChjaGVja1xyXG4gICAgICAxXHJcbiAgICAgIGRheXNcclxuICAgICAgKGRheXMtaW4tbW9udGggbW9udGhzIChsZWFwLXllYXI/IHllYXJzKSlcclxuICAgICAgXCJ0aW1lc3RhbXAgZGF5IGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMS4ubGFzdCBkYXkgaW4gbW9udGhcIilcclxuICAgICAoY2hlY2sgMCBob3VycyAyMyBcInRpbWVzdGFtcCBob3VyIGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMC4uMjNcIilcclxuICAgICAoY2hlY2tcclxuICAgICAgMFxyXG4gICAgICBtaW51dGVzXHJcbiAgICAgIDU5XHJcbiAgICAgIFwidGltZXN0YW1wIG1pbnV0ZSBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDAuLjU5XCIpXHJcbiAgICAgKGNoZWNrXHJcbiAgICAgIDBcclxuICAgICAgc2Vjb25kc1xyXG4gICAgICAoaWYgKD0gbWludXRlcyA1OSkgNjAgNTkpXHJcbiAgICAgIFwidGltZXN0YW1wIHNlY29uZCBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDAuLjYwXCIpXHJcbiAgICAgKGNoZWNrXHJcbiAgICAgIDBcclxuICAgICAgZnJhY3Rpb25cclxuICAgICAgOTk5XHJcbiAgICAgIFwidGltZXN0YW1wIG1pbGxpc2Vjb25kIGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMC4uOTk5XCIpXHJcbiAgICAgb2Zmc2V0XSkpKSlcclxuIn0gezpzeW0gcmVnaXN0ZXItdGFnLXBhcnNlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGFnIGZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdpc3Rlci10YWctcGFyc2VyIVxyXG4gW3RhZyBmXVxyXG4gKGxldFxyXG4gIFtvbGQtcGFyc2VyIChnZXQgQCp0YWctdGFibGUqIHRhZyldXHJcbiAgKHN3YXAhICp0YWctdGFibGUqIGFzc29jIHRhZyBmKVxyXG4gIG9sZC1wYXJzZXIpKVxyXG4ifSB7OnN5bSByZWdpc3Rlci1kZWZhdWx0LXRhZy1wYXJzZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdpc3Rlci1kZWZhdWx0LXRhZy1wYXJzZXIhXHJcbiBbZl1cclxuIChsZXRcclxuICBbb2xkLXBhcnNlciBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXVxyXG4gIChzd2FwISAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiogKGZuIFtfXSBmKSlcclxuICBvbGQtcGFyc2VyKSlcclxuIn0gezpzeW0gZGVyZWdpc3Rlci1kZWZhdWx0LXRhZy1wYXJzZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcmVnaXN0ZXItZGVmYXVsdC10YWctcGFyc2VyIVxyXG4gW11cclxuIChsZXRcclxuICBbb2xkLXBhcnNlciBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXVxyXG4gIChzd2FwISAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiogKGZuIFtfXSBuaWwpKVxyXG4gIG9sZC1wYXJzZXIpKVxyXG4ifSB7OnN5bSByZWFkLXN0cmluZywgOm1ldGEgezpkb2MgIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxuXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xuXG4gICBvcHRzIGlzIGEgbWFwIGFzIHBlciBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZCIsIDphcmdsaXN0cyBbW3NdIFtvcHRzIHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLXN0cmluZ1xyXG4gXCJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxcbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXFxuXFxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XFxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXFxuXFxuICAgb3B0cyBpcyBhIG1hcCBhcyBwZXIgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWRcIlxyXG4gKFtzXVxyXG4gIChlZG4vcmVhZC1zdHJpbmdcclxuICAgezpyZWFkZXJzIEAqdGFnLXRhYmxlKixcclxuICAgIDpkZWZhdWx0IEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiosXHJcbiAgICA6ZW9mIG5pbH1cclxuICAgcykpXHJcbiAoW29wdHMgc11cclxuICAoZWRuL3JlYWQtc3RyaW5nXHJcbiAgICh1cGRhdGVcclxuICAgIChtZXJnZSB7OmRlZmF1bHQgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKn0gb3B0cylcclxuICAgIDpyZWFkZXJzXHJcbiAgICAoZm4gW21dIChtZXJnZSBAKnRhZy10YWJsZSogbSkpKVxyXG4gICBzKSkpXHJcbiJ9IHs6c3ltIGRlcmVnaXN0ZXItdGFnLXBhcnNlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVyZWdpc3Rlci10YWctcGFyc2VyIVxyXG4gW3RhZ11cclxuIChsZXRcclxuICBbb2xkLXBhcnNlciAoZ2V0IEAqdGFnLXRhYmxlKiB0YWcpXVxyXG4gIChzd2FwISAqdGFnLXRhYmxlKiBkaXNzb2MgdGFnKVxyXG4gIG9sZC1wYXJzZXIpKVxyXG4ifSB7OnN5bSBwYXJzZS10aW1lc3RhbXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS10aW1lc3RhbXBcclxuIFt0c11cclxuIChpZi1sZXRcclxuICBbW3llYXJzIG1vbnRocyBkYXlzIGhvdXJzIG1pbnV0ZXMgc2Vjb25kcyBtcyBvZmZzZXRdXHJcbiAgIChwYXJzZS1hbmQtdmFsaWRhdGUtdGltZXN0YW1wIHRzKV1cclxuICAoanMvRGF0ZS5cclxuICAgKC1cclxuICAgICguVVRDIGpzL0RhdGUgeWVhcnMgKGRlYyBtb250aHMpIGRheXMgaG91cnMgbWludXRlcyBzZWNvbmRzIG1zKVxyXG4gICAgKCogb2Zmc2V0IDYwIDEwMDApKSlcclxuICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiVW5yZWNvZ25pemVkIGRhdGUvdGltZSBzeW50YXg6IFwiIHRzKSkpKSlcclxuIn0pLCBjbG9qdXJlLndhbGsgKHs6c3ltIHdhbGssIDptZXRhIHs6ZG9jICJUcmF2ZXJzZXMgZm9ybSwgYW4gYXJiaXRyYXJ5IGRhdGEgc3RydWN0dXJlLiAgaW5uZXIgYW5kIG91dGVyIGFyZVxuICBmdW5jdGlvbnMuICBBcHBsaWVzIGlubmVyIHRvIGVhY2ggZWxlbWVudCBvZiBmb3JtLCBidWlsZGluZyB1cCBhXG4gIGRhdGEgc3RydWN0dXJlIG9mIHRoZSBzYW1lIHR5cGUsIHRoZW4gYXBwbGllcyBvdXRlciB0byB0aGUgcmVzdWx0LlxuICBSZWNvZ25pemVzIGFsbCBDbG9qdXJlIGRhdGEgc3RydWN0dXJlcy4gQ29uc3VtZXMgc2VxcyBhcyB3aXRoIGRvYWxsLiIsIDphcmdsaXN0cyAoW2lubmVyIG91dGVyIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3YWxrXHJcbiBcIlRyYXZlcnNlcyBmb3JtLCBhbiBhcmJpdHJhcnkgZGF0YSBzdHJ1Y3R1cmUuICBpbm5lciBhbmQgb3V0ZXIgYXJlXFxuICBmdW5jdGlvbnMuICBBcHBsaWVzIGlubmVyIHRvIGVhY2ggZWxlbWVudCBvZiBmb3JtLCBidWlsZGluZyB1cCBhXFxuICBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgc2FtZSB0eXBlLCB0aGVuIGFwcGxpZXMgb3V0ZXIgdG8gdGhlIHJlc3VsdC5cXG4gIFJlY29nbml6ZXMgYWxsIENsb2p1cmUgZGF0YSBzdHJ1Y3R1cmVzLiBDb25zdW1lcyBzZXFzIGFzIHdpdGggZG9hbGwuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFtpbm5lciBvdXRlciBmb3JtXVxyXG4gKGNvbmRcclxuICAobGlzdD8gZm9ybSlcclxuICAob3V0ZXIgKGFwcGx5IGxpc3QgKG1hcCBpbm5lciBmb3JtKSkpXHJcbiAgKG1hcC1lbnRyeT8gZm9ybSlcclxuICAob3V0ZXIgKE1hcEVudHJ5LiAoaW5uZXIgKGtleSBmb3JtKSkgKGlubmVyICh2YWwgZm9ybSkpIG5pbCkpXHJcbiAgKHNlcT8gZm9ybSlcclxuICAob3V0ZXIgKGRvYWxsIChtYXAgaW5uZXIgZm9ybSkpKVxyXG4gIChyZWNvcmQ/IGZvcm0pXHJcbiAgKG91dGVyIChyZWR1Y2UgKGZuIFtyIHhdIChjb25qIHIgKGlubmVyIHgpKSkgZm9ybSBmb3JtKSlcclxuICAoY29sbD8gZm9ybSlcclxuICAob3V0ZXIgKGludG8gKGVtcHR5IGZvcm0pIChtYXAgaW5uZXIgZm9ybSkpKVxyXG4gIDplbHNlXHJcbiAgKG91dGVyIGZvcm0pKSlcclxuIn0gezpzeW0gcG9zdHdhbGssIDptZXRhIHs6ZG9jICJQZXJmb3JtcyBhIGRlcHRoLWZpcnN0LCBwb3N0LW9yZGVyIHRyYXZlcnNhbCBvZiBmb3JtLiAgQ2FsbHMgZiBvblxuICBlYWNoIHN1Yi1mb3JtLCB1c2VzIGYncyByZXR1cm4gdmFsdWUgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsLlxuICBSZWNvZ25pemVzIGFsbCBDbG9qdXJlIGRhdGEgc3RydWN0dXJlcy4gQ29uc3VtZXMgc2VxcyBhcyB3aXRoIGRvYWxsLiIsIDphcmdsaXN0cyAoW2YgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvc3R3YWxrXHJcbiBcIlBlcmZvcm1zIGEgZGVwdGgtZmlyc3QsIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIG9mIGZvcm0uICBDYWxscyBmIG9uXFxuICBlYWNoIHN1Yi1mb3JtLCB1c2VzIGYncyByZXR1cm4gdmFsdWUgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsLlxcbiAgUmVjb2duaXplcyBhbGwgQ2xvanVyZSBkYXRhIHN0cnVjdHVyZXMuIENvbnN1bWVzIHNlcXMgYXMgd2l0aCBkb2FsbC5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW2YgZm9ybV1cclxuICh3YWxrIChwYXJ0aWFsIHBvc3R3YWxrIGYpIGYgZm9ybSkpXHJcbiJ9IHs6c3ltIHByZXdhbGssIDptZXRhIHs6ZG9jICJMaWtlIHBvc3R3YWxrLCBidXQgZG9lcyBwcmUtb3JkZXIgdHJhdmVyc2FsLiIsIDphcmdsaXN0cyAoW2YgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZXdhbGtcclxuIFwiTGlrZSBwb3N0d2FsaywgYnV0IGRvZXMgcHJlLW9yZGVyIHRyYXZlcnNhbC5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW2YgZm9ybV1cclxuICh3YWxrIChwYXJ0aWFsIHByZXdhbGsgZikgaWRlbnRpdHkgKGYgZm9ybSkpKVxyXG4ifSB7OnN5bSBrZXl3b3JkaXplLWtleXMsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBmcm9tIHN0cmluZ3MgdG8ga2V5d29yZHMuIiwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXdvcmRpemUta2V5c1xyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBmcm9tIHN0cmluZ3MgdG8ga2V5d29yZHMuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFttXVxyXG4gKGxldFxyXG4gIFtmIChmbiBbW2sgdl1dIChpZiAoc3RyaW5nPyBrKSBbKGtleXdvcmQgaykgdl0gW2sgdl0pKV1cclxuICAocG9zdHdhbGsgKGZuIFt4XSAoaWYgKG1hcD8geCkgKGludG8ge30gKG1hcCBmIHgpKSB4KSkgbSkpKVxyXG4ifSB7OnN5bSBzdHJpbmdpZnkta2V5cywgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGZyb20ga2V5d29yZHMgdG8gc3RyaW5ncy4iLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5naWZ5LWtleXNcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgZnJvbSBrZXl3b3JkcyB0byBzdHJpbmdzLlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbbV1cclxuIChsZXRcclxuICBbZiAoZm4gW1trIHZdXSAoaWYgKGtleXdvcmQ/IGspIFsobmFtZSBrKSB2XSBbayB2XSkpXVxyXG4gIChwb3N0d2FsayAoZm4gW3hdIChpZiAobWFwPyB4KSAoaW50byB7fSAobWFwIGYgeCkpIHgpKSBtKSkpXHJcbiJ9IHs6c3ltIHByZXdhbGstcmVwbGFjZSwgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgZm9ybSBieSByZXBsYWNpbmcga2V5cyBpbiBzbWFwIHdpdGggdGhlaXJcbiAgdmFsdWVzLiAgTGlrZSBjbG9qdXJlL3JlcGxhY2UgYnV0IHdvcmtzIG9uIGFueSBkYXRhIHN0cnVjdHVyZS4gIERvZXNcbiAgcmVwbGFjZW1lbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgZmlyc3QuIiwgOmFyZ2xpc3RzIChbc21hcCBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJld2Fsay1yZXBsYWNlXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgZm9ybSBieSByZXBsYWNpbmcga2V5cyBpbiBzbWFwIHdpdGggdGhlaXJcXG4gIHZhbHVlcy4gIExpa2UgY2xvanVyZS9yZXBsYWNlIGJ1dCB3b3JrcyBvbiBhbnkgZGF0YSBzdHJ1Y3R1cmUuICBEb2VzXFxuICByZXBsYWNlbWVudCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSBmaXJzdC5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW3NtYXAgZm9ybV1cclxuIChwcmV3YWxrIChmbiBbeF0gKGlmIChjb250YWlucz8gc21hcCB4KSAoc21hcCB4KSB4KSkgZm9ybSkpXHJcbiJ9IHs6c3ltIHBvc3R3YWxrLXJlcGxhY2UsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGZvcm0gYnkgcmVwbGFjaW5nIGtleXMgaW4gc21hcCB3aXRoIHRoZWlyXG4gIHZhbHVlcy4gIExpa2UgY2xvanVyZS9yZXBsYWNlIGJ1dCB3b3JrcyBvbiBhbnkgZGF0YSBzdHJ1Y3R1cmUuICBEb2VzXG4gIHJlcGxhY2VtZW50IGF0IHRoZSBsZWF2ZXMgb2YgdGhlIHRyZWUgZmlyc3QuIiwgOmFyZ2xpc3RzIChbc21hcCBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9zdHdhbGstcmVwbGFjZVxyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGZvcm0gYnkgcmVwbGFjaW5nIGtleXMgaW4gc21hcCB3aXRoIHRoZWlyXFxuICB2YWx1ZXMuICBMaWtlIGNsb2p1cmUvcmVwbGFjZSBidXQgd29ya3Mgb24gYW55IGRhdGEgc3RydWN0dXJlLiAgRG9lc1xcbiAgcmVwbGFjZW1lbnQgYXQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSBmaXJzdC5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW3NtYXAgZm9ybV1cclxuIChwb3N0d2FsayAoZm4gW3hdIChpZiAoY29udGFpbnM/IHNtYXAgeCkgKHNtYXAgeCkgeCkpIGZvcm0pKVxyXG4ifSksIHRhZy1zb3VwLmNvcmUgKHs6c3ltIHNwZWNpYWwtaW5kZW50LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gc3BlY2lhbC1pbmRlbnRcclxuICN7J2FuZCAnPj0gJz4gJy8gJy0+PiAnPD0gJz0gJ2NvbmQtPj4gJysgJz09ICcqICdzb21lLT4+ICdzb21lLT4gJ25vdD1cclxuICAgJ2NvbmQtPiAnPCAnLSAnLT4gJ2FzLT4gJ29yfSlcclxuIn0gezpzeW0gY29kZS0+dGFncywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHRhZ3MgZm9yIHRoZSBnaXZlbiBzdHJpbmcgY29udGFpbmluZyBjb2RlLiIsIDphcmdsaXN0cyAoW3RleHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2RlLT50YWdzXHJcbiBcIlJldHVybnMgdGhlIHRhZ3MgZm9yIHRoZSBnaXZlbiBzdHJpbmcgY29udGFpbmluZyBjb2RlLlwiXHJcbiBbdGV4dF1cclxuIChsZXRcclxuICBbcmVhZGVyIChpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyIHRleHQpXVxyXG4gIChsb29wXHJcbiAgIFttICh0cmFuc2llbnQge30pXVxyXG4gICAoaWYtbGV0XHJcbiAgICBbdG9rZW4gKHJlYWQtc2FmZSByZWFkZXIpXVxyXG4gICAgKHJlY3VyICh0YWctbWFwIHRva2VuIG0gMCkpXHJcbiAgICAocGVyc2lzdGVudCEgbSkpKSkpXHJcbiJ9IHs6c3ltIGluZGVudC1mb3ItbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkLiIsIDphcmdsaXN0cyAoW3RhZ3MgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGVudC1mb3ItbGluZVxyXG4gXCJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZC5cIlxyXG4gW3RhZ3MgbGluZV1cclxuIChvclxyXG4gICgtPj5cclxuICAgKGdldC10YWdzLWJlZm9yZS1saW5lIHRhZ3MgbGluZSlcclxuICAgcmV2ZXJzZVxyXG4gICAoc29tZSA6bmV4dC1saW5lLWluZGVudCkpXHJcbiAgMCkpXHJcbiJ9IHs6c3ltIGFkanVzdC1pbmRlbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGhvdyBtdWNoIHRoZSBpbmRlbnQgc2hvdWxkIGJlIGFkanVzdGVkIGZvciB0aGUgZ2l2ZW4gdG9rZW4uIiwgOmFyZ2xpc3RzIChbdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGp1c3QtaW5kZW50XHJcbiBcIlJldHVybnMgaG93IG11Y2ggdGhlIGluZGVudCBzaG91bGQgYmUgYWRqdXN0ZWQgZm9yIHRoZSBnaXZlbiB0b2tlbi5cIlxyXG4gW3Rva2VuXVxyXG4gKGlmXHJcbiAgKGxpc3Q/IHRva2VuKVxyXG4gIChsZXRcclxuICAgW2ZpcnN0LXZhbCAoLT4gdG9rZW4gZmlyc3QgdW53cmFwLXZhbHVlKV1cclxuICAgKGNvbmRcclxuICAgIChvciAodmVjdG9yPyBmaXJzdC12YWwpIChsaXN0PyBmaXJzdC12YWwpKVxyXG4gICAgMFxyXG4gICAgKCN7OnVzZSA6cmVxdWlyZSA6aW1wb3J0fSBmaXJzdC12YWwpXHJcbiAgICAoaW5jIChjb3VudCAoc3RyIGZpcnN0LXZhbCkpKVxyXG4gICAgKCN7OmNsanIgOmNsaiA6Y2xqc30gZmlyc3QtdmFsKVxyXG4gICAgMFxyXG4gICAgKGNvbnRhaW5zPyBzcGVjaWFsLWluZGVudCBmaXJzdC12YWwpXHJcbiAgICAoaW5jIChjb3VudCAoc3RyIGZpcnN0LXZhbCkpKVxyXG4gICAgOmVsc2VcclxuICAgIDEpKVxyXG4gIDApKVxyXG4ifSB7OnN5bSByZWFkLXNhZmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGVpdGhlciBhIGZvcm0gb3IgYW4gZXhjZXB0aW9uIG9iamVjdCwgb3IgbmlsIGlmIEVPRiBpcyByZWFjaGVkLiIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc2FmZVxyXG4gXCJSZXR1cm5zIGVpdGhlciBhIGZvcm0gb3IgYW4gZXhjZXB0aW9uIG9iamVjdCwgb3IgbmlsIGlmIEVPRiBpcyByZWFjaGVkLlwiXHJcbiBbcmVhZGVyXVxyXG4gKHRyeVxyXG4gIChiaW5kaW5nXHJcbiAgIFsqd3JhcC12YWx1ZS1hbmQtYWRkLW1ldGFkYXRhPyogdHJ1ZSByLypzdXBwcmVzcy1yZWFkKiB0cnVlXVxyXG4gICAoci9yZWFkIHs6cmVhZC1jb25kIDpwcmVzZXJ2ZSwgOmVvZiBuaWx9IHJlYWRlcikpXHJcbiAgKGNhdGNoIEV4Y2VwdGlvbkluZm8gZSBlKSkpXHJcbiJ9IHs6c3ltIHVud3JhcC12YWx1ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVud3JhcC12YWx1ZVxyXG4gW3ZhbHVlXVxyXG4gKGlmICgtPiB2YWx1ZSBtZXRhIDp3cmFwcGVkPykgKGZpcnN0IHZhbHVlKSB2YWx1ZSkpXHJcbiJ9IHs6c3ltIGdldC10YWdzLWJlZm9yZS1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdGFncyBiZWZvcmUgdGhlIGdpdmVuIGxpbmUuIiwgOmFyZ2xpc3RzIChbdGFncyBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXRhZ3MtYmVmb3JlLWxpbmVcclxuIFwiUmV0dXJucyB0aGUgdGFncyBiZWZvcmUgdGhlIGdpdmVuIGxpbmUuXCJcclxuIFt0YWdzIGxpbmVdXHJcbiAoLT4+XHJcbiAgdGFnc1xyXG4gIChmaWx0ZXIgKGZuKiBbcDFfXzQ5MDU4I10gKDwgKGZpcnN0IHAxX180OTA1OCMpIGxpbmUpKSlcclxuICAoc29ydC1ieSBmaXJzdClcclxuICAobWFwIHNlY29uZClcclxuICAobWFwIChmbiogW3AxX180OTA1OSNdIChzb3J0LWJ5IDpjb2x1bW4gcDFfXzQ5MDU5IykpKVxyXG4gIChhcHBseSBjb25jYXQpKSlcclxuIn0gezpzeW0gZm9yd2FyZC1pbmRlbnQtZm9yLWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZCBmb3J3YXJkLiIsIDphcmdsaXN0cyAoW3RhZ3MgbGluZSBjdXJyZW50LWluZGVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZvcndhcmQtaW5kZW50LWZvci1saW5lXHJcbiBcIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkIGZvcndhcmQuXCJcclxuIFt0YWdzIGxpbmUgY3VycmVudC1pbmRlbnRdXHJcbiAobGV0XHJcbiAgW3RhZ3MtYmVmb3JlIChnZXQtdGFncy1iZWZvcmUtbGluZSB0YWdzIGxpbmUpXVxyXG4gIChsb29wXHJcbiAgIFt0YWdzIChyZXZlcnNlIHRhZ3MtYmVmb3JlKSBtYXgtdGFiLXN0b3AgLTEgdGFiLXN0b3AgLTFdXHJcbiAgIChpZi1sZXRcclxuICAgIFt0YWcgKGZpcnN0IHRhZ3MpXVxyXG4gICAgKGlmLWxldFxyXG4gICAgIFtpbmRlbnQgKDppbmRlbnQgdGFnKV1cclxuICAgICAoY29uZFxyXG4gICAgICAoPD0gaW5kZW50IGN1cnJlbnQtaW5kZW50KVxyXG4gICAgICAocmVjdXIgW10gbWF4LXRhYi1zdG9wIHRhYi1zdG9wKVxyXG4gICAgICAob3IgKG5lZz8gbWF4LXRhYi1zdG9wKSAoPCBjdXJyZW50LWluZGVudCBpbmRlbnQgbWF4LXRhYi1zdG9wKSlcclxuICAgICAgKHJlY3VyXHJcbiAgICAgICAocmVzdCB0YWdzKVxyXG4gICAgICAgKGluYyBpbmRlbnQpXHJcbiAgICAgICAoaWYgKDpza2lwLWluZGVudD8gdGFnKSB0YWItc3RvcCBpbmRlbnQpKVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICAocmVjdXIgKHJlc3QgdGFncykgbWF4LXRhYi1zdG9wIHRhYi1zdG9wKSlcclxuICAgICAocmVjdXIgKHJlc3QgdGFncykgbWF4LXRhYi1zdG9wIHRhYi1zdG9wKSlcclxuICAgIChpZiAoPD0gdGFiLXN0b3AgY3VycmVudC1pbmRlbnQpICgrIGN1cnJlbnQtaW5kZW50IDIpIHRhYi1zdG9wKSkpKSlcclxuIn0gezpzeW0gdGFnLW1hcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB0cmFuc2llbnQgbWFwIGNvbnRhaW5pbmcgdGhlIHRhZ3MsIG9yZ2FuaXplZCBieSBsaW5lIG51bWJlci4iLCA6YXJnbGlzdHMgKFt0b2tlbiByZXN1bHRzLW1hcCBwYXJlbnQtaW5kZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFnLW1hcFxyXG4gXCJSZXR1cm5zIGEgdHJhbnNpZW50IG1hcCBjb250YWluaW5nIHRoZSB0YWdzLCBvcmdhbml6ZWQgYnkgbGluZSBudW1iZXIuXCJcclxuIFt0b2tlbiByZXN1bHRzLW1hcCBwYXJlbnQtaW5kZW50XVxyXG4gKGNvbmRcclxuICAoaW5zdGFuY2U/IEV4Y2VwdGlvbkluZm8gdG9rZW4pXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtsaW5lIGNvbF19IChleC1kYXRhIHRva2VuKV1cclxuICAgKGFzc29jIVxyXG4gICAgcmVzdWx0cy1tYXBcclxuICAgIGxpbmVcclxuICAgIChjb25qXHJcbiAgICAgKGdldCByZXN1bHRzLW1hcCBsaW5lIFtdKVxyXG4gICAgIHs6ZXJyb3I/IHRydWUsXHJcbiAgICAgIDptZXNzYWdlICM/KDpjbGogKC5nZXRNZXNzYWdlIHRva2VuKSA6Y2xqcyAoLi1tZXNzYWdlIHRva2VuKSksXHJcbiAgICAgIDpjb2x1bW4gY29sfSkpKVxyXG4gIChhbmQgKGNvbGw/IHRva2VuKSAobmlsPyAobWV0YSB0b2tlbikpKVxyXG4gIChyZWR1Y2VcclxuICAgKGZuIFtyZXN1bHRzLW1hcCB0b2tlbl0gKHRhZy1tYXAgdG9rZW4gcmVzdWx0cy1tYXAgcGFyZW50LWluZGVudCkpXHJcbiAgIHJlc3VsdHMtbWFwXHJcbiAgIHRva2VuKVxyXG4gIDplbHNlXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtsaW5lIGNvbHVtbiBlbmQtbGluZSBlbmQtY29sdW1uXX0gKG1ldGEgdG9rZW4pXVxyXG4gICAoaWYtbm90XHJcbiAgICAoYW5kIGxpbmUgY29sdW1uIGVuZC1saW5lIGVuZC1jb2x1bW4pXHJcbiAgICByZXN1bHRzLW1hcFxyXG4gICAgKGxldFxyXG4gICAgIFt2YWx1ZVxyXG4gICAgICAodW53cmFwLXZhbHVlIHRva2VuKVxyXG4gICAgICBpbmRlbnRcclxuICAgICAgKG1heCBwYXJlbnQtaW5kZW50IChkZWMgY29sdW1uKSlcclxuICAgICAgdG9wLWxldmVsP1xyXG4gICAgICAoPSBwYXJlbnQtaW5kZW50IDApXVxyXG4gICAgIChpZlxyXG4gICAgICAoY29sbD8gdmFsdWUpXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtkZWxpbWl0ZXItc2l6ZVxyXG4gICAgICAgIChpZiAoc2V0PyB2YWx1ZSkgMiAxKVxyXG4gICAgICAgIG5ldy1lbmQtY29sdW1uXHJcbiAgICAgICAgKCsgY29sdW1uIGRlbGltaXRlci1zaXplKVxyXG4gICAgICAgIGFkanVzdG1lbnRcclxuICAgICAgICAoYWRqdXN0LWluZGVudCB2YWx1ZSlcclxuICAgICAgICBuZXh0LWxpbmUtaW5kZW50XHJcbiAgICAgICAgKCsgKGRlYyBjb2x1bW4pIGRlbGltaXRlci1zaXplIGFkanVzdG1lbnQpXVxyXG4gICAgICAgKGFzLT5cclxuICAgICAgICByZXN1bHRzLW1hcFxyXG4gICAgICAgICRcclxuICAgICAgICAoYXNzb2MhXHJcbiAgICAgICAgICRcclxuICAgICAgICAgbGluZVxyXG4gICAgICAgICAoLT5cclxuICAgICAgICAgIChnZXQgJCBsaW5lIFtdKVxyXG4gICAgICAgICAgKGNvbmpcclxuICAgICAgICAgICB7OmJlZ2luPyB0cnVlLFxyXG4gICAgICAgICAgICA6Y29sdW1uIGNvbHVtbixcclxuICAgICAgICAgICAgOnZhbHVlIHZhbHVlLFxyXG4gICAgICAgICAgICA6aW5kZW50IGluZGVudCxcclxuICAgICAgICAgICAgOnRvcC1sZXZlbD8gdG9wLWxldmVsPyxcclxuICAgICAgICAgICAgOnNraXAtaW5kZW50PyB0cnVlfSlcclxuICAgICAgICAgIChjb25qIHs6ZGVsaW1pdGVyPyB0cnVlLCA6Y29sdW1uIGNvbHVtbn0pXHJcbiAgICAgICAgICAoY29ualxyXG4gICAgICAgICAgIHs6ZW5kPyB0cnVlLFxyXG4gICAgICAgICAgICA6Y29sdW1uIG5ldy1lbmQtY29sdW1uLFxyXG4gICAgICAgICAgICA6bmV4dC1saW5lLWluZGVudCBuZXh0LWxpbmUtaW5kZW50LFxyXG4gICAgICAgICAgICA6aW5kZW50IG5leHQtbGluZS1pbmRlbnR9KSkpXHJcbiAgICAgICAgKHJlZHVjZVxyXG4gICAgICAgICAoZm5cclxuICAgICAgICAgIFtyZXN1bHRzLW1hcCB0b2tlbl1cclxuICAgICAgICAgICh0YWctbWFwIHRva2VuIHJlc3VsdHMtbWFwIG5leHQtbGluZS1pbmRlbnQpKVxyXG4gICAgICAgICAkXHJcbiAgICAgICAgIHZhbHVlKVxyXG4gICAgICAgIChhc3NvYyFcclxuICAgICAgICAgJFxyXG4gICAgICAgICBlbmQtbGluZVxyXG4gICAgICAgICAoLT5cclxuICAgICAgICAgIChnZXQgJCBlbmQtbGluZSBbXSlcclxuICAgICAgICAgIChjb25qIHs6ZGVsaW1pdGVyPyB0cnVlLCA6Y29sdW1uIChkZWMgZW5kLWNvbHVtbil9KVxyXG4gICAgICAgICAgKGNvbmpcclxuICAgICAgICAgICB7OmVuZD8gdHJ1ZSxcclxuICAgICAgICAgICAgOmNvbHVtbiBlbmQtY29sdW1uLFxyXG4gICAgICAgICAgICA6bmV4dC1saW5lLWluZGVudCBwYXJlbnQtaW5kZW50fSlcclxuICAgICAgICAgIChjb25qIHs6ZW5kPyB0cnVlLCA6Y29sdW1uIGVuZC1jb2x1bW59KSkpKSlcclxuICAgICAgKGFzLT5cclxuICAgICAgIHJlc3VsdHMtbWFwXHJcbiAgICAgICAkXHJcbiAgICAgICAoYXNzb2MhXHJcbiAgICAgICAgJFxyXG4gICAgICAgIGxpbmVcclxuICAgICAgICAoY29ualxyXG4gICAgICAgICAoZ2V0ICQgbGluZSBbXSlcclxuICAgICAgICAgezpiZWdpbj8gdHJ1ZSxcclxuICAgICAgICAgIDpjb2x1bW4gY29sdW1uLFxyXG4gICAgICAgICAgOnZhbHVlIHZhbHVlLFxyXG4gICAgICAgICAgOmluZGVudCBpbmRlbnQsXHJcbiAgICAgICAgICA6dG9wLWxldmVsPyB0b3AtbGV2ZWw/fSkpXHJcbiAgICAgICAoYXNzb2MhXHJcbiAgICAgICAgJFxyXG4gICAgICAgIGVuZC1saW5lXHJcbiAgICAgICAgKGNvbmpcclxuICAgICAgICAgKGdldCAkIGVuZC1saW5lIFtdKVxyXG4gICAgICAgICB7OmVuZD8gdHJ1ZSwgOmNvbHVtbiBlbmQtY29sdW1ufSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBiYWNrLWluZGVudC1mb3ItbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkIGJhY2suIiwgOmFyZ2xpc3RzIChbdGFncyBsaW5lIGN1cnJlbnQtaW5kZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gYmFjay1pbmRlbnQtZm9yLWxpbmVcclxuIFwiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQgYmFjay5cIlxyXG4gW3RhZ3MgbGluZSBjdXJyZW50LWluZGVudF1cclxuIChsZXRcclxuICBbdGFncy1iZWZvcmUgKGdldC10YWdzLWJlZm9yZS1saW5lIHRhZ3MgbGluZSldXHJcbiAgKGxvb3BcclxuICAgW3RhZ3MgKHJldmVyc2UgdGFncy1iZWZvcmUpIG1heC10YWItc3RvcCBjdXJyZW50LWluZGVudF1cclxuICAgKGlmLWxldFxyXG4gICAgW3RhZyAoZmlyc3QgdGFncyldXHJcbiAgICAoaWYtbGV0XHJcbiAgICAgW2luZGVudCAoOmluZGVudCB0YWcpXVxyXG4gICAgIChpZlxyXG4gICAgICAoPCBpbmRlbnQgbWF4LXRhYi1zdG9wKVxyXG4gICAgICAoaWYgKDpza2lwLWluZGVudD8gdGFnKSAocmVjdXIgKHJlc3QgdGFncykgKGluYyBpbmRlbnQpKSBpbmRlbnQpXHJcbiAgICAgIChyZWN1ciAocmVzdCB0YWdzKSBtYXgtdGFiLXN0b3ApKVxyXG4gICAgIChyZWN1ciAocmVzdCB0YWdzKSBtYXgtdGFiLXN0b3ApKVxyXG4gICAgKC0gY3VycmVudC1pbmRlbnQgMikpKSkpXHJcbiJ9KSwgZXhwb3VuZC5wYXRocyAoezpzeW0gZXF1YWxpc2g/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm4gZXF1YWxpc2g/IFt4IHldIChvciAoPSB4IHkpIChmbi1lcXVhbCB4IHkpIChib3RoLW5hbj8geCB5KSkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGxldFxyXG4gIFtyZXMgKGluLXdpdGgta3BzKiBmb3JtIHZhbCBpbiBpbicpXVxyXG4gIChpZlxyXG4gICAoPSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgcmVzKVxyXG4gICAodGhyb3dcclxuICAgIChleC1pbmZvXHJcbiAgICAgXCJDYW5ub3QgY29udmVydCBwYXRoLiBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgdXNpbmcgY29uZm9ybWVycyB0byB0cmFuc2Zvcm0gdmFsdWVzLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIEV4cG91bmRcIlxyXG4gICAgIHs6Zm9ybSBmb3JtLCA6dmFsIHZhbCwgOmluIGluLCA6aW4nIGluJ30pKVxyXG4gICByZXMpKSlcclxuIn0gezpzeW0ga3Zwcz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4ga3Zwcz8gW3hdIChpbnN0YW5jZT8gS2V5VmFsdWVQYXRoU2VnbWVudCB4KSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMtaW50cy1hcmUta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXlzXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGlmXHJcbiAgKD0gZm9ybSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgZm9ybVxyXG4gIChsZXRcclxuICAgW1trICYgcnN0XSBpbl1cclxuICAgKGNvbmRcclxuICAgIChhbmQgKGVtcHR5PyBpbikgKGVxdWFsaXNoPyBmb3JtIHZhbCkpXHJcbiAgICBpbidcclxuICAgIChhc3NvY2lhdGl2ZT8gZm9ybSlcclxuICAgIChpbi13aXRoLWtwcypcclxuICAgICAoZ2V0IGZvcm0gayA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgICAgdmFsXHJcbiAgICAgcnN0XHJcbiAgICAgKGNvbmogaW4nIGspKVxyXG4gICAgKGFuZCAoaW50PyBrKSAoc2VxYWJsZT8gZm9ybSkpXHJcbiAgICAoaW4td2l0aC1rcHMqXHJcbiAgICAgKG50aCAoc2VxIGZvcm0pIGsgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gICAgIHZhbFxyXG4gICAgIHJzdFxyXG4gICAgIChjb25qIGluJyBrKSlcclxuICAgIDplbHNlXHJcbiAgICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpKSkpXHJcbiJ9IHs6c3ltIGNvbXBhcmUtcGF0aC1zZWdtZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhcmUtcGF0aC1zZWdtZW50XHJcbiBbeCB5XVxyXG4gKGNvbmRcclxuICAoYW5kIChpbnQ/IHgpIChrdnBzPyB5KSlcclxuICAoY29tcGFyZSB4ICg6aWR4IHkpKVxyXG4gIChhbmQgKGt2cHM/IHgpIChpbnQ/IHkpKVxyXG4gIChjb21wYXJlICg6aWR4IHgpIHkpXHJcbiAgKGFuZCAoa3BzPyB4KSAobm90IChrcHM/IHkpKSlcclxuICAtMVxyXG4gIChhbmQgKG5vdCAoa3BzPyB4KSkgKGtwcz8geSkpXHJcbiAgMVxyXG4gIChhbmQgKHZlY3Rvcj8geCkgKHZlY3Rvcj8geSkpXHJcbiAgKGNvbXBhcmUtcGF0aHMgeCB5KVxyXG4gIDplbHNlXHJcbiAgKGNvbXBhcmUgeCB5KSkpXHJcbiJ9IHs6c3ltIGt2cHMtcGF0aD8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHBhdGggcG9pbnRzIHRvIGEga2V5L3ZhbHVlIHBhaXIiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ga3Zwcy1wYXRoP1xyXG4gXCJUcnVlIGlmIHBhdGggcG9pbnRzIHRvIGEga2V5L3ZhbHVlIHBhaXJcIlxyXG4gW3hdXHJcbiAoYm9vbGVhbiAoYW5kICh2ZWN0b3I/IHgpIChzb21lIGt2cHM/IHgpKSkpXHJcbiJ9IHs6c3ltIGNvbXBhcmUtcGF0aHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcGF0aDEgcGF0aDJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYXJlLXBhdGhzXHJcbiBbcGF0aDEgcGF0aDJdXHJcbiAoLT4+IChtYXAgY29tcGFyZS1wYXRoLXNlZ21lbnQgcGF0aDEgcGF0aDIpIChyZW1vdmUgI3swfSkgZmlyc3QpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcy1mdXp6eS1tYXRjaC1mb3ItcmVnZXgtZmFpbHVyZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHMtZnV6enktbWF0Y2gtZm9yLXJlZ2V4LWZhaWx1cmVzXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGlmXHJcbiAgKD0gZm9ybSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgZm9ybVxyXG4gIChsZXRcclxuICAgW1trICYgcnN0XSBpbl1cclxuICAgKGNvbmRcclxuICAgIChhbmQgKGVtcHR5PyBpbikgKHNlcWFibGU/IGZvcm0pICg9IHZhbCAnKCkpKVxyXG4gICAgaW4nXHJcbiAgICAoYW5kIChlbXB0eT8gaW4pIChhbmQgKHNlcT8gdmFsKSAoPSBmb3JtIChmaXJzdCB2YWwpKSkpXHJcbiAgICBpbidcclxuICAgIChhbmQgKG5hdC1pbnQ/IGspIChzZXFhYmxlPyBmb3JtKSlcclxuICAgIChpbi13aXRoLWtwcypcclxuICAgICAobnRoIChzZXEgZm9ybSkgayA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgICAgdmFsXHJcbiAgICAgcnN0XHJcbiAgICAgKGNvbmogaW4nIGspKVxyXG4gICAgOmVsc2VcclxuICAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCkpKSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzKlxyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChpZlxyXG4gIChmbj8gZm9ybSlcclxuICBpbidcclxuICAobGV0XHJcbiAgIFticjEgKGluLXdpdGgta3BzLWludHMtYXJlLWtleS12YWx1ZS1pbmRpY2F0b3JzIGZvcm0gdmFsIGluIGluJyldXHJcbiAgIChpZlxyXG4gICAgKG5vdD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIGJyMSlcclxuICAgIGJyMVxyXG4gICAgKGxldFxyXG4gICAgIFticjIgKGluLXdpdGgta3BzLW1hcHMtYXMtc2VxcyBmb3JtIHZhbCBpbiBpbicpXVxyXG4gICAgIChpZlxyXG4gICAgICAobm90PSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgYnIyKVxyXG4gICAgICBicjJcclxuICAgICAgKGxldFxyXG4gICAgICAgW2JyMyAoaW4td2l0aC1rcHMtaW50cy1hcmUta2V5cyBmb3JtIHZhbCBpbiBpbicpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKG5vdD0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kIGJyMylcclxuICAgICAgICBicjNcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFticjRcclxuICAgICAgICAgIChpbi13aXRoLWtwcy1mdXp6eS1tYXRjaC1mb3ItcmVnZXgtZmFpbHVyZXMgZm9ybSB2YWwgaW4gaW4nKV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAobm90PSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgYnI0KVxyXG4gICAgICAgICAgYnI0XHJcbiAgICAgICAgICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGtwcy1wYXRoPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcGF0aCBwb2ludHMgdG8gYSBrZXkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ga3BzLXBhdGg/XHJcbiBcIlRydWUgaWYgcGF0aCBwb2ludHMgdG8gYSBrZXlcIlxyXG4gW3hdXHJcbiAoYm9vbGVhbiAoYW5kICh2ZWN0b3I/IHgpIChrcHM/IChsYXN0IHgpKSkpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcy1tYXBzLWFzLXNlcXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHMtbWFwcy1hcy1zZXFzXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGxldFxyXG4gIFtbayAmIHJzdF0gaW4gW2lkeCAmIHJzdDJdIHJzdF1cclxuICAoY29uZFxyXG4gICAoPSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgZm9ybSlcclxuICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kXHJcbiAgIChhbmQgKGVtcHR5PyBpbikgKGVxdWFsaXNoPyBmb3JtIHZhbCkpXHJcbiAgIGluJ1xyXG4gICAoYW5kIChtYXA/IGZvcm0pIChuYXQtaW50PyBrKSAoPCBrIChjb3VudCAoc2VxIGZvcm0pKSkpXHJcbiAgIChpbi13aXRoLWtwcypcclxuICAgIChudGggKHNlcSBmb3JtKSBrKVxyXG4gICAgdmFsXHJcbiAgICByc3RcclxuICAgIChjb25qIGluJyAoLT5LZXlWYWx1ZVBhdGhTZWdtZW50IGspKSlcclxuICAgKGFuZFxyXG4gICAgKG1hcD8gZm9ybSlcclxuICAgIChuYXQtaW50PyBrKVxyXG4gICAgKGludD8gaWR4KVxyXG4gICAgKDwgayAoY291bnQgKHNlcSBmb3JtKSkpXHJcbiAgICAoPCBpZHggKGNvdW50IChudGggKHNlcSBmb3JtKSBrKSkpKVxyXG4gICAoaW4td2l0aC1rcHMqXHJcbiAgICAobnRoIChudGggKHNlcSBmb3JtKSBrKSBpZHgpXHJcbiAgICB2YWxcclxuICAgIHJzdDJcclxuICAgIChjb25qIGluJyAoLT5LZXlWYWx1ZVBhdGhTZWdtZW50IGspIGlkeCkpXHJcbiAgIDplbHNlXHJcbiAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCkpKVxyXG4ifSB7OnN5bSBwcmVmaXgtcGF0aD8sIDptZXRhIHs6ZG9jICJUcnVlIGlmIHBhcnRpYWwtcGF0aCBpcyBhIHByZWZpeCBvZiBmdWxsLXBhdGguIiwgOmFyZ2xpc3RzIChbcGFydGlhbC1wYXRoIGZ1bGwtcGF0aF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZWZpeC1wYXRoP1xyXG4gXCJUcnVlIGlmIHBhcnRpYWwtcGF0aCBpcyBhIHByZWZpeCBvZiBmdWxsLXBhdGguXCJcclxuIFtwYXJ0aWFsLXBhdGggZnVsbC1wYXRoXVxyXG4gKGFuZFxyXG4gICg8IChjb3VudCBwYXJ0aWFsLXBhdGgpIChjb3VudCBmdWxsLXBhdGgpKVxyXG4gICg9IHBhcnRpYWwtcGF0aCAoc3VidmVjIGZ1bGwtcGF0aCAwIChjb3VudCBwYXJ0aWFsLXBhdGgpKSkpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXktdmFsdWUtaW5kaWNhdG9ycywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXktdmFsdWUtaW5kaWNhdG9yc1xyXG4gW2Zvcm0gdmFsIGluIGluJ11cclxuIChpZlxyXG4gICg9IGZvcm0gOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKVxyXG4gIGZvcm1cclxuICAobGV0XHJcbiAgIFtbayAmIHJzdF0gaW4gW2lkeCAmIHJzdDJdIHJzdF1cclxuICAgKGNvbmRcclxuICAgIChhbmQgKGVtcHR5PyBpbikgKGVxdWFsaXNoPyBmb3JtIHZhbCkpXHJcbiAgICBpbidcclxuICAgIChhbmQgKG1hcD8gZm9ybSkgKD0gMCBpZHgpKVxyXG4gICAgKGluLXdpdGgta3BzKiBrIHZhbCByc3QyIChjb25qIGluJyAoLT5LZXlQYXRoU2VnbWVudCBrKSkpXHJcbiAgICAoYW5kIChtYXA/IGZvcm0pICg9IDEgaWR4KSlcclxuICAgIChpbi13aXRoLWtwcypcclxuICAgICAoZ2V0IGZvcm0gayA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgICAgdmFsXHJcbiAgICAgcnN0MlxyXG4gICAgIChjb25qIGluJyBrKSlcclxuICAgIDplbHNlXHJcbiAgICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpKSkpXHJcbiJ9IHs6c3ltIGZuLWVxdWFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm4gZm4tZXF1YWwgW3ggeV0gKGFuZCAoZm4/IHgpIChmbj8geSkgKD0gKHByLXN0ciB4KSAocHItc3RyIHkpKSkpXHJcbiJ9IHs6c3ltIGtwcz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4ga3BzPyBbeF0gKGluc3RhbmNlPyBLZXlQYXRoU2VnbWVudCB4KSlcclxuIn0gezpzeW0gYm90aC1uYW4/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm4gYm90aC1uYW4/IFt4IHldIChhbmQgKHV0aWwvbmFuPyB4KSAodXRpbC9uYW4/IHkpKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC50aW1lcnMgKHs6c3ltIHRpbWVvdXQsIDptZXRhIHs6ZG9jICJyZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgY2xvc2UgYWZ0ZXIgbXNlY3MiLCA6YXJnbGlzdHMgKFttc2Vjc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRpbWVvdXRcclxuIFwicmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIGNsb3NlIGFmdGVyIG1zZWNzXCJcclxuIFttc2Vjc11cclxuIChsZXRcclxuICBbdGltZW91dFxyXG4gICAoKyAoLnZhbHVlT2YgKGpzL0RhdGUuKSkgbXNlY3MpXHJcbiAgIG1lXHJcbiAgICguY2VpbGluZ0VudHJ5IHRpbWVvdXRzLW1hcCB0aW1lb3V0KV1cclxuICAob3JcclxuICAgKHdoZW5cclxuICAgIChhbmQgbWUgKDwgKC4ta2V5IG1lKSAoKyB0aW1lb3V0IFRJTUVPVVRfUkVTT0xVVElPTl9NUykpKVxyXG4gICAgKC4tdmFsIG1lKSlcclxuICAgKGxldFxyXG4gICAgW3RpbWVvdXQtY2hhbm5lbCAoY2hhbm5lbHMvY2hhbiBuaWwpXVxyXG4gICAgKC5wdXQgdGltZW91dHMtbWFwIHRpbWVvdXQgdGltZW91dC1jaGFubmVsKVxyXG4gICAgKGRpc3BhdGNoL3F1ZXVlLWRlbGF5XHJcbiAgICAgKGZuXHJcbiAgICAgIFtdXHJcbiAgICAgICgucmVtb3ZlIHRpbWVvdXRzLW1hcCB0aW1lb3V0KVxyXG4gICAgICAoaW1wbC9jbG9zZSEgdGltZW91dC1jaGFubmVsKSlcclxuICAgICBtc2VjcylcclxuICAgIHRpbWVvdXQtY2hhbm5lbCkpKSlcclxuIn0gezpzeW0gcmFuZG9tLWxldmVsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW10gW2xldmVsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmFuZG9tLWxldmVsXHJcbiAoW10gKHJhbmRvbS1sZXZlbCAwKSlcclxuIChbbGV2ZWxdXHJcbiAgKGlmXHJcbiAgIChhbmQgKDwgKC5yYW5kb20ganMvTWF0aCkgUCkgKDwgbGV2ZWwgTUFYX0xFVkVMKSlcclxuICAgKHJlY3VyIChpbmMgbGV2ZWwpKVxyXG4gICBsZXZlbCkpKVxyXG4ifSB7OnN5bSBza2lwLWxpc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBza2lwLWxpc3QgW10gKFNraXBMaXN0LiAoc2tpcC1saXN0LW5vZGUgMCkgMCkpXHJcbiJ9IHs6c3ltIE1BWF9MRVZFTCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTUFYX0xFVkVMIDE1KVxyXG4ifSB7OnN5bSBQLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBQICgvIDEgMikpXHJcbiJ9IHs6c3ltIHRpbWVvdXRzLW1hcCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdGltZW91dHMtbWFwIChza2lwLWxpc3QpKVxyXG4ifSB7OnN5bSBza2lwLWxpc3Qtbm9kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tsZXZlbF0gW2sgdiBsZXZlbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNraXAtbGlzdC1ub2RlXHJcbiAoW2xldmVsXSAoc2tpcC1saXN0LW5vZGUgbmlsIG5pbCBsZXZlbCkpXHJcbiAoW2sgdiBsZXZlbF1cclxuICAobGV0XHJcbiAgIFthcnIgKG1ha2UtYXJyYXkgKGluYyBsZXZlbCkpXVxyXG4gICAobG9vcFxyXG4gICAgW2kgMF1cclxuICAgICh3aGVuICg8IGkgKGFsZW5ndGggYXJyKSkgKGFzZXQgYXJyIGkgbmlsKSAocmVjdXIgKGluYyBpKSkpKVxyXG4gICAoU2tpcExpc3ROb2RlLiBrIHYgYXJyKSkpKVxyXG4ifSB7OnN5bSBsZWFzdC1ncmVhdGVyLW5vZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbeCBrIGxldmVsXSBbeCBrIGxldmVsIHVwZGF0ZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxlYXN0LWdyZWF0ZXItbm9kZVxyXG4gKFt4IGsgbGV2ZWxdIChsZWFzdC1ncmVhdGVyLW5vZGUgeCBrIGxldmVsIG5pbCkpXHJcbiAoW3ggayBsZXZlbCB1cGRhdGVdXHJcbiAgKGlmLW5vdFxyXG4gICAobmVnPyBsZXZlbClcclxuICAgKGxldFxyXG4gICAgW3hcclxuICAgICAobG9vcFxyXG4gICAgICBbeCB4XVxyXG4gICAgICAoaWYtbGV0XHJcbiAgICAgICBbeCdcclxuICAgICAgICAod2hlblxyXG4gICAgICAgICAoPCBsZXZlbCAoYWxlbmd0aCAoLi1mb3J3YXJkIHgpKSlcclxuICAgICAgICAgKGFnZXQgKC4tZm9yd2FyZCB4KSBsZXZlbCkpXVxyXG4gICAgICAgKGlmICg8ICguLWtleSB4JykgaykgKHJlY3VyIHgnKSB4KVxyXG4gICAgICAgeCkpXVxyXG4gICAgKHdoZW4tbm90IChuaWw/IHVwZGF0ZSkgKGFzZXQgdXBkYXRlIGxldmVsIHgpKVxyXG4gICAgKHJlY3VyIHggayAoZGVjIGxldmVsKSB1cGRhdGUpKVxyXG4gICB4KSkpXHJcbiJ9IHs6c3ltIFRJTUVPVVRfUkVTT0xVVElPTl9NUywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgVElNRU9VVF9SRVNPTFVUSU9OX01TIDEwKVxyXG4ifSksIGV4cG91bmQucHJvYmxlbXMgKHs6c3ltIGhpZ2hsaWdodC1saW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ByZWZpeCByZXBsYWNlbWVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhpZ2hsaWdodC1saW5lXHJcbiBbcHJlZml4IHJlcGxhY2VtZW50XVxyXG4gKGxldFxyXG4gIFttYXgtd2lkdGhcclxuICAgKGFwcGx5XHJcbiAgICBtYXhcclxuICAgIChtYXBcclxuICAgICAoZm4qIFtwMV9fNDkwMTEjXSAoY291bnQgKHN0ciBwMV9fNDkwMTEjKSkpXHJcbiAgICAgKHN0cmluZy9zcGxpdC1saW5lcyByZXBsYWNlbWVudCkpKV1cclxuICAocHJpbnRlci9pbmRlbnRcclxuICAgKGNvdW50IChzdHIgcHJlZml4KSlcclxuICAgKGFwcGx5IHN0ciAocmVwZWF0IG1heC13aWR0aCBcIl5cIikpKSkpXHJcbiJ9IHs6c3ltIHZhbHVlLWluLCA6bWV0YSB7OmRvYyAiU2ltaWxhciB0byBnZXQtaW4sIGJ1dCB3b3JrcyB3aXRoIHBhdGhzIHRoYXQgcmVmZXJlbmNlIG1hcCBrZXlzIiwgOmFyZ2xpc3RzIChbZm9ybSBpbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbHVlLWluXHJcbiBcIlNpbWlsYXIgdG8gZ2V0LWluLCBidXQgd29ya3Mgd2l0aCBwYXRocyB0aGF0IHJlZmVyZW5jZSBtYXAga2V5c1wiXHJcbiBbZm9ybSBpbl1cclxuIChsZXRcclxuICBbW2sgJiByc3RdIGluXVxyXG4gIChjb25kXHJcbiAgIChlbXB0eT8gaW4pXHJcbiAgIGZvcm1cclxuICAgKGFuZCAobWFwPyBmb3JtKSAocGF0aHMva3BzPyBrKSlcclxuICAgKDprZXkgaylcclxuICAgKGFuZCAobWFwPyBmb3JtKSAocGF0aHMva3Zwcz8gaykpXHJcbiAgIChyZWN1ciAobnRoIChzZXEgZm9ybSkgKDppZHggaykpIHJzdClcclxuICAgKGFzc29jaWF0aXZlPyBmb3JtKVxyXG4gICAocmVjdXIgKGdldCBmb3JtIGspIHJzdClcclxuICAgKGFuZCAoaW50PyBrKSAoc2VxYWJsZT8gZm9ybSkpXHJcbiAgIChyZWN1ciAobnRoIChzZXEgZm9ybSkgaykgcnN0KSkpKVxyXG4ifSB7OnN5bSBsZWFmLW9ubHksIDptZXRhIHs6ZG9jICJHaXZlbiBhIGNvbGxlY3Rpb24gb2YgcHJvYmxlbXMsIHJldHVybnMgb25seSB0aG9zZSBwcm9ibGVtcyB3aXRoIGRhdGEgb24gdGhlICdsZWF2ZXMnIG9mIHRoZSBkYXRhIiwgOmFyZ2xpc3RzIChbcHJvYmxlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsZWFmLW9ubHlcclxuIFwiR2l2ZW4gYSBjb2xsZWN0aW9uIG9mIHByb2JsZW1zLCByZXR1cm5zIG9ubHkgdGhvc2UgcHJvYmxlbXMgd2l0aCBkYXRhIG9uIHRoZSAnbGVhdmVzJyBvZiB0aGUgZGF0YVwiXHJcbiBbcHJvYmxlbXNdXHJcbiAobGV0XHJcbiAgW3BhdGhzLXRvLWRhdGEgKGludG8gI3t9IChtYXAgOmV4cG91bmQvaW4gcHJvYmxlbXMpKV1cclxuICAocmVtb3ZlXHJcbiAgIChmblxyXG4gICAgW3Byb2JsZW1dXHJcbiAgICAoc29tZVxyXG4gICAgIChmbiBbcGF0aF0gKHBhdGhzL3ByZWZpeC1wYXRoPyAoOmV4cG91bmQvaW4gcHJvYmxlbSkgcGF0aCkpXHJcbiAgICAgcGF0aHMtdG8tZGF0YSkpXHJcbiAgIHByb2JsZW1zKSkpXHJcbiJ9IHs6c3ltIGZpeC12aWEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBwcm9ibGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZml4LXZpYVxyXG4gW3NwZWMgcHJvYmxlbV1cclxuIChpZlxyXG4gICg9IHNwZWMgKGZpcnN0ICg6dmlhIHByb2JsZW0pKSlcclxuICAoYXNzb2MgcHJvYmxlbSA6ZXhwb3VuZC92aWEgKDp2aWEgcHJvYmxlbSkpXHJcbiAgKGFzc29jIHByb2JsZW0gOmV4cG91bmQvdmlhIChpbnRvIFtzcGVjXSAoOnZpYSBwcm9ibGVtKSkpKSlcclxuIn0gezpzeW0gYW5ub3RhdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwbGFpbi1kYXRhXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5ub3RhdGVcclxuIFtleHBsYWluLWRhdGFdXHJcbiAobGV0XHJcbiAgW3s6a2V5c1xyXG4gICAgWzpjbG9qdXJlLnNwZWMuYWxwaGEvcHJvYmxlbXNcclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL3ZhbHVlXHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS9hcmdzXHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS9yZXRcclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL2ZuXHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS9mYWlsdXJlXHJcbiAgICAgOmNsb2p1cmUuc3BlYy5hbHBoYS9zcGVjXX1cclxuICAgZXhwbGFpbi1kYXRhXHJcbiAgIGNhbGxlclxyXG4gICAob3JcclxuICAgICg6Y2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2FsbGVyIGV4cGxhaW4tZGF0YSlcclxuICAgICg6b3JjaGVzdHJhLnNwZWMudGVzdC9jYWxsZXIgZXhwbGFpbi1kYXRhKSlcclxuICAgZm9ybVxyXG4gICAoaWZcclxuICAgIChub3Q9IDppbnN0cnVtZW50IGZhaWx1cmUpXHJcbiAgICB2YWx1ZVxyXG4gICAgKGNvbmRcclxuICAgICAoY29udGFpbnM/IGV4cGxhaW4tZGF0YSA6Y2xvanVyZS5zcGVjLmFscGhhL3JldClcclxuICAgICByZXRcclxuICAgICAoY29udGFpbnM/IGV4cGxhaW4tZGF0YSA6Y2xvanVyZS5zcGVjLmFscGhhL2ZuKVxyXG4gICAgIGZuXHJcbiAgICAgKGNvbnRhaW5zPyBleHBsYWluLWRhdGEgOmNsb2p1cmUuc3BlYy5hbHBoYS9hcmdzKVxyXG4gICAgIGFyZ3MpKVxyXG4gICBwcm9ibGVtcydcclxuICAgKG1hcFxyXG4gICAgKGNvbXBcclxuICAgICAocGFydGlhbCBhZGp1c3QtaW4gZm9ybSlcclxuICAgICAocGFydGlhbCBhZGp1c3QtcGF0aCBmYWlsdXJlKVxyXG4gICAgIChwYXJ0aWFsIGFkZC1zcGVjIHNwZWMpXHJcbiAgICAgKHBhcnRpYWwgZml4LXZpYSBzcGVjKVxyXG4gICAgIChmbiogW3AxX180OTAxMiNdIChhc3NvYyBwMV9fNDkwMTIjIDpleHBvdW5kL2Zvcm0gZm9ybSkpKVxyXG4gICAgcHJvYmxlbXMpXVxyXG4gIChhc3NvY1xyXG4gICBleHBsYWluLWRhdGFcclxuICAgOmV4cG91bmQvZm9ybVxyXG4gICBmb3JtXHJcbiAgIDpleHBvdW5kL2NhbGxlclxyXG4gICBjYWxsZXJcclxuICAgOmV4cG91bmQvcHJvYmxlbXNcclxuICAgcHJvYmxlbXMnKSkpXHJcbiJ9IHs6c3ltIGVzY2FwZS1yZXBsYWNlbWVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwYXR0ZXJuIHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NhcGUtcmVwbGFjZW1lbnRcclxuIFtwYXR0ZXJuIHNdXHJcbiAjPyg6Y2xqIChpZiAoc3RyaW5nPyBwYXR0ZXJuKSBzIChzdHJpbmcvcmUtcXVvdGUtcmVwbGFjZW1lbnQgcykpIDpjbGpzIChzdHJpbmcvcmVwbGFjZSBzICNcIlxcJFwiIFwiJCQkJFwiKSkpXHJcbiJ9IHs6c3ltIGhpZ2hsaWdodGVkLXZhbHVlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBwcm9ibGVtLCByZXR1cm5zIGEgcHJldHR5IHByaW50ZWRcbiAgIHN0cmluZyB0aGF0IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gdmFsdWUiLCA6YXJnbGlzdHMgKFtvcHRzIHByb2JsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoaWdobGlnaHRlZC12YWx1ZVxyXG4gXCJHaXZlbiBhIHByb2JsZW0sIHJldHVybnMgYSBwcmV0dHkgcHJpbnRlZFxcbiAgIHN0cmluZyB0aGF0IGhpZ2hsaWdodHMgdGhlIHByb2JsZW0gdmFsdWVcIlxyXG4gW29wdHMgcHJvYmxlbV1cclxuIChsZXRcclxuICBbezprZXlzIFs6ZXhwb3VuZC9mb3JtIDpleHBvdW5kL2luXX1cclxuICAgcHJvYmxlbVxyXG4gICB7OmtleXMgW3Nob3ctdmFsaWQtdmFsdWVzP10sIDpvciB7c2hvdy12YWxpZC12YWx1ZXM/IGZhbHNlfX1cclxuICAgb3B0c1xyXG4gICB2YWx1ZS1hdC1wYXRoXHJcbiAgICh2YWx1ZS1pbiBmb3JtIGluKVxyXG4gICByZWxldmFudFxyXG4gICAoc3RyXHJcbiAgICBcIihcIlxyXG4gICAgOmV4cG91bmQucHJvYmxlbXMvcmVsZXZhbnRcclxuICAgIFwifChcIlxyXG4gICAgOmV4cG91bmQucHJvYmxlbXMva3YtcmVsZXZhbnRcclxuICAgIFwiXFxcXHMrXCJcclxuICAgIDpleHBvdW5kLnByb2JsZW1zL2t2LXJlbGV2YW50XHJcbiAgICBcIikpXCIpXHJcbiAgIHJlZ2V4XHJcbiAgIChyZS1wYXR0ZXJuIChzdHIgXCIoLiopXCIgcmVsZXZhbnQgXCIuKlwiKSlcclxuICAgc1xyXG4gICAoYmluZGluZ1xyXG4gICAgWypwcmludC1uYW1lc3BhY2UtbWFwcyogZmFsc2VdXHJcbiAgICAocHJpbnRlci9wcHJpbnQtc3RyXHJcbiAgICAgKHdhbGsvcHJld2Fsay1yZXBsYWNlXHJcbiAgICAgIHs6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50ICcuLi59XHJcbiAgICAgIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/IGZvcm0gaW4pKSkpXHJcbiAgIFtsaW5lIHByZWZpeCAmIF9tb3JlXVxyXG4gICAocmUtZmluZCByZWdleCBzKVxyXG4gICBoaWdobGlnaHRlZC1saW5lXHJcbiAgICgtPlxyXG4gICAgbGluZVxyXG4gICAgKHN0cmluZy9yZXBsYWNlXHJcbiAgICAgKHJlLXBhdHRlcm4gcmVsZXZhbnQpXHJcbiAgICAgKGVzY2FwZS1yZXBsYWNlbWVudFxyXG4gICAgICAocmUtcGF0dGVybiByZWxldmFudClcclxuICAgICAgKHByaW50ZXIvaW5kZW50XHJcbiAgICAgICAwXHJcbiAgICAgICAoY291bnQgcHJlZml4KVxyXG4gICAgICAgKGFuc2kvY29sb3IgKHByaW50ZXIvcHByaW50LXN0ciB2YWx1ZS1hdC1wYXRoKSA6YmFkLXZhbHVlKSkpKVxyXG4gICAgKHN0clxyXG4gICAgIFwiXFxuXCJcclxuICAgICAoYW5zaS9jb2xvclxyXG4gICAgICAoaGlnaGxpZ2h0LWxpbmUgcHJlZml4IChwcmludGVyL3BwcmludC1zdHIgdmFsdWUtYXQtcGF0aCkpXHJcbiAgICAgIDpwb2ludGVyKSkpXVxyXG4gIChwcmludGVyL25vLXRyYWlsaW5nLXdoaXRlc3BhY2VcclxuICAgKHN0cmluZy9yZXBsYWNlXHJcbiAgICBzXHJcbiAgICBsaW5lXHJcbiAgICAoZXNjYXBlLXJlcGxhY2VtZW50IGxpbmUgaGlnaGxpZ2h0ZWQtbGluZSkpKSkpXHJcbiJ9IHs6c3ltIHN1bW1hcnktZm9ybSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzaG93LXZhbGlkLXZhbHVlcz8gZm9ybSBpbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1bW1hcnktZm9ybVxyXG4gW3Nob3ctdmFsaWQtdmFsdWVzPyBmb3JtIGluXVxyXG4gKGxldFxyXG4gIFtbayAmIHJzdF1cclxuICAgaW5cclxuICAgcnN0XHJcbiAgIChvciByc3QgW10pXHJcbiAgIGRpc3BsYXllZC1mb3JtXHJcbiAgIChpZiBzaG93LXZhbGlkLXZhbHVlcz8gZm9ybSAoYmxhbmstZm9ybSBmb3JtKSldXHJcbiAgKGNvbmRcclxuICAgKGVtcHR5PyBpbilcclxuICAgOmV4cG91bmQucHJvYmxlbXMvcmVsZXZhbnRcclxuICAgKGFuZCAobWFwPyBmb3JtKSAocGF0aHMva3BzPyBrKSlcclxuICAgKC0+XHJcbiAgICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAgKGRpc3NvYyAoOmtleSBrKSlcclxuICAgIChhc3NvY1xyXG4gICAgIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/ICg6a2V5IGspIHJzdClcclxuICAgICA6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50KSlcclxuICAgKGFuZCAobWFwPyBmb3JtKSAocGF0aHMva3Zwcz8gaykpXHJcbiAgIChyZWN1ciBzaG93LXZhbGlkLXZhbHVlcz8gKG50aCAoc2VxIGZvcm0pICg6aWR4IGspKSByc3QpXHJcbiAgIChhc3NvY2lhdGl2ZT8gZm9ybSlcclxuICAgKGFzc29jXHJcbiAgICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAga1xyXG4gICAgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gKGdldCBmb3JtIGspIHJzdCkpXHJcbiAgIChhbmQgKGludD8gaykgKHNlcT8gZm9ybSkpXHJcbiAgIChhcHBseVxyXG4gICAgbGlzdFxyXG4gICAgKC0+XHJcbiAgICAgZGlzcGxheWVkLWZvcm1cclxuICAgICB2ZWNcclxuICAgICAoYXNzb2MgayAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyAobnRoIGZvcm0gaykgcnN0KSkpKVxyXG4gICAoYW5kIChpbnQ/IGspIChzZXQ/IGZvcm0pKVxyXG4gICAoaW50b1xyXG4gICAgI3t9XHJcbiAgICAoLT5cclxuICAgICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAgIHZlY1xyXG4gICAgIChhc3NvY1xyXG4gICAgICBrXHJcbiAgICAgIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/IChudGggKHNlcSBmb3JtKSBrKSByc3QpKSkpXHJcbiAgIChhbmQgKGludD8gaykgKGxpc3Q/IGZvcm0pKVxyXG4gICAoaW50b1xyXG4gICAgJygpXHJcbiAgICAoLT5cclxuICAgICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAgIHZlY1xyXG4gICAgIChhc3NvY1xyXG4gICAgICBrXHJcbiAgICAgIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/IChudGggKHNlcSBmb3JtKSBrKSByc3QpKSkpXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvd1xyXG4gICAgKGV4LWluZm9cclxuICAgICBcIkNhbm5vdCBmaW5kIHBhdGggc2VnbWVudCBpbiBmb3JtLiBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgdXNpbmcgY29uZm9ybWVycyB0byB0cmFuc2Zvcm0gdmFsdWVzLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIEV4cG91bmRcIlxyXG4gICAgIHs6Zm9ybSBmb3JtLCA6aW4gaW59KSkpKSlcclxuIn0gezpzeW0gYmxhbmstZm9ybSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYmxhbmstZm9ybVxyXG4gW2Zvcm1dXHJcbiAoY29uZFxyXG4gIChtYXA/IGZvcm0pXHJcbiAgKHppcG1hcCAoa2V5cyBmb3JtKSAocmVwZWF0IDpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQpKVxyXG4gICh2ZWN0b3I/IGZvcm0pXHJcbiAgKHZlYyAocmVwZWF0IChjb3VudCBmb3JtKSA6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50KSlcclxuICAoc2V0PyBmb3JtKVxyXG4gIGZvcm1cclxuICAob3IgKGxpc3Q/IGZvcm0pIChzZXE/IGZvcm0pKVxyXG4gIChhcHBseSBsaXN0IChyZXBlYXQgKGNvdW50IGZvcm0pIDpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQpKVxyXG4gIDplbHNlXHJcbiAgOmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCkpXHJcbiJ9KSwgY2xqcy5zcGVjLmdlbi5hbHBoYSAoezpzeW0gcXVpY2stY2hlY2ssIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbJiBhcmdzXSl9LCA6c291cmNlICIoZGVmbiBxdWljay1jaGVjayBbJiBhcmdzXSAoYXBwbHkgQHF1aWNrLWNoZWNrLXJlZiBhcmdzKSlcclxuIn0gezpzeW0gZm9yLWFsbCosIDptZXRhIHs6ZG9jICJEeW5hbWljYWxseSBsb2FkZWQgY2xvanVyZS50ZXN0LmNoZWNrLnByb3BlcnRpZXMvZm9yLWFsbCouIiwgOmFyZ2xpc3RzIChbJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9yLWFsbCpcclxuIFwiRHluYW1pY2FsbHkgbG9hZGVkIGNsb2p1cmUudGVzdC5jaGVjay5wcm9wZXJ0aWVzL2Zvci1hbGwqLlwiXHJcbiBbJiBhcmdzXVxyXG4gKGFwcGx5IEBmb3ItYWxsKi1yZWYgYXJncykpXHJcbiJ9IHs6c3ltIGRlbGF5LWltcGwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZ2ZuZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlbGF5LWltcGxcclxuIFtnZm5kXVxyXG4gKGdlbmVyYXRvciAoZm4gW3JuZCBzaXplXSAoKDpnZW4gQGdmbmQpIHJuZCBzaXplKSkpKVxyXG4ifSB7OnN5bSBjYXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgZ2VuZXJhdG9yIG9mIGEgc2VxdWVuY2UgY2F0ZW5hdGVkIGZyb20gcmVzdWx0cyBvZlxuZ2VucywgZWFjaCBvZiB3aGljaCBzaG91bGQgZ2VuZXJhdGUgc29tZXRoaW5nIHNlcXVlbnRpYWwuIiwgOmFyZ2xpc3RzIChbJiBnZW5zXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2F0XHJcbiBcIlJldHVybnMgYSBnZW5lcmF0b3Igb2YgYSBzZXF1ZW5jZSBjYXRlbmF0ZWQgZnJvbSByZXN1bHRzIG9mXFxuZ2VucywgZWFjaCBvZiB3aGljaCBzaG91bGQgZ2VuZXJhdGUgc29tZXRoaW5nIHNlcXVlbnRpYWwuXCJcclxuIFsmIGdlbnNdXHJcbiAoZm1hcFxyXG4gIChmbiogW3AxX180ODk3MyNdIChhcHBseSBjb25jYXQgcDFfXzQ4OTczIykpXHJcbiAgKGFwcGx5IHR1cGxlIGdlbnMpKSlcclxuIn0gezpzeW0gZ2VuLWZvci1wcmVkLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBwcmVkaWNhdGUsIHJldHVybnMgYSBidWlsdC1pbiBnZW5lcmF0b3IgaWYgb25lIGV4aXN0cy4iLCA6YXJnbGlzdHMgKFtwcmVkXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2VuLWZvci1wcmVkXHJcbiBcIkdpdmVuIGEgcHJlZGljYXRlLCByZXR1cm5zIGEgYnVpbHQtaW4gZ2VuZXJhdG9yIGlmIG9uZSBleGlzdHMuXCJcclxuIFtwcmVkXVxyXG4gKGlmIChzZXQ/IHByZWQpIChlbGVtZW50cyBwcmVkKSAoZ2V0IEBnZW4tYnVpbHRpbnMgcHJlZCkpKVxyXG4ifSl9LCA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSBpbnRyby00LWxlbmd0aC1zaG9ydGhhbmR9