edna.alda
edna.core
edna.examples
edna.parse
digits
Source
(
def
digits
#{
\0
\1
\2
\3
\4
\5
\6
\7
\8
\9
}
)
ezpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHRydWUsIDpkeW5hZG9jLmNvbW1vbi90eXBlIDpjbGpzLCA6ZHluYWRvYy5jb21tb24vbnNlcyAoezp2YXItc3ltcyBbZ2V0LWluc3RydW1lbnRzXSwgOnR5cGUgOmNsaiwgOnN5bSBlZG5hLmFsZGF9IHs6dmFyLXN5bXMgW2VkbmEtPmRhdGEtdXJpIGV4cG9ydCEgZWRuYS0+YWxkYSBzdG9wISBwbGF5ISBlZG5hLT5hbGRhKl0sIDp0eXBlIDpjbGosIDpzeW0gZWRuYS5jb3JlfSB7OnZhci1zeW1zIFthZXJpdGhzLXRoZW1lIGR1ZWxpbmctYmFuam9zIGludHJvLTEtc2luZ2xlLW5vdGVzIGludHJvLTItYXR0cmlidXRlcyBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQgaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kIGludHJvLTUtY2hvcmRdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLmV4YW1wbGVzfSB7OnZhci1zeW1zIFthY2NpZGVudGFscyBhY2NpZGVudGFsLT5rZXl3b3JkIG5vdGU/IGRpZ2l0cyBpbnN0cnVtZW50cyBwYXJzZSBub3RlcyBvY3RhdmUtb3BlcmF0b3JzIHBhcnNlLW5vdGVdLCA6dHlwZSA6Y2xqcywgOnN5bSBlZG5hLnBhcnNlfSksIDpkeW5hZG9jLmNvbW1vbi92YXJzIFt7OnN5bSBkaWdpdHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGRpZ2l0cyAje1xcMCBcXDEgXFwyIFxcMyBcXDQgXFw1IFxcNiBcXDcgXFw4IFxcOX0pXHJcbiJ9XSwgOmR5bmFkb2MuY29tbW9uL25zLW1ldGEgbmlsLCA6ZHluYWRvYy5jb21tb24vbnMtc3ltIGVkbmEucGFyc2UsIDpkeW5hZG9jLmNvbW1vbi9yZWwtcGF0aCAiLi4vLi4vIiwgOmR5bmFkb2MuY29tbW9uL2hpZGUtYmFkZ2U/IHRydWUsIDpkeW5hZG9jLmNvbW1vbi9jbGpzLW5zZXMtYW5kLXZhcnMge2V2YWwtc291cC5jb3JlICh7OnN5bSBjb2RlLT5yZXN1bHRzLCA6bWV0YSB7OmRvYyAiRXZhbHVhdGVzIGVhY2ggZm9ybSwgcHJvdmlkaW5nIHRoZSByZXN1bHRzIGluIGEgY2FsbGJhY2suXG4gIElmIGFueSBvZiB0aGUgZm9ybXMgYXJlIHN0cmluZ3MsIGl0IHdpbGwgcmVhZCB0aGVtIGZpcnN0LiIsIDphcmdsaXN0cyBbW2Zvcm1zIGNiXSBbZm9ybXMgY2IgezprZXlzIFsqY3VycmVudC1ucyAqc3RhdGUgY3VzdG9tLWxvYWQgdGltZW91dCBkaXNhYmxlLXRpbWVvdXQ/XSwgOm9yIHsqY3VycmVudC1ucyAoYXRvbSAocXVvdGUgY2xqcy51c2VyKSksICpzdGF0ZSAqY2xqcy1zdGF0ZSwgY3VzdG9tLWxvYWQgY3VzdG9tLWxvYWQhLCB0aW1lb3V0IDQwMDAsIGRpc2FibGUtdGltZW91dD8gZmFsc2V9LCA6YXMgb3B0c31dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2RlLT5yZXN1bHRzXHJcbiBcIkV2YWx1YXRlcyBlYWNoIGZvcm0sIHByb3ZpZGluZyB0aGUgcmVzdWx0cyBpbiBhIGNhbGxiYWNrLlxcbiAgSWYgYW55IG9mIHRoZSBmb3JtcyBhcmUgc3RyaW5ncywgaXQgd2lsbCByZWFkIHRoZW0gZmlyc3QuXCJcclxuIChbZm9ybXMgY2JdIChjb2RlLT5yZXN1bHRzIGZvcm1zIGNiIHt9KSlcclxuIChbZm9ybXNcclxuICAgY2JcclxuICAgezprZXlzIFsqY3VycmVudC1ucyAqc3RhdGUgY3VzdG9tLWxvYWQgdGltZW91dCBkaXNhYmxlLXRpbWVvdXQ/XSxcclxuICAgIDpvclxyXG4gICAgeypjdXJyZW50LW5zIChhdG9tICdjbGpzLnVzZXIpLFxyXG4gICAgICpzdGF0ZSAqY2xqcy1zdGF0ZSxcclxuICAgICBjdXN0b20tbG9hZCBjdXN0b20tbG9hZCEsXHJcbiAgICAgdGltZW91dCA0MDAwLFxyXG4gICAgIGRpc2FibGUtdGltZW91dD8gZmFsc2V9LFxyXG4gICAgOmFzIG9wdHN9XVxyXG4gIChsZXRcclxuICAgW2Zvcm1zXHJcbiAgICAobWFwdlxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180ODk5NiNdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKHN0cmluZz8gcDFfXzQ4OTk2IylcclxuICAgICAgIChzdHItPmZvcm0gQCpjdXJyZW50LW5zIHAxX180ODk5NiMpXHJcbiAgICAgICBwMV9fNDg5OTYjKSlcclxuICAgICBmb3JtcylcclxuICAgIGluaXQtZm9ybXNcclxuICAgICh2ZWNcclxuICAgICAoY29uY2F0XHJcbiAgICAgIFsnKG5zIGNsanMudXNlcildXHJcbiAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgZGlzYWJsZS10aW1lb3V0P1xyXG4gICAgICAgWycoZGVmIHBzLWxhc3QtdGltZSAoYXRvbSAwKSlcclxuICAgICAgICAnKGRlZm5cclxuICAgICAgICAgIHBzLXJlc2V0LXRpbWVvdXQhXHJcbiAgICAgICAgICBbXVxyXG4gICAgICAgICAgKHJlc2V0ISBwcy1sYXN0LXRpbWUgKC5nZXRUaW1lIChqcy9EYXRlLikpKSlcclxuICAgICAgICAnKGRlZm5cclxuICAgICAgICAgIHBzLWNoZWNrLWZvci10aW1lb3V0IVxyXG4gICAgICAgICAgW3RpbWVvdXRdXHJcbiAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICg+ICgtICguZ2V0VGltZSAoanMvRGF0ZS4pKSBAcHMtbGFzdC10aW1lKSB0aW1lb3V0KVxyXG4gICAgICAgICAgICh0aHJvdyAoanMvRXJyb3IuIFwiRXhlY3V0aW9uIHRpbWVkIG91dC5cIikpKSldKVxyXG4gICAgICBbJyhzZXQhICpwcmludC1lcnItZm4qIChmbiBbX10pKSAobGlzdCAnbnMgQCpjdXJyZW50LW5zKV0pKVxyXG4gICAgdGltZW91dC1jYlxyXG4gICAgKGZuXHJcbiAgICAgW3Jlc3VsdHNdXHJcbiAgICAgKGV2YWwtZm9ybXNcclxuICAgICAgKGFkZC10aW1lb3V0cy1pZi1uZWNlc3NhcnkgdGltZW91dCBmb3JtcyByZXN1bHRzKVxyXG4gICAgICBjYlxyXG4gICAgICAqc3RhdGVcclxuICAgICAgKmN1cnJlbnQtbnNcclxuICAgICAgY3VzdG9tLWxvYWQpKVxyXG4gICAgaW5pdC1jYlxyXG4gICAgKGZuXHJcbiAgICAgW3Jlc3VsdHNdXHJcbiAgICAgKGV2YWwtZm9ybXNcclxuICAgICAgKGlmIGRpc2FibGUtdGltZW91dD8gZm9ybXMgKG1hcCB3cmFwLW1hY3JvZXhwYW5kIGZvcm1zKSlcclxuICAgICAgKGlmIGRpc2FibGUtdGltZW91dD8gY2IgdGltZW91dC1jYilcclxuICAgICAgKnN0YXRlXHJcbiAgICAgICpjdXJyZW50LW5zXHJcbiAgICAgIGN1c3RvbS1sb2FkKSldXHJcbiAgIChldmFsLWZvcm1zIGluaXQtZm9ybXMgaW5pdC1jYiAqc3RhdGUgKmN1cnJlbnQtbnMgY3VzdG9tLWxvYWQpKSkpXHJcbiJ9KSwgY2xqcy5jb21waWxlciAoezpzeW0gcHJvdG9jb2wtcHJlZml4LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm90b2NvbC1wcmVmaXhcclxuIFtwc3ltXVxyXG4gKHN5bWJvbFxyXG4gIChzdHJcclxuICAgKC0+XHJcbiAgICAoc3RyIHBzeW0pXHJcbiAgICAoLnJlcGxhY2UgIz8oOmNsaiBcXC4gOmNsanMgKGpzL1JlZ0V4cC4gXCJcXFxcLlwiIFwiZ1wiKSkgXFwkKVxyXG4gICAgKC5yZXBsYWNlIFxcLyBcXCQpKVxyXG4gICBcIiRcIikpKVxyXG4ifSB7OnN5bSBlbWl0LWFyZ3VtZW50cy10by1hcnJheSwgOm1ldGEgezpkb2MgIkVtaXQgY29kZSB0aGF0IGNvcGllcyBmdW5jdGlvbiBhcmd1bWVudHMgaW50byBhbiBhcnJheSBzdGFydGluZyBhdCBhbiBpbmRleC5cbiAgUmV0dXJucyBuYW1lIG9mIHZhciBob2xkaW5nIHRoZSBhcnJheS4iLCA6YXJnbGlzdHMgKFtzdGFydHNsaWNlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1hcmd1bWVudHMtdG8tYXJyYXlcclxuIFwiRW1pdCBjb2RlIHRoYXQgY29waWVzIGZ1bmN0aW9uIGFyZ3VtZW50cyBpbnRvIGFuIGFycmF5IHN0YXJ0aW5nIGF0IGFuIGluZGV4LlxcbiAgUmV0dXJucyBuYW1lIG9mIHZhciBob2xkaW5nIHRoZSBhcnJheS5cIlxyXG4gW3N0YXJ0c2xpY2VdXHJcbiAoYXNzZXJ0IChhbmQgKD49IHN0YXJ0c2xpY2UgMCkgKGludGVnZXI/IHN0YXJ0c2xpY2UpKSlcclxuIChsZXRcclxuICBbbW5hbWUgKG11bmdlIChnZW5zeW0pKSBpIChzdHIgbW5hbWUgXCJfX2lcIikgYSAoc3RyIG1uYW1lIFwiX19hXCIpXVxyXG4gIChlbWl0bG5cclxuICAgXCJ2YXIgXCJcclxuICAgaVxyXG4gICBcIiA9IDAsIFwiXHJcbiAgIGFcclxuICAgXCIgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtICBcIlxyXG4gICBzdGFydHNsaWNlXHJcbiAgIFwiKTtcIilcclxuICAoZW1pdGxuXHJcbiAgIFwid2hpbGUgKFwiXHJcbiAgIGlcclxuICAgXCIgPCBcIlxyXG4gICBhXHJcbiAgIFwiLmxlbmd0aCkge1wiXHJcbiAgIGFcclxuICAgXCJbXCJcclxuICAgaVxyXG4gICBcIl0gPSBhcmd1bWVudHNbXCJcclxuICAgaVxyXG4gICBcIiArIFwiXHJcbiAgIHN0YXJ0c2xpY2VcclxuICAgXCJdOyArK1wiXHJcbiAgIGlcclxuICAgXCI7fVwiKVxyXG4gIGEpKVxyXG4ifSB7OnN5bSBlbWl0LWpzLW9iamVjdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtcyBlbWl0LWpzLW9iamVjdC12YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWpzLW9iamVjdFxyXG4gW2l0ZW1zIGVtaXQtanMtb2JqZWN0LXZhbF1cclxuIChlbWl0cyBcIih7XCIpXHJcbiAod2hlbi1sZXRcclxuICBbaXRlbXMgKHNlcSBpdGVtcyldXHJcbiAgKGxldFxyXG4gICBbW1trIHZdICYgcl0gaXRlbXNdXHJcbiAgIChlbWl0cyBcIlxcXCJcIiAobmFtZSBrKSBcIlxcXCI6IFwiIChlbWl0LWpzLW9iamVjdC12YWwgdikpXHJcbiAgIChkb3NlcVxyXG4gICAgW1trIHZdIHJdXHJcbiAgICAoZW1pdHMgXCIsIFxcXCJcIiAobmFtZSBrKSBcIlxcXCI6IFwiIChlbWl0LWpzLW9iamVjdC12YWwgdikpKSkpXHJcbiAoZW1pdHMgXCJ9KVwiKSlcclxuIn0gezpzeW0gZGlzdGluY3Qta2V5cz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3RpbmN0LWtleXM/XHJcbiBba2V5c11cclxuIChsZXRcclxuICBba2V5cyAobWFwIGFuYS91bndyYXAtcXVvdGUga2V5cyldXHJcbiAgKGFuZFxyXG4gICAoZXZlcnk/IChmbiogW3AxX180ODY1MCNdICg9ICg6b3AgcDFfXzQ4NjUwIykgOmNvbnN0KSkga2V5cylcclxuICAgKD0gKGNvdW50IChpbnRvICN7fSBrZXlzKSkgKGNvdW50IGtleXMpKSkpKVxyXG4ifSB7OnN5bSBtdW5nZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tzXSBbcyByZXNlcnZlZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlXHJcbiAoW3NdIChtdW5nZSBzIGpzLXJlc2VydmVkKSlcclxuIChbcyByZXNlcnZlZF1cclxuICAoaWZcclxuICAgIz8oOmNsaiAobWFwPyBzKSA6Y2xqcyAoYW5hL2NsanMtbWFwPyBzKSlcclxuICAgKGxldFxyXG4gICAgW25hbWUtdmFyXHJcbiAgICAgc1xyXG4gICAgIG5hbWVcclxuICAgICAoOm5hbWUgbmFtZS12YXIpXHJcbiAgICAgZmllbGRcclxuICAgICAoOmZpZWxkIG5hbWUtdmFyKVxyXG4gICAgIGluZm9cclxuICAgICAoOmluZm8gbmFtZS12YXIpXVxyXG4gICAgKGlmLW5vdFxyXG4gICAgIChuaWw/ICg6Zm4tc2VsZi1uYW1lIGluZm8pKVxyXG4gICAgIChmbi1zZWxmLW5hbWUgcylcclxuICAgICAobGV0XHJcbiAgICAgIFtkZXB0aFxyXG4gICAgICAgKHNoYWRvdy1kZXB0aCBzKVxyXG4gICAgICAgY29kZVxyXG4gICAgICAgKGhhc2gtc2NvcGUgcylcclxuICAgICAgIHJlbmFtZWRcclxuICAgICAgIChnZXQgKmxleGljYWwtcmVuYW1lcyogY29kZSlcclxuICAgICAgIG5hbWVcclxuICAgICAgIChjb25kXHJcbiAgICAgICAgKHRydWU/IGZpZWxkKVxyXG4gICAgICAgIChzdHIgXCJzZWxmX18uXCIgbmFtZSlcclxuICAgICAgICAobm90IChuaWw/IHJlbmFtZWQpKVxyXG4gICAgICAgIHJlbmFtZWRcclxuICAgICAgICA6ZWxzZVxyXG4gICAgICAgIG5hbWUpXHJcbiAgICAgICBtdW5nZWQtbmFtZVxyXG4gICAgICAgKG11bmdlIG5hbWUgcmVzZXJ2ZWQpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChvciAodHJ1ZT8gZmllbGQpICh6ZXJvPyBkZXB0aCkpXHJcbiAgICAgICBtdW5nZWQtbmFtZVxyXG4gICAgICAgKHN5bWJvbCAoc3RyIG11bmdlZC1uYW1lIFwiX18kXCIgZGVwdGgpKSkpKSlcclxuICAgKGxldFxyXG4gICAgW3NzXHJcbiAgICAgKHN0cmluZy9yZXBsYWNlIChzdHIgcykgXCIuLlwiIFwiX0RPVF9fRE9UX1wiKVxyXG4gICAgIHNzXHJcbiAgICAgKHN0cmluZy9yZXBsYWNlXHJcbiAgICAgIHNzXHJcbiAgICAgICM/KDpjbGogI1wiXFwvKC4pXCIgOmNsanMgKGpzL1JlZ0V4cC4gXCJcXFxcLyguKVwiKSlcclxuICAgICAgXCIuJDFcIilcclxuICAgICByZlxyXG4gICAgIChtdW5nZS1yZXNlcnZlZCByZXNlcnZlZClcclxuICAgICBzc1xyXG4gICAgIChtYXAgcmYgKHN0cmluZy9zcGxpdCBzcyAjXCJcXC5cIikpXHJcbiAgICAgc3NcclxuICAgICAoc3RyaW5nL2pvaW4gXCIuXCIgc3MpXHJcbiAgICAgbXNcclxuICAgICAjPyg6Y2xqIChjbG9qdXJlLmxhbmcuQ29tcGlsZXIvbXVuZ2Ugc3MpIDpjbGpzICgodmFyIGNsanMuY29yZS9tdW5nZS1zdHIpIHNzKSldXHJcbiAgICAoaWYgKHN5bWJvbD8gcykgKHN5bWJvbCBtcykgbXMpKSkpKVxyXG4ifSB7OnN5bSBnZXQtZGVmaW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21uYW1lIGpzZG9jXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWRlZmluZVxyXG4gW21uYW1lIGpzZG9jXVxyXG4gKGxldFxyXG4gIFtvcHRzIChnZXQgQGVudi8qY29tcGlsZXIqIDpvcHRpb25zKV1cclxuICAoYW5kXHJcbiAgIChzb21lXHJcbiAgICAjPyg6Y2xqIChmbiogW3AxX180ODY1NSNdICguc3RhcnRzV2l0aCBwMV9fNDg2NTUjIFwiQGRlZmluZVwiKSkgOmNsanMgKGZuKiBbcDFfXzQ4NjU2I10gKGdzdHJpbmcvc3RhcnRzV2l0aCBwMV9fNDg2NTYjIFwiQGRlZmluZVwiKSkpXHJcbiAgICBqc2RvYylcclxuICAgb3B0c1xyXG4gICAoPSAoOm9wdGltaXphdGlvbnMgb3B0cykgOm5vbmUpXHJcbiAgIChsZXRcclxuICAgIFtkZWZpbmUgKGdldC1pbiBvcHRzIFs6Y2xvc3VyZS1kZWZpbmVzIChzdHIgbW5hbWUpXSldXHJcbiAgICAod2hlbiAodmFsaWQtZGVmaW5lLXZhbHVlPyBkZWZpbmUpIChwci1zdHIgZGVmaW5lKSkpKSkpXHJcbiJ9IHs6c3ltIHZhbGlkLWRlZmluZS12YWx1ZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbGlkLWRlZmluZS12YWx1ZT9cclxuIFt4XVxyXG4gKG9yIChzdHJpbmc/IHgpICh0cnVlPyB4KSAoZmFsc2U/IHgpIChudW1iZXI/IHgpKSlcclxuIn0gezpzeW0gZW1pdC1zZXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaXRlbXMgY29tbWEtc2VwIGRpc3RpbmN0LWNvbnN0YW50cz9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXNldFxyXG4gW2l0ZW1zIGNvbW1hLXNlcCBkaXN0aW5jdC1jb25zdGFudHM/XVxyXG4gKGNvbmRcclxuICAoZW1wdHk/IGl0ZW1zKVxyXG4gIChlbWl0cyBcImNsanMuY29yZS5QZXJzaXN0ZW50SGFzaFNldC5FTVBUWVwiKVxyXG4gIChkaXN0aW5jdC1jb25zdGFudHM/IGl0ZW1zKVxyXG4gIChlbWl0c1xyXG4gICBcIm5ldyBjbGpzLmNvcmUuUGVyc2lzdGVudEhhc2hTZXQobnVsbCwgbmV3IGNsanMuY29yZS5QZXJzaXN0ZW50QXJyYXlNYXAobnVsbCwgXCJcclxuICAgKGNvdW50IGl0ZW1zKVxyXG4gICBcIiwgW1wiXHJcbiAgIChjb21tYS1zZXAgKGludGVybGVhdmUgaXRlbXMgKHJlcGVhdCBcIm51bGxcIikpKVxyXG4gICBcIl0sIG51bGwpLCBudWxsKVwiKVxyXG4gIDplbHNlXHJcbiAgKGVtaXRzXHJcbiAgIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRIYXNoU2V0LmNyZWF0ZUFzSWZCeUFzc29jKFtcIlxyXG4gICAoY29tbWEtc2VwIGl0ZW1zKVxyXG4gICBcIl0pXCIpKSlcclxuIn0gezpzeW0gZW1pdHMta2V5d29yZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrd10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXRzLWtleXdvcmRcclxuIFtrd11cclxuIChsZXRcclxuICBbbnMgKG5hbWVzcGFjZSBrdykgbmFtZSAobmFtZSBrdyldXHJcbiAgKGVtaXRzIFwibmV3IGNsanMuY29yZS5LZXl3b3JkKFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IG5zKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCBuYW1lKVxyXG4gIChlbWl0cyBcIixcIilcclxuICAoZW1pdC1jb25zdGFudCAoaWYgbnMgKHN0ciBucyBcIi9cIiBuYW1lKSBuYW1lKSlcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgKGhhc2gga3cpKVxyXG4gIChlbWl0cyBcIilcIikpKVxyXG4ifSB7OnN5bSAqbGV4aWNhbC1yZW5hbWVzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmxleGljYWwtcmVuYW1lcyoge30pXHJcbiJ9IHs6c3ltIGVtaXQtbGV0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3tleHByIDpib2R5LCA6a2V5cyBbYmluZGluZ3MgZW52XX0gaXMtbG9vcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtbGV0XHJcbiBbe2V4cHIgOmJvZHksIDprZXlzIFtiaW5kaW5ncyBlbnZdfSBpcy1sb29wXVxyXG4gKGxldFxyXG4gIFtjb250ZXh0ICg6Y29udGV4dCBlbnYpXVxyXG4gICh3aGVuICg9IDpleHByIGNvbnRleHQpIChlbWl0cyBcIihmdW5jdGlvbiAoKXtcIikpXHJcbiAgKGJpbmRpbmdcclxuICAgWypsZXhpY2FsLXJlbmFtZXMqXHJcbiAgICAoaW50b1xyXG4gICAgICpsZXhpY2FsLXJlbmFtZXMqXHJcbiAgICAgKHdoZW5cclxuICAgICAgKD0gOnN0YXRlbWVudCBjb250ZXh0KVxyXG4gICAgICAobWFwXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbYmluZGluZ11cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtuYW1lICg6bmFtZSBiaW5kaW5nKV1cclxuICAgICAgICAgKHZlY3RvciAoaGFzaC1zY29wZSBiaW5kaW5nKSAoZ2Vuc3ltIChzdHIgbmFtZSBcIi1cIikpKSkpXHJcbiAgICAgICBiaW5kaW5ncykpKV1cclxuICAgKGRvc2VxXHJcbiAgICBbezprZXlzIFtpbml0XSwgOmFzIGJpbmRpbmd9IGJpbmRpbmdzXVxyXG4gICAgKGVtaXRzIFwidmFyIFwiKVxyXG4gICAgKGVtaXQgYmluZGluZylcclxuICAgIChlbWl0bG4gXCIgPSBcIiBpbml0IFwiO1wiKSlcclxuICAgKHdoZW4gaXMtbG9vcCAoZW1pdGxuIFwid2hpbGUodHJ1ZSl7XCIpKVxyXG4gICAoZW1pdHMgZXhwcilcclxuICAgKHdoZW4gaXMtbG9vcCAoZW1pdGxuIFwiYnJlYWs7XCIpIChlbWl0bG4gXCJ9XCIpKSlcclxuICAod2hlbiAoPSA6ZXhwciBjb250ZXh0KSAoZW1pdHMgXCJ9KSgpXCIpKSkpXHJcbiJ9IHs6c3ltIGFsbC1kaXN0aW5jdD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeHNdKX0sIDpzb3VyY2UgIihkZWZuIGFsbC1kaXN0aW5jdD8gW3hzXSAoYXBwbHkgZGlzdGluY3Q/IHhzKSlcclxuIn0gezpzeW0gY2xqcy1yZXNlcnZlZC1maWxlLW5hbWVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBjbGpzLXJlc2VydmVkLWZpbGUtbmFtZXMgI3tcImRlcHMuY2xqc1wifSlcclxuIn0gezpzeW0gYmFzZS10eXBlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGJhc2UtdHlwZXNcclxuICN7XCJib29sZWFuXCIgXCJvYmplY3RcIiBcIipcIiBcInN0cmluZ1wiIFwiT2JqZWN0XCIgXCJOdW1iZXJcIiBcIm51bGxcIiBcIkRhdGVcIlxyXG4gICBcIm51bWJlclwiIFwiU3RyaW5nXCIgXCJSZWdFeHBcIiBcIi4uLipcIiBcIkFycmF5XCIgXCJhcnJheVwiIFwiQm9vbGVhblwifSlcclxuIn0gezpzeW0gcmVzb2x2ZS10eXBlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB0XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS10eXBlXHJcbiBbZW52IHRdXHJcbiAoY29uZFxyXG4gIChnZXQgYmFzZS10eXBlcyB0KVxyXG4gIHRcclxuICAoZ2V0IG1hcHBlZC10eXBlcyB0KVxyXG4gIChnZXQgbWFwcGVkLXR5cGVzIHQpXHJcbiAgIz8oOmNsaiAoLnN0YXJ0c1dpdGggdCBcIiFcIikgOmNsanMgKGdzdHJpbmcvc3RhcnRzV2l0aCB0IFwiIVwiKSlcclxuICAoc3RyIFwiIVwiIChyZXNvbHZlLXR5cGUgZW52IChzdWJzIHQgMSkpKVxyXG4gICM/KDpjbGogKC5zdGFydHNXaXRoIHQgXCJ7XCIpIDpjbGpzIChnc3RyaW5nL3N0YXJ0c1dpdGggdCBcIntcIikpXHJcbiAgdFxyXG4gICM/KDpjbGogKC5zdGFydHNXaXRoIHQgXCJmdW5jdGlvblwiKSA6Y2xqcyAoZ3N0cmluZy9zdGFydHNXaXRoIHQgXCJmdW5jdGlvblwiKSlcclxuICAobGV0XHJcbiAgIFtpZHhcclxuICAgICgubGFzdEluZGV4T2YgdCBcIjpcIilcclxuICAgIFtmc3RyIHJzdHJdXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKD09IC0xIGlkeClcclxuICAgICBbKHN1YnMgdCAwIGlkeCkgKHN1YnMgdCAoaW5jIGlkeCkgKGNvdW50IHQpKV1cclxuICAgICBbdCBuaWxdKVxyXG4gICAgcmV0LXRcclxuICAgICh3aGVuIHJzdHIgKHJlc29sdmUtdHlwZSBlbnYgcnN0cikpXHJcbiAgICBheHN0clxyXG4gICAgKHN1YnMgZnN0ciA5IChkZWMgKGNvdW50IGZzdHIpKSlcclxuICAgIGFyZ3MtdHNcclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChzdHJpbmcvYmxhbms/IGF4c3RyKVxyXG4gICAgIChtYXBcclxuICAgICAgKGNvbXBcclxuICAgICAgIChmbiogW3AxX180ODY1MiNdIChyZXNvbHZlLXR5cGUgZW52IHAxX180ODY1MiMpKVxyXG4gICAgICAgc3RyaW5nL3RyaW0pXHJcbiAgICAgIChzdHJpbmcvc3BsaXQgYXhzdHIgI1wiLFwiKSkpXVxyXG4gICAoY29uZC0+XHJcbiAgICAoc3RyIFwiZnVuY3Rpb24oXCIgKHN0cmluZy9qb2luIFwiLFwiIGFyZ3MtdHMpIFwiKVwiKVxyXG4gICAgcmV0LXRcclxuICAgIChzdHIgXCI6XCIgcmV0LXQpKSlcclxuICAjPyg6Y2xqICguZW5kc1dpdGggdCBcIj1cIikgOmNsanMgKGdzdHJpbmcvZW5kc1dpdGggdCBcIj1cIikpXHJcbiAgKHN0ciAocmVzb2x2ZS10eXBlIGVudiAoc3VicyB0IDAgKGRlYyAoY291bnQgdCkpKSkgXCI9XCIpXHJcbiAgOmVsc2VcclxuICAobXVuZ2UgKHN0ciAoOm5hbWUgKGFuYS9yZXNvbHZlLXZhciBlbnYgKHN5bWJvbCB0KSkpKSkpKVxyXG4ifSB7OnN5bSAqc291cmNlLW1hcC1kYXRhLWdlbi1jb2wqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqc291cmNlLW1hcC1kYXRhLWdlbi1jb2wqIG5pbClcclxuIn0gezpzeW0gZW1pdC13aXRoLW1ldGEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhwciBtZXRhXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC13aXRoLW1ldGFcclxuIFtleHByIG1ldGFdXHJcbiAoZW1pdHMgXCJjbGpzLmNvcmUud2l0aF9tZXRhKFwiIGV4cHIgXCIsXCIgbWV0YSBcIilcIikpXHJcbiJ9IHs6c3ltIGVtaXQtdmFyaWFkaWMtZm4tbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3tleHByIDpib2R5LCBtYXgtZml4ZWQtYXJpdHkgOmZpeGVkLWFyaXR5LCB2YXJpYWRpYyA6dmFyaWFkaWM/LCA6a2V5cyBbdHlwZSBuYW1lIHBhcmFtcyBlbnYgcmVjdXJzXSwgOmFzIGZ9XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC12YXJpYWRpYy1mbi1tZXRob2RcclxuIFt7ZXhwciA6Ym9keSxcclxuICAgbWF4LWZpeGVkLWFyaXR5IDpmaXhlZC1hcml0eSxcclxuICAgdmFyaWFkaWMgOnZhcmlhZGljPyxcclxuICAgOmtleXMgW3R5cGUgbmFtZSBwYXJhbXMgZW52IHJlY3Vyc10sXHJcbiAgIDphcyBmfV1cclxuIChlbWl0LXdyYXBcclxuICBlbnZcclxuICAobGV0XHJcbiAgIFtuYW1lXHJcbiAgICAob3IgbmFtZSAoZ2Vuc3ltKSlcclxuICAgIG1uYW1lXHJcbiAgICAobXVuZ2UgbmFtZSlcclxuICAgIGRlbGVnYXRlLW5hbWVcclxuICAgIChzdHIgbW5hbWUgXCJfX2RlbGVnYXRlXCIpXVxyXG4gICAoZW1pdGxuIFwiKGZ1bmN0aW9uKCkgeyBcIilcclxuICAgKGVtaXRzIFwidmFyIFwiIGRlbGVnYXRlLW5hbWUgXCIgPSBmdW5jdGlvbiAoXCIpXHJcbiAgIChkb3NlcVxyXG4gICAgW3BhcmFtIHBhcmFtc11cclxuICAgIChlbWl0IHBhcmFtKVxyXG4gICAgKHdoZW4tbm90ICg9IHBhcmFtIChsYXN0IHBhcmFtcykpIChlbWl0cyBcIixcIikpKVxyXG4gICAoZW1pdGxuIFwiKXtcIilcclxuICAgKHdoZW4gdHlwZSAoZW1pdGxuIFwidmFyIHNlbGZfXyA9IHRoaXM7XCIpKVxyXG4gICAod2hlbiByZWN1cnMgKGVtaXRsbiBcIndoaWxlKHRydWUpe1wiKSlcclxuICAgKGVtaXRzIGV4cHIpXHJcbiAgICh3aGVuIHJlY3VycyAoZW1pdGxuIFwiYnJlYWs7XCIpIChlbWl0bG4gXCJ9XCIpKVxyXG4gICAoZW1pdGxuIFwifTtcIilcclxuICAgKGVtaXRsblxyXG4gICAgXCJ2YXIgXCJcclxuICAgIG1uYW1lXHJcbiAgICBcIiA9IGZ1bmN0aW9uIChcIlxyXG4gICAgKGNvbW1hLXNlcFxyXG4gICAgIChpZiB2YXJpYWRpYyAoY29uY2F0IChidXRsYXN0IHBhcmFtcykgWyd2YXJfYXJnc10pIHBhcmFtcykpXHJcbiAgICBcIil7XCIpXHJcbiAgICh3aGVuIHR5cGUgKGVtaXRsbiBcInZhciBzZWxmX18gPSB0aGlzO1wiKSlcclxuICAgKHdoZW5cclxuICAgIHZhcmlhZGljXHJcbiAgICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgICAoZW1pdCAobGFzdCBwYXJhbXMpKVxyXG4gICAgKGVtaXRsbiBcIiA9IG51bGw7XCIpXHJcbiAgICAoZW1pdGxuIFwiaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBcIiAoZGVjIChjb3VudCBwYXJhbXMpKSBcIikge1wiKVxyXG4gICAgKGxldFxyXG4gICAgIFthIChlbWl0LWFyZ3VtZW50cy10by1hcnJheSAoZGVjIChjb3VudCBwYXJhbXMpKSldXHJcbiAgICAgKGVtaXRsblxyXG4gICAgICBcIiAgXCJcclxuICAgICAgKGxhc3QgcGFyYW1zKVxyXG4gICAgICBcIiA9IG5ldyBjbGpzLmNvcmUuSW5kZXhlZFNlcShcIlxyXG4gICAgICBhXHJcbiAgICAgIFwiLDAsbnVsbCk7XCIpKVxyXG4gICAgKGVtaXRsbiBcIn0gXCIpKVxyXG4gICAoZW1pdHMgXCJyZXR1cm4gXCIgZGVsZWdhdGUtbmFtZSBcIi5jYWxsKHRoaXMsXCIpXHJcbiAgIChkb3NlcVxyXG4gICAgW3BhcmFtIHBhcmFtc11cclxuICAgIChlbWl0IHBhcmFtKVxyXG4gICAgKHdoZW4tbm90ICg9IHBhcmFtIChsYXN0IHBhcmFtcykpIChlbWl0cyBcIixcIikpKVxyXG4gICAoZW1pdHMgXCIpO1wiKVxyXG4gICAoZW1pdGxuIFwifTtcIilcclxuICAgKGVtaXRsbiBtbmFtZSBcIi5jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSA9IFwiIG1heC1maXhlZC1hcml0eSBcIjtcIilcclxuICAgKGVtaXRzIG1uYW1lIFwiLmNsanMkbGFuZyRhcHBseVRvID0gXCIpXHJcbiAgIChlbWl0LWFwcGx5LXRvIChhc3NvYyBmIDpuYW1lIG5hbWUpKVxyXG4gICAoZW1pdGxuIFwiO1wiKVxyXG4gICAoZW1pdGxuXHJcbiAgICBtbmFtZVxyXG4gICAgXCIuY2xqcyRjb3JlJElGbiRfaW52b2tlJGFyaXR5JHZhcmlhZGljID0gXCJcclxuICAgIGRlbGVnYXRlLW5hbWVcclxuICAgIFwiO1wiKVxyXG4gICAoZW1pdGxuIFwicmV0dXJuIFwiIG1uYW1lIFwiO1wiKVxyXG4gICAoZW1pdGxuIFwifSkoKVwiKSkpKVxyXG4ifSB7OnN5bSBqcy1yZXNlcnZlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYganMtcmVzZXJ2ZWQgYW5hL2pzLXJlc2VydmVkKVxyXG4ifSB7OnN5bSAqcmVjb21waWxlZCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpyZWNvbXBpbGVkKiBuaWwpXHJcbiJ9IHs6c3ltIGVtaXRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW10gW2FdIFthIGJdIFthIGIgY10gW2EgYiBjIGRdIFthIGIgYyBkIGVdIFthIGIgYyBkIGUgJiB4c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXRzXHJcbiAoW10pXHJcbiAoW2FdXHJcbiAgKGNvbmRcclxuICAgKG5pbD8gYSlcclxuICAgbmlsXHJcbiAgICM/KDpjbGogKG1hcD8gYSkgOmNsanMgKGFuYS9jbGpzLW1hcD8gYSkpXHJcbiAgIChlbWl0IGEpXHJcbiAgICM/KDpjbGogKHNlcT8gYSkgOmNsanMgKGFuYS9jbGpzLXNlcT8gYSkpXHJcbiAgIChhcHBseSBlbWl0cyBhKVxyXG4gICAjPyg6Y2xqIChmbj8gYSkgOmNsanMgKGdvb2cvaXNGdW5jdGlvbiBhKSlcclxuICAgKGEpXHJcbiAgIDplbHNlXHJcbiAgIChsZXRcclxuICAgIFtzIChjb25kLT4gYSAobm90IChzdHJpbmc/IGEpKSAudG9TdHJpbmcpXVxyXG4gICAgIz8oOmNsaiAod2hlbi1zb21lIFtnZW4tY29sICpzb3VyY2UtbWFwLWRhdGEtZ2VuLWNvbCpdICguYWRkQW5kR2V0IGdlbi1jb2wgKC5sZW5ndGggcykpKSA6Y2xqcyAod2hlbi1zb21lIFtzbS1kYXRhICpzb3VyY2UtbWFwLWRhdGEqXSAoc3dhcCEgc20tZGF0YSB1cGRhdGUgOmdlbi1jb2wgKGZuKiBbcDFfXzQ4NjQ3I10gKCsgcDFfXzQ4NjQ3IyAoLi1sZW5ndGggcykpKSkpKVxyXG4gICAgIz8oOmNsaiAoLndyaXRlICpvdXQqIHMpIDpjbGpzIChwcmludCBzKSkpKVxyXG4gIG5pbClcclxuIChbYSBiXSAoZW1pdHMgYSkgKGVtaXRzIGIpKVxyXG4gKFthIGIgY10gKGVtaXRzIGEpIChlbWl0cyBiKSAoZW1pdHMgYykpXHJcbiAoW2EgYiBjIGRdIChlbWl0cyBhKSAoZW1pdHMgYikgKGVtaXRzIGMpIChlbWl0cyBkKSlcclxuIChbYSBiIGMgZCBlXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChlbWl0cyBjKSAoZW1pdHMgZCkgKGVtaXRzIGUpKVxyXG4gKFthIGIgYyBkIGUgJiB4c11cclxuICAoZW1pdHMgYSlcclxuICAoZW1pdHMgYilcclxuICAoZW1pdHMgYylcclxuICAoZW1pdHMgZClcclxuICAoZW1pdHMgZSlcclxuICAoZG9zZXEgW3ggeHNdIChlbWl0cyB4KSkpKVxyXG4ifSB7OnN5bSBlbWl0LWNvbnN0YW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWNvbnN0YW50XHJcbiBbdl1cclxuIChsZXRcclxuICBbbSAoYW5hL2VsaWRlLWlycmVsZXZhbnQtbWV0YSAobWV0YSB2KSldXHJcbiAgKGlmXHJcbiAgIChzb21lPyAoc2VxIG0pKVxyXG4gICAoZW1pdC13aXRoLW1ldGFcclxuICAgIChmbiogW10gKGVtaXQtY29uc3RhbnQtbm8tbWV0YSB2KSlcclxuICAgIChmbiogW10gKGVtaXQtY29uc3RhbnQtbm8tbWV0YSBtKSkpXHJcbiAgIChlbWl0LWNvbnN0YW50LW5vLW1ldGEgdikpKSlcclxuIn0gezpzeW0gZW1pdC1kb3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFt0YXJnZXQgZmllbGQgbWV0aG9kIGFyZ3MgZW52XX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWRvdFxyXG4gW3s6a2V5cyBbdGFyZ2V0IGZpZWxkIG1ldGhvZCBhcmdzIGVudl19XVxyXG4gKGVtaXQtd3JhcFxyXG4gIGVudlxyXG4gIChpZlxyXG4gICBmaWVsZFxyXG4gICAoZW1pdHMgdGFyZ2V0IFwiLlwiIChtdW5nZSBmaWVsZCAje30pKVxyXG4gICAoZW1pdHMgdGFyZ2V0IFwiLlwiIChtdW5nZSBtZXRob2QgI3t9KSBcIihcIiAoY29tbWEtc2VwIGFyZ3MpIFwiKVwiKSkpKVxyXG4ifSB7OnN5bSBlbWl0LWNvbnN0YW50cy10YWJsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0YWJsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtY29uc3RhbnRzLXRhYmxlXHJcbiBbdGFibGVdXHJcbiAoZW1pdGxuIFwiZ29vZy5wcm92aWRlKCdcIiAobXVuZ2UgYW5hL2NvbnN0YW50cy1ucy1zeW0pIFwiJyk7XCIpXHJcbiAoZW1pdGxuIFwiZ29vZy5yZXF1aXJlKCdjbGpzLmNvcmUnKTtcIilcclxuIChkb3NlcVxyXG4gIFtbc3ltIHZhbHVlXSB0YWJsZV1cclxuICAobGV0XHJcbiAgIFtucyAobmFtZXNwYWNlIHN5bSkgbmFtZSAobmFtZSBzeW0pXVxyXG4gICAoZW1pdHMgXCJjbGpzLmNvcmUuXCIgdmFsdWUgXCIgPSBcIilcclxuICAgKGNvbmRcclxuICAgIChrZXl3b3JkPyBzeW0pXHJcbiAgICAoZW1pdHMta2V5d29yZCBzeW0pXHJcbiAgICAoc3ltYm9sPyBzeW0pXHJcbiAgICAoZW1pdHMtc3ltYm9sIHN5bSlcclxuICAgIDplbHNlXHJcbiAgICAodGhyb3dcclxuICAgICAoZXgtaW5mb1xyXG4gICAgICAoc3RyIFwiQ2Fubm90IGVtaXQgY29uc3RhbnQgZm9yIHR5cGUgXCIgKHR5cGUgc3ltKSlcclxuICAgICAgezplcnJvciA6aW52YWxpZC1jb25zdGFudC10eXBlLFxyXG4gICAgICAgOmNsb2p1cmUuZXJyb3IvcGhhc2UgOmNvbXBpbGF0aW9ufSkpKVxyXG4gICAoZW1pdHMgXCI7XFxuXCIpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtbGlzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtcyBjb21tYS1zZXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWxpc3RcclxuIFtpdGVtcyBjb21tYS1zZXBdXHJcbiAoaWZcclxuICAoZW1wdHk/IGl0ZW1zKVxyXG4gIChlbWl0cyBcImNsanMuY29yZS5MaXN0LkVNUFRZXCIpXHJcbiAgKGVtaXRzIFwiY2xqcy5jb3JlLmxpc3QoXCIgKGNvbW1hLXNlcCBpdGVtcykgXCIpXCIpKSlcclxuIn0gezpzeW0gZ2V0LWZpcnN0LW5zLXNlZ21lbnQsIDptZXRhIHs6ZG9jICJHZXRzIHRoZSBwYXJ0IHVwIHRvIHRoZSBmaXJzdCBgLmAgb2YgYSBuYW1lc3BhY2UuXG4gICBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcgZm9yIG5pbC5cbiAgIFJldHVybnMgdGhlIGVudGlyZSBzdHJpbmcgaWYgbm8gYC5gIGluIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWZpcnN0LW5zLXNlZ21lbnRcclxuIFwiR2V0cyB0aGUgcGFydCB1cCB0byB0aGUgZmlyc3QgYC5gIG9mIGEgbmFtZXNwYWNlLlxcbiAgIFJldHVybnMgdGhlIGVtcHR5IHN0cmluZyBmb3IgbmlsLlxcbiAgIFJldHVybnMgdGhlIGVudGlyZSBzdHJpbmcgaWYgbm8gYC5gIGluIG5hbWVzcGFjZVwiXHJcbiBbbnNdXHJcbiAobGV0XHJcbiAgW25zIChzdHIgbnMpIGlkeCAoLmluZGV4T2YgbnMgXCIuXCIpXVxyXG4gIChpZiAoPT0gLTEgaWR4KSBucyAoc3VicyBucyAwIGlkeCkpKSlcclxuIn0gezpzeW0gZW1pdC1mbi1wYXJhbXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcGFyYW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1mbi1wYXJhbXNcclxuIFtwYXJhbXNdXHJcbiAoZG9zZXFcclxuICBbcGFyYW0gcGFyYW1zXVxyXG4gIChlbWl0IHBhcmFtKVxyXG4gICh3aGVuLW5vdCAoPSBwYXJhbSAobGFzdCBwYXJhbXMpKSAoZW1pdHMgXCIsXCIpKSkpXHJcbiJ9IHs6c3ltIG11bmdlLXJlc2VydmVkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jlc2VydmVkXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2UtcmVzZXJ2ZWRcclxuIFtyZXNlcnZlZF1cclxuIChmbiBbc10gKGlmLW5vdCAobmlsPyAoZ2V0IHJlc2VydmVkIHMpKSAoc3RyIHMgXCIkXCIpIHMpKSlcclxuIn0gezpzeW0gZm4tc2VsZi1uYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbbmFtZSBpbmZvXSwgOmFzIG5hbWUtdmFyfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZuLXNlbGYtbmFtZVxyXG4gW3s6a2V5cyBbbmFtZSBpbmZvXSwgOmFzIG5hbWUtdmFyfV1cclxuIChsZXRcclxuICBbbmFtZVxyXG4gICAoc3RyaW5nL3JlcGxhY2UgKHN0ciBuYW1lKSBcIi4uXCIgXCJfRE9UX19ET1RfXCIpXHJcbiAgIHs6a2V5cyBbbnMgZm4tc2NvcGVdfVxyXG4gICBpbmZvXHJcbiAgIHNjb3BlZC1uYW1lXHJcbiAgIChhcHBseVxyXG4gICAgc3RyXHJcbiAgICAoaW50ZXJwb3NlIFwiXyRfXCIgKGNvbmNhdCAobWFwIChjb21wIHN0ciA6bmFtZSkgZm4tc2NvcGUpIFtuYW1lXSkpKV1cclxuICAoc3ltYm9sXHJcbiAgIChtdW5nZSAoc3RyIChzdHJpbmcvcmVwbGFjZSAoc3RyIG5zKSBcIi5cIiBcIiRcIikgXCIkXCIgc2NvcGVkLW5hbWUpKSkpKVxyXG4ifSB7OnN5bSBsb2FkLWxpYnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbGlicyBzZWVuIHJlbG9hZHMgZGVwcyBucy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9hZC1saWJzXHJcbiBbbGlicyBzZWVuIHJlbG9hZHMgZGVwcyBucy1uYW1lXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW29wdGlvbnMganMtZGVwZW5kZW5jeS1pbmRleF19XHJcbiAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICB7OmtleXMgW3RhcmdldCBub2RlanMtcnQgb3B0aW1pemF0aW9uc119XHJcbiAgIG9wdGlvbnNcclxuICAgbG9hZGVkLWxpYnNcclxuICAgKG11bmdlICdjbGpzLmNvcmUuKmxvYWRlZC1saWJzKilcclxuICAgbG9hZGVkLWxpYnMtdGVtcFxyXG4gICAobXVuZ2UgKGdlbnN5bSAnY2xqcy5jb3JlLipsb2FkZWQtbGlicyopKVxyXG4gICBbbm9kZS1saWJzIGxpYnMtdG8tbG9hZF1cclxuICAgKGxldFxyXG4gICAgW2xpYnMgKHJlbW92ZSAoc2V0ICh2YWxzIHNlZW4pKSAoZmlsdGVyIChzZXQgKHZhbHMgbGlicykpIGRlcHMpKV1cclxuICAgIChpZlxyXG4gICAgICg9IDpub2RlanMgdGFyZ2V0KVxyXG4gICAgIChsZXRcclxuICAgICAgW3tub2RlLWxpYnMgdHJ1ZSwgbGlicy10by1sb2FkIGZhbHNlfVxyXG4gICAgICAgKGdyb3VwLWJ5IGFuYS9ub2RlLW1vZHVsZS1kZXA/IGxpYnMpXVxyXG4gICAgICBbbm9kZS1saWJzIGxpYnMtdG8tbG9hZF0pXHJcbiAgICAgW25pbCBsaWJzXSkpXHJcbiAgIGdsb2JhbC1leHBvcnRzLWxpYnNcclxuICAgKGZpbHRlciBhbmEvZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz8gbGlicy10by1sb2FkKV1cclxuICAod2hlblxyXG4gICAoLT4gbGlicyBtZXRhIDpyZWxvYWQtYWxsKVxyXG4gICAoZW1pdGxuXHJcbiAgICBcImlmKCFDT01QSUxFRCkgXCJcclxuICAgIGxvYWRlZC1saWJzLXRlbXBcclxuICAgIFwiID0gXCJcclxuICAgIGxvYWRlZC1saWJzXHJcbiAgICBcIiB8fCBjbGpzLmNvcmUuc2V0KFtcXFwiY2xqcy5jb3JlXFxcIl0pO1wiKVxyXG4gICAoZW1pdGxuXHJcbiAgICBcImlmKCFDT01QSUxFRCkgXCJcclxuICAgIGxvYWRlZC1saWJzXHJcbiAgICBcIiA9IGNsanMuY29yZS5zZXQoW1xcXCJjbGpzLmNvcmVcXFwiXSk7XCIpKVxyXG4gIChkb3NlcVxyXG4gICBbbGliIGxpYnMtdG8tbG9hZF1cclxuICAgKGNvbmRcclxuICAgICM/QCg6Y2xqIFsoYW5hL2ZvcmVpZ24tZGVwPyBsaWIpICh3aGVuIChhbmQgKD0gOm5vbmUgb3B0aW1pemF0aW9ucykgKG5vdCAoY29udGFpbnM/IG9wdGlvbnMgOm1vZHVsZXMpKSkgKGlmIG5vZGVqcy1ydCAobGV0IFtpanMgKGdldCBqcy1kZXBlbmRlbmN5LWluZGV4IChuYW1lIGxpYikpXSAoZW1pdGxuIFwiY2xqcy5jb3JlLmxvYWRfZmlsZShcIiAoLT4gKGlvL2ZpbGUgKHV0aWwvb3V0cHV0LWRpcmVjdG9yeSBvcHRpb25zKSAob3IgKGRlcHMvLXJlbGF0aXZlLXBhdGggaWpzKSAodXRpbC9yZWxhdGl2ZS1uYW1lICg6dXJsIGlqcykpKSkgc3RyIGVzY2FwZS1zdHJpbmcgd3JhcC1pbi1kb3VibGUtcXVvdGVzKSBcIik7XCIpKSAoZW1pdGxuIFwiZ29vZy5yZXF1aXJlKCdcIiAobXVuZ2UgbGliKSBcIicpO1wiKSkpXSA6Y2xqcyBbKGFuZCAoYW5hL2ZvcmVpZ24tZGVwPyBsaWIpIChub3QgKGtleXdvcmQtaWRlbnRpY2FsPyBvcHRpbWl6YXRpb25zIDpub25lKSkpIG5pbF0pXHJcbiAgICAob3IgKC0+IGxpYnMgbWV0YSA6cmVsb2FkKSAoPSAoZ2V0IHJlbG9hZHMgbGliKSA6cmVsb2FkKSlcclxuICAgIChlbWl0bG4gXCJnb29nLnJlcXVpcmUoJ1wiIChtdW5nZSBsaWIpIFwiJywgJ3JlbG9hZCcpO1wiKVxyXG4gICAgKG9yICgtPiBsaWJzIG1ldGEgOnJlbG9hZC1hbGwpICg9IChnZXQgcmVsb2FkcyBsaWIpIDpyZWxvYWQtYWxsKSlcclxuICAgIChlbWl0bG4gXCJnb29nLnJlcXVpcmUoJ1wiIChtdW5nZSBsaWIpIFwiJywgJ3JlbG9hZC1hbGwnKTtcIilcclxuICAgIDplbHNlXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoPSBsaWIgJ2dvb2cpXHJcbiAgICAgKGVtaXRsbiBcImdvb2cucmVxdWlyZSgnXCIgKG11bmdlIGxpYikgXCInKTtcIikpKSlcclxuICAoZG9zZXFcclxuICAgW2xpYiBub2RlLWxpYnNdXHJcbiAgIChlbWl0bG5cclxuICAgIChtdW5nZSBucy1uYW1lKVxyXG4gICAgXCIuXCJcclxuICAgIChhbmEvbXVuZ2Utbm9kZS1saWIgbGliKVxyXG4gICAgXCIgPSByZXF1aXJlKCdcIlxyXG4gICAgbGliXHJcbiAgICBcIicpO1wiKSlcclxuICAoZG9zZXFcclxuICAgW2xpYiBnbG9iYWwtZXhwb3J0cy1saWJzXVxyXG4gICAobGV0XHJcbiAgICBbezprZXlzIFtnbG9iYWwtZXhwb3J0c119IChnZXQganMtZGVwZW5kZW5jeS1pbmRleCAobmFtZSBsaWIpKV1cclxuICAgIChlbWl0LWdsb2JhbC1leHBvcnQgbnMtbmFtZSBnbG9iYWwtZXhwb3J0cyBsaWIpKSlcclxuICAod2hlblxyXG4gICAoLT4gbGlicyBtZXRhIDpyZWxvYWQtYWxsKVxyXG4gICAoZW1pdGxuXHJcbiAgICBcImlmKCFDT01QSUxFRCkgXCJcclxuICAgIGxvYWRlZC1saWJzXHJcbiAgICBcIiA9IGNsanMuY29yZS5pbnRvKFwiXHJcbiAgICBsb2FkZWQtbGlicy10ZW1wXHJcbiAgICBcIiwgXCJcclxuICAgIGxvYWRlZC1saWJzXHJcbiAgICBcIik7XCIpKSkpXHJcbiJ9IHs6c3ltIG11bmdlLXBhcmFtLXJldHVybiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlLXBhcmFtLXJldHVyblxyXG4gW2VudiBsaW5lXVxyXG4gKGNvbmRcclxuICAocmUtZmluZCAjXCJAcGFyYW1cIiBsaW5lKVxyXG4gIChsZXRcclxuICAgW1twIHRzIG4gJiB4c11cclxuICAgIChtYXAgc3RyaW5nL3RyaW0gKHN0cmluZy9zcGxpdCAoc3RyaW5nL3RyaW0gbGluZSkgI1wiIFwiKSldXHJcbiAgIChpZlxyXG4gICAgKGFuZFxyXG4gICAgICg9IFwiQHBhcmFtXCIgcClcclxuICAgICB0c1xyXG4gICAgICM/KDpjbGogKC5zdGFydHNXaXRoIHRzIFwie1wiKSA6Y2xqcyAoZ3N0cmluZy9zdGFydHNXaXRoIHRzIFwie1wiKSkpXHJcbiAgICAoc3RyaW5nL2pvaW4gXCIgXCIgKGNvbmNhdCBbcCAocmVzb2x2ZS10eXBlcyBlbnYgdHMpIChtdW5nZSBuKV0geHMpKVxyXG4gICAgbGluZSkpXHJcbiAgKHJlLWZpbmQgI1wiQHJldHVyblwiIGxpbmUpXHJcbiAgKGxldFxyXG4gICBbW3AgdHMgJiB4c11cclxuICAgIChtYXAgc3RyaW5nL3RyaW0gKHN0cmluZy9zcGxpdCAoc3RyaW5nL3RyaW0gbGluZSkgI1wiIFwiKSldXHJcbiAgIChpZlxyXG4gICAgKGFuZFxyXG4gICAgICg9IFwiQHJldHVyblwiIHApXHJcbiAgICAgdHNcclxuICAgICAjPyg6Y2xqICguc3RhcnRzV2l0aCB0cyBcIntcIikgOmNsanMgKGdzdHJpbmcvc3RhcnRzV2l0aCB0cyBcIntcIikpKVxyXG4gICAgKHN0cmluZy9qb2luIFwiIFwiIChjb25jYXQgW3AgKHJlc29sdmUtdHlwZXMgZW52IHRzKV0geHMpKVxyXG4gICAgbGluZSkpXHJcbiAgOmVsc2VcclxuICBsaW5lKSlcclxuIn0gezpzeW0gZW1pdC1qcy1hcnJheSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtcyBjb21tYS1zZXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWpzLWFycmF5XHJcbiBbaXRlbXMgY29tbWEtc2VwXVxyXG4gKGVtaXRzIFwiW1wiIChjb21tYS1zZXAgaXRlbXMpIFwiXVwiKSlcclxuIn0gezpzeW0gZmluZC1ucy1zdGFydHMtd2l0aCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuZWVkbGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5kLW5zLXN0YXJ0cy13aXRoXHJcbiBbbmVlZGxlXVxyXG4gKHJlZHVjZS1rdlxyXG4gIChmblxyXG4gICBbeHMgbnMgX11cclxuICAgKHdoZW4gKD0gbmVlZGxlIChnZXQtZmlyc3QtbnMtc2VnbWVudCBucykpIChyZWR1Y2VkIG5lZWRsZSkpKVxyXG4gIG5pbFxyXG4gICg6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIEBlbnYvKmNvbXBpbGVyKikpKVxyXG4ifSB7OnN5bSBjaGVja2luZy10eXBlcz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2tpbmctdHlwZXM/XHJcbiBbXVxyXG4gKCN7Ondhcm5pbmcgOmVycm9yfVxyXG4gIChnZXQtaW4gQGVudi8qY29tcGlsZXIqIFs6b3B0aW9ucyA6Y2xvc3VyZS13YXJuaW5ncyA6Y2hlY2stdHlwZXNdKSkpXHJcbiJ9IHs6c3ltIGVtaXQtZm4tbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3tleHByIDpib2R5LCA6a2V5cyBbdHlwZSBuYW1lIHBhcmFtcyBlbnYgcmVjdXJzXX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWZuLW1ldGhvZFxyXG4gW3tleHByIDpib2R5LCA6a2V5cyBbdHlwZSBuYW1lIHBhcmFtcyBlbnYgcmVjdXJzXX1dXHJcbiAoZW1pdC13cmFwXHJcbiAgZW52XHJcbiAgKGVtaXRzIFwiKGZ1bmN0aW9uIFwiIChtdW5nZSBuYW1lKSBcIihcIilcclxuICAoZW1pdC1mbi1wYXJhbXMgcGFyYW1zKVxyXG4gIChlbWl0bG4gXCIpe1wiKVxyXG4gICh3aGVuIHR5cGUgKGVtaXRsbiBcInZhciBzZWxmX18gPSB0aGlzO1wiKSlcclxuICAod2hlbiByZWN1cnMgKGVtaXRsbiBcIndoaWxlKHRydWUpe1wiKSlcclxuICAoZW1pdHMgZXhwcilcclxuICAod2hlbiByZWN1cnMgKGVtaXRsbiBcImJyZWFrO1wiKSAoZW1pdGxuIFwifVwiKSlcclxuICAoZW1pdHMgXCJ9KVwiKSkpXHJcbiJ9IHs6c3ltIGVtaXQtY29tbWVudCwgOm1ldGEgezpkb2MgIkVtaXQgYSBuaWNlbHkgZm9ybWF0dGVkIGNvbW1lbnQgc3RyaW5nLiIsIDphcmdsaXN0cyBbW2RvYyBqc2RvY10gW2VudiBkb2MganNkb2NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWNvbW1lbnRcclxuIFwiRW1pdCBhIG5pY2VseSBmb3JtYXR0ZWQgY29tbWVudCBzdHJpbmcuXCJcclxuIChbZG9jIGpzZG9jXSAoZW1pdC1jb21tZW50IG5pbCBkb2MganNkb2MpKVxyXG4gKFtlbnYgZG9jIGpzZG9jXVxyXG4gIChsZXRcclxuICAgW2RvY3NcclxuICAgICh3aGVuIGRvYyBbZG9jXSlcclxuICAgIGRvY3NcclxuICAgIChpZiBqc2RvYyAoY29uY2F0IGRvY3MganNkb2MpIGRvY3MpXHJcbiAgICBkb2NzXHJcbiAgICAocmVtb3ZlIG5pbD8gZG9jcyldXHJcbiAgIChsZXRmblxyXG4gICAgWyhwcmludC1jb21tZW50LWxpbmVzXHJcbiAgICAgIFtlXVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbW3ggJiB5c11cclxuICAgICAgICAobWFwXHJcbiAgICAgICAgIChmbipcclxuICAgICAgICAgIFtwMV9fNDg2NTQjXVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgKGNoZWNraW5nLXR5cGVzPylcclxuICAgICAgICAgICAobXVuZ2UtcGFyYW0tcmV0dXJuIGVudiBwMV9fNDg2NTQjKVxyXG4gICAgICAgICAgIHAxX180ODY1NCMpKVxyXG4gICAgICAgICAoc3RyaW5nL3NwbGl0LWxpbmVzIGUpKV1cclxuICAgICAgIChlbWl0bG4gXCIgKiBcIiAoc3RyaW5nL3JlcGxhY2UgeCBcIiovXCIgXCIqIC9cIikpXHJcbiAgICAgICAoZG9zZXFcclxuICAgICAgICBbbmV4dC1saW5lIHlzXVxyXG4gICAgICAgIChlbWl0bG5cclxuICAgICAgICAgXCIgKiBcIlxyXG4gICAgICAgICAoLT5cclxuICAgICAgICAgIG5leHQtbGluZVxyXG4gICAgICAgICAgKHN0cmluZy9yZXBsYWNlICNcIl4gICBcIiBcIlwiKVxyXG4gICAgICAgICAgKHN0cmluZy9yZXBsYWNlIFwiKi9cIiBcIiogL1wiKSkpKSkpXVxyXG4gICAgKHdoZW5cclxuICAgICAoc2VxIGRvY3MpXHJcbiAgICAgKGVtaXRsbiBcIi8qKlwiKVxyXG4gICAgIChkb3NlcSBbZSBkb2NzXSAod2hlbiBlIChwcmludC1jb21tZW50LWxpbmVzIGUpKSlcclxuICAgICAoZW1pdGxuIFwiICovXCIpKSkpKSlcclxuIn0gezpzeW0gaGFzaC1zY29wZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1zY29wZVxyXG4gW3NdXHJcbiAoaGFzaC1jb21iaW5lXHJcbiAgIz8oOmNsaiAoaGFzaCAoOm5hbWUgcykpIDpjbGpzICgtaGFzaCAoOm5hbWUgcykpKVxyXG4gIChzaGFkb3ctZGVwdGggcykpKVxyXG4ifSB7OnN5bSBlbWl0LWFwcGx5LXRvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbbmFtZSBwYXJhbXMgZW52XX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LWFwcGx5LXRvXHJcbiBbezprZXlzIFtuYW1lIHBhcmFtcyBlbnZdfV1cclxuIChsZXRcclxuICBbYXJnbGlzdFxyXG4gICAoZ2Vuc3ltIFwiYXJnbGlzdF9fXCIpXHJcbiAgIGRlbGVnYXRlLW5hbWVcclxuICAgKHN0ciAobXVuZ2UgbmFtZSkgXCJfX2RlbGVnYXRlXCIpXVxyXG4gIChlbWl0bG4gXCIoZnVuY3Rpb24gKFwiIGFyZ2xpc3QgXCIpe1wiKVxyXG4gIChkb3NlcVxyXG4gICBbW2kgcGFyYW1dIChtYXAtaW5kZXhlZCB2ZWN0b3IgKGRyb3AtbGFzdCAyIHBhcmFtcykpXVxyXG4gICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgIChlbWl0IHBhcmFtKVxyXG4gICAoZW1pdHMgXCIgPSBjbGpzLmNvcmUuZmlyc3QoXCIpXHJcbiAgIChlbWl0bG4gYXJnbGlzdCBcIik7XCIpXHJcbiAgIChlbWl0bG4gYXJnbGlzdCBcIiA9IGNsanMuY29yZS5uZXh0KFwiIGFyZ2xpc3QgXCIpO1wiKSlcclxuICAoaWZcclxuICAgKDwgMSAoY291bnQgcGFyYW1zKSlcclxuICAgKGRvXHJcbiAgICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgICAoZW1pdCAobGFzdCAoYnV0bGFzdCBwYXJhbXMpKSlcclxuICAgIChlbWl0bG4gXCIgPSBjbGpzLmNvcmUuZmlyc3QoXCIgYXJnbGlzdCBcIik7XCIpXHJcbiAgICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgICAoZW1pdCAobGFzdCBwYXJhbXMpKVxyXG4gICAgKGVtaXRsbiBcIiA9IGNsanMuY29yZS5yZXN0KFwiIGFyZ2xpc3QgXCIpO1wiKVxyXG4gICAgKGVtaXRzIFwicmV0dXJuIFwiIGRlbGVnYXRlLW5hbWUgXCIoXCIpXHJcbiAgICAoZG9zZXFcclxuICAgICBbcGFyYW0gcGFyYW1zXVxyXG4gICAgIChlbWl0IHBhcmFtKVxyXG4gICAgICh3aGVuLW5vdCAoPSBwYXJhbSAobGFzdCBwYXJhbXMpKSAoZW1pdHMgXCIsXCIpKSlcclxuICAgIChlbWl0bG4gXCIpO1wiKSlcclxuICAgKGRvXHJcbiAgICAoZW1pdHMgXCJ2YXIgXCIpXHJcbiAgICAoZW1pdCAobGFzdCBwYXJhbXMpKVxyXG4gICAgKGVtaXRsbiBcIiA9IGNsanMuY29yZS5zZXEoXCIgYXJnbGlzdCBcIik7XCIpXHJcbiAgICAoZW1pdHMgXCJyZXR1cm4gXCIgZGVsZWdhdGUtbmFtZSBcIihcIilcclxuICAgIChkb3NlcVxyXG4gICAgIFtwYXJhbSBwYXJhbXNdXHJcbiAgICAgKGVtaXQgcGFyYW0pXHJcbiAgICAgKHdoZW4tbm90ICg9IHBhcmFtIChsYXN0IHBhcmFtcykpIChlbWl0cyBcIixcIikpKVxyXG4gICAgKGVtaXRsbiBcIik7XCIpKSlcclxuICAoZW1pdHMgXCJ9KVwiKSkpXHJcbiJ9IHs6c3ltIGVtaXRzLXN5bWJvbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0cy1zeW1ib2xcclxuIFtzeW1dXHJcbiAobGV0XHJcbiAgW25zXHJcbiAgIChuYW1lc3BhY2Ugc3ltKVxyXG4gICBuYW1lXHJcbiAgIChuYW1lIHN5bSlcclxuICAgc3ltc3RyXHJcbiAgIChpZi1ub3QgKG5pbD8gbnMpIChzdHIgbnMgXCIvXCIgbmFtZSkgbmFtZSldXHJcbiAgKGVtaXRzIFwibmV3IGNsanMuY29yZS5TeW1ib2woXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgbnMpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IG5hbWUpXHJcbiAgKGVtaXRzIFwiLFwiKVxyXG4gIChlbWl0LWNvbnN0YW50IHN5bXN0cilcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgKGhhc2ggc3ltKSlcclxuICAoZW1pdHMgXCIsXCIpXHJcbiAgKGVtaXQtY29uc3RhbnQgbmlsKVxyXG4gIChlbWl0cyBcIilcIikpKVxyXG4ifSB7OnN5bSBmYWxzZXktY29uc3RhbnQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmYWxzZXktY29uc3RhbnQ/XHJcbiBbZXhwcl1cclxuIChsZXRcclxuICBbezprZXlzIFtvcCBmb3JtIGNvbnN0LWV4cHJdfSAoYW5hL3Vud3JhcC1xdW90ZSBleHByKV1cclxuICAob3JcclxuICAgKGFuZCAoPSBvcCA6Y29uc3QpIChvciAoZmFsc2U/IGZvcm0pIChuaWw/IGZvcm0pKSlcclxuICAgKGFuZCAoc29tZT8gY29uc3QtZXhwcikgKGZhbHNleS1jb25zdGFudD8gY29uc3QtZXhwcikpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtY29uc3RhbnRzLWNvbW1hLXNlcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtY29uc3RhbnRzLWNvbW1hLXNlcFxyXG4gW2NzXVxyXG4gKGZuXHJcbiAgW11cclxuICAoZG9hbGxcclxuICAgKG1hcC1pbmRleGVkXHJcbiAgICAoZm4gW2kgbV0gKGlmIChldmVuPyBpKSAoZW1pdC1jb25zdGFudCBtKSAoZW1pdHMgbSkpKVxyXG4gICAgKGNvbW1hLXNlcCBjcykpKSkpXHJcbiJ9IHs6c3ltICpzb3VyY2UtbWFwLWRhdGEqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqc291cmNlLW1hcC1kYXRhKiBuaWwpXHJcbiJ9IHs6c3ltIGVtaXQtcmVjb3JkLXZhbHVlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25zIG5hbWUgaXRlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXJlY29yZC12YWx1ZVxyXG4gW25zIG5hbWUgaXRlbXNdXHJcbiAoZW1pdHMgbnMgXCIubWFwX19HVF9cIiBuYW1lIFwiKFwiIGl0ZW1zIFwiKVwiKSlcclxuIn0gezpzeW0gZW1pdC12YXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtpbmZvIGVudiBmb3JtXSwgOmFzIGFzdH1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXZhclxyXG4gW3s6a2V5cyBbaW5mbyBlbnYgZm9ybV0sIDphcyBhc3R9XVxyXG4gKGlmLWxldFxyXG4gIFtjb25zdC1leHByICg6Y29uc3QtZXhwciBhc3QpXVxyXG4gIChlbWl0IChhc3NvYyBjb25zdC1leHByIDplbnYgZW52KSlcclxuICAobGV0XHJcbiAgIFt7OmtleXMgW29wdGlvbnNdLCA6YXMgY2Vudn1cclxuICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgdmFyLW5hbWVcclxuICAgICg6bmFtZSBpbmZvKVxyXG4gICAgaW5mb1xyXG4gICAgKGlmXHJcbiAgICAgKD0gKG5hbWVzcGFjZSB2YXItbmFtZSkgXCJqc1wiKVxyXG4gICAgIChsZXRcclxuICAgICAgW2pzLW1vZHVsZS1uYW1lXHJcbiAgICAgICAoZ2V0LWluIGNlbnYgWzpqcy1tb2R1bGUtaW5kZXggKG5hbWUgdmFyLW5hbWUpIDpuYW1lXSldXHJcbiAgICAgIChvciBqcy1tb2R1bGUtbmFtZSAobmFtZSB2YXItbmFtZSkpKVxyXG4gICAgIGluZm8pXVxyXG4gICAoaWZcclxuICAgICg6YmluZGluZy1mb3JtPyBhc3QpXHJcbiAgICAoZW1pdHMgKG11bmdlIGFzdCkpXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoPSA6c3RhdGVtZW50ICg6Y29udGV4dCBlbnYpKVxyXG4gICAgIChsZXRcclxuICAgICAgW3Jlc2VydmVkXHJcbiAgICAgICAoY29uZC0+XHJcbiAgICAgICAganMtcmVzZXJ2ZWRcclxuICAgICAgICAoYW5kXHJcbiAgICAgICAgIChlczU+PSAoOmxhbmd1YWdlLW91dCBvcHRpb25zKSlcclxuICAgICAgICAgKHNvbWU/IChuYW1lc3BhY2UgdmFyLW5hbWUpKSlcclxuICAgICAgICAoc2V0L2RpZmZlcmVuY2UgYW5hL2VzNS1hbGxvd2VkKSlcclxuICAgICAgIGpzLW1vZHVsZVxyXG4gICAgICAgKGdldC1pblxyXG4gICAgICAgIGNlbnZcclxuICAgICAgICBbOmpzLW5hbWVzcGFjZXMgKG9yIChuYW1lc3BhY2UgdmFyLW5hbWUpIChuYW1lIHZhci1uYW1lKSldKVxyXG4gICAgICAgaW5mb1xyXG4gICAgICAgKGNvbmQtPiBpbmZvIChub3Q9IGZvcm0gJ2pzLy1JbmZpbml0eSkgKG11bmdlIHJlc2VydmVkKSldXHJcbiAgICAgIChlbWl0LXdyYXBcclxuICAgICAgIGVudlxyXG4gICAgICAgKGNhc2VcclxuICAgICAgICAoOm1vZHVsZS10eXBlIGpzLW1vZHVsZSlcclxuICAgICAgICA6Y29tbW9uanNcclxuICAgICAgICAoaWZcclxuICAgICAgICAgKG5hbWVzcGFjZSB2YXItbmFtZSlcclxuICAgICAgICAgKGVtaXRzXHJcbiAgICAgICAgICAobXVuZ2UgKG5hbWVzcGFjZSB2YXItbmFtZSkgcmVzZXJ2ZWQpXHJcbiAgICAgICAgICBcIltcXFwiZGVmYXVsdFxcXCJdLlwiXHJcbiAgICAgICAgICAobXVuZ2UgKG5hbWUgdmFyLW5hbWUpIHJlc2VydmVkKSlcclxuICAgICAgICAgKGVtaXRzIChtdW5nZSAobmFtZSB2YXItbmFtZSkgcmVzZXJ2ZWQpIFwiW1xcXCJkZWZhdWx0XFxcIl1cIikpXHJcbiAgICAgICAgOmVzNlxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoYW5kIChuYW1lc3BhY2UgdmFyLW5hbWUpICg9IFwiZGVmYXVsdFwiIChuYW1lIHZhci1uYW1lKSkpXHJcbiAgICAgICAgIChlbWl0cyAobXVuZ2UgKG5hbWVzcGFjZSB2YXItbmFtZSkgcmVzZXJ2ZWQpIFwiW1xcXCJkZWZhdWx0XFxcIl1cIilcclxuICAgICAgICAgKGVtaXRzIGluZm8pKVxyXG4gICAgICAgIChlbWl0cyBpbmZvKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIG1hcHBlZC10eXBlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbWFwcGVkLXR5cGVzIHtcIm5pbFwiIFwibnVsbFwifSlcclxuIn0gezpzeW0gcmVzb2x2ZS10eXBlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLXR5cGVzXHJcbiBbZW52IHRzXVxyXG4gKGxldFxyXG4gIFt0c1xyXG4gICAoLT4gdHMgc3RyaW5nL3RyaW0gKHN1YnMgMSAoZGVjIChjb3VudCB0cykpKSlcclxuICAgeHNcclxuICAgKHN0cmluZy9zcGxpdCB0cyAjXCJcXHxcIildXHJcbiAgKHN0clxyXG4gICBcIntcIlxyXG4gICAoc3RyaW5nL2pvaW5cclxuICAgIFwifFwiXHJcbiAgICAobWFwIChmbiogW3AxX180ODY1MyNdIChyZXNvbHZlLXR5cGUgZW52IHAxX180ODY1MyMpKSB4cykpXHJcbiAgIFwifVwiKSkpXHJcbiJ9IHs6c3ltICppbnB1dHMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqaW5wdXRzKiBuaWwpXHJcbiJ9IHs6c3ltIGVtaXQtc3RyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cHJdKX0sIDpzb3VyY2UgIihkZWZuIGVtaXQtc3RyIFtleHByXSAod2l0aC1vdXQtc3RyIChlbWl0IGV4cHIpKSlcclxuIn0gezpzeW0gZW1pdC1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5cyB2YWxzIGNvbW1hLXNlcCBkaXN0aW5jdC1rZXlzP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtbWFwXHJcbiBba2V5cyB2YWxzIGNvbW1hLXNlcCBkaXN0aW5jdC1rZXlzP11cclxuIChjb25kXHJcbiAgKHplcm8/IChjb3VudCBrZXlzKSlcclxuICAoZW1pdHMgXCJjbGpzLmNvcmUuUGVyc2lzdGVudEFycmF5TWFwLkVNUFRZXCIpXHJcbiAgKDw9IChjb3VudCBrZXlzKSBhcnJheS1tYXAtdGhyZXNob2xkKVxyXG4gIChpZlxyXG4gICAoZGlzdGluY3Qta2V5cz8ga2V5cylcclxuICAgKGVtaXRzXHJcbiAgICBcIm5ldyBjbGpzLmNvcmUuUGVyc2lzdGVudEFycmF5TWFwKG51bGwsIFwiXHJcbiAgICAoY291bnQga2V5cylcclxuICAgIFwiLCBbXCJcclxuICAgIChjb21tYS1zZXAgKGludGVybGVhdmUga2V5cyB2YWxzKSlcclxuICAgIFwiXSwgbnVsbClcIilcclxuICAgKGVtaXRzXHJcbiAgICBcImNsanMuY29yZS5QZXJzaXN0ZW50QXJyYXlNYXAuY3JlYXRlQXNJZkJ5QXNzb2MoW1wiXHJcbiAgICAoY29tbWEtc2VwIChpbnRlcmxlYXZlIGtleXMgdmFscykpXHJcbiAgICBcIl0pXCIpKVxyXG4gIDplbHNlXHJcbiAgKGVtaXRzXHJcbiAgIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRIYXNoTWFwLmZyb21BcnJheXMoW1wiXHJcbiAgIChjb21tYS1zZXAga2V5cylcclxuICAgXCJdLFtcIlxyXG4gICAoY29tbWEtc2VwIHZhbHMpXHJcbiAgIFwiXSlcIikpKVxyXG4ifSB7OnN5bSBlbWl0LXZlY3RvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpdGVtcyBjb21tYS1zZXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0LXZlY3RvclxyXG4gW2l0ZW1zIGNvbW1hLXNlcF1cclxuIChpZlxyXG4gIChlbXB0eT8gaXRlbXMpXHJcbiAgKGVtaXRzIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRWZWN0b3IuRU1QVFlcIilcclxuICAobGV0XHJcbiAgIFtjbnQgKGNvdW50IGl0ZW1zKV1cclxuICAgKGlmXHJcbiAgICAoPCBjbnQgMzIpXHJcbiAgICAoZW1pdHNcclxuICAgICBcIm5ldyBjbGpzLmNvcmUuUGVyc2lzdGVudFZlY3RvcihudWxsLCBcIlxyXG4gICAgIGNudFxyXG4gICAgIFwiLCA1LCBjbGpzLmNvcmUuUGVyc2lzdGVudFZlY3Rvci5FTVBUWV9OT0RFLCBbXCJcclxuICAgICAoY29tbWEtc2VwIGl0ZW1zKVxyXG4gICAgIFwiXSwgbnVsbClcIilcclxuICAgIChlbWl0c1xyXG4gICAgIFwiY2xqcy5jb3JlLlBlcnNpc3RlbnRWZWN0b3IuZnJvbUFycmF5KFtcIlxyXG4gICAgIChjb21tYS1zZXAgaXRlbXMpXHJcbiAgICAgXCJdLCB0cnVlKVwiKSkpKSlcclxuIn0gezpzeW0gdHJ1dGh5LWNvbnN0YW50PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHByXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJ1dGh5LWNvbnN0YW50P1xyXG4gW2V4cHJdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbb3AgZm9ybSBjb25zdC1leHByXX0gKGFuYS91bndyYXAtcXVvdGUgZXhwcildXHJcbiAgKG9yXHJcbiAgIChhbmRcclxuICAgICg9IG9wIDpjb25zdClcclxuICAgIGZvcm1cclxuICAgIChub3RcclxuICAgICAob3JcclxuICAgICAgKGFuZCAoc3RyaW5nPyBmb3JtKSAoPSBmb3JtIFwiXCIpKVxyXG4gICAgICAoYW5kIChudW1iZXI/IGZvcm0pICh6ZXJvPyBmb3JtKSkpKSlcclxuICAgKGFuZCAoc29tZT8gY29uc3QtZXhwcikgKHRydXRoeS1jb25zdGFudD8gY29uc3QtZXhwcikpKSkpXHJcbiJ9IHs6c3ltIGVtaXRsbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tdIFthXSBbYSBiXSBbYSBiIGNdIFthIGIgYyBkXSBbYSBiIGMgZCBlXSBbYSBiIGMgZCBlICYgeHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbWl0bG5cclxuIChbXSAoX2VtaXRsbikpXHJcbiAoW2FdIChlbWl0cyBhKSAoX2VtaXRsbikpXHJcbiAoW2EgYl0gKGVtaXRzIGEpIChlbWl0cyBiKSAoX2VtaXRsbikpXHJcbiAoW2EgYiBjXSAoZW1pdHMgYSkgKGVtaXRzIGIpIChlbWl0cyBjKSAoX2VtaXRsbikpXHJcbiAoW2EgYiBjIGRdIChlbWl0cyBhKSAoZW1pdHMgYikgKGVtaXRzIGMpIChlbWl0cyBkKSAoX2VtaXRsbikpXHJcbiAoW2EgYiBjIGQgZV1cclxuICAoZW1pdHMgYSlcclxuICAoZW1pdHMgYilcclxuICAoZW1pdHMgYylcclxuICAoZW1pdHMgZClcclxuICAoZW1pdHMgZSlcclxuICAoX2VtaXRsbikpXHJcbiAoW2EgYiBjIGQgZSAmIHhzXVxyXG4gIChlbWl0cyBhKVxyXG4gIChlbWl0cyBiKVxyXG4gIChlbWl0cyBjKVxyXG4gIChlbWl0cyBkKVxyXG4gIChlbWl0cyBlKVxyXG4gIChkb3NlcSBbeCB4c10gKGVtaXRzIHgpKVxyXG4gIChfZW1pdGxuKSkpXHJcbiJ9IHs6c3ltIGVtaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gZW1pdFxyXG4gW2FzdF1cclxuICh3aGVuXHJcbiAgKnNvdXJjZS1tYXAtZGF0YSpcclxuICAobGV0XHJcbiAgIFt7OmtleXMgW2Vudl19IGFzdF1cclxuICAgKHdoZW5cclxuICAgICg6bGluZSBlbnYpXHJcbiAgICAobGV0XHJcbiAgICAgW3s6a2V5cyBbbGluZSBjb2x1bW5dfSBlbnZdXHJcbiAgICAgKHN3YXAhXHJcbiAgICAgICpzb3VyY2UtbWFwLWRhdGEqXHJcbiAgICAgIChmblxyXG4gICAgICAgW21dXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW21pbmZvXHJcbiAgICAgICAgIChjb25kLT5cclxuICAgICAgICAgIHs6Z2NvbFxyXG4gICAgICAgICAgICM/KDpjbGogKC5nZXQgKnNvdXJjZS1tYXAtZGF0YS1nZW4tY29sKikgOmNsanMgKDpnZW4tY29sIG0pKSxcclxuICAgICAgICAgICA6Z2xpbmUgKDpnZW4tbGluZSBtKX1cclxuICAgICAgICAgICgjezpiaW5kaW5nIDp2YXIgOmpzLXZhciA6bG9jYWx9ICg6b3AgYXN0KSlcclxuICAgICAgICAgIChhc3NvYyA6bmFtZSAoc3RyICgtPiBhc3QgOmluZm8gOm5hbWUpKSkpXVxyXG4gICAgICAgICh1cGRhdGUtaW5cclxuICAgICAgICAgbVxyXG4gICAgICAgICBbOnNvdXJjZS1tYXAgKGRlYyBsaW5lKV1cclxuICAgICAgICAgKGZuaWxcclxuICAgICAgICAgIChmblxyXG4gICAgICAgICAgIFtsaW5lXVxyXG4gICAgICAgICAgICh1cGRhdGUtaW5cclxuICAgICAgICAgICAgbGluZVxyXG4gICAgICAgICAgICBbKGlmIGNvbHVtbiAoZGVjIGNvbHVtbikgMCldXHJcbiAgICAgICAgICAgIChmbmlsIChmbiBbY29sdW1uXSAoY29uaiBjb2x1bW4gbWluZm8pKSBbXSkpKVxyXG4gICAgICAgICAgKHNvcnRlZC1tYXApKSkpKSkpKSkpXHJcbiAoZW1pdCogYXN0KSlcclxuIn0gezpzeW0gc2FmZS10ZXN0PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNhZmUtdGVzdD9cclxuIFtlbnYgZV1cclxuIChsZXRcclxuICBbdGFnIChhbmEvaW5mZXItdGFnIGVudiBlKV1cclxuICAob3IgKCN7J3NlcSAnYm9vbGVhbn0gdGFnKSAodHJ1dGh5LWNvbnN0YW50PyBlKSkpKVxyXG4ifSB7OnN5bSBlbWl0LWV4dGVybnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZXh0ZXJuc10gW3ByZWZpeCBleHRlcm5zIHRvcC1sZXZlbCBrbm93bi1leHRlcm5zXV19LCA6c291cmNlICIoZGVmblxyXG4gZW1pdC1leHRlcm5zXHJcbiAoW2V4dGVybnNdXHJcbiAgKGVtaXQtZXh0ZXJuc1xyXG4gICBbXVxyXG4gICBleHRlcm5zXHJcbiAgIChhdG9tICN7fSlcclxuICAgKHdoZW4gZW52Lypjb21waWxlciogKGFuYS9nZXQtZXh0ZXJucykpKSlcclxuIChbcHJlZml4IGV4dGVybnMgdG9wLWxldmVsIGtub3duLWV4dGVybnNdXHJcbiAgKGxvb3BcclxuICAgW2tzIChzZXEgKGtleXMgZXh0ZXJucykpXVxyXG4gICAod2hlblxyXG4gICAga3NcclxuICAgIChsZXRcclxuICAgICBbayAoZmlyc3Qga3MpIFt0b3AgOmFzIHByZWZpeCddIChjb25qIHByZWZpeCBrKV1cclxuICAgICAod2hlblxyXG4gICAgICAoYW5kIChub3Q9ICdwcm90b3R5cGUgaykgKG5pbD8gKGdldC1pbiBrbm93bi1leHRlcm5zIHByZWZpeCcpKSlcclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKG9yIChjb250YWlucz8gQHRvcC1sZXZlbCB0b3ApIChjb250YWlucz8ga25vd24tZXh0ZXJucyB0b3ApKVxyXG4gICAgICAgKGRvXHJcbiAgICAgICAgKGVtaXRsbiBcInZhciBcIiAoc3RyaW5nL2pvaW4gXCIuXCIgKG1hcCBtdW5nZSBwcmVmaXgnKSkgXCI7XCIpXHJcbiAgICAgICAgKHN3YXAhIHRvcC1sZXZlbCBjb25qIHRvcCkpXHJcbiAgICAgICAoZW1pdGxuIChzdHJpbmcvam9pbiBcIi5cIiAobWFwIG11bmdlIHByZWZpeCcpKSBcIjtcIikpKVxyXG4gICAgIChsZXRcclxuICAgICAgW20gKGdldCBleHRlcm5zIGspXVxyXG4gICAgICAod2hlbi1ub3RcclxuICAgICAgIChlbXB0eT8gbSlcclxuICAgICAgIChlbWl0LWV4dGVybnMgcHJlZml4JyBtIHRvcC1sZXZlbCBrbm93bi1leHRlcm5zKSkpKVxyXG4gICAgKHJlY3VyIChuZXh0IGtzKSkpKSkpXHJcbiJ9IHs6c3ltIGVtaXQtZ2xvYmFsLWV4cG9ydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucy1uYW1lIGdsb2JhbC1leHBvcnRzIGxpYl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtaXQtZ2xvYmFsLWV4cG9ydFxyXG4gW25zLW5hbWUgZ2xvYmFsLWV4cG9ydHMgbGliXVxyXG4gKGVtaXRsblxyXG4gIChtdW5nZSBucy1uYW1lKVxyXG4gIFwiLlwiXHJcbiAgKGFuYS9tdW5nZS1nbG9iYWwtZXhwb3J0IGxpYilcclxuICBcIiA9IGdvb2cuZ2xvYmFsXCJcclxuICAoLT4+XHJcbiAgIChzdHJpbmcvc3BsaXRcclxuICAgIChuYW1lXHJcbiAgICAgKG9yXHJcbiAgICAgIChnZXQgZ2xvYmFsLWV4cG9ydHMgKHN5bWJvbCBsaWIpKVxyXG4gICAgICAoZ2V0IGdsb2JhbC1leHBvcnRzIChuYW1lIGxpYikpKSlcclxuICAgICNcIlxcLlwiKVxyXG4gICAobWFwIChmbiBbcHJvcF0gKHN0ciBcIltcXFwiXCIgcHJvcCBcIlxcXCJdXCIpKSlcclxuICAgKGFwcGx5IHN0cikpXHJcbiAgXCI7XCIpKVxyXG4ifSB7OnN5bSBkaXN0aW5jdC1jb25zdGFudHM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2l0ZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGlzdGluY3QtY29uc3RhbnRzP1xyXG4gW2l0ZW1zXVxyXG4gKGxldFxyXG4gIFtpdGVtcyAobWFwIGFuYS91bndyYXAtcXVvdGUgaXRlbXMpXVxyXG4gIChhbmRcclxuICAgKGV2ZXJ5PyAoZm4qIFtwMV9fNDg2NTEjXSAoPSAoOm9wIHAxX180ODY1MSMpIDpjb25zdCkpIGl0ZW1zKVxyXG4gICAoPSAoY291bnQgKGludG8gI3t9IGl0ZW1zKSkgKGNvdW50IGl0ZW1zKSkpKSlcclxuIn0gezpzeW0gc2hhZG93LWRlcHRoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaGFkb3ctZGVwdGhcclxuIFtzXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW25hbWUgaW5mb119IHNdXHJcbiAgKGxvb3BcclxuICAgW2QgMCB7OmtleXMgW3NoYWRvd119IGluZm9dXHJcbiAgIChjb25kXHJcbiAgICBzaGFkb3dcclxuICAgIChyZWN1ciAoaW5jIGQpIHNoYWRvdylcclxuICAgIChmaW5kLW5zLXN0YXJ0cy13aXRoIChzdHIgbmFtZSkpXHJcbiAgICAoaW5jIGQpXHJcbiAgICA6ZWxzZVxyXG4gICAgZCkpKSlcclxuIn0pLCBjbGpzLnNvdXJjZS1tYXAuYmFzZTY0ICh7OnN5bSBjaGFyczY0LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gY2hhcnM2NFxyXG4gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIpXHJcbiJ9IHs6c3ltIGNoYXItPmludCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgY2hhci0+aW50ICh6aXBtYXAgY2hhcnM2NCAocmFuZ2UgMCA2NCkpKVxyXG4ifSB7OnN5bSBpbnQtPmNoYXIsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGludC0+Y2hhciAoemlwbWFwIChyYW5nZSAwIDY0KSBjaGFyczY0KSlcclxuIn0gezpzeW0gZW5jb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbmNvZGVcclxuIFtuXVxyXG4gKGxldFxyXG4gIFtlIChmaW5kIGludC0+Y2hhciBuKV1cclxuICAoaWZcclxuICAgZVxyXG4gICAoc2Vjb25kIGUpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiIG4pKSkpKSlcclxuIn0gezpzeW0gZGVjb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWNvZGVcclxuIFtjXVxyXG4gKGxldFxyXG4gIFtlIChmaW5kIGNoYXItPmludCBjKV1cclxuICAoaWZcclxuICAgZVxyXG4gICAoc2Vjb25kIGUpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJOb3QgYSB2YWxpZCBiYXNlIDY0IGRpZ2l0OiBcIiBjKSkpKSkpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIuaW1wbC51dGlscyAoezpzeW0gcmVhZGVyLWNvbmRpdGlvbmFsLCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbC5cbiAgSWYgdHJ1ZSwgc3BsaWNpbmc/IGluZGljYXRlcyByZWFkLWNvbmQtc3BsaWNpbmcuIiwgOmFyZ2xpc3RzIChbZm9ybSBzcGxpY2luZz9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkZXItY29uZGl0aW9uYWxcclxuIFwiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbC5cXG4gIElmIHRydWUsIHNwbGljaW5nPyBpbmRpY2F0ZXMgcmVhZC1jb25kLXNwbGljaW5nLlwiXHJcbiBbZm9ybSBzcGxpY2luZz9dXHJcbiAoUmVhZGVyQ29uZGl0aW9uYWwuIHNwbGljaW5nPyBmb3JtKSlcclxuIn0gezpzeW0gd2hpdGVzcGFjZT8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlIiwgOmFyZ2xpc3RzIChbY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aGl0ZXNwYWNlP1xyXG4gXCJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyB3aGl0ZXNwYWNlXCJcclxuIFtjaF1cclxuICh3aGVuLW5vdCAobmlsPyBjaCkgKGlmIChpZGVudGljYWw/IGNoIFxcLCkgdHJ1ZSAoLnRlc3Qgd3MtcnggY2gpKSkpXHJcbiJ9IHs6c3ltIGNoYXItY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjaCBiYXNlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hhci1jb2RlXHJcbiBbY2ggYmFzZV1cclxuIChsZXQgW2NvZGUgKGpzL3BhcnNlSW50IGNoIGJhc2UpXSAoaWYgKGpzL2lzTmFOIGNvZGUpIC0xIGNvZGUpKSlcclxuIn0gezpzeW0gbGFzdC1pZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbGFzdC1pZCAoYXRvbSAwKSlcclxuIn0gezpzeW0gY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBjaGFyIFt4XSAod2hlbi1ub3QgKG5pbD8geCkgKGNsanMuY29yZS9jaGFyIHgpKSlcclxuIn0gezpzeW0gbnVtZXJpYz8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBudW1lcmljIiwgOmFyZ2xpc3RzIChbY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudW1lcmljP1xyXG4gXCJDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBudW1lcmljXCJcclxuIFtjaF1cclxuICh3aGVuLW5vdCAobmlsPyBjaCkgKGdzdHJpbmcvaXNOdW1lcmljIGNoKSkpXHJcbiJ9IHs6c3ltIHNlY29uZCcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbW2EgYl1dKX0sIDpzb3VyY2UgIihkZWZuIHNlY29uZCcgW1thIGJdXSAod2hlbi1ub3QgYSBiKSlcclxuIn0gezpzeW0gZGVzdWdhci1tZXRhLCA6bWV0YSB7OmRvYyAiUmVzb2x2ZXMgc3ludGFjdGljYWwgc3VnYXIgaW4gbWV0YWRhdGEiLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVzdWdhci1tZXRhXHJcbiBcIlJlc29sdmVzIHN5bnRhY3RpY2FsIHN1Z2FyIGluIG1ldGFkYXRhXCJcclxuIFtmXVxyXG4gKGNvbmRcclxuICAoa2V5d29yZD8gZilcclxuICB7ZiB0cnVlfVxyXG4gIChzeW1ib2w/IGYpXHJcbiAgezp0YWcgZn1cclxuICAoc3RyaW5nPyBmKVxyXG4gIHs6dGFnIGZ9XHJcbiAgOmVsc2VcclxuICBmKSlcclxuIn0gezpzeW0gbmV4dC1pZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIG5leHQtaWQgW10gKHN3YXAhIGxhc3QtaWQgaW5jKSlcclxuIn0gezpzeW0gZXgtaW5mbz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuIGV4LWluZm8/IFtleF0gKGluc3RhbmNlPyBjbGpzLmNvcmUuRXhjZXB0aW9uSW5mbyBleCkpXHJcbiJ9IHs6c3ltIHJlYWRlci1jb25kaXRpb25hbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWwiLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1jb25kaXRpb25hbD9cclxuIFwiUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIGlzIHRoZSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsXCJcclxuIFt2YWx1ZV1cclxuIChpbnN0YW5jZT8gUmVhZGVyQ29uZGl0aW9uYWwgdmFsdWUpKVxyXG4ifSB7OnN5bSBuZXdsaW5lPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lIiwgOmFyZ2xpc3RzIChbY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5ld2xpbmU/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lXCJcclxuIFtjXVxyXG4gKG9yIChpZGVudGljYWw/IFxcbmV3bGluZSBjKSAoaWRlbnRpY2FsPyBcIlxcblwiIGMpIChuaWw/IGMpKSlcclxuIn0gezpzeW0gbmFtZXNwYWNlLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbnMga2V5c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hbWVzcGFjZS1rZXlzXHJcbiBbbnMga2V5c11cclxuIChmb3JcclxuICBba2V5IGtleXNdXHJcbiAgKGlmXHJcbiAgIChvciAoc3ltYm9sPyBrZXkpIChrZXl3b3JkPyBrZXkpKVxyXG4gICAobGV0XHJcbiAgICBbW2tleS1ucyBrZXktbmFtZV1cclxuICAgICAoKGp1eHQgbmFtZXNwYWNlIG5hbWUpIGtleSlcclxuICAgICAtPmtleVxyXG4gICAgIChpZiAoc3ltYm9sPyBrZXkpIHN5bWJvbCBrZXl3b3JkKV1cclxuICAgIChjb25kXHJcbiAgICAgKG5pbD8ga2V5LW5zKVxyXG4gICAgICgtPmtleSBucyBrZXktbmFtZSlcclxuICAgICAoPSBcIl9cIiBrZXktbnMpXHJcbiAgICAgKC0+a2V5IGtleS1uYW1lKVxyXG4gICAgIDplbHNlXHJcbiAgICAga2V5KSlcclxuICAga2V5KSkpXHJcbiJ9IHs6c3ltIHdzLXJ4LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB3cy1yeCAjXCJbXFxzXVwiKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLmNoYW5uZWxzICh7OnN5bSBib3gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdmFsXSl9LCA6c291cmNlICIoZGVmbiBib3ggW3ZhbF0gKHJlaWZ5IGNsanMuY29yZS9JRGVyZWYgKC1kZXJlZiBbX10gdmFsKSkpXHJcbiJ9IHs6c3ltIHB1dC1hY3RpdmU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2JveF0pfSwgOnNvdXJjZSAiKGRlZm4gcHV0LWFjdGl2ZT8gW2JveF0gKGltcGwvYWN0aXZlPyAoLi1oYW5kbGVyIGJveCkpKVxyXG4ifSB7OnN5bSBNQVhfRElSVFksIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1BWF9ESVJUWSA2NClcclxuIn0gezpzeW0gYWJvcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIE1NQ30gezpzeW0gTU1DLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoYWJvcnQpfSB7OnN5bSBjaGFuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2J1Zl0gW2J1ZiB4Zm9ybV0gW2J1ZiB4Zm9ybSBleGhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFuXHJcbiAoW2J1Zl0gKGNoYW4gYnVmIG5pbCkpXHJcbiAoW2J1ZiB4Zm9ybV0gKGNoYW4gYnVmIHhmb3JtIG5pbCkpXHJcbiAoW2J1ZiB4Zm9ybSBleGhdXHJcbiAgKE1hbnlUb01hbnlDaGFubmVsLlxyXG4gICAoYnVmZmVycy9yaW5nLWJ1ZmZlciAzMilcclxuICAgMFxyXG4gICAoYnVmZmVycy9yaW5nLWJ1ZmZlciAzMilcclxuICAgMFxyXG4gICBidWZcclxuICAgZmFsc2VcclxuICAgKGxldFxyXG4gICAgW2FkZCEgKGlmIHhmb3JtICh4Zm9ybSBpbXBsL2FkZCEpIGltcGwvYWRkISldXHJcbiAgICAoZm5cclxuICAgICAoW2J1Zl0gKHRyeSAoYWRkISBidWYpIChjYXRjaCA6ZGVmYXVsdCB0IChoYW5kbGUgYnVmIGV4aCB0KSkpKVxyXG4gICAgIChbYnVmIHZhbF1cclxuICAgICAgKHRyeSAoYWRkISBidWYgdmFsKSAoY2F0Y2ggOmRlZmF1bHQgdCAoaGFuZGxlIGJ1ZiBleGggdCkpKSkpKSkpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLmRpc3BhdGNoICh7OnN5bSB0YXNrcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdGFza3MgKGJ1ZmZlcnMvcmluZy1idWZmZXIgMzIpKVxyXG4ifSB7OnN5bSBydW5uaW5nPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgcnVubmluZz8gZmFsc2UpXHJcbiJ9IHs6c3ltIHF1ZXVlZD8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHF1ZXVlZD8gZmFsc2UpXHJcbiJ9IHs6c3ltIFRBU0tfQkFUQ0hfU0laRSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgVEFTS19CQVRDSF9TSVpFIDEwMjQpXHJcbiJ9IHs6c3ltIHByb2Nlc3MtbWVzc2FnZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJvY2Vzcy1tZXNzYWdlc1xyXG4gW11cclxuIChzZXQhIHJ1bm5pbmc/IHRydWUpXHJcbiAoc2V0ISBxdWV1ZWQ/IGZhbHNlKVxyXG4gKGxvb3BcclxuICBbY291bnQgMF1cclxuICAobGV0XHJcbiAgIFttICgucG9wIHRhc2tzKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAobmlsPyBtKVxyXG4gICAgKG0pXHJcbiAgICAod2hlbiAoPCBjb3VudCBUQVNLX0JBVENIX1NJWkUpIChyZWN1ciAoaW5jIGNvdW50KSkpKSkpXHJcbiAoc2V0ISBydW5uaW5nPyBmYWxzZSlcclxuICh3aGVuICg+ICguLWxlbmd0aCB0YXNrcykgMCkgKHF1ZXVlLWRpc3BhdGNoZXIpKSlcclxuIn0gezpzeW0gcXVldWUtZGlzcGF0Y2hlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdWV1ZS1kaXNwYXRjaGVyXHJcbiBbXVxyXG4gKHdoZW4tbm90XHJcbiAgKGFuZCBxdWV1ZWQ/IHJ1bm5pbmc/KVxyXG4gIChzZXQhIHF1ZXVlZD8gdHJ1ZSlcclxuICAoZ29vZy5hc3luYy5uZXh0VGljayBwcm9jZXNzLW1lc3NhZ2VzKSkpXHJcbiJ9IHs6c3ltIHJ1biwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmbiBydW4gW2ZdICgudW5ib3VuZGVkLXVuc2hpZnQgdGFza3MgZikgKHF1ZXVlLWRpc3BhdGNoZXIpKVxyXG4ifSB7OnN5bSBxdWV1ZS1kZWxheSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmIGRlbGF5XSl9LCA6c291cmNlICIoZGVmbiBxdWV1ZS1kZWxheSBbZiBkZWxheV0gKGpzL3NldFRpbWVvdXQgZiBkZWxheSkpXHJcbiJ9KSwgcGFyZW4tc291cC5jb3JlICh7OnN5bSBjYW4tdW5kbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3JdKX0sIDpzb3VyY2UgIihkZWZuIGNhbi11bmRvIFtlZGl0b3JdIChjYW4tdW5kbz8gZWRpdG9yKSlcclxuIn0gezpzeW0gc2hvdy1lcnJvci1tZXNzYWdlISwgOm1ldGEgezpkb2MgIlNob3dzIGEgcG9wdXAgd2l0aCBhbiBlcnJvciBtZXNzYWdlLiIsIDphcmdsaXN0cyAoW3BhcmVudC1lbGVtIGV2ZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2hvdy1lcnJvci1tZXNzYWdlIVxyXG4gXCJTaG93cyBhIHBvcHVwIHdpdGggYW4gZXJyb3IgbWVzc2FnZS5cIlxyXG4gW3BhcmVudC1lbGVtIGV2ZW50XVxyXG4gKGxldFxyXG4gIFtlbGVtXHJcbiAgICguLXRhcmdldCBldmVudClcclxuICAgeFxyXG4gICAoLi1jbGllbnRYIGV2ZW50KVxyXG4gICB5XHJcbiAgICguLWNsaWVudFkgZXZlbnQpXHJcbiAgIHBvcHVwXHJcbiAgICguY3JlYXRlRWxlbWVudCBqcy9kb2N1bWVudCBcImRpdlwiKV1cclxuICAoc2V0ISAoLi10ZXh0Q29udGVudCBwb3B1cCkgKC0+IGVsZW0gLi1kYXRhc2V0IC4tbWVzc2FnZSkpXHJcbiAgKHNldCEgKC4tdG9wICguLXN0eWxlIHBvcHVwKSkgKHN0ciB5IFwicHhcIikpXHJcbiAgKHNldCEgKC4tbGVmdCAoLi1zdHlsZSBwb3B1cCkpIChzdHIgeCBcInB4XCIpKVxyXG4gIChzZXQhICguLWNsYXNzTmFtZSBwb3B1cCkgXCJlcnJvci10ZXh0XCIpXHJcbiAgKC5hcHBlbmRDaGlsZCBwYXJlbnQtZWxlbSBwb3B1cCkpKVxyXG4ifSB7OnN5bSBmb2N1c2VkLXRleHQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBmb2N1c2VkLXRleHQgW10gKHNvbWUtPiAoZG9tL2dldC1mb2N1c2VkLWZvcm0pIC4tdGV4dENvbnRlbnQpKVxyXG4ifSB7OnN5bSBzZWxlY3RlZC10ZXh0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlbGVjdGVkLXRleHRcclxuIFtdXHJcbiAobGV0XHJcbiAgW3MgKC0+IGpzL3dpbmRvdyAuZ2V0U2VsZWN0aW9uIC50b1N0cmluZyldXHJcbiAgKHdoZW4tbm90IChlbXB0eT8gcykgcykpKVxyXG4ifSB7OnN5bSBjYW4tcmVkbz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gY2FuLXJlZG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yXSl9LCA6c291cmNlICIoZGVmbiBjYW4tcmVkbyBbZWRpdG9yXSAoY2FuLXJlZG8/IGVkaXRvcikpXHJcbiJ9IHs6c3ltIHJhaW5ib3ctZGVsaW1pdGVycywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgb2YgZWxlbWVudHMgYW5kIGNsYXNzIG5hbWVzLiIsIDphcmdsaXN0cyBbW3BhcmVudCBsZXZlbF0gW3BhcmVudCBsZXZlbCBtXV19LCA6c291cmNlICIoZGVmblxyXG4gcmFpbmJvdy1kZWxpbWl0ZXJzXHJcbiBcIlJldHVybnMgYSBtYXAgb2YgZWxlbWVudHMgYW5kIGNsYXNzIG5hbWVzLlwiXHJcbiAoW3BhcmVudCBsZXZlbF1cclxuICAocGVyc2lzdGVudCEgKHJhaW5ib3ctZGVsaW1pdGVycyBwYXJlbnQgbGV2ZWwgKHRyYW5zaWVudCB7fSkpKSlcclxuIChbcGFyZW50IGxldmVsIG1dXHJcbiAgKHJlZHVjZVxyXG4gICAoZm5cclxuICAgIFttIGVsZW1dXHJcbiAgICAobGV0XHJcbiAgICAgW2NsYXNzZXMgKC4tY2xhc3NMaXN0IGVsZW0pXVxyXG4gICAgIChjb25kXHJcbiAgICAgICguY29udGFpbnMgY2xhc3NlcyBcImRlbGltaXRlclwiKVxyXG4gICAgICAoYXNzb2MhIG0gZWxlbSAoc3RyIFwicmFpbmJvdy1cIiAobW9kIGxldmVsIHJhaW5ib3ctY291bnQpKSlcclxuICAgICAgKC5jb250YWlucyBjbGFzc2VzIFwiY29sbGVjdGlvblwiKVxyXG4gICAgICAocmFpbmJvdy1kZWxpbWl0ZXJzIGVsZW0gKGluYyBsZXZlbCkgbSlcclxuICAgICAgOmVsc2VcclxuICAgICAgbSkpKVxyXG4gICBtXHJcbiAgICgtPiBwYXJlbnQgLi1jaGlsZHJlbiBhcnJheS1zZXEpKSkpXHJcbiJ9IHs6c3ltIHVwISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIGFsdD9dKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHJlZnJlc2ghLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgc3RhdGVdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHVuZG8hLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHJlZnJlc2gtY3Vyc29yLXBvc2l0aW9uISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50IHs6a2V5cyBbY3JvcHBlZC1zdGF0ZV0sIDphcyBzdGF0ZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWN1cnNvci1wb3NpdGlvbiFcclxuIFtjb250ZW50IHs6a2V5cyBbY3JvcHBlZC1zdGF0ZV0sIDphcyBzdGF0ZX1dXHJcbiAoaWZcclxuICAoc29tZS0+PiBjcm9wcGVkLXN0YXRlIDplbGVtZW50ICguY29udGFpbnMgY29udGVudCkpXHJcbiAgKHNvbWUtPlxyXG4gICBjcm9wcGVkLXN0YXRlXHJcbiAgIDplbGVtZW50XHJcbiAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgKDpjdXJzb3ItcG9zaXRpb24gY3JvcHBlZC1zdGF0ZSkpKVxyXG4gIChpZlxyXG4gICAoYW5kICg6c2VsZWN0aW9uLWNoYW5nZT8gc3RhdGUpICg6b3JpZ2luYWwtY3Vyc29yLXBvc2l0aW9uIHN0YXRlKSlcclxuICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISBjb250ZW50ICg6b3JpZ2luYWwtY3Vyc29yLXBvc2l0aW9uIHN0YXRlKSlcclxuICAgKGRvbS9zZXQtY3Vyc29yLXBvc2l0aW9uISBjb250ZW50ICg6Y3Vyc29yLXBvc2l0aW9uIHN0YXRlKSkpKSlcclxuIn0gezpzeW0ga2V5LW5hbWU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHRoZSBzdXBwbGllZCBrZXkgZXZlbnQgaW52b2x2ZXMgdGhlIGtleShzKSBkZXNjcmliZWQgYnkga2V5LW5hbWUuIiwgOmFyZ2xpc3RzIChbZXZlbnQga2V5LW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXktbmFtZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHRoZSBzdXBwbGllZCBrZXkgZXZlbnQgaW52b2x2ZXMgdGhlIGtleShzKSBkZXNjcmliZWQgYnkga2V5LW5hbWUuXCJcclxuIFtldmVudCBrZXktbmFtZV1cclxuIChsZXRcclxuICBbY29kZSAoa2V5LWNvZGUgZXZlbnQpXVxyXG4gIChjYXNlXHJcbiAgIGtleS1uYW1lXHJcbiAgIDp1bmRvLW9yLXJlZG9cclxuICAgKGFuZCAob3IgKC4tbWV0YUtleSBldmVudCkgKC4tY3RybEtleSBldmVudCkpICg9IGNvZGUgOTApKVxyXG4gICA6dGFiXHJcbiAgICg9IGNvZGUgOSlcclxuICAgOmVudGVyXHJcbiAgICg9IGNvZGUgMTMpXHJcbiAgIDphcnJvd3NcclxuICAgKGNvbnRhaW5zPyAjezM5IDQwIDM4IDM3fSBjb2RlKVxyXG4gICA6dXAtYXJyb3dcclxuICAgKD0gY29kZSAzOClcclxuICAgOmRvd24tYXJyb3dcclxuICAgKD0gY29kZSA0MClcclxuICAgOmdlbmVyYWxcclxuICAgKG5vdFxyXG4gICAgKG9yXHJcbiAgICAgKGNvbnRhaW5zPyAjezAgOTEgOTMgMTcgMTYgMTh9IGNvZGUpXHJcbiAgICAgKC4tY3RybEtleSBldmVudClcclxuICAgICAoLi1tZXRhS2V5IGV2ZW50KSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIGV2YWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yIGZvcm0gY2FsbGJhY2tdKX0sIDpzb3VyY2UgIihkZWZuIGV2YWwgW2VkaXRvciBmb3JtIGNhbGxiYWNrXSAoZXZhbCEgZWRpdG9yIGZvcm0gY2FsbGJhY2spKVxyXG4ifSB7OnN5bSBjaGFubmVsPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGNoYW5uZWw/XHJcbiAoZm4qXHJcbiAgW3AxX180OTAyMyNdXHJcbiAgKGluc3RhbmNlP1xyXG4gICBjbGpzLmNvcmUuYXN5bmMuaW1wbC5jaGFubmVscy5NYW55VG9NYW55Q2hhbm5lbFxyXG4gICBwMV9fNDkwMjMjKSkpXHJcbiJ9IHs6c3ltIGNyZWF0ZS1lZGl0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHMgY29udGVudCBldmVudHMtY2hhbiB7OmtleXMgW2hpc3RvcnktbGltaXQgYXBwZW5kLWxpbWl0IGNvbXBpbGVyLWZuIGNvbnNvbGUtY2FsbGJhY2sgZGlzYWJsZS1jbGo/IGVkaXQtaGlzdG9yeSBmb2N1cz9dLCA6b3Ige2hpc3RvcnktbGltaXQgMTAwLCBhcHBlbmQtbGltaXQgNTAwMCwgZm9jdXM/IGZhbHNlfSwgOmFzIG9wdHN9XSl9LCA6c291cmNlICIoZGVmblxyXG4gY3JlYXRlLWVkaXRvclxyXG4gW3BzXHJcbiAgY29udGVudFxyXG4gIGV2ZW50cy1jaGFuXHJcbiAgezprZXlzXHJcbiAgIFtoaXN0b3J5LWxpbWl0XHJcbiAgICBhcHBlbmQtbGltaXRcclxuICAgIGNvbXBpbGVyLWZuXHJcbiAgICBjb25zb2xlLWNhbGxiYWNrXHJcbiAgICBkaXNhYmxlLWNsaj9cclxuICAgIGVkaXQtaGlzdG9yeVxyXG4gICAgZm9jdXM/XSxcclxuICAgOm9yIHtoaXN0b3J5LWxpbWl0IDEwMCwgYXBwZW5kLWxpbWl0IDUwMDAsIGZvY3VzPyBmYWxzZX0sXHJcbiAgIDphcyBvcHRzfV1cclxuIChsZXRcclxuICBbY2xqP1xyXG4gICAobm90IGRpc2FibGUtY2xqPylcclxuICAgZWRpdG9yP1xyXG4gICAobm90IGNvbnNvbGUtY2FsbGJhY2spXHJcbiAgIGNvbXBpbGVyLWZuXHJcbiAgIChvciBjb21waWxlci1mbiAoaXIvY3JlYXRlLWNvbXBpbGVyLWZuIG9wdHMpKVxyXG4gICAqZWRpdC1oaXN0b3J5XHJcbiAgIChkb3RvXHJcbiAgICAob3IgZWRpdC1oaXN0b3J5IChtd20vY3JlYXRlLWVkaXQtaGlzdG9yeSkpXHJcbiAgICAoc3dhcCEgYXNzb2MgOmxpbWl0IGhpc3RvcnktbGltaXQpKVxyXG4gICByZWZyZXNoLWluc3RhcmVwbC13aXRoLWRlbGF5IVxyXG4gICAoZGVib3VuY2UgcmVmcmVzaC1pbnN0YXJlcGwhIDMwMClcclxuICAgKmNvbnNvbGUtaGlzdG9yeVxyXG4gICAoY29uc29sZS9jcmVhdGUtY29uc29sZS1oaXN0b3J5KVxyXG4gICAqbGFzdC1oaWdobGlnaHQtZWxlbVxyXG4gICAoYXRvbSBuaWwpXHJcbiAgICphbGxvdy10YWI/XHJcbiAgIChhdG9tIGZhbHNlKVxyXG4gICAqZmlyc3QtcmVmcmVzaD9cclxuICAgKGF0b20gdHJ1ZSldXHJcbiAgKHdoZW4tbm90XHJcbiAgIGVkaXRvcj9cclxuICAgKHNldC12YWxpZGF0b3IhXHJcbiAgICAqZWRpdC1oaXN0b3J5XHJcbiAgICAoZm5cclxuICAgICBbezprZXlzIFtjdXJyZW50LXN0YXRlIHN0YXRlc119XVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3N0YXRlIChnZXQgc3RhdGVzIGN1cnJlbnQtc3RhdGUpXVxyXG4gICAgICAoLT5cclxuICAgICAgIHN0YXRlXHJcbiAgICAgICA6Y3Vyc29yLXBvc2l0aW9uXHJcbiAgICAgICBmaXJzdFxyXG4gICAgICAgKD49IChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpKSlcclxuICAgICAgdHJ1ZSkpKSlcclxuICAocmVpZnlcclxuICAgRWRpdG9yXHJcbiAgICh1bmRvIVxyXG4gICAgW3RoaXNdXHJcbiAgICAoc29tZS0+PiAqZWRpdC1oaXN0b3J5IG13bS91bmRvISAocmVmcmVzaCEgdGhpcykpXHJcbiAgICAoZG9tL3Njcm9sbC10by1uZWFyZXN0LWVsZW0pKVxyXG4gICAocmVkbyFcclxuICAgIFt0aGlzXVxyXG4gICAgKHNvbWUtPj4gKmVkaXQtaGlzdG9yeSBtd20vcmVkbyEgKHJlZnJlc2ghIHRoaXMpKVxyXG4gICAgKGRvbS9zY3JvbGwtdG8tbmVhcmVzdC1lbGVtKSlcclxuICAgKGNhbi11bmRvPyBbdGhpc10gKG13bS9jYW4tdW5kbz8gKmVkaXQtaGlzdG9yeSkpXHJcbiAgIChjYW4tcmVkbz8gW3RoaXNdIChtd20vY2FuLXJlZG8/ICplZGl0LWhpc3RvcnkpKVxyXG4gICAodXBkYXRlLWN1cnNvci1wb3NpdGlvbiFcclxuICAgIFt0aGlzIHBvc2l0aW9uXVxyXG4gICAgKHRyeVxyXG4gICAgIChtd20vdXBkYXRlLWN1cnNvci1wb3NpdGlvbiEgKmVkaXQtaGlzdG9yeSBwb3NpdGlvbilcclxuICAgICAoY2F0Y2hcclxuICAgICAganMvRXJyb3JcclxuICAgICAgX1xyXG4gICAgICAod2hlblxyXG4gICAgICAgKGFwcGx5ID0gcG9zaXRpb24pXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3N0YXJ0IChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpXVxyXG4gICAgICAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgY29udGVudCBbc3RhcnQgc3RhcnRdKVxyXG4gICAgICAgIChtd20vdXBkYXRlLWN1cnNvci1wb3NpdGlvbiEgKmVkaXQtaGlzdG9yeSBbc3RhcnQgc3RhcnRdKSkpKSlcclxuICAgICh1cGRhdGUtaGlnaGxpZ2h0ISBjb250ZW50ICpsYXN0LWhpZ2hsaWdodC1lbGVtKSlcclxuICAgKHJlc2V0LWVkaXQtaGlzdG9yeSFcclxuICAgIFt0aGlzIHN0YXJ0XVxyXG4gICAgKGNvbnNvbGUvdXBkYXRlLWNvbnNvbGUtc3RhcnQhICpjb25zb2xlLWhpc3Rvcnkgc3RhcnQpXHJcbiAgICAoZG9tL3NldC1jdXJzb3ItcG9zaXRpb24hIGNvbnRlbnQgW3N0YXJ0IHN0YXJ0XSlcclxuICAgIChsZXRcclxuICAgICBbKm5ldy1lZGl0LWhpc3RvcnlcclxuICAgICAgKG13bS9jcmVhdGUtZWRpdC1oaXN0b3J5KVxyXG4gICAgICBzdGF0ZVxyXG4gICAgICB7OmN1cnNvci1wb3NpdGlvbiBbc3RhcnQgc3RhcnRdLCA6dGV4dCAoLi10ZXh0Q29udGVudCBjb250ZW50KX1dXHJcbiAgICAgKHVwZGF0ZS1lZGl0LWhpc3RvcnkhICpuZXctZWRpdC1oaXN0b3J5IHN0YXRlKVxyXG4gICAgIChyZXNldCEgKmVkaXQtaGlzdG9yeSBAKm5ldy1lZGl0LWhpc3RvcnkpKSlcclxuICAgKGFwcGVuZC10ZXh0IVxyXG4gICAgW3RoaXMgdGV4dF1cclxuICAgIChsZXRcclxuICAgICBbbm9kZVxyXG4gICAgICAoLmNyZWF0ZVRleHROb2RlIGpzL2RvY3VtZW50IHRleHQpXHJcbiAgICAgIF9cclxuICAgICAgKC5hcHBlbmRDaGlsZCBjb250ZW50IG5vZGUpXHJcbiAgICAgIGFsbC10ZXh0XHJcbiAgICAgICguLXRleHRDb250ZW50IGNvbnRlbnQpXHJcbiAgICAgIGNoYXItY291bnRcclxuICAgICAgKG1heCAwICgtIChjb3VudCBhbGwtdGV4dCkgYXBwZW5kLWxpbWl0KSlcclxuICAgICAgbmV3LWFsbC10ZXh0XHJcbiAgICAgIChzdWJzIGFsbC10ZXh0IGNoYXItY291bnQpXHJcbiAgICAgIGNoYXItY291bnRcclxuICAgICAgKGlmXHJcbiAgICAgICAoLmVuZHNXaXRoIG5ldy1hbGwtdGV4dCBcIlxcblwiKVxyXG4gICAgICAgKGRlYyAoY291bnQgbmV3LWFsbC10ZXh0KSlcclxuICAgICAgIChjb3VudCBuZXctYWxsLXRleHQpKV1cclxuICAgICAod2hlblxyXG4gICAgICAobm90PSBhbGwtdGV4dCBuZXctYWxsLXRleHQpXHJcbiAgICAgIChzZXQhICguLXRleHRDb250ZW50IGNvbnRlbnQpIG5ldy1hbGwtdGV4dCkpXHJcbiAgICAgKHJlc2V0LWVkaXQtaGlzdG9yeSEgdGhpcyBjaGFyLWNvdW50KSkpXHJcbiAgIChlbnRlciFcclxuICAgIFt0aGlzXVxyXG4gICAgKGlmXHJcbiAgICAgZWRpdG9yP1xyXG4gICAgICguZXhlY0NvbW1hbmQganMvZG9jdW1lbnQgXCJpbnNlcnRIVE1MXCIgZmFsc2UgXCJcXG5cIilcclxuICAgICAobGV0XHJcbiAgICAgIFt0ZXh0XHJcbiAgICAgICAodHJpbXIgKC4tdGV4dENvbnRlbnQgY29udGVudCkpXHJcbiAgICAgICBwb3N0LXRleHRcclxuICAgICAgIChzdWJzIHRleHQgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSkpXVxyXG4gICAgICAocmVzZXQtZWRpdC1oaXN0b3J5ISB0aGlzIChjb3VudCB0ZXh0KSlcclxuICAgICAgKGNvbnNvbGUvdXBkYXRlLWNvbnNvbGUtaGlzdG9yeSEgKmNvbnNvbGUtaGlzdG9yeSBwb3N0LXRleHQpXHJcbiAgICAgIChjb25zb2xlLWNhbGxiYWNrIHBvc3QtdGV4dCkpKSlcclxuICAgKHVwIVxyXG4gICAgW3RoaXMgYWx0P11cclxuICAgIChpZlxyXG4gICAgIGFsdD9cclxuICAgICAod2hlbi1sZXRcclxuICAgICAgW2VsZW0gKGRvbS9nZXQtZm9jdXNlZC1mb3JtKV1cclxuICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICBbc3RhdGUgKG13bS9nZXQtY3VycmVudC1zdGF0ZSAqZWRpdC1oaXN0b3J5KV1cclxuICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgIFtlbGVtXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKGFuZFxyXG4gICAgICAgICAgICg6c2VsZWN0aW9uLWNoYW5nZT8gc3RhdGUpXHJcbiAgICAgICAgICAgKD0gZWxlbSAoc29tZS0+IHN0YXRlIDpjcm9wcGVkLXN0YXRlIDplbGVtZW50KSkpXHJcbiAgICAgICAgICAoZG9tL2dldC1wYXJlbnQgZWxlbSBcImNvbGxlY3Rpb25cIilcclxuICAgICAgICAgIGVsZW0pXVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3RleHQgKC4tdGV4dENvbnRlbnQgZWxlbSkgcG9zIFswIChjb3VudCB0ZXh0KV1dXHJcbiAgICAgICAgIChkb20vc2V0LWN1cnNvci1wb3NpdGlvbiEgZWxlbSBwb3MpXHJcbiAgICAgICAgICh1cGRhdGUtZWRpdC1oaXN0b3J5IVxyXG4gICAgICAgICAgKmVkaXQtaGlzdG9yeVxyXG4gICAgICAgICAgKGFzc29jXHJcbiAgICAgICAgICAgc3RhdGVcclxuICAgICAgICAgICA6c2VsZWN0aW9uLWNoYW5nZT9cclxuICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgOmNyb3BwZWQtc3RhdGVcclxuICAgICAgICAgICB7OmN1cnNvci1wb3NpdGlvbiBwb3MsIDp0ZXh0IHRleHQsIDplbGVtZW50IGVsZW19KSlcclxuICAgICAgICAgKHVwZGF0ZS1oaWdobGlnaHQhIGNvbnRlbnQgKmxhc3QtaGlnaGxpZ2h0LWVsZW0pKSkpKVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICBlZGl0b3I/XHJcbiAgICAgIChsZXRcclxuICAgICAgIFt0ZXh0XHJcbiAgICAgICAgKC4tdGV4dENvbnRlbnQgY29udGVudClcclxuICAgICAgICBzdGFydFxyXG4gICAgICAgIChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpXHJcbiAgICAgICAgcHJlLXRleHRcclxuICAgICAgICAoc3VicyB0ZXh0IDAgKGNvbnNvbGUvZ2V0LWNvbnNvbGUtc3RhcnQgKmNvbnNvbGUtaGlzdG9yeSkpXHJcbiAgICAgICAgbGluZVxyXG4gICAgICAgIChvciAoY29uc29sZS91cCEgKmNvbnNvbGUtaGlzdG9yeSkgXCJcIilcclxuICAgICAgICBzdGF0ZVxyXG4gICAgICAgIHs6Y3Vyc29yLXBvc2l0aW9uIFtzdGFydCBzdGFydF0sXHJcbiAgICAgICAgIDp0ZXh0IChzdHIgcHJlLXRleHQgbGluZSBcXG5ld2xpbmUpfV1cclxuICAgICAgICgtPj5cclxuICAgICAgICBzdGF0ZVxyXG4gICAgICAgICh1cGRhdGUtZWRpdC1oaXN0b3J5ISAqZWRpdC1oaXN0b3J5KVxyXG4gICAgICAgIChyZWZyZXNoISB0aGlzKSkpKSkpXHJcbiAgIChkb3duIVxyXG4gICAgW3RoaXMgYWx0P11cclxuICAgIChpZlxyXG4gICAgIGFsdD9cclxuICAgICAod2hlblxyXG4gICAgICAoOnNlbGVjdGlvbi1jaGFuZ2U/IChtd20vZ2V0LWN1cnJlbnQtc3RhdGUgKmVkaXQtaGlzdG9yeSkpXHJcbiAgICAgICh1bmRvISB0aGlzKSlcclxuICAgICAod2hlbi1ub3RcclxuICAgICAgZWRpdG9yP1xyXG4gICAgICAobGV0XHJcbiAgICAgICBbdGV4dFxyXG4gICAgICAgICguLXRleHRDb250ZW50IGNvbnRlbnQpXHJcbiAgICAgICAgc3RhcnRcclxuICAgICAgICAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KVxyXG4gICAgICAgIHByZS10ZXh0XHJcbiAgICAgICAgKHN1YnMgdGV4dCAwIHN0YXJ0KVxyXG4gICAgICAgIGxpbmVcclxuICAgICAgICAob3IgKGNvbnNvbGUvZG93biEgKmNvbnNvbGUtaGlzdG9yeSkgXCJcIilcclxuICAgICAgICBzdGF0ZVxyXG4gICAgICAgIHs6Y3Vyc29yLXBvc2l0aW9uIFtzdGFydCBzdGFydF0sXHJcbiAgICAgICAgIDp0ZXh0IChzdHIgcHJlLXRleHQgbGluZSBcXG5ld2xpbmUpfV1cclxuICAgICAgICgtPj5cclxuICAgICAgICBzdGF0ZVxyXG4gICAgICAgICh1cGRhdGUtZWRpdC1oaXN0b3J5ISAqZWRpdC1oaXN0b3J5KVxyXG4gICAgICAgIChyZWZyZXNoISB0aGlzKSkpKSkpXHJcbiAgICh0YWIhIFt0aGlzXSAod2hlbiBlZGl0b3I/IChyZXNldCEgKmFsbG93LXRhYj8gdHJ1ZSkpKVxyXG4gICAocmVmcmVzaCFcclxuICAgIFt0aGlzIHN0YXRlXVxyXG4gICAgKGxldFxyXG4gICAgIFtzdGF0ZVxyXG4gICAgICAoY29uZFxyXG4gICAgICAgKDpzZWxlY3Rpb24tY2hhbmdlPyBzdGF0ZSlcclxuICAgICAgIHN0YXRlXHJcbiAgICAgICBlZGl0b3I/XHJcbiAgICAgICAocmVmcmVzaC1jb250ZW50ISBjb250ZW50IHN0YXRlIGNsaj8pXHJcbiAgICAgICA6ZWxzZVxyXG4gICAgICAgKHJlZnJlc2gtY29uc29sZS1jb250ZW50IVxyXG4gICAgICAgIGNvbnRlbnRcclxuICAgICAgICBzdGF0ZVxyXG4gICAgICAgIChjb25zb2xlL2dldC1jb25zb2xlLXN0YXJ0ICpjb25zb2xlLWhpc3RvcnkpXHJcbiAgICAgICAgY2xqPykpXVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChvciBmb2N1cz8gKG5vdCBAKmZpcnN0LXJlZnJlc2g/KSlcclxuICAgICAgKHJlZnJlc2gtY3Vyc29yLXBvc2l0aW9uISBjb250ZW50IHN0YXRlKSlcclxuICAgICAod2hlbiBjbGo/IChyZWZyZXNoLWVycm9ycy1hbmQtZGVsaW1pdGVycyEgY29udGVudCBldmVudHMtY2hhbikpXHJcbiAgICAgKHdoZW5cclxuICAgICAgZWRpdG9yP1xyXG4gICAgICAoc29tZS0+XHJcbiAgICAgICAoLnF1ZXJ5U2VsZWN0b3IgcHMgXCIubnVtYmVyc1wiKVxyXG4gICAgICAgKHJlZnJlc2gtbnVtYmVycyEgKGNvdW50IChyZS1zZXEgI1wiXFxuXCIgKDp0ZXh0IHN0YXRlKSkpKSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIGNsaj9cclxuICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgIFtlbGVtICgucXVlcnlTZWxlY3RvciBwcyBcIi5pbnN0YXJlcGxcIildXHJcbiAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICgtPiBlbGVtIC4tc3R5bGUgLi1kaXNwbGF5ICg9IFwibm9uZVwiKSlcclxuICAgICAgICAgKHJlZnJlc2gtaW5zdGFyZXBsLXdpdGgtZGVsYXkhXHJcbiAgICAgICAgICBlbGVtXHJcbiAgICAgICAgICBjb250ZW50XHJcbiAgICAgICAgICBjb21waWxlci1mblxyXG4gICAgICAgICAgYXBwZW5kLWxpbWl0KSkpKSlcclxuICAgICAodXBkYXRlLWhpZ2hsaWdodCEgY29udGVudCAqbGFzdC1oaWdobGlnaHQtZWxlbSkpKVxyXG4gICAoZWRpdC1hbmQtcmVmcmVzaCFcclxuICAgIFt0aGlzIHN0YXRlXVxyXG4gICAgKC0+PlxyXG4gICAgIHN0YXRlXHJcbiAgICAgKGFkZC1uZXdsaW5lKVxyXG4gICAgIChhZGQtcGFyaW5mZXIgY2xqPyAoY29uc29sZS9nZXQtY29uc29sZS1zdGFydCAqY29uc29sZS1oaXN0b3J5KSlcclxuICAgICAodXBkYXRlLWVkaXQtaGlzdG9yeSEgKmVkaXQtaGlzdG9yeSlcclxuICAgICAocmVmcmVzaCEgdGhpcykpKVxyXG4gICAoaW5pdGlhbGl6ZSFcclxuICAgIFt0aGlzXVxyXG4gICAgKHdoZW5cclxuICAgICBlZGl0b3I/XHJcbiAgICAgKC0+PiAoaW5pdC1zdGF0ZSBjb250ZW50IGZhbHNlIGZhbHNlKSAoZWRpdC1hbmQtcmVmcmVzaCEgdGhpcykpKVxyXG4gICAgKHJlc2V0ISAqZmlyc3QtcmVmcmVzaD8gZmFsc2UpKVxyXG4gICAocmVmcmVzaC1hZnRlci1rZXktZXZlbnQhXHJcbiAgICBbdGhpcyBldmVudF1cclxuICAgIChsZXRcclxuICAgICBbdGFiP1xyXG4gICAgICAoa2V5LW5hbWU/IGV2ZW50IDp0YWIpXHJcbiAgICAgIHN0YXRlXHJcbiAgICAgIChpbml0LXN0YXRlIGNvbnRlbnQgZWRpdG9yPyB0YWI/KV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKGFuZCB0YWI/IChub3QgQCphbGxvdy10YWI/KSlcclxuICAgICAgKGVkaXQtYW5kLXJlZnJlc2ghXHJcbiAgICAgICB0aGlzXHJcbiAgICAgICAoY2FzZVxyXG4gICAgICAgIChrZXktY29kZSBldmVudClcclxuICAgICAgICAxM1xyXG4gICAgICAgIChhc3NvYyBzdGF0ZSA6aW5kZW50LXR5cGUgOnJldHVybilcclxuICAgICAgICA5XHJcbiAgICAgICAgKGFzc29jXHJcbiAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgIDppbmRlbnQtdHlwZVxyXG4gICAgICAgICAoaWYgKC4tc2hpZnRLZXkgZXZlbnQpIDpiYWNrIDpmb3J3YXJkKSlcclxuICAgICAgICAoYXNzb2Mgc3RhdGUgOmluZGVudC10eXBlIDpub3JtYWwpKSkpXHJcbiAgICAgKHdoZW4gdGFiPyAocmVzZXQhICphbGxvdy10YWI/IGZhbHNlKSkpKVxyXG4gICAocmVmcmVzaC1hZnRlci1jdXQtcGFzdGUhXHJcbiAgICBbdGhpc11cclxuICAgIChlZGl0LWFuZC1yZWZyZXNoIVxyXG4gICAgIHRoaXNcclxuICAgICAoYXNzb2MgKGluaXQtc3RhdGUgY29udGVudCBmYWxzZSBmYWxzZSkgOmluZGVudC10eXBlIDpub3JtYWwpKSlcclxuICAgKGV2YWwhXHJcbiAgICBbdGhpcyBmb3JtIGNhbGxiYWNrXVxyXG4gICAgKGNvbXBpbGVyLWZuXHJcbiAgICAgW2Zvcm1dXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDMyI10gKGNhbGxiYWNrIChmaXJzdCBwMV9fNDkwMzIjKSkpKSkpKSlcclxuIn0gezpzeW0ga2V5LWNvZGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXZlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXktY29kZVxyXG4gW2V2ZW50XVxyXG4gKGxldCBbY29kZSAoLi1rZXlDb2RlIGV2ZW50KV0gKGlmIChwb3M/IGNvZGUpIGNvZGUgKC4td2hpY2ggZXZlbnQpKSkpXHJcbiJ9IHs6c3ltIHJlZG8hLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHRhYiEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gdHJhbnNpZW50LW1hcD8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiB0cmFuc2llbnQtbWFwP1xyXG4gKGZuKlxyXG4gIFtwMV9fNDkwMjQjXVxyXG4gIChvclxyXG4gICAoaW5zdGFuY2U/IGNsanMuY29yZS9UcmFuc2llbnRBcnJheU1hcCBwMV9fNDkwMjQjKVxyXG4gICAoaW5zdGFuY2U/IGNsanMuY29yZS9UcmFuc2llbnRIYXNoTWFwIHAxX180OTAyNCMpKSkpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtY29udGVudC1lbGVtZW50ISwgOm1ldGEgezpkb2MgIlJlcGxhY2VzIGEgc2luZ2xlIG5vZGUgaW4gdGhlIGNvbnRlbnQsIGFuZCBzaWJsaW5ncyBpZiBuZWNlc3NhcnkuIiwgOmFyZ2xpc3RzIChbezprZXlzIFtlbGVtZW50IHRleHRdLCA6YXMgY3JvcHBlZC1zdGF0ZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWNvbnRlbnQtZWxlbWVudCFcclxuIFwiUmVwbGFjZXMgYSBzaW5nbGUgbm9kZSBpbiB0aGUgY29udGVudCwgYW5kIHNpYmxpbmdzIGlmIG5lY2Vzc2FyeS5cIlxyXG4gW3s6a2V5cyBbZWxlbWVudCB0ZXh0XSwgOmFzIGNyb3BwZWQtc3RhdGV9XVxyXG4gKGxldFxyXG4gIFtwYXJlbnRcclxuICAgKC4tcGFyZW50RWxlbWVudCBlbGVtZW50KVxyXG4gICBsYXN0LWVsZW1cclxuICAgKC4tbGFzdENoaWxkIHBhcmVudClcclxuICAgbGFzdC1lcnJvclxyXG4gICAobG9vcFxyXG4gICAgW2N1cnJlbnQtZWxlbSBsYXN0LWVsZW1dXHJcbiAgICAoY29uZFxyXG4gICAgIChkb20vZXJyb3Itbm9kZT8gY3VycmVudC1lbGVtKVxyXG4gICAgIGN1cnJlbnQtZWxlbVxyXG4gICAgIChvciAobmlsPyBjdXJyZW50LWVsZW0pICg9IGVsZW1lbnQgY3VycmVudC1lbGVtKSlcclxuICAgICBuaWxcclxuICAgICA6ZWxzZVxyXG4gICAgIChyZWN1ciAoLi1wcmV2aW91c1NpYmxpbmcgY3VycmVudC1lbGVtKSkpKVxyXG4gICBsYXN0LWVsZW0tdG8tcmVmcmVzaFxyXG4gICAod2hlblxyXG4gICAgbGFzdC1lcnJvclxyXG4gICAgKGxvb3BcclxuICAgICBbY3VycmVudC1lbGVtIGxhc3QtZXJyb3JdXHJcbiAgICAgKGlmLWxldFxyXG4gICAgICBbc2libGluZyAoLi1uZXh0U2libGluZyBjdXJyZW50LWVsZW0pXVxyXG4gICAgICAoaWYgKGRvbS9jb2xsLW5vZGU/IHNpYmxpbmcpIGN1cnJlbnQtZWxlbSAocmVjdXIgc2libGluZykpXHJcbiAgICAgIGN1cnJlbnQtZWxlbSkpKVxyXG4gICBvbGQtZWxlbXNcclxuICAgKGxvb3BcclxuICAgIFtlbGVtcyBbZWxlbWVudF0gY3VycmVudC1lbGVtIGVsZW1lbnRdXHJcbiAgICAoY29uZFxyXG4gICAgICg9IGxhc3QtZWxlbS10by1yZWZyZXNoIGN1cnJlbnQtZWxlbSlcclxuICAgICBlbGVtc1xyXG4gICAgIChvciAoc29tZT8gbGFzdC1lbGVtLXRvLXJlZnJlc2gpIChkb20vdGV4dC1ub2RlPyBjdXJyZW50LWVsZW0pKVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3NpYmxpbmcgKC4tbmV4dFNpYmxpbmcgY3VycmVudC1lbGVtKV1cclxuICAgICAgKHJlY3VyIChjb25qIGVsZW1zIHNpYmxpbmcpIHNpYmxpbmcpXHJcbiAgICAgIGVsZW1zKVxyXG4gICAgIDplbHNlXHJcbiAgICAgZWxlbXMpKVxyXG4gICBfXHJcbiAgIChzZXQhICguLXRleHRDb250ZW50IGVsZW1lbnQpIHRleHQpXHJcbiAgIHRleHRcclxuICAgKGpvaW4gKG1hcCAoZm4qIFtwMV9fNDkwMzAjXSAoLi10ZXh0Q29udGVudCBwMV9fNDkwMzAjKSkgb2xkLWVsZW1zKSlcclxuICAgdGVtcC1lbGVtXHJcbiAgICguY3JlYXRlRWxlbWVudCBqcy9kb2N1bWVudCBcInNwYW5cIilcclxuICAgX1xyXG4gICAoc2V0ISAoLi1pbm5lckhUTUwgdGVtcC1lbGVtKSAoaHMvY29kZS0+aHRtbCB0ZXh0KSlcclxuICAgbmV3LWVsZW1zXHJcbiAgIChkb2FsbFxyXG4gICAgKGZvclxyXG4gICAgIFtpIChyYW5nZSAoLT4gdGVtcC1lbGVtIC4tY2hpbGROb2RlcyAuLWxlbmd0aCkpXVxyXG4gICAgICgtPiB0ZW1wLWVsZW0gLi1jaGlsZE5vZGVzICguaXRlbSBpKSkpKV1cclxuICAoZG9zZXEgW25ldy1lbGVtIG5ldy1lbGVtc10gKC5pbnNlcnRCZWZvcmUgcGFyZW50IG5ldy1lbGVtIGVsZW1lbnQpKVxyXG4gIChkb3NlcSBbb2xkLWVsZW0gb2xkLWVsZW1zXSAoLnJlbW92ZUNoaWxkIHBhcmVudCBvbGQtZWxlbSkpXHJcbiAgKGFzc29jIGNyb3BwZWQtc3RhdGUgOmVsZW1lbnQgKGZpcnN0IG5ldy1lbGVtcykpKSlcclxuIn0gezpzeW0gZWxlbT8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGVsZW0/IChmbiogW3AxX180OTAyNSNdIChpbnN0YW5jZT8ganMvRWxlbWVudCBwMV9fNDkwMjUjKSkpXHJcbiJ9IHs6c3ltIGVudGVyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBhcHBlbmQtdGV4dCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyB0ZXh0XSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBsaW5lLW51bWJlcnMsIDptZXRhIHs6ZG9jICJBZGRzIGxpbmUgbnVtYmVycyB0byB0aGUgbnVtYmVycy4iLCA6YXJnbGlzdHMgKFtsaW5lLWNvdW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS1udW1iZXJzXHJcbiBcIkFkZHMgbGluZSBudW1iZXJzIHRvIHRoZSBudW1iZXJzLlwiXHJcbiBbbGluZS1jb3VudF1cclxuIChqb2luIChmb3IgW2kgKHJhbmdlIGxpbmUtY291bnQpXSAoc3RyIFwiPGRpdj5cIiAoaW5jIGkpIFwiPC9kaXY+XCIpKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1oaWdobGlnaHQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnRlbnQgKmxhc3QtZWxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1oaWdobGlnaHQhXHJcbiBbY29udGVudCAqbGFzdC1lbGVtXVxyXG4gKHdoZW4tbGV0XHJcbiAgW2VsZW0gQCpsYXN0LWVsZW1dXHJcbiAgKHNldCEgKC4tYmFja2dyb3VuZENvbG9yICguLXN0eWxlIGVsZW0pKSBuaWwpXHJcbiAgKHJlc2V0ISAqbGFzdC1lbGVtIG5pbCkpXHJcbiAod2hlbi1sZXRcclxuICBbZWxlbSAoZG9tL2dldC1mb2N1c2VkLWZvcm0pXVxyXG4gICh3aGVuLWxldFxyXG4gICBbY29sb3JcclxuICAgICguZ2V0UHJvcGVydHlWYWx1ZVxyXG4gICAgICguZ2V0Q29tcHV0ZWRTdHlsZSBqcy93aW5kb3cgKC4tZmlyc3RDaGlsZCBlbGVtKSlcclxuICAgICBcImNvbG9yXCIpXVxyXG4gICAobGV0XHJcbiAgICBbbmV3LWNvbG9yICgtPiBjb2xvciAocmVwbGFjZSAjXCJyZ2JcXChcIiBcIlwiKSAocmVwbGFjZSAjXCJcXClcIiBcIlwiKSldXHJcbiAgICAoc2V0IVxyXG4gICAgICguLWJhY2tncm91bmRDb2xvciAoLi1zdHlsZSBlbGVtKSlcclxuICAgICAoc3RyIFwicmdiYShcIiBuZXctY29sb3IgXCIsIDAuMSlcIikpXHJcbiAgICAocmVzZXQhICpsYXN0LWVsZW0gZWxlbSkpKSkpXHJcbiJ9IHs6c3ltIGluaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHMgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXRcclxuIFtwcyBvcHRzXVxyXG4gKC5pbml0IGpzL3Jhbmd5KVxyXG4gKGxldFxyXG4gIFtvcHRzXHJcbiAgIChqcy0+Y2xqIG9wdHMgOmtleXdvcmRpemUta2V5cyB0cnVlKVxyXG4gICBjb250ZW50XHJcbiAgICgucXVlcnlTZWxlY3RvciBwcyBcIi5jb250ZW50XCIpXHJcbiAgIGV2ZW50cy1jaGFuXHJcbiAgIChjaGFuKVxyXG4gICBlZGl0b3JcclxuICAgKGNyZWF0ZS1lZGl0b3IgcHMgY29udGVudCBldmVudHMtY2hhbiBvcHRzKV1cclxuICAoc2V0ISAoLi1zcGVsbGNoZWNrIHBzKSBmYWxzZSlcclxuICAod2hlbi1ub3RcclxuICAgY29udGVudFxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiBcIkNhbid0IGZpbmQgYSBkaXYgd2l0aCBjbGFzcyAnY29udGVudCdcIikpKVxyXG4gIChpbml0aWFsaXplISBlZGl0b3IpXHJcbiAgKGFkZC1ldmVudC1saXN0ZW5lcnMhIGNvbnRlbnQgZXZlbnRzLWNoYW4gb3B0cylcclxuICAoZ29cclxuICAgKHdoaWxlXHJcbiAgICB0cnVlXHJcbiAgICAobGV0XHJcbiAgICAgW2V2ZW50ICg8ISBldmVudHMtY2hhbildXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIChzb21lLT5cclxuICAgICAgIG9wdHNcclxuICAgICAgIDpiZWZvcmUtY2hhbmdlLWNhbGxiYWNrXHJcbiAgICAgICAoKGZuKiBbcDFfXzQ5MDM3I10gKHAxX180OTAzNyMgZXZlbnQpKSkpXHJcbiAgICAgIChjYXNlXHJcbiAgICAgICAoLi10eXBlIGV2ZW50KVxyXG4gICAgICAgXCJrZXlkb3duXCJcclxuICAgICAgIChjb25kXHJcbiAgICAgICAgKGFuZFxyXG4gICAgICAgICAoa2V5LW5hbWU/IGV2ZW50IDp1bmRvLW9yLXJlZG8pXHJcbiAgICAgICAgICgtPiBvcHRzIDpkaXNhYmxlLXVuZG8tcmVkbz8gbm90KSlcclxuICAgICAgICAoaWYgKC4tc2hpZnRLZXkgZXZlbnQpIChyZWRvISBlZGl0b3IpICh1bmRvISBlZGl0b3IpKVxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOmVudGVyKVxyXG4gICAgICAgIChlbnRlciEgZWRpdG9yKVxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOnVwLWFycm93KVxyXG4gICAgICAgICh1cCEgZWRpdG9yICguLWFsdEtleSBldmVudCkpXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6ZG93bi1hcnJvdylcclxuICAgICAgICAoZG93biEgZWRpdG9yICguLWFsdEtleSBldmVudCkpXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6dGFiKVxyXG4gICAgICAgICh0YWIhIGVkaXRvcikpXHJcbiAgICAgICBcImtleXVwXCJcclxuICAgICAgIChjb25kXHJcbiAgICAgICAgKGtleS1uYW1lPyBldmVudCA6YXJyb3dzKVxyXG4gICAgICAgICh1cGRhdGUtY3Vyc29yLXBvc2l0aW9uIVxyXG4gICAgICAgICBlZGl0b3JcclxuICAgICAgICAgKGRvbS9nZXQtY3Vyc29yLXBvc2l0aW9uIGNvbnRlbnQgZmFsc2UpKVxyXG4gICAgICAgIChrZXktbmFtZT8gZXZlbnQgOmdlbmVyYWwpXHJcbiAgICAgICAgKHJlZnJlc2gtYWZ0ZXIta2V5LWV2ZW50ISBlZGl0b3IgZXZlbnQpKVxyXG4gICAgICAgXCJjdXRcIlxyXG4gICAgICAgKHJlZnJlc2gtYWZ0ZXItY3V0LXBhc3RlISBlZGl0b3IpXHJcbiAgICAgICBcInBhc3RlXCJcclxuICAgICAgIChyZWZyZXNoLWFmdGVyLWN1dC1wYXN0ZSEgZWRpdG9yKVxyXG4gICAgICAgXCJtb3VzZXVwXCJcclxuICAgICAgICh1cGRhdGUtY3Vyc29yLXBvc2l0aW9uIVxyXG4gICAgICAgIGVkaXRvclxyXG4gICAgICAgIChkb20vZ2V0LWN1cnNvci1wb3NpdGlvblxyXG4gICAgICAgICBjb250ZW50XHJcbiAgICAgICAgIChzb21lPyAoOmNvbnNvbGUtY2FsbGJhY2sgb3B0cykpKSlcclxuICAgICAgIFwibW91c2VlbnRlclwiXHJcbiAgICAgICAoc2hvdy1lcnJvci1tZXNzYWdlISBwcyBldmVudClcclxuICAgICAgIFwibW91c2VsZWF2ZVwiXHJcbiAgICAgICAoaGlkZS1lcnJvci1tZXNzYWdlcyEgcHMpXHJcbiAgICAgICBuaWwpXHJcbiAgICAgIChzb21lLT5cclxuICAgICAgIG9wdHNcclxuICAgICAgIDpjaGFuZ2UtY2FsbGJhY2tcclxuICAgICAgICgoZm4qIFtwMV9fNDkwMzgjXSAocDFfXzQ5MDM4IyBldmVudCkpKSkpKSkpXHJcbiAgZWRpdG9yKSlcclxuIn0gezpzeW0gY2FuLXVuZG8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIHJlZnJlc2gtY29udGVudCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudCBzdGF0ZSBjbGo/XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1jb250ZW50IVxyXG4gW2NvbnRlbnQgc3RhdGUgY2xqP11cclxuIChpZi1ub3RcclxuICBjbGo/XHJcbiAgKGRvXHJcbiAgIChzZXQhICguLWlubmVySFRNTCBjb250ZW50KSAoaHMvZXNjYXBlLWh0bWwtc3RyICg6dGV4dCBzdGF0ZSkpKVxyXG4gICBzdGF0ZSlcclxuICAoaWYtbGV0XHJcbiAgIFtjcm9wIChzb21lLT4gc3RhdGUgOmNyb3BwZWQtc3RhdGUgcmVmcmVzaC1jb250ZW50LWVsZW1lbnQhKV1cclxuICAgKGlmXHJcbiAgICAobm90PSAoOnRleHQgc3RhdGUpICguLXRleHRDb250ZW50IGNvbnRlbnQpKVxyXG4gICAgKHJlZnJlc2gtY29udGVudCEgY29udGVudCAoZGlzc29jIHN0YXRlIDpjcm9wcGVkLXN0YXRlKSBjbGo/KVxyXG4gICAgKGFzc29jIHN0YXRlIDpjcm9wcGVkLXN0YXRlIGNyb3ApKVxyXG4gICAoZG9cclxuICAgIChzZXQhICguLWlubmVySFRNTCBjb250ZW50KSAoaHMvY29kZS0+aHRtbCAoOnRleHQgc3RhdGUpKSlcclxuICAgIChkaXNzb2Mgc3RhdGUgOmNyb3BwZWQtc3RhdGUpKSkpKVxyXG4ifSB7OnN5bSByZWRvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VkaXRvcl0pfSwgOnNvdXJjZSAiKGRlZm4gcmVkbyBbZWRpdG9yXSAocmVkbyEgZWRpdG9yKSlcclxuIn0gezpzeW0gZGVib3VuY2UtZnVuY3Rpb24sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZiBtaWxsaXNdKX0sIDpzb3VyY2UgIihkZWZuIGRlYm91bmNlLWZ1bmN0aW9uIFtmIG1pbGxpc10gKGRlYm91bmNlIGYgbWlsbGlzKSlcclxuIn0gezpzeW0gcmVmcmVzaC1pbnN0YXJlcGwhLCA6bWV0YSB7OmRvYyAiUmVmcmVzaGVzIHRoZSBJbnN0YVJFUEwuIiwgOmFyZ2xpc3RzIChbaW5zdGFyZXBsIGNvbnRlbnQgY29tcGlsZXItZm4gbGltaXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWluc3RhcmVwbCFcclxuIFwiUmVmcmVzaGVzIHRoZSBJbnN0YVJFUEwuXCJcclxuIFtpbnN0YXJlcGwgY29udGVudCBjb21waWxlci1mbiBsaW1pdF1cclxuIChsZXRcclxuICBbZWxlbXNcclxuICAgKGlyL2dldC1jb2xsZWN0aW9ucyBjb250ZW50KVxyXG4gICBsb2NhdGlvbnNcclxuICAgKGlyL2VsZW1zLT5sb2NhdGlvbnMgZWxlbXMgKC4tb2Zmc2V0VG9wIGluc3RhcmVwbCkpXHJcbiAgIGZvcm1zXHJcbiAgICgtPj5cclxuICAgIGVsZW1zXHJcbiAgICAobWFwIGlyL2NvbGxlY3Rpb24tPmNvbnRlbnQpXHJcbiAgICAobWFwIChmbiogW3AxX180OTAyNyNdIChyZXBsYWNlIHAxX180OTAyNyMgXFzCoCBcIiBcIikpKSldXHJcbiAgKGNvbXBpbGVyLWZuXHJcbiAgIGZvcm1zXHJcbiAgIChmblxyXG4gICAgW3Jlc3VsdHNdXHJcbiAgICAod2hlblxyXG4gICAgICguLXBhcmVudEVsZW1lbnQgaW5zdGFyZXBsKVxyXG4gICAgIChzZXQhXHJcbiAgICAgICguLWlubmVySFRNTCBpbnN0YXJlcGwpXHJcbiAgICAgIChpci9yZXN1bHRzLT5odG1sIHJlc3VsdHMgbG9jYXRpb25zIGxpbWl0KSkpKSkpKVxyXG4ifSB7OnN5bSBlZGl0LWFuZC1yZWZyZXNoISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIHN0YXRlXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSByYWluYm93LWNvdW50LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiByYWluYm93LWNvdW50IDUpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgcG9zaXRpb25dKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGluaXQtc3RhdGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBlZGl0b3IncyBzdGF0ZS4gSWYgZnVsbC1zZWxlY3Rpb24/IGlzIHRydWUsIGl0IHdpbGwgdHJ5IHRvIHNhdmVcbnRoZSBlbnRpcmUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGp1c3QgdGhlIGN1cnNvciBwb3NpdGlvbi4iLCA6YXJnbGlzdHMgKFtjb250ZW50IGNyb3A/IGZ1bGwtc2VsZWN0aW9uP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtc3RhdGVcclxuIFwiUmV0dXJucyB0aGUgZWRpdG9yJ3Mgc3RhdGUuIElmIGZ1bGwtc2VsZWN0aW9uPyBpcyB0cnVlLCBpdCB3aWxsIHRyeSB0byBzYXZlXFxudGhlIGVudGlyZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4ganVzdCB0aGUgY3Vyc29yIHBvc2l0aW9uLlwiXHJcbiBbY29udGVudCBjcm9wPyBmdWxsLXNlbGVjdGlvbj9dXHJcbiAobGV0XHJcbiAgW3NlbGVjdGlvblxyXG4gICAoLmdldFNlbGVjdGlvbiBqcy9yYW5neSlcclxuICAgYW5jaG9yXHJcbiAgICguLWFuY2hvck5vZGUgc2VsZWN0aW9uKVxyXG4gICBmb2N1c1xyXG4gICAoLi1mb2N1c05vZGUgc2VsZWN0aW9uKVxyXG4gICBwYXJlbnRcclxuICAgKHdoZW4gKGFuZCBhbmNob3IgZm9jdXMpIChkb20vY29tbW9uLWFuY2VzdG9yIGFuY2hvciBmb2N1cykpXHJcbiAgIHN0YXRlXHJcbiAgIHs6Y3Vyc29yLXBvc2l0aW9uXHJcbiAgICAoLT4gY29udGVudCAoZG9tL2dldC1zZWxlY3Rpb24gZnVsbC1zZWxlY3Rpb24/KSA6Y3Vyc29yLXBvc2l0aW9uKSxcclxuICAgIDp0ZXh0ICguLXRleHRDb250ZW50IGNvbnRlbnQpfV1cclxuICAoaWYtbGV0XHJcbiAgIFtjcm9wcGVkLXNlbGVjdGlvbiAoc29tZS0+IHBhcmVudCAoZG9tL2dldC1zZWxlY3Rpb24gZmFsc2UpKV1cclxuICAgKGlmXHJcbiAgICBjcm9wP1xyXG4gICAgKGFzc29jXHJcbiAgICAgc3RhdGVcclxuICAgICA6Y3JvcHBlZC1zdGF0ZVxyXG4gICAgIChhc3NvYyBjcm9wcGVkLXNlbGVjdGlvbiA6dGV4dCAoLi10ZXh0Q29udGVudCBwYXJlbnQpKSlcclxuICAgIHN0YXRlKVxyXG4gICBzdGF0ZSkpKVxyXG4ifSB7OnN5bSBldmFsISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzIGZvcm0gY2FsbGJhY2tdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGFkZC1wYXJpbmZlci1hZnRlci1jb25zb2xlLXN0YXJ0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbnNvbGUtc3RhcnQtbnVtIHN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXBhcmluZmVyLWFmdGVyLWNvbnNvbGUtc3RhcnRcclxuIFtjb25zb2xlLXN0YXJ0LW51bSBzdGF0ZV1cclxuIChsZXRcclxuICBbcHJlLXRleHRcclxuICAgKHN1YnMgKDp0ZXh0IHN0YXRlKSAwIGNvbnNvbGUtc3RhcnQtbnVtKVxyXG4gICBwb3N0LXRleHRcclxuICAgKHN1YnMgKDp0ZXh0IHN0YXRlKSBjb25zb2xlLXN0YXJ0LW51bSlcclxuICAgY2xlYXJlZC10ZXh0XHJcbiAgIChzdHIgKHJlcGxhY2UgcHJlLXRleHQgI1wiW15cXHJeXFxuXVwiIFwiIFwiKSBwb3N0LXRleHQpXHJcbiAgIHRlbXAtc3RhdGVcclxuICAgKGFzc29jIHN0YXRlIDp0ZXh0IGNsZWFyZWQtdGV4dClcclxuICAgdGVtcC1zdGF0ZVxyXG4gICAoY3AvYWRkLXBhcmluZmVyIDpib3RoIHRlbXAtc3RhdGUpXHJcbiAgIG5ldy10ZXh0XHJcbiAgIChzdHIgcHJlLXRleHQgKHN1YnMgKDp0ZXh0IHRlbXAtc3RhdGUpIGNvbnNvbGUtc3RhcnQtbnVtKSldXHJcbiAgKGFzc29jIHN0YXRlIDp0ZXh0IG5ldy10ZXh0KSkpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtbnVtYmVycyEsIDptZXRhIHs6ZG9jICJSZWZyZXNoZXMgdGhlIGxpbmUgbnVtYmVycy4iLCA6YXJnbGlzdHMgKFtudW1iZXJzIGxpbmUtY291bnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLW51bWJlcnMhXHJcbiBcIlJlZnJlc2hlcyB0aGUgbGluZSBudW1iZXJzLlwiXHJcbiBbbnVtYmVycyBsaW5lLWNvdW50XVxyXG4gKHNldCEgKC4taW5uZXJIVE1MIG51bWJlcnMpIChsaW5lLW51bWJlcnMgbGluZS1jb3VudCkpKVxyXG4ifSB7OnN5bSByZWZyZXNoLWFmdGVyLWN1dC1wYXN0ZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIEVkaXRvcn0gezpzeW0gcmVmcmVzaC1hZnRlci1rZXktZXZlbnQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgZXZlbnRdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGFkZC1uZXdsaW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3s6a2V5cyBbdGV4dF0sIDphcyBzdGF0ZX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtbmV3bGluZVxyXG4gW3s6a2V5cyBbdGV4dF0sIDphcyBzdGF0ZX1dXHJcbiAoaWYtbm90XHJcbiAgKD0gXFxuZXdsaW5lIChsYXN0IHRleHQpKVxyXG4gIChhc3NvYyBzdGF0ZSA6dGV4dCAoc3RyIHRleHQgXFxuZXdsaW5lKSlcclxuICBzdGF0ZSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1lZGl0LWhpc3RvcnkhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoWyplZGl0LWhpc3Rvcnkgc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtZWRpdC1oaXN0b3J5IVxyXG4gWyplZGl0LWhpc3Rvcnkgc3RhdGVdXHJcbiAodHJ5XHJcbiAgKG13bS91cGRhdGUtZWRpdC1oaXN0b3J5IVxyXG4gICAqZWRpdC1oaXN0b3J5XHJcbiAgIChpZiAoOnNlbGVjdGlvbi1jaGFuZ2U/IHN0YXRlKSBzdGF0ZSAoZGlzc29jIHN0YXRlIDpjcm9wcGVkLXN0YXRlKSkpXHJcbiAgc3RhdGVcclxuICAoY2F0Y2gganMvRXJyb3IgXyAobXdtL2dldC1jdXJyZW50LXN0YXRlICplZGl0LWhpc3RvcnkpKSkpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtY29uc29sZS1jb250ZW50ISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50IHN0YXRlIGNvbnNvbGUtc3RhcnQtbnVtIGNsaj9dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZyZXNoLWNvbnNvbGUtY29udGVudCFcclxuIFtjb250ZW50IHN0YXRlIGNvbnNvbGUtc3RhcnQtbnVtIGNsaj9dXHJcbiAoc2V0IVxyXG4gICguLWlubmVySFRNTCBjb250ZW50KVxyXG4gIChpZlxyXG4gICBjbGo/XHJcbiAgIChsZXRcclxuICAgIFtwcmUtdGV4dFxyXG4gICAgIChzdWJzICg6dGV4dCBzdGF0ZSkgMCBjb25zb2xlLXN0YXJ0LW51bSlcclxuICAgICBwb3N0LXRleHRcclxuICAgICAoc3VicyAoOnRleHQgc3RhdGUpIGNvbnNvbGUtc3RhcnQtbnVtKV1cclxuICAgIChzdHIgKGhzL2VzY2FwZS1odG1sLXN0ciBwcmUtdGV4dCkgKGhzL2NvZGUtPmh0bWwgcG9zdC10ZXh0KSkpXHJcbiAgIChocy9lc2NhcGUtaHRtbC1zdHIgKDp0ZXh0IHN0YXRlKSkpKVxyXG4gc3RhdGUpXHJcbiJ9IHs6c3ltIHJlZnJlc2gtZXJyb3JzLWFuZC1kZWxpbWl0ZXJzISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50IGV2ZW50cy1jaGFuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVmcmVzaC1lcnJvcnMtYW5kLWRlbGltaXRlcnMhXHJcbiBbY29udGVudCBldmVudHMtY2hhbl1cclxuIChoaWRlLWVycm9yLW1lc3NhZ2VzISAoLi1wYXJlbnRFbGVtZW50IGNvbnRlbnQpKVxyXG4gKGRvc2VxXHJcbiAgW2VsZW0gKC0+IGNvbnRlbnQgKC5xdWVyeVNlbGVjdG9yQWxsIFwiLmVycm9yXCIpIGFycmF5LXNlcSldXHJcbiAgKGxldFxyXG4gICBbc2hvdy1lcnJvci1pY29uIVxyXG4gICAgKGZuIFtlbGVtXSAoc2V0ISAoLi1kaXNwbGF5ICguLXN0eWxlIGVsZW0pKSBcImlubGluZS1ibG9ja1wiKSlcclxuICAgIHNob3ctZXJyb3ItaWNvbiFcclxuICAgIChkZWJvdW5jZSBzaG93LWVycm9yLWljb24hIDEwMDApXVxyXG4gICAoc2hvdy1lcnJvci1pY29uISBlbGVtKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBlbGVtXHJcbiAgIFwibW91c2VlbnRlclwiXHJcbiAgIChmbiogW3AxX180OTAyOCNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAyOCMpKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBlbGVtXHJcbiAgIFwibW91c2VsZWF2ZVwiXHJcbiAgIChmbiogW3AxX180OTAyOSNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAyOSMpKSkpXHJcbiAoZG9zZXFcclxuICBbW2VsZW0gY2xhc3MtbmFtZV0gKHJhaW5ib3ctZGVsaW1pdGVycyBjb250ZW50IC0xKV1cclxuICAoLmFkZCAoLi1jbGFzc0xpc3QgZWxlbSkgY2xhc3MtbmFtZSkpKVxyXG4ifSB7OnN5bSBhcHBlbmQtdGV4dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlZGl0b3IgdGV4dF0pfSwgOnNvdXJjZSAiKGRlZm4gYXBwZW5kLXRleHQgW2VkaXRvciB0ZXh0XSAoYXBwZW5kLXRleHQhIGVkaXRvciB0ZXh0KSlcclxuIn0gezpzeW0gcHJldmVudC1kZWZhdWx0PywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtldmVudCBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJldmVudC1kZWZhdWx0P1xyXG4gW2V2ZW50IG9wdHNdXHJcbiAoYm9vbGVhblxyXG4gIChvclxyXG4gICAoa2V5LW5hbWU/IGV2ZW50IDp1bmRvLW9yLXJlZG8pXHJcbiAgIChrZXktbmFtZT8gZXZlbnQgOnRhYilcclxuICAgKGtleS1uYW1lPyBldmVudCA6ZW50ZXIpXHJcbiAgIChhbmRcclxuICAgIChvciAoOmNvbnNvbGUtY2FsbGJhY2sgb3B0cykgKC4tYWx0S2V5IGV2ZW50KSlcclxuICAgIChvciAoa2V5LW5hbWU/IGV2ZW50IDp1cC1hcnJvdykgKGtleS1uYW1lPyBldmVudCA6ZG93bi1hcnJvdykpKSkpKVxyXG4ifSB7OnN5bSBpbml0aWFsaXplISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0aGlzXSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBpbml0LWFsbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFsmIFtvcHRzXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluaXQtYWxsXHJcbiBbJiBbb3B0c11dXHJcbiAoZG9zZXFcclxuICBbcHMgKC0+IGpzL2RvY3VtZW50ICgucXVlcnlTZWxlY3RvckFsbCBcIi5wYXJlbi1zb3VwXCIpIGFycmF5LXNlcSldXHJcbiAgKGluaXQgcHMgKG9yIG9wdHMgI2pzIHt9KSkpKVxyXG4ifSB7OnN5bSBhZGQtcGFyaW5mZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW5hYmxlPyBjb25zb2xlLXN0YXJ0LW51bSBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1wYXJpbmZlclxyXG4gW2VuYWJsZT8gY29uc29sZS1zdGFydC1udW0gc3RhdGVdXHJcbiAoaWZcclxuICBlbmFibGU/XHJcbiAgKGxldFxyXG4gICBbY3JvcHBlZC1zdGF0ZVxyXG4gICAgKDpjcm9wcGVkLXN0YXRlIHN0YXRlKVxyXG4gICAgaW5kZW50LXR5cGVcclxuICAgICg6aW5kZW50LXR5cGUgc3RhdGUpXHJcbiAgICBzdGF0ZVxyXG4gICAgKGNvbmRcclxuICAgICAocG9zPyBjb25zb2xlLXN0YXJ0LW51bSlcclxuICAgICAoYWRkLXBhcmluZmVyLWFmdGVyLWNvbnNvbGUtc3RhcnQgY29uc29sZS1zdGFydC1udW0gc3RhdGUpXHJcbiAgICAgaW5kZW50LXR5cGVcclxuICAgICAoY3AvYWRkLWluZGVudCBzdGF0ZSlcclxuICAgICA6ZWxzZVxyXG4gICAgIChjcC9hZGQtcGFyaW5mZXIgOnBhcmVuIHN0YXRlKSldXHJcbiAgIChpZlxyXG4gICAgKGFuZCBjcm9wcGVkLXN0YXRlIGluZGVudC10eXBlKVxyXG4gICAgKGFzc29jXHJcbiAgICAgc3RhdGVcclxuICAgICA6Y3JvcHBlZC1zdGF0ZVxyXG4gICAgIChtZXJnZVxyXG4gICAgICBjcm9wcGVkLXN0YXRlXHJcbiAgICAgIChjcC9hZGQtaW5kZW50IChhc3NvYyBjcm9wcGVkLXN0YXRlIDppbmRlbnQtdHlwZSBpbmRlbnQtdHlwZSkpKSlcclxuICAgIHN0YXRlKSlcclxuICBzdGF0ZSkpXHJcbiJ9IHs6c3ltIHVuZG8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWRpdG9yXSl9LCA6c291cmNlICIoZGVmbiB1bmRvIFtlZGl0b3JdICh1bmRvISBlZGl0b3IpKVxyXG4ifSB7OnN5bSBvYmo/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBvYmo/IChmbiogW3AxX180OTAyNiNdIChpbnN0YW5jZT8ganMvT2JqZWN0IHAxX180OTAyNiMpKSlcclxuIn0gezpzeW0gZG93biEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGhpcyBhbHQ/XSl9LCA6cHJvdG9jb2wgRWRpdG9yfSB7OnN5bSBhZGQtZXZlbnQtbGlzdGVuZXJzISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb250ZW50IGV2ZW50cy1jaGFuIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtZXZlbnQtbGlzdGVuZXJzIVxyXG4gW2NvbnRlbnQgZXZlbnRzLWNoYW4gb3B0c11cclxuIChkb3RvXHJcbiAgY29udGVudFxyXG4gIChldmVudHMvcmVtb3ZlQWxsKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIFwia2V5ZG93blwiXHJcbiAgIChmblxyXG4gICAgW2VdXHJcbiAgICAod2hlbiAocHJldmVudC1kZWZhdWx0PyBlIG9wdHMpICgucHJldmVudERlZmF1bHQgZSkpXHJcbiAgICAocHV0ISBldmVudHMtY2hhbiBlKSkpXHJcbiAgKGV2ZW50cy9saXN0ZW5cclxuICAgXCJrZXl1cFwiXHJcbiAgIChmbiogW3AxX180OTAzMyNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAzMyMpKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBcImN1dFwiXHJcbiAgIChmbiogW3AxX180OTAzNCNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAzNCMpKSlcclxuICAoZXZlbnRzL2xpc3RlblxyXG4gICBcInBhc3RlXCJcclxuICAgKGZuKiBbcDFfXzQ5MDM1I10gKHB1dCEgZXZlbnRzLWNoYW4gcDFfXzQ5MDM1IykpKVxyXG4gIChldmVudHMvbGlzdGVuXHJcbiAgIFwibW91c2V1cFwiXHJcbiAgIChmbiogW3AxX180OTAzNiNdIChwdXQhIGV2ZW50cy1jaGFuIHAxX180OTAzNiMpKSkpKVxyXG4ifSB7OnN5bSByZXNldC1lZGl0LWhpc3RvcnkhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXMgc3RhcnRdKX0sIDpwcm90b2NvbCBFZGl0b3J9IHs6c3ltIGhpZGUtZXJyb3ItbWVzc2FnZXMhLCA6bWV0YSB7OmRvYyAiSGlkZXMgYWxsIGVycm9yIHBvcHVwcy4iLCA6YXJnbGlzdHMgKFtwYXJlbnQtZWxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhpZGUtZXJyb3ItbWVzc2FnZXMhXHJcbiBcIkhpZGVzIGFsbCBlcnJvciBwb3B1cHMuXCJcclxuIFtwYXJlbnQtZWxlbV1cclxuIChkb3NlcVxyXG4gIFtlbGVtICgtPiBwYXJlbnQtZWxlbSAoLnF1ZXJ5U2VsZWN0b3JBbGwgXCIuZXJyb3ItdGV4dFwiKSBhcnJheS1zZXEpXVxyXG4gICgucmVtb3ZlQ2hpbGQgcGFyZW50LWVsZW0gZWxlbSkpKVxyXG4ifSB7OnN5bSBFZGl0b3IsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChhcHBlbmQtdGV4dCEgY2FuLXJlZG8/IGNhbi11bmRvPyBkb3duISBlZGl0LWFuZC1yZWZyZXNoISBlbnRlciEgZXZhbCEgaW5pdGlhbGl6ZSEgcmVkbyEgcmVmcmVzaCEgcmVmcmVzaC1hZnRlci1jdXQtcGFzdGUhIHJlZnJlc2gtYWZ0ZXIta2V5LWV2ZW50ISByZXNldC1lZGl0LWhpc3RvcnkhIHRhYiEgdW5kbyEgdXAhIHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hKX0pLCBjbGpzLnRvb2xzLnJlYWRlci5pbXBsLmNvbW1vbnMgKHs6c3ltIG1hdGNoLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF0Y2gtbnVtYmVyXHJcbiBbc11cclxuIChpZlxyXG4gIChtYXRjaGVzPyBpbnQtcGF0dGVybiBzKVxyXG4gIChtYXRjaC1pbnQgcylcclxuICAoaWZcclxuICAgKG1hdGNoZXM/IGZsb2F0LXBhdHRlcm4gcylcclxuICAgKG1hdGNoLWZsb2F0IHMpXHJcbiAgICh3aGVuIChtYXRjaGVzPyByYXRpby1wYXR0ZXJuIHMpIChtYXRjaC1yYXRpbyBzKSkpKSlcclxuIn0gezpzeW0gc2tpcC1saW5lLCA6bWV0YSB7OmRvYyAiQWR2YW5jZXMgdGhlIHJlYWRlciB0byB0aGUgZW5kIG9mIGEgbGluZS4gUmV0dXJucyB0aGUgcmVhZGVyIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2tpcC1saW5lXHJcbiBcIkFkdmFuY2VzIHRoZSByZWFkZXIgdG8gdGhlIGVuZCBvZiBhIGxpbmUuIFJldHVybnMgdGhlIHJlYWRlclwiXHJcbiBbcmVhZGVyXVxyXG4gKGxvb3AgW10gKHdoZW4tbm90IChuZXdsaW5lPyAocmVhZC1jaGFyIHJlYWRlcikpIChyZWN1cikpKVxyXG4gcmVhZGVyKVxyXG4ifSB7OnN5bSBpbnQtcGF0dGVybiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludC1wYXR0ZXJuXHJcbiAjXCJeKFstK10/KSg/OigwKXwoWzEtOV1bMC05XSopfDBbeFhdKFswLTlBLUZhLWZdKyl8MChbMC03XSspfChbMS05XVswLTldPylbclJdKFswLTlBLVphLXpdKyl8MFswLTldKykoTik/JFwiKVxyXG4ifSB7OnN5bSByZWFkLWNvbW1lbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyICYgX10pfSwgOnNvdXJjZSAiKGRlZm4gcmVhZC1jb21tZW50IFtyZHIgJiBfXSAoc2tpcC1saW5lIHJkcikpXHJcbiJ9IHs6c3ltIHBhcnNlLXN5bWJvbCwgOm1ldGEgezpkb2MgIlBhcnNlcyBhIHN0cmluZyBpbnRvIGEgdmVjdG9yIG9mIHRoZSBuYW1lc3BhY2UgYW5kIHN5bWJvbCIsIDphcmdsaXN0cyAoW3Rva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2Utc3ltYm9sXHJcbiBcIlBhcnNlcyBhIHN0cmluZyBpbnRvIGEgdmVjdG9yIG9mIHRoZSBuYW1lc3BhY2UgYW5kIHN5bWJvbFwiXHJcbiBbdG9rZW5dXHJcbiAod2hlbi1ub3RcclxuICAob3JcclxuICAgKGlkZW50aWNhbD8gXCJcIiB0b2tlbilcclxuICAgKHRydWU/ICgudGVzdCAjXCI6JFwiIHRva2VuKSlcclxuICAgKHRydWU/ICgudGVzdCAjXCJeOjpcIiB0b2tlbikpKVxyXG4gIChsZXRcclxuICAgW25zLWlkeFxyXG4gICAgKC5pbmRleE9mIHRva2VuIFwiL1wiKVxyXG4gICAgbnNcclxuICAgICh3aGVuIChwb3M/IG5zLWlkeCkgKHN1YnMgdG9rZW4gMCBucy1pZHgpKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8gbnMpXHJcbiAgICAobGV0XHJcbiAgICAgW25zLWlkeCAoaW5jIG5zLWlkeCldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgICg9PSBucy1pZHggKGNvdW50IHRva2VuKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW3N5bSAoc3VicyB0b2tlbiBucy1pZHgpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICAoYW5kXHJcbiAgICAgICAgIChub3QgKG51bWVyaWM/IChudGggc3ltIDApKSlcclxuICAgICAgICAgKG5vdCAoaWRlbnRpY2FsPyBcIlwiIHN5bSkpXHJcbiAgICAgICAgIChmYWxzZT8gKC50ZXN0ICNcIjokXCIgbnMpKVxyXG4gICAgICAgICAob3IgKGlkZW50aWNhbD8gc3ltIFwiL1wiKSAoPT0gLTEgKC5pbmRleE9mIHN5bSBcIi9cIikpKSlcclxuICAgICAgICBbbnMgc3ltXSkpKSlcclxuICAgICh3aGVuXHJcbiAgICAgKG9yIChpZGVudGljYWw/IHRva2VuIFwiL1wiKSAoPT0gLTEgKC5pbmRleE9mIHRva2VuIFwiL1wiKSkpXHJcbiAgICAgW25pbCB0b2tlbl0pKSkpKVxyXG4ifSB7OnN5bSBudW1iZXItbGl0ZXJhbD8sIDptZXRhIHs6ZG9jICJDaGVja3Mgd2hldGhlciB0aGUgcmVhZGVyIGlzIGF0IHRoZSBzdGFydCBvZiBhIG51bWJlciBsaXRlcmFsIiwgOmFyZ2xpc3RzIChbcmVhZGVyIGluaXRjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWJlci1saXRlcmFsP1xyXG4gXCJDaGVja3Mgd2hldGhlciB0aGUgcmVhZGVyIGlzIGF0IHRoZSBzdGFydCBvZiBhIG51bWJlciBsaXRlcmFsXCJcclxuIFtyZWFkZXIgaW5pdGNoXVxyXG4gKG9yXHJcbiAgKG51bWVyaWM/IGluaXRjaClcclxuICAoYW5kXHJcbiAgIChvciAoaWRlbnRpY2FsPyBcXCsgaW5pdGNoKSAoaWRlbnRpY2FsPyBcXC0gaW5pdGNoKSlcclxuICAgKG51bWVyaWM/IChwZWVrLWNoYXIgcmVhZGVyKSkpKSlcclxuIn0gezpzeW0gcmVhZC1wYXN0LCA6bWV0YSB7OmRvYyAiUmVhZCB1bnRpbCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBkb2Vzbid0IG1hdGNoIHByZWQsIHJldHVybmluZ1xuICAgY2hhci4iLCA6YXJnbGlzdHMgKFtwcmVkIHJkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtcGFzdFxyXG4gXCJSZWFkIHVudGlsIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgbWF0Y2ggcHJlZCwgcmV0dXJuaW5nXFxuICAgY2hhci5cIlxyXG4gW3ByZWQgcmRyXVxyXG4gKGxvb3AgW2NoIChyZWFkLWNoYXIgcmRyKV0gKGlmIChwcmVkIGNoKSAocmVjdXIgKHJlYWQtY2hhciByZHIpKSBjaCkpKVxyXG4ifSB7OnN5bSBmbG9hdC1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBmbG9hdC1wYXR0ZXJuICNcIihbLStdP1swLTldKyhcXC5bMC05XSopPyhbZUVdWy0rXT9bMC05XSspPykoTSk/XCIpXHJcbiJ9IHs6c3ltIG1hdGNoZXM/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BhdHRlcm4gc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hdGNoZXM/XHJcbiBbcGF0dGVybiBzXVxyXG4gKGxldCBbW21hdGNoXSAocmUtZmluZCBwYXR0ZXJuIHMpXSAoaWRlbnRpY2FsPyBtYXRjaCBzKSkpXHJcbiJ9IHs6c3ltIHRocm93aW5nLXJlYWRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttc2ddKX0sIDpzb3VyY2UgIihkZWZuIHRocm93aW5nLXJlYWRlciBbbXNnXSAoZm4gW3JkciAmIF9dIChyZWFkZXItZXJyb3IgcmRyIG1zZykpKVxyXG4ifSB7OnN5bSByYXRpby1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiByYXRpby1wYXR0ZXJuICNcIihbLStdP1swLTldKykvKFswLTldKylcIilcclxuIn0pLCBjbGpzLnRvb2xzLnJlYWRlci5lZG4gKHs6c3ltIHJlYWQsIDptZXRhIHs6ZG9jICJSZWFkcyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYW4gSVB1c2hiYWNrUmVhZGVyLlxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZSBvdGhlcndpc2UgcmV0dXJucyBlb2YuXG4gICBJZiBubyByZWFkZXIgaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxuXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xuXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBkb2Vzbid0IGRlcGVuZCBvbiBkeW5hbWljIFZhcnMsIGFsbCBjb25maWd1cmF0aW9uXG4gICBpcyBkb25lIGJ5IHBhc3NpbmcgYW4gb3B0IG1hcC5cblxuICAgb3B0cyBpcyBhIG1hcCB0aGF0IGNhbiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcga2V5czpcbiAgIDplb2YgLSB2YWx1ZSB0byByZXR1cm4gb24gZW5kLW9mLWZpbGUuIFdoZW4gbm90IHN1cHBsaWVkLCBlb2YgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgIDpyZWFkZXJzICAtIGEgbWFwIG9mIHRhZyBzeW1ib2xzIHRvIGRhdGEtcmVhZGVyIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBkZWZhdWx0LWRhdGEtcmVhZGVycy5cbiAgICAgICAgICAgICAgV2hlbiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIHdpbGwgYmUgdXNlZC5cbiAgIDpkZWZhdWx0IC0gQSBmdW5jdGlvbiBvZiB0d28gYXJncywgdGhhdCB3aWxsLCBpZiBwcmVzZW50IGFuZCBubyByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnLFxuICAgICAgICAgICAgICBiZSBjYWxsZWQgd2l0aCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuIiwgOmFyZ2xpc3RzIFtbcmVhZGVyXSBbezprZXlzIFtlb2ZdLCA6YXMgb3B0c30gcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gZW9mIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkXHJcbiBcIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXFxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZSBvdGhlcndpc2UgcmV0dXJucyBlb2YuXFxuICAgSWYgbm8gcmVhZGVyIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cXG5cXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcXG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcXG5cXG4gICBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBkb2Vzbid0IGRlcGVuZCBvbiBkeW5hbWljIFZhcnMsIGFsbCBjb25maWd1cmF0aW9uXFxuICAgaXMgZG9uZSBieSBwYXNzaW5nIGFuIG9wdCBtYXAuXFxuXFxuICAgb3B0cyBpcyBhIG1hcCB0aGF0IGNhbiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcga2V5czpcXG4gICA6ZW9mIC0gdmFsdWUgdG8gcmV0dXJuIG9uIGVuZC1vZi1maWxlLiBXaGVuIG5vdCBzdXBwbGllZCwgZW9mIHRocm93cyBhbiBleGNlcHRpb24uXFxuICAgOnJlYWRlcnMgIC0gYSBtYXAgb2YgdGFnIHN5bWJvbHMgdG8gZGF0YS1yZWFkZXIgZnVuY3Rpb25zIHRvIGJlIGNvbnNpZGVyZWQgYmVmb3JlIGRlZmF1bHQtZGF0YS1yZWFkZXJzLlxcbiAgICAgICAgICAgICAgV2hlbiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIHdpbGwgYmUgdXNlZC5cXG4gICA6ZGVmYXVsdCAtIEEgZnVuY3Rpb24gb2YgdHdvIGFyZ3MsIHRoYXQgd2lsbCwgaWYgcHJlc2VudCBhbmQgbm8gcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyxcXG4gICAgICAgICAgICAgIGJlIGNhbGxlZCB3aXRoIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS5cIlxyXG4gKFtyZWFkZXJdIChyZWFkIHt9IHJlYWRlcikpXHJcbiAoW3s6a2V5cyBbZW9mXSwgOmFzIG9wdHN9IHJlYWRlcl1cclxuICAobGV0XHJcbiAgIFtlb2YtZXJyb3I/IChub3QgKGNvbnRhaW5zPyBvcHRzIDplb2YpKV1cclxuICAgKHJlYWQgcmVhZGVyIGVvZi1lcnJvcj8gZW9mIG9wdHMpKSlcclxuIChbcmVhZGVyIGVvZi1lcnJvcj8gZW9mIG9wdHNdXHJcbiAgKHRyeVxyXG4gICAobG9vcFxyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbY2ggKHJlYWQtY2hhciByZWFkZXIpXVxyXG4gICAgIChjb25kXHJcbiAgICAgICh3aGl0ZXNwYWNlPyBjaClcclxuICAgICAgKHJlY3VyKVxyXG4gICAgICAobmlsPyBjaClcclxuICAgICAgKGlmIGVvZi1lcnJvcj8gKGVyci90aHJvdy1lb2YtZXJyb3IgcmVhZGVyIG5pbCkgZW9mKVxyXG4gICAgICAobnVtYmVyLWxpdGVyYWw/IHJlYWRlciBjaClcclxuICAgICAgKHJlYWQtbnVtYmVyIHJlYWRlciBjaCBvcHRzKVxyXG4gICAgICA6ZWxzZVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZiAobWFjcm9zIGNoKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIGZcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtyZXMgKGYgcmVhZGVyIGNoIG9wdHMpXVxyXG4gICAgICAgICAoaWYgKGlkZW50aWNhbD8gcmVzIHJlYWRlcikgKHJlY3VyKSByZXMpKVxyXG4gICAgICAgIChyZWFkLXN5bWJvbCByZWFkZXIgY2gpKSkpKSlcclxuICAgKGNhdGNoXHJcbiAgICBqcy9FcnJvclxyXG4gICAgZVxyXG4gICAgKGlmXHJcbiAgICAgKGV4LWluZm8/IGUpXHJcbiAgICAgKGxldFxyXG4gICAgICBbZCAoZXgtZGF0YSBlKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoPSA6cmVhZGVyLWV4Y2VwdGlvbiAoOnR5cGUgZCkpXHJcbiAgICAgICAodGhyb3cgZSlcclxuICAgICAgICh0aHJvd1xyXG4gICAgICAgIChleC1pbmZvXHJcbiAgICAgICAgICguLW1lc3NhZ2UgZSlcclxuICAgICAgICAgKG1lcmdlXHJcbiAgICAgICAgICB7OnR5cGUgOnJlYWRlci1leGNlcHRpb259XHJcbiAgICAgICAgICBkXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoaW5kZXhpbmctcmVhZGVyPyByZWFkZXIpXHJcbiAgICAgICAgICAgezpsaW5lIChnZXQtbGluZS1udW1iZXIgcmVhZGVyKSxcclxuICAgICAgICAgICAgOmNvbHVtbiAoZ2V0LWNvbHVtbi1udW1iZXIgcmVhZGVyKSxcclxuICAgICAgICAgICAgOmZpbGUgKGdldC1maWxlLW5hbWUgcmVhZGVyKX0pKVxyXG4gICAgICAgICBlKSkpKVxyXG4gICAgICh0aHJvd1xyXG4gICAgICAoZXgtaW5mb1xyXG4gICAgICAgKC4tbWVzc2FnZSBlKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgezp0eXBlIDpyZWFkZXItZXhjZXB0aW9ufVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoaW5kZXhpbmctcmVhZGVyPyByZWFkZXIpXHJcbiAgICAgICAgIHs6bGluZSAoZ2V0LWxpbmUtbnVtYmVyIHJlYWRlciksXHJcbiAgICAgICAgICA6Y29sdW1uIChnZXQtY29sdW1uLW51bWJlciByZWFkZXIpLFxyXG4gICAgICAgICAgOmZpbGUgKGdldC1maWxlLW5hbWUgcmVhZGVyKX0pKVxyXG4gICAgICAgZSkpKSkpKSlcclxuIn0gezpzeW0gcmVhZC1zdHJpbmcsIDptZXRhIHs6ZG9jICJSZWFkcyBvbmUgb2JqZWN0IGZyb20gdGhlIHN0cmluZyBzLlxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cblxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcblxuICAgb3B0cyBpcyBhIG1hcCBhcyBwZXIgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQiLCA6YXJnbGlzdHMgW1tzXSBbb3B0cyBzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zdHJpbmdcclxuIFwiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxcblxcbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xcblxcbiAgIG9wdHMgaXMgYSBtYXAgYXMgcGVyIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkXCJcclxuIChbc10gKHJlYWQtc3RyaW5nIHs6ZW9mIG5pbH0gcykpXHJcbiAoW29wdHMgc11cclxuICAod2hlbiAoYW5kIHMgKG5vdD0gcyBcIlwiKSkgKHJlYWQgb3B0cyAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcykpKSkpXHJcbiJ9KSwgY2xqcy5zb3VyY2UtbWFwLmJhc2U2NC12bHEgKHs6c3ltIGVuY29kZS12YWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuY29kZS12YWxcclxuIFtuXVxyXG4gKGxldFxyXG4gIFtzYiAoU3RyaW5nQnVmZmVyLikgdmxxICh0by12bHEtc2lnbmVkIG4pXVxyXG4gIChsb29wXHJcbiAgIFtkaWdpdFxyXG4gICAgKGJpdC1hbmQgdmxxIHZscS1iYXNlLW1hc2spXHJcbiAgICB2bHFcclxuICAgIChiaXQtc2hpZnQtcmlnaHQtemVyby1maWxsIHZscSB2bHEtYmFzZS1zaGlmdCldXHJcbiAgIChpZlxyXG4gICAgKHBvcz8gdmxxKVxyXG4gICAgKGxldFxyXG4gICAgIFtkaWdpdCAoYml0LW9yIGRpZ2l0IHZscS1jb250aW51YXRpb24tYml0KV1cclxuICAgICAoLmFwcGVuZCBzYiAoYmFzZTY0L2VuY29kZSBkaWdpdCkpXHJcbiAgICAgKHJlY3VyXHJcbiAgICAgIChiaXQtYW5kIHZscSB2bHEtYmFzZS1tYXNrKVxyXG4gICAgICAoYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsbCB2bHEgdmxxLWJhc2Utc2hpZnQpKSlcclxuICAgICguYXBwZW5kIHNiIChiYXNlNjQvZW5jb2RlIGRpZ2l0KSkpKVxyXG4gIChzdHIgc2IpKSlcclxuIn0gezpzeW0gZW5jb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuIGVuY29kZSBbdl0gKGFwcGx5IHN0ciAobWFwIGVuY29kZS12YWwgdikpKVxyXG4ifSB7OnN5bSB2bHEtY29udGludWF0aW9uLWJpdCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgdmxxLWNvbnRpbnVhdGlvbi1iaXQgdmxxLWJhc2UpXHJcbiJ9IHs6c3ltIHZscS1iYXNlLW1hc2ssIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHZscS1iYXNlLW1hc2sgKGRlYyB2bHEtYmFzZSkpXHJcbiJ9IHs6c3ltIGRlY29kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVjb2RlXHJcbiBbc11cclxuIChsZXRcclxuICBbbCAoLi1sZW5ndGggcyldXHJcbiAgKGxvb3BcclxuICAgW2kgMCByZXN1bHQgMCBzaGlmdCAwXVxyXG4gICAod2hlblxyXG4gICAgKD49IGkgbClcclxuICAgICh0aHJvdyAoanMvRXJyb3IuIFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpKSlcclxuICAgKGxldFxyXG4gICAgW2RpZ2l0IChiYXNlNjQvZGVjb2RlICguY2hhckF0IHMgaSkpXVxyXG4gICAgKGxldFxyXG4gICAgIFtpXHJcbiAgICAgIChpbmMgaSlcclxuICAgICAgY29udGludWF0aW9uP1xyXG4gICAgICAocG9zPyAoYml0LWFuZCBkaWdpdCB2bHEtY29udGludWF0aW9uLWJpdCkpXHJcbiAgICAgIGRpZ2l0XHJcbiAgICAgIChiaXQtYW5kIGRpZ2l0IHZscS1iYXNlLW1hc2spXHJcbiAgICAgIHJlc3VsdFxyXG4gICAgICAoKyByZXN1bHQgKGJpdC1zaGlmdC1sZWZ0IGRpZ2l0IHNoaWZ0KSlcclxuICAgICAgc2hpZnRcclxuICAgICAgKCsgc2hpZnQgdmxxLWJhc2Utc2hpZnQpXVxyXG4gICAgIChpZlxyXG4gICAgICBjb250aW51YXRpb24/XHJcbiAgICAgIChyZWN1ciBpIHJlc3VsdCBzaGlmdClcclxuICAgICAgKGxhenktc2VxXHJcbiAgICAgICAoY29uc1xyXG4gICAgICAgIChmcm9tLXZscS1zaWduZWQgcmVzdWx0KVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3MgKC5zdWJzdHJpbmcgcyBpKV1cclxuICAgICAgICAgKHdoZW4tbm90IChzdHJpbmcvYmxhbms/IHMpIChkZWNvZGUgcykpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIHZscS1iYXNlLXNoaWZ0LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB2bHEtYmFzZS1zaGlmdCA1KVxyXG4ifSB7OnN5bSBmcm9tLXZscS1zaWduZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZyb20tdmxxLXNpZ25lZFxyXG4gW3ZdXHJcbiAobGV0XHJcbiAgW25lZz8gKD0gKGJpdC1hbmQgdiAxKSAxKSBzaGlmdGVkIChiaXQtc2hpZnQtcmlnaHQgdiAxKV1cclxuICAoaWYgbmVnPyAoLSBzaGlmdGVkKSBzaGlmdGVkKSkpXHJcbiJ9IHs6c3ltIHRvLXZscS1zaWduZWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvLXZscS1zaWduZWRcclxuIFt2XVxyXG4gKGlmXHJcbiAgKG5lZz8gdilcclxuICAoaW5jIChiaXQtc2hpZnQtbGVmdCAoLSB2KSAxKSlcclxuICAoKyAoYml0LXNoaWZ0LWxlZnQgdiAxKSAwKSkpXHJcbiJ9IHs6c3ltIHZscS1iYXNlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB2bHEtYmFzZSAoYml0LXNoaWZ0LWxlZnQgMSB2bHEtYmFzZS1zaGlmdCkpXHJcbiJ9KSwgZXhwb3VuZC5hbnNpICh7OnN5bSAqcHJpbnQtc3R5bGVzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpwcmludC1zdHlsZXMqXHJcbiB7Omdvb2Qta2V5IFs6Z3JlZW5dLFxyXG4gIDp3YXJuaW5nLWtleSBbOmJvbGRdLFxyXG4gIDpjb3JyZWN0LWtleSBbOmdyZWVuXSxcclxuICA6aGlnaGxpZ2h0IFs6Ym9sZF0sXHJcbiAgOmZvY3VzLXBhdGggWzptYWdlbnRhXSxcclxuICA6YmFkLXZhbHVlIFs6cmVkXSxcclxuICA6Zm9vdGVyIFs6Y3lhbl0sXHJcbiAgOmhlYWRlciBbOmN5YW5dLFxyXG4gIDpnb29kLXByZWQgWzpncmVlbl0sXHJcbiAgOmdvb2QgWzpncmVlbl0sXHJcbiAgOmZvY3VzLWtleSBbOmJvbGRdLFxyXG4gIDpwb2ludGVyIFs6bWFnZW50YV0sXHJcbiAgOmJhZCBbOnJlZF0sXHJcbiAgOmVycm9yLWtleSBbOnJlZF0sXHJcbiAgOm5vbmUgWzpub25lXSxcclxuICA6bWVzc2FnZSBbOm1hZ2VudGFdfSlcclxuIn0gezpzeW0gKmVuYWJsZS1jb2xvciosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICplbmFibGUtY29sb3IqIGZhbHNlKVxyXG4ifSB7OnN5bSBzZ3ItY29kZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHNnci1jb2RlXHJcbiBcIk1hcCBvZiBzeW1ib2xzIHRvIG51bWVyaWMgU0dSIChzZWxlY3QgZ3JhcGhpYyByZW5kaXRpb24pIGNvZGVzLlwiXHJcbiB7OmJvbGQgMSxcclxuICA6YmxpbmsgNSxcclxuICA6d2hpdGUgMzcsXHJcbiAgOnllbGxvdyAzMyxcclxuICA6YmctcmVkIDQxLFxyXG4gIDpiZy1jeWFuIDQ2LFxyXG4gIDpncmVlbiAzMixcclxuICA6YmctZ3JlZW4gNDIsXHJcbiAgOmZnLXJlc2V0IDM5LFxyXG4gIDpjeWFuIDM2LFxyXG4gIDpiZy1ibGFjayA0MCxcclxuICA6ZmctMjU2IDM4LFxyXG4gIDp1bmRlcmxpbmUgMyxcclxuICA6YmctbWFnZW50YSA0NSxcclxuICA6c3RyaWtlIDksXHJcbiAgOmJnLXllbGxvdyA0MyxcclxuICA6aGlkZGVuIDgsXHJcbiAgOnJlZCAzMSxcclxuICA6Ymx1ZSAzNCxcclxuICA6Ymctd2hpdGUgNDcsXHJcbiAgOmJnLTI1NiA0OCxcclxuICA6bWFnZW50YSAzNSxcclxuICA6YmctYmx1ZSA0NCxcclxuICA6YmctcmVzZXQgNDksXHJcbiAgOm5vbmUgMCxcclxuICA6cmV2ZXJzZSA3LFxyXG4gIDpibGFjayAzMH0pXHJcbiJ9IHs6c3ltIGVzY2FwZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gQU5TSSBlc2NvcGUgc3RyaW5nIHdoaWNoIHdpbGwgZW5hY3QgdGhlIGdpdmVuIFNHUiBjb2Rlcy4iLCA6YXJnbGlzdHMgKFsmIGNvZGVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjYXBlXHJcbiBcIlJldHVybnMgYW4gQU5TSSBlc2NvcGUgc3RyaW5nIHdoaWNoIHdpbGwgZW5hY3QgdGhlIGdpdmVuIFNHUiBjb2Rlcy5cIlxyXG4gWyYgY29kZXNdXHJcbiAoZXNjIGNvZGVzKSlcclxuIn0gezpzeW0gY29sb3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcyAmIHN0eWxlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbG9yXHJcbiBbcyAmIHN0eWxlc11cclxuIChpZiAqZW5hYmxlLWNvbG9yKiAoYXBwbHkgc2dyIHMgKHJlc29sdmUtc3R5bGVzIHN0eWxlcykpIHMpKVxyXG4ifSB7OnN5bSBlc2MsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIEFOU0kgZXNjb3BlIHN0cmluZyB3aGljaCB3aWxsIGFwcGx5IHRoZSBnaXZlbiBjb2xsZWN0aW9uIG9mIFNHUlxuICBjb2Rlcy4iLCA6YXJnbGlzdHMgKFtjb2Rlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY1xyXG4gXCJSZXR1cm5zIGFuIEFOU0kgZXNjb3BlIHN0cmluZyB3aGljaCB3aWxsIGFwcGx5IHRoZSBnaXZlbiBjb2xsZWN0aW9uIG9mIFNHUlxcbiAgY29kZXMuXCJcclxuIFtjb2Rlc11cclxuIChsZXRcclxuICBbY29kZXMgKG1hcCBzZ3ItY29kZSBjb2RlcyBjb2RlcykgY29kZXMgKHN0ci9qb2luIFxcOyBjb2RlcyldXHJcbiAgKHN0ciBcXBsgXFxbIGNvZGVzIFxcbSkpKVxyXG4ifSB7OnN5bSBzZ3IsIDptZXRhIHs6ZG9jICJXcmFwcyB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggU0dSIGVzY2FwZXMgdG8gYXBwbHkgdGhlIGdpdmVuIGNvZGVzLCB0aGVuIHJlc2V0XG4gIHRoZSBncmFwaGljcy4iLCA6YXJnbGlzdHMgKFtzdHJpbmcgJiBjb2Rlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNnclxyXG4gXCJXcmFwcyB0aGUgZ2l2ZW4gc3RyaW5nIHdpdGggU0dSIGVzY2FwZXMgdG8gYXBwbHkgdGhlIGdpdmVuIGNvZGVzLCB0aGVuIHJlc2V0XFxuICB0aGUgZ3JhcGhpY3MuXCJcclxuIFtzdHJpbmcgJiBjb2Rlc11cclxuIChzdHIgKGVzYyBjb2Rlcykgc3RyaW5nIChlc2NhcGUgOm5vbmUpKSlcclxuIn0gezpzeW0gYW5zaS1jb2RlPywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgYW5zaS1jb2RlPyBzZ3ItY29kZSlcclxuIn0gezpzeW0gc3RyaXAsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGNvbG9yIGNvZGVzIGZyb20gdGhlIGdpdmVuIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzdHJpbmddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpcFxyXG4gXCJSZW1vdmVzIGNvbG9yIGNvZGVzIGZyb20gdGhlIGdpdmVuIHN0cmluZy5cIlxyXG4gW3N0cmluZ11cclxuIChzdHIvcmVwbGFjZSBzdHJpbmcgI1wiXFx1MDAxYlxcW1swLTk7XSpbbUtdXCIgXCJcIikpXHJcbiJ9IHs6c3ltIHJlc29sdmUtc3R5bGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0eWxlc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtc3R5bGVzXHJcbiBbc3R5bGVzXVxyXG4gKGlmLWxldFxyXG4gIFtyZXNcclxuICAgKG5vdC1lbXB0eVxyXG4gICAgKG1hcGNhdFxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180OTAwNSNdXHJcbiAgICAgIChvclxyXG4gICAgICAgKHdoZW4tbGV0IFtyZXMgKCpwcmludC1zdHlsZXMqIHAxX180OTAwNSMpXSByZXMpXHJcbiAgICAgICBbcDFfXzQ5MDA1I10pKVxyXG4gICAgIHN0eWxlcykpXVxyXG4gIHJlc1xyXG4gIFs6Ym9sZF0pKVxyXG4ifSksIGV4cG91bmQucHJpbnRlciAoezpzeW0gbWlzc2luZy1rZXksIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3Npbmcta2V5XHJcbiBbZm9ybV1cclxuIChsZXRcclxuICBbW2JyYW5jaCBtYXRjaF1cclxuICAgKHMvY29uZm9ybSA6ZXhwb3VuZC5zcGVjL2NvbnRhaW5zLWtleS1wcmVkIChudGggZm9ybSAyKSldXHJcbiAgKGNhc2VcclxuICAgYnJhbmNoXHJcbiAgIDpzaW1wbGVcclxuICAgKDprdyBtYXRjaClcclxuICAgOmNvbXBvdW5kXHJcbiAgIChzdW1tYXJpemUta2V5LWNsYXVzZSBbYnJhbmNoIG1hdGNoXSkpKSlcclxuIn0gezpzeW0gaW5kZW50LWxldmVsLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBpbmRlbnQtbGV2ZWwgMilcclxuIn0gezpzeW0gbWF4LXNwZWMtc3RyLXdpZHRoLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBtYXgtc3BlYy1zdHItd2lkdGggMTAwKVxyXG4ifSB7OnN5bSBhbm9uLWZuLXN0ciwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgYW5vbi1mbi1zdHIgXCI8YW5vbnltb3VzIGZ1bmN0aW9uPlwiKVxyXG4ifSB7OnN5bSBwcmludC1zcGVjLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHJvYmxlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1zcGVjLWtleXNcclxuIFtwcm9ibGVtc11cclxuIChsZXRcclxuICBba2V5c1xyXG4gICAoa2V5d29yZHNcclxuICAgIChtYXBcclxuICAgICAoZm4qIFtwMV9fNDkwMDcjXSAobWlzc2luZy1rZXkgKDpwcmVkIHAxX180OTAwNyMpKSlcclxuICAgICBwcm9ibGVtcykpXVxyXG4gIChpZlxyXG4gICAoYW5kXHJcbiAgICAoZW1wdHk/ICg6ZXhwb3VuZC92aWEgKGZpcnN0IHByb2JsZW1zKSkpXHJcbiAgICAoc29tZSBzaW1wbGUta2V5d29yZD8ga2V5cykpXHJcbiAgIG5pbFxyXG4gICAoLT4+XHJcbiAgICAoa2V5LT5zcGVjIGtleXMgcHJvYmxlbXMpXHJcbiAgICAobWFwIChmbiBbW2sgdl1dIHtcImtleVwiIGssIFwic3BlY1wiIChzaW1wbGUtc3BlYy1vci1uYW1lIHYpfSkpXHJcbiAgICAoc29ydC1ieSAoZm4qIFtwMV9fNDkwMDgjXSAoZ2V0IHAxX180OTAwOCMgXCJrZXlcIikpKVxyXG4gICAgKHBwcmludC9wcmludC10YWJsZSBbXCJrZXlcIiBcInNwZWNcIl0pXHJcbiAgICB3aXRoLW91dC1zdHJcclxuICAgIHN0cmluZy90cmltKSkpKVxyXG4ifSB7OnN5bSBzaW5nbGV0b24/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hzXSl9LCA6c291cmNlICIoZGVmbiBzaW5nbGV0b24/IFt4c10gKD0gMSAoY291bnQgeHMpKSlcclxuIn0gezpzeW0gaW5kZW50LCA6bWV0YSB7OmRvYyAiR2l2ZW4gYW4gcG90ZW50aWFsbHkgbXVsdGktbGluZSBzdHJpbmcsIHJldHVybnMgdGhhdCBzdHJpbmcgaW5kZW50ZWQgYnlcbiAgICdpbmRlbnQtbGV2ZWwnIHNwYWNlcy4gT3B0aW9uYWxseSwgY2FuIGluZGVudCBmaXJzdCBsaW5lIGFuZCBvdGhlciBsaW5lc1xuICAgZGlmZmVyZW50IGFtb3VudHMuIiwgOmFyZ2xpc3RzIFtbc10gW2luZGVudC1sZXZlbCBzXSBbZmlyc3QtbGluZS1pbmRlbnQgcmVzdC1saW5lcy1pbmRlbnQgc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGVudFxyXG4gXCJHaXZlbiBhbiBwb3RlbnRpYWxseSBtdWx0aS1saW5lIHN0cmluZywgcmV0dXJucyB0aGF0IHN0cmluZyBpbmRlbnRlZCBieVxcbiAgICdpbmRlbnQtbGV2ZWwnIHNwYWNlcy4gT3B0aW9uYWxseSwgY2FuIGluZGVudCBmaXJzdCBsaW5lIGFuZCBvdGhlciBsaW5lc1xcbiAgIGRpZmZlcmVudCBhbW91bnRzLlwiXHJcbiAoW3NdIChpbmRlbnQgaW5kZW50LWxldmVsIHMpKVxyXG4gKFtpbmRlbnQtbGV2ZWwgc10gKGluZGVudCBpbmRlbnQtbGV2ZWwgaW5kZW50LWxldmVsIHMpKVxyXG4gKFtmaXJzdC1saW5lLWluZGVudCByZXN0LWxpbmVzLWluZGVudCBzXVxyXG4gIChsZXRcclxuICAgW1tsaW5lICYgbGluZXNdIChzdHJpbmcvc3BsaXQtbGluZXMgKHN0ciBzKSldXHJcbiAgICgtPj5cclxuICAgIGxpbmVzXHJcbiAgICAobWFwXHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ5MDEwI11cclxuICAgICAgKHN0ciAoYXBwbHkgc3RyIChyZXBlYXQgcmVzdC1saW5lcy1pbmRlbnQgXCIgXCIpKSBwMV9fNDkwMTAjKSkpXHJcbiAgICAoaW50byBbKHN0ciAoYXBwbHkgc3RyIChyZXBlYXQgZmlyc3QtbGluZS1pbmRlbnQgXCIgXCIpKSBsaW5lKV0pXHJcbiAgICAoc3RyaW5nL2pvaW4gXCJcXG5cIikpKSkpXHJcbiJ9IHs6c3ltIHNpbXBsZS1zcGVjLW9yLW5hbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2ltcGxlLXNwZWMtb3ItbmFtZVxyXG4gW3NwZWMtbmFtZV1cclxuIChsZXRcclxuICBbc3BlYy1zdHJcclxuICAgKGVsaWRlLXNwZWMtbnMgKGVsaWRlLWNvcmUtbnMgKHByLXN0ciAoZXhwYW5kLXNwZWMgc3BlYy1uYW1lKSkpKV1cclxuICAoaWZcclxuICAgKG9yXHJcbiAgICAoPCBtYXgtc3BlYy1zdHItd2lkdGggKGNvdW50IHNwZWMtc3RyKSlcclxuICAgIChzdHJpbmcvaW5jbHVkZXM/IHNwZWMtc3RyIFwiXFxuXCIpKVxyXG4gICBzcGVjLW5hbWVcclxuICAgc3BlYy1zdHIpKSlcclxuIn0gezpzeW0gc3BlY3MtZnJvbS1mb3JtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZpYV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwZWNzLWZyb20tZm9ybVxyXG4gW3ZpYV1cclxuIChsZXRcclxuICBbZm9ybVxyXG4gICAoc29tZS0+IHZpYSBsYXN0IHMvZm9ybSlcclxuICAgY29uZm9ybWVkXHJcbiAgIChzL2NvbmZvcm0gOmV4cG91bmQuc3BlYy9rZXktc3BlYyBmb3JtKV1cclxuICAoaWZcclxuICAgKGFuZCBmb3JtIChub3Q9IDpjbG9qdXJlLnNwZWMuYWxwaGEvaW52YWxpZCBjb25mb3JtZWQpKVxyXG4gICAoLT4+XHJcbiAgICAoOmNsYXVzZXMgY29uZm9ybWVkKVxyXG4gICAgKG1hcCA6c3BlY3MpXHJcbiAgICAodHJlZS1zZXEgY29sbD8gc2VxKVxyXG4gICAgKGZpbHRlciAoZm4gW3hdIChhbmQgKHZlY3Rvcj8geCkgKD0gOmt3IChmaXJzdCB4KSkpKSlcclxuICAgIChtYXAgc2Vjb25kKVxyXG4gICAgc2V0KVxyXG4gICBbXSkpKVxyXG4ifSB7OnN5bSBlbGlkZS1zcGVjLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGlkZS1zcGVjLW5zXHJcbiBbc11cclxuICM/KDpjbGpzICgtPiBzIChzdHJpbmcvcmVwbGFjZSBcImNsanMuc3BlYy5hbHBoYS9cIiBcIlwiKSAoc3RyaW5nL3JlcGxhY2UgXCJjbGpzL3NwZWMvYWxwaGFcIiBcIlwiKSkgOmNsaiAoc3RyaW5nL3JlcGxhY2UgcyBcImNsb2p1cmUuc3BlYy5hbHBoYS9cIiBcIlwiKSkpXHJcbiJ9IHs6c3ltIGtleS0+c3BlYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXlzIHByb2JsZW1zXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5LT5zcGVjXHJcbiBba2V5cyBwcm9ibGVtc11cclxuIChkb3NlcVxyXG4gIFtwIHByb2JsZW1zXVxyXG4gIChhc3NlcnQgKHNvbWU/ICg6ZXhwb3VuZC92aWEgcCkpIHV0aWwvYXNzZXJ0LW1lc3NhZ2UpKVxyXG4gKGxldFxyXG4gIFt2aWFzXHJcbiAgIChtYXAgOmV4cG91bmQvdmlhIHByb2JsZW1zKVxyXG4gICBzcGVjc1xyXG4gICAoaWZcclxuICAgIChldmVyeT8gcXVhbGlmaWVkLWtleXdvcmQ/IGtleXMpXHJcbiAgICBrZXlzXHJcbiAgICAoaWYtbGV0XHJcbiAgICAgW3NwZWNzIChhcHBseSBzZXQvdW5pb24gKG1hcCBzcGVjcy1mcm9tLWZvcm0gdmlhcykpXVxyXG4gICAgIHNwZWNzXHJcbiAgICAga2V5cykpXVxyXG4gIChyZWR1Y2VcclxuICAgKGZuXHJcbiAgICBbbSBrXVxyXG4gICAgKGFzc29jXHJcbiAgICAgbVxyXG4gICAgIGtcclxuICAgICAoaWZcclxuICAgICAgKHF1YWxpZmllZC1rZXl3b3JkPyBrKVxyXG4gICAgICBrXHJcbiAgICAgICgtPj5cclxuICAgICAgIHNwZWNzXHJcbiAgICAgICAoZmlsdGVyIChmbiogW3AxX180OTAwNiNdICg9IChuYW1lIGspIChuYW1lIHAxX180OTAwNiMpKSkpXHJcbiAgICAgICBmaXJzdCkpKSlcclxuICAge31cclxuICAga2V5cykpKVxyXG4ifSB7OnN5bSBlbGlkZS1jb3JlLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGlkZS1jb3JlLW5zXHJcbiBbc11cclxuICM/KDpjbGpzICgtPiBzIChzdHJpbmcvcmVwbGFjZSBcImNsanMuY29yZS9cIiBcIlwiKSAoc3RyaW5nL3JlcGxhY2UgXCJjbGpzL2NvcmUvXCIgXCJcIikpIDpjbGogKHN0cmluZy9yZXBsYWNlIHMgXCJjbG9qdXJlLmNvcmUvXCIgXCJcIikpKVxyXG4ifSB7OnN5bSBwcmludC1taXNzaW5nLWtleXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHJvYmxlbXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludC1taXNzaW5nLWtleXNcclxuIFtwcm9ibGVtc11cclxuIChsZXRcclxuICBba2V5cy1jbGF1c2VzIChkaXN0aW5jdCAobWFwIChjb21wIG1pc3Npbmcta2V5IDpwcmVkKSBwcm9ibGVtcykpXVxyXG4gIChpZlxyXG4gICAoZXZlcnk/IGtleXdvcmQ/IGtleXMtY2xhdXNlcylcclxuICAgKHN0cmluZy9qb2luXHJcbiAgICBcIiwgXCJcclxuICAgIChtYXBcclxuICAgICAoZm4qIFtwMV9fNDkwMDkjXSAoYW5zaS9jb2xvciBwMV9fNDkwMDkjIDpjb3JyZWN0LWtleSkpXHJcbiAgICAgKHNvcnQga2V5cy1jbGF1c2VzKSkpXHJcbiAgIChzdHJcclxuICAgIFwiXFxuXFxuXCJcclxuICAgIChhbnNpL2NvbG9yXHJcbiAgICAgKHBwcmludC1zdHJcclxuICAgICAgKGlmXHJcbiAgICAgICAoc2luZ2xldG9uPyBrZXlzLWNsYXVzZXMpXHJcbiAgICAgICAoZmlyc3Qga2V5cy1jbGF1c2VzKVxyXG4gICAgICAgKGFwcGx5IGxpc3QgJ2FuZCBrZXlzLWNsYXVzZXMpKSlcclxuICAgICA6Y29ycmVjdC1rZXkpKSkpKVxyXG4ifSB7OnN5bSBleHBhbmQtc3BlYywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwYW5kLXNwZWNcclxuIFtzcGVjXVxyXG4gKGxldFxyXG4gIFshc2Vlbi1zcGVjcyAoYXRvbSAje30pXVxyXG4gICh3YWxrL3ByZXdhbGtcclxuICAgKGZuXHJcbiAgICBbeF1cclxuICAgIChpZi1ub3RcclxuICAgICAocXVhbGlmaWVkLWtleXdvcmQ/IHgpXHJcbiAgICAgeFxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3NwIChzL2dldC1zcGVjIHgpXVxyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAoY29udGFpbnM/IEAhc2Vlbi1zcGVjcyB4KVxyXG4gICAgICAgKGRvIChzd2FwISAhc2Vlbi1zcGVjcyBjb25qIHgpIChzL2Zvcm0gc3ApKVxyXG4gICAgICAgeClcclxuICAgICAgeCkpKVxyXG4gICAoaWYgKHMvZ2V0LXNwZWMgc3BlYykgKHMvZm9ybSBzcGVjKSBzcGVjKSkpKVxyXG4ifSB7OnN5bSBrZXl3b3JkcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5d29yZHNcclxuIFtmb3JtXVxyXG4gKC0+PiBmb3JtICh0cmVlLXNlcSBjb2xsPyBzZXEpIChmaWx0ZXIga2V5d29yZD8pKSlcclxuIn0gezpzeW0gbm8tdHJhaWxpbmctd2hpdGVzcGFjZSwgOm1ldGEgezpkb2MgIkdpdmVuIGFuIHBvdGVudGlhbGx5IG11bHRpLWxpbmUgc3RyaW5nLCByZXR1cm5zIHRoYXQgc3RyaW5nIHdpdGggYWxsXG4gIHRyYWlsaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm8tdHJhaWxpbmctd2hpdGVzcGFjZVxyXG4gXCJHaXZlbiBhbiBwb3RlbnRpYWxseSBtdWx0aS1saW5lIHN0cmluZywgcmV0dXJucyB0aGF0IHN0cmluZyB3aXRoIGFsbFxcbiAgdHJhaWxpbmcgd2hpdGVzcGFjZSByZW1vdmVkLlwiXHJcbiBbc11cclxuIChsZXRcclxuICBbcycgKC0+PiBzIHN0cmluZy9zcGxpdC1saW5lcyAobWFwIHN0cmluZy90cmltcikgKHN0cmluZy9qb2luIFwiXFxuXCIpKV1cclxuICAoaWYgKD0gXFxuZXdsaW5lIChsYXN0IHMpKSAoc3RyIHMnIFwiXFxuXCIpIHMnKSkpXHJcbiJ9IHs6c3ltIHBwcmludC1zdHIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcmV0dHktcHJpbnRlZCBzdHJpbmciLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50LXN0clxyXG4gXCJSZXR1cm5zIHRoZSBwcmV0dHktcHJpbnRlZCBzdHJpbmdcIlxyXG4gW3hdXHJcbiAoaWYgKGZuPyB4KSAocHByaW50LWZuIHgpIChwcHJpbnQvd3JpdGUgeCA6c3RyZWFtIG5pbCkpKVxyXG4ifSB7OnN5bSBzdW1tYXJpemUta2V5LWNsYXVzZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtbYnJhbmNoIG1hdGNoXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1bW1hcml6ZS1rZXktY2xhdXNlXHJcbiBbW2JyYW5jaCBtYXRjaF1dXHJcbiAoY2FzZVxyXG4gIGJyYW5jaFxyXG4gIDpzaW1wbGVcclxuICAoOmt3IG1hdGNoKVxyXG4gIDpjb21wb3VuZFxyXG4gIChhcHBseVxyXG4gICBsaXN0XHJcbiAgIChzeW1ib2wgKG5hbWUgKDpvcCBtYXRjaCkpKVxyXG4gICAobWFwIHN1bW1hcml6ZS1rZXktY2xhdXNlICg6Y2xhdXNlcyBtYXRjaCkpKSkpXHJcbiJ9IHs6c3ltIHBwcmludC1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50LWZuXHJcbiBbZl1cclxuICgtPlxyXG4gICM/KDpjbGogKGxldCBbW18gbnMtbiBmLW5dIChyZS1tYXRjaGVzICNcIiguKilcXCQoLio/KShfX1swLTldKyk/XCIgKHN0ciBmKSldIChpZiAocmUtbWF0Y2hlcyAjXCJeZm5fX1xcZCtcXEAuKiRcIiBmLW4pIGFub24tZm4tc3RyIChzdHIgKGNsb2p1cmUubWFpbi9kZW11bmdlIG5zLW4pIFwiL1wiIChjbG9qdXJlLm1haW4vZGVtdW5nZSBmLW4pKSkpIDpjbGpzIChsZXQgW2ZuLXBhcnRzIChzdHJpbmcvc3BsaXQgKHNlY29uZCAocmUtZmluZCAjXCJvYmplY3RcXFsoW15cXCggXFxdXSspLiooXFxufFxcXSk/XCIgKHByLXN0ciBmKSkpICNcIlxcJFwiKSBucy1uIChzdHJpbmcvam9pbiBcIi5cIiAoYnV0bGFzdCBmbi1wYXJ0cykpIGZuLW4gKGxhc3QgZm4tcGFydHMpXSAoaWYgKGVtcHR5PyBucy1uKSBhbm9uLWZuLXN0ciAoc3RyIChkZW11bmdlLXN0ciBucy1uKSBcIi9cIiAoZGVtdW5nZS1zdHIgZm4tbikpKSkpXHJcbiAgKGVsaWRlLWNvcmUtbnMpXHJcbiAgKHN0cmluZy9yZXBsYWNlICNcIi0tXFxkK1wiIFwiXCIpXHJcbiAgKHN0cmluZy9yZXBsYWNlICNcIkBbYS16QS1aMC05XStcIiBcIlwiKSkpXHJcbiJ9KSwgaHRtbC1zb3VwLmNvcmUgKHs6c3ltIGxpbmUtPnNlZ21lbnRzLCA6bWV0YSB7OmRvYyAiU3BsaXRzIGEgbGluZSBpbnRvIHNlZ21lbnRzIHdoZXJlIHRhZ3MgYXJlIHN1cHBvc2VkIHRvIGFwcGVhci4iLCA6YXJnbGlzdHMgKFtsaW5lIHRhZ3MtZm9yLWxpbmUgZXNjYXBlP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtPnNlZ21lbnRzXHJcbiBcIlNwbGl0cyBhIGxpbmUgaW50byBzZWdtZW50cyB3aGVyZSB0YWdzIGFyZSBzdXBwb3NlZCB0byBhcHBlYXIuXCJcclxuIFtsaW5lIHRhZ3MtZm9yLWxpbmUgZXNjYXBlP11cclxuIChsZXRcclxuICBbY29sdW1uc1xyXG4gICAoc2V0IChtYXAgOmNvbHVtbiB0YWdzLWZvci1saW5lKSlcclxuICAgZXNjYXBlLWh0bWwtY2hhclxyXG4gICAoaWYgZXNjYXBlPyBlc2NhcGUtaHRtbC1jaGFyIGlkZW50aXR5KV1cclxuICAobG9vcFxyXG4gICBbaSAwIHNlZ21lbnRzICh0cmFuc2llbnQgW10pIGN1cnJlbnQtc2VnbWVudCAodHJhbnNpZW50IFtdKV1cclxuICAgKGlmLWxldFxyXG4gICAgW2MgKHNvbWUtPiBsaW5lIChnZXQgaSkgZXNjYXBlLWh0bWwtY2hhcildXHJcbiAgICAoaWZcclxuICAgICAoY29udGFpbnM/IGNvbHVtbnMgKGluYyBpKSlcclxuICAgICAocmVjdXJcclxuICAgICAgKGluYyBpKVxyXG4gICAgICAoY29uaiEgc2VnbWVudHMgKHBlcnNpc3RlbnQhIGN1cnJlbnQtc2VnbWVudCkpXHJcbiAgICAgICh0cmFuc2llbnQgW2NdKSlcclxuICAgICAocmVjdXIgKGluYyBpKSBzZWdtZW50cyAoY29uaiEgY3VycmVudC1zZWdtZW50IGMpKSlcclxuICAgICgtPj5cclxuICAgICAocGVyc2lzdGVudCEgY3VycmVudC1zZWdtZW50KVxyXG4gICAgIChjb25qISBzZWdtZW50cylcclxuICAgICBwZXJzaXN0ZW50IVxyXG4gICAgIChtYXAgc3RyL2pvaW4pKSkpKSlcclxuIn0gezpzeW0gdGFnLT5oaWNjdXAsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgSGljY3VwLWNvbXBhdGlibGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBnaXZlbiB0YWcgZGVzY3JpcHRpb24uIiwgOmFyZ2xpc3RzIChbdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFnLT5oaWNjdXBcclxuIFwiUmV0dXJucyBhIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4gdGFnIGRlc2NyaXB0aW9uLlwiXHJcbiBbdGFnXVxyXG4gKGNvbmRcclxuICAoOmRlbGltaXRlcj8gdGFnKVxyXG4gIFs6c3BhbiB7OmNsYXNzIFwiZGVsaW1pdGVyXCJ9XVxyXG4gICg6ZXJyb3I/IHRhZylcclxuICBbOnNwYW4gezpjbGFzcyBcImVycm9yXCIsIDpkYXRhLW1lc3NhZ2UgKDptZXNzYWdlIHRhZyl9XVxyXG4gICg6YmVnaW4/IHRhZylcclxuICAobGV0XHJcbiAgIFt2YWx1ZSAoOnZhbHVlIHRhZyldXHJcbiAgIChjb25kXHJcbiAgICAoc3ltYm9sPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwic3ltYm9sXCJ9XVxyXG4gICAgKGxpc3Q/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJjb2xsZWN0aW9uIGxpc3RcIn1dXHJcbiAgICAodmVjdG9yPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwiY29sbGVjdGlvbiB2ZWN0b3JcIn1dXHJcbiAgICAobWFwPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwiY29sbGVjdGlvbiBtYXBcIn1dXHJcbiAgICAoc2V0PyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwiY29sbGVjdGlvbiBzZXRcIn1dXHJcbiAgICAobnVtYmVyPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwibnVtYmVyXCJ9XVxyXG4gICAgKHN0cmluZz8gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcInN0cmluZ1wifV1cclxuICAgIChrZXl3b3JkPyB2YWx1ZSlcclxuICAgIFs6c3BhbiB7OmNsYXNzIFwia2V5d29yZFwifV1cclxuICAgIChuaWw/IHZhbHVlKVxyXG4gICAgWzpzcGFuIHs6Y2xhc3MgXCJuaWxcIn1dXHJcbiAgICAoY29udGFpbnM/ICN7dHJ1ZSBmYWxzZX0gdmFsdWUpXHJcbiAgICBbOnNwYW4gezpjbGFzcyBcImJvb2xlYW5cIn1dXHJcbiAgICA6ZWxzZVxyXG4gICAgWzpzcGFuXSkpXHJcbiAgKDplbmQ/IHRhZylcclxuICBuaWwpKVxyXG4ifSB7OnN5bSBsaW5lLT5odG1sLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZ2l2ZW4gbGluZSB3aXRoIGh0bWwgYWRkZWQuIiwgOmFyZ2xpc3RzIChbbGluZSB0YWdzLWZvci1saW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS0+aHRtbFxyXG4gXCJSZXR1cm5zIHRoZSBnaXZlbiBsaW5lIHdpdGggaHRtbCBhZGRlZC5cIlxyXG4gW2xpbmUgdGFncy1mb3ItbGluZV1cclxuIChsZXRcclxuICBbaHRtbC1wZXItY29sdW1uXHJcbiAgIChpbnRvIFtdIHRhZ3MtZm9yLWxpbmUtPmh0bWwgKHNvcnQtYnkgOmNvbHVtbiB0YWdzLWZvci1saW5lKSlcclxuICAgc2VnbWVudHNcclxuICAgKGxpbmUtPnNlZ21lbnRzIGxpbmUgdGFncy1mb3ItbGluZSB0cnVlKV1cclxuICAoc3RyL2pvaW5cclxuICAgKGludGVybGVhdmUgc2VnbWVudHMgKGNvbmNhdCBodG1sLXBlci1jb2x1bW4gKHJlcGVhdCBcIlwiKSkpKSkpXHJcbiJ9IHs6c3ltIGNvZGUtPmhpY2N1cCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvZGUgaW4gdGhlIGdpdmVuIHN0cmluZyB3aXRoIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcyBhZGRlZC4iLCA6YXJnbGlzdHMgKFtjb2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29kZS0+aGljY3VwXHJcbiBcIlJldHVybnMgdGhlIGNvZGUgaW4gdGhlIGdpdmVuIHN0cmluZyB3aXRoIEhpY2N1cC1jb21wYXRpYmxlIGRhdGEgc3RydWN0dXJlcyBhZGRlZC5cIlxyXG4gW2NvZGVdXHJcbiAobGV0XHJcbiAgW2xpbmVzXHJcbiAgIChzcGxpdC1saW5lcyBjb2RlKVxyXG4gICB0YWdzXHJcbiAgICh0cy9jb2RlLT50YWdzIGNvZGUpXHJcbiAgIGhpY2N1cFxyXG4gICAocGFyc2UtbGluZXMgbGluZS0+aGljY3VwIGxpbmVzIHRhZ3MpXHJcbiAgIGhpY2N1cFxyXG4gICAoYXBwbHkgY29uY2F0IChpbnRlcnBvc2UgW1wiXFxuXCJdIGhpY2N1cCkpXVxyXG4gIChzdHJ1Y3R1cml6ZS1oaWNjdXAgaGljY3VwKSkpXHJcbiJ9IHs6c3ltIHNwbGl0LWxpbmVzLCA6bWV0YSB7OmRvYyAiU3BsaXRzIHRoZSBzdHJpbmcgaW50byBsaW5lcy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXQtbGluZXNcclxuIFwiU3BsaXRzIHRoZSBzdHJpbmcgaW50byBsaW5lcy5cIlxyXG4gW3NdXHJcbiAodmVjICguc3BsaXQgcyBcIlxcblwiIC0xKSkpXHJcbiJ9IHs6c3ltIGNvZGUtPmh0bWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb2RlIGluIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBodG1sIGFkZGVkLiIsIDphcmdsaXN0cyAoW2NvZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb2RlLT5odG1sXHJcbiBcIlJldHVybnMgdGhlIGNvZGUgaW4gdGhlIGdpdmVuIHN0cmluZyB3aXRoIGh0bWwgYWRkZWQuXCJcclxuIFtjb2RlXVxyXG4gKGxldFxyXG4gIFtsaW5lc1xyXG4gICAoc3BsaXQtbGluZXMgY29kZSlcclxuICAgdGFnc1xyXG4gICAodHMvY29kZS0+dGFncyBjb2RlKVxyXG4gICBsaW5lc1xyXG4gICAocGFyc2UtbGluZXMgbGluZS0+aHRtbCBsaW5lcyB0YWdzKV1cclxuICAoc3RyL2pvaW4gXFxuZXdsaW5lIGxpbmVzKSkpXHJcbiJ9IHs6c3ltIGxpbmUtPmhpY2N1cCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGdpdmVuIGxpbmUgd2l0aCBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMgYWRkZWQuIiwgOmFyZ2xpc3RzIChbbGluZSB0YWdzLWZvci1saW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS0+aGljY3VwXHJcbiBcIlJldHVybnMgdGhlIGdpdmVuIGxpbmUgd2l0aCBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIHN0cnVjdHVyZXMgYWRkZWQuXCJcclxuIFtsaW5lIHRhZ3MtZm9yLWxpbmVdXHJcbiAobGV0XHJcbiAgW2hpY2N1cC1wZXItY29sdW1uXHJcbiAgIChpbnRvIFtdIHRhZ3MtZm9yLWxpbmUtPmhpY2N1cCAoc29ydC1ieSA6Y29sdW1uIHRhZ3MtZm9yLWxpbmUpKVxyXG4gICBzZWdtZW50c1xyXG4gICAobWFwIGxpc3QgKGxpbmUtPnNlZ21lbnRzIGxpbmUgdGFncy1mb3ItbGluZSBmYWxzZSkpXVxyXG4gIChhcHBseVxyXG4gICBjb25jYXRcclxuICAgKGludGVybGVhdmUgc2VnbWVudHMgKGNvbmNhdCBoaWNjdXAtcGVyLWNvbHVtbiAocmVwZWF0IG5pbCkpKSkpKVxyXG4ifSB7OnN5bSB0YWdzLWZvci1saW5lLT5oaWNjdXAsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiB0YWdzLWZvci1saW5lLT5oaWNjdXBcclxuIChjb21wXHJcbiAgKHBhcnRpdGlvbi1ieSA6Y29sdW1uKVxyXG4gIChtYXAgKGZuKiBbcDFfXzQ5MDE0I10gKG1hcCB0YWctPmhpY2N1cCBwMV9fNDkwMTQjKSkpKSlcclxuIn0gezpzeW0gdGFnLT5odG1sLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBIVE1MIHN0cmluZyBmb3IgdGhlIGdpdmVuIHRhZyBkZXNjcmlwdGlvbi4iLCA6YXJnbGlzdHMgKFt0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWctPmh0bWxcclxuIFwiUmV0dXJucyBhbiBIVE1MIHN0cmluZyBmb3IgdGhlIGdpdmVuIHRhZyBkZXNjcmlwdGlvbi5cIlxyXG4gW3RhZ11cclxuIChjb25kXHJcbiAgKDpkZWxpbWl0ZXI/IHRhZylcclxuICBcIjxzcGFuIGNsYXNzPSdkZWxpbWl0ZXInPlwiXHJcbiAgKDplcnJvcj8gdGFnKVxyXG4gIChmb3JtYXRcclxuICAgXCI8c3BhbiBjbGFzcz0nZXJyb3InIGRhdGEtbWVzc2FnZT0nJXMnPjwvc3Bhbj5cIlxyXG4gICAoc29tZS0+ICg6bWVzc2FnZSB0YWcpIGVzY2FwZS1odG1sLXN0cikpXHJcbiAgKDpiZWdpbj8gdGFnKVxyXG4gIChsZXRcclxuICAgW3ZhbHVlICg6dmFsdWUgdGFnKV1cclxuICAgKGNvbmRcclxuICAgIChzeW1ib2w/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nc3ltYm9sJz5cIlxyXG4gICAgKGxpc3Q/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nY29sbGVjdGlvbiBsaXN0Jz5cIlxyXG4gICAgKHZlY3Rvcj8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdjb2xsZWN0aW9uIHZlY3Rvcic+XCJcclxuICAgIChtYXA/IHZhbHVlKVxyXG4gICAgXCI8c3BhbiBjbGFzcz0nY29sbGVjdGlvbiBtYXAnPlwiXHJcbiAgICAoc2V0PyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2NvbGxlY3Rpb24gc2V0Jz5cIlxyXG4gICAgKG51bWJlcj8gdmFsdWUpXHJcbiAgICBcIjxzcGFuIGNsYXNzPSdudW1iZXInPlwiXHJcbiAgICAoc3RyaW5nPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J3N0cmluZyc+XCJcclxuICAgIChrZXl3b3JkPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2tleXdvcmQnPlwiXHJcbiAgICAobmlsPyB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J25pbCc+XCJcclxuICAgIChjb250YWlucz8gI3t0cnVlIGZhbHNlfSB2YWx1ZSlcclxuICAgIFwiPHNwYW4gY2xhc3M9J2Jvb2xlYW4nPlwiXHJcbiAgICA6ZWxzZVxyXG4gICAgXCI8c3Bhbj5cIikpXHJcbiAgKDplbmQ/IHRhZylcclxuICBcIjwvc3Bhbj5cIikpXHJcbiJ9IHs6c3ltIGVzY2FwZS1odG1sLXN0ciwgOm1ldGEgezpkb2MgIkVzY2FwZXMgYW4gSFRNTCBzdHJpbmciLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXNjYXBlLWh0bWwtc3RyXHJcbiBcIkVzY2FwZXMgYW4gSFRNTCBzdHJpbmdcIlxyXG4gW3NdXHJcbiAoc3RyL2VzY2FwZVxyXG4gIHNcclxuICB7XFw8IFwiJmx0O1wiLCBcXD4gXCImZ3Q7XCIsIFxcJiBcIiZhbXA7XCIsIFxcXCIgXCImcXVvdDtcIiwgXFwnIFwiJmFwb3M7XCJ9KSlcclxuIn0gezpzeW0gdGFncy1mb3ItbGluZS0+aHRtbCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHRhZ3MtZm9yLWxpbmUtPmh0bWxcclxuIChjb21wXHJcbiAgKHBhcnRpdGlvbi1ieSA6Y29sdW1uKVxyXG4gIChtYXAgKGZuKiBbcDFfXzQ5MDEzI10gKHN0ci9qb2luIChtYXAgdGFnLT5odG1sIHAxX180OTAxMyMpKSkpKSlcclxuIn0gezpzeW0gc3RydWN0dXJpemUtaGljY3VwLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmbGF0IGxpc3Qgb2YgSGljY3VwLWNvbXBhdGlibGUgZGF0YSBhbmQgYWRkcyBzdHJ1Y3R1cmUgdG8gaXQuIiwgOmFyZ2xpc3RzIFtbZmxhdC1oaWNjdXBdIFtmbGF0LWhpY2N1cCBzdHJ1Y3R1cmVkLWhpY2N1cF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cnVjdHVyaXplLWhpY2N1cFxyXG4gXCJUYWtlcyBhIGZsYXQgbGlzdCBvZiBIaWNjdXAtY29tcGF0aWJsZSBkYXRhIGFuZCBhZGRzIHN0cnVjdHVyZSB0byBpdC5cIlxyXG4gKFtmbGF0LWhpY2N1cF0gKHNlY29uZCAoc3RydWN0dXJpemUtaGljY3VwIGZsYXQtaGljY3VwIFs6c3Bhbl0pKSlcclxuIChbZmxhdC1oaWNjdXAgc3RydWN0dXJlZC1oaWNjdXBdXHJcbiAgKGxvb3BcclxuICAgW2ZsYXQtaGljY3VwIGZsYXQtaGljY3VwIHN0cnVjdHVyZWQtaGljY3VwIHN0cnVjdHVyZWQtaGljY3VwXVxyXG4gICAoaWYtbGV0XHJcbiAgICBbdG9rZW4gKGZpcnN0IGZsYXQtaGljY3VwKV1cclxuICAgIChjb25kXHJcbiAgICAgKHN0cmluZz8gdG9rZW4pXHJcbiAgICAgKHJlY3VyIChyZXN0IGZsYXQtaGljY3VwKSAoY29uaiBzdHJ1Y3R1cmVkLWhpY2N1cCB0b2tlbikpXHJcbiAgICAgKHZlY3Rvcj8gdG9rZW4pXHJcbiAgICAgKGxldFxyXG4gICAgICBbW2ZsYXQgc3RydWN0dXJlZF0gKHN0cnVjdHVyaXplLWhpY2N1cCAocmVzdCBmbGF0LWhpY2N1cCkgdG9rZW4pXVxyXG4gICAgICAocmVjdXIgZmxhdCAoY29uaiBzdHJ1Y3R1cmVkLWhpY2N1cCBzdHJ1Y3R1cmVkKSkpKVxyXG4gICAgWyhyZXN0IGZsYXQtaGljY3VwKSBzdHJ1Y3R1cmVkLWhpY2N1cF0pKSkpXHJcbiJ9IHs6c3ltIGVzY2FwZS1odG1sLWNoYXIsIDptZXRhIHs6ZG9jICJFc2NhcGVzIGFuIEhUTUwgY2hhcmFjdGVyIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY2FwZS1odG1sLWNoYXJcclxuIFwiRXNjYXBlcyBhbiBIVE1MIGNoYXJhY3RlclwiXHJcbiBbc11cclxuIChjYXNlIHMgXFw8IFwiJmx0O1wiIFxcPiBcIiZndDtcIiBcXCYgXCImYW1wO1wiIFxcXCIgXCImcXVvdDtcIiBcXCcgXCImYXBvcztcIiBzKSlcclxuIn0gezpzeW0gcGFyc2UtbGluZXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsaW5lcyBwYXJzZWQgd2l0aCB0aGUgZ2l2ZW4gZnVuY3Rpb24uIiwgOmFyZ2xpc3RzIChbcGFyc2UtZm4gbGluZXMgdGFnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLWxpbmVzXHJcbiBcIlJldHVybnMgdGhlIGxpbmVzIHBhcnNlZCB3aXRoIHRoZSBnaXZlbiBmdW5jdGlvbi5cIlxyXG4gW3BhcnNlLWZuIGxpbmVzIHRhZ3NdXHJcbiAobG9vcFxyXG4gIFtpIDAgcmVzdWx0cyAodHJhbnNpZW50IFtdKV1cclxuICAoaWYtbGV0XHJcbiAgIFtsaW5lIChnZXQgbGluZXMgaSldXHJcbiAgIChyZWN1ciAoaW5jIGkpIChjb25qISByZXN1bHRzIChwYXJzZS1mbiBsaW5lIChnZXQgdGFncyAoaW5jIGkpKSkpKVxyXG4gICAocGVyc2lzdGVudCEgcmVzdWx0cykpKSlcclxuIn0pLCBvYWtjbGpzLnRvb2xzLnJlYWRlciAoezpzeW0gcmVhZCtzdHJpbmcsIDptZXRhIHs6ZG9jICJMaWtlIHJlYWQsIGFuZCB0YWtpbmcgdGhlIHNhbWUgYXJncy4gcmVhZGVyIG11c3QgYmUgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIuXG4gIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgb2JqZWN0IHJlYWQgYW5kIHRoZSAod2hpdGVzcGFjZS10cmltbWVkKSBzdHJpbmcgcmVhZC4iLCA6YXJnbGlzdHMgW1tzdHJlYW1dIFtzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWVdIFtvcHRzIHN0cmVhbV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQrc3RyaW5nXHJcbiBcIkxpa2UgcmVhZCwgYW5kIHRha2luZyB0aGUgc2FtZSBhcmdzLiByZWFkZXIgbXVzdCBiZSBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cXG4gIFJldHVybnMgYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgb2JqZWN0IHJlYWQgYW5kIHRoZSAod2hpdGVzcGFjZS10cmltbWVkKSBzdHJpbmcgcmVhZC5cIlxyXG4gKFtzdHJlYW1dIChyZWFkK3N0cmluZyBzdHJlYW0gdHJ1ZSBuaWwpKVxyXG4gKFtzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWVdXHJcbiAgKGxldFxyXG4gICBbYnVmXHJcbiAgICAoZm4gW3JlYWRlcl0gKHN0ciAoOmJ1ZmZlciBAKC4tZnJhbWVzIHN0cmVhbSkpKSlcclxuICAgIG9mZnNldFxyXG4gICAgKGNvdW50IChidWYgc3RyZWFtKSlcclxuICAgIG9cclxuICAgIChsb2ctc291cmNlIHN0cmVhbSAocmVhZCBzdHJlYW0gZW9mLWVycm9yPyBlb2YtdmFsdWUpKVxyXG4gICAgc1xyXG4gICAgKC50cmltIChzdWJzIChidWYgc3RyZWFtKSBvZmZzZXQpKV1cclxuICAgW28gc10pKVxyXG4gKFtvcHRzIHN0cmVhbV1cclxuICAobGV0XHJcbiAgIFtidWZcclxuICAgIChmbiBbcmVhZGVyXSAoc3RyICg6YnVmZmVyIEAoLi1mcmFtZXMgc3RyZWFtKSkpKVxyXG4gICAgb2Zmc2V0XHJcbiAgICAoY291bnQgKGJ1ZiBzdHJlYW0pKVxyXG4gICAgb1xyXG4gICAgKGxvZy1zb3VyY2Ugc3RyZWFtIChyZWFkIG9wdHMgc3RyZWFtKSlcclxuICAgIHNcclxuICAgICgudHJpbSAoc3VicyAoYnVmIHN0cmVhbSkgb2Zmc2V0KSldXHJcbiAgIFtvIHNdKSkpXHJcbiJ9IHs6c3ltIGJvb2w/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJvb2w/IFt4XSAob3IgKGluc3RhbmNlPyBqcy9Cb29sZWFuIHgpICh0cnVlPyB4KSAoZmFsc2U/IHgpKSlcclxuIn0gezpzeW0gKnN1cHByZXNzLXJlYWQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqc3VwcHJlc3MtcmVhZCogZmFsc2UpXHJcbiJ9IHs6c3ltICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKlxyXG4gXCJXaGVuIG5vIGRhdGEgcmVhZGVyIGlzIGZvdW5kIGZvciBhIHRhZyBhbmQgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXFxuICBpcyBub24tbmlsLCBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMsIHRoZSB0YWcgYW5kIHRoZSB2YWx1ZS5cXG4gIElmICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiBpcyBuaWwgKHRoZSBkZWZhdWx0IHZhbHVlKSwgYW4gZXhjZXB0aW9uXFxuICB3aWxsIGJlIHRocm93biBmb3IgdGhlIHVua25vd24gdGFnLlwiXHJcbiAoZm4gW3RhZyB2YWx1ZV0pKVxyXG4ifSB7OnN5bSByZWFkLCA6bWV0YSB7OmRvYyAiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUuXG4gICBPdGhlcndpc2UgcmV0dXJucyBzZW50aW5lbC4gSWYgbm8gc3RyZWFtIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cblxuICAgT3B0cyBpcyBhIHBlcnNpc3RlbnQgbWFwIHdpdGggdmFsaWQga2V5czpcbiAgICA6cmVhZC1jb25kIC0gOmFsbG93IHRvIHByb2Nlc3MgcmVhZGVyIGNvbmRpdGlvbmFscywgb3JcbiAgICAgICAgICAgICAgICAgOnByZXNlcnZlIHRvIGtlZXAgYWxsIGJyYW5jaGVzXG4gICAgOmZlYXR1cmVzIC0gcGVyc2lzdGVudCBzZXQgb2YgZmVhdHVyZSBrZXl3b3JkcyBmb3IgcmVhZGVyIGNvbmRpdGlvbmFsc1xuICAgIDplb2YgLSBvbiBlb2YsIHJldHVybiB2YWx1ZSB1bmxlc3MgOmVvZnRocm93LCB0aGVuIHRocm93LlxuICAgICAgICAgICBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIHRocm93XG5cbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZFxuXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbGpzLnRvb2xzLnJlYWRlci9yZWFkIGFuZFxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmciLCA6YXJnbGlzdHMgW1tyZWFkZXJdIFt7ZW9mIDplb2YsIDphcyBvcHRzLCA6b3Ige2VvZiA6ZW9mdGhyb3d9fSByZWFkZXJdIFtyZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRcclxuIFwiUmVhZHMgdGhlIGZpcnN0IG9iamVjdCBmcm9tIGFuIElQdXNoYmFja1JlYWRlci5cXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlLlxcbiAgIE90aGVyd2lzZSByZXR1cm5zIHNlbnRpbmVsLiBJZiBubyBzdHJlYW0gaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxcblxcbiAgIE9wdHMgaXMgYSBwZXJzaXN0ZW50IG1hcCB3aXRoIHZhbGlkIGtleXM6XFxuICAgIDpyZWFkLWNvbmQgLSA6YWxsb3cgdG8gcHJvY2VzcyByZWFkZXIgY29uZGl0aW9uYWxzLCBvclxcbiAgICAgICAgICAgICAgICAgOnByZXNlcnZlIHRvIGtlZXAgYWxsIGJyYW5jaGVzXFxuICAgIDpmZWF0dXJlcyAtIHBlcnNpc3RlbnQgc2V0IG9mIGZlYXR1cmUga2V5d29yZHMgZm9yIHJlYWRlciBjb25kaXRpb25hbHNcXG4gICAgOmVvZiAtIG9uIGVvZiwgcmV0dXJuIHZhbHVlIHVubGVzcyA6ZW9mdGhyb3csIHRoZW4gdGhyb3cuXFxuICAgICAgICAgICBpZiBub3Qgc3BlY2lmaWVkLCB3aWxsIHRocm93XFxuXFxuICAgVG8gcmVhZCBkYXRhIHN0cnVjdHVyZXMgb25seSwgdXNlIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkXFxuXFxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xqcy50b29scy5yZWFkZXIvcmVhZCBhbmRcXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBpcyBub3QgdGhlIHNhbWUgZm9yIGVvZi1oYW5kbGluZ1wiXHJcbiB7OmFyZ2xpc3RzICcoW3JlYWRlcl0gW29wdHMgcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gZW9mLXZhbHVlXSl9XHJcbiAoW3JlYWRlcl0gKHJlYWQgcmVhZGVyIHRydWUgbmlsKSlcclxuIChbe2VvZiA6ZW9mLCA6YXMgb3B0cywgOm9yIHtlb2YgOmVvZnRocm93fX0gcmVhZGVyXVxyXG4gIChyZWFkKiByZWFkZXIgKD0gZW9mIDplb2Z0aHJvdykgZW9mIG5pbCBvcHRzICh0by1hcnJheSBbXSkpKVxyXG4gKFtyZWFkZXIgZW9mLWVycm9yPyBzZW50aW5lbF1cclxuICAocmVhZCogcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWwgbmlsIHt9ICh0by1hcnJheSBbXSkpKSlcclxuIn0gezpzeW0gZGVmYXVsdC1kYXRhLXJlYWRlcnMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBkZWZhdWx0LWRhdGEtcmVhZGVyc1xyXG4gXCJEZWZhdWx0IG1hcCBvZiBkYXRhIHJlYWRlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgQ2xvanVyZS5cXG4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IGJpbmRpbmcgKmRhdGEtcmVhZGVycypcIlxyXG4ge30pXHJcbiJ9IHs6c3ltICpkYXRhLXJlYWRlcnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmRhdGEtcmVhZGVycypcclxuIFwiTWFwIGZyb20gcmVhZGVyIHRhZyBzeW1ib2xzIHRvIGRhdGEgcmVhZGVyIFZhcnMuXFxuICBSZWFkZXIgdGFncyB3aXRob3V0IG5hbWVzcGFjZSBxdWFsaWZpZXJzIGFyZSByZXNlcnZlZCBmb3IgQ2xvanVyZS5cXG4gIFRoaXMgbGlnaHQgdmVyc2lvbiBvZiB0b29scy5yZWFkZXIgaGFzIG5vIGltcGxlbWVudGF0aW9uIGZvciBkZWZhdWx0XFxuICByZWFkZXIgdGFncyBzdWNoIGFzICNpbnN0IGFuZCAjdXVpZC5cIlxyXG4ge30pXHJcbiJ9IHs6c3ltICpyZWFkLWRlbGltKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnJlYWQtZGVsaW0qIGZhbHNlKVxyXG4ifSB7OnN5bSByZXNvbHZlLXN5bWJvbCwgOm1ldGEgezpkb2MgIlJlc29sdmUgYSBzeW1ib2wgcyBpbnRvIGl0cyBmdWxseSBxdWFsaWZpZWQgbmFtZXNwYWNlIHZlcnNpb24iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1zeW1ib2xcclxuIFwiUmVzb2x2ZSBhIHN5bWJvbCBzIGludG8gaXRzIGZ1bGx5IHF1YWxpZmllZCBuYW1lc3BhY2UgdmVyc2lvblwiXHJcbiBbc11cclxuIHMpXHJcbiJ9IHs6c3ltICphbGlhcy1tYXAqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmFsaWFzLW1hcCpcclxuIFwiTWFwIGZyb20gbnMgYWxpYXMgdG8gbnMsIGlmIG5vbi1uaWwsIGl0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIHJlYWQtdGltZVxcbiAgIG5zIGFsaWFzZXMuXFxuXFxuICAgRGVmYXVsdHMgdG8gbmlsXCJcclxuIG5pbClcclxuIn0gezpzeW0gKndyYXAtdmFsdWUtYW5kLWFkZC1tZXRhZGF0YT8qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqd3JhcC12YWx1ZS1hbmQtYWRkLW1ldGFkYXRhPyogZmFsc2UpXHJcbiJ9IHs6c3ltIHJlYWQtcmVnZXgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoIG9wdHMgcGVuZGluZy1mb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtcmVnZXhcclxuIFtyZHIgY2ggb3B0cyBwZW5kaW5nLWZvcm1zXVxyXG4gKGxldFxyXG4gIFtzYiAoU3RyaW5nQnVmZmVyLildXHJcbiAgKGxvb3BcclxuICAgW2NoIChyZWFkLWNoYXIgcmRyKV1cclxuICAgKGlmXHJcbiAgICAoaWRlbnRpY2FsPyBcXFwiIGNoKVxyXG4gICAgKHN0ciBzYilcclxuICAgIChpZlxyXG4gICAgIChuaWw/IGNoKVxyXG4gICAgIChlcnIvdGhyb3ctZW9mLXJlYWRpbmcgcmRyIDpyZWdleCBzYilcclxuICAgICAoZG9cclxuICAgICAgKC5hcHBlbmQgc2IgY2gpXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICAoaWRlbnRpY2FsPyBcXFxcIGNoKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtjaCAocmVhZC1jaGFyIHJkcildXHJcbiAgICAgICAgKGlmIChuaWw/IGNoKSAoZXJyL3Rocm93LWVvZi1yZWFkaW5nIHJkciA6cmVnZXggc2IpKVxyXG4gICAgICAgICguYXBwZW5kIHNiIGNoKSkpXHJcbiAgICAgIChyZWN1ciAocmVhZC1jaGFyIHJkcikpKSkpKSkpXHJcbiJ9IHs6c3ltIHNiLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBzYiAoU3RyaW5nQnVmZmVyLikpXHJcbiJ9IHs6c3ltIHJlYWQtc3RyaW5nLCA6bWV0YSB7OmRvYyAiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXG5cbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmdcblxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xqcy50b29scy5yZWFkZXIvcmVhZC1zdHJpbmcgYW5kXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmcgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmciLCA6YXJnbGlzdHMgW1tzXSBbb3B0cyBzXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zdHJpbmdcclxuIFwiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxcblxcbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmdcXG5cXG4gICBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBjbGpzLnRvb2xzLnJlYWRlci9yZWFkLXN0cmluZyBhbmRcXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZC1zdHJpbmcgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmdcIlxyXG4gKFtzXSAocmVhZC1zdHJpbmcge30gcykpXHJcbiAoW29wdHMgc11cclxuICAod2hlblxyXG4gICAoYW5kIHMgKG5vdCAoaWRlbnRpY2FsPyBzIFwiXCIpKSlcclxuICAgKHJlYWQgb3B0cyAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcykpKSkpXHJcbiJ9IHs6c3ltIG1hcC1mdW5jLCA6bWV0YSB7OmRvYyAiRGVjaWRlIHdoaWNoIG1hcCB0eXBlIHRvIHVzZSwgYXJyYXktbWFwIGlmIGxlc3MgdGhhbiAxNiBlbGVtZW50cyIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtZnVuY1xyXG4gXCJEZWNpZGUgd2hpY2ggbWFwIHR5cGUgdG8gdXNlLCBhcnJheS1tYXAgaWYgbGVzcyB0aGFuIDE2IGVsZW1lbnRzXCJcclxuIFtjb2xsXVxyXG4gKGlmICg+PSAoY291bnQgY29sbCkgMTYpICdjbGpzLmNvcmUvaGFzaC1tYXAgJ2NsanMuY29yZS9hcnJheS1tYXApKVxyXG4ifSksIGNsanMudG9vbHMucmVhZGVyICh7OnN5bSByZWFkK3N0cmluZywgOm1ldGEgezpkb2MgIkxpa2UgcmVhZCwgYW5kIHRha2luZyB0aGUgc2FtZSBhcmdzLiByZWFkZXIgbXVzdCBiZSBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cbiAgUmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBvYmplY3QgcmVhZCBhbmQgdGhlICh3aGl0ZXNwYWNlLXRyaW1tZWQpIHN0cmluZyByZWFkLiIsIDphcmdsaXN0cyBbW3N0cmVhbV0gW3N0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZV0gW29wdHMgc3RyZWFtXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVhZCtzdHJpbmdcclxuIFwiTGlrZSByZWFkLCBhbmQgdGFraW5nIHRoZSBzYW1lIGFyZ3MuIHJlYWRlciBtdXN0IGJlIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxcbiAgUmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSBvYmplY3QgcmVhZCBhbmQgdGhlICh3aGl0ZXNwYWNlLXRyaW1tZWQpIHN0cmluZyByZWFkLlwiXHJcbiAoW3N0cmVhbV0gKHJlYWQrc3RyaW5nIHN0cmVhbSB0cnVlIG5pbCkpXHJcbiAoW3N0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZV1cclxuICAobGV0XHJcbiAgIFtidWZcclxuICAgIChmbiBbcmVhZGVyXSAoc3RyICg6YnVmZmVyIEAoLi1mcmFtZXMgc3RyZWFtKSkpKVxyXG4gICAgb2Zmc2V0XHJcbiAgICAoY291bnQgKGJ1ZiBzdHJlYW0pKVxyXG4gICAgb1xyXG4gICAgKGxvZy1zb3VyY2Ugc3RyZWFtIChyZWFkIHN0cmVhbSBlb2YtZXJyb3I/IGVvZi12YWx1ZSkpXHJcbiAgICBzXHJcbiAgICAoLnRyaW0gKHN1YnMgKGJ1ZiBzdHJlYW0pIG9mZnNldCkpXVxyXG4gICBbbyBzXSkpXHJcbiAoW29wdHMgc3RyZWFtXVxyXG4gIChsZXRcclxuICAgW2J1ZlxyXG4gICAgKGZuIFtyZWFkZXJdIChzdHIgKDpidWZmZXIgQCguLWZyYW1lcyBzdHJlYW0pKSkpXHJcbiAgICBvZmZzZXRcclxuICAgIChjb3VudCAoYnVmIHN0cmVhbSkpXHJcbiAgICBvXHJcbiAgICAobG9nLXNvdXJjZSBzdHJlYW0gKHJlYWQgb3B0cyBzdHJlYW0pKVxyXG4gICAgc1xyXG4gICAgKC50cmltIChzdWJzIChidWYgc3RyZWFtKSBvZmZzZXQpKV1cclxuICAgW28gc10pKSlcclxuIn0gezpzeW0gYm9vbD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYm9vbD8gW3hdIChvciAoaW5zdGFuY2U/IGpzL0Jvb2xlYW4geCkgKHRydWU/IHgpIChmYWxzZT8geCkpKVxyXG4ifSB7OnN5bSAqc3VwcHJlc3MtcmVhZCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpzdXBwcmVzcy1yZWFkKiBmYWxzZSlcclxuIn0gezpzeW0gKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qXHJcbiBcIldoZW4gbm8gZGF0YSByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnIGFuZCAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipcXG4gIGlzIG5vbi1uaWwsIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgdGhlIHRhZyBhbmQgdGhlIHZhbHVlLlxcbiAgSWYgKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qIGlzIG5pbCAodGhlIGRlZmF1bHQgdmFsdWUpLCBhbiBleGNlcHRpb25cXG4gIHdpbGwgYmUgdGhyb3duIGZvciB0aGUgdW5rbm93biB0YWcuXCJcclxuIG5pbClcclxuIn0gezpzeW0gcmVhZCwgOm1ldGEgezpkb2MgIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXG4gICBSZXR1cm5zIHRoZSBvYmplY3QgcmVhZC4gSWYgRU9GLCB0aHJvd3MgaWYgZW9mLWVycm9yPyBpcyB0cnVlLlxuICAgT3RoZXJ3aXNlIHJldHVybnMgc2VudGluZWwuIElmIG5vIHN0cmVhbSBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXG5cbiAgIE9wdHMgaXMgYSBwZXJzaXN0ZW50IG1hcCB3aXRoIHZhbGlkIGtleXM6XG4gICAgOnJlYWQtY29uZCAtIDphbGxvdyB0byBwcm9jZXNzIHJlYWRlciBjb25kaXRpb25hbHMsIG9yXG4gICAgICAgICAgICAgICAgIDpwcmVzZXJ2ZSB0byBrZWVwIGFsbCBicmFuY2hlc1xuICAgIDpmZWF0dXJlcyAtIHBlcnNpc3RlbnQgc2V0IG9mIGZlYXR1cmUga2V5d29yZHMgZm9yIHJlYWRlciBjb25kaXRpb25hbHNcbiAgICA6ZW9mIC0gb24gZW9mLCByZXR1cm4gdmFsdWUgdW5sZXNzIDplb2Z0aHJvdywgdGhlbiB0aHJvdy5cbiAgICAgICAgICAgaWYgbm90IHNwZWNpZmllZCwgd2lsbCB0aHJvd1xuXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWRcblxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xvanVyZS50b29scy5yZWFkZXIvcmVhZCBhbmRcbiAgIGNsb2p1cmUudG9vbHMucmVhZGVyLmVkbi9yZWFkIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nIiwgOmFyZ2xpc3RzIFtbcmVhZGVyXSBbe2VvZiA6ZW9mLCA6YXMgb3B0cywgOm9yIHtlb2YgOmVvZnRocm93fX0gcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkXHJcbiBcIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBJUHVzaGJhY2tSZWFkZXIuXFxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZS5cXG4gICBPdGhlcndpc2UgcmV0dXJucyBzZW50aW5lbC4gSWYgbm8gc3RyZWFtIGlzIHByb3ZpZGVkLCAqaW4qIHdpbGwgYmUgdXNlZC5cXG5cXG4gICBPcHRzIGlzIGEgcGVyc2lzdGVudCBtYXAgd2l0aCB2YWxpZCBrZXlzOlxcbiAgICA6cmVhZC1jb25kIC0gOmFsbG93IHRvIHByb2Nlc3MgcmVhZGVyIGNvbmRpdGlvbmFscywgb3JcXG4gICAgICAgICAgICAgICAgIDpwcmVzZXJ2ZSB0byBrZWVwIGFsbCBicmFuY2hlc1xcbiAgICA6ZmVhdHVyZXMgLSBwZXJzaXN0ZW50IHNldCBvZiBmZWF0dXJlIGtleXdvcmRzIGZvciByZWFkZXIgY29uZGl0aW9uYWxzXFxuICAgIDplb2YgLSBvbiBlb2YsIHJldHVybiB2YWx1ZSB1bmxlc3MgOmVvZnRocm93LCB0aGVuIHRocm93LlxcbiAgICAgICAgICAgaWYgbm90IHNwZWNpZmllZCwgd2lsbCB0aHJvd1xcblxcbiAgIFRvIHJlYWQgZGF0YSBzdHJ1Y3R1cmVzIG9ubHksIHVzZSBjbG9qdXJlLnRvb2xzLnJlYWRlci5lZG4vcmVhZFxcblxcbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsb2p1cmUudG9vbHMucmVhZGVyL3JlYWQgYW5kXFxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQgaXMgbm90IHRoZSBzYW1lIGZvciBlb2YtaGFuZGxpbmdcIlxyXG4gezphcmdsaXN0cyAnKFtyZWFkZXJdIFtvcHRzIHJlYWRlcl0gW3JlYWRlciBlb2YtZXJyb3I/IGVvZi12YWx1ZV0pfVxyXG4gKFtyZWFkZXJdIChyZWFkIHJlYWRlciB0cnVlIG5pbCkpXHJcbiAoW3tlb2YgOmVvZiwgOmFzIG9wdHMsIDpvciB7ZW9mIDplb2Z0aHJvd319IHJlYWRlcl1cclxuICAocmVhZCogcmVhZGVyICg9IGVvZiA6ZW9mdGhyb3cpIGVvZiBuaWwgb3B0cyAodG8tYXJyYXkgW10pKSlcclxuIChbcmVhZGVyIGVvZi1lcnJvcj8gc2VudGluZWxdXHJcbiAgKHJlYWQqIHJlYWRlciBlb2YtZXJyb3I/IHNlbnRpbmVsIG5pbCB7fSAodG8tYXJyYXkgW10pKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtZGF0YS1yZWFkZXJzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZGVmYXVsdC1kYXRhLXJlYWRlcnNcclxuIFwiRGVmYXVsdCBtYXAgb2YgZGF0YSByZWFkZXIgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IENsb2p1cmUuXFxuICBNYXkgYmUgb3ZlcnJpZGRlbiBieSBiaW5kaW5nICpkYXRhLXJlYWRlcnMqXCJcclxuIHt9KVxyXG4ifSB7OnN5bSAqZGF0YS1yZWFkZXJzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpkYXRhLXJlYWRlcnMqXHJcbiBcIk1hcCBmcm9tIHJlYWRlciB0YWcgc3ltYm9scyB0byBkYXRhIHJlYWRlciBWYXJzLlxcbiAgUmVhZGVyIHRhZ3Mgd2l0aG91dCBuYW1lc3BhY2UgcXVhbGlmaWVycyBhcmUgcmVzZXJ2ZWQgZm9yIENsb2p1cmUuXFxuICBUaGlzIGxpZ2h0IHZlcnNpb24gb2YgdG9vbHMucmVhZGVyIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBmb3IgZGVmYXVsdFxcbiAgcmVhZGVyIHRhZ3Mgc3VjaCBhcyAjaW5zdCBhbmQgI3V1aWQuXCJcclxuIHt9KVxyXG4ifSB7OnN5bSAqcmVhZC1kZWxpbSosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpyZWFkLWRlbGltKiBmYWxzZSlcclxuIn0gezpzeW0gcmVzb2x2ZS1zeW1ib2wsIDptZXRhIHs6ZG9jICJSZXNvbHZlIGEgc3ltYm9sIHMgaW50byBpdHMgZnVsbHkgcXVhbGlmaWVkIG5hbWVzcGFjZSB2ZXJzaW9uIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtc3ltYm9sXHJcbiBcIlJlc29sdmUgYSBzeW1ib2wgcyBpbnRvIGl0cyBmdWxseSBxdWFsaWZpZWQgbmFtZXNwYWNlIHZlcnNpb25cIlxyXG4gW3NdXHJcbiAodGhyb3cgKGV4LWluZm8gXCJyZXNvbHZlLXN5bWJvbCBpcyBub3QgaW1wbGVtZW50ZWRcIiB7OnN5bSBzfSkpKVxyXG4ifSB7OnN5bSAqYWxpYXMtbWFwKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICphbGlhcy1tYXAqXHJcbiBcIk1hcCBmcm9tIG5zIGFsaWFzIHRvIG5zLCBpZiBub24tbmlsLCBpdCB3aWxsIGJlIHVzZWQgdG8gcmVzb2x2ZSByZWFkLXRpbWVcXG4gICBucyBhbGlhc2VzLlxcblxcbiAgIERlZmF1bHRzIHRvIG5pbFwiXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIHJlYWQtcmVnZXgsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoIG9wdHMgcGVuZGluZy1mb3Jtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtcmVnZXhcclxuIFtyZHIgY2ggb3B0cyBwZW5kaW5nLWZvcm1zXVxyXG4gKGxldFxyXG4gIFtzYiAoU3RyaW5nQnVmZmVyLildXHJcbiAgKGxvb3BcclxuICAgW2NoIChyZWFkLWNoYXIgcmRyKV1cclxuICAgKGlmXHJcbiAgICAoaWRlbnRpY2FsPyBcXFwiIGNoKVxyXG4gICAgKHJlLXBhdHRlcm4gKHN0ciBzYikpXHJcbiAgICAoaWZcclxuICAgICAobmlsPyBjaClcclxuICAgICAoZXJyL3Rocm93LWVvZi1yZWFkaW5nIHJkciA6cmVnZXggc2IpXHJcbiAgICAgKGRvXHJcbiAgICAgICguYXBwZW5kIHNiIGNoKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKGlkZW50aWNhbD8gXFxcXCBjaClcclxuICAgICAgIChsZXRcclxuICAgICAgICBbY2ggKHJlYWQtY2hhciByZHIpXVxyXG4gICAgICAgIChpZiAobmlsPyBjaCkgKGVyci90aHJvdy1lb2YtcmVhZGluZyByZHIgOnJlZ2V4IHNiKSlcclxuICAgICAgICAoLmFwcGVuZCBzYiBjaCkpKVxyXG4gICAgICAocmVjdXIgKHJlYWQtY2hhciByZHIpKSkpKSkpKVxyXG4ifSB7OnN5bSBzYiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgc2IgKFN0cmluZ0J1ZmZlci4pKVxyXG4ifSB7OnN5bSByZWFkLXN0cmluZywgOm1ldGEgezpkb2MgIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXG4gICBSZXR1cm5zIG5pbCB3aGVuIHMgaXMgbmlsIG9yIGVtcHR5LlxuXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nXG5cbiAgIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlIG9mIGNsb2p1cmUudG9vbHMucmVhZGVyL3JlYWQtc3RyaW5nIGFuZFxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nIiwgOmFyZ2xpc3RzIFtbc10gW29wdHMgc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc3RyaW5nXHJcbiBcIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXFxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cXG5cXG4gICBUbyByZWFkIGRhdGEgc3RydWN0dXJlcyBvbmx5LCB1c2UgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nXFxuXFxuICAgTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgb2YgY2xvanVyZS50b29scy5yZWFkZXIvcmVhZC1zdHJpbmcgYW5kXFxuICAgY2xvanVyZS50b29scy5yZWFkZXIuZWRuL3JlYWQtc3RyaW5nIGlzIG5vdCB0aGUgc2FtZSBmb3IgZW9mLWhhbmRsaW5nXCJcclxuIChbc10gKHJlYWQtc3RyaW5nIHt9IHMpKVxyXG4gKFtvcHRzIHNdXHJcbiAgKHdoZW5cclxuICAgKGFuZCBzIChub3QgKGlkZW50aWNhbD8gcyBcIlwiKSkpXHJcbiAgIChyZWFkIG9wdHMgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMpKSkpKVxyXG4ifSB7OnN5bSBtYXAtZnVuYywgOm1ldGEgezpkb2MgIkRlY2lkZSB3aGljaCBtYXAgdHlwZSB0byB1c2UsIGFycmF5LW1hcCBpZiBsZXNzIHRoYW4gMTYgZWxlbWVudHMiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWZ1bmNcclxuIFwiRGVjaWRlIHdoaWNoIG1hcCB0eXBlIHRvIHVzZSwgYXJyYXktbWFwIGlmIGxlc3MgdGhhbiAxNiBlbGVtZW50c1wiXHJcbiBbY29sbF1cclxuIChpZiAoPj0gKGNvdW50IGNvbGwpIDE2KSAnY2xqcy5jb3JlL2hhc2gtbWFwICdjbGpzLmNvcmUvYXJyYXktbWFwKSlcclxuIn0pLCBzYWJsb25vLnV0aWwgKHs6c3ltIGpvaW4tY2xhc3NlcywgOm1ldGEgezpkb2MgIkpvaW4gdGhlIGBjbGFzc2VzYCB3aXRoIGEgd2hpdGVzcGFjZS4iLCA6YXJnbGlzdHMgKFtjbGFzc2VzXSl9LCA6c291cmNlICIoZGVmblxyXG4gam9pbi1jbGFzc2VzXHJcbiBcIkpvaW4gdGhlIGBjbGFzc2VzYCB3aXRoIGEgd2hpdGVzcGFjZS5cIlxyXG4gW2NsYXNzZXNdXHJcbiAoLT4+XHJcbiAgY2xhc3Nlc1xyXG4gIChpbnRvXHJcbiAgIFtdXHJcbiAgIChjb21wIChtYXBjYXQgKGZuIFt4XSAoaWYgKHN0cmluZz8geCkgW3hdIChzZXEgeCkpKSkgKHJlbW92ZSBuaWw/KSkpXHJcbiAgKHN0ci9qb2luIFwiIFwiKSkpXHJcbiJ9IHs6c3ltIHRvLXN0ciwgOm1ldGEgezpkb2MgIkNvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgc3RyaW5nLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBUb1N0cmluZ30gezpzeW0gcmVhY3QtZm4sIDptZXRhIHs6ZG9jICJSZXR1cm4gdGhlIHN5bWJvbCBvZiBhIGZuIHRoYXQgYnVpbGQgYSBSZWFjdCBlbGVtZW50LiAiLCA6YXJnbGlzdHMgKFt0eXBlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhY3QtZm5cclxuIFwiUmV0dXJuIHRoZSBzeW1ib2wgb2YgYSBmbiB0aGF0IGJ1aWxkIGEgUmVhY3QgZWxlbWVudC4gXCJcclxuIFt0eXBlXVxyXG4gKGlmXHJcbiAgKGNvbnRhaW5zPyAjezp0ZXh0YXJlYSA6aW5wdXQgOnNlbGVjdH0gKGtleXdvcmQgdHlwZSkpXHJcbiAgJ3NhYmxvbm8uaW50ZXJwcmV0ZXIvY3JlYXRlLWVsZW1lbnRcclxuICAnanMvUmVhY3QuY3JlYXRlRWxlbWVudCkpXHJcbiJ9IHs6c3ltIGNhbWVsLWNhc2Uta2V5cywgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGludG8gY2FtZWwgY2FzZS4iLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FtZWwtY2FzZS1rZXlzXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGludG8gY2FtZWwgY2FzZS5cIlxyXG4gW21dXHJcbiAoaWZcclxuICAobWFwPyBtKVxyXG4gIChsZXRcclxuICAgW20gKGludG8ge30gKG1hcCAoZm4gW1trIHZdXSBbKGNhbWVsLWNhc2Ugaykgdl0pKSBtKV1cclxuICAgKGNvbmQtPiBtIChtYXA/ICg6c3R5bGUgbSkpICh1cGRhdGUgOnN0eWxlIGNhbWVsLWNhc2Uta2V5cykpKVxyXG4gIG0pKVxyXG4ifSB7OnN5bSBlbGVtZW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIGB4YCBpcyBhbiBIVE1MIGVsZW1lbnQuIFRydWUgd2hlbiBgeGAgaXMgYSB2ZWN0b3JcbiAgYW5kIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEga2V5d29yZCwgZS5nLiBgWzpkaXZdYCBvciBgWzpkaXYgWzpzcGFuIFwieFwiXWAuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsZW1lbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIGB4YCBpcyBhbiBIVE1MIGVsZW1lbnQuIFRydWUgd2hlbiBgeGAgaXMgYSB2ZWN0b3JcXG4gIGFuZCB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGtleXdvcmQsIGUuZy4gYFs6ZGl2XWAgb3IgYFs6ZGl2IFs6c3BhbiBcXFwieFxcXCJdYC5cIlxyXG4gW3hdXHJcbiAoYW5kICh2ZWN0b3I/IHgpIChrZXl3b3JkPyAoZmlyc3QgeCkpKSlcclxuIn0gezpzeW0gKmJhc2UtdXJsKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmJhc2UtdXJsKiBuaWwpXHJcbiJ9IHs6c3ltIGFzLXN0ciwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIGl0cyBhcmd1bWVudHMgaW50byBhIHN0cmluZyB1c2luZyB0by1zdHIuIiwgOmFyZ2xpc3RzIChbJiB4c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzLXN0clxyXG4gXCJDb252ZXJ0cyBpdHMgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgdXNpbmcgdG8tc3RyLlwiXHJcbiBbJiB4c11cclxuIChzdHIvam9pbiAobWFwIHRvLXN0ciB4cykpKVxyXG4ifSB7OnN5bSBodG1sLXRvLWRvbS1hdHRycywgOm1ldGEgezpkb2MgIkNvbnZlcnRzIGFsbCBIVE1MIGF0dHJpYnV0ZXMgdG8gdGhlaXIgRE9NIGVxdWl2YWxlbnRzLiIsIDphcmdsaXN0cyAoW2F0dHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaHRtbC10by1kb20tYXR0cnNcclxuIFwiQ29udmVydHMgYWxsIEhUTUwgYXR0cmlidXRlcyB0byB0aGVpciBET00gZXF1aXZhbGVudHMuXCJcclxuIFthdHRyc11cclxuIChyZW5hbWUta2V5c1xyXG4gIChjYW1lbC1jYXNlLWtleXMgYXR0cnMpXHJcbiAgezpjbGFzcyA6Y2xhc3NOYW1lLCA6Zm9yIDpodG1sRm9yfSkpXHJcbiJ9IHs6c3ltIFRvU3RyaW5nLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodG8tc3RyKX0gezpzeW0gVG9VUkksIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh0by11cmkpfSB7OnN5bSBjYW1lbC1jYXNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBjYW1lbCBjYXNlIHZlcnNpb24gb2YgdGhlIGtleSwgZS5nLiA6aHR0cC1lcXVpdiBiZWNvbWVzIDpodHRwRXF1aXYuIiwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbWVsLWNhc2VcclxuIFwiUmV0dXJucyBjYW1lbCBjYXNlIHZlcnNpb24gb2YgdGhlIGtleSwgZS5nLiA6aHR0cC1lcXVpdiBiZWNvbWVzIDpodHRwRXF1aXYuXCJcclxuIFtrXVxyXG4gKGlmXHJcbiAgKG9yIChrZXl3b3JkPyBrKSAoc3RyaW5nPyBrKSAoc3ltYm9sPyBrKSlcclxuICAobGV0XHJcbiAgIFtbZmlyc3Qtd29yZCAmIHdvcmRzXSAoLnNwbGl0IChuYW1lIGspIFwiLVwiKV1cclxuICAgKGlmXHJcbiAgICAob3IgKGVtcHR5PyB3b3JkcykgKD0gXCJhcmlhXCIgZmlyc3Qtd29yZCkgKD0gXCJkYXRhXCIgZmlyc3Qtd29yZCkpXHJcbiAgICBrXHJcbiAgICAoLT5cclxuICAgICAobWFwIHN0ci9jYXBpdGFsaXplIHdvcmRzKVxyXG4gICAgIChjb25qIGZpcnN0LXdvcmQpXHJcbiAgICAgc3RyL2pvaW5cclxuICAgICBrZXl3b3JkKSkpXHJcbiAgaykpXHJcbiJ9IHs6c3ltIHRvLXVyaSwgOm1ldGEgezpkb2MgIkNvbnZlcnQgYSB2YWx1ZSBpbnRvIGEgVVJJLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpwcm90b2NvbCBUb1VSSX0pLCBkeW5hZG9jLmNvbW1vbiAoezpzeW0gdmFyLXN5bS0+dXJsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW0gdmFyLXN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhci1zeW0tPnVybFxyXG4gW3JlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW0gdmFyLXN5bV1cclxuIChzdHJcclxuICByZWwtcGF0aFxyXG4gIChuYW1lIHR5cGUpXHJcbiAgXCIvXCJcclxuICBucy1zeW1cclxuICBcIi9cIlxyXG4gIChpZlxyXG4gICBzdGF0aWM/XHJcbiAgICgtPlxyXG4gICAgKHN0ciB2YXItc3ltKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiP1wiIFwiJ3EnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCIhXCIgXCInZSdcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIjxcIiBcIidsJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiPlwiIFwiJ2cnXCIpXHJcbiAgICAoc3RyL3JlcGxhY2UgXCI6XCIgXCInYydcIilcclxuICAgIChzdHIvcmVwbGFjZSBcIipcIiBcIidhJ1wiKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiJlwiIFwiJ20nXCIpKVxyXG4gICAjPyg6Y2xqcyAoanMvZW5jb2RlVVJJQ29tcG9uZW50IChzdHIgdmFyLXN5bSkpIDpjbGogKGphdmEubmV0LlVSTEVuY29kZXIvZW5jb2RlIChzdHIgdmFyLXN5bSkgXCJVVEYtOFwiKSkpXHJcbiAgKHdoZW4gc3RhdGljPyBcIi5odG1sXCIpKSlcclxuIn0gezpzeW0gaW5pdC1lZGl0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcnVtLXN0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1lZGl0b3JcclxuIFtydW0tc3RhdGVdXHJcbiAobGV0XHJcbiAgW1tzdGF0ZV0gKDpydW0vYXJncyBydW0tc3RhdGUpXVxyXG4gICh3aGVuLWxldFxyXG4gICBbaW5pdCAoOmluaXQtZWRpdG9yIHN0YXRlKV1cclxuICAgKGluaXQgKHJ1bS9kb20tbm9kZSBydW0tc3RhdGUpKSkpXHJcbiBydW0tc3RhdGUpXHJcbiJ9IHs6c3ltIG5zLXN5bS0+dXJsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBucy1zeW0tPnVybFxyXG4gW3JlbC1wYXRoIHN0YXRpYz8gdHlwZSBucy1zeW1dXHJcbiAoc3RyIHJlbC1wYXRoIChuYW1lIHR5cGUpIFwiL1wiIG5zLXN5bSAod2hlbiBzdGF0aWM/IFwiLmh0bWxcIikpKVxyXG4ifSB7OnN5bSAqc2Vzc2lvbiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpzZXNzaW9uXHJcbiAoLT5cclxuICAocmVkdWNlIG8vYWRkLXJ1bGUgKG8vLT5zZXNzaW9uKSAoY29uY2F0IHJ1bGVzIGNvbXBvbmVudHMpKVxyXG4gIChvL2luc2VydFxyXG4gICA6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgIHs6ZHluYWRvYy5jb21tb24vcHJvZD8gZmFsc2UsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0LWZpbHRlciBcIlwiLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2NsanMtc3RhcnRlZD8gZmFsc2UsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0YWJsZT8gZmFsc2UsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vaW5pdC1lZGl0b3IgbmlsLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL2luaXQtZXhhbXBsZS1lZGl0b3IgbmlsLFxyXG4gICAgOmR5bmFkb2MuY29tbW9uL3dhdGNoZXIgbmlsfSlcclxuICAoby9pbnNlcnRcclxuICAgOmR5bmFkb2MuY29tbW9uL3NlcnZlclxyXG4gICB7OmR5bmFkb2MuY29tbW9uL25zLXN5bSBuaWwsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSBuaWwsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vdHlwZSBuaWwsXHJcbiAgICA6ZHluYWRvYy5jb21tb24vaGlkZS1zaWRlYmFyPyBmYWxzZX0pXHJcbiAgYXRvbSkpXHJcbiJ9IHs6c3ltIGdldC1zdGF0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtc3RhdGVcclxuIFtdXHJcbiAoLT5cclxuICBAKnNlc3Npb25cclxuICAoby9xdWVyeS1hbGwgOmR5bmFkb2MuY29tbW9uL2dldC1zdGF0ZSlcclxuICBmaXJzdFxyXG4gIChvciAodGhyb3cgKGV4LWluZm8gXCJTdGF0ZSBub3QgZm91bmRcIiB7fSkpKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1zZXNzaW9uLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Nlc3Npb24gaWQgc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtc2Vzc2lvblxyXG4gW3Nlc3Npb24gaWQgc3RhdGVdXHJcbiAoby9maXJlLXJ1bGVzIChvL2luc2VydCBzZXNzaW9uIGlkIHN0YXRlKSkpXHJcbiJ9IHs6c3ltIHJ1bGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gcnVsZXNcclxuIChvL3J1bGVzZXRcclxuICB7OmR5bmFkb2MuY29tbW9uL2dldC1zdGF0ZVxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gbnMtc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3Zhci1zeW0gdmFyLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi90eXBlIHR5cGVdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudCA6ZHluYWRvYy5jb21tb24vd2F0Y2hlciB3YXRjaGVyXV19KSlcclxuIn0gezpzeW0gY29tcG9uZW50cywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGNvbXBvbmVudHNcclxuIChvcnVtL3J1bGVzZXRcclxuICB7YXBwLXJvb3RcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtc3ltIG5zLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1tZXRhIG5zLW1ldGFdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdmFyLXN5bSB2YXItc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3ZhcnMgdmFyc11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2NsanMtc3RhcnRlZD9cclxuICAgICBjbGpzLXN0YXJ0ZWQ/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL3Byb2Q/IHByb2Q/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3N0YXRpYz8gc3RhdGljP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyXHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2hpZGUtc2lkZWJhcj9cclxuICAgICBoaWRlLXNpZGViYXI/XVxyXG4gICAgOnRoZW5cclxuICAgIChsZXRcclxuICAgICBbKnNlc3Npb24gKG9ydW0vcHJvcCldXHJcbiAgICAgWzpkaXZcclxuICAgICAgKHdoZW4tbm90IGhpZGUtc2lkZWJhcj8gKHNpZGViYXIge30pKVxyXG4gICAgICAoY29ualxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgbnMtc3ltXHJcbiAgICAgICAgKGludG9cclxuICAgICAgICAgWzpkaXZcclxuICAgICAgICAgIHs6Y2xhc3MgXCJ2YXJzXCIsIDpzdHlsZSB7OmxlZnQgKGlmIGhpZGUtc2lkZWJhcj8gMCAzMDApfX1cclxuICAgICAgICAgIChleHBvcnQgKnNlc3Npb24pXHJcbiAgICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgICB2YXItc3ltXHJcbiAgICAgICAgICAgWzpkaXZcclxuICAgICAgICAgICAgWzpjZW50ZXIgWzpoMSAoc3RyIG5zLXN5bSldXVxyXG4gICAgICAgICAgICAod2hlbi1sZXRcclxuICAgICAgICAgICAgIFtkb2MgKDpkb2MgbnMtbWV0YSldXHJcbiAgICAgICAgICAgICBbOmRpdiB7OmNsYXNzIFwic2VjdGlvbiBkb2NcIn0gZG9jXSldKV1cclxuICAgICAgICAgKG1hcHYgdmFyLT5odG1sIHZhcnMpKVxyXG4gICAgICAgIFs6ZGl2IHs6Y2xhc3MgXCJ2YXJzXCJ9IChleHBvcnQgKnNlc3Npb24pXSlcclxuICAgICAgIChjb25kXHJcbiAgICAgICAgc3RhdGljP1xyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIHs6Y2xhc3MgXCJmb290ZXJcIn1cclxuICAgICAgICAgXCJHZW5lcmF0ZWQgYnkgXCJcclxuICAgICAgICAgWzphXHJcbiAgICAgICAgICB7OmhyZWYgXCJodHRwczovL2dpdGh1Yi5jb20vb2FrZXMvRHluYWRvY1wiLCA6dGFyZ2V0IFwiX2JsYW5rXCJ9XHJcbiAgICAgICAgICBcIkR5bmFkb2NcIl1dXHJcbiAgICAgICAgKGFuZCBjbGpzLXN0YXJ0ZWQ/IChub3QgcHJvZD8pKVxyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIHs6Y2xhc3MgXCJmb290ZXJcIn1cclxuICAgICAgICAgXCJUaGlzIGlzIGEgY3VzdG9tIGJ1aWxkIG9mIFwiXHJcbiAgICAgICAgIFs6YVxyXG4gICAgICAgICAgezpocmVmIFwiaHR0cHM6Ly9naXRodWIuY29tL29ha2VzL0R5bmFkb2NcIiwgOnRhcmdldCBcIl9ibGFua1wifVxyXG4gICAgICAgICAgXCJEeW5hZG9jXCJdXSkpXSldLFxyXG4gICB2YXItPmh0bWxcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vbnMtc3ltIG5zLXN5bV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIHZhci1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdHlwZSB0eXBlXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3JlbC1wYXRoIHJlbC1wYXRoXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3N0YXRpYz8gc3RhdGljP11cclxuICAgIDp0aGVuXHJcbiAgICAobGV0XHJcbiAgICAgW3s6a2V5cyBbc3ltIG1ldGEgc291cmNlIHNwZWMgZXhhbXBsZXMgbWV0aG9kcyBwcm90b2NvbF19XHJcbiAgICAgIChvcnVtL3Byb3ApXHJcbiAgICAgIHs6a2V5cyBbYXJnbGlzdHMgZG9jXX1cclxuICAgICAgbWV0YVxyXG4gICAgICB1cmxcclxuICAgICAgKHZhci1zeW0tPnVybCByZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltIHN5bSldXHJcbiAgICAgWzpkaXZcclxuICAgICAgezpjbGFzcyBcInZhci1pbmZvXCJ9XHJcbiAgICAgIChpbnRvXHJcbiAgICAgICAoaWYgdmFyLXN5bSBbOmRpdl0gWzphIHs6aHJlZiB1cmx9XSlcclxuICAgICAgIChpZlxyXG4gICAgICAgIGFyZ2xpc3RzXHJcbiAgICAgICAgKG1hcFxyXG4gICAgICAgICAoZm4gW2FyZ2xpc3RdIFs6aDIgKHByLXN0ciAoYXBwbHkgbGlzdCBzeW0gYXJnbGlzdCkpXSlcclxuICAgICAgICAgYXJnbGlzdHMpXHJcbiAgICAgICAgW1s6aDIgKHN0ciBzeW0pXV0pKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgbWV0aG9kc1xyXG4gICAgICAgWzpkaXZcclxuICAgICAgICB7OmNsYXNzIFwic2VjdGlvblwifVxyXG4gICAgICAgIFs6aDMgXCJNZXRob2RzIGluIHRoaXMgcHJvdG9jb2xcIl1cclxuICAgICAgICAoaW50b1xyXG4gICAgICAgICBbOnVsXVxyXG4gICAgICAgICAoZm9yXHJcbiAgICAgICAgICBbbWV0aG9kLXN5bSBtZXRob2RzXVxyXG4gICAgICAgICAgWzpsaVxyXG4gICAgICAgICAgIFs6YVxyXG4gICAgICAgICAgICB7OmhyZWZcclxuICAgICAgICAgICAgICh2YXItc3ltLT51cmwgcmVsLXBhdGggc3RhdGljPyB0eXBlIG5zLXN5bSBtZXRob2Qtc3ltKX1cclxuICAgICAgICAgICAgKHN0ciBtZXRob2Qtc3ltKV1dKSldKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgcHJvdG9jb2xcclxuICAgICAgIFs6ZGl2XHJcbiAgICAgICAgezpjbGFzcyBcInNlY3Rpb25cIn1cclxuICAgICAgICBbOmgzXHJcbiAgICAgICAgIFwiUGFydCBvZiB0aGUgXCJcclxuICAgICAgICAgWzphXHJcbiAgICAgICAgICB7OmhyZWYgKHZhci1zeW0tPnVybCByZWwtcGF0aCBzdGF0aWM/IHR5cGUgbnMtc3ltIHByb3RvY29sKX1cclxuICAgICAgICAgIChzdHIgcHJvdG9jb2wpXVxyXG4gICAgICAgICBcIiBwcm90b2NvbFwiXV0pXHJcbiAgICAgICh3aGVuIGRvYyBbOmRpdiB7OmNsYXNzIFwic2VjdGlvbiBkb2NcIn0gZG9jXSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIChzZXEgZXhhbXBsZXMpXHJcbiAgICAgICAoaW50b1xyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIHs6Y2xhc3MgXCJzZWN0aW9uXCJ9XHJcbiAgICAgICAgIFs6aDIgKGlmICg+IChjb3VudCBleGFtcGxlcykgMSkgXCJFeGFtcGxlc1wiIFwiRXhhbXBsZVwiKV1dXHJcbiAgICAgICAgKG1hcHYgZXhhbXBsZS0+aHRtbCBleGFtcGxlcykpKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgc3BlY1xyXG4gICAgICAgKGlmXHJcbiAgICAgICAgdmFyLXN5bVxyXG4gICAgICAgIFs6ZGl2IHs6Y2xhc3MgXCJzZWN0aW9uXCJ9IFs6aDIgXCJTcGVjXCJdIChzcGVjLT5odG1sIHNwZWMpXVxyXG4gICAgICAgIChleHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAgezpsYWJlbCBcIlNwZWNcIiwgOnVybCB1cmwsIDpjb250ZW50IChzcGVjLT5odG1sIHNwZWMpfSkpKVxyXG4gICAgICAod2hlblxyXG4gICAgICAgc291cmNlXHJcbiAgICAgICAoaWZcclxuICAgICAgICB2YXItc3ltXHJcbiAgICAgICAgWzpkaXYgezpjbGFzcyBcInNlY3Rpb25cIn0gWzpoMiBcIlNvdXJjZVwiXSAoc291cmNlLT5odG1sIHNvdXJjZSldXHJcbiAgICAgICAgKGV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgICAgICB7OmxhYmVsIFwiU291cmNlXCIsXHJcbiAgICAgICAgICA6dXJsIHVybCxcclxuICAgICAgICAgIDpjb250ZW50IChzb3VyY2UtPmh0bWwgc291cmNlKX0pKSldKV0sXHJcbiAgIGV4YW1wbGUtPmh0bWxcclxuICAgWzp3aGF0XHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdHlwZSB0eXBlXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL3Byb2Q/IHByb2Q/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL3N0YXRpYz8gc3RhdGljP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgOmR5bmFkb2MuY29tbW9uL2luaXQtZXhhbXBsZS1lZGl0b3JcclxuICAgICBpbml0LWV4YW1wbGUtZWRpdG9yXVxyXG4gICAgOnRoZW5cclxuICAgIChleGFtcGxlLT5odG1sKiBvLyptYXRjaCogKG9ydW0vcHJvcCkpXSxcclxuICAgc291cmNlLT5odG1sXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL2luaXQtZWRpdG9yIGluaXQtZWRpdG9yXVxyXG4gICAgOnRoZW5cclxuICAgIChzb3VyY2UtPmh0bWwqIG8vKm1hdGNoKiAob3J1bS9wcm9wKSldLFxyXG4gICBzcGVjLT5odG1sXHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL2luaXQtZWRpdG9yIGluaXQtZWRpdG9yXVxyXG4gICAgOnRoZW5cclxuICAgIChzcGVjLT5odG1sKiBvLyptYXRjaCogKG9ydW0vcHJvcCkpXSxcclxuICAgZXhwb3J0XHJcbiAgIFs6d2hhdFxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vY2xqcy1zdGFydGVkP1xyXG4gICAgIGNsanMtc3RhcnRlZD9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vc3RhdGljPyBzdGF0aWM/XVxyXG4gICAgOnRoZW5cclxuICAgIChsZXRcclxuICAgICBbKnNlc3Npb24gKG9ydW0vcHJvcCldXHJcbiAgICAgKHdoZW4tbm90XHJcbiAgICAgIHN0YXRpYz9cclxuICAgICAgWzpkaXZcclxuICAgICAgIHs6c3R5bGUgezptaW4taGVpZ2h0IDc1fX1cclxuICAgICAgICh3aGVuXHJcbiAgICAgICAgY2xqcy1zdGFydGVkP1xyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIHs6Y2xhc3MgXCJleHBvcnRcIn1cclxuICAgICAgICAgKGV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgICAgICAgezpsYWJlbCBcIkV4cG9ydFwiLFxyXG4gICAgICAgICAgIDp1cmwgXCJcIixcclxuICAgICAgICAgICA6Y29udGVudCAoZXhwb3J0LWZvcm0gKnNlc3Npb24pLFxyXG4gICAgICAgICAgIDpvbi1jbG9zZVxyXG4gICAgICAgICAgIChmbipcclxuICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKHN3YXAhXHJcbiAgICAgICAgICAgICAqc2Vzc2lvblxyXG4gICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICAgW3Nlc3Npb25dXHJcbiAgICAgICAgICAgICAgKC0+XHJcbiAgICAgICAgICAgICAgIHNlc3Npb25cclxuICAgICAgICAgICAgICAgKG8vaW5zZXJ0XHJcbiAgICAgICAgICAgICAgICA6ZHluYWRvYy5jb21tb24vY2xpZW50XHJcbiAgICAgICAgICAgICAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0LWZpbHRlclxyXG4gICAgICAgICAgICAgICAgXCJcIilcclxuICAgICAgICAgICAgICAgby9maXJlLXJ1bGVzKSkpKX0pXSlcclxuICAgICAgIFs6ZGl2IHs6c3R5bGUgezpjbGVhciBcInJpZ2h0XCJ9fV1dKSldLFxyXG4gICBleHBvcnQtZm9ybVxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9ucy1zeW0gbnMtc3ltXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIgOmR5bmFkb2MuY29tbW9uL25zLW1ldGEgbnMtbWV0YV1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIHZhci1zeW1dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vdHlwZSB0eXBlXVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnQgOmR5bmFkb2MuY29tbW9uL2V4cG9ydGFibGU/IGV4cG9ydGFibGU/XVxyXG4gICAgWzpkeW5hZG9jLmNvbW1vbi9jbGllbnRcclxuICAgICA6ZHluYWRvYy5jb21tb24vZXhwb3J0LWZpbHRlclxyXG4gICAgIGV4cG9ydC1maWx0ZXJdXHJcbiAgICA6dGhlblxyXG4gICAgKGxldFxyXG4gICAgIFsqc2Vzc2lvblxyXG4gICAgICAob3J1bS9wcm9wKVxyXG4gICAgICAqb3B0aW9uc1xyXG4gICAgICAob3J1bS9hdG9tIHs6cGFnZXMgKGlmIG5zLXN5bSA6c2luZ2xlIDptdWx0aXBsZSl9KVxyXG4gICAgICB7OmtleXMgW3BhZ2VzXX1cclxuICAgICAgQCpvcHRpb25zXVxyXG4gICAgIFs6Zm9ybVxyXG4gICAgICB7OmFjdGlvbiBcIi9keW5hZG9jLWV4cG9ydC56aXBcIixcclxuICAgICAgIDptZXRob2QgOmdldCxcclxuICAgICAgIDpzdHlsZSB7OnRleHQtYWxpZ24gXCJsZWZ0XCJ9fVxyXG4gICAgICBbOmRpdlxyXG4gICAgICAgWzpsYWJlbFxyXG4gICAgICAgIFs6aW5wdXRcclxuICAgICAgICAgezp0eXBlIFwicmFkaW9cIixcclxuICAgICAgICAgIDpuYW1lIFwicGFnZXNcIixcclxuICAgICAgICAgIDp2YWx1ZSBcInNpbmdsZVwiLFxyXG4gICAgICAgICAgOmNoZWNrZWQgKD0gcGFnZXMgOnNpbmdsZSksXHJcbiAgICAgICAgICA6b24tY2xpY2sgKGZuKiBbXSAoc3dhcCEgKm9wdGlvbnMgYXNzb2MgOnBhZ2VzIDpzaW5nbGUpKSxcclxuICAgICAgICAgIDpkaXNhYmxlZCAobmlsPyBucy1zeW0pfV1cclxuICAgICAgICBcIk9ubHkgdGhpcyBwYWdlXCJdXVxyXG4gICAgICBbOmRpdlxyXG4gICAgICAgWzpsYWJlbFxyXG4gICAgICAgIFs6aW5wdXRcclxuICAgICAgICAgezp0eXBlIFwicmFkaW9cIixcclxuICAgICAgICAgIDpuYW1lIFwicGFnZXNcIixcclxuICAgICAgICAgIDp2YWx1ZSBcIm11bHRpcGxlXCIsXHJcbiAgICAgICAgICA6Y2hlY2tlZCAoPSBwYWdlcyA6bXVsdGlwbGUpLFxyXG4gICAgICAgICAgOm9uLWNsaWNrIChmbiogW10gKHN3YXAhICpvcHRpb25zIGFzc29jIDpwYWdlcyA6bXVsdGlwbGUpKX1dXHJcbiAgICAgICAgXCJNdWx0aXBsZSBwYWdlc1wiXV1cclxuICAgICAgWzpkaXZcclxuICAgICAgIHs6c3R5bGUgezptYXJnaW4gMTAsIDpmb250LXNpemUgMTR9fVxyXG4gICAgICAgKGNhc2VcclxuICAgICAgICBwYWdlc1xyXG4gICAgICAgIDpzaW5nbGVcclxuICAgICAgICBbOmlcclxuICAgICAgICAgXCJPbmx5IHRoZSBjdXJyZW50IHBhZ2Ugd2lsbCBiZSBleHBvcnRlZFwiXHJcbiAgICAgICAgIFs6YnJdXHJcbiAgICAgICAgIFwiYW5kIHRoZSBzaWRlYmFyIHdpbGwgYmUgaGlkZGVuLlwiXVxyXG4gICAgICAgIDptdWx0aXBsZVxyXG4gICAgICAgIFs6aVxyXG4gICAgICAgICBcIkFsbCB0aGUgbmFtZXNwYWNlcyBpbiB0aGUgc2lkZWJhclwiXHJcbiAgICAgICAgIFs6YnJdXHJcbiAgICAgICAgIFwid2lsbCBiZSBleHBvcnRlZC4gWW91IGNhbiBuYXJyb3cgdGhlbVwiXHJcbiAgICAgICAgIFs6YnJdXHJcbiAgICAgICAgIFwiZG93biB3aXRoIHRoZSBmb2xsb3dpbmcgcmVnZXg6XCJcclxuICAgICAgICAgWzpkaXZcclxuICAgICAgICAgIFs6aW5wdXRcclxuICAgICAgICAgICB7OnR5cGUgXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIDp2YWx1ZSBcIlwiLFxyXG4gICAgICAgICAgICA6cGxhY2Vob2xkZXIgXCJFeHBvcnQgZmlsdGVyXCIsXHJcbiAgICAgICAgICAgIDpzdHlsZSB7Om1hcmdpbiA1LCA6Zm9udC1zaXplIDE0fSxcclxuICAgICAgICAgICAgOm9uLWNoYW5nZVxyXG4gICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgIFtlXVxyXG4gICAgICAgICAgICAgKHN3YXAhXHJcbiAgICAgICAgICAgICAgKnNlc3Npb25cclxuICAgICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgICAgW3Nlc3Npb25dXHJcbiAgICAgICAgICAgICAgICgtPlxyXG4gICAgICAgICAgICAgICAgc2Vzc2lvblxyXG4gICAgICAgICAgICAgICAgKG8vaW5zZXJ0XHJcbiAgICAgICAgICAgICAgICAgOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgICAgICAgICAgICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnQtZmlsdGVyXHJcbiAgICAgICAgICAgICAgICAgKC0+IGUgLi10YXJnZXQgLi12YWx1ZSkpXHJcbiAgICAgICAgICAgICAgICBvL2ZpcmUtcnVsZXMpKSkpfV1dXSldXHJcbiAgICAgIFs6aW5wdXRcclxuICAgICAgIHs6dHlwZSBcImhpZGRlblwiLFxyXG4gICAgICAgIDpuYW1lIFwiZXhwb3J0LWZpbHRlclwiLFxyXG4gICAgICAgIDp2YWx1ZSAob3IgZXhwb3J0LWZpbHRlciBcIlwiKX1dXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICB0eXBlXHJcbiAgICAgICBbOmlucHV0IHs6dHlwZSBcImhpZGRlblwiLCA6bmFtZSBcInR5cGVcIiwgOnZhbHVlIChuYW1lIHR5cGUpfV0pXHJcbiAgICAgICh3aGVuXHJcbiAgICAgICBucy1zeW1cclxuICAgICAgIFs6aW5wdXQgezp0eXBlIFwiaGlkZGVuXCIsIDpuYW1lIFwibnMtc3ltXCIsIDp2YWx1ZSAoc3RyIG5zLXN5bSl9XSlcclxuICAgICAgKHdoZW5cclxuICAgICAgIHZhci1zeW1cclxuICAgICAgIFs6aW5wdXRcclxuICAgICAgICB7OnR5cGUgXCJoaWRkZW5cIiwgOm5hbWUgXCJ2YXItc3ltXCIsIDp2YWx1ZSAoc3RyIHZhci1zeW0pfV0pXHJcbiAgICAgIFs6ZGl2XHJcbiAgICAgICB7OnN0eWxlIHs6dGV4dC1hbGlnbiBcImNlbnRlclwifX1cclxuICAgICAgIFs6YnV0dG9uXHJcbiAgICAgICAgezp0eXBlIFwic3VibWl0XCIsIDpkaXNhYmxlZCAobm90IGV4cG9ydGFibGU/KX1cclxuICAgICAgICBcIkRvd25sb2FkIHppcCBmaWxlXCJdXVxyXG4gICAgICAod2hlbi1ub3RcclxuICAgICAgIGV4cG9ydGFibGU/XHJcbiAgICAgICBbOmRpdlxyXG4gICAgICAgIHs6c3R5bGUgezptYXJnaW4gMTAsIDpmb250LXNpemUgMTR9fVxyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIFs6YiBcIllvdSBidWlsdCBEeW5hZG9jIHdpdGggOm9wdGltaXphdGlvbnMgc2V0IHRvIDpub25lXCJdXVxyXG4gICAgICAgIFs6ZGl2XHJcbiAgICAgICAgIFs6YiBcIllvdSBtdXN0IHNldCBpdCB0byA6c2ltcGxlIGluIG9yZGVyIHRvIGV4cG9ydFwiXV1dKV0pXSxcclxuICAgc2lkZWJhclxyXG4gICBbOndoYXRcclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9uc2VzIG5zZXNdXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9jbGpzLXN0YXJ0ZWQ/XHJcbiAgICAgY2xqcy1zdGFydGVkP11cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9yZWwtcGF0aCByZWwtcGF0aF1cclxuICAgIFs6ZHluYWRvYy5jb21tb24vc2VydmVyIDpkeW5hZG9jLmNvbW1vbi9zdGF0aWM/IHN0YXRpYz9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL3NlcnZlciA6ZHluYWRvYy5jb21tb24vaGlkZS1iYWRnZT8gaGlkZS1iYWRnZT9dXHJcbiAgICBbOmR5bmFkb2MuY29tbW9uL2NsaWVudFxyXG4gICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnQtZmlsdGVyXHJcbiAgICAgZXhwb3J0LWZpbHRlcl1cclxuICAgIDp0aGVuXHJcbiAgICAobGV0XHJcbiAgICAgWypzZWFyY2hcclxuICAgICAgKG9ydW0vYXRvbSBcIlwiKVxyXG4gICAgICBzZWFyY2hcclxuICAgICAgKG9yIChub3QtZW1wdHkgZXhwb3J0LWZpbHRlcikgQCpzZWFyY2gpXHJcbiAgICAgIHNlYXJjaFxyXG4gICAgICAod2hlblxyXG4gICAgICAgKHNlcSBzZWFyY2gpXHJcbiAgICAgICAodHJ5XHJcbiAgICAgICAgKHJlLXBhdHRlcm4gc2VhcmNoKVxyXG4gICAgICAgIChjYXRjaCAjPyg6Y2xqIEV4Y2VwdGlvbiA6Y2xqcyBqcy9FcnJvcikgZSAocHJpbnRsbiBlKSkpKV1cclxuICAgICBbOmRpdlxyXG4gICAgICAod2hlblxyXG4gICAgICAgY2xqcy1zdGFydGVkP1xyXG4gICAgICAgWzppbnB1dFxyXG4gICAgICAgIHs6Y2xhc3MgXCJzZWFyY2hcIixcclxuICAgICAgICAgOm9uLWNoYW5nZVxyXG4gICAgICAgICAoZm4qXHJcbiAgICAgICAgICBbcDFfXzQ4OTkxI11cclxuICAgICAgICAgICgtPj4gcDFfXzQ4OTkxIyAuLXRhcmdldCAuLXZhbHVlIChyZXNldCEgKnNlYXJjaCkpKSxcclxuICAgICAgICAgOnBsYWNlaG9sZGVyIFwiU2VhcmNoXCJ9XSlcclxuICAgICAgKGludG9cclxuICAgICAgIFs6ZGl2XHJcbiAgICAgICAgezpjbGFzcyBcIm5zZXNcIn1cclxuICAgICAgICAod2hlbiAoc2VxIGV4cG9ydC1maWx0ZXIpIFs6aSBcIlBhZ2VzIHRvIGV4cG9ydDpcIl0pXVxyXG4gICAgICAgKGtlZXBcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW3s6a2V5cyBbc3ltIHR5cGUgdmFyLXN5bXNdfV1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3ZhcnNcclxuICAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICAoYW5kIHNlYXJjaCAoZW1wdHk/IGV4cG9ydC1maWx0ZXIpKVxyXG4gICAgICAgICAgICAoLT4+XHJcbiAgICAgICAgICAgICB2YXItc3ltc1xyXG4gICAgICAgICAgICAgKGZpbHRlclxyXG4gICAgICAgICAgICAgIChmbiogW3AxX180ODk5MiNdIChyZS1maW5kIHNlYXJjaCAoc3RyIHAxX180ODk5MiMpKSkpXHJcbiAgICAgICAgICAgICAobWFwdlxyXG4gICAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgICBbdmFyLXN5bV1cclxuICAgICAgICAgICAgICAgWzpkaXZcclxuICAgICAgICAgICAgICAgIHs6Y2xhc3MgXCJ2YXJcIn1cclxuICAgICAgICAgICAgICAgIFs6YVxyXG4gICAgICAgICAgICAgICAgIHs6aHJlZlxyXG4gICAgICAgICAgICAgICAgICAodmFyLXN5bS0+dXJsIHJlbC1wYXRoIHN0YXRpYz8gdHlwZSBzeW0gdmFyLXN5bSl9XHJcbiAgICAgICAgICAgICAgICAgKHN0ciB2YXItc3ltKV1dKSkpKV1cclxuICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgKG9yIChuaWw/IHNlYXJjaCkgKHJlLWZpbmQgc2VhcmNoIChzdHIgc3ltKSkgKHNlcSB2YXJzKSlcclxuICAgICAgICAgICBbOmRpdlxyXG4gICAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgICAgKGFuZCAoPSB0eXBlIDpjbGpzKSAobm90IGhpZGUtYmFkZ2U/KSlcclxuICAgICAgICAgICAgIFs6ZGl2IHs6Y2xhc3MgXCJ0YWdcIn0gXCJDTEpTXCJdKVxyXG4gICAgICAgICAgICBbOmFcclxuICAgICAgICAgICAgIHs6aHJlZiAobnMtc3ltLT51cmwgcmVsLXBhdGggc3RhdGljPyB0eXBlIHN5bSl9XHJcbiAgICAgICAgICAgICAoc3RyIHN5bSldXHJcbiAgICAgICAgICAgICh3aGVuIChzZXEgdmFycykgKGludG8gWzpkaXZdIHZhcnMpKV0pKSlcclxuICAgICAgICBuc2VzKSldKV19KSlcclxuIn0gezpzeW0gaW5pdC1leGFtcGxlLWVkaXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtydW0tc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LWV4YW1wbGUtZWRpdG9yXHJcbiBbcnVtLXN0YXRlXVxyXG4gKGxldFxyXG4gIFtbc3RhdGUgZXhhbXBsZV0gKDpydW0vYXJncyBydW0tc3RhdGUpXVxyXG4gICh3aGVuLWxldFxyXG4gICBbaW5pdCAoOmluaXQtZXhhbXBsZS1lZGl0b3Igc3RhdGUpXVxyXG4gICAoaW5pdCAocnVtL2RvbS1ub2RlIHJ1bS1zdGF0ZSkgZXhhbXBsZSkpKVxyXG4gcnVtLXN0YXRlKVxyXG4ifSksIHBhcmVuLXNvdXAuZG9tICh7OnN5bSB0b3AtbGV2ZWw/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0b3AtbGV2ZWw/XHJcbiBbbm9kZV1cclxuIChib29sZWFuXHJcbiAgKHNvbWUtPiBub2RlIC4tcGFyZW50RWxlbWVudCAuLWNsYXNzTGlzdCAoLmNvbnRhaW5zIFwiY29udGVudFwiKSkpKVxyXG4ifSB7OnN5bSBnZXQtc2VsZWN0aW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgb2JqZWN0cyByZWxhdGVkIHRvIHNlbGVjdGlvbiBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuIElmIGZ1bGwtc2VsZWN0aW9uPyBpcyB0cnVlLFxuaXQgd2lsbCB1c2UgcmFuZ3kgaW5zdGVhZCBvZiB0aGUgbmF0aXZlIHNlbGVjdGlvbiBBUEkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZ1xub2YgdGhlIHNlbGVjdGlvbiAoaXQgaXMsIGhvd2V2ZXIsIG11Y2ggc2xvd2VyKS4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IGZ1bGwtc2VsZWN0aW9uP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1zZWxlY3Rpb25cclxuIFwiUmV0dXJucyB0aGUgb2JqZWN0cyByZWxhdGVkIHRvIHNlbGVjdGlvbiBmb3IgdGhlIGdpdmVuIGVsZW1lbnQuIElmIGZ1bGwtc2VsZWN0aW9uPyBpcyB0cnVlLFxcbml0IHdpbGwgdXNlIHJhbmd5IGluc3RlYWQgb2YgdGhlIG5hdGl2ZSBzZWxlY3Rpb24gQVBJIGluIG9yZGVyIHRvIGdldCB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmdcXG5vZiB0aGUgc2VsZWN0aW9uIChpdCBpcywgaG93ZXZlciwgbXVjaCBzbG93ZXIpLlwiXHJcbiBbZWxlbWVudCBmdWxsLXNlbGVjdGlvbj9dXHJcbiB7OmVsZW1lbnQgZWxlbWVudCxcclxuICA6Y3Vyc29yLXBvc2l0aW9uXHJcbiAgKGNvbmRcclxuICAgZnVsbC1zZWxlY3Rpb24/XHJcbiAgIChsZXRcclxuICAgIFtzZWxlY3Rpb25cclxuICAgICAoLmdldFNlbGVjdGlvbiBqcy9yYW5neSlcclxuICAgICByYW5nZXNcclxuICAgICAoLnNhdmVDaGFyYWN0ZXJSYW5nZXMgc2VsZWN0aW9uIGVsZW1lbnQpXVxyXG4gICAgKGlmLWxldFxyXG4gICAgIFtjaGFyLXJhbmdlIChzb21lLT4gcmFuZ2VzIChhZ2V0IDApIChnb2JqL2dldCBcImNoYXJhY3RlclJhbmdlXCIpKV1cclxuICAgICBbKGdvYmovZ2V0IGNoYXItcmFuZ2UgXCJzdGFydFwiKSAoZ29iai9nZXQgY2hhci1yYW5nZSBcImVuZFwiKV1cclxuICAgICBbMCAwXSkpXHJcbiAgICg9IDAgKC4tcmFuZ2VDb3VudCAoLmdldFNlbGVjdGlvbiBqcy93aW5kb3cpKSlcclxuICAgWzAgMF1cclxuICAgOmVsc2VcclxuICAgKGxldFxyXG4gICAgW3NlbGVjdGlvblxyXG4gICAgICguZ2V0U2VsZWN0aW9uIGpzL3dpbmRvdylcclxuICAgICByYW5nZVxyXG4gICAgICguZ2V0UmFuZ2VBdCBzZWxlY3Rpb24gMClcclxuICAgICBwcmUtY2FyZXQtcmFuZ2VcclxuICAgICAoZG90b1xyXG4gICAgICAoLmNsb25lUmFuZ2UgcmFuZ2UpXHJcbiAgICAgICguc2VsZWN0Tm9kZUNvbnRlbnRzIGVsZW1lbnQpXHJcbiAgICAgICguc2V0RW5kICguLWVuZENvbnRhaW5lciByYW5nZSkgKC4tZW5kT2Zmc2V0IHJhbmdlKSkpXHJcbiAgICAgcG9zXHJcbiAgICAgKC0+IHByZS1jYXJldC1yYW5nZSAudG9TdHJpbmcgKHN0ci9yZXBsYWNlICNcIlxcclwiIFwiXCIpIC4tbGVuZ3RoKV1cclxuICAgIFtwb3MgcG9zXSkpfSlcclxuIn0gezpzeW0gZ2V0LWN1cnNvci1wb3NpdGlvbiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGN1cnNvciBwb3NpdGlvbi4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IGZ1bGwtc2VsZWN0aW9uP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jdXJzb3ItcG9zaXRpb25cclxuIFwiUmV0dXJucyB0aGUgY3Vyc29yIHBvc2l0aW9uLlwiXHJcbiBbZWxlbWVudCBmdWxsLXNlbGVjdGlvbj9dXHJcbiAoLT4gZWxlbWVudCAoZ2V0LXNlbGVjdGlvbiBmdWxsLXNlbGVjdGlvbj8pIDpjdXJzb3ItcG9zaXRpb24pKVxyXG4ifSB7OnN5bSB0ZXh0LW5vZGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vZGVdKX0sIDpzb3VyY2UgIihkZWZuIHRleHQtbm9kZT8gW25vZGVdICg9IDMgKC4tbm9kZVR5cGUgbm9kZSkpKVxyXG4ifSB7OnN5bSBnZXQtZm9jdXNlZC1mb3JtLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBnZXQtZm9jdXNlZC1mb3JtIChmbiogW10gKGdldC1mb2N1c2VkLWVsZW0gXCJjb2xsZWN0aW9uXCIpKSlcclxuIn0gezpzeW0gZ2V0LWZvY3VzZWQtdG9wLWxldmVsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1mb2N1c2VkLXRvcC1sZXZlbFxyXG4gW11cclxuICh3aGVuLWxldFxyXG4gIFtub2RlIChzb21lLT4ganMvcmFuZ3kgLmdldFNlbGVjdGlvbiAuLWFuY2hvck5vZGUpXVxyXG4gIChsb29wXHJcbiAgIFtub2RlIG5vZGVdXHJcbiAgIChpZlxyXG4gICAgKHRvcC1sZXZlbD8gbm9kZSlcclxuICAgIG5vZGVcclxuICAgICh3aGVuLWxldCBbcGFyZW50ICguLXBhcmVudEVsZW1lbnQgbm9kZSldIChyZWN1ciBwYXJlbnQpKSkpKSlcclxuIn0gezpzeW0gZ2V0LXBhcmVudCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5lYXJlc3QgcGFyZW50IHdpdGggdGhlIGdpdmVuIGNsYXNzIG5hbWUuIiwgOmFyZ2xpc3RzIChbbm9kZSBjbGFzcy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXBhcmVudFxyXG4gXCJSZXR1cm5zIHRoZSBuZWFyZXN0IHBhcmVudCB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLlwiXHJcbiBbbm9kZSBjbGFzcy1uYW1lXVxyXG4gKGxvb3BcclxuICBbbm9kZSBub2RlXVxyXG4gICh3aGVuLWxldFxyXG4gICBbcGFyZW50ICguLXBhcmVudEVsZW1lbnQgbm9kZSldXHJcbiAgIChpZlxyXG4gICAgKC5jb250YWlucyAoLi1jbGFzc0xpc3QgcGFyZW50KSBjbGFzcy1uYW1lKVxyXG4gICAgcGFyZW50XHJcbiAgICAocmVjdXIgcGFyZW50KSkpKSlcclxuIn0gezpzeW0gY29sbC1ub2RlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sbC1ub2RlP1xyXG4gW25vZGVdXHJcbiAoYm9vbGVhbiAoc29tZS0+IG5vZGUgLi1jbGFzc0xpc3QgKC5jb250YWlucyBcImNvbGxlY3Rpb25cIikpKSlcclxuIn0gezpzeW0gZ2V0LW5lYXJlc3QtbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1uZWFyZXN0LW5zXHJcbiBbbm9kZV1cclxuIChsb29wXHJcbiAgW25vZGUgbm9kZV1cclxuICAoaWZcclxuICAgKHNvbWUtPiBub2RlIC4tY2hpbGROb2RlcyAoLml0ZW0gMSkgLi10ZXh0Q29udGVudCAoPSBcIm5zXCIpKVxyXG4gICAoc29tZS0+IG5vZGUgLi1jaGlsZE5vZGVzICguaXRlbSAzKSAuLXRleHRDb250ZW50IHN5bWJvbClcclxuICAgKHdoZW4tbGV0IFtzaWJsaW5nICguLXByZXZpb3VzU2libGluZyBub2RlKV0gKHJlY3VyIHNpYmxpbmcpKSkpKVxyXG4ifSB7OnN5bSBpbnNlcnQtdGV4dCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdGV4dF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc2VydC10ZXh0IVxyXG4gW3RleHRdXHJcbiAobGV0XHJcbiAgW3NlbGVjdGlvblxyXG4gICAoLmdldFNlbGVjdGlvbiBqcy93aW5kb3cpXHJcbiAgIHJhbmdlXHJcbiAgICguZ2V0UmFuZ2VBdCBzZWxlY3Rpb24gMClcclxuICAgbm9kZVxyXG4gICAoLmNyZWF0ZVRleHROb2RlIGpzL2RvY3VtZW50IHRleHQpXVxyXG4gIChkb3RvXHJcbiAgIHJhbmdlXHJcbiAgIC5kZWxldGVDb250ZW50c1xyXG4gICAoLmluc2VydE5vZGUgbm9kZSlcclxuICAgKC5zZXRTdGFydEFmdGVyIG5vZGUpXHJcbiAgICguc2V0RW5kQWZ0ZXIgbm9kZSlcclxuICAgKC5jb2xsYXBzZSBmYWxzZSkpKSlcclxuIn0gezpzeW0gZ2V0LWNvbXBsZXRpb24taW5mbywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY29tcGxldGlvbi1pbmZvXHJcbiBbXVxyXG4gKHdoZW4tbGV0XHJcbiAgW3ByZWZpeC1lbGVtIChnZXQtZm9jdXNlZC1lbGVtIFwic3ltYm9sXCIpXVxyXG4gIChsZXRcclxuICAgW3Bvc1xyXG4gICAgKC0+IHByZWZpeC1lbGVtIChnZXQtY3Vyc29yLXBvc2l0aW9uIGZhbHNlKSBmaXJzdClcclxuICAgIHRleHRcclxuICAgICguLXRleHRDb250ZW50IHByZWZpeC1lbGVtKVxyXG4gICAgcHJlZml4XHJcbiAgICAoc3VicyB0ZXh0IDAgcG9zKV1cclxuICAgKGFzc29jXHJcbiAgICAoZ2V0LWNvbXBsZXRpb24tY29udGV4dCAoY291bnQgdGV4dCkgKGNvdW50IHByZWZpeCkpXHJcbiAgICA6dGV4dFxyXG4gICAgdGV4dFxyXG4gICAgOnByZWZpeFxyXG4gICAgcHJlZml4KSkpKVxyXG4ifSB7OnN5bSBzZXQtY3Vyc29yLXBvc2l0aW9uISwgOm1ldGEgezpkb2MgIk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IHBvc2l0aW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0LWN1cnNvci1wb3NpdGlvbiFcclxuIFwiTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlwiXHJcbiBbZWxlbWVudCBwb3NpdGlvbl1cclxuIChsZXRcclxuICBbW3N0YXJ0LXBvcyBlbmQtcG9zXVxyXG4gICBwb3NpdGlvblxyXG4gICBtYXgtbGVuZ3RoXHJcbiAgICgtPiBlbGVtZW50IC4tdGV4dENvbnRlbnQgY291bnQpXHJcbiAgIHNlbGVjdGlvblxyXG4gICAoLmdldFNlbGVjdGlvbiBqcy9yYW5neSlcclxuICAgY2hhci1yYW5nZVxyXG4gICAjanMgezpzdGFydCBzdGFydC1wb3MsIDplbmQgZW5kLXBvc31cclxuICAgcmFuZ2VcclxuICAgI2pzIHs6Y2hhcmFjdGVyUmFuZ2UgY2hhci1yYW5nZSwgOmJhY2t3YXJkIGZhbHNlLCA6Y2hhcmFjdGVyT3B0aW9ucyBuaWx9XHJcbiAgIHJhbmdlc1xyXG4gICAoYXJyYXkgcmFuZ2UpXVxyXG4gICgucmVzdG9yZUNoYXJhY3RlclJhbmdlcyBzZWxlY3Rpb24gZWxlbWVudCByYW5nZXMpKSlcclxuIn0gezpzeW0gZ2V0LWZvY3VzZWQtZWxlbSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjbGFzcy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWZvY3VzZWQtZWxlbVxyXG4gW2NsYXNzLW5hbWVdXHJcbiAoc29tZS0+IGpzL3Jhbmd5IC5nZXRTZWxlY3Rpb24gLi1hbmNob3JOb2RlIChnZXQtcGFyZW50IGNsYXNzLW5hbWUpKSlcclxuIn0gezpzeW0gZXJyb3Itbm9kZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVycm9yLW5vZGU/XHJcbiBbbm9kZV1cclxuIChib29sZWFuIChzb21lLT4gbm9kZSAuLWNsYXNzTGlzdCAoLmNvbnRhaW5zIFwiZXJyb3JcIikpKSlcclxuIn0gezpzeW0gZ2V0LWNvbXBsZXRpb24tY29udGV4dCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW1ib2wtbGVuZ3RoIGN1cnNvci1vZmZzZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtY29tcGxldGlvbi1jb250ZXh0XHJcbiBbc3ltYm9sLWxlbmd0aCBjdXJzb3Itb2Zmc2V0XVxyXG4gKHdoZW4tbGV0XHJcbiAgW3RvcC1sZXZlbC1lbGVtIChnZXQtZm9jdXNlZC10b3AtbGV2ZWwpXVxyXG4gIChsZXRcclxuICAgW3Bvc1xyXG4gICAgKC0+IHRvcC1sZXZlbC1lbGVtIChnZXQtY3Vyc29yLXBvc2l0aW9uIGZhbHNlKSBmaXJzdClcclxuICAgIHByZWZpeC1zdGFydFxyXG4gICAgKC0gcG9zIGN1cnNvci1vZmZzZXQpXHJcbiAgICB0ZXh0XHJcbiAgICAoLi10ZXh0Q29udGVudCB0b3AtbGV2ZWwtZWxlbSldXHJcbiAgIHs6bnMgKGdldC1uZWFyZXN0LW5zIHRvcC1sZXZlbC1lbGVtKSxcclxuICAgIDpjb250ZXh0LWJlZm9yZSAoc3VicyB0ZXh0IDAgcHJlZml4LXN0YXJ0KSxcclxuICAgIDpjb250ZXh0LWFmdGVyIChzdWJzIHRleHQgKCsgcHJlZml4LXN0YXJ0IHN5bWJvbC1sZW5ndGgpKSxcclxuICAgIDpzdGFydC1wb3NpdGlvbiBwcmVmaXgtc3RhcnR9KSkpXHJcbiJ9IHs6c3ltIGNvbW1vbi1hbmNlc3RvciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgZ2l2ZW4gbm9kZXMuIiwgOmFyZ2xpc3RzIChbZmlyc3Qtbm9kZSBzZWNvbmQtbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbW1vbi1hbmNlc3RvclxyXG4gXCJSZXR1cm5zIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIG5vZGVzLlwiXHJcbiBbZmlyc3Qtbm9kZSBzZWNvbmQtbm9kZV1cclxuIChsZXRcclxuICBbZmlyc3QtcGFyZW50XHJcbiAgIChmaXJzdCAoZ2V0LXBhcmVudHMgZmlyc3Qtbm9kZSBcImNvbGxlY3Rpb25cIikpXHJcbiAgIHNlY29uZC1wYXJlbnRcclxuICAgKGZpcnN0IChnZXQtcGFyZW50cyBzZWNvbmQtbm9kZSBcImNvbGxlY3Rpb25cIikpXVxyXG4gIChjb25kXHJcbiAgIChhbmQgZmlyc3QtcGFyZW50IHNlY29uZC1wYXJlbnQgKD0gZmlyc3QtcGFyZW50IHNlY29uZC1wYXJlbnQpKVxyXG4gICBmaXJzdC1wYXJlbnRcclxuICAgKGFuZFxyXG4gICAgKD0gZmlyc3Qtbm9kZSBzZWNvbmQtbm9kZSlcclxuICAgICh0ZXh0LW5vZGU/IGZpcnN0LW5vZGUpXHJcbiAgICAodG9wLWxldmVsPyBmaXJzdC1ub2RlKSlcclxuICAgZmlyc3Qtbm9kZSkpKVxyXG4ifSB7OnN5bSBnZXQtcGFyZW50cywgOm1ldGEgezpkb2MgIlJldHVybnMgYWxsIHRoZSBwYXJlbnRzIHdpdGggdGhlIGdpdmVuIGNsYXNzIG5hbWUuIiwgOmFyZ2xpc3RzIChbbm9kZSBjbGFzcy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXBhcmVudHNcclxuIFwiUmV0dXJucyBhbGwgdGhlIHBhcmVudHMgd2l0aCB0aGUgZ2l2ZW4gY2xhc3MgbmFtZS5cIlxyXG4gW25vZGUgY2xhc3MtbmFtZV1cclxuIChsb29wXHJcbiAgW25vZGUgbm9kZSBlbGVtcyAnKCldXHJcbiAgKGlmLWxldFxyXG4gICBbcGFyZW50IChnZXQtcGFyZW50IG5vZGUgY2xhc3MtbmFtZSldXHJcbiAgIChyZWN1ciBwYXJlbnQgKGNvbmogZWxlbXMgcGFyZW50KSlcclxuICAgZWxlbXMpKSlcclxuIn0gezpzeW0gbm9kZT8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG5vZGU/IChmbiogW3AxX180OTAzOSNdIChpbnN0YW5jZT8ganMvTm9kZSBwMV9fNDkwMzkjKSkpXHJcbiJ9IHs6c3ltIHNjcm9sbC10by1uZWFyZXN0LWVsZW0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2Nyb2xsLXRvLW5lYXJlc3QtZWxlbVxyXG4gW11cclxuIChzb21lLT5cclxuICBqcy9yYW5neVxyXG4gIC5nZXRTZWxlY3Rpb25cclxuICAuLWFuY2hvck5vZGVcclxuICAuLXBhcmVudEVsZW1lbnRcclxuICAoLnNjcm9sbEludG9WaWV3XHJcbiAgICNqcyB7OmJlaGF2aW9yIFwiYXV0b1wiLCA6YmxvY2sgXCJuZWFyZXN0XCIsIDppbmxpbmUgXCJuZWFyZXN0XCJ9KSkpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIuaW1wbC5lcnJvcnMgKHs6c3ltIHRocm93LWJhZC1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtZGlzcGF0Y2hcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk5vIGRpc3BhdGNoIG1hY3JvIGZvciBcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1lc2NhcGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWVzY2FwZVxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGVzY2FwZTogXFxcXHVcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWR1cC1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIGtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZHVwLWtleXNcclxuIFtyZHIga2luZCBrc11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICAoZHVwbGljYXRlLWtleXMtZXJyb3JcclxuICAgKHN0ciAocy9jYXBpdGFsaXplIChuYW1lIGtpbmQpKSBcIiBsaXRlcmFsIGNvbnRhaW5zIGR1cGxpY2F0ZSBrZXlcIilcclxuICAga3MpKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBucy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW5zXHJcbiBbcmRyIG5zLW5hbWVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHZhbHVlIHVzZWQgYXMgbmFtZXNwYWNlIGluIG5hbWVzcGFjZWQgbWFwOiBcIlxyXG4gIG5zLW5hbWVcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVua25vd24tcmVhZGVyLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5rbm93bi1yZWFkZXItdGFnXHJcbiBbcmRyIHRhZ11cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiTm8gcmVhZGVyIGZ1bmN0aW9uIGZvciB0YWcgXCIgKGkvaW5zcGVjdCB0YWcpIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWF0LWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1hdC1kaXNwYXRjaFxyXG4gW3Jkcl1cclxuIChlb2YtZXJyb3IgcmRyIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBkaXNwYXRjaCBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbWV0YWRhdGEtdGFyZ2V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YXJnZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbWV0YWRhdGEtdGFyZ2V0XHJcbiBbcmRyIHRhcmdldF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk1ldGFkYXRhIGNhbiBub3QgYmUgYXBwbGllZCB0byBcIlxyXG4gIChpL2luc3BlY3QgdGFyZ2V0KVxyXG4gIFwiLiBcIlxyXG4gIFwiTWV0YWRhdGEgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBJTWV0YXMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLW51bWJlclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBudW1iZXI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gcmVhZGVyLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6cmVhZGVyLWVycm9yIChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGl0ZXJhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGl0ZXJhbFxyXG4gW3JkciB0b2tlbl1cclxuICh0aHJvd1xyXG4gIChpbGxlZ2FsLWFyZy1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgbGl0ZXJhbDogXFxcXFwiIHRva2VuIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LW5zLW1hcC1uby1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIG5zLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1ucy1tYXAtbm8tbWFwXHJcbiBbcmRyIG5zLW5hbWVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJOYW1lc3BhY2VkIG1hcCB3aXRoIG5hbWVzcGFjZSBcIlxyXG4gIG5zLW5hbWVcclxuICBcIiBkb2VzIG5vdCBzcGVjaWZ5IGEgbWFwLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5zdXBwb3J0ZWQtY2hhcmFjdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVuc3VwcG9ydGVkLWNoYXJhY3RlclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWZlYXR1cmUtbm90LWtleXdvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGZlYXR1cmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1mZWF0dXJlLW5vdC1rZXl3b3JkXHJcbiBbcmRyIGZlYXR1cmVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJGZWF0dXJlIGNhbm5vdCBiZSBcIlxyXG4gIChpL2luc3BlY3QgZmVhdHVyZSlcclxuICBcIiBGZWF0dXJlcyBtdXN0IGJlIGtleXdvcmRzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWRlbGltaXRlZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tyZHIga2luZCBjb2x1bW4gbGluZV0gW3JkciBraW5kIGxpbmUgY29sdW1uIG5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtZGVsaW1pdGVkXHJcbiAoW3JkciBraW5kIGNvbHVtbiBsaW5lXVxyXG4gICh0aHJvdy1lb2YtZGVsaW1pdGVkIHJkciBraW5kIGxpbmUgY29sdW1uIG5pbCkpXHJcbiAoW3JkciBraW5kIGxpbmUgY29sdW1uIG5dXHJcbiAgKGVvZi1lcnJvclxyXG4gICByZHJcclxuICAgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIFwiXHJcbiAgIChpZiBuIChzdHIgXCJpdGVtIFwiIG4gXCIgb2YgXCIpKVxyXG4gICAobmFtZSBraW5kKVxyXG4gICAoaWYgbGluZSAoc3RyIFwiLCBzdGFydGluZyBhdCBsaW5lIFwiIGxpbmUgXCIgYW5kIGNvbHVtbiBcIiBjb2x1bW4pKVxyXG4gICBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtaW4tY2hhcmFjdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1pbi1jaGFyYWN0ZXJcclxuIFtyZHJdXHJcbiAoZW9mLWVycm9yIHJkciBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtY2hhclxyXG4gW3JkciBraW5kIGNoXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBjaGFyYWN0ZXI6IFwiXHJcbiAgY2hcclxuICBcIiBmb3VuZCB3aGlsZSByZWFkaW5nIFwiXHJcbiAgKG5hbWUga2luZClcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIGVvZi1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlb2YtZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOmVvZiAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW1ldGFkYXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW1ldGFkYXRhXHJcbiBbcmRyIHhdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJNZXRhZGF0YSBjYW5ub3QgYmUgXCJcclxuICAoaS9pbnNwZWN0IHgpXHJcbiAgXCIuIE1ldGFkYXRhIG11c3QgYmUgYSBTeW1ib2wsIEtleXdvcmQsIFN0cmluZyBvciBNYXAuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtcmVhZGluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCAmIHN0YXJ0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLXJlYWRpbmdcclxuIFtyZHIga2luZCAmIHN0YXJ0XVxyXG4gKGxldFxyXG4gIFtpbml0IChjYXNlIGtpbmQgOnJlZ2V4IFwiI1xcXCJcIiA6c3RyaW5nIFxcXCIpXVxyXG4gIChlb2YtZXJyb3JcclxuICAgcmRyXHJcbiAgIFwiVW5leHBlY3RlZCBFT0YgcmVhZGluZyBcIlxyXG4gICAobmFtZSBraW5kKVxyXG4gICBcIiBzdGFydGluZyBcIlxyXG4gICAoYXBwbHkgc3RyIGluaXQgc3RhcnQpXHJcbiAgIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1lcnJvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1lcnJvclxyXG4gW3JkciBsaW5lXVxyXG4gKGlmXHJcbiAgbGluZVxyXG4gIChlb2YtZXJyb3IgcmRyIFwiRU9GIHdoaWxlIHJlYWRpbmcsIHN0YXJ0aW5nIGF0IGxpbmUgXCIgbGluZSBcIi5cIilcclxuICAoZW9mLWVycm9yIHJkciBcIkVPRiB3aGlsZSByZWFkaW5nLlwiKSkpXHJcbiJ9IHs6c3ltIGlsbGVnYWwtYXJnLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlsbGVnYWwtYXJnLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDppbGxlZ2FsLWFyZ3VtZW50IChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLW9jdGFsLWxlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLW9jdGFsLWxlblxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgb2N0YWwgZXNjYXBlIHNlcXVlbmNlIGluIGEgY2hhcmFjdGVyIGxpdGVyYWw6XCJcclxuICB0b2tlblxyXG4gIFwiLiBPY3RhbCBlc2NhcGUgc2VxdWVuY2VzIG11c3QgYmUgMyBvciBmZXdlciBkaWdpdHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0XHJcbiBbcmRyIGNoXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yIHJkciBcIkludmFsaWQgZGlnaXQgXCIgY2ggXCIgaW4gdW5pY29kZSBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQtaW4tdG9rZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LWluLXRva2VuXHJcbiBbcmRyIGNoIHRva2VuXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIGRpZ2l0IFwiXHJcbiAgY2hcclxuICBcIiBpbiB1bmljb2RlIGNoYXJhY3RlciBcXFxcXCJcclxuICB0b2tlblxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWxlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgYWN0dWFsIGV4cGVjdGVkXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWxlblxyXG4gW3JkciBhY3R1YWwgZXhwZWN0ZWRdXHJcbiAoaWxsZWdhbC1hcmctZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgdW5pY29kZSBsaXRlcmFsLiBVbmljb2RlIGxpdGVyYWxzIHNob3VsZCBiZSBcIlxyXG4gIGV4cGVjdGVkXHJcbiAgXCJjaGFyYWN0ZXJzIGxvbmcuICBcIlxyXG4gIFwidmFsdWUgc3VwcGxlZCBpcyBcIlxyXG4gIGFjdHVhbFxyXG4gIFwiY2hhcmFjdGVycyBsb25nLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctc2luZ2xlLWNvbG9uLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXNpbmdsZS1jb2xvblxyXG4gW3Jkcl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiQSBzaW5nbGUgY29sb24gaXMgbm90IGEgdmFsaWQga2V5d29yZC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LW9kZC1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGxpbmUgY29sIGVsZW1lbnRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctb2RkLW1hcFxyXG4gW3JkciBsaW5lIGNvbCBlbGVtZW50c11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIlRoZSBtYXAgbGl0ZXJhbCBzdGFydGluZyB3aXRoIFwiXHJcbiAgKGkvaW5zcGVjdCAoZmlyc3QgZWxlbWVudHMpKVxyXG4gIChpZiBsaW5lIChzdHIgXCIgb24gbGluZSBcIiBsaW5lIFwiIGNvbHVtbiBcIiBjb2wpKVxyXG4gIFwiIGNvbnRhaW5zIFwiXHJcbiAgKGNvdW50IGVsZW1lbnRzKVxyXG4gIFwiIGZvcm0ocykuIE1hcCBsaXRlcmFscyBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgZm9ybXMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtb2N0YWwtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1vY3RhbC1udW1iZXJcclxuIFtyZHJdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk9jdGFsIGVzY2FwZSBzZXF1ZW5jZSBtdXN0IGJlIGluIHJhbmdlIFswLCAzNzddLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLXJlYWRlci10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1yZWFkZXItdGFnXHJcbiBbcmRyIHRhZ11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgcmVhZGVyIHRhZzogXCJcclxuICAoaS9pbnNwZWN0IHRhZylcclxuICBcIi4gUmVhZGVyIHRhZ3MgbXVzdCBiZSBzeW1ib2xzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5tYXRjaC1kZWxpbWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5tYXRjaC1kZWxpbWl0ZXJcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVubWF0Y2hlZCBkZWxpbWl0ZXIgXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLWNoYXJhY3Rlci1saXRlcmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtY2hhcmFjdGVyLWxpdGVyYWxcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgY2hhcmFjdGVyIGxpdGVyYWwgXFxcXHVcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1jaGFyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgY2hhcmFjdGVyIFxcXFxcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1lc2NhcGUtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtZXNjYXBlLWNoYXJcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVuc3VwcG9ydGVkIGVzY2FwZSBjaGFyYWN0ZXI6IFxcXFxcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LW5vLWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm4gdGhyb3ctbm8tZGlzcGF0Y2ggW3JkciBjaF0gKHRocm93LWJhZC1kaXNwYXRjaCByZHIgY2gpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtYXQtc3RhcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtYXQtc3RhcnRcclxuIFtyZHIga2luZF1cclxuIChlb2YtZXJyb3JcclxuICByZHJcclxuICBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgc3RhcnQgb2YgXCJcclxuICAobmFtZSBraW5kKVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWRcclxuIFtyZHIga2luZCB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBcIiAobmFtZSBraW5kKSBcIjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSksIGR5bmFkb2MuY29yZSAoezpzeW0gY2xqLWNvbXBpbGVyLWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4YW1wbGUgZm9ybXMgY2JdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGotY29tcGlsZXItZm5cclxuIFtleGFtcGxlIGZvcm1zIGNiXVxyXG4gKGxldFxyXG4gIFtucy1zeW0gKDpucy1zeW0gKGNvbW1vbi9nZXQtc3RhdGUpKV1cclxuICAodHJ5XHJcbiAgICguc2VuZFxyXG4gICAgWGhySW9cclxuICAgIFwiL2V2YWxcIlxyXG4gICAgKGZuXHJcbiAgICAgW2VdXHJcbiAgICAgKGlmXHJcbiAgICAgICguaXNTdWNjZXNzICguLXRhcmdldCBlKSlcclxuICAgICAgKC0+PlxyXG4gICAgICAgKC4uIGUgLXRhcmdldCBnZXRSZXNwb25zZVRleHQpXHJcbiAgICAgICByZWFkLXN0cmluZ1xyXG4gICAgICAgcmVzdFxyXG4gICAgICAgKG1hcHZcclxuICAgICAgICAoZm4qXHJcbiAgICAgICAgIFtwMV9fNDg5OTMjXVxyXG4gICAgICAgICAoaWYgKHZlY3Rvcj8gcDFfXzQ4OTkzIykgKGludG8tYXJyYXkgcDFfXzQ4OTkzIykgcDFfXzQ4OTkzIykpKVxyXG4gICAgICAgY2IpXHJcbiAgICAgIChjYiBbXSkpKVxyXG4gICAgXCJQT1NUXCJcclxuICAgIChwci1zdHJcclxuICAgICAoaW50b1xyXG4gICAgICBbKGxpc3QgJ2luLW5zIChsaXN0ICdxdW90ZSBucy1zeW0pKV1cclxuICAgICAgKG1hcHYgKHBhcnRpYWwgdHJhbnNmb3JtIChkaXNzb2MgZXhhbXBsZSA6d2l0aC1jYXJkKSkgZm9ybXMpKSkpXHJcbiAgIChjYXRjaCBqcy9FcnJvciBfIChjYiBbXSkpKSkpXHJcbiJ9IHs6c3ltIGZvcm0tPnNlcmlhbGl6YWJsZSwgOm1ldGEgezpkb2MgIkNvbnZlcnRzIHRoZSBpbnB1dCB0byBlaXRoZXIgYSBzdHJpbmcgb3IgKGlmIGFuIGVycm9yIG9iamVjdCkgYW4gYXJyYXkgb2YgZGF0YSIsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3JtLT5zZXJpYWxpemFibGVcclxuIFwiQ29udmVydHMgdGhlIGlucHV0IHRvIGVpdGhlciBhIHN0cmluZyBvciAoaWYgYW4gZXJyb3Igb2JqZWN0KSBhbiBhcnJheSBvZiBkYXRhXCJcclxuIFtmb3JtXVxyXG4gKGlmXHJcbiAgKGluc3RhbmNlPyBqcy9FcnJvciBmb3JtKVxyXG4gIChhcnJheVxyXG4gICAob3IgKHNvbWUtPiBmb3JtIC4tY2F1c2UgLi1tZXNzYWdlKSAoLi1tZXNzYWdlIGZvcm0pKVxyXG4gICAoLi1maWxlTmFtZSBmb3JtKVxyXG4gICAoLi1saW5lTnVtYmVyIGZvcm0pKVxyXG4gIChwci1zdHIgZm9ybSkpKVxyXG4ifSB7OnN5bSBpbml0LWVkaXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbGVtXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1lZGl0b3JcclxuIFtlbGVtXVxyXG4gKHdoZW4tbGV0XHJcbiAgW3BhcmVuLXNvdXAgKG9yICgucXVlcnlTZWxlY3RvciBlbGVtIFwiLnBhcmVuLXNvdXBcIikgZWxlbSldXHJcbiAgKHBzL2luaXQgcGFyZW4tc291cCAoanMtPmNsaiB7OmNvbXBpbGVyLWZuIChmbiBbXSl9KSkpKVxyXG4ifSB7OnN5bSBjbGpzLWNvbXBpbGVyLWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4YW1wbGUgZm9ybXMgY2JdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbGpzLWNvbXBpbGVyLWZuXHJcbiBbZXhhbXBsZSBmb3JtcyBjYl1cclxuIChsZXRcclxuICBbbnMtc3ltICg6bnMtc3ltIChjb21tb24vZ2V0LXN0YXRlKSldXHJcbiAgKGVzL2NvZGUtPnJlc3VsdHNcclxuICAgKGludG8gWyhsaXN0ICducyBucy1zeW0pXSAobWFwdiAocGFydGlhbCB0cmFuc2Zvcm0gZXhhbXBsZSkgZm9ybXMpKVxyXG4gICAoZm4gW3Jlc3VsdHNdICgtPj4gcmVzdWx0cyByZXN0IChtYXB2IGZvcm0tPnNlcmlhbGl6YWJsZSkgY2IpKVxyXG4gICB7OmN1c3RvbS1sb2FkIChmbiBbb3B0cyBjYl0gKGNiIHs6bGFuZyA6Y2xqLCA6c291cmNlIFwiXCJ9KSksXHJcbiAgICA6ZGlzYWJsZS10aW1lb3V0PyB0cnVlfSkpKVxyXG4ifSB7OnN5bSB0cmFuc2Zvcm0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFt3aXRoLWZvY3VzIHdpdGgtY2FyZCB3aXRoLWNhbGxiYWNrXSwgOmFzIGV4fSBmb3JtLXN0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zZm9ybVxyXG4gW3s6a2V5cyBbd2l0aC1mb2N1cyB3aXRoLWNhcmQgd2l0aC1jYWxsYmFja10sIDphcyBleH0gZm9ybS1zdHJdXHJcbiAoaWZcclxuICAob3Igd2l0aC1mb2N1cyB3aXRoLWNhcmQgd2l0aC1jYWxsYmFjaylcclxuICAodHJhbnNmb3JtL3RyYW5zZm9ybSBleCAocmVhZC1zdHJpbmcgZm9ybS1zdHIpKVxyXG4gIGZvcm0tc3RyKSlcclxuIn0gezpzeW0gaW5pdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0XHJcbiBbXVxyXG4gKC0+PlxyXG4gICgucXVlcnlTZWxlY3RvciBqcy9kb2N1bWVudCBcIiNpbml0aWFsLXN0YXRlXCIpXHJcbiAgLi10ZXh0Q29udGVudFxyXG4gIGpzL2F0b2JcclxuICByZWFkLXN0cmluZ1xyXG4gIChzd2FwISBjb21tb24vKnNlc3Npb24gY29tbW9uL3VwZGF0ZS1zZXNzaW9uIDpkeW5hZG9jLmNvbW1vbi9zZXJ2ZXIpKVxyXG4gKHJ1bS9oeWRyYXRlXHJcbiAgKGNvbW1vbi9hcHAtcm9vdCBjb21tb24vKnNlc3Npb24pXHJcbiAgKC5xdWVyeVNlbGVjdG9yIGpzL2RvY3VtZW50IFwiI2FwcFwiKSlcclxuIChsZXRcclxuICBbezprZXlzIFt2YXItc3ltIHdhdGNoZXJdfSAoY29tbW9uL2dldC1zdGF0ZSldXHJcbiAgKC0+PlxyXG4gICB7OmR5bmFkb2MuY29tbW9uL2NsanMtc3RhcnRlZD8gdHJ1ZSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9leHBvcnRhYmxlPyBqcy9DT01QSUxFRCxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi9pbml0LWVkaXRvciAobWVtb2l6ZSBpbml0LWVkaXRvciksXHJcbiAgICA6ZHluYWRvYy5jb21tb24vaW5pdC1leGFtcGxlLWVkaXRvciAobWVtb2l6ZSBpbml0LWV4YW1wbGUtZWRpdG9yKSxcclxuICAgIDpkeW5hZG9jLmNvbW1vbi93YXRjaGVyXHJcbiAgICAod2hlbi1ub3QganMvQ09NUElMRUQgKG9yIHdhdGNoZXIgKGluaXQtd2F0Y2hlciEpKSl9XHJcbiAgIChzd2FwIVxyXG4gICAgY29tbW9uLypzZXNzaW9uXHJcbiAgICBjb21tb24vdXBkYXRlLXNlc3Npb25cclxuICAgIDpkeW5hZG9jLmNvbW1vbi9jbGllbnQpKVxyXG4gICh3aGVuXHJcbiAgIHZhci1zeW1cclxuICAgKGRvc2VxXHJcbiAgICBbYnV0dG9uICgtPiBqcy9kb2N1bWVudCAoLnF1ZXJ5U2VsZWN0b3JBbGwgXCIuYnV0dG9uXCIpIGFycmF5LXNlcSldXHJcbiAgICAoc2V0ISAoLi1kaXNwbGF5ICguLXN0eWxlIGJ1dHRvbikpIFwiaW5saW5lLWJsb2NrXCIpKSkpKVxyXG4ifSB7OnN5bSByZWFkLXN0cmluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zdHJpbmdcclxuIFtzXVxyXG4gKGJpbmRpbmdcclxuICBbci8qc3VwcHJlc3MtcmVhZCogdHJ1ZV1cclxuICAoci9yZWFkLXN0cmluZyB7OnJlYWQtY29uZCA6cHJlc2VydmUsIDplb2YgbmlsfSBzKSkpXHJcbiJ9IHs6c3ltIGluaXQtZXhhbXBsZS1lZGl0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWxlbSBleGFtcGxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5pdC1leGFtcGxlLWVkaXRvclxyXG4gW2VsZW0gZXhhbXBsZV1cclxuICh3aGVuLWxldFxyXG4gIFtwYXJlbi1zb3VwIChvciAoLnF1ZXJ5U2VsZWN0b3IgZWxlbSBcIi5wYXJlbi1zb3VwXCIpIGVsZW0pXVxyXG4gICh3aGVuLWxldFxyXG4gICBbY29udGVudCAoLnF1ZXJ5U2VsZWN0b3IgcGFyZW4tc291cCBcIi5jb250ZW50XCIpXVxyXG4gICAoc2V0ISAoLi1jb250ZW50RWRpdGFibGUgY29udGVudCkgdHJ1ZSkpXHJcbiAgKGxldFxyXG4gICBbdHlwZSAoOnR5cGUgKGNvbW1vbi9nZXQtc3RhdGUpKV1cclxuICAgKHBzL2luaXRcclxuICAgIHBhcmVuLXNvdXBcclxuICAgIChqcy0+Y2xqXHJcbiAgICAgezpjb21waWxlci1mblxyXG4gICAgICAoaWZcclxuICAgICAgICg9IDpjbGogdHlwZSlcclxuICAgICAgIChwYXJ0aWFsIGNsai1jb21waWxlci1mbiBleGFtcGxlKVxyXG4gICAgICAgKHBhcnRpYWwgY2xqcy1jb21waWxlci1mbiBleGFtcGxlKSl9KSkpKSlcclxuIn0gezpzeW0gaW5pdC13YXRjaGVyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbml0LXdhdGNoZXIhXHJcbiBbXVxyXG4gKGxldFxyXG4gIFtwcm90b2NvbFxyXG4gICAoaWYgKD0gKC4tcHJvdG9jb2wganMvbG9jYXRpb24pIFwiaHR0cHM6XCIpIFwid3NzOlwiIFwid3M6XCIpXHJcbiAgIGhvc3RcclxuICAgKC0+IGpzL3dpbmRvdyAuLWxvY2F0aW9uIC4taG9zdClcclxuICAgc29ja1xyXG4gICAoanMvV2ViU29ja2V0LiAoc3RyIHByb3RvY29sIFwiLy9cIiBob3N0IFwiL3dhdGNoXCIpKV1cclxuICAoc2V0IVxyXG4gICAoLi1vbm9wZW4gc29jaylcclxuICAgKGZuIFtldmVudF0gKC5zZW5kIHNvY2sganMvd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSkpXHJcbiAgKHNldCFcclxuICAgKC4tb25tZXNzYWdlIHNvY2spXHJcbiAgIChmblxyXG4gICAgW2V2ZW50XVxyXG4gICAgKC0+PlxyXG4gICAgICguLWRhdGEgZXZlbnQpXHJcbiAgICAgcmVhZC1zdHJpbmdcclxuICAgICAoc3dhcCFcclxuICAgICAgY29tbW9uLypzZXNzaW9uXHJcbiAgICAgIGNvbW1vbi91cGRhdGUtc2Vzc2lvblxyXG4gICAgICA6ZHluYWRvYy5jb21tb24vc2VydmVyKSkpKVxyXG4gIHNvY2spKVxyXG4ifSksIGV4cG91bmQuYWxwaGEgKHs6c3ltIGVycm9yLW1lc3NhZ2UsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgbmFtZWQgYGtgLCByZXR1cm4gaXRzIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuIiwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVycm9yLW1lc3NhZ2VcclxuIFwiR2l2ZW4gYSBzcGVjIG5hbWVkIGBrYCwgcmV0dXJuIGl0cyBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLlwiXHJcbiBba11cclxuIChnZXQgQHJlZ2lzdHJ5LXJlZiBrKSlcclxuIn0gezpzeW0gZXhwbGFpbi1yZXN1bHQsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHJlc3VsdCBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHByaW50cyBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFtjaGVjay1yZXN1bHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXJlc3VsdFxyXG4gXCJHaXZlbiBhIHJlc3VsdCBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHByaW50cyBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdC5cIlxyXG4gW2NoZWNrLXJlc3VsdF1cclxuICh3aGVuXHJcbiAgKD0gcy8qZXhwbGFpbi1vdXQqIHMvZXhwbGFpbi1wcmludGVyKVxyXG4gICh0aHJvd1xyXG4gICAoZXgtaW5mb1xyXG4gICAgXCJDYW5ub3QgcHJpbnQgY2hlY2sgcmVzdWx0cyB3aXRoIGRlZmF1bHQgcHJpbnRlci4gVXNlICdzZXQhJyBvciAnYmluZGluZycgdG8gdXNlIEV4cG91bmQgcHJpbnRlci5cIlxyXG4gICAge30pKSlcclxuIChzLypleHBsYWluLW91dCogY2hlY2stcmVzdWx0KSlcclxuIn0gezpzeW0gY3VzdG9tLXByaW50ZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcHJpbnRlci5cblxuICBPcHRpb25zOlxuICAgOnNob3ctdmFsaWQtdmFsdWVzPyAtIGlmIGZhbHNlLCByZXBsYWNlcyB2YWxpZCB2YWx1ZXMgd2l0aCBcIi4uLlwiXG4gICA6dmFsdWUtc3RyLWZuICAgICAgIC0gZnVuY3Rpb24gdG8gcHJpbnQgYmFkIHZhbHVlc1xuICAgOnByaW50LXNwZWNzPyAgICAgICAtIGlmIHRydWUsIGRpc3BsYXkgXCJSZWxldmFudCBzcGVjc1wiIHNlY3Rpb24uIE90aGVyd2lzZSwgb21pdCB0aGF0IHNlY3Rpb24uXG4gICA6dGhlbWUgICAgICAgICAgICAgICAtIGVuYWJsZXMgY29sb3IgdGhlbWUuIFBvc3NpYmxlIHZhbHVlczogOmZpZ3doZWVsLXRoZW1lLCA6bm9uZSIsIDphcmdsaXN0cyAoW29wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjdXN0b20tcHJpbnRlclxyXG4gXCJSZXR1cm5zIGEgcHJpbnRlci5cXG5cXG4gIE9wdGlvbnM6XFxuICAgOnNob3ctdmFsaWQtdmFsdWVzPyAtIGlmIGZhbHNlLCByZXBsYWNlcyB2YWxpZCB2YWx1ZXMgd2l0aCBcXFwiLi4uXFxcIlxcbiAgIDp2YWx1ZS1zdHItZm4gICAgICAgLSBmdW5jdGlvbiB0byBwcmludCBiYWQgdmFsdWVzXFxuICAgOnByaW50LXNwZWNzPyAgICAgICAtIGlmIHRydWUsIGRpc3BsYXkgXFxcIlJlbGV2YW50IHNwZWNzXFxcIiBzZWN0aW9uLiBPdGhlcndpc2UsIG9taXQgdGhhdCBzZWN0aW9uLlxcbiAgIDp0aGVtZSAgICAgICAgICAgICAgIC0gZW5hYmxlcyBjb2xvciB0aGVtZS4gUG9zc2libGUgdmFsdWVzOiA6Zmlnd2hlZWwtdGhlbWUsIDpub25lXCJcclxuIFtvcHRzXVxyXG4gKGZuIFtleHBsYWluLWRhdGFdIChwcmludCAocHJpbnRlci1zdHIgb3B0cyBleHBsYWluLWRhdGEpKSkpXHJcbiJ9IHs6c3ltIHByaW50ZXIsIDptZXRhIHs6ZG9jICJQcmludHMgYGV4cGxhaW4tZGF0YWAgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQuIiwgOmFyZ2xpc3RzIChbZXhwbGFpbi1kYXRhXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnRlclxyXG4gXCJQcmludHMgYGV4cGxhaW4tZGF0YWAgaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQuXCJcclxuIFtleHBsYWluLWRhdGFdXHJcbiAoKGN1c3RvbS1wcmludGVyIHt9KSBleHBsYWluLWRhdGEpKVxyXG4ifSB7OnN5bSBleHBsYWluLXJlc3VsdC1zdHIsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHJlc3VsdCBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHJldHVybnMgYSBzdHJpbmcgc3VtbWFyaXppbmcgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFtjaGVjay1yZXN1bHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXJlc3VsdC1zdHJcclxuIFwiR2l2ZW4gYSByZXN1bHQgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCByZXR1cm5zIGEgc3RyaW5nIHN1bW1hcml6aW5nIHRoZSByZXN1bHQuXCJcclxuIFtjaGVjay1yZXN1bHRdXHJcbiAod2l0aC1vdXQtc3RyIChleHBsYWluLXJlc3VsdCBjaGVjay1yZXN1bHQpKSlcclxuIn0gezpzeW0gZXhwbGFpbi1yZXN1bHRzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzZXF1ZW5jZSBvZiByZXN1bHRzIGZyb20gYGNsb2p1cmUuc3BlYy50ZXN0LmFscGhhL2NoZWNrYCwgcHJpbnRzIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cy4iLCA6YXJnbGlzdHMgKFtjaGVjay1yZXN1bHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1yZXN1bHRzXHJcbiBcIkdpdmVuIGEgc2VxdWVuY2Ugb2YgcmVzdWx0cyBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHByaW50cyBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMuXCJcclxuIFtjaGVjay1yZXN1bHRzXVxyXG4gKGRvc2VxXHJcbiAgW2NoZWNrLXJlc3VsdCAoYnV0bGFzdCBjaGVjay1yZXN1bHRzKV1cclxuICAoZXhwbGFpbi1yZXN1bHQgY2hlY2stcmVzdWx0KVxyXG4gIChwcmludCBcIlxcblxcblwiKSlcclxuIChleHBsYWluLXJlc3VsdCAobGFzdCBjaGVjay1yZXN1bHRzKSkpXHJcbiJ9IHs6c3ltIGV4cG91bmQtc3RyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBgc3BlY2AgYW5kIGEgYGZvcm1gLCBlaXRoZXIgcmV0dXJucyBzdWNjZXNzIG1lc3NhZ2Ugb3IgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLiIsIDphcmdsaXN0cyAoW3NwZWMgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cG91bmQtc3RyXHJcbiBcIkdpdmVuIGEgYHNwZWNgIGFuZCBhIGBmb3JtYCwgZWl0aGVyIHJldHVybnMgc3VjY2VzcyBtZXNzYWdlIG9yIGEgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZS5cIlxyXG4gW3NwZWMgZm9ybV1cclxuIChsZXRcclxuICBbZXhwbGFpbi1kYXRhIChzL2V4cGxhaW4tZGF0YSBzcGVjIGZvcm0pXVxyXG4gIChwcmludGVyLXN0clxyXG4gICB7fVxyXG4gICAoaWZcclxuICAgIGV4cGxhaW4tZGF0YVxyXG4gICAgKGFzc29jIGV4cGxhaW4tZGF0YSA6Y2xvanVyZS5zcGVjLmFscGhhL3ZhbHVlIGZvcm0pXHJcbiAgICBuaWwpKSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tcmVzdWx0cy1zdHIsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNlcXVlbmNlIG9mIHJlc3VsdHMgZnJvbSBgY2xvanVyZS5zcGVjLnRlc3QuYWxwaGEvY2hlY2tgLCByZXR1cm5zIGEgc3RyaW5nIHN1bW1hcml6aW5nIHRoZSByZXN1bHRzLiIsIDphcmdsaXN0cyAoW2NoZWNrLXJlc3VsdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLXJlc3VsdHMtc3RyXHJcbiBcIkdpdmVuIGEgc2VxdWVuY2Ugb2YgcmVzdWx0cyBmcm9tIGBjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jaGVja2AsIHJldHVybnMgYSBzdHJpbmcgc3VtbWFyaXppbmcgdGhlIHJlc3VsdHMuXCJcclxuIFtjaGVjay1yZXN1bHRzXVxyXG4gKHdpdGgtb3V0LXN0ciAoZXhwbGFpbi1yZXN1bHRzIGNoZWNrLXJlc3VsdHMpKSlcclxuIn0gezpzeW0gZXhwb3VuZCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgYHNwZWNgIGFuZCBhIGBmb3JtYCwgZWl0aGVyIHByaW50cyBhIHN1Y2Nlc3MgbWVzc2FnZSBvciBhIGh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UuIiwgOmFyZ2xpc3RzIChbc3BlYyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwb3VuZFxyXG4gXCJHaXZlbiBhIGBzcGVjYCBhbmQgYSBgZm9ybWAsIGVpdGhlciBwcmludHMgYSBzdWNjZXNzIG1lc3NhZ2Ugb3IgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlLlwiXHJcbiBbc3BlYyBmb3JtXVxyXG4gKHByaW50IChleHBvdW5kLXN0ciBzcGVjIGZvcm0pKSlcclxuIn0gezpzeW0gZGVmbXNnLCA6bWV0YSB7OmRvYyAiQXNzb2NpYXRlcyB0aGUgc3BlYyBuYW1lZCBga2Agd2l0aCBgZXJyb3ItbWVzc2FnZWAuIiwgOmFyZ2xpc3RzIChbayBlcnJvci1tZXNzYWdlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVmbXNnXHJcbiBcIkFzc29jaWF0ZXMgdGhlIHNwZWMgbmFtZWQgYGtgIHdpdGggYGVycm9yLW1lc3NhZ2VgLlwiXHJcbiBbayBlcnJvci1tZXNzYWdlXVxyXG4gKHN3YXAhIHJlZ2lzdHJ5LXJlZiBhc3NvYyBrIGVycm9yLW1lc3NhZ2UpXHJcbiBuaWwpXHJcbiJ9KSwgY2xqcy50b29scy5yZWFkZXIuaW1wbC5lcnJvcnMgKHs6c3ltIHRocm93LWJhZC1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtZGlzcGF0Y2hcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk5vIGRpc3BhdGNoIG1hY3JvIGZvciBcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1lc2NhcGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWVzY2FwZVxyXG4gW3JkciBjaF1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCB1bmljb2RlIGVzY2FwZTogXFxcXHVcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWR1cC1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBraW5kIGtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZHVwLWtleXNcclxuIFtyZHIga2luZCBrc11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICAoZHVwbGljYXRlLWtleXMtZXJyb3JcclxuICAgKHN0ciAocy9jYXBpdGFsaXplIChuYW1lIGtpbmQpKSBcIiBsaXRlcmFsIGNvbnRhaW5zIGR1cGxpY2F0ZSBrZXlcIilcclxuICAga3MpKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBucy1uYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW5zXHJcbiBbcmRyIG5zLW5hbWVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIHZhbHVlIHVzZWQgYXMgbmFtZXNwYWNlIGluIG5hbWVzcGFjZWQgbWFwOiBcIlxyXG4gIG5zLW5hbWVcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LXVua25vd24tcmVhZGVyLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdGFnXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5rbm93bi1yZWFkZXItdGFnXHJcbiBbcmRyIHRhZ11cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiTm8gcmVhZGVyIGZ1bmN0aW9uIGZvciB0YWcgXCIgKGkvaW5zcGVjdCB0YWcpIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWF0LWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1hdC1kaXNwYXRjaFxyXG4gW3Jkcl1cclxuIChlb2YtZXJyb3IgcmRyIFwiVW5leHBlY3RlZCBFT0Ygd2hpbGUgcmVhZGluZyBkaXNwYXRjaCBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtbWV0YWRhdGEtdGFyZ2V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0YXJnZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtbWV0YWRhdGEtdGFyZ2V0XHJcbiBbcmRyIHRhcmdldF1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIk1ldGFkYXRhIGNhbiBub3QgYmUgYXBwbGllZCB0byBcIlxyXG4gIChpL2luc3BlY3QgdGFyZ2V0KVxyXG4gIFwiLiBcIlxyXG4gIFwiTWV0YWRhdGEgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBJTWV0YXMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLW51bWJlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLW51bWJlclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBudW1iZXI6IFwiIHRva2VuIFwiLlwiKSlcclxuIn0gezpzeW0gcmVhZGVyLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1lcnJvclxyXG4gXCJUaHJvd3MgYW4gRXhjZXB0aW9uSW5mbyB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLlxcbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkXCJcclxuIFtyZHIgJiBtc2dzXVxyXG4gKHRocm93LWV4IHJkciA6cmVhZGVyLWVycm9yIChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGl0ZXJhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtbGl0ZXJhbFxyXG4gW3JkciB0b2tlbl1cclxuICh0aHJvd1xyXG4gIChpbGxlZ2FsLWFyZy1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgbGl0ZXJhbDogXFxcXFwiIHRva2VuIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LW5zLW1hcC1uby1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIG5zLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1ucy1tYXAtbm8tbWFwXHJcbiBbcmRyIG5zLW5hbWVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJOYW1lc3BhY2VkIG1hcCB3aXRoIG5hbWVzcGFjZSBcIlxyXG4gIG5zLW5hbWVcclxuICBcIiBkb2VzIG5vdCBzcGVjaWZ5IGEgbWFwLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5zdXBwb3J0ZWQtY2hhcmFjdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXVuc3VwcG9ydGVkLWNoYXJhY3RlclxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiVW5zdXBwb3J0ZWQgY2hhcmFjdGVyOiBcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWZlYXR1cmUtbm90LWtleXdvcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGZlYXR1cmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1mZWF0dXJlLW5vdC1rZXl3b3JkXHJcbiBbcmRyIGZlYXR1cmVdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJGZWF0dXJlIGNhbm5vdCBiZSBcIlxyXG4gIChpL2luc3BlY3QgZmVhdHVyZSlcclxuICBcIiBGZWF0dXJlcyBtdXN0IGJlIGtleXdvcmRzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctZW9mLWRlbGltaXRlZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tyZHIga2luZCBjb2x1bW4gbGluZV0gW3JkciBraW5kIGxpbmUgY29sdW1uIG5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtZGVsaW1pdGVkXHJcbiAoW3JkciBraW5kIGNvbHVtbiBsaW5lXVxyXG4gICh0aHJvdy1lb2YtZGVsaW1pdGVkIHJkciBraW5kIGxpbmUgY29sdW1uIG5pbCkpXHJcbiAoW3JkciBraW5kIGxpbmUgY29sdW1uIG5dXHJcbiAgKGVvZi1lcnJvclxyXG4gICByZHJcclxuICAgXCJVbmV4cGVjdGVkIEVPRiB3aGlsZSByZWFkaW5nIFwiXHJcbiAgIChpZiBuIChzdHIgXCJpdGVtIFwiIG4gXCIgb2YgXCIpKVxyXG4gICAobmFtZSBraW5kKVxyXG4gICAoaWYgbGluZSAoc3RyIFwiLCBzdGFydGluZyBhdCBsaW5lIFwiIGxpbmUgXCIgYW5kIGNvbHVtbiBcIiBjb2x1bW4pKVxyXG4gICBcIi5cIikpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtaW4tY2hhcmFjdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1pbi1jaGFyYWN0ZXJcclxuIFtyZHJdXHJcbiAoZW9mLWVycm9yIHJkciBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgY2hhcmFjdGVyLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLWNoYXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmQgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtY2hhclxyXG4gW3JkciBraW5kIGNoXVxyXG4gKHJlYWRlci1lcnJvclxyXG4gIHJkclxyXG4gIFwiSW52YWxpZCBjaGFyYWN0ZXI6IFwiXHJcbiAgY2hcclxuICBcIiBmb3VuZCB3aGlsZSByZWFkaW5nIFwiXHJcbiAgKG5hbWUga2luZClcclxuICBcIi5cIikpXHJcbiJ9IHs6c3ltIGVvZi1lcnJvciwgOm1ldGEgezpkb2MgIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZCIsIDphcmdsaXN0cyAoW3JkciAmIG1zZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlb2YtZXJyb3JcclxuIFwiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cXG4gICBJZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIsIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGFuZCBsaW5lIG51bWJlciBpcyBwcm92aWRlZFwiXHJcbiBbcmRyICYgbXNnc11cclxuICh0aHJvdy1leCByZHIgOmVvZiAoYXBwbHkgc3RyIG1zZ3MpKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLW1ldGFkYXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctYmFkLW1ldGFkYXRhXHJcbiBbcmRyIHhdXHJcbiAocmVhZGVyLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJNZXRhZGF0YSBjYW5ub3QgYmUgXCJcclxuICAoaS9pbnNwZWN0IHgpXHJcbiAgXCIuIE1ldGFkYXRhIG11c3QgYmUgYSBTeW1ib2wsIEtleXdvcmQsIFN0cmluZyBvciBNYXAuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtcmVhZGluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCAmIHN0YXJ0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctZW9mLXJlYWRpbmdcclxuIFtyZHIga2luZCAmIHN0YXJ0XVxyXG4gKGxldFxyXG4gIFtpbml0IChjYXNlIGtpbmQgOnJlZ2V4IFwiI1xcXCJcIiA6c3RyaW5nIFxcXCIpXVxyXG4gIChlb2YtZXJyb3JcclxuICAgcmRyXHJcbiAgIFwiVW5leHBlY3RlZCBFT0YgcmVhZGluZyBcIlxyXG4gICAobmFtZSBraW5kKVxyXG4gICBcIiBzdGFydGluZyBcIlxyXG4gICAoYXBwbHkgc3RyIGluaXQgc3RhcnQpXHJcbiAgIFwiLlwiKSkpXHJcbiJ9IHs6c3ltIHRocm93LWVvZi1lcnJvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWVvZi1lcnJvclxyXG4gW3JkciBsaW5lXVxyXG4gKGlmXHJcbiAgbGluZVxyXG4gIChlb2YtZXJyb3IgcmRyIFwiRU9GIHdoaWxlIHJlYWRpbmcsIHN0YXJ0aW5nIGF0IGxpbmUgXCIgbGluZSBcIi5cIilcclxuICAoZW9mLWVycm9yIHJkciBcIkVPRiB3aGlsZSByZWFkaW5nLlwiKSkpXHJcbiJ9IHs6c3ltIGlsbGVnYWwtYXJnLWVycm9yLCA6bWV0YSB7OmRvYyAiVGhyb3dzIGFuIEV4Y2VwdGlvbkluZm8gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS5cbiAgIElmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBjb2x1bW4gYW5kIGxpbmUgbnVtYmVyIGlzIHByb3ZpZGVkIiwgOmFyZ2xpc3RzIChbcmRyICYgbXNnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlsbGVnYWwtYXJnLWVycm9yXHJcbiBcIlRocm93cyBhbiBFeGNlcHRpb25JbmZvIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UuXFxuICAgSWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyLCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGNvbHVtbiBhbmQgbGluZSBudW1iZXIgaXMgcHJvdmlkZWRcIlxyXG4gW3JkciAmIG1zZ3NdXHJcbiAodGhyb3ctZXggcmRyIDppbGxlZ2FsLWFyZ3VtZW50IChhcHBseSBzdHIgbXNncykpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLW9jdGFsLWxlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1pbnZhbGlkLW9jdGFsLWxlblxyXG4gW3JkciB0b2tlbl1cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgb2N0YWwgZXNjYXBlIHNlcXVlbmNlIGluIGEgY2hhcmFjdGVyIGxpdGVyYWw6XCJcclxuICB0b2tlblxyXG4gIFwiLiBPY3RhbCBlc2NhcGUgc2VxdWVuY2VzIG11c3QgYmUgMyBvciBmZXdlciBkaWdpdHMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0XHJcbiBbcmRyIGNoXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yIHJkciBcIkludmFsaWQgZGlnaXQgXCIgY2ggXCIgaW4gdW5pY29kZSBjaGFyYWN0ZXIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLXVuaWNvZGUtZGlnaXQtaW4tdG9rZW4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoIHRva2VuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWRpZ2l0LWluLXRva2VuXHJcbiBbcmRyIGNoIHRva2VuXVxyXG4gKGlsbGVnYWwtYXJnLWVycm9yXHJcbiAgcmRyXHJcbiAgXCJJbnZhbGlkIGRpZ2l0IFwiXHJcbiAgY2hcclxuICBcIiBpbiB1bmljb2RlIGNoYXJhY3RlciBcXFxcXCJcclxuICB0b2tlblxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZC11bmljb2RlLWxlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgYWN0dWFsIGV4cGVjdGVkXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctaW52YWxpZC11bmljb2RlLWxlblxyXG4gW3JkciBhY3R1YWwgZXhwZWN0ZWRdXHJcbiAoaWxsZWdhbC1hcmctZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgdW5pY29kZSBsaXRlcmFsLiBVbmljb2RlIGxpdGVyYWxzIHNob3VsZCBiZSBcIlxyXG4gIGV4cGVjdGVkXHJcbiAgXCJjaGFyYWN0ZXJzIGxvbmcuICBcIlxyXG4gIFwidmFsdWUgc3VwcGxlZCBpcyBcIlxyXG4gIGFjdHVhbFxyXG4gIFwiY2hhcmFjdGVycyBsb25nLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctc2luZ2xlLWNvbG9uLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LXNpbmdsZS1jb2xvblxyXG4gW3Jkcl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiQSBzaW5nbGUgY29sb24gaXMgbm90IGEgdmFsaWQga2V5d29yZC5cIikpXHJcbiJ9IHs6c3ltIHRocm93LW9kZC1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGxpbmUgY29sIGVsZW1lbnRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctb2RkLW1hcFxyXG4gW3JkciBsaW5lIGNvbCBlbGVtZW50c11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIlRoZSBtYXAgbGl0ZXJhbCBzdGFydGluZyB3aXRoIFwiXHJcbiAgKGkvaW5zcGVjdCAoZmlyc3QgZWxlbWVudHMpKVxyXG4gIChpZiBsaW5lIChzdHIgXCIgb24gbGluZSBcIiBsaW5lIFwiIGNvbHVtbiBcIiBjb2wpKVxyXG4gIFwiIGNvbnRhaW5zIFwiXHJcbiAgKGNvdW50IGVsZW1lbnRzKVxyXG4gIFwiIGZvcm0ocykuIE1hcCBsaXRlcmFscyBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgZm9ybXMuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1iYWQtb2N0YWwtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1vY3RhbC1udW1iZXJcclxuIFtyZHJdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIk9jdGFsIGVzY2FwZSBzZXF1ZW5jZSBtdXN0IGJlIGluIHJhbmdlIFswLCAzNzddLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctYmFkLXJlYWRlci10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIHRhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWJhZC1yZWFkZXItdGFnXHJcbiBbcmRyIHRhZ11cclxuIChyZWFkZXItZXJyb3JcclxuICByZHJcclxuICBcIkludmFsaWQgcmVhZGVyIHRhZzogXCJcclxuICAoaS9pbnNwZWN0IHRhZylcclxuICBcIi4gUmVhZGVyIHRhZ3MgbXVzdCBiZSBzeW1ib2xzLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctdW5tYXRjaC1kZWxpbWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGhyb3ctdW5tYXRjaC1kZWxpbWl0ZXJcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVubWF0Y2hlZCBkZWxpbWl0ZXIgXCIgY2ggXCIuXCIpKVxyXG4ifSB7OnN5bSB0aHJvdy1pbnZhbGlkLWNoYXJhY3Rlci1saXRlcmFsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtY2hhcmFjdGVyLWxpdGVyYWxcclxuIFtyZHIgdG9rZW5dXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIkludmFsaWQgY2hhcmFjdGVyIGxpdGVyYWwgXFxcXHVcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWludmFsaWQtdW5pY29kZS1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWQtdW5pY29kZS1jaGFyXHJcbiBbcmRyIHRva2VuXVxyXG4gKHJlYWRlci1lcnJvciByZHIgXCJJbnZhbGlkIHVuaWNvZGUgY2hhcmFjdGVyIFxcXFxcIiB0b2tlbiBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LWJhZC1lc2NhcGUtY2hhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1iYWQtZXNjYXBlLWNoYXJcclxuIFtyZHIgY2hdXHJcbiAocmVhZGVyLWVycm9yIHJkciBcIlVuc3VwcG9ydGVkIGVzY2FwZSBjaGFyYWN0ZXI6IFxcXFxcIiBjaCBcIi5cIikpXHJcbiJ9IHs6c3ltIHRocm93LW5vLWRpc3BhdGNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JkciBjaF0pfSwgOnNvdXJjZSAiKGRlZm4gdGhyb3ctbm8tZGlzcGF0Y2ggW3JkciBjaF0gKHRocm93LWJhZC1kaXNwYXRjaCByZHIgY2gpKVxyXG4ifSB7OnN5bSB0aHJvdy1lb2YtYXQtc3RhcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmRyIGtpbmRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0aHJvdy1lb2YtYXQtc3RhcnRcclxuIFtyZHIga2luZF1cclxuIChlb2YtZXJyb3JcclxuICByZHJcclxuICBcIlVuZXhwZWN0ZWQgRU9GIHdoaWxlIHJlYWRpbmcgc3RhcnQgb2YgXCJcclxuICAobmFtZSBraW5kKVxyXG4gIFwiLlwiKSlcclxuIn0gezpzeW0gdGhyb3ctaW52YWxpZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIga2luZCB0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRocm93LWludmFsaWRcclxuIFtyZHIga2luZCB0b2tlbl1cclxuIChyZWFkZXItZXJyb3IgcmRyIFwiSW52YWxpZCBcIiAobmFtZSBraW5kKSBcIjogXCIgdG9rZW4gXCIuXCIpKVxyXG4ifSksIGNsanMuanMgKHs6c3ltICpsb2FkLWZuKiwgOm1ldGEgezpkb2MgIkVhY2ggcnVudGltZSBlbnZpcm9ubWVudCBwcm92aWRlcyBhIGRpZmZlcmVudCB3YXkgdG8gbG9hZCBhIGxpYnJhcnkuXG4gIFdoYXRldmVyIGZ1bmN0aW9uICpsb2FkLWZuKiBpcyBib3VuZCB0byB3aWxsIGJlIHBhc3NlZCB0d28gYXJndW1lbnRzIC0gYVxuICBtYXAgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb246IFRoZSBtYXAgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcga2V5czpcblxuICA6bmFtZSAgIC0gdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgKGEgc3ltYm9sKVxuICA6bWFjcm9zIC0gbW9kaWZpZXIgc2lnbmFsaW5nIGEgbWFjcm9zIG5hbWVzcGFjZSBsb2FkXG4gIDpwYXRoICAgLSBtdW5nZWQgcmVsYXRpdmUgbGlicmFyeSBwYXRoIChhIHN0cmluZylcblxuICBJdCBpcyB1cCB0byB0aGUgaW1wbGVtZW50b3IgdG8gY29ycmVjdGx5IHJlc29sdmUgdGhlIGNvcnJlc3BvbmRpbmcgLmNsanMsXG4gIC5jbGpjLCBvciAuanMgcmVzb3VyY2UgKHRoZSBvcmRlciBtdXN0IGJlIHJlc3BlY3RlZCkuIElmIDptYWNyb3MgaXMgdHJ1ZVxuICByZXNvbHV0aW9uIHNob3VsZCBvbmx5IGNvbnNpZGVyIC5jbGogb3IgLmNsamMgcmVzb3VyY2VzICh0aGUgb3JkZXIgbXVzdCBiZVxuICByZXNwZWN0ZWQpLiBVcG9uIHJlc29sdXRpb24gdGhlIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIHdpdGggYSBtYXBcbiAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGtleXM6XG5cbiAgOmxhbmcgICAgICAgLSB0aGUgbGFuZ3VhZ2UsIDpjbGogb3IgOmpzXG4gIDpzb3VyY2UgICAgIC0gdGhlIHNvdXJjZSBvZiB0aGUgbGlicmFyeSAoYSBzdHJpbmcpXG4gIDpmaWxlICAgICAgIC0gb3B0aW9uYWwsIHRoZSBmaWxlIHBhdGgsIGl0IHdpbGwgYmUgYWRkZWQgdG8gQVNUJ3MgOmZpbGUga2V5d29yZFxuICAgICAgICAgICAgICAgIChidXQgbm90IGluIDptZXRhKVxuICA6Y2FjaGUgICAgICAtIG9wdGlvbmFsLCBpZiBhIDpjbGogbmFtZXNwYWNlIGhhcyBiZWVuIHByZWNvbXBpbGVkIHRvIDpqcywgY2FuXG4gICAgICAgICAgICAgICAgZ2l2ZSBhbiBhbmFseXNpcyBjYWNoZSBmb3IgZmFzdGVyIGxvYWRzLlxuICA6c291cmNlLW1hcCAtIG9wdGlvbmFsLCBpZiBhIDpjbGogbmFtZXNwYWNlIGhhcyBiZWVuIHByZWNvbXBpbGVkIHRvIDpqcywgY2FuXG4gICAgICAgICAgICAgICAgZ2l2ZSBhIFYzIHNvdXJjZSBtYXAgSlNPTlxuXG4gIElmIHRoZSByZXNvdXJjZSBjb3VsZCBub3QgYmUgcmVzb2x2ZWQsIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCB3aXRoXG4gIG5pbC4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKmxvYWQtZm4qIChmbiBbbSBjYl0gKHRocm93IChqcy9FcnJvci4gXCJObyAqbG9hZC1mbiogc2V0XCIpKSkpXHJcbiJ9IHs6c3ltIGV2YWwsIDptZXRhIHs6ZG9jICJFdmFsdWF0ZSBhIHNpbmdsZSBDbG9qdXJlU2NyaXB0IGZvcm0uIFRoZSBwYXJhbWV0ZXJzOlxuXG4gICBzdGF0ZSAoYXRvbSlcbiAgICAgdGhlIGNvbXBpbGVyIHN0YXRlXG5cbiAgIGZvcm0gKHMtZXhwcilcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXG5cbiAgIG9wdHMgKG1hcClcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cblxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cbiAgICAgIDpjaGVja2VkLWFycmF5cyAgIC0gaWYgOndhcm4gb3IgOmVycm9yLCBjaGVja3MgaW5mZXJyZWQgdHlwZXMgYW5kIHZhbHVlcyBwYXNzZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpzdGF0aWMtZm5zICAgICAgIC0gZW1wbG95IHN0YXRpYyBkaXNwYXRjaCB0byBzcGVjaWZpYyBmdW5jdGlvbiBhcml0aWVzIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgIDpmbi1pbnZva2UtZGlyZWN0IC0gaWYgYHRydWVgLCBkb2VzIG5vdCBnZW5lcmF0ZSBgLmNhbGwobnVsbC4uLilgIGNhbGxzIGZvclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICA6dGFyZ2V0ICAgICAgICAgICAtIHVzZSBgOm5vZGVqc2AgaWYgdGFyZ2V0aW5nIE5vZGUuanMuIFRha2VzIG5vIG90aGVyIG9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cbiAgICAgIDp2ZXJib3NlICAgICAgICAgIC0gb3B0aW9uYWwsIGVtaXQgZGV0YWlscyBmcm9tIGNvbXBpbGVyIGFjdGl2aXR5LiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYDpleHByYCwgYDpzdGF0ZW1lbnRgIGFuZCBgOnJldHVybmAuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXG5cbiAgIGNiIChmdW5jdGlvbilcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXG4gICAgIGEga2V5IDp2YWx1ZSB3aXRoIHRoZSByZXN1bHQgb2YgZXZhbHV0aW9uLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsXG4gICAgIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZSBvZlxuICAgICBmYWlsdXJlLiIsIDphcmdsaXN0cyBbW3N0YXRlIGZvcm0gY2JdIFtzdGF0ZSBmb3JtIG9wdHMgY2JdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmFsXHJcbiBcIkV2YWx1YXRlIGEgc2luZ2xlIENsb2p1cmVTY3JpcHQgZm9ybS4gVGhlIHBhcmFtZXRlcnM6XFxuXFxuICAgc3RhdGUgKGF0b20pXFxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcXG5cXG4gICBmb3JtIChzLWV4cHIpXFxuICAgICB0aGUgQ2xvanVyZVNjcmlwdCBzb3VyY2VcXG5cXG4gICBvcHRzIChtYXApXFxuICAgICBjb21waWxhdGlvbiBvcHRpb25zLlxcblxcbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcXG4gICAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgc2V0IHRvIHRydWUpIG9yIHRoZSBkZWYgaW5pdCB2YWx1ZSAoaWYgZmFsc2UpLiBEZWZhdWx0XFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXFxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxcbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxcbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cXG5cXG4gICBjYiAoZnVuY3Rpb24pXFxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cXG4gICAgIGEga2V5IDp2YWx1ZSB3aXRoIHRoZSByZXN1bHQgb2YgZXZhbHV0aW9uLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsXFxuICAgICBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2Ugb2ZcXG4gICAgIGZhaWx1cmUuXCJcclxuIChbc3RhdGUgZm9ybSBjYl0gKGV2YWwgc3RhdGUgZm9ybSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBmb3JtIG9wdHMgY2JdXHJcbiAgKGV2YWwqXHJcbiAgIHs6KmNvbXBpbGVyKiBzdGF0ZSxcclxuICAgIDoqZGF0YS1yZWFkZXJzKiB0YWdzLypjbGpzLWRhdGEtcmVhZGVycyosXHJcbiAgICA6KmFuYWx5emUtZGVwcyogKDphbmFseXplLWRlcHMgb3B0cyB0cnVlKSxcclxuICAgIDoqY2xqcy1kZXAtc2V0KiBhbmEvKmNsanMtZGVwLXNldCosXHJcbiAgICA6KmxvYWQtbWFjcm9zKiAoOmxvYWQtbWFjcm9zIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmxvYWQtZm4qIChvciAoOmxvYWQgb3B0cykgKmxvYWQtZm4qKSxcclxuICAgIDoqZXZhbC1mbiogKG9yICg6ZXZhbCBvcHRzKSAqZXZhbC1mbiopfVxyXG4gICBmb3JtXHJcbiAgIG9wdHNcclxuICAgY2IpKSlcclxuIn0gezpzeW0gY29tcGlsZS1zdHIsIDptZXRhIHs6ZG9jICJDb21waWxlIENsb2p1cmVTY3JpcHQgc291cmNlIGludG8gSmF2YVNjcmlwdC4gVGhlIHBhcmFtZXRlcnM6XG5cbiAgIHN0YXRlIChhdG9tKVxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcblxuICAgc291cmNlIChzdHJpbmcpXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxuXG4gICBuYW1lIChzeW1ib2wgb3Igc3RyaW5nKVxuICAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAtIHVzZWQgYXMga2V5IGluIDpzb3VyY2UtbWFwc1xuXG4gICBvcHRzIChtYXApXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXG5cbiAgICAgIDpldmFsICAgICAgICAgICAgIC0gZXZhbCBmdW5jdGlvbiB0byBpbnZva2UsIHNlZSAqZXZhbC1mbipcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXG4gICAgICA6ZGVmLWVtaXRzLXZhciAgICAtIHNldHMgd2hldGhlciBkZWYgKGFuZCBkZXJpdmVkKSBmb3JtcyByZXR1cm4gZWl0aGVyIGEgVmFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxuXG4gICBjYiAoZnVuY3Rpb24pXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxuICAgICBhIGtleSA6dmFsdWUgd2l0aCB0aGUgY29tcGlsYXRpb24gcmVzdWx0IChzdHJpbmcpLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlIG1hcFxuICAgICB3aWxsIGNvbnRhaW4gYSBrZXkgOmVycm9yIHdpdGggYW4gZXgtaW5mbyBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBjYXVzZVxuICAgICBvZiBmYWlsdXJlLiIsIDphcmdsaXN0cyBbW3N0YXRlIHNvdXJjZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBpbGUtc3RyXHJcbiBcIkNvbXBpbGUgQ2xvanVyZVNjcmlwdCBzb3VyY2UgaW50byBKYXZhU2NyaXB0LiBUaGUgcGFyYW1ldGVyczpcXG5cXG4gICBzdGF0ZSAoYXRvbSlcXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxcblxcbiAgIHNvdXJjZSAoc3RyaW5nKVxcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXFxuXFxuICAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcXG4gICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlIC0gdXNlZCBhcyBrZXkgaW4gOnNvdXJjZS1tYXBzXFxuXFxuICAgb3B0cyAobWFwKVxcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cXG5cXG4gICAgICA6ZXZhbCAgICAgICAgICAgICAtIGV2YWwgZnVuY3Rpb24gdG8gaW52b2tlLCBzZWUgKmV2YWwtZm4qXFxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcXG4gICAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXFxuICAgICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXFxuICAgICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXFxuICAgICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxcbiAgICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXFxuICAgICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6ZXhwcmAuXFxuXFxuICAgY2IgKGZ1bmN0aW9uKVxcbiAgICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNzZnVsIHRoZSBtYXAgd2lsbCBjb250YWluXFxuICAgICBhIGtleSA6dmFsdWUgd2l0aCB0aGUgY29tcGlsYXRpb24gcmVzdWx0IChzdHJpbmcpLiBJZiB1bnN1Y2Nlc3NmdWwgdGhlIG1hcFxcbiAgICAgd2lsbCBjb250YWluIGEga2V5IDplcnJvciB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgY2F1c2VcXG4gICAgIG9mIGZhaWx1cmUuXCJcclxuIChbc3RhdGUgc291cmNlIGNiXSAoY29tcGlsZS1zdHIgc3RhdGUgc291cmNlIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSAoY29tcGlsZS1zdHIgc3RhdGUgc291cmNlIG5hbWUgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1cclxuICB7OnByZVxyXG4gICBbKGF0b20/IHN0YXRlKVxyXG4gICAgKHN0cmluZz8gc291cmNlKVxyXG4gICAgKHZhbGlkLW5hbWU/IG5hbWUpXHJcbiAgICAodmFsaWQtb3B0cz8gb3B0cylcclxuICAgIChmbj8gY2IpXX1cclxuICAoY29tcGlsZS1zdHIqXHJcbiAgIHs6KmNvbXBpbGVyKiBzdGF0ZSxcclxuICAgIDoqZGF0YS1yZWFkZXJzKiB0YWdzLypjbGpzLWRhdGEtcmVhZGVycyosXHJcbiAgICA6KmNsanMtZGVwLXNldCogYW5hLypjbGpzLWRlcC1zZXQqLFxyXG4gICAgOiphbmFseXplLWRlcHMqICg6YW5hbHl6ZS1kZXBzIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmxvYWQtbWFjcm9zKiAoOmxvYWQtbWFjcm9zIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmxvYWQtZm4qIChvciAoOmxvYWQgb3B0cykgKmxvYWQtZm4qKSxcclxuICAgIDoqZXZhbC1mbiogKG9yICg6ZXZhbCBvcHRzKSAqZXZhbC1mbiopLFxyXG4gICAgOipzbS1kYXRhKiAod2hlbiAoOnNvdXJjZS1tYXAgb3B0cykgKHNtLWRhdGEpKX1cclxuICAgc291cmNlXHJcbiAgIG5hbWVcclxuICAgb3B0c1xyXG4gICBjYikpKVxyXG4ifSB7OnN5bSBucy0+cmVscGF0aCwgOm1ldGEgezpkb2MgIkdpdmVuIGEgbmFtZXNwYWNlIGFzIGEgc3ltYm9sIHJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBzYW5zIGV4dGVuc2lvbiIsIDphcmdsaXN0cyAoW25zLXN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5zLT5yZWxwYXRoXHJcbiBcIkdpdmVuIGEgbmFtZXNwYWNlIGFzIGEgc3ltYm9sIHJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCBzYW5zIGV4dGVuc2lvblwiXHJcbiBbbnMtc3ltXVxyXG4gKHN0cmluZy9yZXBsYWNlIChhbmEvbXVuZ2UtcGF0aCBucy1zeW0pIFxcLiBcXC8pKVxyXG4ifSB7OnN5bSBlbXB0eS1zdGF0ZSwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhbiBlbXB0eSBjb21waWxlciBzdGF0ZS4gUmVxdWlyZWQgdG8gaW52b2tlIGFuYWx5emUsIGNvbXBpbGUsXG4gICBldmFsIGFuZCBldmFsLXN0ci4iLCA6YXJnbGlzdHMgW1tdIFtpbml0XV19LCA6c291cmNlICIoZGVmblxyXG4gZW1wdHktc3RhdGVcclxuIFwiQ29uc3RydWN0IGFuIGVtcHR5IGNvbXBpbGVyIHN0YXRlLiBSZXF1aXJlZCB0byBpbnZva2UgYW5hbHl6ZSwgY29tcGlsZSxcXG4gICBldmFsIGFuZCBldmFsLXN0ci5cIlxyXG4gKFtdXHJcbiAgKGRvdG9cclxuICAgKGVudi9kZWZhdWx0LWNvbXBpbGVyLWVudilcclxuICAgKHN3YXAhXHJcbiAgICAoZm5cclxuICAgICBbc3RhdGVdXHJcbiAgICAgKC0+XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgIChhc3NvYy1pblxyXG4gICAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgJ2NsanMuY29yZV1cclxuICAgICAgIChkdW1wLWNvcmUpKSkpKSkpXHJcbiAoW2luaXRdIChkb3RvIChlbXB0eS1zdGF0ZSkgKHN3YXAhIGluaXQpKSkpXHJcbiJ9IHs6c3ltICpsb2FkZWQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqbG9hZGVkKiAoYXRvbSAje30pKVxyXG4ifSB7OnN5bSByZXF1aXJlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW25hbWUgY2JdIFtuYW1lIG9wdHMgY2JdIFtib3VuZC12YXJzIG5hbWUgb3B0cyBjYl0gW2JvdW5kLXZhcnMgbmFtZSByZWxvYWQgb3B0cyBjYl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcXVpcmVcclxuIChbbmFtZSBjYl0gKHJlcXVpcmUgbmFtZSBuaWwgY2IpKVxyXG4gKFtuYW1lIG9wdHMgY2JdIChyZXF1aXJlIG5pbCBuYW1lIG9wdHMgY2IpKVxyXG4gKFtib3VuZC12YXJzIG5hbWUgb3B0cyBjYl0gKHJlcXVpcmUgYm91bmQtdmFycyBuYW1lIG5pbCBvcHRzIGNiKSlcclxuIChbYm91bmQtdmFycyBuYW1lIHJlbG9hZCBvcHRzIGNiXVxyXG4gIChsZXRcclxuICAgW2JvdW5kLXZhcnNcclxuICAgIChtZXJnZVxyXG4gICAgIHs6KmNvbXBpbGVyKiAoZW52L2RlZmF1bHQtY29tcGlsZXItZW52KSxcclxuICAgICAgOipkYXRhLXJlYWRlcnMqIHRhZ3MvKmNsanMtZGF0YS1yZWFkZXJzKixcclxuICAgICAgOipsb2FkLW1hY3JvcyogKDpsb2FkLW1hY3JvcyBvcHRzIHRydWUpLFxyXG4gICAgICA6KmFuYWx5emUtZGVwcyogKDphbmFseXplLWRlcHMgb3B0cyB0cnVlKSxcclxuICAgICAgOipsb2FkLWZuKiAob3IgKDpsb2FkIG9wdHMpICpsb2FkLWZuKiksXHJcbiAgICAgIDoqZXZhbC1mbiogKG9yICg6ZXZhbCBvcHRzKSAqZXZhbC1mbiopfVxyXG4gICAgIGJvdW5kLXZhcnMpXHJcbiAgICBhbmFtZVxyXG4gICAgKGNvbmQtPiBuYW1lICg6bWFjcm9zLW5zIG9wdHMpIGFuYS9tYWNyby1ucy1uYW1lKV1cclxuICAgKHdoZW4gKD0gOnJlbG9hZCByZWxvYWQpIChzd2FwISAqbG9hZGVkKiBkaXNqIGFuYW1lKSlcclxuICAgKHdoZW4gKD0gOnJlbG9hZC1hbGwgcmVsb2FkKSAocmVzZXQhICpsb2FkZWQqICN7fSkpXHJcbiAgICh3aGVuXHJcbiAgICAoOnZlcmJvc2Ugb3B0cylcclxuICAgIChkZWJ1Zy1wcm5cclxuICAgICAoc3RyXHJcbiAgICAgIFwiTG9hZGluZyBcIlxyXG4gICAgICBuYW1lXHJcbiAgICAgICh3aGVuICg6bWFjcm9zLW5zIG9wdHMpIFwiIG1hY3Jvc1wiKVxyXG4gICAgICBcIiBuYW1lc3BhY2VcIikpKVxyXG4gICAoaWYtbm90XHJcbiAgICAoY29udGFpbnM/IEAqbG9hZGVkKiBhbmFtZSlcclxuICAgIChsZXRcclxuICAgICBbZW52ICg6KmVudiogYm91bmQtdmFycyldXHJcbiAgICAgKHRyeVxyXG4gICAgICAoKDoqbG9hZC1mbiogYm91bmQtdmFycylcclxuICAgICAgIHs6bmFtZSBuYW1lLFxyXG4gICAgICAgIDptYWNyb3MgKDptYWNyb3MtbnMgb3B0cyksXHJcbiAgICAgICAgOnBhdGggKG5zLT5yZWxwYXRoIG5hbWUpfVxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW3Jlc291cmNlXVxyXG4gICAgICAgIChhc3NlcnRcclxuICAgICAgICAgKG9yIChtYXA/IHJlc291cmNlKSAobmlsPyByZXNvdXJjZSkpXHJcbiAgICAgICAgIFwiKmxvYWQtZm4qIG1heSBvbmx5IHJldHVybiBhIG1hcCBvciBuaWxcIilcclxuICAgICAgICAoaWZcclxuICAgICAgICAgcmVzb3VyY2VcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3s6a2V5cyBbbGFuZyBzb3VyY2UgY2FjaGUgc291cmNlLW1hcCBmaWxlXX0gcmVzb3VyY2VdXHJcbiAgICAgICAgICAoY29uZHBcclxuICAgICAgICAgICBrZXl3b3JkLWlkZW50aWNhbD9cclxuICAgICAgICAgICBsYW5nXHJcbiAgICAgICAgICAgOmNsalxyXG4gICAgICAgICAgIChkb1xyXG4gICAgICAgICAgICAocHJlLWZpbGUtc2lkZS1lZmZlY3RzXHJcbiAgICAgICAgICAgICAoOipjb21waWxlciogYm91bmQtdmFycylcclxuICAgICAgICAgICAgIGFuYW1lXHJcbiAgICAgICAgICAgICBmaWxlXHJcbiAgICAgICAgICAgICBvcHRzKVxyXG4gICAgICAgICAgICAoZXZhbC1zdHIqXHJcbiAgICAgICAgICAgICBib3VuZC12YXJzXHJcbiAgICAgICAgICAgICBzb3VyY2VcclxuICAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgICAgIChhc3NvYyBvcHRzIDpjbGpzLWZpbGUgZmlsZSlcclxuICAgICAgICAgICAgIChmblxyXG4gICAgICAgICAgICAgIFtyZXNdXHJcbiAgICAgICAgICAgICAgKHBvc3QtZmlsZS1zaWRlLWVmZmVjdHMgZmlsZSBvcHRzKVxyXG4gICAgICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAgICAoOmVycm9yIHJlcylcclxuICAgICAgICAgICAgICAgKGNiIHJlcylcclxuICAgICAgICAgICAgICAgKGRvIChzd2FwISAqbG9hZGVkKiBjb25qIGFuYW1lKSAoY2Igezp2YWx1ZSB0cnVlfSkpKSkpKVxyXG4gICAgICAgICAgIDpqc1xyXG4gICAgICAgICAgIChwcm9jZXNzLW1hY3Jvcy1kZXBzXHJcbiAgICAgICAgICAgIGJvdW5kLXZhcnNcclxuICAgICAgICAgICAgY2FjaGVcclxuICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICAoZm5cclxuICAgICAgICAgICAgIFtyZXNdXHJcbiAgICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgICAoOmVycm9yIHJlcylcclxuICAgICAgICAgICAgICAoY2IgcmVzKVxyXG4gICAgICAgICAgICAgIChwcm9jZXNzLWxpYnMtZGVwc1xyXG4gICAgICAgICAgICAgICBib3VuZC12YXJzXHJcbiAgICAgICAgICAgICAgIGNhY2hlXHJcbiAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgKGZuXHJcbiAgICAgICAgICAgICAgICBbcmVzXVxyXG4gICAgICAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICAgICAgKDplcnJvciByZXMpXHJcbiAgICAgICAgICAgICAgICAgKGNiIHJlcylcclxuICAgICAgICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgICAgICAgIFtyZXNcclxuICAgICAgICAgICAgICAgICAgICh0cnlcclxuICAgICAgICAgICAgICAgICAgICAoKDoqZXZhbC1mbiogYm91bmQtdmFycykgcmVzb3VyY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAgICAgICAgICAgY2FjaGVcclxuICAgICAgICAgICAgICAgICAgICAgKGxvYWQtYW5hbHlzaXMtY2FjaGUhXHJcbiAgICAgICAgICAgICAgICAgICAgICAoOipjb21waWxlciogYm91bmQtdmFycylcclxuICAgICAgICAgICAgICAgICAgICAgIGFuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSlcclxuICAgICAgICAgICAgICAgICAgICAgKGFuYS9yZWdpc3Rlci1zcGVjcyBjYWNoZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgKHdoZW5cclxuICAgICAgICAgICAgICAgICAgICAgc291cmNlLW1hcFxyXG4gICAgICAgICAgICAgICAgICAgICAobG9hZC1zb3VyY2UtbWFwIVxyXG4gICAgICAgICAgICAgICAgICAgICAgKDoqY29tcGlsZXIqIGJvdW5kLXZhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICBhbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlLW1hcCkpXHJcbiAgICAgICAgICAgICAgICAgICAgKGNhdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgIDpkZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgIGNhdXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICh3cmFwLWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYW5hL2Vycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZW52XHJcbiAgICAgICAgICAgICAgICAgICAgICAgKHN0ciBcIkNvdWxkIG5vdCByZXF1aXJlIFwiIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2F1c2UpKSkpXVxyXG4gICAgICAgICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgICAgICAgICg6ZXJyb3IgcmVzKVxyXG4gICAgICAgICAgICAgICAgICAgKGNiIHJlcylcclxuICAgICAgICAgICAgICAgICAgIChkb1xyXG4gICAgICAgICAgICAgICAgICAgIChzd2FwISAqbG9hZGVkKiBjb25qIGFuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIChjYiB7OnZhbHVlIHRydWV9KSkpKSkpKSkpKVxyXG4gICAgICAgICAgIChjYlxyXG4gICAgICAgICAgICAod3JhcC1lcnJvclxyXG4gICAgICAgICAgICAgKGFuYS9lcnJvclxyXG4gICAgICAgICAgICAgIGVudlxyXG4gICAgICAgICAgICAgIChzdHJcclxuICAgICAgICAgICAgICAgXCJJbnZhbGlkIDpsYW5nIHNwZWNpZmllZCBcIlxyXG4gICAgICAgICAgICAgICBsYW5nXHJcbiAgICAgICAgICAgICAgIFwiLCBvbmx5IDpjbGogb3IgOmpzIGFsbG93ZWRcIikpKSkpKVxyXG4gICAgICAgICAoY2JcclxuICAgICAgICAgICh3cmFwLWVycm9yXHJcbiAgICAgICAgICAgKGFuYS9lcnJvclxyXG4gICAgICAgICAgICBlbnZcclxuICAgICAgICAgICAgKGFuYS9lcnJvci1tZXNzYWdlXHJcbiAgICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgICAoOm1hY3Jvcy1ucyBvcHRzKVxyXG4gICAgICAgICAgICAgIDp1bmRlY2xhcmVkLW1hY3Jvcy1uc1xyXG4gICAgICAgICAgICAgIDp1bmRlY2xhcmVkLW5zKVxyXG4gICAgICAgICAgICAgezpucy1zeW0gbmFtZSwgOmpzLXByb3ZpZGUgKGNsanMuY29yZS9uYW1lIG5hbWUpfSkpKSkpKSlcclxuICAgICAgKGNhdGNoXHJcbiAgICAgICA6ZGVmYXVsdFxyXG4gICAgICAgY2F1c2VcclxuICAgICAgIChjYlxyXG4gICAgICAgICh3cmFwLWVycm9yXHJcbiAgICAgICAgIChhbmEvZXJyb3IgZW52IChzdHIgXCJDb3VsZCBub3QgcmVxdWlyZSBcIiBuYW1lKSBjYXVzZSkpKSkpKVxyXG4gICAgKGNiIHs6dmFsdWUgdHJ1ZX0pKSkpKVxyXG4ifSB7OnN5bSBmaWxlLT5ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmaWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmlsZS0+bnNcclxuIFtmaWxlXVxyXG4gKGxldFxyXG4gIFtsaWItbmFtZSAoc3VicyAoc3RyaW5nL3JlcGxhY2UgZmlsZSBcIi9cIiBcIi5cIikgMCAoLSAoY291bnQgZmlsZSkgNSkpXVxyXG4gIChzeW1ib2wgKGRlbXVuZ2UgbGliLW5hbWUpKSkpXHJcbiJ9IHs6c3ltIGV2YWwtc3RyLCA6bWV0YSB7OmRvYyAiRXZhbHV0ZSBDbG9qdXJlU2NyaXB0IHNvdXJjZSBnaXZlbiBhcyBhIHN0cmluZy4gVGhlIHBhcmFtZXRlcnM6XG5cbiAgc3RhdGUgKGF0b20pXG4gICAgdGhlIGNvbXBpbGVyIHN0YXRlXG5cbiAgc291cmNlIChzdHJpbmcpXG4gICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXG5cbiAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcbiAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAtIHVzZWQgYXMga2V5IGluIDpzb3VyY2UtbWFwc1xuXG4gIG9wdHMgKG1hcClcbiAgICBjb21waWxhdGlvbiBvcHRpb25zLlxuXG4gICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxuICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXG4gICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxuICAgIDpjYWNoZS1zb3VyY2UgICAgIC0gb3B0aW9uYWwsIGEgZnVuY3Rpb24gdG8gcnVuIHNpZGUtZWZmZWN0cyB3aXRoIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsYXRpb24gcmVzdWx0IHByaW9yIHRvIGFjdHVhbCBldmFsdXRpb24uIFRoaXMgZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VzIHR3byBhcmd1bWVudHMsIHRoZSBmaXJzdCBpcyB0aGUgZXZhbCBtYXAsIHRoZSBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdW5kZXIgOnNvdXJjZS4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGNhbGxiYWNrIG9mXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmUgYXJndW1lbnQuIElmIGFuIGVycm9yIG9jY3VycyBhbiA6ZXJyb3Iga2V5IHNob3VsZCBiZVxuICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxpZWQuXG4gICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS4gRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgaXMgZmFsc2UuXG4gICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gYWdldC9hc2V0LiBMb2dzIGZvciBpbmNvcnJlY3QgdmFsdWVzIGlmIDp3YXJuLCB0aHJvd3MgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQgSmF2YVNjcmlwdCwgYXMgb3Bwb3NlZCB0byBtYWtpbmcgdXNlIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGZ1bmN0aW9ucywgYnV0IGluc3RlYWQgZGlyZWN0IGludm9rZXMgdmlhXG4gICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQgdGhlIG1vbWVudC5cbiAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXG4gICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZS5cbiAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxuXG4gIGNiIChmdW5jdGlvbilcbiAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxuICAgIGEgOnZhbHVlIGtleSB3aXRoIHRoZSByZXN1bHQgb2YgZXZhbHVhdGlvbiBhbmQgOm5zIHRoZSBjdXJyZW50IG5hbWVzcGFjZS5cbiAgICBJZiB1bnN1Y2Nlc3NmdWwgd2lsbCBjb250YWluIGEgOmVycm9yIGtleSB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZ1xuICAgIHRoZSBjYXVzZSBvZiBmYWlsdXJlLiIsIDphcmdsaXN0cyBbW3N0YXRlIHNvdXJjZSBjYl0gW3N0YXRlIHNvdXJjZSBuYW1lIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgb3B0cyBjYl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV2YWwtc3RyXHJcbiBcIkV2YWx1dGUgQ2xvanVyZVNjcmlwdCBzb3VyY2UgZ2l2ZW4gYXMgYSBzdHJpbmcuIFRoZSBwYXJhbWV0ZXJzOlxcblxcbiAgc3RhdGUgKGF0b20pXFxuICAgIHRoZSBjb21waWxlciBzdGF0ZVxcblxcbiAgc291cmNlIChzdHJpbmcpXFxuICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxcblxcbiAgbmFtZSAoc3ltYm9sIG9yIHN0cmluZylcXG4gICAgb3B0aW9uYWwsIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLSB1c2VkIGFzIGtleSBpbiA6c291cmNlLW1hcHNcXG5cXG4gIG9wdHMgKG1hcClcXG4gICAgY29tcGlsYXRpb24gb3B0aW9ucy5cXG5cXG4gICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxcbiAgICA6bG9hZCAgICAgICAgICAgICAtIGxpYnJhcnkgcmVzb2x1dGlvbiBmdW5jdGlvbiwgc2VlICpsb2FkLWZuKlxcbiAgICA6c291cmNlLW1hcCAgICAgICAtIHNldCB0byB0cnVlIHRvIGdlbmVyYXRlIGlubGluZSBzb3VyY2UgbWFwIGluZm9ybWF0aW9uXFxuICAgIDpjYWNoZS1zb3VyY2UgICAgIC0gb3B0aW9uYWwsIGEgZnVuY3Rpb24gdG8gcnVuIHNpZGUtZWZmZWN0cyB3aXRoIHRoZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uIHJlc3VsdCBwcmlvciB0byBhY3R1YWwgZXZhbHV0aW9uLiBUaGlzIGZ1bmN0aW9uXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZXMgdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGlzIHRoZSBldmFsIG1hcCwgdGhlIHNvdXJjZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdW5kZXIgOnNvdXJjZS4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGNhbGxiYWNrIG9mXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25lIGFyZ3VtZW50LiBJZiBhbiBlcnJvciBvY2N1cnMgYW4gOmVycm9yIGtleSBzaG91bGQgYmVcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGllZC5cXG4gICAgOmRlZi1lbWl0cy12YXIgICAgLSBzZXRzIHdoZXRoZXIgZGVmIChhbmQgZGVyaXZlZCkgZm9ybXMgcmV0dXJuIGVpdGhlciBhIFZhclxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuIERlZmF1bHRcXG4gICAgICAgICAgICAgICAgICAgICAgICBpcyBmYWxzZS5cXG4gICAgOmNoZWNrZWQtYXJyYXlzICAgLSBpZiA6d2FybiBvciA6ZXJyb3IsIGNoZWNrcyBpbmZlcnJlZCB0eXBlcyBhbmQgdmFsdWVzIHBhc3NlZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXFxuICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgOnN0YXRpYy1mbnMgICAgICAgLSBlbXBsb3kgc3RhdGljIGRpc3BhdGNoIHRvIHNwZWNpZmljIGZ1bmN0aW9uIGFyaXRpZXMgaW5cXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcXG4gICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgOmZuLWludm9rZS1kaXJlY3QgLSBpZiBgdHJ1ZWAsIGRvZXMgbm90IGdlbmVyYXRlIGAuY2FsbChudWxsLi4uKWAgY2FsbHMgZm9yXFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXFxuICAgIDp0YXJnZXQgICAgICAgICAgIC0gdXNlIGA6bm9kZWpzYCBpZiB0YXJnZXRpbmcgTm9kZS5qcy4gVGFrZXMgbm8gb3RoZXIgb3B0aW9uc1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXFxuICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cXG4gICAgOnZlcmJvc2UgICAgICAgICAgLSBvcHRpb25hbCwgZW1pdCBkZXRhaWxzIGZyb20gY29tcGlsZXIgYWN0aXZpdHkuIERlZmF1bHRzIHRvXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXFxuICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xcbiAgICAgICAgICAgICAgICAgICAgIGFyZSBgOmV4cHJgLCBgOnN0YXRlbWVudGAgYW5kIGA6cmV0dXJuYC4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cXG5cXG4gIGNiIChmdW5jdGlvbilcXG4gICAgY2FsbGJhY2ssIHdpbGwgYmUgaW52b2tlZCB3aXRoIGEgbWFwLiBJZiBzdWNjZXNmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cXG4gICAgYSA6dmFsdWUga2V5IHdpdGggdGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uIGFuZCA6bnMgdGhlIGN1cnJlbnQgbmFtZXNwYWNlLlxcbiAgICBJZiB1bnN1Y2Nlc3NmdWwgd2lsbCBjb250YWluIGEgOmVycm9yIGtleSB3aXRoIGFuIGV4LWluZm8gaW5zdGFuY2UgZGVzY3JpYmluZ1xcbiAgICB0aGUgY2F1c2Ugb2YgZmFpbHVyZS5cIlxyXG4gKFtzdGF0ZSBzb3VyY2UgY2JdIChldmFsLXN0ciBzdGF0ZSBzb3VyY2UgbmlsIGNiKSlcclxuIChbc3RhdGUgc291cmNlIG5hbWUgY2JdIChldmFsLXN0ciBzdGF0ZSBzb3VyY2UgbmFtZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXVxyXG4gIHs6cHJlXHJcbiAgIFsoYXRvbT8gc3RhdGUpXHJcbiAgICAoc3RyaW5nPyBzb3VyY2UpXHJcbiAgICAodmFsaWQtbmFtZT8gbmFtZSlcclxuICAgICh2YWxpZC1vcHRzPyBvcHRzKVxyXG4gICAgKGZuPyBjYildfVxyXG4gIChldmFsLXN0cipcclxuICAgezoqY29tcGlsZXIqIHN0YXRlLFxyXG4gICAgOipkYXRhLXJlYWRlcnMqIHRhZ3MvKmNsanMtZGF0YS1yZWFkZXJzKixcclxuICAgIDoqYW5hbHl6ZS1kZXBzKiAoOmFuYWx5emUtZGVwcyBvcHRzIHRydWUpLFxyXG4gICAgOipjbGpzLWRlcC1zZXQqIGFuYS8qY2xqcy1kZXAtc2V0KixcclxuICAgIDoqbG9hZC1tYWNyb3MqICg6bG9hZC1tYWNyb3Mgb3B0cyB0cnVlKSxcclxuICAgIDoqbG9hZC1mbiogKG9yICg6bG9hZCBvcHRzKSAqbG9hZC1mbiopLFxyXG4gICAgOipldmFsLWZuKiAob3IgKDpldmFsIG9wdHMpICpldmFsLWZuKil9XHJcbiAgIHNvdXJjZVxyXG4gICBuYW1lXHJcbiAgIG9wdHNcclxuICAgY2IpKSlcclxuIn0gezpzeW0ganMtZXZhbCwgOm1ldGEgezpkb2MgIkEgZGVmYXVsdCBKYXZhU2NyaXB0IGV2YWx1YXRpb24gZnVuY3Rpb24uIiwgOmFyZ2xpc3RzIChbezprZXlzIFtzb3VyY2VdLCA6YXMgcmVzb3VyY2V9XSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtZXZhbFxyXG4gXCJBIGRlZmF1bHQgSmF2YVNjcmlwdCBldmFsdWF0aW9uIGZ1bmN0aW9uLlwiXHJcbiBbezprZXlzIFtzb3VyY2VdLCA6YXMgcmVzb3VyY2V9XVxyXG4gKGpzL2V2YWwgc291cmNlKSlcclxuIn0gezpzeW0gbG9hZC1zb3VyY2UtbWFwISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBucyBzbS1qc29uXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9hZC1zb3VyY2UtbWFwIVxyXG4gW3N0YXRlIG5zIHNtLWpzb25dXHJcbiAobGV0XHJcbiAgW3NtIChzbS9kZWNvZGUgKC5wYXJzZSBqcy9KU09OIHNtLWpzb24pKV1cclxuICAoc3dhcCEgc3RhdGUgYXNzb2MtaW4gWzpzb3VyY2UtbWFwcyBuc10gc20pKSlcclxuIn0gezpzeW0gbG9hZC1hbmFseXNpcy1jYWNoZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgbnMgY2FjaGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2FkLWFuYWx5c2lzLWNhY2hlIVxyXG4gW3N0YXRlIG5zIGNhY2hlXVxyXG4gKHN3YXAhIHN0YXRlIGFzc29jLWluIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zXSBjYWNoZSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtc3RyLCA6bWV0YSB7OmRvYyAiQW5hbHl6ZSBDbG9qdXJlU2NyaXB0IHNvdXJjZS4gVGhlIGNvbXBpbGVyIHN0YXRlIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGhcbiAgIHRoZSByZXN1bHRzIG9mIGFuYWx5emVzLiBUaGUgcGFyYW1ldGVyczpcblxuICAgc3RhdGUgKGF0b20pXG4gICAgIHRoZSBjb21waWxlciBzdGF0ZVxuXG4gICBzb3VyY2UgKHN0cmluZylcbiAgICAgdGhlIENsb2p1cmVTY3JpcHQgc291cmNlXG5cbiAgIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXG4gICAgIG9wdGlvbmFsLCB0aGUgbmFtZSBvZiB0aGUgc291cmNlXG5cbiAgIG9wdHMgKG1hcClcbiAgICAgY29tcGlsYXRpb24gb3B0aW9ucy5cblxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxuICAgICAgOmxvYWQgICAgICAgICAgICAgLSBsaWJyYXJ5IHJlc29sdXRpb24gZnVuY3Rpb24sIHNlZSAqbG9hZC1mbipcbiAgICAgIDpzb3VyY2UtbWFwICAgICAgIC0gc2V0IHRvIHRydWUgdG8gZ2VuZXJhdGUgaW5saW5lIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIHNldCB0byB0cnVlKSBvciB0aGUgZGVmIGluaXQgdmFsdWUgKGlmIGZhbHNlKS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGFnZXQvYXNldC4gTG9ncyBmb3IgaW5jb3JyZWN0IHZhbHVlcyBpZiA6d2FybiwgdGhyb3dzIGlmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDplcnJvci4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVkIEphdmFTY3JpcHQsIGFzIG9wcG9zZWQgdG8gbWFraW5nIHVzZSBvZiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxgIGNvbnN0cnVjdC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBmdW5jdGlvbnMsIGJ1dCBpbnN0ZWFkIGRpcmVjdCBpbnZva2VzIHZpYVxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZihhMCxhMS4uLilgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBtb21lbnQuXG4gICAgICA6bnMgICAgICAgICAgICAgICAtIG9wdGlvbmFsLCB0aGUgbmFtZXNwYWNlIGluIHdoaWNoIHRvIGV2YWx1YXRlIHRoZSBzb3VyY2UuXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UuXG4gICAgICA6Y29udGV4dCAgICAgICAgICAtIG9wdGlvbmFsLCBzZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgc291cmNlLiBQb3NzaWJsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgOmV4cHJgLlxuXG4gICBjYiAoZnVuY3Rpb24pXG4gICAgIGNhbGxiYWNrLCB3aWxsIGJlIGludm9rZWQgd2l0aCBhIG1hcC4gSWYgc3VjY2Vzc2Z1bCB0aGUgbWFwIHdpbGwgY29udGFpblxuICAgICBhIGtleSA6dmFsdWUsIHRoZSBhY3R1YWwgdmFsdWUgaXMgbm90IG1lYW5pbmdmdWwuIElmIHVuc3VjY2Vzc2Z1bCB0aGVcbiAgICAgbWFwIHdpbGwgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlXG4gICAgIG9mIGZhaWx1cmUuIiwgOmFyZ2xpc3RzIFtbc3RhdGUgc291cmNlIGNiXSBbc3RhdGUgc291cmNlIG5hbWUgY2JdIFtzdGF0ZSBzb3VyY2UgbmFtZSBvcHRzIGNiXV19LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zdHJcclxuIFwiQW5hbHl6ZSBDbG9qdXJlU2NyaXB0IHNvdXJjZS4gVGhlIGNvbXBpbGVyIHN0YXRlIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGhcXG4gICB0aGUgcmVzdWx0cyBvZiBhbmFseXplcy4gVGhlIHBhcmFtZXRlcnM6XFxuXFxuICAgc3RhdGUgKGF0b20pXFxuICAgICB0aGUgY29tcGlsZXIgc3RhdGVcXG5cXG4gICBzb3VyY2UgKHN0cmluZylcXG4gICAgIHRoZSBDbG9qdXJlU2NyaXB0IHNvdXJjZVxcblxcbiAgIG5hbWUgKHN5bWJvbCBvciBzdHJpbmcpXFxuICAgICBvcHRpb25hbCwgdGhlIG5hbWUgb2YgdGhlIHNvdXJjZVxcblxcbiAgIG9wdHMgKG1hcClcXG4gICAgIGNvbXBpbGF0aW9uIG9wdGlvbnMuXFxuXFxuICAgICAgOmV2YWwgICAgICAgICAgICAgLSBldmFsIGZ1bmN0aW9uIHRvIGludm9rZSwgc2VlICpldmFsLWZuKlxcbiAgICAgIDpsb2FkICAgICAgICAgICAgIC0gbGlicmFyeSByZXNvbHV0aW9uIGZ1bmN0aW9uLCBzZWUgKmxvYWQtZm4qXFxuICAgICAgOnNvdXJjZS1tYXAgICAgICAgLSBzZXQgdG8gdHJ1ZSB0byBnZW5lcmF0ZSBpbmxpbmUgc291cmNlIG1hcCBpbmZvcm1hdGlvblxcbiAgICAgIDpkZWYtZW1pdHMtdmFyICAgIC0gc2V0cyB3aGV0aGVyIGRlZiAoYW5kIGRlcml2ZWQpIGZvcm1zIHJldHVybiBlaXRoZXIgYSBWYXJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBzZXQgdG8gdHJ1ZSkgb3IgdGhlIGRlZiBpbml0IHZhbHVlIChpZiBmYWxzZSkuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6Y2hlY2tlZC1hcnJheXMgICAtIGlmIDp3YXJuIG9yIDplcnJvciwgY2hlY2tzIGluZmVycmVkIHR5cGVzIGFuZCB2YWx1ZXMgcGFzc2VkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhZ2V0L2FzZXQuIExvZ3MgZm9yIGluY29ycmVjdCB2YWx1ZXMgaWYgOndhcm4sIHRocm93cyBpZlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmVycm9yLiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6c3RhdGljLWZucyAgICAgICAtIGVtcGxveSBzdGF0aWMgZGlzcGF0Y2ggdG8gc3BlY2lmaWMgZnVuY3Rpb24gYXJpdGllcyBpblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCBKYXZhU2NyaXB0LCBhcyBvcHBvc2VkIHRvIG1ha2luZyB1c2Ugb2YgdGhlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FsbGAgY29uc3RydWN0LiBEZWZhdWx0cyB0byBmYWxzZS5cXG4gICAgICA6Zm4taW52b2tlLWRpcmVjdCAtIGlmIGB0cnVlYCwgZG9lcyBub3QgZ2VuZXJhdGUgYC5jYWxsKG51bGwuLi4pYCBjYWxscyBmb3JcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gZnVuY3Rpb25zLCBidXQgaW5zdGVhZCBkaXJlY3QgaW52b2tlcyB2aWFcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBmKGEwLGExLi4uKWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXFxuICAgICAgOnRhcmdldCAgICAgICAgICAgLSB1c2UgYDpub2RlanNgIGlmIHRhcmdldGluZyBOb2RlLmpzLiBUYWtlcyBubyBvdGhlciBvcHRpb25zXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdCB0aGUgbW9tZW50LlxcbiAgICAgIDpucyAgICAgICAgICAgICAgIC0gb3B0aW9uYWwsIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggdG8gZXZhbHVhdGUgdGhlIHNvdXJjZS5cXG4gICAgICA6dmVyYm9zZSAgICAgICAgICAtIG9wdGlvbmFsLCBlbWl0IGRldGFpbHMgZnJvbSBjb21waWxlciBhY3Rpdml0eS4gRGVmYXVsdHMgdG9cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLlxcbiAgICAgIDpjb250ZXh0ICAgICAgICAgIC0gb3B0aW9uYWwsIHNldHMgdGhlIGNvbnRleHQgZm9yIHRoZSBzb3VyY2UuIFBvc3NpYmxlIHZhbHVlc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGA6ZXhwcmAsIGA6c3RhdGVtZW50YCBhbmQgYDpyZXR1cm5gLiBEZWZhdWx0cyB0b1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYDpleHByYC5cXG5cXG4gICBjYiAoZnVuY3Rpb24pXFxuICAgICBjYWxsYmFjaywgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBtYXAuIElmIHN1Y2Nlc3NmdWwgdGhlIG1hcCB3aWxsIGNvbnRhaW5cXG4gICAgIGEga2V5IDp2YWx1ZSwgdGhlIGFjdHVhbCB2YWx1ZSBpcyBub3QgbWVhbmluZ2Z1bC4gSWYgdW5zdWNjZXNzZnVsIHRoZVxcbiAgICAgbWFwIHdpbGwgY29udGFpbiBhIGtleSA6ZXJyb3Igd2l0aCBhbiBleC1pbmZvIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIGNhdXNlXFxuICAgICBvZiBmYWlsdXJlLlwiXHJcbiAoW3N0YXRlIHNvdXJjZSBjYl0gKGFuYWx5emUtc3RyIHN0YXRlIHNvdXJjZSBuaWwgY2IpKVxyXG4gKFtzdGF0ZSBzb3VyY2UgbmFtZSBjYl0gKGFuYWx5emUtc3RyIHN0YXRlIHNvdXJjZSBuYW1lIG5pbCBjYikpXHJcbiAoW3N0YXRlIHNvdXJjZSBuYW1lIG9wdHMgY2JdXHJcbiAgezpwcmVcclxuICAgWyhhdG9tPyBzdGF0ZSlcclxuICAgIChzdHJpbmc/IHNvdXJjZSlcclxuICAgICh2YWxpZC1uYW1lPyBuYW1lKVxyXG4gICAgKHZhbGlkLW9wdHM/IG9wdHMpXHJcbiAgICAoZm4/IGNiKV19XHJcbiAgKGFuYWx5emUtc3RyKlxyXG4gICB7Oipjb21waWxlciogc3RhdGUsXHJcbiAgICA6KmRhdGEtcmVhZGVycyogdGFncy8qY2xqcy1kYXRhLXJlYWRlcnMqLFxyXG4gICAgOipwYXNzZXMqIChvciAoOnBhc3NlcyBvcHRzKSBhbmEvKnBhc3NlcyopLFxyXG4gICAgOiphbmFseXplLWRlcHMqICg6YW5hbHl6ZS1kZXBzIG9wdHMgdHJ1ZSksXHJcbiAgICA6KmNsanMtZGVwLXNldCogYW5hLypjbGpzLWRlcC1zZXQqLFxyXG4gICAgOipsb2FkLW1hY3JvcyogKDpsb2FkLW1hY3JvcyBvcHRzIHRydWUpLFxyXG4gICAgOipsb2FkLWZuKiAob3IgKDpsb2FkIG9wdHMpICpsb2FkLWZuKiksXHJcbiAgICA6KmV2YWwtZm4qIChvciAoOmV2YWwgb3B0cykgKmV2YWwtZm4qKX1cclxuICAgc291cmNlXHJcbiAgIG5hbWVcclxuICAgb3B0c1xyXG4gICBjYikpKVxyXG4ifSB7OnN5bSAqZXZhbC1mbiosIDptZXRhIHs6ZG9jICJFYWNoIHJ1bnRpbWUgZW52aXJvbm1lbnQgcHJvdmlkZXMgdmFyaW91cyB3YXlzIHRvIGV2YWwgSmF2YVNjcmlwdFxuICBzb3VyY2UuIFdoYXRldmVyIGZ1bmN0aW9uICpldmFsLWZuKiBpcyBib3VuZCB0byB3aWxsIGJlIHBhc3NlZCBhIG1hcFxuICBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czpcblxuICA6c291cmNlIC0gdGhlIHNvdXJjZSBvZiB0aGUgbGlicmFyeSAoc3RyaW5nKVxuICA6bmFtZSAgIC0gdXNlZCB0byB1bmlxdWUgaWRlbnRpZnkgdGhlIHNjcmlwdCAoc3ltYm9sKVxuICA6Y2FjaGUgIC0gaWYgdGhlIHNvdXJjZSB3YXMgb3JpZ2luYWxseSBDbG9qdXJlU2NyaXB0LCB3aWxsIGJlIGdpdmVuIHRoZVxuICAgICAgICAgICAgYW5hbHlzaXMgY2FjaGUuXG5cbiAgVGhlIHJlc3VsdCBvZiBldmFsdWF0aW9uIHNob3VsZCBiZSB0aGUgcmV0dXJuIHZhbHVlLiJ9LCA6c291cmNlICIoZGVmb25jZSAqZXZhbC1mbiogKGZuIFttXSAodGhyb3cgKGpzL0Vycm9yLiBcIk5vICpldmFsLWZuKiBzZXRcIikpKSlcclxuIn0pLCBydW0uY29yZSAoezpzeW0gbW91bnQsIDptZXRhIHs6ZG9jICJBZGQgZWxlbWVudCB0byB0aGUgRE9NIHRyZWUuIElkZW1wb3RlbnQuIFN1YnNlcXVlbnQgbW91bnRzIHdpbGwganVzdCB1cGRhdGUgZWxlbWVudC4iLCA6YXJnbGlzdHMgKFtlbGVtZW50IG5vZGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtb3VudFxyXG4gXCJBZGQgZWxlbWVudCB0byB0aGUgRE9NIHRyZWUuIElkZW1wb3RlbnQuIFN1YnNlcXVlbnQgbW91bnRzIHdpbGwganVzdCB1cGRhdGUgZWxlbWVudC5cIlxyXG4gW2VsZW1lbnQgbm9kZV1cclxuIChqcy9SZWFjdERPTS5yZW5kZXIgZWxlbWVudCBub2RlKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSB1bm1vdW50LCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBjb21wb25lbnQgZnJvbSB0aGUgRE9NIHRyZWUuIiwgOmFyZ2xpc3RzIChbbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVubW91bnRcclxuIFwiUmVtb3ZlcyBjb21wb25lbnQgZnJvbSB0aGUgRE9NIHRyZWUuXCJcclxuIFtub2RlXVxyXG4gKGpzL1JlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUgbm9kZSkpXHJcbiJ9IHs6c3ltIGxvY2FsLCA6bWV0YSB7OmRvYyAiTWl4aW4gY29uc3RydWN0b3IuIEFkZHMgYW4gYXRvbSB0byBjb21wb25lbnTigJlzIHN0YXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8ga2VlcCBzdHVmZiBkdXJpbmcgY29tcG9uZW504oCZcyBsaWZlY3ljbGUuIENvbXBvbmVudCB3aWxsIGJlIHJlLXJlbmRlcmVkIGlmIGF0b23igJlzIHZhbHVlIGNoYW5nZXMuIEF0b20gaXMgc3RvcmVkIHVuZGVyIHVzZXItcHJvdmlkZWQga2V5IG9yIHVuZGVyIGA6cnVtL2xvY2FsYCBieSBkZWZhdWx0LlxuICBcbiAgIGBgYFxuICAgKHJ1bS9kZWZjcyBjb3VudGVyIDwgKHJ1bS9sb2NhbCAwIDpjbnQpXG4gICAgIFtzdGF0ZSBsYWJlbF1cbiAgICAgKGxldCBbKmNudCAoOmNudCBzdGF0ZSldXG4gICAgICAgWzpkaXYgezpvbi1jbGljayAoZm4gW19dIChzd2FwISAqY250IGluYykpfVxuICAgICAgICAgbGFiZWwgQCpjbnRdKSlcbiAgIFxuICAgKHJ1bS9tb3VudCAoY291bnRlciBcIkNsaWNrIGNvdW50OiBcIikpXG4gICBgYGAiLCA6YXJnbGlzdHMgW1tpbml0aWFsXSBbaW5pdGlhbCBrZXldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2NhbFxyXG4gXCJNaXhpbiBjb25zdHJ1Y3Rvci4gQWRkcyBhbiBhdG9tIHRvIGNvbXBvbmVudOKAmXMgc3RhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBrZWVwIHN0dWZmIGR1cmluZyBjb21wb25lbnTigJlzIGxpZmVjeWNsZS4gQ29tcG9uZW50IHdpbGwgYmUgcmUtcmVuZGVyZWQgaWYgYXRvbeKAmXMgdmFsdWUgY2hhbmdlcy4gQXRvbSBpcyBzdG9yZWQgdW5kZXIgdXNlci1wcm92aWRlZCBrZXkgb3IgdW5kZXIgYDpydW0vbG9jYWxgIGJ5IGRlZmF1bHQuXFxuICBcXG4gICBgYGBcXG4gICAocnVtL2RlZmNzIGNvdW50ZXIgPCAocnVtL2xvY2FsIDAgOmNudClcXG4gICAgIFtzdGF0ZSBsYWJlbF1cXG4gICAgIChsZXQgWypjbnQgKDpjbnQgc3RhdGUpXVxcbiAgICAgICBbOmRpdiB7Om9uLWNsaWNrIChmbiBbX10gKHN3YXAhICpjbnQgaW5jKSl9XFxuICAgICAgICAgbGFiZWwgQCpjbnRdKSlcXG4gICBcXG4gICAocnVtL21vdW50IChjb3VudGVyIFxcXCJDbGljayBjb3VudDogXFxcIikpXFxuICAgYGBgXCJcclxuIChbaW5pdGlhbF0gKGxvY2FsIGluaXRpYWwgOnJ1bS9sb2NhbCkpXHJcbiAoW2luaXRpYWwga2V5XVxyXG4gIHs6d2lsbC1tb3VudFxyXG4gICAoZm5cclxuICAgIFtzdGF0ZV1cclxuICAgIChsZXRcclxuICAgICBbbG9jYWwtc3RhdGVcclxuICAgICAgKGF0b20gaW5pdGlhbClcclxuICAgICAgY29tcG9uZW50XHJcbiAgICAgICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSldXHJcbiAgICAgKGFkZC13YXRjaFxyXG4gICAgICBsb2NhbC1zdGF0ZVxyXG4gICAgICBrZXlcclxuICAgICAgKGZuIFtfIF8gXyBfXSAocmVxdWVzdC1yZW5kZXIgY29tcG9uZW50KSkpXHJcbiAgICAgKGFzc29jIHN0YXRlIGtleSBsb2NhbC1zdGF0ZSkpKX0pKVxyXG4ifSB7OnN5bSByZWFjdGl2ZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHJlYWN0aXZlXHJcbiBcIk1peGluLiBXb3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIFtbcmVhY3RdXS5cXG4gIFxcbiAgIGBgYFxcbiAgIChydW0vZGVmYyBjb21wIDwgcnVtL3JlYWN0aXZlXFxuICAgICBbKmNvdW50ZXJdXFxuICAgICBbOmRpdiAocnVtL3JlYWN0IGNvdW50ZXIpXSlcXG5cXG4gICAoZGVmICpjb3VudGVyIChhdG9tIDApKVxcbiAgIChydW0vbW91bnQgKGNvbXAgKmNvdW50ZXIpIGpzL2RvY3VtZW50LmJvZHkpXFxuICAgKHN3YXAhICpjb3VudGVyIGluYykgOzsgd2lsbCBmb3JjZSBjb21wIHRvIHJlLXJlbmRlclxcbiAgIGBgYFwiXHJcbiB7OmluaXRcclxuICAoZm4gW3N0YXRlIHByb3BzXSAoYXNzb2Mgc3RhdGUgOnJ1bS5yZWFjdGl2ZS9rZXkgKHJhbmRvbS11dWlkKSkpLFxyXG4gIDp3cmFwLXJlbmRlclxyXG4gIChmblxyXG4gICBbcmVuZGVyLWZuXVxyXG4gICAoZm5cclxuICAgIFtzdGF0ZV1cclxuICAgIChiaW5kaW5nXHJcbiAgICAgWypyZWFjdGlvbnMqICh2b2xhdGlsZSEgI3t9KV1cclxuICAgICAobGV0XHJcbiAgICAgIFtjb21wXHJcbiAgICAgICAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpXHJcbiAgICAgICBvbGQtcmVhY3Rpb25zXHJcbiAgICAgICAoOnJ1bS5yZWFjdGl2ZS9yZWZzIHN0YXRlICN7fSlcclxuICAgICAgIFtkb20gbmV4dC1zdGF0ZV1cclxuICAgICAgIChyZW5kZXItZm4gc3RhdGUpXHJcbiAgICAgICBuZXctcmVhY3Rpb25zXHJcbiAgICAgICBAKnJlYWN0aW9ucypcclxuICAgICAgIGtleVxyXG4gICAgICAgKDpydW0ucmVhY3RpdmUva2V5IHN0YXRlKV1cclxuICAgICAgKGRvc2VxXHJcbiAgICAgICBbcmVmIG9sZC1yZWFjdGlvbnNdXHJcbiAgICAgICAod2hlbi1ub3QgKGNvbnRhaW5zPyBuZXctcmVhY3Rpb25zIHJlZikgKHJlbW92ZS13YXRjaCByZWYga2V5KSkpXHJcbiAgICAgIChkb3NlcVxyXG4gICAgICAgW3JlZiBuZXctcmVhY3Rpb25zXVxyXG4gICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgKGNvbnRhaW5zPyBvbGQtcmVhY3Rpb25zIHJlZilcclxuICAgICAgICAoYWRkLXdhdGNoIHJlZiBrZXkgKGZuIFtfIF8gXyBfXSAocmVxdWVzdC1yZW5kZXIgY29tcCkpKSkpXHJcbiAgICAgIFtkb20gKGFzc29jIG5leHQtc3RhdGUgOnJ1bS5yZWFjdGl2ZS9yZWZzIG5ldy1yZWFjdGlvbnMpXSkpKSksXHJcbiAgOndpbGwtdW5tb3VudFxyXG4gIChmblxyXG4gICBbc3RhdGVdXHJcbiAgIChsZXRcclxuICAgIFtrZXkgKDpydW0ucmVhY3RpdmUva2V5IHN0YXRlKV1cclxuICAgIChkb3NlcSBbcmVmICg6cnVtLnJlYWN0aXZlL3JlZnMgc3RhdGUpXSAocmVtb3ZlLXdhdGNoIHJlZiBrZXkpKSlcclxuICAgKGRpc3NvYyBzdGF0ZSA6cnVtLnJlYWN0aXZlL3JlZnMgOnJ1bS5yZWFjdGl2ZS9rZXkpKX0pXHJcbiJ9IHs6c3ltIHJlZi1ub2RlLCA6bWV0YSB7OmRvYyAiR2l2ZW4gc3RhdGUgYW5kIHJlZiBoYW5kbGUsIHJldHVybnMgRE9NIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHJlZi4iLCA6YXJnbGlzdHMgKFtzdGF0ZSBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWYtbm9kZVxyXG4gXCJHaXZlbiBzdGF0ZSBhbmQgcmVmIGhhbmRsZSwgcmV0dXJucyBET00gbm9kZSBhc3NvY2lhdGVkIHdpdGggcmVmLlwiXHJcbiBbc3RhdGUga2V5XVxyXG4gKGpzL1JlYWN0RE9NLmZpbmRET01Ob2RlIChyZWYgc3RhdGUgKG5hbWUga2V5KSkpKVxyXG4ifSB7OnN5bSByZWFjdCwgOm1ldGEgezpkb2MgIldvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggW1tyZWFjdGl2ZV1dIG1peGluLiBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBkZXJlZmAgaW5zaWRlIHJlbmRlciwgYW5kIHlvdXIgY29tcG9uZW50IHdpbGwgc3Vic2NyaWJlIHRvIGNoYW5nZXMgaGFwcGVuaW5nIHRvIHRoZSBkZXJlZmVkIGF0b20uIiwgOmFyZ2xpc3RzIChbcmVmXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhY3RcclxuIFwiV29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCBbW3JlYWN0aXZlXV0gbWl4aW4uIFVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgYGRlcmVmYCBpbnNpZGUgcmVuZGVyLCBhbmQgeW91ciBjb21wb25lbnQgd2lsbCBzdWJzY3JpYmUgdG8gY2hhbmdlcyBoYXBwZW5pbmcgdG8gdGhlIGRlcmVmZWQgYXRvbS5cIlxyXG4gW3JlZl1cclxuIChhc3NlcnRcclxuICAqcmVhY3Rpb25zKlxyXG4gIFwicnVtLmNvcmUvcmVhY3QgaXMgb25seSBzdXBwb3J0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBydW0uY29yZS9yZWFjdGl2ZVwiKVxyXG4gKHZzd2FwISAqcmVhY3Rpb25zKiBjb25qIHJlZilcclxuIEByZWYpXHJcbiJ9IHs6c3ltIHJlcXVlc3QtcmVuZGVyLCA6bWV0YSB7OmRvYyAiU2NoZWR1bGVzIHJlYWN0IGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCBvbiBuZXh0IGFuaW1hdGlvbiBmcmFtZS4iLCA6YXJnbGlzdHMgKFtjb21wb25lbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXF1ZXN0LXJlbmRlclxyXG4gXCJTY2hlZHVsZXMgcmVhY3QgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIG9uIG5leHQgYW5pbWF0aW9uIGZyYW1lLlwiXHJcbiBbY29tcG9uZW50XVxyXG4gKHdoZW4gKGVtcHR5PyBAcmVuZGVyLXF1ZXVlKSAoc2NoZWR1bGUgcmVuZGVyKSlcclxuICh2c3dhcCEgcmVuZGVyLXF1ZXVlIGNvbmogY29tcG9uZW50KSlcclxuIn0gezpzeW0gcG9ydGFsLCA6bWV0YSB7OmRvYyAiUmVuZGVyIGBlbGVtZW50YCBpbiBhIERPTSBgbm9kZWAgdGhhdCBpcyBvdXNpZGUgb2YgY3VycmVudCBET00gaGllcmFyY2h5LiIsIDphcmdsaXN0cyAoW2VsZW1lbnQgbm9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvcnRhbFxyXG4gXCJSZW5kZXIgYGVsZW1lbnRgIGluIGEgRE9NIGBub2RlYCB0aGF0IGlzIG91c2lkZSBvZiBjdXJyZW50IERPTSBoaWVyYXJjaHkuXCJcclxuIFtlbGVtZW50IG5vZGVdXHJcbiAoanMvUmVhY3RET00uY3JlYXRlUG9ydGFsIGVsZW1lbnQgbm9kZSkpXHJcbiJ9IHs6c3ltIHdpdGgta2V5LCA6bWV0YSB7OmRvYyAiQWRkcyBSZWFjdCBrZXkgdG8gZWxlbWVudC5cbiAgIFxuICAgYGBgXG4gICAocnVtL2RlZmMgbGFiZWwgW3RleHRdIFs6ZGl2IHRleHRdKVxuXG4gICAoLT4gKGxhYmVsKVxuICAgICAgIChydW0vd2l0aC1rZXkgXCJhYmNcIilcbiAgICAgICAocnVtL21vdW50IGpzL2RvY3VtZW50LmJvZHkpKVxuICAgYGBgIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aXRoLWtleVxyXG4gXCJBZGRzIFJlYWN0IGtleSB0byBlbGVtZW50LlxcbiAgIFxcbiAgIGBgYFxcbiAgIChydW0vZGVmYyBsYWJlbCBbdGV4dF0gWzpkaXYgdGV4dF0pXFxuXFxuICAgKC0+IChsYWJlbClcXG4gICAgICAgKHJ1bS93aXRoLWtleSBcXFwiYWJjXFxcIilcXG4gICAgICAgKHJ1bS9tb3VudCBqcy9kb2N1bWVudC5ib2R5KSlcXG4gICBgYGBcIlxyXG4gW2VsZW1lbnQga2V5XVxyXG4gKGpzL1JlYWN0LmNsb25lRWxlbWVudCBlbGVtZW50ICNqcyB7XCJrZXlcIiBrZXl9IG5pbCkpXHJcbiJ9IHs6c3ltIGJ1aWxkLWRlZmNzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBidWlsZC1kZWZjc1xyXG4gW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdXHJcbiAobGV0XHJcbiAgW3JlbmRlclxyXG4gICAoZm4gW3N0YXRlXSBbKGFwcGx5IHJlbmRlci1ib2R5IHN0YXRlICg6cnVtL2FyZ3Mgc3RhdGUpKSBzdGF0ZV0pXVxyXG4gIChidWlsZC1jdG9yIHJlbmRlciBtaXhpbnMgZGlzcGxheS1uYW1lKSkpXHJcbiJ9IHs6c3ltIHJlZiwgOm1ldGEgezpkb2MgIkdpdmVuIHN0YXRlIGFuZCByZWYgaGFuZGxlLCByZXR1cm5zIFJlYWN0IGNvbXBvbmVudC4iLCA6YXJnbGlzdHMgKFtzdGF0ZSBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWZcclxuIFwiR2l2ZW4gc3RhdGUgYW5kIHJlZiBoYW5kbGUsIHJldHVybnMgUmVhY3QgY29tcG9uZW50LlwiXHJcbiBbc3RhdGUga2V5XVxyXG4gKC0+IHN0YXRlIDpydW0vcmVhY3QtY29tcG9uZW50IChhZ2V0IFwicmVmc1wiKSAoYWdldCAobmFtZSBrZXkpKSkpXHJcbiJ9IHs6c3ltIHN0YXRpYywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIHN0YXRpY1xyXG4gXCJNaXhpbi4gV2lsbCBhdm9pZCByZS1yZW5kZXIgaWYgbm9uZSBvZiBjb21wb25lbnTigJlzIGFyZ3VtZW50cyBoYXZlIGNoYW5nZWQuIERvZXMgZXF1YWxpdHkgY2hlY2sgKGA9YCkgb24gYWxsIGFyZ3VtZW50cy5cXG4gIFxcbiAgIGBgYFxcbiAgIChydW0vZGVmYyBsYWJlbCA8IHJ1bS9zdGF0aWNcXG4gICAgIFt0ZXh0XVxcbiAgICAgWzpkaXYgdGV4dF0pXFxuICAgICBcXG4gICAocnVtL21vdW50IChsYWJlbCBcXFwiYWJjXFxcIikganMvZG9jdW1lbnQuYm9keSlcXG5cXG4gICA7OyBkZWYgIT0gYWJjLCB3aWxsIHJlLXJlbmRlclxcbiAgIChydW0vbW91bnQgKGxhYmVsIFxcXCJkZWZcXFwiKSBqcy9kb2N1bWVudC5ib2R5KVxcblxcbiAgIDs7IGRlZiA9PSBkZWYsIHdvbuKAmXQgcmUtcmVuZGVyXFxuICAgKHJ1bS9tb3VudCAobGFiZWwgXFxcImRlZlxcXCIpIGpzL2RvY3VtZW50LmJvZHkpXFxuICAgYGBgXCJcclxuIHs6c2hvdWxkLXVwZGF0ZVxyXG4gIChmblxyXG4gICBbb2xkLXN0YXRlIG5ldy1zdGF0ZV1cclxuICAgKG5vdD0gKDpydW0vYXJncyBvbGQtc3RhdGUpICg6cnVtL2FyZ3MgbmV3LXN0YXRlKSkpfSlcclxuIn0gezpzeW0gY3Vyc29yLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBbW2N1cnNvci1pbl1dIGJ1dCBhY2NlcHRzIHNpbmdsZSBrZXkgaW5zdGVhZCBvZiBwYXRoIHZlY3Rvci4iLCA6YXJnbGlzdHMgKFtyZWYga2V5ICYgb3B0aW9uc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGN1cnNvclxyXG4gXCJTYW1lIGFzIFtbY3Vyc29yLWluXV0gYnV0IGFjY2VwdHMgc2luZ2xlIGtleSBpbnN0ZWFkIG9mIHBhdGggdmVjdG9yLlwiXHJcbiBbcmVmIGtleSAmIG9wdGlvbnNdXHJcbiAoYXBwbHkgY3Vyc29yLWluIHJlZiBba2V5XSBvcHRpb25zKSlcclxuIn0gezpzeW0gc3RhdGUsIDptZXRhIHs6ZG9jICJHaXZlbiBSZWFjdCBjb21wb25lbnQsIHJldHVybnMgUnVtIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBpdC4iLCA6YXJnbGlzdHMgKFtjb21wXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RhdGVcclxuIFwiR2l2ZW4gUmVhY3QgY29tcG9uZW50LCByZXR1cm5zIFJ1bSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggaXQuXCJcclxuIFtjb21wXVxyXG4gKGdvYmovZ2V0ICguLXN0YXRlIGNvbXApIFwiOnJ1bS9zdGF0ZVwiKSlcclxuIn0gezpzeW0gY3Vyc29yLWluLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYXRvbSB3aXRoIGRlZXAgbmVzdGVkIHZhbHVlIGFuZCBwYXRoIGluc2lkZSBpdCwgY3JlYXRlcyBhbiBhdG9tLWxpa2Ugc3RydWN0dXJlXG4gICB0aGF0IGNhbiBiZSB1c2VkIHNlcGFyYXRlbHkgZnJvbSBtYWluIGF0b20sIGJ1dCB3aWxsIHN5bmMgY2hhbmdlcyBib3RoIHdheXM6XG4gIFxuICAgYGBgXG4gICAoZGVmIGRiIChhdG9tIHsgOnVzZXJzIHsgXCJJdmFuXCIgeyA6YWdlIDMwIH19fSkpXG4gICBcbiAgIChkZWYgaXZhbiAocnVtL2N1cnNvciBkYiBbOnVzZXJzIFwiSXZhblwiXSkpXG4gICAoZGVyZWYgaXZhbikgOzsgPT4geyA6YWdlIDMwIH1cbiAgIFxuICAgKHN3YXAhIGl2YW4gdXBkYXRlIDphZ2UgaW5jKSA7OyA9PiB7IDphZ2UgMzEgfVxuICAgKGRlcmVmIGRiKSA7OyA9PiB7IDp1c2VycyB7IFwiSXZhblwiIHsgOmFnZSAzMSB9fX1cbiAgIFxuICAgKHN3YXAhIGRiIHVwZGF0ZS1pbiBbOnVzZXJzIFwiSXZhblwiIDphZ2VdIGluYylcbiAgIDs7ID0+IHsgOnVzZXJzIHsgXCJJdmFuXCIgeyA6YWdlIDMyIH19fVxuICAgXG4gICAoZGVyZWYgaXZhbikgOzsgPT4geyA6YWdlIDMyIH1cbiAgIGBgYFxuICBcbiAgIFJldHVybmVkIHZhbHVlIHN1cHBvcnRzIGBkZXJlZmAsIGBzd2FwIWAsIGByZXNldCFgLCB3YXRjaGVzIGFuZCBtZXRhZGF0YS5cbiAgXG4gICBUaGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGlzIGA6bWV0YWAiLCA6YXJnbGlzdHMgKFtyZWYgcGF0aCAmIHs6YXMgb3B0aW9uc31dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjdXJzb3ItaW5cclxuIFwiR2l2ZW4gYXRvbSB3aXRoIGRlZXAgbmVzdGVkIHZhbHVlIGFuZCBwYXRoIGluc2lkZSBpdCwgY3JlYXRlcyBhbiBhdG9tLWxpa2Ugc3RydWN0dXJlXFxuICAgdGhhdCBjYW4gYmUgdXNlZCBzZXBhcmF0ZWx5IGZyb20gbWFpbiBhdG9tLCBidXQgd2lsbCBzeW5jIGNoYW5nZXMgYm90aCB3YXlzOlxcbiAgXFxuICAgYGBgXFxuICAgKGRlZiBkYiAoYXRvbSB7IDp1c2VycyB7IFxcXCJJdmFuXFxcIiB7IDphZ2UgMzAgfX19KSlcXG4gICBcXG4gICAoZGVmIGl2YW4gKHJ1bS9jdXJzb3IgZGIgWzp1c2VycyBcXFwiSXZhblxcXCJdKSlcXG4gICAoZGVyZWYgaXZhbikgOzsgPT4geyA6YWdlIDMwIH1cXG4gICBcXG4gICAoc3dhcCEgaXZhbiB1cGRhdGUgOmFnZSBpbmMpIDs7ID0+IHsgOmFnZSAzMSB9XFxuICAgKGRlcmVmIGRiKSA7OyA9PiB7IDp1c2VycyB7IFxcXCJJdmFuXFxcIiB7IDphZ2UgMzEgfX19XFxuICAgXFxuICAgKHN3YXAhIGRiIHVwZGF0ZS1pbiBbOnVzZXJzIFxcXCJJdmFuXFxcIiA6YWdlXSBpbmMpXFxuICAgOzsgPT4geyA6dXNlcnMgeyBcXFwiSXZhblxcXCIgeyA6YWdlIDMyIH19fVxcbiAgIFxcbiAgIChkZXJlZiBpdmFuKSA7OyA9PiB7IDphZ2UgMzIgfVxcbiAgIGBgYFxcbiAgXFxuICAgUmV0dXJuZWQgdmFsdWUgc3VwcG9ydHMgYGRlcmVmYCwgYHN3YXAhYCwgYHJlc2V0IWAsIHdhdGNoZXMgYW5kIG1ldGFkYXRhLlxcbiAgXFxuICAgVGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBpcyBgOm1ldGFgXCJcclxuIFtyZWYgcGF0aCAmIHs6YXMgb3B0aW9uc31dXHJcbiAoaWZcclxuICAoaW5zdGFuY2U/IGN1cnNvci9DdXJzb3IgcmVmKVxyXG4gIChjdXJzb3IvQ3Vyc29yLiAoLi1yZWYgcmVmKSAoaW50byAoLi1wYXRoIHJlZikgcGF0aCkgKDptZXRhIG9wdGlvbnMpKVxyXG4gIChjdXJzb3IvQ3Vyc29yLiByZWYgcGF0aCAoOm1ldGEgb3B0aW9ucykpKSlcclxuIn0gezpzeW0gZG9tLW5vZGUsIDptZXRhIHs6ZG9jICJHaXZlbiBzdGF0ZSwgcmV0dXJucyB0b3AtbGV2ZWwgRE9NIG5vZGUgb2YgY29tcG9uZW50LiBDYWxsIGl0IGR1cmluZyBsaWZlY3ljbGUgY2FsbGJhY2tzLiBDYW7igJl0IGJlIGNhbGxlZCBkdXJpbmcgcmVuZGVyLiIsIDphcmdsaXN0cyAoW3N0YXRlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZG9tLW5vZGVcclxuIFwiR2l2ZW4gc3RhdGUsIHJldHVybnMgdG9wLWxldmVsIERPTSBub2RlIG9mIGNvbXBvbmVudC4gQ2FsbCBpdCBkdXJpbmcgbGlmZWN5Y2xlIGNhbGxiYWNrcy4gQ2Fu4oCZdCBiZSBjYWxsZWQgZHVyaW5nIHJlbmRlci5cIlxyXG4gW3N0YXRlXVxyXG4gKGpzL1JlYWN0RE9NLmZpbmRET01Ob2RlICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSkpKVxyXG4ifSB7OnN5bSB3aXRoLXJlZiwgOm1ldGEgezpkb2MgIkFkZHMgUmVhY3QgcmVmIChzdHJpbmcgb3IgY2FsbGJhY2spIHRvIGVsZW1lbnQuXG4gICBcbiAgIGBgYFxuICAgKHJ1bS9kZWZjIGxhYmVsIFt0ZXh0XSBbOmRpdiB0ZXh0XSlcblxuICAgKC0+IChsYWJlbClcbiAgICAgICAocnVtL3dpdGgtcmVmIFwiYWJjXCIpXG4gICAgICAgKHJ1bS9tb3VudCBqcy9kb2N1bWVudC5ib2R5KSlcbiAgIGBgYCIsIDphcmdsaXN0cyAoW2VsZW1lbnQgcmVmXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2l0aC1yZWZcclxuIFwiQWRkcyBSZWFjdCByZWYgKHN0cmluZyBvciBjYWxsYmFjaykgdG8gZWxlbWVudC5cXG4gICBcXG4gICBgYGBcXG4gICAocnVtL2RlZmMgbGFiZWwgW3RleHRdIFs6ZGl2IHRleHRdKVxcblxcbiAgICgtPiAobGFiZWwpXFxuICAgICAgIChydW0vd2l0aC1yZWYgXFxcImFiY1xcXCIpXFxuICAgICAgIChydW0vbW91bnQganMvZG9jdW1lbnQuYm9keSkpXFxuICAgYGBgXCJcclxuIFtlbGVtZW50IHJlZl1cclxuIChqcy9SZWFjdC5jbG9uZUVsZW1lbnQgZWxlbWVudCAjanMge1wicmVmXCIgcmVmfSBuaWwpKVxyXG4ifSB7OnN5bSBidWlsZC1kZWZjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlbmRlci1ib2R5IG1peGlucyBkaXNwbGF5LW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBidWlsZC1kZWZjXHJcbiBbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV1cclxuIChpZlxyXG4gIChlbXB0eT8gbWl4aW5zKVxyXG4gIChsZXRcclxuICAgW2NsYXNzXHJcbiAgICAoZm4gW3Byb3BzXSAoYXBwbHkgcmVuZGVyLWJvZHkgKGFnZXQgcHJvcHMgXCI6cnVtL2FyZ3NcIikpKVxyXG4gICAgX1xyXG4gICAgKGFzZXQgY2xhc3MgXCJkaXNwbGF5TmFtZVwiIGRpc3BsYXktbmFtZSlcclxuICAgIGN0b3JcclxuICAgIChmblxyXG4gICAgIFsmIGFyZ3NdXHJcbiAgICAgKGpzL1JlYWN0LmNyZWF0ZUVsZW1lbnQgY2xhc3MgI2pzIHtcIjpydW0vYXJnc1wiIGFyZ3N9KSldXHJcbiAgICh3aXRoLW1ldGEgY3RvciB7OnJ1bS9jbGFzcyBjbGFzc30pKVxyXG4gIChsZXRcclxuICAgW3JlbmRlciAoZm4gW3N0YXRlXSBbKGFwcGx5IHJlbmRlci1ib2R5ICg6cnVtL2FyZ3Mgc3RhdGUpKSBzdGF0ZV0pXVxyXG4gICAoYnVpbGQtY3RvciByZW5kZXIgbWl4aW5zIGRpc3BsYXktbmFtZSkpKSlcclxuIn0gezpzeW0gaHlkcmF0ZSwgOm1ldGEgezpkb2MgIlNhbWUgYXMgW1ttb3VudF1dIGJ1dCBtdXN0IGJlIGNhbGxlZCBvbiBET00gdHJlZSBhbHJlYWR5IHJlbmRlcmVkIGJ5IGEgc2VydmVyIHZpYSBbW3JlbmRlci1odG1sXV0uIiwgOmFyZ2xpc3RzIChbZWxlbWVudCBub2RlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaHlkcmF0ZVxyXG4gXCJTYW1lIGFzIFtbbW91bnRdXSBidXQgbXVzdCBiZSBjYWxsZWQgb24gRE9NIHRyZWUgYWxyZWFkeSByZW5kZXJlZCBieSBhIHNlcnZlciB2aWEgW1tyZW5kZXItaHRtbF1dLlwiXHJcbiBbZWxlbWVudCBub2RlXVxyXG4gKGpzL1JlYWN0RE9NLmh5ZHJhdGUgZWxlbWVudCBub2RlKSlcclxuIn0gezpzeW0gYnVpbGQtZGVmY2MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJ1aWxkLWRlZmNjXHJcbiBbcmVuZGVyLWJvZHkgbWl4aW5zIGRpc3BsYXktbmFtZV1cclxuIChsZXRcclxuICBbcmVuZGVyXHJcbiAgIChmblxyXG4gICAgW3N0YXRlXVxyXG4gICAgWyhhcHBseSByZW5kZXItYm9keSAoOnJ1bS9yZWFjdC1jb21wb25lbnQgc3RhdGUpICg6cnVtL2FyZ3Mgc3RhdGUpKVxyXG4gICAgIHN0YXRlXSldXHJcbiAgKGJ1aWxkLWN0b3IgcmVuZGVyIG1peGlucyBkaXNwbGF5LW5hbWUpKSlcclxuIn0gezpzeW0gZGVyaXZlZC1hdG9tLCA6bWV0YSB7OmFyZ2xpc3RzIChxdW90ZSAoW3JlZnMga2V5IGZdIFtyZWZzIGtleSBmIG9wdHNdKSksIDpkb2MgIlVzZSB0aGlzIHRvIGNyZWF0ZSDigJxjaGFpbnPigJ0gYW5kIGFjeWNsaWMgZ3JhcGhzIG9mIGRlcGVuZGVudCBhdG9tcy5cbiAgIFxuICAgICAgICAgICAgIFtbZGVyaXZlZC1hdG9tXV0gd2lsbDpcbiAgICAgICAgICBcbiAgICAgICAgICAgICAtIFRha2UgTiDigJxzb3VyY2XigJ0gcmVmcy5cbiAgICAgICAgICAgICAtIFNldCB1cCBhIHdhdGNoIG9uIGVhY2ggb2YgdGhlbS5cbiAgICAgICAgICAgICAtIENyZWF0ZSDigJxzaW5r4oCdIGF0b20uXG4gICAgICAgICAgICAgLSBXaGVuIGFueSBvZiBzb3VyY2UgcmVmcyBjaGFuZ2VzOlxuICAgICAgICAgICAgICAgIC0gcmUtcnVuIGZ1bmN0aW9uIGBmYCwgcGFzc2luZyBOIGRlcmVmZXJlbmNlZCB2YWx1ZXMgb2Ygc291cmNlIHJlZnMuXG4gICAgICAgICAgICAgICAgLSBgcmVzZXQhYCByZXN1bHQgb2YgYGZgIHRvIHRoZSBzaW5rIGF0b20uXG4gICAgICAgICAgICAgLSBSZXR1cm4gc2luayBhdG9tLlxuXG4gICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgIGBgYFxuICAgICAgICAgICAgIChkZWYgKmEgKGF0b20gMCkpXG4gICAgICAgICAgICAgKGRlZiAqYiAoYXRvbSAxKSlcbiAgICAgICAgICAgICAoZGVmICp4IChkZXJpdmVkLWF0b20gWyphICpiXSA6OmtleVxuICAgICAgICAgICAgICAgICAgICAgICAoZm4gW2EgYl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyIGEgXCI6XCIgYikpKSlcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAodHlwZSAqeCkgIDs7ID0+IGNsb2p1cmUubGFuZy5BdG9tXG4gICAgICAgICAgICAgKGRlcmVmICp4KSA7OyA9PiBcIjA6MVwiXG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgKHN3YXAhICphIGluYylcbiAgICAgICAgICAgICAoZGVyZWYgKngpIDs7ID0+IFwiMToxXCJcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAocmVzZXQhICpiIDcpXG4gICAgICAgICAgICAgKGRlcmVmICp4KSA7OyA9PiBcIjE6N1wiXG4gICAgICAgICAgICAgYGBgXG5cbiAgICAgICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgICAgXG4gICAgICAgICAgICAgLSBgcmVmc2AgLSBzZXF1ZW5jZSBvZiBzb3VyY2UgcmVmcyxcbiAgICAgICAgICAgICAtIGBrZXlgICAtIHVuaXF1ZSBrZXkgdG8gcmVnaXN0ZXIgd2F0Y2hlciwgc2FtZSBhcyBpbiBgY2xvanVyZS5jb3JlL2FkZC13YXRjaGAsXG4gICAgICAgICAgICAgLSBgZmAgICAgLSBmdW5jdGlvbiB0aGF0IG11c3QgYWNjZXB0IE4gYXJndW1lbnRzIChzYW1lIGFzIG51bWJlciBvZiBzb3VyY2UgcmVmcykgYW5kIHJldHVybiBhIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHNpbmsgcmVmLiBOb3RlOiBgZmAgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbHJlYWR5IGRlcmVmZXJlbmNlZCB2YWx1ZXMsXG4gICAgICAgICAgICAgLSBgb3B0c2AgLSBvcHRpb25hbC4gTWFwIG9mOlxuICAgICAgICAgICAgICAgLSBgOnJlZmAgLSB1c2UgdGhpcyBhcyBzaW5rIHJlZi4gQnkgZGVmYXVsdCBjcmVhdGVzIG5ldyBhdG9tLFxuICAgICAgICAgICAgICAgLSBgOmNoZWNrLWVxdWFscz9gIC0gRGVmYXVsdHMgdG8gYHRydWVgLiBJZiBlcXVhbGl0eSBjaGVjayBzaG91bGQgYmUgcnVuIG9uIGVhY2ggc291cmNlIHVwZGF0ZTogYCg9IEBzaW5rIChmIG5ldy12YWxzKSlgLiBXaGVuIHJlc3VsdCBvZiByZWNhbGN1bGF0aW5nIGBmYCBlcXVhbHMgdG8gdGhlIG9sZCB2YWx1ZSwgYHJlc2V0IWAgd29u4oCZdCBiZSBjYWxsZWQuIFNldCB0byBgZmFsc2VgIGlmIGNoZWNraW5nIGZvciBlcXVhbGl0eSBjYW4gYmUgZXhwZW5zaXZlLiJ9LCA6c291cmNlICIoZGVmIGRlcml2ZWQtYXRvbSBkZXJpdmVkLWF0b20vZGVyaXZlZC1hdG9tKVxyXG4ifSksIGNsanMuY29yZSAoezpzeW0ganMtPmNsaiwgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgSmF2YVNjcmlwdCBhcnJheXMgaW50byBDbG9qdXJlU2NyaXB0XG4gIHZlY3RvcnMsIGFuZCBKYXZhU2NyaXB0IG9iamVjdHMgaW50byBDbG9qdXJlU2NyaXB0IG1hcHMuICBXaXRoXG4gIG9wdGlvbiAnOmtleXdvcmRpemUta2V5cyB0cnVlJyB3aWxsIGNvbnZlcnQgb2JqZWN0IGZpZWxkcyBmcm9tXG4gIHN0cmluZ3MgdG8ga2V5d29yZHMuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggJiBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4ganMtPmNsalxyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIEphdmFTY3JpcHQgYXJyYXlzIGludG8gQ2xvanVyZVNjcmlwdFxcbiAgdmVjdG9ycywgYW5kIEphdmFTY3JpcHQgb2JqZWN0cyBpbnRvIENsb2p1cmVTY3JpcHQgbWFwcy4gIFdpdGhcXG4gIG9wdGlvbiAnOmtleXdvcmRpemUta2V5cyB0cnVlJyB3aWxsIGNvbnZlcnQgb2JqZWN0IGZpZWxkcyBmcm9tXFxuICBzdHJpbmdzIHRvIGtleXdvcmRzLlwiXHJcbiAoW3hdIChqcy0+Y2xqIHggOmtleXdvcmRpemUta2V5cyBmYWxzZSkpXHJcbiAoW3ggJiBvcHRzXVxyXG4gIChsZXRcclxuICAgW3s6a2V5cyBba2V5d29yZGl6ZS1rZXlzXX1cclxuICAgIG9wdHNcclxuICAgIGtleWZuXHJcbiAgICAoaWYga2V5d29yZGl6ZS1rZXlzIGtleXdvcmQgc3RyKVxyXG4gICAgZlxyXG4gICAgKGZuXHJcbiAgICAgdGhpc2ZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGNvbmRcclxuICAgICAgKHNhdGlzZmllcz8gSUVuY29kZUNsb2p1cmUgeClcclxuICAgICAgKC1qcy0+Y2xqIHggKGFwcGx5IGFycmF5LW1hcCBvcHRzKSlcclxuICAgICAgKHNlcT8geClcclxuICAgICAgKGRvYWxsIChtYXAgdGhpc2ZuIHgpKVxyXG4gICAgICAobWFwLWVudHJ5PyB4KVxyXG4gICAgICAoTWFwRW50cnkuICh0aGlzZm4gKGtleSB4KSkgKHRoaXNmbiAodmFsIHgpKSBuaWwpXHJcbiAgICAgIChjb2xsPyB4KVxyXG4gICAgICAoaW50byAoZW1wdHkgeCkgKG1hcCB0aGlzZm4pIHgpXHJcbiAgICAgIChhcnJheT8geClcclxuICAgICAgKHBlcnNpc3RlbnQhXHJcbiAgICAgICAocmVkdWNlXHJcbiAgICAgICAgKGZuKlxyXG4gICAgICAgICBbcDFfXzQ4ODUzIyBwMl9fNDg4NTQjXVxyXG4gICAgICAgICAoY29uaiEgcDFfXzQ4ODUzIyAodGhpc2ZuIHAyX180ODg1NCMpKSlcclxuICAgICAgICAodHJhbnNpZW50IFtdKVxyXG4gICAgICAgIHgpKVxyXG4gICAgICAoaWRlbnRpY2FsPyAodHlwZSB4KSBqcy9PYmplY3QpXHJcbiAgICAgIChwZXJzaXN0ZW50IVxyXG4gICAgICAgKHJlZHVjZVxyXG4gICAgICAgIChmbiBbciBrXSAoYXNzb2MhIHIgKGtleWZuIGspICh0aGlzZm4gKGdvYmplY3QvZ2V0IHggaykpKSlcclxuICAgICAgICAodHJhbnNpZW50IHt9KVxyXG4gICAgICAgIChqcy1rZXlzIHgpKSlcclxuICAgICAgOmVsc2VcclxuICAgICAgeCkpXVxyXG4gICAoZiB4KSkpKVxyXG4ifSB7OnN5bSBzb3J0LWJ5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNvcnRlZCBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCwgd2hlcmUgdGhlIHNvcnRcbiAgIG9yZGVyIGlzIGRldGVybWluZWQgYnkgY29tcGFyaW5nIChrZXlmbiBpdGVtKS4gIENvbXAgY2FuIGJlXG4gICBib29sZWFuLXZhbHVlZCBjb21wYXJpc29uIGZ1bmN0aW9uLCBvciBhIC0vMC8rIHZhbHVlZCBjb21wYXJhdG9yLlxuICAgQ29tcCBkZWZhdWx0cyB0byBjb21wYXJlLiIsIDphcmdsaXN0cyBbW2tleWZuIGNvbGxdIFtrZXlmbiBjb21wIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0LWJ5XHJcbiBcIlJldHVybnMgYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwsIHdoZXJlIHRoZSBzb3J0XFxuICAgb3JkZXIgaXMgZGV0ZXJtaW5lZCBieSBjb21wYXJpbmcgKGtleWZuIGl0ZW0pLiAgQ29tcCBjYW4gYmVcXG4gICBib29sZWFuLXZhbHVlZCBjb21wYXJpc29uIGZ1bmN0aW9uLCBvciBhIC0vMC8rIHZhbHVlZCBjb21wYXJhdG9yLlxcbiAgIENvbXAgZGVmYXVsdHMgdG8gY29tcGFyZS5cIlxyXG4gKFtrZXlmbiBjb2xsXSAoc29ydC1ieSBrZXlmbiBjb21wYXJlIGNvbGwpKVxyXG4gKFtrZXlmbiBjb21wIGNvbGxdXHJcbiAgKHNvcnQgKGZuIFt4IHldICgoZm4tPmNvbXBhcmF0b3IgY29tcCkgKGtleWZuIHgpIChrZXlmbiB5KSkpIGNvbGwpKSlcclxuIn0gezpzeW0gSVRyYW5zaWVudEFzc29jaWF0aXZlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBhc3NvY2lhdGl2aXR5IHRvIHRyYW5zaWVudCBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1hc3NvYyEpfSB7OnN5bSBjaHVuay1maXJzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmbiBjaHVuay1maXJzdCBbc10gKC1jaHVua2VkLWZpcnN0IHMpKVxyXG4ifSB7OnN5bSBwcmludC1tZXRhPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcHRzIG9ial0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LW1ldGE/XHJcbiBbb3B0cyBvYmpdXHJcbiAoYW5kXHJcbiAgKGJvb2xlYW4gKGdldCBvcHRzIDptZXRhKSlcclxuICAoaW1wbGVtZW50cz8gSU1ldGEgb2JqKVxyXG4gIChub3QgKG5pbD8gKG1ldGEgb2JqKSkpKSlcclxuIn0gezpzeW0gbTMtaGFzaC1pbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtMy1oYXNoLWludFxyXG4gW2luXVxyXG4gKGlmXHJcbiAgKHplcm8/IGluKVxyXG4gIGluXHJcbiAgKGxldCBbazEgKG0zLW1peC1LMSBpbikgaDEgKG0zLW1peC1IMSBtMy1zZWVkIGsxKV0gKG0zLWZtaXggaDEgNCkpKSlcclxuIn0gezpzeW0gcHItc3RyKiwgOm1ldGEgezpkb2MgIlN1cHBvcnQgc28gdGhhdCBjb2xsZWN0aW9ucyBjYW4gaW1wbGVtZW50IHRvU3RyaW5nIHdpdGhvdXRcbiAgIGxvYWRpbmcgYWxsIHRoZSBwcmludGluZyBtYWNoaW5lcnkuIiwgOmFyZ2xpc3RzIChbb2JqXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHItc3RyKlxyXG4gXCJTdXBwb3J0IHNvIHRoYXQgY29sbGVjdGlvbnMgY2FuIGltcGxlbWVudCB0b1N0cmluZyB3aXRob3V0XFxuICAgbG9hZGluZyBhbGwgdGhlIHByaW50aW5nIG1hY2hpbmVyeS5cIlxyXG4gW29ial1cclxuIChsZXRcclxuICBbc2IgKFN0cmluZ0J1ZmZlci4pIHdyaXRlciAoU3RyaW5nQnVmZmVyV3JpdGVyLiBzYildXHJcbiAgKC1wci13cml0ZXIgb2JqIHdyaXRlciAocHItb3B0cykpXHJcbiAgKC1mbHVzaCB3cml0ZXIpXHJcbiAgKHN0ciBzYikpKVxyXG4ifSB7OnN5bSBlZHVjdGlvbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSByZWR1Y2libGUvaXRlcmFibGUgYXBwbGljYXRpb24gb2YgdGhlIHRyYW5zZHVjZXJzXG4gIHRvIHRoZSBpdGVtcyBpbiBjb2xsLiBUcmFuc2R1Y2VycyBhcmUgYXBwbGllZCBpbiBvcmRlciBhcyBpZlxuICBjb21iaW5lZCB3aXRoIGNvbXAuIE5vdGUgdGhhdCB0aGVzZSBhcHBsaWNhdGlvbnMgd2lsbCBiZVxuICBwZXJmb3JtZWQgZXZlcnkgdGltZSByZWR1Y2UvaXRlcmF0b3IgaXMgY2FsbGVkLiIsIDphcmdsaXN0cyAoWyYgeGZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWR1Y3Rpb25cclxuIFwiUmV0dXJucyBhIHJlZHVjaWJsZS9pdGVyYWJsZSBhcHBsaWNhdGlvbiBvZiB0aGUgdHJhbnNkdWNlcnNcXG4gIHRvIHRoZSBpdGVtcyBpbiBjb2xsLiBUcmFuc2R1Y2VycyBhcmUgYXBwbGllZCBpbiBvcmRlciBhcyBpZlxcbiAgY29tYmluZWQgd2l0aCBjb21wLiBOb3RlIHRoYXQgdGhlc2UgYXBwbGljYXRpb25zIHdpbGwgYmVcXG4gIHBlcmZvcm1lZCBldmVyeSB0aW1lIHJlZHVjZS9pdGVyYXRvciBpcyBjYWxsZWQuXCJcclxuIHs6YXJnbGlzdHMgJyhbeGZvcm0qIGNvbGxdKX1cclxuIFsmIHhmb3Jtc11cclxuIChFZHVjdGlvbi4gKGFwcGx5IGNvbXAgKGJ1dGxhc3QgeGZvcm1zKSkgKGxhc3QgeGZvcm1zKSkpXHJcbiJ9IHs6c3ltIHRyZWUtc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vZGVzIGluIGEgdHJlZSwgdmlhIGEgZGVwdGgtZmlyc3Qgd2Fsay5cbiAgYnJhbmNoPyBtdXN0IGJlIGEgZm4gb2Ygb25lIGFyZyB0aGF0IHJldHVybnMgdHJ1ZSBpZiBwYXNzZWQgYSBub2RlXG4gIHRoYXQgY2FuIGhhdmUgY2hpbGRyZW4gKGJ1dCBtYXkgbm90KS4gIGNoaWxkcmVuIG11c3QgYmUgYSBmbiBvZiBvbmVcbiAgYXJnIHRoYXQgcmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBjaGlsZHJlbi4gV2lsbCBvbmx5IGJlIGNhbGxlZCBvblxuICBub2RlcyBmb3Igd2hpY2ggYnJhbmNoPyByZXR1cm5zIHRydWUuIFJvb3QgaXMgdGhlIHJvb3Qgbm9kZSBvZiB0aGVcbiAgdHJlZS4iLCA6YXJnbGlzdHMgKFticmFuY2g/IGNoaWxkcmVuIHJvb3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmVlLXNlcVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9kZXMgaW4gYSB0cmVlLCB2aWEgYSBkZXB0aC1maXJzdCB3YWxrLlxcbiAgYnJhbmNoPyBtdXN0IGJlIGEgZm4gb2Ygb25lIGFyZyB0aGF0IHJldHVybnMgdHJ1ZSBpZiBwYXNzZWQgYSBub2RlXFxuICB0aGF0IGNhbiBoYXZlIGNoaWxkcmVuIChidXQgbWF5IG5vdCkuICBjaGlsZHJlbiBtdXN0IGJlIGEgZm4gb2Ygb25lXFxuICBhcmcgdGhhdCByZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIGNoaWxkcmVuLiBXaWxsIG9ubHkgYmUgY2FsbGVkIG9uXFxuICBub2RlcyBmb3Igd2hpY2ggYnJhbmNoPyByZXR1cm5zIHRydWUuIFJvb3QgaXMgdGhlIHJvb3Qgbm9kZSBvZiB0aGVcXG4gIHRyZWUuXCJcclxuIFticmFuY2g/IGNoaWxkcmVuIHJvb3RdXHJcbiAobGV0XHJcbiAgW3dhbGtcclxuICAgKGZuXHJcbiAgICB3YWxrXHJcbiAgICBbbm9kZV1cclxuICAgIChsYXp5LXNlcVxyXG4gICAgIChjb25zIG5vZGUgKHdoZW4gKGJyYW5jaD8gbm9kZSkgKG1hcGNhdCB3YWxrIChjaGlsZHJlbiBub2RlKSkpKSkpXVxyXG4gICh3YWxrIHJvb3QpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLXJlbWFpbmRlci1pbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLXJlbWFpbmRlci1pbnRcclxuIFt4IG5dXHJcbiAoY2xqcy5jb3JlL3VuY2hlY2tlZC1yZW1haW5kZXItaW50IHggbikpXHJcbiJ9IHs6c3ltIHV1aWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm4gdXVpZCBbc10gKGFzc2VydCAoc3RyaW5nPyBzKSkgKFVVSUQuICgudG9Mb3dlckNhc2UgcykgbmlsKSlcclxuIn0gezpzeW0gc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvbiB0aGUgY29sbGVjdGlvbi4gSWYgdGhlIGNvbGxlY3Rpb24gaXNcbiAgZW1wdHksIHJldHVybnMgbmlsLiAgKHNlcSBuaWwpIHJldHVybnMgbmlsLiBzZXEgYWxzbyB3b3JrcyBvblxuICBTdHJpbmdzLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXFcclxuIFwiUmV0dXJucyBhIHNlcSBvbiB0aGUgY29sbGVjdGlvbi4gSWYgdGhlIGNvbGxlY3Rpb24gaXNcXG4gIGVtcHR5LCByZXR1cm5zIG5pbC4gIChzZXEgbmlsKSByZXR1cm5zIG5pbC4gc2VxIGFsc28gd29ya3Mgb25cXG4gIFN0cmluZ3MuXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoY29uZFxyXG4gICAoaW1wbGVtZW50cz8gSVNlcWFibGUgY29sbClcclxuICAgKC1zZXEgY29sbClcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAod2hlbi1ub3QgKHplcm8/IChhbGVuZ3RoIGNvbGwpKSAoSW5kZXhlZFNlcS4gY29sbCAwIG5pbCkpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgICh3aGVuLW5vdCAoemVybz8gKC4tbGVuZ3RoIGNvbGwpKSAoSW5kZXhlZFNlcS4gY29sbCAwIG5pbCkpXHJcbiAgIChqcy1pdGVyYWJsZT8gY29sbClcclxuICAgKGVzNi1pdGVyYXRvci1zZXEgKC5jYWxsIChnb2JqZWN0L2dldCBjb2xsIElURVJfU1lNQk9MKSBjb2xsKSlcclxuICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElTZXFhYmxlIGNvbGwpXHJcbiAgICgtc2VxIGNvbGwpXHJcbiAgIDplbHNlXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgY29sbCBcIiBpcyBub3QgSVNlcWFibGVcIikpKSkpKVxyXG4ifSB7OnN5bSByZWR1Y2UsIDptZXRhIHs6ZG9jICJmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDIgYXJndW1lbnRzLiBJZiB2YWwgaXMgbm90IHN1cHBsaWVkLFxuICByZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byB0aGUgZmlyc3QgMiBpdGVtcyBpbiBjb2xsLCB0aGVuXG4gIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAzcmQgaXRlbSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vXG4gIGl0ZW1zLCBmIG11c3QgYWNjZXB0IG5vIGFyZ3VtZW50cyBhcyB3ZWxsLCBhbmQgcmVkdWNlIHJldHVybnMgdGhlXG4gIHJlc3VsdCBvZiBjYWxsaW5nIGYgd2l0aCBubyBhcmd1bWVudHMuICBJZiBjb2xsIGhhcyBvbmx5IDEgaXRlbSwgaXRcbiAgaXMgcmV0dXJuZWQgYW5kIGYgaXMgbm90IGNhbGxlZC4gIElmIHZhbCBpcyBzdXBwbGllZCwgcmV0dXJucyB0aGVcbiAgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdmFsIGFuZCB0aGUgZmlyc3QgaXRlbSBpbiBjb2xsLCB0aGVuXG4gIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vXG4gIGl0ZW1zLCByZXR1cm5zIHZhbCBhbmQgZiBpcyBub3QgY2FsbGVkLiIsIDphcmdsaXN0cyBbW2YgY29sbF0gW2YgdmFsIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2VcclxuIFwiZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAyIGFyZ3VtZW50cy4gSWYgdmFsIGlzIG5vdCBzdXBwbGllZCxcXG4gIHJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHRoZSBmaXJzdCAyIGl0ZW1zIGluIGNvbGwsIHRoZW5cXG4gIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAzcmQgaXRlbSwgZXRjLiBJZiBjb2xsIGNvbnRhaW5zIG5vXFxuICBpdGVtcywgZiBtdXN0IGFjY2VwdCBubyBhcmd1bWVudHMgYXMgd2VsbCwgYW5kIHJlZHVjZSByZXR1cm5zIHRoZVxcbiAgcmVzdWx0IG9mIGNhbGxpbmcgZiB3aXRoIG5vIGFyZ3VtZW50cy4gIElmIGNvbGwgaGFzIG9ubHkgMSBpdGVtLCBpdFxcbiAgaXMgcmV0dXJuZWQgYW5kIGYgaXMgbm90IGNhbGxlZC4gIElmIHZhbCBpcyBzdXBwbGllZCwgcmV0dXJucyB0aGVcXG4gIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHZhbCBhbmQgdGhlIGZpcnN0IGl0ZW0gaW4gY29sbCwgdGhlblxcbiAgYXBwbHlpbmcgZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmIGNvbGwgY29udGFpbnMgbm9cXG4gIGl0ZW1zLCByZXR1cm5zIHZhbCBhbmQgZiBpcyBub3QgY2FsbGVkLlwiXHJcbiAoW2YgY29sbF1cclxuICAoY29uZFxyXG4gICAoaW1wbGVtZW50cz8gSVJlZHVjZSBjb2xsKVxyXG4gICAoLXJlZHVjZSBjb2xsIGYpXHJcbiAgIChhcnJheT8gY29sbClcclxuICAgKGFycmF5LXJlZHVjZSBjb2xsIGYpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgIChhcnJheS1yZWR1Y2UgY29sbCBmKVxyXG4gICAobmF0aXZlLXNhdGlzZmllcz8gSVJlZHVjZSBjb2xsKVxyXG4gICAoLXJlZHVjZSBjb2xsIGYpXHJcbiAgIChpdGVyYWJsZT8gY29sbClcclxuICAgKGl0ZXItcmVkdWNlIGNvbGwgZilcclxuICAgOmVsc2VcclxuICAgKHNlcS1yZWR1Y2UgZiBjb2xsKSkpXHJcbiAoW2YgdmFsIGNvbGxdXHJcbiAgKGNvbmRcclxuICAgKGltcGxlbWVudHM/IElSZWR1Y2UgY29sbClcclxuICAgKC1yZWR1Y2UgY29sbCBmIHZhbClcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAoYXJyYXktcmVkdWNlIGNvbGwgZiB2YWwpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgIChhcnJheS1yZWR1Y2UgY29sbCBmIHZhbClcclxuICAgKG5hdGl2ZS1zYXRpc2ZpZXM/IElSZWR1Y2UgY29sbClcclxuICAgKC1yZWR1Y2UgY29sbCBmIHZhbClcclxuICAgKGl0ZXJhYmxlPyBjb2xsKVxyXG4gICAoaXRlci1yZWR1Y2UgY29sbCBmIHZhbClcclxuICAgOmVsc2VcclxuICAgKHNlcS1yZWR1Y2UgZiB2YWwgY29sbCkpKSlcclxuIn0gezpzeW0gSVVVSUQsIDptZXRhIHs6ZG9jICJBIG1hcmtlciBwcm90b2NvbCBmb3IgVVVJRHMifSwgOm1ldGhvZHMgKCl9IHs6c3ltIElOSVQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIElOSVQgI2pzIHt9KVxyXG4ifSB7OnN5bSBmaW5kLW5zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZXNwYWNlIG5hbWVkIGJ5IHRoZSBzeW1ib2wgb3IgbmlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gIEJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyAoW25zXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1uc1xyXG4gXCJSZXR1cm5zIHRoZSBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbCBvciBuaWwgaWYgaXQgZG9lc24ndCBleGlzdC5cXG4gIEJvb3RzdHJhcCBvbmx5LlwiXHJcbiBbbnNdXHJcbiAod2hlbiAobmlsPyBOU19DQUNIRSkgKHNldCEgTlNfQ0FDSEUgKGF0b20ge30pKSlcclxuIChsZXRcclxuICBbdGhlLW5zIChnZXQgQE5TX0NBQ0hFIG5zKV1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IHRoZS1ucylcclxuICAgdGhlLW5zXHJcbiAgIChsZXRcclxuICAgIFtucy1vYmogKGZpbmQtbnMtb2JqIG5zKV1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChuaWw/IG5zLW9iailcclxuICAgICAobGV0XHJcbiAgICAgIFtuZXctbnMgKGNyZWF0ZS1ucyBucyBucy1vYmopXVxyXG4gICAgICAoc3dhcCEgTlNfQ0FDSEUgYXNzb2MgbnMgbmV3LW5zKVxyXG4gICAgICBuZXctbnMpKSkpKSlcclxuIn0gezpzeW0gY29udGFpbnM/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGtleSBpcyBwcmVzZW50IGluIHRoZSBnaXZlbiBjb2xsZWN0aW9uLCBvdGhlcndpc2VcbiAgcmV0dXJucyBmYWxzZS4gIE5vdGUgdGhhdCBmb3IgbnVtZXJpY2FsbHkgaW5kZXhlZCBjb2xsZWN0aW9ucyBsaWtlXG4gIHZlY3RvcnMgYW5kIGFycmF5cywgdGhpcyB0ZXN0cyBpZiB0aGUgbnVtZXJpYyBrZXkgaXMgd2l0aGluIHRoZVxuICByYW5nZSBvZiBpbmRleGVzLiAnY29udGFpbnM/JyBvcGVyYXRlcyBjb25zdGFudCBvciBsb2dhcml0aG1pYyB0aW1lO1xuICBpdCB3aWxsIG5vdCBwZXJmb3JtIGEgbGluZWFyIHNlYXJjaCBmb3IgYSB2YWx1ZS4gIFNlZSBhbHNvICdzb21lJy4iLCA6YXJnbGlzdHMgKFtjb2xsIHZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb250YWlucz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGtleSBpcyBwcmVzZW50IGluIHRoZSBnaXZlbiBjb2xsZWN0aW9uLCBvdGhlcndpc2VcXG4gIHJldHVybnMgZmFsc2UuICBOb3RlIHRoYXQgZm9yIG51bWVyaWNhbGx5IGluZGV4ZWQgY29sbGVjdGlvbnMgbGlrZVxcbiAgdmVjdG9ycyBhbmQgYXJyYXlzLCB0aGlzIHRlc3RzIGlmIHRoZSBudW1lcmljIGtleSBpcyB3aXRoaW4gdGhlXFxuICByYW5nZSBvZiBpbmRleGVzLiAnY29udGFpbnM/JyBvcGVyYXRlcyBjb25zdGFudCBvciBsb2dhcml0aG1pYyB0aW1lO1xcbiAgaXQgd2lsbCBub3QgcGVyZm9ybSBhIGxpbmVhciBzZWFyY2ggZm9yIGEgdmFsdWUuICBTZWUgYWxzbyAnc29tZScuXCJcclxuIFtjb2xsIHZdXHJcbiAoaWZcclxuICAoaWRlbnRpY2FsPyAoZ2V0IGNvbGwgdiBsb29rdXAtc2VudGluZWwpIGxvb2t1cC1zZW50aW5lbClcclxuICBmYWxzZVxyXG4gIHRydWUpKVxyXG4ifSB7OnN5bSBldmVyeT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBldmVyeSB4IGluIGNvbGwsIGVsc2VcbiAgZmFsc2UuIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXZlcnk/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGV2ZXJ5IHggaW4gY29sbCwgZWxzZVxcbiAgZmFsc2UuXCJcclxuIFtwcmVkIGNvbGxdXHJcbiAoY29uZFxyXG4gIChuaWw/IChzZXEgY29sbCkpXHJcbiAgdHJ1ZVxyXG4gIChwcmVkIChmaXJzdCBjb2xsKSlcclxuICAocmVjdXIgcHJlZCAobmV4dCBjb2xsKSlcclxuICA6ZWxzZVxyXG4gIGZhbHNlKSlcclxuIn0gezpzeW0ga2VlcC1pbmRleGVkLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vbi1uaWwgcmVzdWx0cyBvZiAoZiBpbmRleCBpdGVtKS4gTm90ZSxcbiAgdGhpcyBtZWFucyBmYWxzZSByZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW5jbHVkZWQuICBmIG11c3QgYmUgZnJlZSBvZlxuICBzaWRlLWVmZmVjdHMuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXNcbiAgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtlZXAtaW5kZXhlZFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgbm9uLW5pbCByZXN1bHRzIG9mIChmIGluZGV4IGl0ZW0pLiBOb3RlLFxcbiAgdGhpcyBtZWFucyBmYWxzZSByZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW5jbHVkZWQuICBmIG11c3QgYmUgZnJlZSBvZlxcbiAgc2lkZS1lZmZlY3RzLiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzXFxuICBwcm92aWRlZC5cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtpYSAodm9sYXRpbGUhIC0xKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2kgKHZzd2FwISBpYSBpbmMpIHYgKGYgaSBpbnB1dCldXHJcbiAgICAgICAoaWYgKG5pbD8gdikgcmVzdWx0IChyZiByZXN1bHQgdikpKSkpKSkpXHJcbiAoW2YgY29sbF1cclxuICAobGV0Zm5cclxuICAgWyhrZWVwaVxyXG4gICAgIFtpZHggY29sbF1cclxuICAgICAobGF6eS1zZXFcclxuICAgICAgKHdoZW4tbGV0XHJcbiAgICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2MgKGNodW5rLWZpcnN0IHMpIHNpemUgKGNvdW50IGMpIGIgKGNodW5rLWJ1ZmZlciBzaXplKV1cclxuICAgICAgICAgKGRvdGltZXNcclxuICAgICAgICAgIFtpIHNpemVdXHJcbiAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgW3ggKGYgKCsgaWR4IGkpICgtbnRoIGMgaSkpXVxyXG4gICAgICAgICAgICh3aGVuLW5vdCAobmlsPyB4KSAoY2h1bmstYXBwZW5kIGIgeCkpKSlcclxuICAgICAgICAgKGNodW5rLWNvbnMgKGNodW5rIGIpIChrZWVwaSAoKyBpZHggc2l6ZSkgKGNodW5rLXJlc3QgcykpKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFt4IChmIGlkeCAoZmlyc3QgcykpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChuaWw/IHgpXHJcbiAgICAgICAgICAoa2VlcGkgKGluYyBpZHgpIChyZXN0IHMpKVxyXG4gICAgICAgICAgKGNvbnMgeCAoa2VlcGkgKGluYyBpZHgpIChyZXN0IHMpKSkpKSkpKSldXHJcbiAgIChrZWVwaSAwIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIHN1YnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgcyBiZWdpbm5pbmcgYXQgc3RhcnQgaW5jbHVzaXZlLCBhbmQgZW5kaW5nXG4gIGF0IGVuZCAoZGVmYXVsdHMgdG8gbGVuZ3RoIG9mIHN0cmluZyksIGV4Y2x1c2l2ZS4iLCA6YXJnbGlzdHMgW1tzIHN0YXJ0XSBbcyBzdGFydCBlbmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdWJzXHJcbiBcIlJldHVybnMgdGhlIHN1YnN0cmluZyBvZiBzIGJlZ2lubmluZyBhdCBzdGFydCBpbmNsdXNpdmUsIGFuZCBlbmRpbmdcXG4gIGF0IGVuZCAoZGVmYXVsdHMgdG8gbGVuZ3RoIG9mIHN0cmluZyksIGV4Y2x1c2l2ZS5cIlxyXG4gKFtzIHN0YXJ0XSAoLnN1YnN0cmluZyBzIHN0YXJ0KSlcclxuIChbcyBzdGFydCBlbmRdICguc3Vic3RyaW5nIHMgc3RhcnQgZW5kKSkpXHJcbiJ9IHs6c3ltIGpzLXN5bWJvbD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhbiBpbnN0YW5jZSBvZiBTeW1ib2wiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtc3ltYm9sP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcIlxyXG4gW3hdXHJcbiAob3JcclxuICAoaWRlbnRpY2FsPyAoZ29vZy90eXBlT2YgeCkgXCJzeW1ib2xcIilcclxuICAoYW5kIChleGlzdHM/IGpzL1N5bWJvbCkgKGluc3RhbmNlPyBqcy9TeW1ib2wgeCkpKSlcclxuIn0gezpzeW0gSUZpbmQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgaW1wbGVtZW50aW5nIGVudHJ5IGZpbmRpbmcgaW4gY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtZmluZCl9IHs6c3ltIHNldCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXQgb2YgdGhlIGRpc3RpbmN0IGVsZW1lbnRzIG9mIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldFxyXG4gXCJSZXR1cm5zIGEgc2V0IG9mIHRoZSBkaXN0aW5jdCBlbGVtZW50cyBvZiBjb2xsLlwiXHJcbiBbY29sbF1cclxuIChpZlxyXG4gIChzZXQ/IGNvbGwpXHJcbiAgKHdpdGgtbWV0YSBjb2xsIG5pbClcclxuICAobGV0XHJcbiAgIFtpbiAoc2VxIGNvbGwpXVxyXG4gICAoY29uZFxyXG4gICAgKG5pbD8gaW4pXHJcbiAgICAje31cclxuICAgIChhbmQgKGluc3RhbmNlPyBJbmRleGVkU2VxIGluKSAoemVybz8gKC4taSBpbikpKVxyXG4gICAgKC5jcmVhdGVBc0lmQnlBc3NvYyBQZXJzaXN0ZW50SGFzaFNldCAoLi1hcnIgaW4pKVxyXG4gICAgOmVsc2VcclxuICAgIChsb29wXHJcbiAgICAgW2luIGluIG91dCAoLWFzLXRyYW5zaWVudCAje30pXVxyXG4gICAgIChpZi1ub3RcclxuICAgICAgKG5pbD8gaW4pXHJcbiAgICAgIChyZWN1ciAobmV4dCBpbikgKC1jb25qISBvdXQgKC1maXJzdCBpbikpKVxyXG4gICAgICAocGVyc2lzdGVudCEgb3V0KSkpKSkpKVxyXG4ifSB7OnN5bSBNT0RVTEVfVVJJUywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTU9EVUxFX1VSSVMgbmlsKVxyXG4ifSB7OnN5bSB0YWtlLWxhc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgc2VxIG9mIHRoZSBsYXN0IG4gaXRlbXMgaW4gY29sbC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZVxuICBvZiBjb2xsIG1heSBiZSBubyBiZXR0ZXIgdGhhbiBsaW5lYXIgdGltZS4gIEZvciB2ZWN0b3JzLCBzZWUgYWxzbyBzdWJ2ZWMuIiwgOmFyZ2xpc3RzIChbbiBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFrZS1sYXN0XHJcbiBcIlJldHVybnMgYSBzZXEgb2YgdGhlIGxhc3QgbiBpdGVtcyBpbiBjb2xsLiAgRGVwZW5kaW5nIG9uIHRoZSB0eXBlXFxuICBvZiBjb2xsIG1heSBiZSBubyBiZXR0ZXIgdGhhbiBsaW5lYXIgdGltZS4gIEZvciB2ZWN0b3JzLCBzZWUgYWxzbyBzdWJ2ZWMuXCJcclxuIFtuIGNvbGxdXHJcbiAobG9vcFxyXG4gIFtzIChzZXEgY29sbCkgbGVhZCAoc2VxIChkcm9wIG4gY29sbCkpXVxyXG4gIChpZiBsZWFkIChyZWN1ciAobmV4dCBzKSAobmV4dCBsZWFkKSkgcykpKVxyXG4ifSB7OnN5bSBiaXQtc2V0LCA6bWV0YSB7OmRvYyAiU2V0IGJpdCBhdCBpbmRleCBuIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmbiBiaXQtc2V0IFwiU2V0IGJpdCBhdCBpbmRleCBuXCIgW3ggbl0gKGNsanMuY29yZS9iaXQtc2V0IHggbikpXHJcbiJ9IHs6c3ltIHN0cmluZy1oYXNoLWNhY2hlLWNvdW50LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCAwKVxyXG4ifSB7OnN5bSBxdWFsaWZpZWQta2V5d29yZD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEga2V5d29yZCB3aXRoIGEgbmFtZXNwYWNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHF1YWxpZmllZC1rZXl3b3JkP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEga2V5d29yZCB3aXRoIGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGJvb2xlYW4gKGFuZCAoa2V5d29yZD8geCkgKG5hbWVzcGFjZSB4KSB0cnVlKSkpXHJcbiJ9IHs6c3ltIC13aXRoLW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIHZhbHVlIG9mIG8gYW5kIG1ldGFkYXRhIG1ldGEgYWRkZWQgdG8gaXQuIiwgOmFyZ2xpc3RzIChbbyBtZXRhXSl9LCA6cHJvdG9jb2wgSVdpdGhNZXRhfSB7OnN5bSBidXRsYXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc2VxIG9mIGFsbCBidXQgdGhlIGxhc3QgaXRlbSBpbiBjb2xsLCBpbiBsaW5lYXIgdGltZSIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBidXRsYXN0XHJcbiBcIlJldHVybiBhIHNlcSBvZiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW0gaW4gY29sbCwgaW4gbGluZWFyIHRpbWVcIlxyXG4gW3NdXHJcbiAobG9vcFxyXG4gIFtyZXQgW10gcyBzXVxyXG4gIChpZiAobmV4dCBzKSAocmVjdXIgKGNvbmogcmV0IChmaXJzdCBzKSkgKG5leHQgcykpIChzZXEgcmV0KSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtc3VidHJhY3QtaW50LCA6bWV0YSB7OmRvYyAiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xuICB0aGUgeXMgZnJvbSB4IGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtc3VidHJhY3QtaW50XHJcbiBcIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cIlxyXG4gKFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgeCkpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtc3VidHJhY3QtaW50IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZVxyXG4gICB1bmNoZWNrZWQtc3VidHJhY3QtaW50XHJcbiAgIChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0LWludCB4IHkpXHJcbiAgIG1vcmUpKSlcclxuIn0gezpzeW0gLWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgY29sbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUl0ZXJhYmxlfSB7OnN5bSAqcHJpbnQtbmFtZXNwYWNlLW1hcHMqLCA6bWV0YSB7OmRvYyAiKnByaW50LW5hbWVzcGFjZS1tYXBzKiBjb250cm9scyB3aGV0aGVyIHRoZSBwcmludGVyIHdpbGwgcHJpbnRcbiAgbmFtZXNwYWNlIG1hcCBsaXRlcmFsIHN5bnRheC5cblxuICBEZWZhdWx0cyB0byBmYWxzZSwgYnV0IHRoZSBSRVBMIGJpbmRzIGl0IHRvIHRydWUuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LW5hbWVzcGFjZS1tYXBzKiBmYWxzZSlcclxuIn0gezpzeW0gdGFrZS1udGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgZXZlcnkgbnRoIGl0ZW0gaW4gY29sbC4gIFJldHVybnMgYSBzdGF0ZWZ1bFxuICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tuXSBbbiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gdGFrZS1udGhcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIG9mIGV2ZXJ5IG50aCBpdGVtIGluIGNvbGwuICBSZXR1cm5zIGEgc3RhdGVmdWxcXG4gIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW25dXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbaWEgKHZvbGF0aWxlISAtMSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtpICh2c3dhcCEgaWEgaW5jKV1cclxuICAgICAgIChpZiAoemVybz8gKHJlbSBpIG4pKSAocmYgcmVzdWx0IGlucHV0KSByZXN1bHQpKSkpKSkpXHJcbiAoW24gY29sbF1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAoY29ucyAoZmlyc3QgcykgKHRha2UtbnRoIG4gKGRyb3AgbiBzKSkpKSkpKVxyXG4ifSB7OnN5bSBmaXJzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uIENhbGxzIHNlcSBvbiBpdHNcbiAgYXJndW1lbnQuIElmIGNvbGwgaXMgbmlsLCByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmlyc3RcclxuIFwiUmV0dXJucyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi4gQ2FsbHMgc2VxIG9uIGl0c1xcbiAgYXJndW1lbnQuIElmIGNvbGwgaXMgbmlsLCByZXR1cm5zIG5pbC5cIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChpZlxyXG4gICAoaW1wbGVtZW50cz8gSVNlcSBjb2xsKVxyXG4gICAoLWZpcnN0IGNvbGwpXHJcbiAgIChsZXQgW3MgKHNlcSBjb2xsKV0gKHdoZW4tbm90IChuaWw/IHMpICgtZmlyc3QgcykpKSkpKVxyXG4ifSB7OnN5bSBuYXRpdmUtc2F0aXNmaWVzPywgOm1ldGEgezpkb2MgIkludGVybmFsIC0gZG8gbm90IHVzZSEiLCA6YXJnbGlzdHMgKFtwIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuYXRpdmUtc2F0aXNmaWVzP1xyXG4gXCJJbnRlcm5hbCAtIGRvIG5vdCB1c2UhXCJcclxuIFtwIHhdXHJcbiAobGV0XHJcbiAgW3ggKGlmIChuaWw/IHgpIG5pbCB4KV1cclxuICAoY29uZFxyXG4gICAodW5jaGVja2VkLWdldCBwIChnb29nL3R5cGVPZiB4KSlcclxuICAgdHJ1ZVxyXG4gICAodW5jaGVja2VkLWdldCBwIFwiX1wiKVxyXG4gICB0cnVlXHJcbiAgIDplbHNlXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIHNlcT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiBzIHNhdGlzZmllcyBJU2VxIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlcT9cclxuIFwiUmV0dXJuIHRydWUgaWYgcyBzYXRpc2ZpZXMgSVNlcVwiXHJcbiBbc11cclxuIChpZiAobmlsPyBzKSBmYWxzZSAoc2F0aXNmaWVzPyBJU2VxIHMpKSlcclxuIn0gezpzeW0gLXNvcnRlZC1zZXEtZnJvbSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzb3J0ZWQgc2VxIGZyb20gY29sbCBpbiBlaXRoZXIgYXNjZW5kaW5nIG9yIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAgIElmIGFzY2VuZGluZyBpcyB0cnVlLCB0aGUgcmVzdWx0IHNob3VsZCBjb250YWluIGFsbCBpdGVtcyB3aGljaCBhcmUgPiBvciA+PVxuICAgICB0aGFuIGsuIElmIGFzY2VuZGluZyBpcyBmYWxzZSwgdGhlIHJlc3VsdCBzaG91bGQgY29udGFpbiBhbGwgaXRlbXMgd2hpY2hcbiAgICAgYXJlIDwgb3IgPD0gdGhhbiBrLCBlLmcuXG4gICAgICgtc29ydGVkLXNlcS1mcm9tIChzb3J0ZWQtc2V0IDEgMiAzIDQgNSkgMyB0cnVlKSA9PiAoMyA0IDUpXG4gICAgICgtc29ydGVkLXNlcS1mcm9tIChzb3J0ZWQtc2V0IDEgMiAzIDQgNSkgMyBmYWxzZSkgPT4gKDMgMiAxKSIsIDphcmdsaXN0cyAoW2NvbGwgayBhc2NlbmRpbmc/XSl9LCA6cHJvdG9jb2wgSVNvcnRlZH0gezpzeW0gcHJpbnRsbi1zdHIsIDptZXRhIHs6ZG9jICJwcmludGxuIHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXQiLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludGxuLXN0clxyXG4gXCJwcmludGxuIHRvIGEgc3RyaW5nLCByZXR1cm5pbmcgaXRcIlxyXG4gWyYgb2Jqc11cclxuIChwcm4tc3RyLXdpdGgtb3B0cyBvYmpzIChhc3NvYyAocHItb3B0cykgOnJlYWRhYmx5IGZhbHNlKSkpXHJcbiJ9IHs6c3ltIGluc3QtbXMsIDptZXRhIHs6ZG9jICJSZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBHTVQiLCA6YXJnbGlzdHMgKFtpbnN0XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5zdC1tc1xyXG4gXCJSZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBHTVRcIlxyXG4gW2luc3RdXHJcbiAoaW5zdC1tcyogaW5zdCkpXHJcbiJ9IHs6c3ltIGl0ZXJhdGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB4LCAoZiB4KSwgKGYgKGYgeCkpIGV0Yy4gZiBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzIiwgOmFyZ2xpc3RzIChbZiB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaXRlcmF0ZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB4LCAoZiB4KSwgKGYgKGYgeCkpIGV0Yy4gZiBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzXCJcclxuIHs6YWRkZWQgXCIxLjBcIn1cclxuIFtmIHhdXHJcbiAoSXRlcmF0ZS4gbmlsIGYgbmlsIHggbmlsKSlcclxuIn0gezpzeW0gLWVtcHR5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIG9mIHRoZSBzYW1lIGNhdGVnb3J5IGFzIGNvbGwuIFVzZWRcbiAgICAgYnkgY2xqcy5jb3JlL2VtcHR5LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJRW1wdHlhYmxlQ29sbGVjdGlvbn0gezpzeW0gbmV3bGluZSwgOm1ldGEgezpkb2MgIlByaW50cyBhIG5ld2xpbmUgdXNpbmcgKnByaW50LWZuKiIsIDphcmdsaXN0cyBbW10gW29wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZXdsaW5lXHJcbiBcIlByaW50cyBhIG5ld2xpbmUgdXNpbmcgKnByaW50LWZuKlwiXHJcbiAoW10gKG5ld2xpbmUgbmlsKSlcclxuIChbb3B0c11cclxuICAoc3RyaW5nLXByaW50IFwiXFxuXCIpXHJcbiAgKHdoZW4gKGdldCBvcHRzIDpmbHVzaC1vbi1uZXdsaW5lKSAoZmx1c2gpKSkpXHJcbiJ9IHs6c3ltIElMb29rdXAsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgbG9va2luZyB1cCBhIHZhbHVlIGluIGEgZGF0YSBzdHJ1Y3R1cmUuIn0sIDptZXRob2RzICgtbG9va3VwKX0gezpzeW0gLWNodW5rZWQtcmVzdCwgOm1ldGEgezpkb2MgIlJldHVybiBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aCB0aGUgZmlyc3QgY2h1bmsgcmVtb3ZlZC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSUNodW5rZWRTZXF9IHs6c3ltIHdyaXRlLWFsbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt3cml0ZXIgJiBzc10pfSwgOnNvdXJjZSAiKGRlZm4gd3JpdGUtYWxsIFt3cml0ZXIgJiBzc10gKGRvc2VxIFtzIHNzXSAoLXdyaXRlIHdyaXRlciBzKSkpXHJcbiJ9IHs6c3ltIGZuPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIGYgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIG9yIHNhdGlzZmllcyB0aGUgRm4gcHJvdG9jb2wuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZuP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiBmIGlzIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiBvciBzYXRpc2ZpZXMgdGhlIEZuIHByb3RvY29sLlwiXHJcbiBbZl1cclxuIChvciAoZ29vZy9pc0Z1bmN0aW9uIGYpIChzYXRpc2ZpZXM/IEZuIGYpKSlcclxuIn0gezpzeW0gLXByZWZlci1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWYgZGlzcGF0Y2gtdmFsIGRpc3BhdGNoLXZhbC15XSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIC1hc3NvYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGggYSBtYXBwaW5nIGZyb20ga2V5IGsgdG9cbiAgICAgdmFsdWUgdiBhZGRlZCB0byBpdC4iLCA6YXJnbGlzdHMgKFtjb2xsIGsgdl0pfSwgOnByb3RvY29sIElBc3NvY2lhdGl2ZX0gezpzeW0gZG9hbGwsIDptZXRhIHs6ZG9jICJXaGVuIGxhenkgc2VxdWVuY2VzIGFyZSBwcm9kdWNlZCB2aWEgZnVuY3Rpb25zIHRoYXQgaGF2ZSBzaWRlXG4gIGVmZmVjdHMsIGFueSBlZmZlY3RzIG90aGVyIHRoYW4gdGhvc2UgbmVlZGVkIHRvIHByb2R1Y2UgdGhlIGZpcnN0XG4gIGVsZW1lbnQgaW4gdGhlIHNlcSBkbyBub3Qgb2NjdXIgdW50aWwgdGhlIHNlcSBpcyBjb25zdW1lZC4gZG9hbGwgY2FuXG4gIGJlIHVzZWQgdG8gZm9yY2UgYW55IGVmZmVjdHMuIFdhbGtzIHRocm91Z2ggdGhlIHN1Y2Nlc3NpdmUgbmV4dHMgb2ZcbiAgdGhlIHNlcSwgcmV0YWlucyB0aGUgaGVhZCBhbmQgcmV0dXJucyBpdCwgdGh1cyBjYXVzaW5nIHRoZSBlbnRpcmVcbiAgc2VxIHRvIHJlc2lkZSBpbiBtZW1vcnkgYXQgb25lIHRpbWUuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW24gY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvYWxsXHJcbiBcIldoZW4gbGF6eSBzZXF1ZW5jZXMgYXJlIHByb2R1Y2VkIHZpYSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNpZGVcXG4gIGVmZmVjdHMsIGFueSBlZmZlY3RzIG90aGVyIHRoYW4gdGhvc2UgbmVlZGVkIHRvIHByb2R1Y2UgdGhlIGZpcnN0XFxuICBlbGVtZW50IGluIHRoZSBzZXEgZG8gbm90IG9jY3VyIHVudGlsIHRoZSBzZXEgaXMgY29uc3VtZWQuIGRvYWxsIGNhblxcbiAgYmUgdXNlZCB0byBmb3JjZSBhbnkgZWZmZWN0cy4gV2Fsa3MgdGhyb3VnaCB0aGUgc3VjY2Vzc2l2ZSBuZXh0cyBvZlxcbiAgdGhlIHNlcSwgcmV0YWlucyB0aGUgaGVhZCBhbmQgcmV0dXJucyBpdCwgdGh1cyBjYXVzaW5nIHRoZSBlbnRpcmVcXG4gIHNlcSB0byByZXNpZGUgaW4gbWVtb3J5IGF0IG9uZSB0aW1lLlwiXHJcbiAoW2NvbGxdIChkb3J1biBjb2xsKSBjb2xsKVxyXG4gKFtuIGNvbGxdIChkb3J1biBuIGNvbGwpIGNvbGwpKVxyXG4ifSB7OnN5bSBrZXl3b3JkLWlkZW50aWNhbD8sIDptZXRhIHs6ZG9jICJFZmZpY2llbnQgdGVzdCB0byBkZXRlcm1pbmUgdGhhdCB0d28ga2V5d29yZHMgYXJlIGlkZW50aWNhbC4iLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXl3b3JkLWlkZW50aWNhbD9cclxuIFwiRWZmaWNpZW50IHRlc3QgdG8gZGV0ZXJtaW5lIHRoYXQgdHdvIGtleXdvcmRzIGFyZSBpZGVudGljYWwuXCJcclxuIFt4IHldXHJcbiAoaWZcclxuICAoaWRlbnRpY2FsPyB4IHkpXHJcbiAgdHJ1ZVxyXG4gIChpZlxyXG4gICAoYW5kIChrZXl3b3JkPyB4KSAoa2V5d29yZD8geSkpXHJcbiAgIChpZGVudGljYWw/ICguLWZxbiB4KSAoLi1mcW4geSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltICpwcmludC1lcnItZm4qLCA6bWV0YSB7OmRvYyAiRWFjaCBydW50aW1lIGVudmlyb25tZW50IHByb3ZpZGVzIGEgZGlmZmVyZW50IHdheSB0byBwcmludCBlcnJvciBvdXRwdXQuXG4gIFdoYXRldmVyIGZ1bmN0aW9uICpwcmludC1lcnItZm4qIGlzIGJvdW5kIHRvIHdpbGwgYmUgcGFzc2VkIGFueVxuICBTdHJpbmdzIHdoaWNoIHNob3VsZCBiZSBwcmludGVkLiJ9LCA6c291cmNlICIoZGVmb25jZSAqcHJpbnQtZXJyLWZuKiBuaWwpXHJcbiJ9IHs6c3ltIHByZWZlcnMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm5zIGEgbWFwIG9mIHByZWZlcnJlZCB2YWx1ZSAtPiBzZXQgb2Ygb3RoZXIgdmFsdWVzIiwgOmFyZ2xpc3RzIChbbXVsdGlmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZWZlcnNcclxuIFwiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJucyBhIG1hcCBvZiBwcmVmZXJyZWQgdmFsdWUgLT4gc2V0IG9mIG90aGVyIHZhbHVlc1wiXHJcbiBbbXVsdGlmbl1cclxuICgtcHJlZmVycyBtdWx0aWZuKSlcclxuIn0gezpzeW0gLWpzLT5jbGosIDptZXRhIHs6ZG9jICJUcmFuc2Zvcm1zIEphdmFTY3JpcHQgdmFsdWVzIHRvIENsb2p1cmUiLCA6YXJnbGlzdHMgKFt4IG9wdGlvbnNdKX0sIDpwcm90b2NvbCBJRW5jb2RlQ2xvanVyZX0gezpzeW0gZGVkdXBlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgcmVtb3ZpbmcgY29uc2VjdXRpdmUgZHVwbGljYXRlcyBpbiBjb2xsLlxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbXSBbY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZHVwZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSByZW1vdmluZyBjb25zZWN1dGl2ZSBkdXBsaWNhdGVzIGluIGNvbGwuXFxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFtwYSAodm9sYXRpbGUhIDpjbGpzLmNvcmUvbm9uZSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtwcmlvciBAcGFdXHJcbiAgICAgICAodnJlc2V0ISBwYSBpbnB1dClcclxuICAgICAgIChpZiAoPSBwcmlvciBpbnB1dCkgcmVzdWx0IChyZiByZXN1bHQgaW5wdXQpKSkpKSkpKVxyXG4gKFtjb2xsXSAoc2VxdWVuY2UgKGRlZHVwZSkgY29sbCkpKVxyXG4ifSB7OnN5bSBkaXNzb2MsIDptZXRhIHs6ZG9jICJkaXNzb2NbaWF0ZV0uIFJldHVybnMgYSBuZXcgbWFwIG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLFxuICB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBtYXBwaW5nIGZvciBrZXkocykuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW2NvbGwga10gW2NvbGwgayAmIGtzXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzc29jXHJcbiBcImRpc3NvY1tpYXRlXS4gUmV0dXJucyBhIG5ldyBtYXAgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsXFxuICB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBtYXBwaW5nIGZvciBrZXkocykuXCJcclxuIChbY29sbF0gY29sbClcclxuIChbY29sbCBrXSAod2hlbi1ub3QgKG5pbD8gY29sbCkgKC1kaXNzb2MgY29sbCBrKSkpXHJcbiAoW2NvbGwgayAmIGtzXVxyXG4gICh3aGVuLW5vdFxyXG4gICAobmlsPyBjb2xsKVxyXG4gICAobGV0XHJcbiAgICBbcmV0IChkaXNzb2MgY29sbCBrKV1cclxuICAgIChpZiBrcyAocmVjdXIgcmV0IChmaXJzdCBrcykgKG5leHQga3MpKSByZXQpKSkpKVxyXG4ifSB7OnN5bSBhdG9tLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBBdG9tIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiB4IGFuZCB6ZXJvIG9yXG4gIG1vcmUgb3B0aW9ucyAoaW4gYW55IG9yZGVyKTpcblxuICA6bWV0YSBtZXRhZGF0YS1tYXBcblxuICA6dmFsaWRhdG9yIHZhbGlkYXRlLWZuXG5cbiAgSWYgbWV0YWRhdGEtbWFwIGlzIHN1cHBsaWVkLCBpdCB3aWxsIGJlY29tZSB0aGUgbWV0YWRhdGEgb24gdGhlXG4gIGF0b20uIHZhbGlkYXRlLWZuIG11c3QgYmUgbmlsIG9yIGEgc2lkZS1lZmZlY3QtZnJlZSBmbiBvZiBvbmVcbiAgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRoZSBpbnRlbmRlZCBuZXcgc3RhdGUgb24gYW55IHN0YXRlXG4gIGNoYW5nZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB1bmFjY2VwdGFibGUsIHRoZSB2YWxpZGF0ZS1mbiBzaG91bGRcbiAgcmV0dXJuIGZhbHNlIG9yIHRocm93IGFuIEVycm9yLiAgSWYgZWl0aGVyIG9mIHRoZXNlIGVycm9yIGNvbmRpdGlvbnNcbiAgb2NjdXIsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBhdG9tIHdpbGwgbm90IGNoYW5nZS4iLCA6YXJnbGlzdHMgW1t4XSBbeCAmIHs6a2V5cyBbbWV0YSB2YWxpZGF0b3JdfV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGF0b21cclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBBdG9tIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiB4IGFuZCB6ZXJvIG9yXFxuICBtb3JlIG9wdGlvbnMgKGluIGFueSBvcmRlcik6XFxuXFxuICA6bWV0YSBtZXRhZGF0YS1tYXBcXG5cXG4gIDp2YWxpZGF0b3IgdmFsaWRhdGUtZm5cXG5cXG4gIElmIG1ldGFkYXRhLW1hcCBpcyBzdXBwbGllZCwgaXQgd2lsbCBiZWNvbWUgdGhlIG1ldGFkYXRhIG9uIHRoZVxcbiAgYXRvbS4gdmFsaWRhdGUtZm4gbXVzdCBiZSBuaWwgb3IgYSBzaWRlLWVmZmVjdC1mcmVlIGZuIG9mIG9uZVxcbiAgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRoZSBpbnRlbmRlZCBuZXcgc3RhdGUgb24gYW55IHN0YXRlXFxuICBjaGFuZ2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdW5hY2NlcHRhYmxlLCB0aGUgdmFsaWRhdGUtZm4gc2hvdWxkXFxuICByZXR1cm4gZmFsc2Ugb3IgdGhyb3cgYW4gRXJyb3IuICBJZiBlaXRoZXIgb2YgdGhlc2UgZXJyb3IgY29uZGl0aW9uc1xcbiAgb2NjdXIsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBhdG9tIHdpbGwgbm90IGNoYW5nZS5cIlxyXG4gKFt4XSAoQXRvbS4geCBuaWwgbmlsIG5pbCkpXHJcbiAoW3ggJiB7OmtleXMgW21ldGEgdmFsaWRhdG9yXX1dIChBdG9tLiB4IG1ldGEgdmFsaWRhdG9yIG5pbCkpKVxyXG4ifSB7OnN5bSBiaXQtc2hpZnQtcmlnaHQsIDptZXRhIHs6ZG9jICJCaXR3aXNlIHNoaWZ0IHJpZ2h0IiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gYml0LXNoaWZ0LXJpZ2h0XHJcbiBcIkJpdHdpc2Ugc2hpZnQgcmlnaHRcIlxyXG4gW3ggbl1cclxuIChjbGpzLmNvcmUvYml0LXNoaWZ0LXJpZ2h0IHggbikpXHJcbiJ9IHs6c3ltICpjbG9qdXJlc2NyaXB0LXZlcnNpb24qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2xvanVyZXNjcmlwdC12ZXJzaW9uKiBcIjEuMTAuNzY0XCIpXHJcbiJ9IHs6c3ltIC1maXJzdCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24gY29sbC4gVXNlZCBieSBjbGpzLmNvcmUvZmlyc3QuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElTZXF9IHs6c3ltIHBlZWssIDptZXRhIHs6ZG9jICJGb3IgYSBsaXN0IG9yIHF1ZXVlLCBzYW1lIGFzIGZpcnN0LCBmb3IgYSB2ZWN0b3IsIHNhbWUgYXMsIGJ1dCBtdWNoXG4gIG1vcmUgZWZmaWNpZW50IHRoYW4sIGxhc3QuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGVla1xyXG4gXCJGb3IgYSBsaXN0IG9yIHF1ZXVlLCBzYW1lIGFzIGZpcnN0LCBmb3IgYSB2ZWN0b3IsIHNhbWUgYXMsIGJ1dCBtdWNoXFxuICBtb3JlIGVmZmljaWVudCB0aGFuLCBsYXN0LiBJZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSwgcmV0dXJucyBuaWwuXCJcclxuIFtjb2xsXVxyXG4gKHdoZW4tbm90IChuaWw/IGNvbGwpICgtcGVlayBjb2xsKSkpXHJcbiJ9IHs6c3ltIElLVlJlZHVjZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhc3NvY2lhdGl2ZSB0eXBlcyB0aGF0IGNhbiByZWR1Y2UgdGhlbXNlbHZlc1xuICB2aWEgYSBmdW5jdGlvbiBvZiBrZXkgYW5kIHZhbC4gQ2FsbGVkIGJ5IGNsanMuY29yZS9yZWR1Y2Uta3YuIn0sIDptZXRob2RzICgta3YtcmVkdWNlKX0gezpzeW0gYWdldCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC9pbmRpY2VzLiBXb3JrcyBvbiBKYXZhU2NyaXB0IGFycmF5cy4iLCA6YXJnbGlzdHMgW1thcnJheSBpZHhdIFthcnJheSBpZHggJiBpZHhzXV19LCA6c291cmNlICIoZGVmblxyXG4gYWdldFxyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGUgaW5kZXgvaW5kaWNlcy4gV29ya3Mgb24gSmF2YVNjcmlwdCBhcnJheXMuXCJcclxuIChbYXJyYXkgaWR4XSAoY2xqcy5jb3JlL2FnZXQgYXJyYXkgaWR4KSlcclxuIChbYXJyYXkgaWR4ICYgaWR4c10gKGFwcGx5IGFnZXQgKGFnZXQgYXJyYXkgaWR4KSBpZHhzKSkpXHJcbiJ9IHs6c3ltIC13cml0ZSwgOm1ldGEgezpkb2MgIldyaXRlcyBzIHdpdGggd3JpdGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbd3JpdGVyIHNdKX0sIDpwcm90b2NvbCBJV3JpdGVyfSB7OnN5bSBpdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpdGVyXHJcbiBbY29sbF1cclxuIChjb25kXHJcbiAgKGl0ZXJhYmxlPyBjb2xsKVxyXG4gICgtaXRlcmF0b3IgY29sbClcclxuICAobmlsPyBjb2xsKVxyXG4gIChuaWwtaXRlcilcclxuICAoc3RyaW5nPyBjb2xsKVxyXG4gIChzdHJpbmctaXRlciBjb2xsKVxyXG4gIChhcnJheT8gY29sbClcclxuICAoYXJyYXktaXRlciBjb2xsKVxyXG4gIChzZXFhYmxlPyBjb2xsKVxyXG4gIChzZXEtaXRlciBjb2xsKVxyXG4gIDplbHNlXHJcbiAgKHRocm93IChqcy9FcnJvci4gKHN0ciBcIkNhbm5vdCBjcmVhdGUgaXRlcmF0b3IgZnJvbSBcIiBjb2xsKSkpKSlcclxuIn0gezpzeW0gbWstYm91bmQtZm4sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc2MgdGVzdCBrZXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtay1ib3VuZC1mblxyXG4gW3NjIHRlc3Qga2V5XVxyXG4gKGZuXHJcbiAgW2VdXHJcbiAgKGxldCBbY29tcCAoLWNvbXBhcmF0b3Igc2MpXSAodGVzdCAoY29tcCAoLWVudHJ5LWtleSBzYyBlKSBrZXkpIDApKSkpXHJcbiJ9IHs6c3ltIGxhc3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gdGhlIGxhc3QgaXRlbSBpbiBjb2xsLCBpbiBsaW5lYXIgdGltZSIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsYXN0XHJcbiBcIlJldHVybiB0aGUgbGFzdCBpdGVtIGluIGNvbGwsIGluIGxpbmVhciB0aW1lXCJcclxuIFtzXVxyXG4gKGxldCBbc24gKG5leHQgcyldIChpZi1ub3QgKG5pbD8gc24pIChyZWN1ciBzbikgKGZpcnN0IHMpKSkpXHJcbiJ9IHs6c3ltIC1kZWZhdWx0LWRpc3BhdGNoLXZhbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZl0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBwciwgOm1ldGEgezpkb2MgIlByaW50cyB0aGUgb2JqZWN0KHMpIHVzaW5nIHN0cmluZy1wcmludC4gIFByaW50cyB0aGVcbiAgb2JqZWN0KHMpLCBzZXBhcmF0ZWQgYnkgc3BhY2VzIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUuXG4gIEJ5IGRlZmF1bHQsIHByIGFuZCBwcm4gcHJpbnQgaW4gYSB3YXkgdGhhdCBvYmplY3RzIGNhbiBiZVxuICByZWFkIGJ5IHRoZSByZWFkZXIiLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwclxyXG4gXCJQcmludHMgdGhlIG9iamVjdChzKSB1c2luZyBzdHJpbmctcHJpbnQuICBQcmludHMgdGhlXFxuICBvYmplY3QocyksIHNlcGFyYXRlZCBieSBzcGFjZXMgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZS5cXG4gIEJ5IGRlZmF1bHQsIHByIGFuZCBwcm4gcHJpbnQgaW4gYSB3YXkgdGhhdCBvYmplY3RzIGNhbiBiZVxcbiAgcmVhZCBieSB0aGUgcmVhZGVyXCJcclxuIFsmIG9ianNdXHJcbiAocHItd2l0aC1vcHRzIG9ianMgKHByLW9wdHMpKSlcclxuIn0gezpzeW0gbmFtZXNwYWNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmFtZXNwYWNlIFN0cmluZyBvZiBhIHN5bWJvbCBvciBrZXl3b3JkLCBvciBuaWwgaWYgbm90IHByZXNlbnQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hbWVzcGFjZVxyXG4gXCJSZXR1cm5zIHRoZSBuYW1lc3BhY2UgU3RyaW5nIG9mIGEgc3ltYm9sIG9yIGtleXdvcmQsIG9yIG5pbCBpZiBub3QgcHJlc2VudC5cIlxyXG4gW3hdXHJcbiAoaWZcclxuICAoaW1wbGVtZW50cz8gSU5hbWVkIHgpXHJcbiAgKC1uYW1lc3BhY2UgeClcclxuICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiRG9lc24ndCBzdXBwb3J0IG5hbWVzcGFjZTogXCIgeCkpKSkpXHJcbiJ9IHs6c3ltIG9iai1tYXAsIDptZXRhIHs6ZG9jICJrZXl2YWwgPT4ga2V5IHZhbFxuICBSZXR1cm5zIGEgbmV3IG9iamVjdCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy4iLCA6YXJnbGlzdHMgKFsmIGtleXZhbHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvYmotbWFwXHJcbiBcImtleXZhbCA9PiBrZXkgdmFsXFxuICBSZXR1cm5zIGEgbmV3IG9iamVjdCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy5cIlxyXG4gWyYga2V5dmFsc11cclxuIChsZXRcclxuICBba3MgKGFycmF5KSBvYmogKGpzLW9iaildXHJcbiAgKGxvb3BcclxuICAgW2t2cyAoc2VxIGtleXZhbHMpXVxyXG4gICAoaWZcclxuICAgIGt2c1xyXG4gICAgKGRvXHJcbiAgICAgKC5wdXNoIGtzIChmaXJzdCBrdnMpKVxyXG4gICAgIChnb2JqZWN0L3NldCBvYmogKGZpcnN0IGt2cykgKHNlY29uZCBrdnMpKVxyXG4gICAgIChyZWN1ciAobm5leHQga3ZzKSkpXHJcbiAgICAoLmZyb21PYmplY3QgT2JqTWFwIGtzIG9iaikpKSkpXHJcbiJ9IHs6c3ltIC1jb25qLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aCBvIGFkZGVkIHRvIGl0LiBUaGUgbmV3IGl0ZW1cbiAgICAgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBtb3N0IGVmZmljaWVudCBwbGFjZSwgZS5nLlxuICAgICAoY29uaiBbMSAyIDMgNF0gNSkgPT4gWzEgMiAzIDQgNV1cbiAgICAgKGNvbmogJygyIDMgNCA1KSAxKSA9PiAnKDEgMiAzIDQgNSkiLCA6YXJnbGlzdHMgKFtjb2xsIG9dKX0sIDpwcm90b2NvbCBJQ29sbGVjdGlvbn0gezpzeW0gPSwgOm1ldGEgezpkb2MgIkVxdWFsaXR5LiBSZXR1cm5zIHRydWUgaWYgeCBlcXVhbHMgeSwgZmFsc2UgaWYgbm90LiBDb21wYXJlc1xuICBudW1iZXJzIGFuZCBjb2xsZWN0aW9ucyBpbiBhIHR5cGUtaW5kZXBlbmRlbnQgbWFubmVyLiAgQ2xvanVyZSdzIGltbXV0YWJsZSBkYXRhXG4gIHN0cnVjdHVyZXMgZGVmaW5lIC1lcXVpdiAoYW5kIHRodXMgPSkgYXMgYSB2YWx1ZSwgbm90IGFuIGlkZW50aXR5LFxuICBjb21wYXJpc29uLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gPVxyXG4gXCJFcXVhbGl0eS4gUmV0dXJucyB0cnVlIGlmIHggZXF1YWxzIHksIGZhbHNlIGlmIG5vdC4gQ29tcGFyZXNcXG4gIG51bWJlcnMgYW5kIGNvbGxlY3Rpb25zIGluIGEgdHlwZS1pbmRlcGVuZGVudCBtYW5uZXIuICBDbG9qdXJlJ3MgaW1tdXRhYmxlIGRhdGFcXG4gIHN0cnVjdHVyZXMgZGVmaW5lIC1lcXVpdiAoYW5kIHRodXMgPSkgYXMgYSB2YWx1ZSwgbm90IGFuIGlkZW50aXR5LFxcbiAgY29tcGFyaXNvbi5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChpZiAobmlsPyB4KSAobmlsPyB5KSAob3IgKGlkZW50aWNhbD8geCB5KSAoLWVxdWl2IHggeSkpKSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKD0geCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoPSB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIElUcmFuc2llbnRNYXAsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIG1hcHBpbmcgZnVuY3Rpb25hbGl0eSB0byB0cmFuc2llbnQgY29sbGVjdGlvbnMuIn0sIDptZXRob2RzICgtZGlzc29jISl9IHs6c3ltIHRha2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgZmlyc3QgbiBpdGVtcyBpbiBjb2xsLCBvciBhbGwgaXRlbXMgaWZcbiAgdGhlcmUgYXJlIGZld2VyIHRoYW4gbi4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW5cbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tuXSBbbiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gdGFrZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgZmlyc3QgbiBpdGVtcyBpbiBjb2xsLCBvciBhbGwgaXRlbXMgaWZcXG4gIHRoZXJlIGFyZSBmZXdlciB0aGFuIG4uICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuXFxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW25dXHJcbiAgezpwcmUgWyhudW1iZXI/IG4pXX1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbbmEgKHZvbGF0aWxlISBuKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW25cclxuICAgICAgICBAbmFcclxuICAgICAgICBublxyXG4gICAgICAgICh2c3dhcCEgbmEgZGVjKVxyXG4gICAgICAgIHJlc3VsdFxyXG4gICAgICAgIChpZiAocG9zPyBuKSAocmYgcmVzdWx0IGlucHV0KSByZXN1bHQpXVxyXG4gICAgICAgKGlmIChub3QgKHBvcz8gbm4pKSAoZW5zdXJlLXJlZHVjZWQgcmVzdWx0KSByZXN1bHQpKSkpKSkpXHJcbiAoW24gY29sbF1cclxuICB7OnByZSBbKG51bWJlcj8gbildfVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlblxyXG4gICAgKHBvcz8gbilcclxuICAgICh3aGVuLWxldFxyXG4gICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgKGNvbnMgKGZpcnN0IHMpICh0YWtlIChkZWMgbikgKHJlc3QgcykpKSkpKSkpXHJcbiJ9IHs6c3ltIHZlY3Rvcj8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJVmVjdG9yIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZlY3Rvcj9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVZlY3RvclwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElWZWN0b3IgeCkpXHJcbiJ9IHs6c3ltIGJvb2xlYW4sIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gYm9vbGVhbiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBib29sZWFuXHJcbiBcIkNvZXJjZSB0byBib29sZWFuXCJcclxuIFt4XVxyXG4gKGNvbmQgKG5pbD8geCkgZmFsc2UgKGZhbHNlPyB4KSBmYWxzZSA6ZWxzZSB0cnVlKSlcclxuIn0gezpzeW0gSUNodW5rLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFjY2Vzc2luZyB0aGUgaXRlbXMgb2YgYSBjaHVuay4ifSwgOm1ldGhvZHMgKC1kcm9wLWZpcnN0KX0gezpzeW0gYml0LXNoaWZ0LWxlZnQsIDptZXRhIHs6ZG9jICJCaXR3aXNlIHNoaWZ0IGxlZnQiLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtc2hpZnQtbGVmdFxyXG4gXCJCaXR3aXNlIHNoaWZ0IGxlZnRcIlxyXG4gW3ggbl1cclxuIChjbGpzLmNvcmUvYml0LXNoaWZ0LWxlZnQgeCBuKSlcclxuIn0gezpzeW0gcmFuZG9tLXV1aWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmFuZG9tLXV1aWRcclxuIFtdXHJcbiAobGV0Zm5cclxuICBbKGhleCBbXSAoLnRvU3RyaW5nIChyYW5kLWludCAxNikgMTYpKV1cclxuICAobGV0XHJcbiAgIFtyaGV4ICgudG9TdHJpbmcgKGJpdC1vciA4IChiaXQtYW5kIDMgKHJhbmQtaW50IDE2KSkpIDE2KV1cclxuICAgKHV1aWRcclxuICAgIChzdHJcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgXCItXCJcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIFwiLVwiXHJcbiAgICAgXCI0XCJcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICBcIi1cIlxyXG4gICAgIHJoZXhcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICBcIi1cIlxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KVxyXG4gICAgIChoZXgpXHJcbiAgICAgKGhleClcclxuICAgICAoaGV4KSkpKSkpXHJcbiJ9IHs6c3ltIGFueT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gYW55IGFyZ3VtZW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGFueT8gXCJSZXR1cm5zIHRydWUgaWYgZ2l2ZW4gYW55IGFyZ3VtZW50LlwiIFt4XSB0cnVlKVxyXG4ifSB7OnN5bSByYW5kLWludCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIG4gKGV4Y2x1c2l2ZSkuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmQtaW50XHJcbiBcIlJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIG4gKGV4Y2x1c2l2ZSkuXCJcclxuIFtuXVxyXG4gKE1hdGgvZmxvb3IgKCogKE1hdGgvcmFuZG9tKSBuKSkpXHJcbiJ9IHs6c3ltIGFjbG9uZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBqYXZhc2NyaXB0IGFycmF5LCBjbG9uZWQgZnJvbSB0aGUgcGFzc2VkIGluIGFycmF5IiwgOmFyZ2xpc3RzIChbYXJyXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWNsb25lXHJcbiBcIlJldHVybnMgYSBqYXZhc2NyaXB0IGFycmF5LCBjbG9uZWQgZnJvbSB0aGUgcGFzc2VkIGluIGFycmF5XCJcclxuIFthcnJdXHJcbiAobGV0XHJcbiAgW2xlbiAoYWxlbmd0aCBhcnIpIG5ldy1hcnIgKG1ha2UtYXJyYXkgbGVuKV1cclxuICAoZG90aW1lcyBbaSBsZW5dIChhc2V0IG5ldy1hcnIgaSAoYWdldCBhcnIgaSkpKVxyXG4gIG5ldy1hcnIpKVxyXG4ifSB7OnN5bSB2cmVzZXQhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsdWUgb2Ygdm9sYXRpbGUgdG8gbmV3dmFsIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVcbiAgIGN1cnJlbnQgdmFsdWUuIFJldHVybnMgbmV3dmFsLiIsIDphcmdsaXN0cyAoW3ZvbCBuZXd2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2cmVzZXQhXHJcbiBcIlNldHMgdGhlIHZhbHVlIG9mIHZvbGF0aWxlIHRvIG5ld3ZhbCB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlXFxuICAgY3VycmVudCB2YWx1ZS4gUmV0dXJucyBuZXd2YWwuXCJcclxuIFt2b2wgbmV3dmFsXVxyXG4gKC12cmVzZXQhIHZvbCBuZXd2YWwpKVxyXG4ifSB7OnN5bSBjaHVuaywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtiXSl9LCA6c291cmNlICIoZGVmbiBjaHVuayBbYl0gKC5jaHVuayBiKSlcclxuIn0gezpzeW0gZGVjLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIG51bS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBkZWMgXCJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4gbnVtLlwiIFt4XSAoLSB4IDEpKVxyXG4ifSB7OnN5bSBBUGVyc2lzdGVudFZlY3RvciwgOm1ldGEgezpkb2MgIk1hcmtlciBwcm90b2NvbCJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gbWFwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG9cbiAgdGhlIHNldCBvZiBmaXJzdCBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlXG4gIHNldCBvZiBzZWNvbmQgaXRlbXMgaW4gZWFjaCBjb2xsLCB1bnRpbCBhbnkgb25lIG9mIHRoZSBjb2xscyBpc1xuICBleGhhdXN0ZWQuICBBbnkgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBGdW5jdGlvblxuICBmIHNob3VsZCBhY2NlcHQgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50cy4gUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlblxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNvbGxdIFtmIGMxIGMyXSBbZiBjMSBjMiBjM10gW2YgYzEgYzIgYzMgJiBjb2xsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcFxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0b1xcbiAgdGhlIHNldCBvZiBmaXJzdCBpdGVtcyBvZiBlYWNoIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlXFxuICBzZXQgb2Ygc2Vjb25kIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXNcXG4gIGV4aGF1c3RlZC4gIEFueSByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIEZ1bmN0aW9uXFxuICBmIHNob3VsZCBhY2NlcHQgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50cy4gUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlblxcbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChmblxyXG4gICAgKFtdIChyZikpXHJcbiAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dF0gKHJmIHJlc3VsdCAoZiBpbnB1dCkpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXQgJiBpbnB1dHNdIChyZiByZXN1bHQgKGFwcGx5IGYgaW5wdXQgaW5wdXRzKSkpKSkpXHJcbiAoW2YgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGlmXHJcbiAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgIChsZXRcclxuICAgICAgW2MgKGNodW5rLWZpcnN0IHMpIHNpemUgKGNvdW50IGMpIGIgKGNodW5rLWJ1ZmZlciBzaXplKV1cclxuICAgICAgKGRvdGltZXMgW2kgc2l6ZV0gKGNodW5rLWFwcGVuZCBiIChmICgtbnRoIGMgaSkpKSlcclxuICAgICAgKGNodW5rLWNvbnMgKGNodW5rIGIpIChtYXAgZiAoY2h1bmstcmVzdCBzKSkpKVxyXG4gICAgIChjb25zIChmIChmaXJzdCBzKSkgKG1hcCBmIChyZXN0IHMpKSkpKSkpXHJcbiAoW2YgYzEgYzJdXHJcbiAgKGxhenktc2VxXHJcbiAgIChsZXRcclxuICAgIFtzMSAoc2VxIGMxKSBzMiAoc2VxIGMyKV1cclxuICAgICh3aGVuXHJcbiAgICAgKGFuZCBzMSBzMilcclxuICAgICAoY29ucyAoZiAoZmlyc3QgczEpIChmaXJzdCBzMikpIChtYXAgZiAocmVzdCBzMSkgKHJlc3QgczIpKSkpKSkpXHJcbiAoW2YgYzEgYzIgYzNdXHJcbiAgKGxhenktc2VxXHJcbiAgIChsZXRcclxuICAgIFtzMSAoc2VxIGMxKSBzMiAoc2VxIGMyKSBzMyAoc2VxIGMzKV1cclxuICAgICh3aGVuXHJcbiAgICAgKGFuZCBzMSBzMiBzMylcclxuICAgICAoY29uc1xyXG4gICAgICAoZiAoZmlyc3QgczEpIChmaXJzdCBzMikgKGZpcnN0IHMzKSlcclxuICAgICAgKG1hcCBmIChyZXN0IHMxKSAocmVzdCBzMikgKHJlc3QgczMpKSkpKSkpXHJcbiAoW2YgYzEgYzIgYzMgJiBjb2xsc11cclxuICAobGV0XHJcbiAgIFtzdGVwXHJcbiAgICAoZm5cclxuICAgICBzdGVwXHJcbiAgICAgW2NzXVxyXG4gICAgIChsYXp5LXNlcVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbc3MgKG1hcCBzZXEgY3MpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICAoZXZlcnk/IGlkZW50aXR5IHNzKVxyXG4gICAgICAgIChjb25zIChtYXAgZmlyc3Qgc3MpIChzdGVwIChtYXAgcmVzdCBzcykpKSkpKSldXHJcbiAgIChtYXBcclxuICAgIChmbiogW3AxX180ODgyMyNdIChhcHBseSBmIHAxX180ODgyMyMpKVxyXG4gICAgKHN0ZXAgKGNvbmogY29sbHMgYzMgYzIgYzEpKSkpKSlcclxuIn0gezpzeW0ganV4dCwgOm1ldGEgezpkb2MgIlRha2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbmQgcmV0dXJucyBhIGZuIHRoYXQgaXMgdGhlIGp1eHRhcG9zaXRpb25cbiAgb2YgdGhvc2UgZm5zLiAgVGhlIHJldHVybmVkIGZuIHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3MsIGFuZFxuICByZXR1cm5zIGEgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBlYWNoIGZuIHRvIHRoZVxuICBhcmdzIChsZWZ0LXRvLXJpZ2h0KS5cbiAgKChqdXh0IGEgYiBjKSB4KSA9PiBbKGEgeCkgKGIgeCkgKGMgeCldIiwgOmFyZ2xpc3RzIFtbZl0gW2YgZ10gW2YgZyBoXSBbZiBnIGggJiBmc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGp1eHRcclxuIFwiVGFrZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFuZCByZXR1cm5zIGEgZm4gdGhhdCBpcyB0aGUganV4dGFwb3NpdGlvblxcbiAgb2YgdGhvc2UgZm5zLiAgVGhlIHJldHVybmVkIGZuIHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3MsIGFuZFxcbiAgcmV0dXJucyBhIHZlY3RvciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZWFjaCBmbiB0byB0aGVcXG4gIGFyZ3MgKGxlZnQtdG8tcmlnaHQpLlxcbiAgKChqdXh0IGEgYiBjKSB4KSA9PiBbKGEgeCkgKGIgeCkgKGMgeCldXCJcclxuIChbZl1cclxuICAoZm5cclxuICAgKFtdICh2ZWN0b3IgKGYpKSlcclxuICAgKFt4XSAodmVjdG9yIChmIHgpKSlcclxuICAgKFt4IHldICh2ZWN0b3IgKGYgeCB5KSkpXHJcbiAgIChbeCB5IHpdICh2ZWN0b3IgKGYgeCB5IHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdICh2ZWN0b3IgKGFwcGx5IGYgeCB5IHogYXJncykpKSkpXHJcbiAoW2YgZ11cclxuICAoZm5cclxuICAgKFtdICh2ZWN0b3IgKGYpIChnKSkpXHJcbiAgIChbeF0gKHZlY3RvciAoZiB4KSAoZyB4KSkpXHJcbiAgIChbeCB5XSAodmVjdG9yIChmIHggeSkgKGcgeCB5KSkpXHJcbiAgIChbeCB5IHpdICh2ZWN0b3IgKGYgeCB5IHopIChnIHggeSB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKHZlY3RvciAoYXBwbHkgZiB4IHkgeiBhcmdzKSAoYXBwbHkgZyB4IHkgeiBhcmdzKSkpKSlcclxuIChbZiBnIGhdXHJcbiAgKGZuXHJcbiAgIChbXSAodmVjdG9yIChmKSAoZykgKGgpKSlcclxuICAgKFt4XSAodmVjdG9yIChmIHgpIChnIHgpIChoIHgpKSlcclxuICAgKFt4IHldICh2ZWN0b3IgKGYgeCB5KSAoZyB4IHkpIChoIHggeSkpKVxyXG4gICAoW3ggeSB6XSAodmVjdG9yIChmIHggeSB6KSAoZyB4IHkgeikgKGggeCB5IHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAodmVjdG9yXHJcbiAgICAgKGFwcGx5IGYgeCB5IHogYXJncylcclxuICAgICAoYXBwbHkgZyB4IHkgeiBhcmdzKVxyXG4gICAgIChhcHBseSBoIHggeSB6IGFyZ3MpKSkpKVxyXG4gKFtmIGcgaCAmIGZzXVxyXG4gIChsZXRcclxuICAgW2ZzIChsaXN0KiBmIGcgaCBmcyldXHJcbiAgIChmblxyXG4gICAgKFtdXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm4qIFtwMV9fNDg4MzkjIHAyX180ODg0MCNdIChjb25qIHAxX180ODgzOSMgKHAyX180ODg0MCMpKSlcclxuICAgICAgW11cclxuICAgICAgZnMpKVxyXG4gICAgKFt4XVxyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuKiBbcDFfXzQ4ODQxIyBwMl9fNDg4NDIjXSAoY29uaiBwMV9fNDg4NDEjIChwMl9fNDg4NDIjIHgpKSlcclxuICAgICAgW11cclxuICAgICAgZnMpKVxyXG4gICAgKFt4IHldXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm4qIFtwMV9fNDg4NDMjIHAyX180ODg0NCNdIChjb25qIHAxX180ODg0MyMgKHAyX180ODg0NCMgeCB5KSkpXHJcbiAgICAgIFtdXHJcbiAgICAgIGZzKSlcclxuICAgIChbeCB5IHpdXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODQ1IyBwMl9fNDg4NDYjXVxyXG4gICAgICAgKGNvbmogcDFfXzQ4ODQ1IyAocDJfXzQ4ODQ2IyB4IHkgeikpKVxyXG4gICAgICBbXVxyXG4gICAgICBmcykpXHJcbiAgICAoW3ggeSB6ICYgYXJnc11cclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4NDcjIHAyX180ODg0OCNdXHJcbiAgICAgICAoY29uaiBwMV9fNDg4NDcjIChhcHBseSBwMl9fNDg4NDgjIHggeSB6IGFyZ3MpKSlcclxuICAgICAgW11cclxuICAgICAgZnMpKSkpKSlcclxuIn0gezpzeW0gPCwgOm1ldGEgezpkb2MgIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3JkZXIsXG4gIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIDxcclxuIFwiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBvcmRlcixcXG4gIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvPCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoY2xqcy5jb3JlLzwgeCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoY2xqcy5jb3JlLzwgeSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSAqZXZhbCosIDptZXRhIHs6ZG9jICJSdW50aW1lIGVudmlyb25tZW50cyBtYXkgcHJvdmlkZSBhIHdheSB0byBldmFsdWF0ZSBDbG9qdXJlU2NyaXB0XG4gIGZvcm1zLiBXaGF0ZXZlciBmdW5jdGlvbiAqZXZhbCogaXMgYm91bmQgdG8gd2lsbCBiZSBwYXNzZWQgYW55IGZvcm1zIHdoaWNoXG4gIHNob3VsZCBiZSBldmFsdWF0ZWQuIn0sIDpzb3VyY2UgIihkZWZvbmNlXHJcbiAqZXZhbCpcclxuIChmbiBbX10gKHRocm93IChqcy9FcnJvci4gXCJjbGpzLmNvcmUvKmV2YWwqIG5vdCBib3VuZFwiKSkpKVxyXG4ifSB7OnN5bSB0ZXN0LCA6bWV0YSB7OmRvYyAidGVzdCBbdl0gZmluZHMgZm4gYXQga2V5IDp0ZXN0IGluIHZhciBtZXRhZGF0YSBhbmQgY2FsbHMgaXQsXG4gIHByZXN1bWluZyBmYWlsdXJlIHdpbGwgdGhyb3cgZXhjZXB0aW9uIiwgOmFyZ2xpc3RzIChbdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRlc3RcclxuIFwidGVzdCBbdl0gZmluZHMgZm4gYXQga2V5IDp0ZXN0IGluIHZhciBtZXRhZGF0YSBhbmQgY2FsbHMgaXQsXFxuICBwcmVzdW1pbmcgZmFpbHVyZSB3aWxsIHRocm93IGV4Y2VwdGlvblwiXHJcbiBbdl1cclxuIChsZXQgW2YgKC4tY2xqcyRsYW5nJHRlc3QgdildIChpZiBmIChkbyAoZikgOm9rKSA6bm8tdGVzdCkpKVxyXG4ifSB7OnN5bSByZXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHBvc3NpYmx5IGVtcHR5IHNlcSBvZiB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0LiBDYWxscyBzZXEgb24gaXRzXG4gIGFyZ3VtZW50LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXN0XHJcbiBcIlJldHVybnMgYSBwb3NzaWJseSBlbXB0eSBzZXEgb2YgdGhlIGl0ZW1zIGFmdGVyIHRoZSBmaXJzdC4gQ2FsbHMgc2VxIG9uIGl0c1xcbiAgYXJndW1lbnQuXCJcclxuIFtjb2xsXVxyXG4gKGlmLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGlmXHJcbiAgIChpbXBsZW1lbnRzPyBJU2VxIGNvbGwpXHJcbiAgICgtcmVzdCBjb2xsKVxyXG4gICAobGV0IFtzIChzZXEgY29sbCldIChpZiBzICgtcmVzdCBzKSAoKSkpKVxyXG4gICgpKSlcclxuIn0gezpzeW0gZXgtZGF0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgZXhjZXB0aW9uIGRhdGEgKGEgbWFwKSBpZiBleCBpcyBhbiBFeGNlcHRpb25JbmZvLlxuICBPdGhlcndpc2UgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleC1kYXRhXHJcbiBcIlJldHVybnMgZXhjZXB0aW9uIGRhdGEgKGEgbWFwKSBpZiBleCBpcyBhbiBFeGNlcHRpb25JbmZvLlxcbiAgT3RoZXJ3aXNlIHJldHVybnMgbmlsLlwiXHJcbiBbZXhdXHJcbiAod2hlbiAoaW5zdGFuY2U/IEV4Y2VwdGlvbkluZm8gZXgpICguLWRhdGEgZXgpKSlcclxuIn0gezpzeW0gLWRyb3AtZmlyc3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBuZXcgY2h1bmsgb2YgY29sbCB3aXRoIHRoZSBmaXJzdCBpdGVtIHJlbW92ZWQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElDaHVua30gezpzeW0gaXNhPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiAoPSBjaGlsZCBwYXJlbnQpLCBvciBjaGlsZCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGRlcml2ZWQgZnJvbVxuICBwYXJlbnQsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGUgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGFcbiAgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZFxuICBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWQgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbFxuICBoaWVyYXJjaHkiLCA6YXJnbGlzdHMgW1tjaGlsZCBwYXJlbnRdIFtoIGNoaWxkIHBhcmVudF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlzYT9cclxuIFwiUmV0dXJucyB0cnVlIGlmICg9IGNoaWxkIHBhcmVudCksIG9yIGNoaWxkIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZGVyaXZlZCBmcm9tXFxuICBwYXJlbnQsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGUgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGFcXG4gIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWRcXG4gIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZCBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsXFxuICBoaWVyYXJjaHlcIlxyXG4gKFtjaGlsZCBwYXJlbnRdIChpc2E/IEAoZ2V0LWdsb2JhbC1oaWVyYXJjaHkpIGNoaWxkIHBhcmVudCkpXHJcbiAoW2ggY2hpbGQgcGFyZW50XVxyXG4gIChvclxyXG4gICAoPSBjaGlsZCBwYXJlbnQpXHJcbiAgIChjb250YWlucz8gKCg6YW5jZXN0b3JzIGgpIGNoaWxkKSBwYXJlbnQpXHJcbiAgIChhbmRcclxuICAgICh2ZWN0b3I/IHBhcmVudClcclxuICAgICh2ZWN0b3I/IGNoaWxkKVxyXG4gICAgKD09IChjb3VudCBwYXJlbnQpIChjb3VudCBjaGlsZCkpXHJcbiAgICAobG9vcFxyXG4gICAgIFtyZXQgdHJ1ZSBpIDBdXHJcbiAgICAgKGlmXHJcbiAgICAgIChvciAobm90IHJldCkgKD09IGkgKGNvdW50IHBhcmVudCkpKVxyXG4gICAgICByZXRcclxuICAgICAgKHJlY3VyIChpc2E/IGggKGNoaWxkIGkpIChwYXJlbnQgaSkpIChpbmMgaSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGJvb2xlYW4/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIEJvb2xlYW4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYm9vbGVhbj9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIEJvb2xlYW5cIlxyXG4gW3hdXHJcbiAob3IgKGNsanMuY29yZS90cnVlPyB4KSAoY2xqcy5jb3JlL2ZhbHNlPyB4KSkpXHJcbiJ9IHs6c3ltIC1jbG9uZSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBjbG9uZSBvZiB2YWx1ZS4iLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnByb3RvY29sIElDbG9uZWFibGV9IHs6c3ltIG11bmdlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdW5nZVxyXG4gW25hbWVdXHJcbiAobGV0XHJcbiAgW25hbWUnXHJcbiAgIChtdW5nZS1zdHIgKHN0ciBuYW1lKSlcclxuICAgbmFtZSdcclxuICAgKGNvbmRcclxuICAgIChpZGVudGljYWw/IG5hbWUnIFwiLi5cIilcclxuICAgIFwiX0RPVF9fRE9UX1wiXHJcbiAgICAoanMtcmVzZXJ2ZWQ/IG5hbWUnKVxyXG4gICAgKHN0ciBuYW1lJyBcIiRcIilcclxuICAgIDplbHNlXHJcbiAgICBuYW1lJyldXHJcbiAgKGlmIChzeW1ib2w/IG5hbWUpIChzeW1ib2wgbmFtZScpIG5hbWUnKSkpXHJcbiJ9IHs6c3ltIERFTVVOR0VfTUFQLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gREVNVU5HRV9NQVBcclxuICNqcyB7XCJfUkJSQUNFX1wiIFwifVwiLCBcIl9DT0xPTl9cIiBcIjpcIiwgXCJfQkFOR19cIiBcIiFcIiwgXCJfUU1BUktfXCIgXCI/XCIsIFwiX0JTTEFTSF9cIiBcIlxcXFxcXFxcXCIsIFwiX1NMQVNIX1wiIFwiL1wiLCBcIl9QRVJDRU5UX1wiIFwiJVwiLCBcIl9QTFVTX1wiIFwiK1wiLCBcIl9TSEFSUF9cIiBcIiNcIiwgXCJfTEJSQUNFX1wiIFwie1wiLCBcIl9CQVJfXCIgXCJ8XCIsIFwiX0xCUkFDS19cIiBcIltcIiwgXCJfRVFfXCIgXCI9XCIsIFwiX1wiIFwiLVwiLCBcIl9USUxERV9cIiBcIn5cIiwgXCJfUkJSQUNLX1wiIFwiXVwiLCBcIl9HVF9cIiBcIj5cIiwgXCJfU0lOR0xFUVVPVEVfXCIgXCInXCIsIFwiX0NJUkNBX1wiIFwiQFwiLCBcIl9BTVBFUlNBTkRfXCIgXCImXCIsIFwiX0RPVUJMRVFVT1RFX1wiIFwiXFxcXFxcXCJcIiwgXCJfQ0FSRVRfXCIgXCJeXCIsIFwiX0xUX1wiIFwiPFwiLCBcIl9TVEFSX1wiIFwiKlwifSlcclxuIn0gezpzeW0gcmUtc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2Ygc3VjY2Vzc2l2ZSBtYXRjaGVzIG9mIHJlIGluIHMuIiwgOmFyZ2xpc3RzIChbcmUgc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlLXNlcVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiBzdWNjZXNzaXZlIG1hdGNoZXMgb2YgcmUgaW4gcy5cIlxyXG4gW3JlIHNdXHJcbiAoaWZcclxuICAoc3RyaW5nPyBzKVxyXG4gIChyZS1zZXEqIHJlIHMpXHJcbiAgKHRocm93IChqcy9UeXBlRXJyb3IuIFwicmUtc2VxIG11c3QgbWF0Y2ggYWdhaW5zdCBhIHN0cmluZy5cIikpKSlcclxuIn0gezpzeW0gY2hhcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIEphdmFTY3JpcHQgc3RyaW5nIG9mIGxlbmd0aCBvbmUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoYXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBzdHJpbmcgb2YgbGVuZ3RoIG9uZS5cIlxyXG4gW3hdXHJcbiAoYW5kIChzdHJpbmc/IHgpICg9PSAxICguLWxlbmd0aCB4KSkpKVxyXG4ifSB7OnN5bSBtYWtlLWhpZXJhcmNoeSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBoaWVyYXJjaHkgb2JqZWN0IGZvciB1c2Ugd2l0aCBkZXJpdmUsIGlzYT8gZXRjLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1ha2UtaGllcmFyY2h5XHJcbiBcIkNyZWF0ZXMgYSBoaWVyYXJjaHkgb2JqZWN0IGZvciB1c2Ugd2l0aCBkZXJpdmUsIGlzYT8gZXRjLlwiXHJcbiBbXVxyXG4gezpwYXJlbnRzIHt9LCA6ZGVzY2VuZGFudHMge30sIDphbmNlc3RvcnMge319KVxyXG4ifSB7OnN5bSBQUk9UT0NPTF9TRU5USU5FTCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZvbmNlIFBST1RPQ09MX1NFTlRJTkVMICNqcyB7fSlcclxuIn0gezpzeW0gLXJlZHVjZSwgOm1ldGEgezpkb2MgImYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgMiBhcmd1bWVudHMuIElmIHN0YXJ0IGlzIG5vdCBzdXBwbGllZCxcbiAgICAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdGhlIGZpcnN0IDIgaXRlbXMgaW4gY29sbCwgdGhlblxuICAgICBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgM3JkIGl0ZW0sIGV0Yy4iLCA6YXJnbGlzdHMgKFtjb2xsIGZdIFtjb2xsIGYgc3RhcnRdKX0sIDpwcm90b2NvbCBJUmVkdWNlfSB7OnN5bSAtY291bnQsIDptZXRhIHs6ZG9jICJDYWxjdWxhdGVzIHRoZSBjb3VudCBvZiBjb2xsIGluIGNvbnN0YW50IHRpbWUuIFVzZWQgYnkgY2xqcy5jb3JlL2NvdW50LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJQ291bnRlZH0gezpzeW0gc3dhcC12YWxzISwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgc3dhcHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gYmU6XG4gIChhcHBseSBmIGN1cnJlbnQtdmFsdWUtb2YtYXRvbSBhcmdzKS4gTm90ZSB0aGF0IGYgbWF5IGJlIGNhbGxlZFxuICBtdWx0aXBsZSB0aW1lcywgYW5kIHRodXMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLlxuICBSZXR1cm5zIFtvbGQgbmV3XSwgdGhlIHZhbHVlIG9mIHRoZSBhdG9tIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHN3YXAuIiwgOmFyZ2xpc3RzIFtbYSBmXSBbYSBmIHhdIFthIGYgeCB5XSBbYSBmIHggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzd2FwLXZhbHMhXHJcbiBcIkF0b21pY2FsbHkgc3dhcHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gYmU6XFxuICAoYXBwbHkgZiBjdXJyZW50LXZhbHVlLW9mLWF0b20gYXJncykuIE5vdGUgdGhhdCBmIG1heSBiZSBjYWxsZWRcXG4gIG11bHRpcGxlIHRpbWVzLCBhbmQgdGh1cyBzaG91bGQgYmUgZnJlZSBvZiBzaWRlIGVmZmVjdHMuXFxuICBSZXR1cm5zIFtvbGQgbmV3XSwgdGhlIHZhbHVlIG9mIHRoZSBhdG9tIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHN3YXAuXCJcclxuIHs6YWRkZWQgXCIxLjlcIn1cclxuIChbYSBmXSAocmVzZXQtdmFscyEgYSAoZiAoLi1zdGF0ZSBhKSkpKVxyXG4gKFthIGYgeF0gKHJlc2V0LXZhbHMhIGEgKGYgKC4tc3RhdGUgYSkgeCkpKVxyXG4gKFthIGYgeCB5XSAocmVzZXQtdmFscyEgYSAoZiAoLi1zdGF0ZSBhKSB4IHkpKSlcclxuIChbYSBmIHggeSAmIG1vcmVdIChyZXNldC12YWxzISBhIChhcHBseSBmICguLXN0YXRlIGEpIHggeSBtb3JlKSkpKVxyXG4ifSB7OnN5bSBrZWVwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vbi1uaWwgcmVzdWx0cyBvZiAoZiBpdGVtKS4gTm90ZSxcbiAgdGhpcyBtZWFucyBmYWxzZSByZXR1cm4gdmFsdWVzIHdpbGwgYmUgaW5jbHVkZWQuICBmIG11c3QgYmUgZnJlZSBvZlxuICBzaWRlLWVmZmVjdHMuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtlZXBcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIG5vbi1uaWwgcmVzdWx0cyBvZiAoZiBpdGVtKS4gTm90ZSxcXG4gIHRoaXMgbWVhbnMgZmFsc2UgcmV0dXJuIHZhbHVlcyB3aWxsIGJlIGluY2x1ZGVkLiAgZiBtdXN0IGJlIGZyZWUgb2ZcXG4gIHNpZGUtZWZmZWN0cy4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChmblxyXG4gICAgKFtdIChyZikpXHJcbiAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAobGV0IFt2IChmIGlucHV0KV0gKGlmIChuaWw/IHYpIHJlc3VsdCAocmYgcmVzdWx0IHYpKSkpKSkpXHJcbiAoW2YgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKGlmXHJcbiAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgIChsZXRcclxuICAgICAgW2MgKGNodW5rLWZpcnN0IHMpIHNpemUgKGNvdW50IGMpIGIgKGNodW5rLWJ1ZmZlciBzaXplKV1cclxuICAgICAgKGRvdGltZXNcclxuICAgICAgIFtpIHNpemVdXHJcbiAgICAgICAobGV0IFt4IChmICgtbnRoIGMgaSkpXSAod2hlbi1ub3QgKG5pbD8geCkgKGNodW5rLWFwcGVuZCBiIHgpKSkpXHJcbiAgICAgIChjaHVuay1jb25zIChjaHVuayBiKSAoa2VlcCBmIChjaHVuay1yZXN0IHMpKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbeCAoZiAoZmlyc3QgcykpXVxyXG4gICAgICAoaWYgKG5pbD8geCkgKGtlZXAgZiAocmVzdCBzKSkgKGNvbnMgeCAoa2VlcCBmIChyZXN0IHMpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGNoYXIsIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gY2hhciIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFyXHJcbiBcIkNvZXJjZSB0byBjaGFyXCJcclxuIFt4XVxyXG4gKGNvbmRcclxuICAobnVtYmVyPyB4KVxyXG4gICguZnJvbUNoYXJDb2RlIGpzL1N0cmluZyB4KVxyXG4gIChhbmQgKHN0cmluZz8geCkgKD09ICguLWxlbmd0aCB4KSAxKSlcclxuICB4XHJcbiAgOmVsc2VcclxuICAodGhyb3dcclxuICAgKGpzL0Vycm9yLiBcIkFyZ3VtZW50IHRvIGNoYXIgbXVzdCBiZSBhIGNoYXJhY3RlciBvciBudW1iZXJcIikpKSlcclxuIn0gezpzeW0gbWFwY2F0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGNvbmNhdCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIG1hcFxuICB0byBmIGFuZCBjb2xscy4gIFRodXMgZnVuY3Rpb24gZiBzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbi4gUmV0dXJuc1xuICBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9ucyBhcmUgcHJvdmlkZWQiLCA6YXJnbGlzdHMgW1tmXSBbZiAmIGNvbGxzXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwY2F0XHJcbiBcIlJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBjb25jYXQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBtYXBcXG4gIHRvIGYgYW5kIGNvbGxzLiAgVGh1cyBmdW5jdGlvbiBmIHNob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uLiBSZXR1cm5zXFxuICBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9ucyBhcmUgcHJvdmlkZWRcIlxyXG4gezphZGRlZCBcIjEuMFwiLCA6c3RhdGljIHRydWV9XHJcbiAoW2ZdIChjb21wIChtYXAgZikgY2F0KSlcclxuIChbZiAmIGNvbGxzXSAoYXBwbHkgY29uY2F0IChhcHBseSBtYXAgZiBjb2xscykpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWxvbmcsIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gbG9uZyBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIElkZW50aWNhbCB0byBgaW50Jy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWxvbmdcclxuIFwiQ29lcmNlIHRvIGxvbmcgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiBJZGVudGljYWwgdG8gYGludCcuXCJcclxuIFt4XVxyXG4gKGZpeCB4KSlcclxuIn0gezpzeW0gbTMtc2VlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgbTMtc2VlZCAwKVxyXG4ifSB7OnN5bSBzb21lPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIG5vdCBuaWwsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc29tZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgbm90IG5pbCwgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChub3QgKG5pbD8geCkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtbmVnYXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1uZWdhdGUgW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLW5lZ2F0ZSB4KSlcclxuIn0gezpzeW0gcmVtb3ZlLXRhcCwgOm1ldGEgezpkb2MgIlJlbW92ZSBmIGZyb20gdGhlIHRhcCBzZXQuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZS10YXBcclxuIFwiUmVtb3ZlIGYgZnJvbSB0aGUgdGFwIHNldC5cIlxyXG4gW2ZdXHJcbiAobWF5YmUtaW5pdC10YXBzZXQpXHJcbiAoc3dhcCEgdGFwc2V0IGRpc2ogZilcclxuIG5pbClcclxuIn0gezpzeW0gc3ltYm9sLWlkZW50aWNhbD8sIDptZXRhIHs6ZG9jICJFZmZpY2llbnQgdGVzdCB0byBkZXRlcm1pbmUgdGhhdCB0d28gc3ltYm9scyBhcmUgaWRlbnRpY2FsLiIsIDphcmdsaXN0cyAoW3ggeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN5bWJvbC1pZGVudGljYWw/XHJcbiBcIkVmZmljaWVudCB0ZXN0IHRvIGRldGVybWluZSB0aGF0IHR3byBzeW1ib2xzIGFyZSBpZGVudGljYWwuXCJcclxuIFt4IHldXHJcbiAoaWZcclxuICAoaWRlbnRpY2FsPyB4IHkpXHJcbiAgdHJ1ZVxyXG4gIChpZlxyXG4gICAoYW5kIChzeW1ib2w/IHgpIChzeW1ib2w/IHkpKVxyXG4gICAoaWRlbnRpY2FsPyAoLi1zdHIgeCkgKC4tc3RyIHkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSAqY29tbWFuZC1saW5lLWFyZ3MqLCA6bWV0YSB7OmRvYyAiQSBzZXF1ZW5jZSBvZiB0aGUgc3VwcGxpZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgb3IgbmlsIGlmXG4gIG5vbmUgd2VyZSBzdXBwbGllZCJ9LCA6c291cmNlICIoZGVmICpjb21tYW5kLWxpbmUtYXJncyogbmlsKVxyXG4ifSB7OnN5bSByZXZlcnNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvZiB0aGUgaXRlbXMgaW4gY29sbCBpbiByZXZlcnNlIG9yZGVyLiBOb3QgbGF6eS4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV2ZXJzZVxyXG4gXCJSZXR1cm5zIGEgc2VxIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGluIHJldmVyc2Ugb3JkZXIuIE5vdCBsYXp5LlwiXHJcbiBbY29sbF1cclxuIChpZiAocmV2ZXJzaWJsZT8gY29sbCkgKG9yIChyc2VxIGNvbGwpICgpKSAocmVkdWNlIGNvbmogKCkgY29sbCkpKVxyXG4ifSB7OnN5bSBpbnN0PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIEluc3QiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBpbnN0PyBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIEluc3RcIiBbeF0gKHNhdGlzZmllcz8gSW5zdCB4KSlcclxuIn0gezpzeW0gcmFuZ2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgbnVtcyBmcm9tIHN0YXJ0IChpbmNsdXNpdmUpIHRvIGVuZFxuICAgKGV4Y2x1c2l2ZSksIGJ5IHN0ZXAsIHdoZXJlIHN0YXJ0IGRlZmF1bHRzIHRvIDAsIHN0ZXAgdG8gMSxcbiAgIGFuZCBlbmQgdG8gaW5maW5pdHkuIiwgOmFyZ2xpc3RzIFtbXSBbZW5kXSBbc3RhcnQgZW5kXSBbc3RhcnQgZW5kIHN0ZXBdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5nZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgbnVtcyBmcm9tIHN0YXJ0IChpbmNsdXNpdmUpIHRvIGVuZFxcbiAgIChleGNsdXNpdmUpLCBieSBzdGVwLCB3aGVyZSBzdGFydCBkZWZhdWx0cyB0byAwLCBzdGVwIHRvIDEsXFxuICAgYW5kIGVuZCB0byBpbmZpbml0eS5cIlxyXG4gKFtdIChyYW5nZSAwICguLU1BWF9WQUxVRSBqcy9OdW1iZXIpIDEpKVxyXG4gKFtlbmRdIChyYW5nZSAwIGVuZCAxKSlcclxuIChbc3RhcnQgZW5kXSAocmFuZ2Ugc3RhcnQgZW5kIDEpKVxyXG4gKFtzdGFydCBlbmQgc3RlcF1cclxuICAoY29uZFxyXG4gICAocG9zPyBzdGVwKVxyXG4gICAoaWYgKDw9IGVuZCBzdGFydCkgKCkgKFJhbmdlLiBuaWwgc3RhcnQgZW5kIHN0ZXAgbmlsIG5pbCBuaWwpKVxyXG4gICAobmVnPyBzdGVwKVxyXG4gICAoaWYgKD49IGVuZCBzdGFydCkgKCkgKFJhbmdlLiBuaWwgc3RhcnQgZW5kIHN0ZXAgbmlsIG5pbCBuaWwpKVxyXG4gICA6ZWxzZVxyXG4gICAoaWYgKD09IGVuZCBzdGFydCkgKCkgKHJlcGVhdCBzdGFydCkpKSkpXHJcbiJ9IHs6c3ltIGJpdC1jb3VudCwgOm1ldGEgezpkb2MgIkNvdW50cyB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluIG4iLCA6YXJnbGlzdHMgKFt2XSl9LCA6c291cmNlICIoZGVmblxyXG4gYml0LWNvdW50XHJcbiBcIkNvdW50cyB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluIG5cIlxyXG4gW3ZdXHJcbiAobGV0XHJcbiAgW3ZcclxuICAgKC0gdiAoYml0LWFuZCAoYml0LXNoaWZ0LXJpZ2h0IHYgMSkgMTQzMTY1NTc2NSkpXHJcbiAgIHZcclxuICAgKCsgKGJpdC1hbmQgdiA4NTg5OTM0NTkpIChiaXQtYW5kIChiaXQtc2hpZnQtcmlnaHQgdiAyKSA4NTg5OTM0NTkpKV1cclxuICAoYml0LXNoaWZ0LXJpZ2h0XHJcbiAgICgqIChiaXQtYW5kICgrIHYgKGJpdC1zaGlmdC1yaWdodCB2IDQpKSAyNTI2NDUxMzUpIDE2ODQzMDA5KVxyXG4gICAyNCkpKVxyXG4ifSB7OnN5bSBzb3J0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNvcnRlZCBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbC4gQ29tcCBjYW4gYmVcbiAgIGJvb2xlYW4tdmFsdWVkIGNvbXBhcmlzb24gZnVuY3Rpb24sIG9yIGEgLS8wLysgdmFsdWVkIGNvbXBhcmF0b3IuXG4gICBDb21wIGRlZmF1bHRzIHRvIGNvbXBhcmUuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW2NvbXAgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRcclxuIFwiUmV0dXJucyBhIHNvcnRlZCBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbC4gQ29tcCBjYW4gYmVcXG4gICBib29sZWFuLXZhbHVlZCBjb21wYXJpc29uIGZ1bmN0aW9uLCBvciBhIC0vMC8rIHZhbHVlZCBjb21wYXJhdG9yLlxcbiAgIENvbXAgZGVmYXVsdHMgdG8gY29tcGFyZS5cIlxyXG4gKFtjb2xsXSAoc29ydCBjb21wYXJlIGNvbGwpKVxyXG4gKFtjb21wIGNvbGxdXHJcbiAgKGlmXHJcbiAgIChzZXEgY29sbClcclxuICAgKGxldFxyXG4gICAgW2EgKHRvLWFycmF5IGNvbGwpXVxyXG4gICAgKGdhcnJheS9zdGFibGVTb3J0IGEgKGZuLT5jb21wYXJhdG9yIGNvbXApKVxyXG4gICAgKHNlcSBhKSlcclxuICAgKCkpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWluYy1pbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWluYy1pbnQgW3hdIChjbGpzLmNvcmUvdW5jaGVja2VkLWluYy1pbnQgeCkpXHJcbiJ9IHs6c3ltIC1jb21wYXJlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgemVybywgb3IgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB4IGlzIGxvZ2ljYWxseVxuICAgICAnbGVzcyB0aGFuJywgJ2VxdWFsIHRvJywgb3IgJ2dyZWF0ZXIgdGhhbicgeS4iLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpwcm90b2NvbCBJQ29tcGFyYWJsZX0gezpzeW0gbWFwLWluZGV4ZWQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBjb25zaXN0aW5nIG9mIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byAwXG4gIGFuZCB0aGUgZmlyc3QgaXRlbSBvZiBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIDEgYW5kIHRoZSBzZWNvbmRcbiAgaXRlbSBpbiBjb2xsLCBldGMsIHVudGlsIGNvbGwgaXMgZXhoYXVzdGVkLiBUaHVzIGZ1bmN0aW9uIGYgc2hvdWxkXG4gIGFjY2VwdCAyIGFyZ3VtZW50cywgaW5kZXggYW5kIGl0ZW0uIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW5cbiAgbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWluZGV4ZWRcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2UgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gMFxcbiAgYW5kIHRoZSBmaXJzdCBpdGVtIG9mIGNvbGwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nIGYgdG8gMSBhbmQgdGhlIHNlY29uZFxcbiAgaXRlbSBpbiBjb2xsLCBldGMsIHVudGlsIGNvbGwgaXMgZXhoYXVzdGVkLiBUaHVzIGZ1bmN0aW9uIGYgc2hvdWxkXFxuICBhY2NlcHQgMiBhcmd1bWVudHMsIGluZGV4IGFuZCBpdGVtLiBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuXFxuICBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2kgKHZvbGF0aWxlISAtMSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdIChyZiByZXN1bHQgKGYgKHZzd2FwISBpIGluYykgaW5wdXQpKSkpKSkpXHJcbiAoW2YgY29sbF1cclxuICAobGV0Zm5cclxuICAgWyhtYXBpXHJcbiAgICAgW2lkeCBjb2xsXVxyXG4gICAgIChsYXp5LXNlcVxyXG4gICAgICAod2hlbi1sZXRcclxuICAgICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbYyAoY2h1bmstZmlyc3Qgcykgc2l6ZSAoY291bnQgYykgYiAoY2h1bmstYnVmZmVyIHNpemUpXVxyXG4gICAgICAgICAoZG90aW1lcyBbaSBzaXplXSAoY2h1bmstYXBwZW5kIGIgKGYgKCsgaWR4IGkpICgtbnRoIGMgaSkpKSlcclxuICAgICAgICAgKGNodW5rLWNvbnMgKGNodW5rIGIpIChtYXBpICgrIGlkeCBzaXplKSAoY2h1bmstcmVzdCBzKSkpKVxyXG4gICAgICAgIChjb25zIChmIGlkeCAoZmlyc3QgcykpIChtYXBpIChpbmMgaWR4KSAocmVzdCBzKSkpKSkpKV1cclxuICAgKG1hcGkgMCBjb2xsKSkpKVxyXG4ifSB7OnN5bSBhcnJheS1saXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gYXJyYXktbGlzdCBbXSAoQXJyYXlMaXN0LiAoYXJyYXkpKSlcclxuIn0gezpzeW0gcmFuZC1udGgsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSByYW5kb20gZWxlbWVudCBvZiB0aGUgKHNlcXVlbnRpYWwpIGNvbGxlY3Rpb24uIFdpbGwgaGF2ZVxuICB0aGUgc2FtZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgYXMgbnRoIGZvciB0aGUgZ2l2ZW5cbiAgY29sbGVjdGlvbi4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmFuZC1udGhcclxuIFwiUmV0dXJuIGEgcmFuZG9tIGVsZW1lbnQgb2YgdGhlIChzZXF1ZW50aWFsKSBjb2xsZWN0aW9uLiBXaWxsIGhhdmVcXG4gIHRoZSBzYW1lIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhcyBudGggZm9yIHRoZSBnaXZlblxcbiAgY29sbGVjdGlvbi5cIlxyXG4gW2NvbGxdXHJcbiAobnRoIGNvbGwgKHJhbmQtaW50IChjb3VudCBjb2xsKSkpKVxyXG4ifSB7OnN5bSBjb21wLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFuZCByZXR1cm5zIGEgZm4gdGhhdCBpcyB0aGUgY29tcG9zaXRpb25cbiAgb2YgdGhvc2UgZm5zLiAgVGhlIHJldHVybmVkIGZuIHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3MsXG4gIGFwcGxpZXMgdGhlIHJpZ2h0bW9zdCBvZiBmbnMgdG8gdGhlIGFyZ3MsIHRoZSBuZXh0XG4gIGZuIChyaWdodC10by1sZWZ0KSB0byB0aGUgcmVzdWx0LCBldGMuIiwgOmFyZ2xpc3RzIFtbXSBbZl0gW2YgZ10gW2YgZyBoXSBbZjEgZjIgZjMgJiBmc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBcclxuIFwiVGFrZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGFuZCByZXR1cm5zIGEgZm4gdGhhdCBpcyB0aGUgY29tcG9zaXRpb25cXG4gIG9mIHRob3NlIGZucy4gIFRoZSByZXR1cm5lZCBmbiB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmdzLFxcbiAgYXBwbGllcyB0aGUgcmlnaHRtb3N0IG9mIGZucyB0byB0aGUgYXJncywgdGhlIG5leHRcXG4gIGZuIChyaWdodC10by1sZWZ0KSB0byB0aGUgcmVzdWx0LCBldGMuXCJcclxuIChbXSBpZGVudGl0eSlcclxuIChbZl0gZilcclxuIChbZiBnXVxyXG4gIChmblxyXG4gICAoW10gKGYgKGcpKSlcclxuICAgKFt4XSAoZiAoZyB4KSkpXHJcbiAgIChbeCB5XSAoZiAoZyB4IHkpKSlcclxuICAgKFt4IHkgel0gKGYgKGcgeCB5IHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChmIChhcHBseSBnIHggeSB6IGFyZ3MpKSkpKVxyXG4gKFtmIGcgaF1cclxuICAoZm5cclxuICAgKFtdIChmIChnIChoKSkpKVxyXG4gICAoW3hdIChmIChnIChoIHgpKSkpXHJcbiAgIChbeCB5XSAoZiAoZyAoaCB4IHkpKSkpXHJcbiAgIChbeCB5IHpdIChmIChnIChoIHggeSB6KSkpKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGYgKGcgKGFwcGx5IGggeCB5IHogYXJncykpKSkpKVxyXG4gKFtmMSBmMiBmMyAmIGZzXVxyXG4gIChsZXRcclxuICAgW2ZzIChyZXZlcnNlIChsaXN0KiBmMSBmMiBmMyBmcykpXVxyXG4gICAoZm5cclxuICAgIFsmIGFyZ3NdXHJcbiAgICAobG9vcFxyXG4gICAgIFtyZXQgKGFwcGx5IChmaXJzdCBmcykgYXJncykgZnMgKG5leHQgZnMpXVxyXG4gICAgIChpZiBmcyAocmVjdXIgKChmaXJzdCBmcykgcmV0KSAobmV4dCBmcykpIHJldCkpKSkpKVxyXG4ifSB7OnN5bSBhcnJheS1jaHVuaywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1thcnJdIFthcnIgb2ZmXSBbYXJyIG9mZiBlbmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheS1jaHVua1xyXG4gKFthcnJdIChBcnJheUNodW5rLiBhcnIgMCAoYWxlbmd0aCBhcnIpKSlcclxuIChbYXJyIG9mZl0gKEFycmF5Q2h1bmsuIGFyciBvZmYgKGFsZW5ndGggYXJyKSkpXHJcbiAoW2FyciBvZmYgZW5kXSAoQXJyYXlDaHVuay4gYXJyIG9mZiBlbmQpKSlcclxuIn0gezpzeW0gZGlzcGF0Y2gtZm4sIDptZXRhIHs6ZG9jICJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm4gaXQncyBkaXNwYXRjaC1mbi4iLCA6YXJnbGlzdHMgKFttdWx0aWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGlzcGF0Y2gtZm5cclxuIFwiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJuIGl0J3MgZGlzcGF0Y2gtZm4uXCJcclxuIFttdWx0aWZuXVxyXG4gKC1kaXNwYXRjaC1mbiBtdWx0aWZuKSlcclxuIn0gezpzeW0gYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsbCwgOm1ldGEgezpkb2MgIkRFUFJFQ0FURUQ6IEJpdHdpc2Ugc2hpZnQgcmlnaHQgd2l0aCB6ZXJvIGZpbGwiLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtc2hpZnQtcmlnaHQtemVyby1maWxsXHJcbiBcIkRFUFJFQ0FURUQ6IEJpdHdpc2Ugc2hpZnQgcmlnaHQgd2l0aCB6ZXJvIGZpbGxcIlxyXG4gW3ggbl1cclxuIChjbGpzLmNvcmUvYml0LXNoaWZ0LXJpZ2h0LXplcm8tZmlsbCB4IG4pKVxyXG4ifSB7OnN5bSAtYXMtdHJhbnNpZW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldywgdHJhbnNpZW50IHZlcnNpb24gb2YgdGhlIGNvbGxlY3Rpb24sIGluIGNvbnN0YW50IHRpbWUuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElFZGl0YWJsZUNvbGxlY3Rpb259IHs6c3ltIGRvcnVuLCA6bWV0YSB7OmRvYyAiV2hlbiBsYXp5IHNlcXVlbmNlcyBhcmUgcHJvZHVjZWQgdmlhIGZ1bmN0aW9ucyB0aGF0IGhhdmUgc2lkZVxuICBlZmZlY3RzLCBhbnkgZWZmZWN0cyBvdGhlciB0aGFuIHRob3NlIG5lZWRlZCB0byBwcm9kdWNlIHRoZSBmaXJzdFxuICBlbGVtZW50IGluIHRoZSBzZXEgZG8gbm90IG9jY3VyIHVudGlsIHRoZSBzZXEgaXMgY29uc3VtZWQuIGRvcnVuIGNhblxuICBiZSB1c2VkIHRvIGZvcmNlIGFueSBlZmZlY3RzLiBXYWxrcyB0aHJvdWdoIHRoZSBzdWNjZXNzaXZlIG5leHRzIG9mXG4gIHRoZSBzZXEsIGRvZXMgbm90IHJldGFpbiB0aGUgaGVhZCBhbmQgcmV0dXJucyBuaWwuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW24gY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvcnVuXHJcbiBcIldoZW4gbGF6eSBzZXF1ZW5jZXMgYXJlIHByb2R1Y2VkIHZpYSBmdW5jdGlvbnMgdGhhdCBoYXZlIHNpZGVcXG4gIGVmZmVjdHMsIGFueSBlZmZlY3RzIG90aGVyIHRoYW4gdGhvc2UgbmVlZGVkIHRvIHByb2R1Y2UgdGhlIGZpcnN0XFxuICBlbGVtZW50IGluIHRoZSBzZXEgZG8gbm90IG9jY3VyIHVudGlsIHRoZSBzZXEgaXMgY29uc3VtZWQuIGRvcnVuIGNhblxcbiAgYmUgdXNlZCB0byBmb3JjZSBhbnkgZWZmZWN0cy4gV2Fsa3MgdGhyb3VnaCB0aGUgc3VjY2Vzc2l2ZSBuZXh0cyBvZlxcbiAgdGhlIHNlcSwgZG9lcyBub3QgcmV0YWluIHRoZSBoZWFkIGFuZCByZXR1cm5zIG5pbC5cIlxyXG4gKFtjb2xsXSAod2hlbi1sZXQgW3MgKHNlcSBjb2xsKV0gKHJlY3VyIChuZXh0IHMpKSkpXHJcbiAoW24gY29sbF1cclxuICAod2hlbiAoYW5kIChzZXEgY29sbCkgKHBvcz8gbikpIChyZWN1ciAoZGVjIG4pIChuZXh0IGNvbGwpKSkpKVxyXG4ifSB7OnN5bSBwci1zZXF1ZW50aWFsLXdyaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt3cml0ZXIgcHJpbnQtb25lIGJlZ2luIHNlcCBlbmQgb3B0cyBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHItc2VxdWVudGlhbC13cml0ZXJcclxuIFt3cml0ZXIgcHJpbnQtb25lIGJlZ2luIHNlcCBlbmQgb3B0cyBjb2xsXVxyXG4gKGJpbmRpbmdcclxuICBbKnByaW50LWxldmVsKiAod2hlbi1ub3QgKG5pbD8gKnByaW50LWxldmVsKikgKGRlYyAqcHJpbnQtbGV2ZWwqKSldXHJcbiAgKGlmXHJcbiAgIChhbmQgKG5vdCAobmlsPyAqcHJpbnQtbGV2ZWwqKSkgKG5lZz8gKnByaW50LWxldmVsKikpXHJcbiAgICgtd3JpdGUgd3JpdGVyIFwiI1wiKVxyXG4gICAoZG9cclxuICAgICgtd3JpdGUgd3JpdGVyIGJlZ2luKVxyXG4gICAgKGlmXHJcbiAgICAgKHplcm8/ICg6cHJpbnQtbGVuZ3RoIG9wdHMpKVxyXG4gICAgICh3aGVuIChzZXEgY29sbCkgKC13cml0ZSB3cml0ZXIgKG9yICg6bW9yZS1tYXJrZXIgb3B0cykgXCIuLi5cIikpKVxyXG4gICAgIChkb1xyXG4gICAgICAod2hlbiAoc2VxIGNvbGwpIChwcmludC1vbmUgKGZpcnN0IGNvbGwpIHdyaXRlciBvcHRzKSlcclxuICAgICAgKGxvb3BcclxuICAgICAgIFtjb2xsIChuZXh0IGNvbGwpIG4gKGRlYyAoOnByaW50LWxlbmd0aCBvcHRzKSldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoYW5kIGNvbGwgKG9yIChuaWw/IG4pIChub3QgKHplcm8/IG4pKSkpXHJcbiAgICAgICAgKGRvXHJcbiAgICAgICAgICgtd3JpdGUgd3JpdGVyIHNlcClcclxuICAgICAgICAgKHByaW50LW9uZSAoZmlyc3QgY29sbCkgd3JpdGVyIG9wdHMpXHJcbiAgICAgICAgIChyZWN1ciAobmV4dCBjb2xsKSAoZGVjIG4pKSlcclxuICAgICAgICAod2hlblxyXG4gICAgICAgICAoYW5kIChzZXEgY29sbCkgKHplcm8/IG4pKVxyXG4gICAgICAgICAoLXdyaXRlIHdyaXRlciBzZXApXHJcbiAgICAgICAgICgtd3JpdGUgd3JpdGVyIChvciAoOm1vcmUtbWFya2VyIG9wdHMpIFwiLi4uXCIpKSkpKSkpXHJcbiAgICAoLXdyaXRlIHdyaXRlciBlbmQpKSkpKVxyXG4ifSB7OnN5bSBzaW1wbGUtc3ltYm9sPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgd2l0aG91dCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaW1wbGUtc3ltYm9sP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIHdpdGhvdXQgYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYW5kIChzeW1ib2w/IHgpIChuaWw/IChuYW1lc3BhY2UgeCkpKSlcclxuIn0gezpzeW0gSUluZGV4ZWQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY29sbGVjdGlvbnMgdG8gcHJvdmlkZSBpbmRleGVkLWJhc2VkIGFjY2VzcyB0byB0aGVpciBpdGVtcy4ifSwgOm1ldGhvZHMgKC1udGgpfSB7OnN5bSBkaXNqLCA6bWV0YSB7OmRvYyAiZGlzaltvaW5dLiBSZXR1cm5zIGEgbmV3IHNldCBvZiB0aGUgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdFxuICBkb2VzIG5vdCBjb250YWluIGtleShzKS4iLCA6YXJnbGlzdHMgW1tjb2xsXSBbY29sbCBrXSBbY29sbCBrICYga3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXNqXHJcbiBcImRpc2pbb2luXS4gUmV0dXJucyBhIG5ldyBzZXQgb2YgdGhlIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXRcXG4gIGRvZXMgbm90IGNvbnRhaW4ga2V5KHMpLlwiXHJcbiAoW2NvbGxdIGNvbGwpXHJcbiAoW2NvbGwga10gKHdoZW4tbm90IChuaWw/IGNvbGwpICgtZGlzam9pbiBjb2xsIGspKSlcclxuIChbY29sbCBrICYga3NdXHJcbiAgKHdoZW4tbm90XHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIChsZXRcclxuICAgIFtyZXQgKGRpc2ogY29sbCBrKV1cclxuICAgIChpZiBrcyAocmVjdXIgcmV0IChmaXJzdCBrcykgKG5leHQga3MpKSByZXQpKSkpKVxyXG4ifSB7OnN5bSBJUHJpbnRXaXRoV3JpdGVyLCA6bWV0YSB7OmRvYyAiVGhlIG9sZCBJUHJpbnRhYmxlIHByb3RvY29sJ3MgaW1wbGVtZW50YXRpb24gY29uc2lzdGVkIG9mIGJ1aWxkaW5nIGEgZ2lhbnRcbiAgIGxpc3Qgb2Ygc3RyaW5ncyB0byBjb25jYXRlbmF0ZS4gIFRoaXMgaW52b2x2ZWQgbG90cyBvZiBjb25jYXQgY2FsbHMsXG4gICBpbnRlcm1lZGlhdGUgdmVjdG9ycywgYW5kIGxhenktc2VxcywgYW5kIHdhcyB2ZXJ5IHNsb3cgaW4gc29tZSBvbGRlciBKU1xuICAgZW5naW5lcy4gIElQcmludFdpdGhXcml0ZXIgaW1wbGVtZW50cyBwcmludGluZyB2aWEgdGhlIElXcml0ZXIgcHJvdG9jb2wsIHNvIGl0XG4gICBiZSBpbXBsZW1lbnRlZCBlZmZpY2llbnRseSBpbiB0ZXJtcyBvZiBlLmcuIGEgU3RyaW5nQnVmZmVyIGFwcGVuZC4ifSwgOm1ldGhvZHMgKC1wci13cml0ZXIpfSB7OnN5bSBJVmVjdG9yLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB2ZWN0b3IgZnVuY3Rpb25hbGl0eSB0byBjb2xsZWN0aW9ucy4ifSwgOm1ldGhvZHMgKC1hc3NvYy1uKX0gezpzeW0gSUl0ZXJhYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGl0ZXJhdGluZyBvdmVyIGEgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1pdGVyYXRvcil9IHs6c3ltIGV2YWwsIDptZXRhIHs6ZG9jICJFdmFsdWF0ZXMgdGhlIGZvcm0gZGF0YSBzdHJ1Y3R1cmUgKG5vdCB0ZXh0ISkgYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cbiAgRGVsZWdhdGVzIHRvIGNsanMuY29yZS8qZXZhbCouIEludGVuZGVkIGZvciB1c2UgaW4gc2VsZi1ob3N0ZWQgQ2xvanVyZVNjcmlwdCxcbiAgd2hpY2ggc2V0cyB1cCBhbiBpbXBsZW1lbnRhdGlvbiBvZiBjbGpzLmNvcmUvKmV2YWwqIGZvciB0aGF0IGVudmlyb25tZW50LiIsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmFsXHJcbiBcIkV2YWx1YXRlcyB0aGUgZm9ybSBkYXRhIHN0cnVjdHVyZSAobm90IHRleHQhKSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlxcbiAgRGVsZWdhdGVzIHRvIGNsanMuY29yZS8qZXZhbCouIEludGVuZGVkIGZvciB1c2UgaW4gc2VsZi1ob3N0ZWQgQ2xvanVyZVNjcmlwdCxcXG4gIHdoaWNoIHNldHMgdXAgYW4gaW1wbGVtZW50YXRpb24gb2YgY2xqcy5jb3JlLypldmFsKiBmb3IgdGhhdCBlbnZpcm9ubWVudC5cIlxyXG4gW2Zvcm1dXHJcbiAoKmV2YWwqIGZvcm0pKVxyXG4ifSB7OnN5bSBjb25zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBzZXEgd2hlcmUgeCBpcyB0aGUgZmlyc3QgZWxlbWVudCBhbmQgY29sbCBpcyB0aGUgcmVzdC4iLCA6YXJnbGlzdHMgKFt4IGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25zXHJcbiBcIlJldHVybnMgYSBuZXcgc2VxIHdoZXJlIHggaXMgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIGNvbGwgaXMgdGhlIHJlc3QuXCJcclxuIFt4IGNvbGxdXHJcbiAoY29uZFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKExpc3QuIG5pbCB4IG5pbCAxIG5pbClcclxuICAoaW1wbGVtZW50cz8gSVNlcSBjb2xsKVxyXG4gIChDb25zLiBuaWwgeCBjb2xsIG5pbClcclxuICA6ZGVmYXVsdFxyXG4gIChDb25zLiBuaWwgeCAoc2VxIGNvbGwpIG5pbCkpKVxyXG4ifSB7OnN5bSBmbG9hdHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gZmxvYXRzIFt4XSB4KVxyXG4ifSB7OnN5bSBwb3M/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG51bSBpcyBncmVhdGVyIHRoYW4gemVybywgZWxzZSBmYWxzZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3M/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgZ3JlYXRlciB0aGFuIHplcm8sIGVsc2UgZmFsc2VcIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3Bvcz8geCkpXHJcbiJ9IHs6c3ltIGZuaWwsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZ1bmN0aW9uIGYsIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYWxscyBmLCByZXBsYWNpbmdcbiAgYSBuaWwgZmlyc3QgYXJndW1lbnQgdG8gZiB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZSB4LiBIaWdoZXIgYXJpdHlcbiAgdmVyc2lvbnMgY2FuIHJlcGxhY2UgYXJndW1lbnRzIGluIHRoZSBzZWNvbmQgYW5kIHRoaXJkXG4gIHBvc2l0aW9ucyAoeSwgeikuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gZiBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mXG4gIGFyZ3VtZW50cywgbm90IGp1c3QgdGhlIG9uZShzKSBiZWluZyBuaWwtcGF0Y2hlZC4iLCA6YXJnbGlzdHMgW1tmIHhdIFtmIHggeV0gW2YgeCB5IHpdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbmlsXHJcbiBcIlRha2VzIGEgZnVuY3Rpb24gZiwgYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIGYsIHJlcGxhY2luZ1xcbiAgYSBuaWwgZmlyc3QgYXJndW1lbnQgdG8gZiB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZSB4LiBIaWdoZXIgYXJpdHlcXG4gIHZlcnNpb25zIGNhbiByZXBsYWNlIGFyZ3VtZW50cyBpbiB0aGUgc2Vjb25kIGFuZCB0aGlyZFxcbiAgcG9zaXRpb25zICh5LCB6KS4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBmIGNhbiB0YWtlIGFueSBudW1iZXIgb2ZcXG4gIGFyZ3VtZW50cywgbm90IGp1c3QgdGhlIG9uZShzKSBiZWluZyBuaWwtcGF0Y2hlZC5cIlxyXG4gKFtmIHhdXHJcbiAgKGZuXHJcbiAgIChbYV0gKGYgKGlmIChuaWw/IGEpIHggYSkpKVxyXG4gICAoW2EgYl0gKGYgKGlmIChuaWw/IGEpIHggYSkgYikpXHJcbiAgIChbYSBiIGNdIChmIChpZiAobmlsPyBhKSB4IGEpIGIgYykpXHJcbiAgIChbYSBiIGMgJiBkc10gKGFwcGx5IGYgKGlmIChuaWw/IGEpIHggYSkgYiBjIGRzKSkpKVxyXG4gKFtmIHggeV1cclxuICAoZm5cclxuICAgKFthIGJdIChmIChpZiAobmlsPyBhKSB4IGEpIChpZiAobmlsPyBiKSB5IGIpKSlcclxuICAgKFthIGIgY10gKGYgKGlmIChuaWw/IGEpIHggYSkgKGlmIChuaWw/IGIpIHkgYikgYykpXHJcbiAgIChbYSBiIGMgJiBkc10gKGFwcGx5IGYgKGlmIChuaWw/IGEpIHggYSkgKGlmIChuaWw/IGIpIHkgYikgYyBkcykpKSlcclxuIChbZiB4IHkgel1cclxuICAoZm5cclxuICAgKFthIGJdIChmIChpZiAobmlsPyBhKSB4IGEpIChpZiAobmlsPyBiKSB5IGIpKSlcclxuICAgKFthIGIgY10gKGYgKGlmIChuaWw/IGEpIHggYSkgKGlmIChuaWw/IGIpIHkgYikgKGlmIChuaWw/IGMpIHogYykpKVxyXG4gICAoW2EgYiBjICYgZHNdXHJcbiAgICAoYXBwbHlcclxuICAgICBmXHJcbiAgICAgKGlmIChuaWw/IGEpIHggYSlcclxuICAgICAoaWYgKG5pbD8gYikgeSBiKVxyXG4gICAgIChpZiAobmlsPyBjKSB6IGMpXHJcbiAgICAgZHMpKSkpKVxyXG4ifSB7OnN5bSBtZXJnZS13aXRoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCB0aGF0IGNvbnNpc3RzIG9mIHRoZSByZXN0IG9mIHRoZSBtYXBzIGNvbmotZWQgb250b1xuICB0aGUgZmlyc3QuICBJZiBhIGtleSBvY2N1cnMgaW4gbW9yZSB0aGFuIG9uZSBtYXAsIHRoZSBtYXBwaW5nKHMpXG4gIGZyb20gdGhlIGxhdHRlciAobGVmdC10by1yaWdodCkgd2lsbCBiZSBjb21iaW5lZCB3aXRoIHRoZSBtYXBwaW5nIGluXG4gIHRoZSByZXN1bHQgYnkgY2FsbGluZyAoZiB2YWwtaW4tcmVzdWx0IHZhbC1pbi1sYXR0ZXIpLiIsIDphcmdsaXN0cyAoW2YgJiBtYXBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVyZ2Utd2l0aFxyXG4gXCJSZXR1cm5zIGEgbWFwIHRoYXQgY29uc2lzdHMgb2YgdGhlIHJlc3Qgb2YgdGhlIG1hcHMgY29uai1lZCBvbnRvXFxuICB0aGUgZmlyc3QuICBJZiBhIGtleSBvY2N1cnMgaW4gbW9yZSB0aGFuIG9uZSBtYXAsIHRoZSBtYXBwaW5nKHMpXFxuICBmcm9tIHRoZSBsYXR0ZXIgKGxlZnQtdG8tcmlnaHQpIHdpbGwgYmUgY29tYmluZWQgd2l0aCB0aGUgbWFwcGluZyBpblxcbiAgdGhlIHJlc3VsdCBieSBjYWxsaW5nIChmIHZhbC1pbi1yZXN1bHQgdmFsLWluLWxhdHRlcikuXCJcclxuIFtmICYgbWFwc11cclxuICh3aGVuXHJcbiAgKHNvbWUgaWRlbnRpdHkgbWFwcylcclxuICAobGV0XHJcbiAgIFttZXJnZS1lbnRyeVxyXG4gICAgKGZuXHJcbiAgICAgW20gZV1cclxuICAgICAobGV0XHJcbiAgICAgIFtrIChrZXkgZSkgdiAodmFsIGUpXVxyXG4gICAgICAoaWYgKGNvbnRhaW5zPyBtIGspIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIHYpKSAoYXNzb2MgbSBrIHYpKSkpXHJcbiAgICBtZXJnZTJcclxuICAgIChmbiBbbTEgbTJdIChyZWR1Y2UgbWVyZ2UtZW50cnkgKG9yIG0xIHt9KSAoc2VxIG0yKSkpXVxyXG4gICAocmVkdWNlIG1lcmdlMiBtYXBzKSkpKVxyXG4ifSB7OnN5bSBudGhyZXN0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnRoIHJlc3Qgb2YgY29sbCwgY29sbCB3aGVuIG4gaXMgMC4iLCA6YXJnbGlzdHMgKFtjb2xsIG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudGhyZXN0XHJcbiBcIlJldHVybnMgdGhlIG50aCByZXN0IG9mIGNvbGwsIGNvbGwgd2hlbiBuIGlzIDAuXCJcclxuIFtjb2xsIG5dXHJcbiAobG9vcFxyXG4gIFtuIG4geHMgY29sbF1cclxuICAoaWYtbGV0IFt4cyAoYW5kIChwb3M/IG4pIChzZXEgeHMpKV0gKHJlY3VyIChkZWMgbikgKHJlc3QgeHMpKSB4cykpKVxyXG4ifSB7OnN5bSAqd2Fybi1vbi1pbmZlciosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICp3YXJuLW9uLWluZmVyKiBmYWxzZSlcclxuIn0gezpzeW0gLWZpbmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtYXAgZW50cnkgZm9yIGtleSwgb3IgbmlsIGlmIGtleSBub3QgcHJlc2VudC4iLCA6YXJnbGlzdHMgKFtjb2xsIGtdKX0sIDpwcm90b2NvbCBJRmluZH0gezpzeW0gc2VxdWVudGlhbD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVNlcXVlbnRpYWwiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2VxdWVudGlhbD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElTZXF1ZW50aWFsXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSVNlcXVlbnRpYWwgeCkpXHJcbiJ9IHs6c3ltIG0zLW1peC1IMSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtoMSBrMV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG0zLW1peC1IMVxyXG4gW2gxIGsxXVxyXG4gKGludFxyXG4gICgtPlxyXG4gICAoaW50IGgxKVxyXG4gICAoYml0LXhvciAoaW50IGsxKSlcclxuICAgKGludC1yb3RhdGUtbGVmdCAxMylcclxuICAgKGltdWwgNSlcclxuICAgKCsgKGludCAzODY0MjkyMTk2KSkpKSlcclxuIn0gezpzeW0gcHJpbS1zZXEsIDptZXRhIHs6ZG9jICJDcmVhdGUgc2VxIGZyb20gYSBwcmltaXRpdmUgSmF2YVNjcmlwdCBBcnJheS1saWtlLiIsIDphcmdsaXN0cyBbW3ByaW1dIFtwcmltIGldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmltLXNlcVxyXG4gXCJDcmVhdGUgc2VxIGZyb20gYSBwcmltaXRpdmUgSmF2YVNjcmlwdCBBcnJheS1saWtlLlwiXHJcbiAoW3ByaW1dIChwcmltLXNlcSBwcmltIDApKVxyXG4gKFtwcmltIGldICh3aGVuICg8IGkgKGFsZW5ndGggcHJpbSkpIChJbmRleGVkU2VxLiBwcmltIGkgbmlsKSkpKVxyXG4ifSB7OnN5bSAqcHJpbnQtbGV2ZWwqLCA6bWV0YSB7OmRvYyAiKnByaW50LWxldmVsKiBjb250cm9scyBob3cgbWFueSBsZXZlbHMgZGVlcCB0aGUgcHJpbnRlciB3aWxsXG4gIHByaW50IG5lc3RlZCBvYmplY3RzLiBJZiBpdCBpcyBib3VuZCB0byBsb2dpY2FsIGZhbHNlLCB0aGVyZSBpcyBub1xuICBsaW1pdC4gT3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGJvdW5kIHRvIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbWF4aW11bVxuICBsZXZlbCB0byBwcmludC4gRWFjaCBhcmd1bWVudCB0byBwcmludCBpcyBhdCBsZXZlbCAwOyBpZiBhbiBhcmd1bWVudCBpcyBhXG4gIGNvbGxlY3Rpb24sIGl0cyBpdGVtcyBhcmUgYXQgbGV2ZWwgMTsgYW5kIHNvIG9uLiBJZiBhbiBvYmplY3QgaXMgYVxuICBjb2xsZWN0aW9uIGFuZCBpcyBhdCBhIGxldmVsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgYm91bmQgdG9cbiAgKnByaW50LWxldmVsKiwgdGhlIHByaW50ZXIgcHJpbnRzICcjJyB0byByZXByZXNlbnQgaXQuIFRoZSByb290IGJpbmRpbmdcbiAgaXMgbmlsIGluZGljYXRpbmcgbm8gbGltaXQuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LWxldmVsKiBuaWwpXHJcbiJ9IHs6c3ltIHNodWZmbGUsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSByYW5kb20gcGVybXV0YXRpb24gb2YgY29sbCIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaHVmZmxlXHJcbiBcIlJldHVybiBhIHJhbmRvbSBwZXJtdXRhdGlvbiBvZiBjb2xsXCJcclxuIFtjb2xsXVxyXG4gKGxldCBbYSAodG8tYXJyYXkgY29sbCldIChnYXJyYXkvc2h1ZmZsZSBhKSAodmVjIGEpKSlcclxuIn0gezpzeW0gaGFzaC1rZXl3b3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuIGhhc2gta2V5d29yZCBba10gKGludCAoKyAoaGFzaC1zeW1ib2wgaykgMjY1NDQzNTc2OSkpKVxyXG4ifSB7OnN5bSBmaW5kLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWFwIGVudHJ5IGZvciBrZXksIG9yIG5pbCBpZiBrZXkgbm90IHByZXNlbnQuIiwgOmFyZ2xpc3RzIChbY29sbCBrXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZFxyXG4gXCJSZXR1cm5zIHRoZSBtYXAgZW50cnkgZm9yIGtleSwgb3IgbmlsIGlmIGtleSBub3QgcHJlc2VudC5cIlxyXG4gW2NvbGwga11cclxuIChpZlxyXG4gIChpZmluZD8gY29sbClcclxuICAoLWZpbmQgY29sbCBrKVxyXG4gICh3aGVuXHJcbiAgIChhbmQgKG5vdCAobmlsPyBjb2xsKSkgKGFzc29jaWF0aXZlPyBjb2xsKSAoY29udGFpbnM/IGNvbGwgaykpXHJcbiAgIChNYXBFbnRyeS4gayAoZ2V0IGNvbGwgaykgbmlsKSkpKVxyXG4ifSB7OnN5bSBhbGVuZ3RoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gV29ya3Mgb24gYXJyYXlzIG9mIGFsbCB0eXBlcy4iLCA6YXJnbGlzdHMgKFthcnJheV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFsZW5ndGhcclxuIFwiUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4gV29ya3Mgb24gYXJyYXlzIG9mIGFsbCB0eXBlcy5cIlxyXG4gW2FycmF5XVxyXG4gKGNsanMuY29yZS9hbGVuZ3RoIGFycmF5KSlcclxuIn0gezpzeW0gYml0LXhvciwgOm1ldGEgezpkb2MgIkJpdHdpc2UgZXhjbHVzaXZlIG9yIiwgOmFyZ2xpc3RzIFtbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJpdC14b3JcclxuIFwiQml0d2lzZSBleGNsdXNpdmUgb3JcIlxyXG4gKFt4IHldIChjbGpzLmNvcmUvYml0LXhvciB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIGJpdC14b3IgKGNsanMuY29yZS9iaXQteG9yIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSB1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQsIDptZXRhIHs6ZG9jICJCaXR3aXNlIHNoaWZ0IHJpZ2h0IHdpdGggemVybyBmaWxsIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0XHJcbiBcIkJpdHdpc2Ugc2hpZnQgcmlnaHQgd2l0aCB6ZXJvIGZpbGxcIlxyXG4gW3ggbl1cclxuIChjbGpzLmNvcmUvdW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0IHggbikpXHJcbiJ9IHs6c3ltIG5lZz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbnVtIGlzIGxlc3MgdGhhbiB6ZXJvLCBlbHNlIGZhbHNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5lZz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG51bSBpcyBsZXNzIHRoYW4gemVybywgZWxzZSBmYWxzZVwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvbmVnPyB4KSlcclxuIn0gezpzeW0gLXJlbW92ZS1tZXRob2QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWYgZGlzcGF0Y2gtdmFsXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIGpzLWludm9rZSwgOm1ldGEgezpkb2MgIkludm9rZSBKYXZhU2NyaXB0IG9iamVjdCBtZXRob2QgdmlhIHN0cmluZy4gTmVlZGVkIHdoZW4gdGhlXG4gIHN0cmluZyBpcyBub3QgYSB2YWxpZCB1bnF1b3RlZCBwcm9wZXJ0eSBuYW1lLiIsIDphcmdsaXN0cyAoW29iaiBzICYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLWludm9rZVxyXG4gXCJJbnZva2UgSmF2YVNjcmlwdCBvYmplY3QgbWV0aG9kIHZpYSBzdHJpbmcuIE5lZWRlZCB3aGVuIHRoZVxcbiAgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHVucXVvdGVkIHByb3BlcnR5IG5hbWUuXCJcclxuIFtvYmogcyAmIGFyZ3NdXHJcbiAoLmFwcGx5ICh1bmNoZWNrZWQtZ2V0IG9iaiBzKSBvYmogKGludG8tYXJyYXkgYXJncykpKVxyXG4ifSB7OnN5bSBtMy1taXgtSzEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbazFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtMy1taXgtSzFcclxuIFtrMV1cclxuICgtPiAoaW50IGsxKSAoaW11bCBtMy1DMSkgKGludC1yb3RhdGUtbGVmdCAxNSkgKGltdWwgbTMtQzIpKSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWZsb2F0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1mbG9hdCBbeF0geClcclxuIn0gezpzeW0gdW5kZWZpbmVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlkZW50aWNhbCB0byB0aGUgSmF2YVNjcmlwdCB1bmRlZmluZWQgdmFsdWUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuZGVmaW5lZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaWRlbnRpY2FsIHRvIHRoZSBKYXZhU2NyaXB0IHVuZGVmaW5lZCB2YWx1ZS5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3VuZGVmaW5lZD8geCkpXHJcbiJ9IHs6c3ltIElNZXRhLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFjY2Vzc2luZyB0aGUgbWV0YWRhdGEgb2YgYW4gb2JqZWN0LiJ9LCA6bWV0aG9kcyAoLW1ldGEpfSB7OnN5bSByZWR1Y2VkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIHJlZHVjZWQiLCA6YXJnbGlzdHMgKFtyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVkdWNlZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gcmVkdWNlZFwiXHJcbiBbcl1cclxuIChpbnN0YW5jZT8gUmVkdWNlZCByKSlcclxuIn0gezpzeW0gZGlzaiEsIDptZXRhIHs6ZG9jICJkaXNqW29pbl0uIFJldHVybnMgYSB0cmFuc2llbnQgc2V0IG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0XG4gIGRvZXMgbm90IGNvbnRhaW4ga2V5KHMpLiIsIDphcmdsaXN0cyBbW3Rjb2xsIHZhbF0gW3Rjb2xsIHZhbCAmIHZhbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXNqIVxyXG4gXCJkaXNqW29pbl0uIFJldHVybnMgYSB0cmFuc2llbnQgc2V0IG9mIHRoZSBzYW1lIChoYXNoZWQvc29ydGVkKSB0eXBlLCB0aGF0XFxuICBkb2VzIG5vdCBjb250YWluIGtleShzKS5cIlxyXG4gKFt0Y29sbCB2YWxdICgtZGlzam9pbiEgdGNvbGwgdmFsKSlcclxuIChbdGNvbGwgdmFsICYgdmFsc11cclxuICAobGV0XHJcbiAgIFtudGNvbGwgKC1kaXNqb2luISB0Y29sbCB2YWwpXVxyXG4gICAoaWYgdmFscyAocmVjdXIgbnRjb2xsIChmaXJzdCB2YWxzKSAobmV4dCB2YWxzKSkgbnRjb2xsKSkpKVxyXG4ifSB7OnN5bSAtbG9va3VwLCA6bWV0YSB7OmRvYyAiVXNlIGsgdG8gbG9vayB1cCBhIHZhbHVlIGluIG8uIElmIG5vdC1mb3VuZCBpcyBzdXBwbGllZCBhbmQgayBpcyBub3RcbiAgICAgYSB2YWxpZCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBsb29rIHVwLCBub3QtZm91bmQgaXMgcmV0dXJuZWQuIiwgOmFyZ2xpc3RzIChbbyBrXSBbbyBrIG5vdC1mb3VuZF0pfSwgOnByb3RvY29sIElMb29rdXB9IHs6c3ltIGZsb2F0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBmb3IgSmF2YVNjcmlwdCBudW1iZXJzLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZsb2F0P1xyXG4gXCJSZXR1cm5zIHRydWUgZm9yIEphdmFTY3JpcHQgbnVtYmVycywgZmFsc2Ugb3RoZXJ3aXNlLlwiXHJcbiBbeF1cclxuIChudW1iZXI/IHgpKVxyXG4ifSB7OnN5bSBJQ2xvbmVhYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGNsb25pbmcgYSB2YWx1ZS4ifSwgOm1ldGhvZHMgKC1jbG9uZSl9IHs6c3ltIElFbmNvZGVDbG9qdXJlLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoLWpzLT5jbGopfSB7OnN5bSBib29sZWFucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBib29sZWFucyBbeF0geClcclxuIn0gezpzeW0gaW50LWFycmF5LCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBhcnJheSBvZiBpbnRzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XG4gIHdpdGggQ2xvanVyZS4iLCA6YXJnbGlzdHMgW1tzaXplLW9yLXNlcV0gW3NpemUgaW5pdC12YWwtb3Itc2VxXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50LWFycmF5XHJcbiBcIkNyZWF0ZXMgYW4gYXJyYXkgb2YgaW50cy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxcbiAgd2l0aCBDbG9qdXJlLlwiXHJcbiAoW3NpemUtb3Itc2VxXVxyXG4gIChpZlxyXG4gICAobnVtYmVyPyBzaXplLW9yLXNlcSlcclxuICAgKGludC1hcnJheSBzaXplLW9yLXNlcSBuaWwpXHJcbiAgIChpbnRvLWFycmF5IHNpemUtb3Itc2VxKSkpXHJcbiAoW3NpemUgaW5pdC12YWwtb3Itc2VxXVxyXG4gIChsZXRcclxuICAgW2EgKG1ha2UtYXJyYXkgc2l6ZSldXHJcbiAgIChpZlxyXG4gICAgKHNlcT8gaW5pdC12YWwtb3Itc2VxKVxyXG4gICAgKGxldFxyXG4gICAgIFtzIChzZXEgaW5pdC12YWwtb3Itc2VxKV1cclxuICAgICAobG9vcFxyXG4gICAgICBbaSAwIHMgc11cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIHMgKDwgaSBzaXplKSlcclxuICAgICAgIChkbyAoYXNldCBhIGkgKGZpcnN0IHMpKSAocmVjdXIgKGluYyBpKSAobmV4dCBzKSkpXHJcbiAgICAgICBhKSkpXHJcbiAgICAoZG8gKGRvdGltZXMgW2kgc2l6ZV0gKGFzZXQgYSBpIGluaXQtdmFsLW9yLXNlcSkpIGEpKSkpKVxyXG4ifSB7OnN5bSBzZXQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElTZXQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVNldFwiXHJcbiBbeF1cclxuIChpZiAobmlsPyB4KSBmYWxzZSAoc2F0aXNmaWVzPyBJU2V0IHgpKSlcclxuIn0gezpzeW0gaXRlcmFibGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpbXBsZW1lbnRzIElJdGVyYWJsZSBwcm90b2NvbC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaXRlcmFibGU/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaW1wbGVtZW50cyBJSXRlcmFibGUgcHJvdG9jb2wuXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUl0ZXJhYmxlIHgpKVxyXG4ifSB7OnN5bSBjYXQsIDptZXRhIHs6ZG9jICJBIHRyYW5zZHVjZXIgd2hpY2ggY29uY2F0ZW5hdGVzIHRoZSBjb250ZW50cyBvZiBlYWNoIGlucHV0LCB3aGljaCBtdXN0IGJlIGFcbiAgY29sbGVjdGlvbiwgaW50byB0aGUgcmVkdWN0aW9uLiIsIDphcmdsaXN0cyAoW3JmXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2F0XHJcbiBcIkEgdHJhbnNkdWNlciB3aGljaCBjb25jYXRlbmF0ZXMgdGhlIGNvbnRlbnRzIG9mIGVhY2ggaW5wdXQsIHdoaWNoIG11c3QgYmUgYVxcbiAgY29sbGVjdGlvbiwgaW50byB0aGUgcmVkdWN0aW9uLlwiXHJcbiB7OmFkZGVkIFwiMS43XCJ9XHJcbiBbcmZdXHJcbiAobGV0XHJcbiAgW3JmMSAocHJlc2VydmluZy1yZWR1Y2VkIHJmKV1cclxuICAoZm5cclxuICAgKFtdIChyZikpXHJcbiAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgKFtyZXN1bHQgaW5wdXRdIChyZWR1Y2UgcmYxIHJlc3VsdCBpbnB1dCkpKSkpXHJcbiJ9IHs6c3ltIC1wci13cml0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbyB3cml0ZXIgb3B0c10pfSwgOnByb3RvY29sIElQcmludFdpdGhXcml0ZXJ9IHs6c3ltIGZsdXNoLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gZmx1c2ggW10gbmlsKVxyXG4ifSB7OnN5bSBzZXQtZnJvbS1pbmRleGVkLXNlcSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpc2VxXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0LWZyb20taW5kZXhlZC1zZXFcclxuIFtpc2VxXVxyXG4gKGxldFxyXG4gIFthcnJcclxuICAgKC4tYXJyIGlzZXEpXHJcbiAgIHJldFxyXG4gICAoYXJlZHVjZSBhcnIgaSByZXMgKC1hcy10cmFuc2llbnQgI3t9KSAoLWNvbmohIHJlcyAoYWdldCBhcnIgaSkpKV1cclxuICAoLXBlcnNpc3RlbnQhIHJldCkpKVxyXG4ifSB7OnN5bSB0YWtlLXdoaWxlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2Ygc3VjY2Vzc2l2ZSBpdGVtcyBmcm9tIGNvbGwgd2hpbGVcbiAgKHByZWQgaXRlbSkgcmV0dXJucyBsb2dpY2FsIHRydWUuIHByZWQgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0cy5cbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3ByZWRdIFtwcmVkIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlLXdoaWxlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHN1Y2Nlc3NpdmUgaXRlbXMgZnJvbSBjb2xsIHdoaWxlXFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxcbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3ByZWRdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGZuXHJcbiAgICAoW10gKHJmKSlcclxuICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgIChpZiAocHJlZCBpbnB1dCkgKHJmIHJlc3VsdCBpbnB1dCkgKHJlZHVjZWQgcmVzdWx0KSkpKSkpXHJcbiAoW3ByZWQgY29sbF1cclxuICAobGF6eS1zZXFcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgKHdoZW5cclxuICAgICAocHJlZCAoZmlyc3QgcykpXHJcbiAgICAgKGNvbnMgKGZpcnN0IHMpICh0YWtlLXdoaWxlIHByZWQgKHJlc3QgcykpKSkpKSkpXHJcbiJ9IHs6c3ltIHZhcnktbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIG9iaiwgd2l0aFxuICAoYXBwbHkgZiAobWV0YSBvYmopIGFyZ3MpIGFzIGl0cyBtZXRhZGF0YS4iLCA6YXJnbGlzdHMgW1tvYmogZl0gW29iaiBmIGFdIFtvYmogZiBhIGJdIFtvYmogZiBhIGIgY10gW29iaiBmIGEgYiBjIGRdIFtvYmogZiBhIGIgYyBkICYgYXJnc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhcnktbWV0YVxyXG4gXCJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBvYmosIHdpdGhcXG4gIChhcHBseSBmIChtZXRhIG9iaikgYXJncykgYXMgaXRzIG1ldGFkYXRhLlwiXHJcbiAoW29iaiBmXSAod2l0aC1tZXRhIG9iaiAoZiAobWV0YSBvYmopKSkpXHJcbiAoW29iaiBmIGFdICh3aXRoLW1ldGEgb2JqIChmIChtZXRhIG9iaikgYSkpKVxyXG4gKFtvYmogZiBhIGJdICh3aXRoLW1ldGEgb2JqIChmIChtZXRhIG9iaikgYSBiKSkpXHJcbiAoW29iaiBmIGEgYiBjXSAod2l0aC1tZXRhIG9iaiAoZiAobWV0YSBvYmopIGEgYiBjKSkpXHJcbiAoW29iaiBmIGEgYiBjIGRdICh3aXRoLW1ldGEgb2JqIChmIChtZXRhIG9iaikgYSBiIGMgZCkpKVxyXG4gKFtvYmogZiBhIGIgYyBkICYgYXJnc11cclxuICAod2l0aC1tZXRhIG9iaiAoYXBwbHkgZiAobWV0YSBvYmopIGEgYiBjIGQgYXJncykpKSlcclxuIn0gezpzeW0gSU5leHQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWNjZXNzaW5nIHRoZSBuZXh0IGl0ZW1zIG9mIGEgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1uZXh0KX0gezpzeW0gaXNfcHJvdG9fLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGlzX3Byb3RvXyBbeF0gKGlkZW50aWNhbD8gKC4tcHJvdG90eXBlICguLWNvbnN0cnVjdG9yIHgpKSB4KSlcclxuIn0gezpzeW0gU1RBUlQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFNUQVJUICNqcyB7fSlcclxuIn0gezpzeW0gSUNvdW50ZWQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHRoZSBhYmlsaXR5IHRvIGNvdW50IGEgY29sbGVjdGlvbiBpbiBjb25zdGFudCB0aW1lLiJ9LCA6bWV0aG9kcyAoLWNvdW50KX0gezpzeW0gSU1hcEVudHJ5LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGV4YW1pbmluZyBhIG1hcCBlbnRyeS4ifSwgOm1ldGhvZHMgKC1rZXkgLXZhbCl9IHs6c3ltIDw9LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgbm9uLWRlY3JlYXNpbmcgb3JkZXIsXG4gIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIDw9XHJcbiBcIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IG5vbi1kZWNyZWFzaW5nIG9yZGVyLFxcbiAgb3RoZXJ3aXNlIGZhbHNlLlwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKGNsanMuY29yZS88PSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoY2xqcy5jb3JlLzw9IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKGNsanMuY29yZS88PSB5IChmaXJzdCBtb3JlKSkpXHJcbiAgIGZhbHNlKSkpXHJcbiJ9IHs6c3ltIE1PRFVMRV9JTkZPUywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTU9EVUxFX0lORk9TIG5pbClcclxuIn0gezpzeW0gY29uaiEsIDptZXRhIHs6ZG9jICJBZGRzIHZhbCB0byB0aGUgdHJhbnNpZW50IGNvbGxlY3Rpb24sIGFuZCByZXR1cm4gdGNvbGwuIFRoZSAnYWRkaXRpb24nXG4gIG1heSBoYXBwZW4gYXQgZGlmZmVyZW50ICdwbGFjZXMnIGRlcGVuZGluZyBvbiB0aGUgY29uY3JldGUgdHlwZS4iLCA6YXJnbGlzdHMgW1tdIFt0Y29sbF0gW3Rjb2xsIHZhbF0gW3Rjb2xsIHZhbCAmIHZhbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25qIVxyXG4gXCJBZGRzIHZhbCB0byB0aGUgdHJhbnNpZW50IGNvbGxlY3Rpb24sIGFuZCByZXR1cm4gdGNvbGwuIFRoZSAnYWRkaXRpb24nXFxuICBtYXkgaGFwcGVuIGF0IGRpZmZlcmVudCAncGxhY2VzJyBkZXBlbmRpbmcgb24gdGhlIGNvbmNyZXRlIHR5cGUuXCJcclxuIChbXSAodHJhbnNpZW50IFtdKSlcclxuIChbdGNvbGxdIHRjb2xsKVxyXG4gKFt0Y29sbCB2YWxdICgtY29uaiEgdGNvbGwgdmFsKSlcclxuIChbdGNvbGwgdmFsICYgdmFsc11cclxuICAobGV0XHJcbiAgIFtudGNvbGwgKC1jb25qISB0Y29sbCB2YWwpXVxyXG4gICAoaWYgdmFscyAocmVjdXIgbnRjb2xsIChmaXJzdCB2YWxzKSAobmV4dCB2YWxzKSkgbnRjb2xsKSkpKVxyXG4ifSB7OnN5bSAtcG9wLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBzdGFjayB3aXRob3V0IHRoZSBpdGVtIG9uIHRvcCBvZiB0aGUgc3RhY2suIElzIHVzZWRcbiAgICAgYnkgY2xqcy5jb3JlL3BvcC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVN0YWNrfSB7OnN5bSByZXBlYXRlZGx5LCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBmdW5jdGlvbiBvZiBubyBhcmdzLCBwcmVzdW1hYmx5IHdpdGggc2lkZSBlZmZlY3RzLCBhbmRcbiAgcmV0dXJucyBhbiBpbmZpbml0ZSAob3IgbGVuZ3RoIG4gaWYgc3VwcGxpZWQpIGxhenkgc2VxdWVuY2Ugb2YgY2FsbHNcbiAgdG8gaXQiLCA6YXJnbGlzdHMgW1tmXSBbbiBmXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVwZWF0ZWRseVxyXG4gXCJUYWtlcyBhIGZ1bmN0aW9uIG9mIG5vIGFyZ3MsIHByZXN1bWFibHkgd2l0aCBzaWRlIGVmZmVjdHMsIGFuZFxcbiAgcmV0dXJucyBhbiBpbmZpbml0ZSAob3IgbGVuZ3RoIG4gaWYgc3VwcGxpZWQpIGxhenkgc2VxdWVuY2Ugb2YgY2FsbHNcXG4gIHRvIGl0XCJcclxuIChbZl0gKGxhenktc2VxIChjb25zIChmKSAocmVwZWF0ZWRseSBmKSkpKVxyXG4gKFtuIGZdICh0YWtlIG4gKHJlcGVhdGVkbHkgZikpKSlcclxuIn0gezpzeW0gemlwbWFwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIG1hcHBlZCB0byB0aGUgY29ycmVzcG9uZGluZyB2YWxzLiIsIDphcmdsaXN0cyAoW2tleXMgdmFsc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHppcG1hcFxyXG4gXCJSZXR1cm5zIGEgbWFwIHdpdGggdGhlIGtleXMgbWFwcGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHMuXCJcclxuIFtrZXlzIHZhbHNdXHJcbiAobG9vcFxyXG4gIFttYXAgKHRyYW5zaWVudCB7fSkga3MgKHNlcSBrZXlzKSB2cyAoc2VxIHZhbHMpXVxyXG4gIChpZlxyXG4gICAoYW5kIGtzIHZzKVxyXG4gICAocmVjdXIgKGFzc29jISBtYXAgKGZpcnN0IGtzKSAoZmlyc3QgdnMpKSAobmV4dCBrcykgKG5leHQgdnMpKVxyXG4gICAocGVyc2lzdGVudCEgbWFwKSkpKVxyXG4ifSB7OnN5bSByZXNldC12YWxzISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsLiBSZXR1cm5zIFtvbGQgbmV3XSwgdGhlIHZhbHVlIG9mIHRoZVxuICAgYXRvbSBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZXNldC4iLCA6YXJnbGlzdHMgKFthIG5ldy12YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc2V0LXZhbHMhXHJcbiBcIlNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsLiBSZXR1cm5zIFtvbGQgbmV3XSwgdGhlIHZhbHVlIG9mIHRoZVxcbiAgIGF0b20gYmVmb3JlIGFuZCBhZnRlciB0aGUgcmVzZXQuXCJcclxuIHs6YWRkZWQgXCIxLjlcIn1cclxuIFthIG5ldy12YWx1ZV1cclxuIChsZXRcclxuICBbdmFsaWRhdGUgKC4tdmFsaWRhdG9yIGEpXVxyXG4gICh3aGVuLW5vdFxyXG4gICAobmlsPyB2YWxpZGF0ZSlcclxuICAgKHdoZW4tbm90XHJcbiAgICAodmFsaWRhdGUgbmV3LXZhbHVlKVxyXG4gICAgKHRocm93IChqcy9FcnJvci4gXCJWYWxpZGF0b3IgcmVqZWN0ZWQgcmVmZXJlbmNlIHN0YXRlXCIpKSkpXHJcbiAgKGxldFxyXG4gICBbb2xkLXZhbHVlICguLXN0YXRlIGEpXVxyXG4gICAoc2V0ISAoLi1zdGF0ZSBhKSBuZXctdmFsdWUpXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKG5pbD8gKC4td2F0Y2hlcyBhKSlcclxuICAgICgtbm90aWZ5LXdhdGNoZXMgYSBvbGQtdmFsdWUgbmV3LXZhbHVlKSlcclxuICAgW29sZC12YWx1ZSBuZXctdmFsdWVdKSkpXHJcbiJ9IHs6c3ltIElTdGFjaywgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBjb2xsZWN0aW9ucyB0byBwcm92aWRlIGFjY2VzcyB0byB0aGVpciBpdGVtcyBhcyBzdGFja3MuIFRoZSB0b3BcbiAgb2YgdGhlIHN0YWNrIHNob3VsZCBiZSBhY2Nlc3NlZCBpbiB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IGZvciB0aGUgZGlmZmVyZW50XG4gIGRhdGEgc3RydWN0dXJlcy4ifSwgOm1ldGhvZHMgKC1wZWVrIC1wb3ApfSB7OnN5bSAtcmVtb3ZlLXdhdGNoLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB3YXRjaGVyIHRoYXQgY29ycmVzcG9uZHMgdG8ga2V5IGZyb20gdGhpcy4iLCA6YXJnbGlzdHMgKFt0aGlzIGtleV0pfSwgOnByb3RvY29sIElXYXRjaGFibGV9IHs6c3ltIElWb2xhdGlsZSwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdm9sYXRpbGUgZnVuY3Rpb25hbGl0eS4ifSwgOm1ldGhvZHMgKC12cmVzZXQhKX0gezpzeW0gcmVtb3ZlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgZm9yIHdoaWNoXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCBmYWxzZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbcHJlZF0gW3ByZWQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZVxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCBmYWxzZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxcbiAgUmV0dXJucyBhIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3ByZWRdIChmaWx0ZXIgKGNvbXBsZW1lbnQgcHJlZCkpKVxyXG4gKFtwcmVkIGNvbGxdIChmaWx0ZXIgKGNvbXBsZW1lbnQgcHJlZCkgY29sbCkpKVxyXG4ifSB7OnN5bSAqLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gKlxyXG4gXCJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuXCJcclxuIChbXSAxKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvKiB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlICogKGNsanMuY29yZS8qIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSByZS1wYXR0ZXJuLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSZWdFeHAgd2hpY2ggaGFzIGNvbXBpbGVkIHRoZSBwcm92aWRlZCBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlLXBhdHRlcm5cclxuIFwiUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBSZWdFeHAgd2hpY2ggaGFzIGNvbXBpbGVkIHRoZSBwcm92aWRlZCBzdHJpbmcuXCJcclxuIFtzXVxyXG4gKGlmXHJcbiAgKGluc3RhbmNlPyBqcy9SZWdFeHAgcylcclxuICBzXHJcbiAgKGxldFxyXG4gICBbW3ByZWZpeCBmbGFnc11cclxuICAgIChyZS1maW5kICNcIl5cXChcXD8oW2lkbXN1eF0qKVxcKVwiIHMpXHJcbiAgICBwYXR0ZXJuXHJcbiAgICAoc3VicyBzIChpZiAobmlsPyBwcmVmaXgpIDAgKGNvdW50IHByZWZpeCkpKV1cclxuICAgKGpzL1JlZ0V4cC4gcGF0dGVybiAob3IgZmxhZ3MgXCJcIikpKSkpXHJcbiJ9IHs6c3ltIG1pbiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxlYXN0IG9mIHRoZSBudW1zLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbWluXHJcbiBcIlJldHVybnMgdGhlIGxlYXN0IG9mIHRoZSBudW1zLlwiXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS9taW4geCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBtaW4gKGNsanMuY29yZS9taW4geCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIC1wZXJzaXN0ZW50ISwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBwZXJzaXN0ZW50IGRhdGEgc3RydWN0dXJlIGZyb20gdGNvbGwgYW5kIHJldHVybnMgaXQuIiwgOmFyZ2xpc3RzIChbdGNvbGxdKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50Q29sbGVjdGlvbn0gezpzeW0gLW50aCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleCBuIGluIHRoZSBjb2xsZWN0aW9uIGNvbGwuXG4gICAgIFJldHVybnMgbm90LWZvdW5kIGlmIGluZGV4IG4gaXMgb3V0IG9mIGJvdW5kcyBhbmQgbm90LWZvdW5kIGlzIHN1cHBsaWVkLiIsIDphcmdsaXN0cyAoW2NvbGwgbl0gW2NvbGwgbiBub3QtZm91bmRdKX0sIDpwcm90b2NvbCBJSW5kZXhlZH0gezpzeW0gcG9wISwgOm1ldGEgezpkb2MgIlJlbW92ZXMgdGhlIGxhc3QgaXRlbSBmcm9tIGEgdHJhbnNpZW50IHZlY3Rvci4gSWZcbiAgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHksIHRocm93cyBhbiBleGNlcHRpb24uIFJldHVybnMgdGNvbGwiLCA6YXJnbGlzdHMgKFt0Y29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvcCFcclxuIFwiUmVtb3ZlcyB0aGUgbGFzdCBpdGVtIGZyb20gYSB0cmFuc2llbnQgdmVjdG9yLiBJZlxcbiAgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHksIHRocm93cyBhbiBleGNlcHRpb24uIFJldHVybnMgdGNvbGxcIlxyXG4gW3Rjb2xsXVxyXG4gKC1wb3AhIHRjb2xsKSlcclxuIn0gezpzeW0gY2h1bmstYXBwZW5kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2IgeF0pfSwgOnNvdXJjZSAiKGRlZm4gY2h1bmstYXBwZW5kIFtiIHhdICguYWRkIGIgeCkpXHJcbiJ9IHs6c3ltICp1bmNoZWNrZWQtYXJyYXlzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnVuY2hlY2tlZC1hcnJheXMqIGZhbHNlKVxyXG4ifSB7OnN5bSBwcm4tc3RyLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBwci1zdHIgZm9sbG93ZWQgYnkgKG5ld2xpbmUpIiwgOmFyZ2xpc3RzIChbJiBvYmpzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJuLXN0clxyXG4gXCJTYW1lIGFzIHByLXN0ciBmb2xsb3dlZCBieSAobmV3bGluZSlcIlxyXG4gWyYgb2Jqc11cclxuIChwcm4tc3RyLXdpdGgtb3B0cyBvYmpzIChwci1vcHRzKSkpXHJcbiJ9IHs6c3ltIElSZXZlcnNpYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHJldmVyc2luZyBhIHNlcS4ifSwgOm1ldGhvZHMgKC1yc2VxKX0gezpzeW0gcmV2ZXJzaWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXM/IElSZXZlcnNpYmxlLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXZlcnNpYmxlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXM/IElSZXZlcnNpYmxlLlwiXHJcbiBbY29sbF1cclxuIChzYXRpc2ZpZXM/IElSZXZlcnNpYmxlIGNvbGwpKVxyXG4ifSB7OnN5bSAtcmVhbGl6ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgZm9yIHggaGFzIGJlZW4gcHJvZHVjZWQsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgSVBlbmRpbmd9IHs6c3ltIC1hZGQtd2F0Y2gsIDptZXRhIHs6ZG9jICJBZGRzIGEgd2F0Y2hlciBmdW5jdGlvbiBmIHRvIHRoaXMuIEtleXMgbXVzdCBiZSB1bmlxdWUgcGVyIHJlZmVyZW5jZSxcbiAgICAgYW5kIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgd2F0Y2ggd2l0aCAtcmVtb3ZlLXdhdGNoLiIsIDphcmdsaXN0cyAoW3RoaXMga2V5IGZdKX0sIDpwcm90b2NvbCBJV2F0Y2hhYmxlfSB7OnN5bSAtZGVyZWYtd2l0aC10aW1lb3V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW28gbXNlYyB0aW1lb3V0LXZhbF0pfSwgOnByb3RvY29sIElEZXJlZldpdGhUaW1lb3V0fSB7OnN5bSBjb25qLCA6bWV0YSB7OmRvYyAiY29ualtvaW5dLiBSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCB0aGUgeHNcbiAgJ2FkZGVkJy4gKGNvbmogbmlsIGl0ZW0pIHJldHVybnMgKGl0ZW0pLiAgVGhlICdhZGRpdGlvbicgbWF5XG4gIGhhcHBlbiBhdCBkaWZmZXJlbnQgJ3BsYWNlcycgZGVwZW5kaW5nIG9uIHRoZSBjb25jcmV0ZSB0eXBlLiIsIDphcmdsaXN0cyBbW10gW2NvbGxdIFtjb2xsIHhdIFtjb2xsIHggJiB4c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmpcclxuIFwiY29ualtvaW5dLiBSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gd2l0aCB0aGUgeHNcXG4gICdhZGRlZCcuIChjb25qIG5pbCBpdGVtKSByZXR1cm5zIChpdGVtKS4gIFRoZSAnYWRkaXRpb24nIG1heVxcbiAgaGFwcGVuIGF0IGRpZmZlcmVudCAncGxhY2VzJyBkZXBlbmRpbmcgb24gdGhlIGNvbmNyZXRlIHR5cGUuXCJcclxuIChbXSBbXSlcclxuIChbY29sbF0gY29sbClcclxuIChbY29sbCB4XSAoaWYtbm90IChuaWw/IGNvbGwpICgtY29uaiBjb2xsIHgpIChsaXN0IHgpKSlcclxuIChbY29sbCB4ICYgeHNdXHJcbiAgKGlmIHhzIChyZWN1ciAoY29uaiBjb2xsIHgpIChmaXJzdCB4cykgKG5leHQgeHMpKSAoY29uaiBjb2xsIHgpKSkpXHJcbiJ9IHs6c3ltIC1zb3J0ZWQtc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNvcnRlZCBzZXEgZnJvbSBjb2xsIGluIGVpdGhlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlci4iLCA6YXJnbGlzdHMgKFtjb2xsIGFzY2VuZGluZz9dKX0sIDpwcm90b2NvbCBJU29ydGVkfSB7OnN5bSB0cmFuc2R1Y2UsIDptZXRhIHs6ZG9jICJyZWR1Y2Ugd2l0aCBhIHRyYW5zZm9ybWF0aW9uIG9mIGYgKHhmKS4gSWYgaW5pdCBpcyBub3RcbiAgc3VwcGxpZWQsIChmKSB3aWxsIGJlIGNhbGxlZCB0byBwcm9kdWNlIGl0LiBmIHNob3VsZCBiZSBhIHJlZHVjaW5nXG4gIHN0ZXAgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGJvdGggMSBhbmQgMiBhcmd1bWVudHMsIGlmIGl0IGFjY2VwdHNcbiAgb25seSAyIHlvdSBjYW4gYWRkIHRoZSBhcml0eS0xIHdpdGggJ2NvbXBsZXRpbmcnLiBSZXR1cm5zIHRoZSByZXN1bHRcbiAgb2YgYXBwbHlpbmcgKHRoZSB0cmFuc2Zvcm1lZCkgeGYgdG8gaW5pdCBhbmQgdGhlIGZpcnN0IGl0ZW0gaW4gY29sbCxcbiAgdGhlbiBhcHBseWluZyB4ZiB0byB0aGF0IHJlc3VsdCBhbmQgdGhlIDJuZCBpdGVtLCBldGMuIElmIGNvbGxcbiAgY29udGFpbnMgbm8gaXRlbXMsIHJldHVybnMgaW5pdCBhbmQgZiBpcyBub3QgY2FsbGVkLiBOb3RlIHRoYXRcbiAgY2VydGFpbiB0cmFuc2Zvcm1zIG1heSBpbmplY3Qgb3Igc2tpcCBpdGVtcy4iLCA6YXJnbGlzdHMgW1t4Zm9ybSBmIGNvbGxdIFt4Zm9ybSBmIGluaXQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zZHVjZVxyXG4gXCJyZWR1Y2Ugd2l0aCBhIHRyYW5zZm9ybWF0aW9uIG9mIGYgKHhmKS4gSWYgaW5pdCBpcyBub3RcXG4gIHN1cHBsaWVkLCAoZikgd2lsbCBiZSBjYWxsZWQgdG8gcHJvZHVjZSBpdC4gZiBzaG91bGQgYmUgYSByZWR1Y2luZ1xcbiAgc3RlcCBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYm90aCAxIGFuZCAyIGFyZ3VtZW50cywgaWYgaXQgYWNjZXB0c1xcbiAgb25seSAyIHlvdSBjYW4gYWRkIHRoZSBhcml0eS0xIHdpdGggJ2NvbXBsZXRpbmcnLiBSZXR1cm5zIHRoZSByZXN1bHRcXG4gIG9mIGFwcGx5aW5nICh0aGUgdHJhbnNmb3JtZWQpIHhmIHRvIGluaXQgYW5kIHRoZSBmaXJzdCBpdGVtIGluIGNvbGwsXFxuICB0aGVuIGFwcGx5aW5nIHhmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWYgY29sbFxcbiAgY29udGFpbnMgbm8gaXRlbXMsIHJldHVybnMgaW5pdCBhbmQgZiBpcyBub3QgY2FsbGVkLiBOb3RlIHRoYXRcXG4gIGNlcnRhaW4gdHJhbnNmb3JtcyBtYXkgaW5qZWN0IG9yIHNraXAgaXRlbXMuXCJcclxuIChbeGZvcm0gZiBjb2xsXSAodHJhbnNkdWNlIHhmb3JtIGYgKGYpIGNvbGwpKVxyXG4gKFt4Zm9ybSBmIGluaXQgY29sbF1cclxuICAobGV0IFtmICh4Zm9ybSBmKSByZXQgKHJlZHVjZSBmIGluaXQgY29sbCldIChmIHJldCkpKSlcclxuIn0gezpzeW0gLXN3YXAhLCA6bWV0YSB7OmRvYyAiU3dhcHMgdGhlIHZhbHVlIG9mIG8gdG8gYmUgKGFwcGx5IGYgY3VycmVudC12YWx1ZS1vZi1hdG9tIGFyZ3MpLiIsIDphcmdsaXN0cyAoW28gZl0gW28gZiBhXSBbbyBmIGEgYl0gW28gZiBhIGIgeHNdKX0sIDpwcm90b2NvbCBJU3dhcH0gezpzeW0gKnByaW50LWxlbmd0aCosIDptZXRhIHs6ZG9jICIqcHJpbnQtbGVuZ3RoKiBjb250cm9scyBob3cgbWFueSBpdGVtcyBvZiBlYWNoIGNvbGxlY3Rpb24gdGhlXG4gIHByaW50ZXIgd2lsbCBwcmludC4gSWYgaXQgaXMgYm91bmQgdG8gbG9naWNhbCBmYWxzZSwgdGhlcmUgaXMgbm9cbiAgbGltaXQuIE90aGVyd2lzZSwgaXQgbXVzdCBiZSBib3VuZCB0byBhbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIG1heGltdW1cbiAgbnVtYmVyIG9mIGl0ZW1zIG9mIGVhY2ggY29sbGVjdGlvbiB0byBwcmludC4gSWYgYSBjb2xsZWN0aW9uIGNvbnRhaW5zXG4gIG1vcmUgaXRlbXMsIHRoZSBwcmludGVyIHdpbGwgcHJpbnQgaXRlbXMgdXAgdG8gdGhlIGxpbWl0IGZvbGxvd2VkIGJ5XG4gICcuLi4nIHRvIHJlcHJlc2VudCB0aGUgcmVtYWluaW5nIGl0ZW1zLiBUaGUgcm9vdCBiaW5kaW5nIGlzIG5pbFxuICBpbmRpY2F0aW5nIG5vIGxpbWl0LiJ9LCA6c291cmNlICIoZGVmICpwcmludC1sZW5ndGgqIG5pbClcclxuIn0gezpzeW0ganMtZGVsZXRlLCA6bWV0YSB7OmRvYyAiRGVsZXRlIGEgcHJvcGVydHkgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbb2JqIGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLWRlbGV0ZVxyXG4gXCJEZWxldGUgYSBwcm9wZXJ0eSBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3QuXFxuICBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFtvYmoga2V5XVxyXG4gKGNsanMuY29yZS9qcy1kZWxldGUgb2JqIGtleSkpXHJcbiJ9IHs6c3ltIHRydXRoXywgOm1ldGEgezpkb2MgIkludGVybmFsIC0gZG8gbm90IHVzZSEiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB0cnV0aF8gXCJJbnRlcm5hbCAtIGRvIG5vdCB1c2UhXCIgW3hdIChjbGpzLmNvcmUvdHJ1dGhfIHgpKVxyXG4ifSB7OnN5bSBhcnJheS1pbmRleC1vZiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthcnIga10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5LWluZGV4LW9mXHJcbiBbYXJyIGtdXHJcbiAoY29uZFxyXG4gIChrZXl3b3JkPyBrKVxyXG4gIChhcnJheS1pbmRleC1vZi1rZXl3b3JkPyBhcnIgaylcclxuICAob3IgKGdvb2cvaXNTdHJpbmcgaykgKG51bWJlcj8gaykpXHJcbiAgKGFycmF5LWluZGV4LW9mLWlkZW50aWNhbD8gYXJyIGspXHJcbiAgKHN5bWJvbD8gaylcclxuICAoYXJyYXktaW5kZXgtb2Ytc3ltYm9sPyBhcnIgaylcclxuICAobmlsPyBrKVxyXG4gIChhcnJheS1pbmRleC1vZi1uaWw/IGFycilcclxuICA6ZWxzZVxyXG4gIChhcnJheS1pbmRleC1vZi1lcXVpdj8gYXJyIGspKSlcclxuIn0gezpzeW0ga2V5LT5qcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1trXSBbayBwcmltaXRpdmUtZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXktPmpzXHJcbiAoW2tdIChrZXktPmpzIGsgY2xqLT5qcykpXHJcbiAoW2sgcHJpbWl0aXZlLWZuXVxyXG4gIChjb25kXHJcbiAgIChzYXRpc2ZpZXM/IElFbmNvZGVKUyBrKVxyXG4gICAoLWNsai0+anMgaylcclxuICAgKG9yIChzdHJpbmc/IGspIChudW1iZXI/IGspIChrZXl3b3JkPyBrKSAoc3ltYm9sPyBrKSlcclxuICAgKHByaW1pdGl2ZS1mbiBrKVxyXG4gICA6ZGVmYXVsdFxyXG4gICAocHItc3RyIGspKSkpXHJcbiJ9IHs6c3ltIElFbmNvZGVKUywgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKC1jbGotPmpzIC1rZXktPmpzKX0gezpzeW0gY29tcGFyZS1hbmQtc2V0ISwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgYXRvbSB0byBuZXd2YWwgaWYgYW5kIG9ubHkgaWYgdGhlXG4gIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGF0b20gaXMgZXF1YWwgdG8gb2xkdmFsLiBSZXR1cm5zIHRydWUgaWZcbiAgc2V0IGhhcHBlbmVkLCBlbHNlIGZhbHNlLiIsIDphcmdsaXN0cyAoW2Egb2xkdmFsIG5ld3ZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhcmUtYW5kLXNldCFcclxuIFwiQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbCBpZiBhbmQgb25seSBpZiB0aGVcXG4gIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGF0b20gaXMgZXF1YWwgdG8gb2xkdmFsLiBSZXR1cm5zIHRydWUgaWZcXG4gIHNldCBoYXBwZW5lZCwgZWxzZSBmYWxzZS5cIlxyXG4gW2Egb2xkdmFsIG5ld3ZhbF1cclxuIChpZiAoPSAoLWRlcmVmIGEpIG9sZHZhbCkgKGRvIChyZXNldCEgYSBuZXd2YWwpIHRydWUpIGZhbHNlKSlcclxuIn0gezpzeW0gYXJyYXktc2VxLCA6bWV0YSB7OmRvYyAiQ3JlYXRlIGEgc2VxIGZyb20gYSBKYXZhU2NyaXB0IGFycmF5LiIsIDphcmdsaXN0cyBbW2FycmF5XSBbYXJyYXkgaV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5LXNlcVxyXG4gXCJDcmVhdGUgYSBzZXEgZnJvbSBhIEphdmFTY3JpcHQgYXJyYXkuXCJcclxuIChbYXJyYXldIChwcmltLXNlcSBhcnJheSAwKSlcclxuIChbYXJyYXkgaV0gKHByaW0tc2VxIGFycmF5IGkpKSlcclxuIn0gezpzeW0gaW50ZXJsZWF2ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgZmlyc3QgaXRlbSBpbiBlYWNoIGNvbGwsIHRoZW4gdGhlIHNlY29uZCBldGMuIiwgOmFyZ2xpc3RzIFtbXSBbYzFdIFtjMSBjMl0gW2MxIGMyICYgY29sbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRlcmxlYXZlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgZmlyc3QgaXRlbSBpbiBlYWNoIGNvbGwsIHRoZW4gdGhlIHNlY29uZCBldGMuXCJcclxuIChbXSAoKSlcclxuIChbYzFdIChsYXp5LXNlcSBjMSkpXHJcbiAoW2MxIGMyXVxyXG4gIChsYXp5LXNlcVxyXG4gICAobGV0XHJcbiAgICBbczEgKHNlcSBjMSkgczIgKHNlcSBjMildXHJcbiAgICAod2hlblxyXG4gICAgIChhbmQgczEgczIpXHJcbiAgICAgKGNvbnNcclxuICAgICAgKGZpcnN0IHMxKVxyXG4gICAgICAoY29ucyAoZmlyc3QgczIpIChpbnRlcmxlYXZlIChyZXN0IHMxKSAocmVzdCBzMikpKSkpKSkpXHJcbiAoW2MxIGMyICYgY29sbHNdXHJcbiAgKGxhenktc2VxXHJcbiAgIChsZXRcclxuICAgIFtzcyAobWFwIHNlcSAoY29uaiBjb2xscyBjMiBjMSkpXVxyXG4gICAgKHdoZW5cclxuICAgICAoZXZlcnk/IGlkZW50aXR5IHNzKVxyXG4gICAgIChjb25jYXQgKG1hcCBmaXJzdCBzcykgKGFwcGx5IGludGVybGVhdmUgKG1hcCByZXN0IHNzKSkpKSkpKSlcclxuIn0gezpzeW0gcHJpbnQtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gcHJpbnQtb25lIHdyaXRlciBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtbWFwXHJcbiBbbSBwcmludC1vbmUgd3JpdGVyIG9wdHNdXHJcbiAobGV0XHJcbiAgW1tucyBsaWZ0LW1hcF0gKHdoZW4gKG1hcD8gbSkgKGxpZnQtbnMgbSkpXVxyXG4gIChpZlxyXG4gICBuc1xyXG4gICAocHJpbnQtcHJlZml4LW1hcCAoc3RyIFwiIzpcIiBucykgbGlmdC1tYXAgcHJpbnQtb25lIHdyaXRlciBvcHRzKVxyXG4gICAocHJpbnQtcHJlZml4LW1hcCBuaWwgbSBwcmludC1vbmUgd3JpdGVyIG9wdHMpKSkpXHJcbiJ9IHs6c3ltIG1hcD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJTWFwIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSU1hcFwiXHJcbiBbeF1cclxuIChpZiAobmlsPyB4KSBmYWxzZSAoc2F0aXNmaWVzPyBJTWFwIHgpKSlcclxuIn0gezpzeW0gbTMtQzEsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG0zLUMxIChpbnQgMzQzMjkxODM1MykpXHJcbiJ9IHs6c3ltIGdldCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIG1hcHBlZCB0byBrZXksIG5vdC1mb3VuZCBvciBuaWwgaWYga2V5IG5vdCBwcmVzZW50LiIsIDphcmdsaXN0cyBbW28ga10gW28gayBub3QtZm91bmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXRcclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgbWFwcGVkIHRvIGtleSwgbm90LWZvdW5kIG9yIG5pbCBpZiBrZXkgbm90IHByZXNlbnQuXCJcclxuIChbbyBrXVxyXG4gICh3aGVuLW5vdFxyXG4gICAobmlsPyBvKVxyXG4gICAoY29uZFxyXG4gICAgKGltcGxlbWVudHM/IElMb29rdXAgbylcclxuICAgICgtbG9va3VwIG8gaylcclxuICAgIChhcnJheT8gbylcclxuICAgICh3aGVuIChhbmQgKHNvbWU/IGspICg8IGsgKC4tbGVuZ3RoIG8pKSkgKGFnZXQgbyAoaW50IGspKSlcclxuICAgIChzdHJpbmc/IG8pXHJcbiAgICAod2hlbiAoYW5kIChzb21lPyBrKSAoPCAtMSBrICguLWxlbmd0aCBvKSkpICguY2hhckF0IG8gKGludCBrKSkpXHJcbiAgICAobmF0aXZlLXNhdGlzZmllcz8gSUxvb2t1cCBvKVxyXG4gICAgKC1sb29rdXAgbyBrKVxyXG4gICAgOmVsc2VcclxuICAgIG5pbCkpKVxyXG4gKFtvIGsgbm90LWZvdW5kXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gbylcclxuICAgKGNvbmRcclxuICAgIChpbXBsZW1lbnRzPyBJTG9va3VwIG8pXHJcbiAgICAoLWxvb2t1cCBvIGsgbm90LWZvdW5kKVxyXG4gICAgKGFycmF5PyBvKVxyXG4gICAgKGlmXHJcbiAgICAgKGFuZCAoc29tZT8gaykgKDwgLTEgayAoLi1sZW5ndGggbykpKVxyXG4gICAgIChhZ2V0IG8gKGludCBrKSlcclxuICAgICBub3QtZm91bmQpXHJcbiAgICAoc3RyaW5nPyBvKVxyXG4gICAgKGlmXHJcbiAgICAgKGFuZCAoc29tZT8gaykgKDwgLTEgayAoLi1sZW5ndGggbykpKVxyXG4gICAgICguY2hhckF0IG8gKGludCBrKSlcclxuICAgICBub3QtZm91bmQpXHJcbiAgICAobmF0aXZlLXNhdGlzZmllcz8gSUxvb2t1cCBvKVxyXG4gICAgKC1sb29rdXAgbyBrIG5vdC1mb3VuZClcclxuICAgIDplbHNlXHJcbiAgICBub3QtZm91bmQpXHJcbiAgIG5vdC1mb3VuZCkpKVxyXG4ifSB7OnN5bSBpZGVudGl0eSwgOm1ldGEgezpkb2MgIlJldHVybnMgaXRzIGFyZ3VtZW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGlkZW50aXR5IFwiUmV0dXJucyBpdHMgYXJndW1lbnQuXCIgW3hdIHgpXHJcbiJ9IHs6c3ltIGludG8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGwgY29uc2lzdGluZyBvZiB0by1jb2xsIHdpdGggYWxsIG9mIHRoZSBpdGVtcyBvZlxuICBmcm9tLWNvbGwgY29uam9pbmVkLiBBIHRyYW5zZHVjZXIgbWF5IGJlIHN1cHBsaWVkLiIsIDphcmdsaXN0cyBbW10gW3RvXSBbdG8gZnJvbV0gW3RvIHhmb3JtIGZyb21dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnRvXHJcbiBcIlJldHVybnMgYSBuZXcgY29sbCBjb25zaXN0aW5nIG9mIHRvLWNvbGwgd2l0aCBhbGwgb2YgdGhlIGl0ZW1zIG9mXFxuICBmcm9tLWNvbGwgY29uam9pbmVkLiBBIHRyYW5zZHVjZXIgbWF5IGJlIHN1cHBsaWVkLlwiXHJcbiAoW10gW10pXHJcbiAoW3RvXSB0bylcclxuIChbdG8gZnJvbV1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IHRvKVxyXG4gICAoaWZcclxuICAgIChpbXBsZW1lbnRzPyBJRWRpdGFibGVDb2xsZWN0aW9uIHRvKVxyXG4gICAgKC13aXRoLW1ldGFcclxuICAgICAocGVyc2lzdGVudCEgKHJlZHVjZSAtY29uaiEgKHRyYW5zaWVudCB0bykgZnJvbSkpXHJcbiAgICAgKG1ldGEgdG8pKVxyXG4gICAgKHJlZHVjZSAtY29uaiB0byBmcm9tKSlcclxuICAgKHJlZHVjZSBjb25qIHRvIGZyb20pKSlcclxuIChbdG8geGZvcm0gZnJvbV1cclxuICAoaWZcclxuICAgKGltcGxlbWVudHM/IElFZGl0YWJsZUNvbGxlY3Rpb24gdG8pXHJcbiAgICgtd2l0aC1tZXRhXHJcbiAgICAocGVyc2lzdGVudCEgKHRyYW5zZHVjZSB4Zm9ybSBjb25qISAodHJhbnNpZW50IHRvKSBmcm9tKSlcclxuICAgIChtZXRhIHRvKSlcclxuICAgKHRyYW5zZHVjZSB4Zm9ybSBjb25qIHRvIGZyb20pKSkpXHJcbiJ9IHs6c3ltIGxvbmcsIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gbG9uZyBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIElkZW50aWNhbCB0byBgaW50Jy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9uZ1xyXG4gXCJDb2VyY2UgdG8gbG9uZyBieSBzdHJpcHBpbmcgZGVjaW1hbCBwbGFjZXMuIElkZW50aWNhbCB0byBgaW50Jy5cIlxyXG4gW3hdXHJcbiAoZml4IHgpKVxyXG4ifSB7OnN5bSBkb3VibGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gZG91YmxlIFt4XSB4KVxyXG4ifSB7OnN5bSB2b2xhdGlsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBhIHZvbGF0aWxlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2b2xhdGlsZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSB2b2xhdGlsZS5cIlxyXG4gW3hdXHJcbiAoaW5zdGFuY2U/IFZvbGF0aWxlIHgpKVxyXG4ifSB7OnN5bSAta2V5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXAgZW50cnkuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnByb3RvY29sIElNYXBFbnRyeX0gezpzeW0gbmZpcnN0LCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAobmV4dCAoZmlyc3QgeCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gbmZpcnN0IFwiU2FtZSBhcyAobmV4dCAoZmlyc3QgeCkpXCIgW2NvbGxdIChuZXh0IChmaXJzdCBjb2xsKSkpXHJcbiJ9IHs6c3ltIG1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtZXRhZGF0YSBvZiBvYmosIHJldHVybnMgbmlsIGlmIHRoZXJlIGlzIG5vIG1ldGFkYXRhLiIsIDphcmdsaXN0cyAoW29dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXRhXHJcbiBcIlJldHVybnMgdGhlIG1ldGFkYXRhIG9mIG9iaiwgcmV0dXJucyBuaWwgaWYgdGhlcmUgaXMgbm8gbWV0YWRhdGEuXCJcclxuIFtvXVxyXG4gKHdoZW4gKGFuZCAobm90IChuaWw/IG8pKSAoc2F0aXNmaWVzPyBJTWV0YSBvKSkgKC1tZXRhIG8pKSlcclxuIn0gezpzeW0gLWt2LXJlZHVjZSwgOm1ldGEgezpkb2MgIlJlZHVjZXMgYW4gYXNzb2NpYXRpdmUgY29sbGVjdGlvbiBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBmIHNob3VsZCBiZVxuICAgICBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzLiIsIDphcmdsaXN0cyAoW2NvbGwgZiBpbml0XSl9LCA6cHJvdG9jb2wgSUtWUmVkdWNlfSB7OnN5bSBJSGFzaCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgaGFzaGluZyBmdW5jdGlvbmFsaXR5IHRvIGEgdHlwZS4ifSwgOm1ldGhvZHMgKC1oYXNoKX0gezpzeW0gYml0LWFuZC1ub3QsIDptZXRhIHs6ZG9jICJCaXR3aXNlIGFuZCB3aXRoIGNvbXBsZW1lbnQiLCA6YXJnbGlzdHMgW1t4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gYml0LWFuZC1ub3RcclxuIFwiQml0d2lzZSBhbmQgd2l0aCBjb21wbGVtZW50XCJcclxuIChbeCB5XSAoY2xqcy5jb3JlL2JpdC1hbmQtbm90IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgYml0LWFuZC1ub3QgKGNsanMuY29yZS9iaXQtYW5kLW5vdCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gdmFyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB2IGlzIG9mIHR5cGUgY2xqcy5jb3JlLlZhciIsIDphcmdsaXN0cyAoW3ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB2IGlzIG9mIHR5cGUgY2xqcy5jb3JlLlZhclwiXHJcbiBbdl1cclxuIChpbnN0YW5jZT8gY2xqcy5jb3JlLlZhciB2KSlcclxuIn0gezpzeW0gLWNvbXBhcmF0b3IsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb21wYXJhdG9yIGZvciBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJU29ydGVkfSB7OnN5bSB1bmNoZWNrZWQtYWRkLWludCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWFkZC1pbnRcclxuIFwiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuXCJcclxuIChbXSAwKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLWFkZC1pbnQgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlIHVuY2hlY2tlZC1hZGQtaW50IChjbGpzLmNvcmUvdW5jaGVja2VkLWFkZC1pbnQgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIGhhc2gtb3JkZXJlZC1jb2xsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaGFzaCBjb2RlLCBjb25zaXN0ZW50IHdpdGggPSwgZm9yIGFuIGV4dGVybmFsIG9yZGVyZWRcbiAgIGNvbGxlY3Rpb24gaW1wbGVtZW50aW5nIEl0ZXJhYmxlLlxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLW9yZGVyZWQtY29sbFxyXG4gXCJSZXR1cm5zIHRoZSBoYXNoIGNvZGUsIGNvbnNpc3RlbnQgd2l0aCA9LCBmb3IgYW4gZXh0ZXJuYWwgb3JkZXJlZFxcbiAgIGNvbGxlY3Rpb24gaW1wbGVtZW50aW5nIEl0ZXJhYmxlLlxcbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy5cIlxyXG4gW2NvbGxdXHJcbiAobG9vcFxyXG4gIFtuIDAgaGFzaC1jb2RlIDEgY29sbCAoc2VxIGNvbGwpXVxyXG4gIChpZi1ub3RcclxuICAgKG5pbD8gY29sbClcclxuICAgKHJlY3VyXHJcbiAgICAoaW5jIG4pXHJcbiAgICAoYml0LW9yICgrIChpbXVsIDMxIGhhc2gtY29kZSkgKGhhc2ggKGZpcnN0IGNvbGwpKSkgMClcclxuICAgIChuZXh0IGNvbGwpKVxyXG4gICAobWl4LWNvbGxlY3Rpb24taGFzaCBoYXNoLWNvZGUgbikpKSlcclxuIn0gezpzeW0gcmVzZXQtbWV0YSEsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHJlc2V0cyB0aGUgbWV0YWRhdGEgZm9yIGFuIGF0b20iLCA6YXJnbGlzdHMgKFtpcmVmIG1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNldC1tZXRhIVxyXG4gXCJBdG9taWNhbGx5IHJlc2V0cyB0aGUgbWV0YWRhdGEgZm9yIGFuIGF0b21cIlxyXG4gW2lyZWYgbV1cclxuIChzZXQhICguLW1ldGEgaXJlZikgbSkpXHJcbiJ9IHs6c3ltIElFcXVpdiwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdmFsdWUgY29tcGFyaXNvbiBmdW5jdGlvbmFsaXR5IHRvIGEgdHlwZS4ifSwgOm1ldGhvZHMgKC1lcXVpdil9IHs6c3ltIGN5Y2xlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgKGluZmluaXRlISkgc2VxdWVuY2Ugb2YgcmVwZXRpdGlvbnMgb2YgdGhlIGl0ZW1zIGluIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGN5Y2xlXHJcbiBcIlJldHVybnMgYSBsYXp5IChpbmZpbml0ZSEpIHNlcXVlbmNlIG9mIHJlcGV0aXRpb25zIG9mIHRoZSBpdGVtcyBpbiBjb2xsLlwiXHJcbiBbY29sbF1cclxuIChpZi1sZXRcclxuICBbdmFscyAoc2VxIGNvbGwpXVxyXG4gIChDeWNsZS4gbmlsIHZhbHMgbmlsIHZhbHMgbmlsKVxyXG4gICguLUVNUFRZIExpc3QpKSlcclxuIn0gezpzeW0gLWRlcmVmLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJlZmVyZW5jZSBvLiIsIDphcmdsaXN0cyAoW29dKX0sIDpwcm90b2NvbCBJRGVyZWZ9IHs6c3ltIGVtcHR5PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGhhcyBubyBpdGVtcyAtIHNhbWUgYXMgKG5vdCAoc2VxIGNvbGwpKS5cbiAgUGxlYXNlIHVzZSB0aGUgaWRpb20gKHNlcSB4KSByYXRoZXIgdGhhbiAobm90IChlbXB0eT8geCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtcHR5P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBoYXMgbm8gaXRlbXMgLSBzYW1lIGFzIChub3QgKHNlcSBjb2xsKSkuXFxuICBQbGVhc2UgdXNlIHRoZSBpZGlvbSAoc2VxIHgpIHJhdGhlciB0aGFuIChub3QgKGVtcHR5PyB4KSlcIlxyXG4gW2NvbGxdXHJcbiAob3IgKG5pbD8gY29sbCkgKG5vdCAoc2VxIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIHNob3J0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHNob3J0IFt4XSB4KVxyXG4ifSB7OnN5bSAtY2xqLT5qcywgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgY2xqIHZhbHVlcyB0byBKYXZhU2NyaXB0IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIElFbmNvZGVKU30gezpzeW0gLWNodW5rZWQtZmlyc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaXJzdCBjaHVuayBpbiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJQ2h1bmtlZFNlcX0gezpzeW0gYWRkLXRhcCwgOm1ldGEgezpkb2MgIkFkZHMgZiwgYSBmbiBvZiBvbmUgYXJndW1lbnQsIHRvIHRoZSB0YXAgc2V0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhcbiAgYW55dGhpbmcgc2VudCB2aWEgdGFwPi4gUmVtZW1iZXIgZiBpbiBvcmRlciB0byByZW1vdmUtdGFwIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC10YXBcclxuIFwiQWRkcyBmLCBhIGZuIG9mIG9uZSBhcmd1bWVudCwgdG8gdGhlIHRhcCBzZXQuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aFxcbiAgYW55dGhpbmcgc2VudCB2aWEgdGFwPi4gUmVtZW1iZXIgZiBpbiBvcmRlciB0byByZW1vdmUtdGFwXCJcclxuIFtmXVxyXG4gKG1heWJlLWluaXQtdGFwc2V0KVxyXG4gKHN3YXAhIHRhcHNldCBjb25qIGYpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIGZpbHRlcnYsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdmVjdG9yIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLiIsIDphcmdsaXN0cyAoW3ByZWQgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbHRlcnZcclxuIFwiUmV0dXJucyBhIHZlY3RvciBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXCJcclxuIFtwcmVkIGNvbGxdXHJcbiAoLT5cclxuICAocmVkdWNlIChmbiBbdiBvXSAoaWYgKHByZWQgbykgKGNvbmohIHYgbykgdikpICh0cmFuc2llbnQgW10pIGNvbGwpXHJcbiAgcGVyc2lzdGVudCEpKVxyXG4ifSB7OnN5bSBoYXNoLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIGl0cyBhcmd1bWVudC4gTm90ZSB0aGlzIGlzIHRoZSBoYXNoIGNvZGVcbiAgIGNvbnNpc3RlbnQgd2l0aCA9LiIsIDphcmdsaXN0cyAoW29dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoXHJcbiBcIlJldHVybnMgdGhlIGhhc2ggY29kZSBvZiBpdHMgYXJndW1lbnQuIE5vdGUgdGhpcyBpcyB0aGUgaGFzaCBjb2RlXFxuICAgY29uc2lzdGVudCB3aXRoID0uXCJcclxuIFtvXVxyXG4gKGNvbmRcclxuICAoaW1wbGVtZW50cz8gSUhhc2ggbylcclxuICAoYml0LXhvciAoLWhhc2ggbykgMClcclxuICAobnVtYmVyPyBvKVxyXG4gIChpZlxyXG4gICAoanMvaXNGaW5pdGUgbylcclxuICAgKGpzLW1vZCAoTWF0aC9mbG9vciBvKSAyMTQ3NDgzNjQ3KVxyXG4gICAoY2FzZSBvICMjSW5mIDIxNDY0MzUwNzIgIyMtSW5mIC0xMDQ4NTc2IDIxNDY5NTkzNjApKVxyXG4gICh0cnVlPyBvKVxyXG4gIDEyMzFcclxuICAoZmFsc2U/IG8pXHJcbiAgMTIzN1xyXG4gIChzdHJpbmc/IG8pXHJcbiAgKG0zLWhhc2gtaW50IChoYXNoLXN0cmluZyBvKSlcclxuICAoaW5zdGFuY2U/IGpzL0RhdGUgbylcclxuICAoYml0LXhvciAoLnZhbHVlT2YgbykgMClcclxuICAobmlsPyBvKVxyXG4gIDBcclxuICA6ZWxzZVxyXG4gIChiaXQteG9yICgtaGFzaCBvKSAwKSkpXHJcbiJ9IHs6c3ltIHF1b3QsIDptZXRhIHs6ZG9jICJxdW90W2llbnRdIG9mIGRpdmlkaW5nIG51bWVyYXRvciBieSBkZW5vbWluYXRvci4iLCA6YXJnbGlzdHMgKFtuIGRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdW90XHJcbiBcInF1b3RbaWVudF0gb2YgZGl2aWRpbmcgbnVtZXJhdG9yIGJ5IGRlbm9taW5hdG9yLlwiXHJcbiBbbiBkXVxyXG4gKGxldCBbcmVtIChqcy1tb2QgbiBkKV0gKGZpeCAoLyAoLSBuIHJlbSkgZCkpKSlcclxuIn0gezpzeW0gbnMtaW50ZXJucyosIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIG9mIHRoZSBpbnRlcm4gbWFwcGluZ3MgZm9yIHRoZSBuYW1lc3BhY2UuXG4gIEJvb3RzdHJhcCBvbmx5LiIsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5zLWludGVybnMqXHJcbiBcIlJldHVybnMgYSBtYXAgb2YgdGhlIGludGVybiBtYXBwaW5ncyBmb3IgdGhlIG5hbWVzcGFjZS5cXG4gIEJvb3RzdHJhcCBvbmx5LlwiXHJcbiBbc3ltXVxyXG4gKGxldFxyXG4gIFtucy1vYmogKGZpbmQtbnMtb2JqIHN5bSkgbnMgKE5hbWVzcGFjZS4gbnMtb2JqIHN5bSldXHJcbiAgKGxldGZuXHJcbiAgIFsoc3RlcFxyXG4gICAgIFtyZXQga11cclxuICAgICAobGV0XHJcbiAgICAgIFt2YXItc3ltIChzeW1ib2wgKGRlbXVuZ2UgaykpXVxyXG4gICAgICAoYXNzb2NcclxuICAgICAgIHJldFxyXG4gICAgICAgdmFyLXN5bVxyXG4gICAgICAgKFZhci5cclxuICAgICAgICAoZm4qIFtdIChnb2JqZWN0L2dldCBucy1vYmogaykpXHJcbiAgICAgICAgKHN5bWJvbCAoc3RyIHN5bSkgKHN0ciB2YXItc3ltKSlcclxuICAgICAgICB7Om5zIG5zfSkpKSldXHJcbiAgIChyZWR1Y2Ugc3RlcCB7fSAoanMta2V5cyBucy1vYmopKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtZG91YmxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1kb3VibGUgW3hdIHgpXHJcbiJ9IHs6c3ltIHJhbmdlZC1pdGVyYXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt2IHN0YXJ0IGVuZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmdlZC1pdGVyYXRvclxyXG4gW3Ygc3RhcnQgZW5kXVxyXG4gKGxldFxyXG4gIFtpIHN0YXJ0XVxyXG4gIChSYW5nZWRJdGVyYXRvci5cclxuICAgaVxyXG4gICAoLSBpIChqcy1tb2QgaSAzMikpXHJcbiAgICh3aGVuICg8IHN0YXJ0IChjb3VudCB2KSkgKHVuY2hlY2tlZC1hcnJheS1mb3IgdiBpKSlcclxuICAgdlxyXG4gICBzdGFydFxyXG4gICBlbmQpKSlcclxuIn0gezpzeW0gSVRyYW5zaWVudFZlY3RvciwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgdmVjdG9yIGZ1bmN0aW9uYWxpdHkgdG8gdHJhbnNpZW50IGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWFzc29jLW4hIC1wb3AhKX0gezpzeW0ga2V5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUga2V5IG9mIHRoZSBtYXAgZW50cnkuIiwgOmFyZ2xpc3RzIChbbWFwLWVudHJ5XSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5XHJcbiBcIlJldHVybnMgdGhlIGtleSBvZiB0aGUgbWFwIGVudHJ5LlwiXHJcbiBbbWFwLWVudHJ5XVxyXG4gKC1rZXkgbWFwLWVudHJ5KSlcclxuIn0gezpzeW0gbG9uZ3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gbG9uZ3MgW3hdIHgpXHJcbiJ9IHs6c3ltIG5vdD0sIDptZXRhIHs6ZG9jICJTYW1lIGFzIChub3QgKD0gb2JqMSBvYmoyKSkiLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vdD1cclxuIFwiU2FtZSBhcyAobm90ICg9IG9iajEgb2JqMikpXCJcclxuIChbeF0gZmFsc2UpXHJcbiAoW3ggeV0gKG5vdCAoPSB4IHkpKSlcclxuIChbeCB5ICYgbW9yZV0gKG5vdCAoYXBwbHkgPSB4IHkgbW9yZSkpKSlcclxuIn0gezpzeW0gc2V0LXByaW50LWVyci1mbiEsIDptZXRhIHs6ZG9jICJTZXQgKnByaW50LWVyci1mbiogdG8gZi4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gc2V0LXByaW50LWVyci1mbiFcclxuIFwiU2V0ICpwcmludC1lcnItZm4qIHRvIGYuXCJcclxuIFtmXVxyXG4gKHNldCEgKnByaW50LWVyci1mbiogZikpXHJcbiJ9IHs6c3ltIGZhc3QtcGF0aC1wcm90b2NvbHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBmYXN0LXBhdGgtcHJvdG9jb2xzXHJcbiBcInByb3RvY29sIGZxbiAtPiBbcGFydGl0aW9uIG51bWJlciwgYml0XVwiXHJcbiAoemlwbWFwXHJcbiAgKG1hcFxyXG4gICAoZm4qIFtwMV9fNDg2ODcjXSAoc3ltYm9sIFwiY2xqcy5jb3JlXCIgKGNvcmUvc3RyIHAxX180ODY4NyMpKSlcclxuICAgJ1tJRm5cclxuICAgICBJQ291bnRlZFxyXG4gICAgIElFbXB0eWFibGVDb2xsZWN0aW9uXHJcbiAgICAgSUNvbGxlY3Rpb25cclxuICAgICBJSW5kZXhlZFxyXG4gICAgIEFTZXFcclxuICAgICBJU2VxXHJcbiAgICAgSU5leHRcclxuICAgICBJTG9va3VwXHJcbiAgICAgSUFzc29jaWF0aXZlXHJcbiAgICAgSU1hcFxyXG4gICAgIElNYXBFbnRyeVxyXG4gICAgIElTZXRcclxuICAgICBJU3RhY2tcclxuICAgICBJVmVjdG9yXHJcbiAgICAgSURlcmVmXHJcbiAgICAgSURlcmVmV2l0aFRpbWVvdXRcclxuICAgICBJTWV0YVxyXG4gICAgIElXaXRoTWV0YVxyXG4gICAgIElSZWR1Y2VcclxuICAgICBJS1ZSZWR1Y2VcclxuICAgICBJRXF1aXZcclxuICAgICBJSGFzaFxyXG4gICAgIElTZXFhYmxlXHJcbiAgICAgSVNlcXVlbnRpYWxcclxuICAgICBJTGlzdFxyXG4gICAgIElSZWNvcmRcclxuICAgICBJUmV2ZXJzaWJsZVxyXG4gICAgIElTb3J0ZWRcclxuICAgICBJUHJpbnRXaXRoV3JpdGVyXHJcbiAgICAgSVdyaXRlclxyXG4gICAgIElQcmludFdpdGhXcml0ZXJcclxuICAgICBJUGVuZGluZ1xyXG4gICAgIElXYXRjaGFibGVcclxuICAgICBJRWRpdGFibGVDb2xsZWN0aW9uXHJcbiAgICAgSVRyYW5zaWVudENvbGxlY3Rpb25cclxuICAgICBJVHJhbnNpZW50QXNzb2NpYXRpdmVcclxuICAgICBJVHJhbnNpZW50TWFwXHJcbiAgICAgSVRyYW5zaWVudFZlY3RvclxyXG4gICAgIElUcmFuc2llbnRTZXRcclxuICAgICBJTXVsdGlGblxyXG4gICAgIElDaHVua2VkU2VxXHJcbiAgICAgSUNodW5rZWROZXh0XHJcbiAgICAgSUNvbXBhcmFibGVcclxuICAgICBJTmFtZWRcclxuICAgICBJQ2xvbmVhYmxlXHJcbiAgICAgSUF0b21cclxuICAgICBJUmVzZXRcclxuICAgICBJU3dhcFxyXG4gICAgIElJdGVyYWJsZV0pXHJcbiAgKGl0ZXJhdGVcclxuICAgKGNvcmUvZm5cclxuICAgIFtbcCBiXV1cclxuICAgIChpZlxyXG4gICAgIChjb3JlLz09IDIxNDc0ODM2NDggYilcclxuICAgICBbKGNvcmUvaW5jIHApIDFdXHJcbiAgICAgW3AgIz8oOmNsaiAoY29yZS9iaXQtc2hpZnQtbGVmdCBiIDEpIDpjbGpzIChjb3JlLyogMiBiKSldKSlcclxuICAgWzAgMV0pKSlcclxuIn0gezpzeW0gc3RyaW5nPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZz9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IHN0cmluZy5cIlxyXG4gW3hdXHJcbiAoZ29vZy9pc1N0cmluZyB4KSlcclxuIn0gezpzeW0gdXJpPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSB4IGlzIGEgZ29vZy5VcmkgaW5zdGFuY2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVyaT9cclxuIFwiUmV0dXJucyB0cnVlIHggaXMgYSBnb29nLlVyaSBpbnN0YW5jZS5cIlxyXG4gezphZGRlZCBcIjEuOVwifVxyXG4gW3hdXHJcbiAoaW5zdGFuY2U/IGdvb2cuVXJpIHgpKVxyXG4ifSB7OnN5bSBlczYtaXRlcmF0b3IsIDptZXRhIHs6ZG9jICJFWFBFUklNRU5UQUw6IFJldHVybiBhIEVTMjAxNSBjb21wYXRpYmxlIGl0ZXJhdG9yIGZvciBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlczYtaXRlcmF0b3JcclxuIFwiRVhQRVJJTUVOVEFMOiBSZXR1cm4gYSBFUzIwMTUgY29tcGF0aWJsZSBpdGVyYXRvciBmb3IgY29sbC5cIlxyXG4gW2NvbGxdXHJcbiAoRVM2SXRlcmF0b3IuIChzZXEgY29sbCkpKVxyXG4ifSB7OnN5bSBwci1zdHItd2l0aC1vcHRzLCA6bWV0YSB7OmRvYyAiUHJpbnRzIGEgc2VxdWVuY2Ugb2Ygb2JqZWN0cyB0byBhIHN0cmluZywgb2JzZXJ2aW5nIGFsbCB0aGVcbiAgb3B0aW9ucyBnaXZlbiBpbiBvcHRzIiwgOmFyZ2xpc3RzIChbb2JqcyBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHItc3RyLXdpdGgtb3B0c1xyXG4gXCJQcmludHMgYSBzZXF1ZW5jZSBvZiBvYmplY3RzIHRvIGEgc3RyaW5nLCBvYnNlcnZpbmcgYWxsIHRoZVxcbiAgb3B0aW9ucyBnaXZlbiBpbiBvcHRzXCJcclxuIFtvYmpzIG9wdHNdXHJcbiAoaWYgKGVtcHR5PyBvYmpzKSBcIlwiIChzdHIgKHByLXNiLXdpdGgtb3B0cyBvYmpzIG9wdHMpKSkpXHJcbiJ9IHs6c3ltIG0zLUMyLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBtMy1DMiAoaW50IDQ2MTg0NTkwNykpXHJcbiJ9IHs6c3ltICpwcmludC1uZXdsaW5lKiwgOm1ldGEgezpkb2MgIldoZW4gc2V0IHRvIGxvZ2ljYWwgZmFsc2Ugd2lsbCBkcm9wIG5ld2xpbmVzIGZyb20gcHJpbnRpbmcgY2FsbHMuXG4gIFRoaXMgaXMgdG8gd29yayBhcm91bmQgdGhlIGltcGxpY2l0IG5ld2xpbmVzIGVtaXR0ZWQgYnkgc3RhbmRhcmQgSmF2YVNjcmlwdFxuICBjb25zb2xlIG9iamVjdHMuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LW5ld2xpbmUqIHRydWUpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1tdWx0aXBseS1pbnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtbXVsdGlwbHktaW50XHJcbiBcIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgbnVtcy4gKCopIHJldHVybnMgMS5cIlxyXG4gKFtdIDEpXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS91bmNoZWNrZWQtbXVsdGlwbHktaW50IHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdXHJcbiAgKHJlZHVjZVxyXG4gICB1bmNoZWNrZWQtbXVsdGlwbHktaW50XHJcbiAgIChjbGpzLmNvcmUvdW5jaGVja2VkLW11bHRpcGx5LWludCB4IHkpXHJcbiAgIG1vcmUpKSlcclxuIn0gezpzeW0gY2h1bmstcmVzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmbiBjaHVuay1yZXN0IFtzXSAoLWNodW5rZWQtcmVzdCBzKSlcclxuIn0gezpzeW0gcmVtb3ZlLWFsbC1tZXRob2RzLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBhbGwgb2YgdGhlIG1ldGhvZHMgb2YgbXVsdGltZXRob2QuIiwgOmFyZ2xpc3RzIChbbXVsdGlmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZS1hbGwtbWV0aG9kc1xyXG4gXCJSZW1vdmVzIGFsbCBvZiB0aGUgbWV0aG9kcyBvZiBtdWx0aW1ldGhvZC5cIlxyXG4gW211bHRpZm5dXHJcbiAoLXJlc2V0IG11bHRpZm4pKVxyXG4ifSB7OnN5bSB0cmFtcG9saW5lLCA6bWV0YSB7OmRvYyAidHJhbXBvbGluZSBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGFsZ29yaXRobXMgcmVxdWlyaW5nIG11dHVhbFxuICByZWN1cnNpb24gd2l0aG91dCBzdGFjayBjb25zdW1wdGlvbi4gQ2FsbHMgZiB3aXRoIHN1cHBsaWVkIGFyZ3MsIGlmXG4gIGFueS4gSWYgZiByZXR1cm5zIGEgZm4sIGNhbGxzIHRoYXQgZm4gd2l0aCBubyBhcmd1bWVudHMsIGFuZFxuICBjb250aW51ZXMgdG8gcmVwZWF0LCB1bnRpbCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhIGZuLCB0aGVuXG4gIHJldHVybnMgdGhhdCBub24tZm4gdmFsdWUuIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byByZXR1cm4gYSBmbiBhcyBhXG4gIGZpbmFsIHZhbHVlLCB5b3UgbXVzdCB3cmFwIGl0IGluIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgYW5kIHVucGFjayBpdFxuICBhZnRlciB0cmFtcG9saW5lIHJldHVybnMuIiwgOmFyZ2xpc3RzIFtbZl0gW2YgJiBhcmdzXV19LCA6c291cmNlICIoZGVmblxyXG4gdHJhbXBvbGluZVxyXG4gXCJ0cmFtcG9saW5lIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYWxnb3JpdGhtcyByZXF1aXJpbmcgbXV0dWFsXFxuICByZWN1cnNpb24gd2l0aG91dCBzdGFjayBjb25zdW1wdGlvbi4gQ2FsbHMgZiB3aXRoIHN1cHBsaWVkIGFyZ3MsIGlmXFxuICBhbnkuIElmIGYgcmV0dXJucyBhIGZuLCBjYWxscyB0aGF0IGZuIHdpdGggbm8gYXJndW1lbnRzLCBhbmRcXG4gIGNvbnRpbnVlcyB0byByZXBlYXQsIHVudGlsIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90IGEgZm4sIHRoZW5cXG4gIHJldHVybnMgdGhhdCBub24tZm4gdmFsdWUuIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byByZXR1cm4gYSBmbiBhcyBhXFxuICBmaW5hbCB2YWx1ZSwgeW91IG11c3Qgd3JhcCBpdCBpbiBzb21lIGRhdGEgc3RydWN0dXJlIGFuZCB1bnBhY2sgaXRcXG4gIGFmdGVyIHRyYW1wb2xpbmUgcmV0dXJucy5cIlxyXG4gKFtmXSAobGV0IFtyZXQgKGYpXSAoaWYgKGZuPyByZXQpIChyZWN1ciByZXQpIHJldCkpKVxyXG4gKFtmICYgYXJnc10gKHRyYW1wb2xpbmUgKGZuKiBbXSAoYXBwbHkgZiBhcmdzKSkpKSlcclxuIn0gezpzeW0gZG91YmxlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBmb3IgSmF2YVNjcmlwdCBudW1iZXJzLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvdWJsZT9cclxuIFwiUmV0dXJucyB0cnVlIGZvciBKYXZhU2NyaXB0IG51bWJlcnMsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAobnVtYmVyPyB4KSlcclxuIn0gezpzeW0gdmVjLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC4gSmF2YVNjcmlwdCBhcnJheXNcbiAgd2lsbCBiZSBhbGlhc2VkIGFuZCBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2ZWNcclxuIFwiQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC4gSmF2YVNjcmlwdCBhcnJheXNcXG4gIHdpbGwgYmUgYWxpYXNlZCBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC5cIlxyXG4gW2NvbGxdXHJcbiAoY29uZFxyXG4gIChtYXAtZW50cnk/IGNvbGwpXHJcbiAgWyhrZXkgY29sbCkgKHZhbCBjb2xsKV1cclxuICAodmVjdG9yPyBjb2xsKVxyXG4gICh3aXRoLW1ldGEgY29sbCBuaWwpXHJcbiAgKGFycmF5PyBjb2xsKVxyXG4gICguZnJvbUFycmF5IFBlcnNpc3RlbnRWZWN0b3IgY29sbCB0cnVlKVxyXG4gIDplbHNlXHJcbiAgKC1wZXJzaXN0ZW50IVxyXG4gICAocmVkdWNlIC1jb25qISAoLWFzLXRyYW5zaWVudCAoLi1FTVBUWSBQZXJzaXN0ZW50VmVjdG9yKSkgY29sbCkpKSlcclxuIn0gezpzeW0gKnByaW50LW1ldGEqLCA6bWV0YSB7OmRvYyAiSWYgc2V0IHRvIGxvZ2ljYWwgdHJ1ZSwgd2hlbiBwcmludGluZyBhbiBvYmplY3QsIGl0cyBtZXRhZGF0YSB3aWxsIGFsc29cbiAgYmUgcHJpbnRlZCBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcmVhZCBiYWNrIGJ5IHRoZSByZWFkZXIuXG5cbiAgRGVmYXVsdHMgdG8gZmFsc2UuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LW1ldGEqIGZhbHNlKVxyXG4ifSB7OnN5bSAtbm90aWZ5LXdhdGNoZXMsIDptZXRhIHs6ZG9jICJDYWxscyBhbGwgd2F0Y2hlcnMgd2l0aCB0aGlzLCBvbGR2YWwgYW5kIG5ld3ZhbC4iLCA6YXJnbGlzdHMgKFt0aGlzIG9sZHZhbCBuZXd2YWxdKX0sIDpwcm90b2NvbCBJV2F0Y2hhYmxlfSB7OnN5bSBpbnQsIDptZXRhIHs6ZG9jICJDb2VyY2UgdG8gaW50IGJ5IHN0cmlwcGluZyBkZWNpbWFsIHBsYWNlcy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50XHJcbiBcIkNvZXJjZSB0byBpbnQgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLlwiXHJcbiBbeF1cclxuIChiaXQtb3IgeCAwKSlcclxuIn0gezpzeW0gbWFwLWVudHJ5PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJTWFwRW50cnkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwLWVudHJ5P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBzYXRpc2ZpZXMgSU1hcEVudHJ5XCJcclxuIFt4XVxyXG4gKGltcGxlbWVudHM/IElNYXBFbnRyeSB4KSlcclxuIn0gezpzeW0gcmFuZCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSByYW5kb20gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmRcbiAgbiAoZGVmYXVsdCAxKSAoZXhjbHVzaXZlKS4iLCA6YXJnbGlzdHMgW1tdIFtuXV19LCA6c291cmNlICIoZGVmblxyXG4gcmFuZFxyXG4gXCJSZXR1cm5zIGEgcmFuZG9tIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kXFxuICBuIChkZWZhdWx0IDEpIChleGNsdXNpdmUpLlwiXHJcbiAoW10gKHJhbmQgMSkpXHJcbiAoW25dICgqIChNYXRoL3JhbmRvbSkgbikpKVxyXG4ifSB7OnN5bSBzZWNvbmQsIDptZXRhIHs6ZG9jICJTYW1lIGFzIChmaXJzdCAobmV4dCB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBzZWNvbmQgXCJTYW1lIGFzIChmaXJzdCAobmV4dCB4KSlcIiBbY29sbF0gKGZpcnN0IChuZXh0IGNvbGwpKSlcclxuIn0gezpzeW0gZmluZC1ucy1vYmosIDptZXRhIHs6ZG9jICJCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtbnMtb2JqXHJcbiBcIkJvb3RzdHJhcCBvbmx5LlwiXHJcbiBbbnNdXHJcbiAobGV0XHJcbiAgW211bmdlZC1ucyAobXVuZ2UgKHN0ciBucykpIHNlZ3MgKC5zcGxpdCBtdW5nZWQtbnMgXCIuXCIpXVxyXG4gIChjYXNlXHJcbiAgICp0YXJnZXQqXHJcbiAgIFwibm9kZWpzXCJcclxuICAgKGlmXHJcbiAgICBqcy9DT01QSUxFRFxyXG4gICAgKGZpbmQtbnMtb2JqKlxyXG4gICAgICh0cnlcclxuICAgICAgKGxldFxyXG4gICAgICAgW2N0eHQgKGpzL2V2YWwgKGZpcnN0IHNlZ3MpKV1cclxuICAgICAgICh3aGVuIChhbmQgY3R4dCAob2JqZWN0PyBjdHh0KSkgY3R4dCkpXHJcbiAgICAgIChjYXRjaCBqcy9SZWZlcmVuY2VFcnJvciBlIG5pbCkpXHJcbiAgICAgKG5leHQgc2VncykpXHJcbiAgICAoZmluZC1ucy1vYmoqIGdvb2cvZ2xvYmFsIHNlZ3MpKVxyXG4gICAoXCJkZWZhdWx0XCIgXCJ3ZWJ3b3JrZXJcIilcclxuICAgKGZpbmQtbnMtb2JqKiBnb29nL2dsb2JhbCBzZWdzKVxyXG4gICAodGhyb3dcclxuICAgIChqcy9FcnJvci5cclxuICAgICAoc3RyIFwiZmluZC1ucy1vYmogbm90IHN1cHBvcnRlZCBmb3IgdGFyZ2V0IFwiICp0YXJnZXQqKSkpKSkpXHJcbiJ9IHs6c3ltIElFZGl0YWJsZUNvbGxlY3Rpb24sIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY29sbGVjdGlvbnMgd2hpY2ggY2FuIHRyYW5zZm9ybWVkIHRvIHRyYW5zaWVudHMuIn0sIDptZXRob2RzICgtYXMtdHJhbnNpZW50KX0gezpzeW0gaGFzaC1jb21iaW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NlZWQgaGFzaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtY29tYmluZVxyXG4gW3NlZWQgaGFzaF1cclxuIChiaXQteG9yXHJcbiAgc2VlZFxyXG4gICgrXHJcbiAgIGhhc2hcclxuICAgMjY1NDQzNTc2OVxyXG4gICAoYml0LXNoaWZ0LWxlZnQgc2VlZCA2KVxyXG4gICAoYml0LXNoaWZ0LXJpZ2h0IHNlZWQgMikpKSlcclxuIn0gezpzeW0gPiwgOm1ldGEgezpkb2MgIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcgb3JkZXIsXG4gIG90aGVyd2lzZSBmYWxzZS4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuID5cclxuIFwiUmV0dXJucyBub24tbmlsIGlmIG51bXMgYXJlIGluIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBvcmRlcixcXG4gIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvPiB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChpZlxyXG4gICAoY2xqcy5jb3JlLz4geCB5KVxyXG4gICAoaWZcclxuICAgIChuZXh0IG1vcmUpXHJcbiAgICAocmVjdXIgeSAoZmlyc3QgbW9yZSkgKG5leHQgbW9yZSkpXHJcbiAgICAoY2xqcy5jb3JlLz4geSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSAtbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWUgU3RyaW5nIG9mIHguIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIElOYW1lZH0gezpzeW0gcmVwbGFjZSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgbWFwIG9mIHJlcGxhY2VtZW50IHBhaXJzIGFuZCBhIHZlY3Rvci9jb2xsZWN0aW9uLCByZXR1cm5zIGFcbiAgdmVjdG9yL3NlcSB3aXRoIGFueSBlbGVtZW50cyA9IGEga2V5IGluIHNtYXAgcmVwbGFjZWQgd2l0aCB0aGVcbiAgY29ycmVzcG9uZGluZyB2YWwgaW4gc21hcC4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvblxuICBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tzbWFwXSBbc21hcCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVwbGFjZVxyXG4gXCJHaXZlbiBhIG1hcCBvZiByZXBsYWNlbWVudCBwYWlycyBhbmQgYSB2ZWN0b3IvY29sbGVjdGlvbiwgcmV0dXJucyBhXFxuICB2ZWN0b3Ivc2VxIHdpdGggYW55IGVsZW1lbnRzID0gYSBrZXkgaW4gc21hcCByZXBsYWNlZCB3aXRoIHRoZVxcbiAgY29ycmVzcG9uZGluZyB2YWwgaW4gc21hcC4gIFJldHVybnMgYSB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvblxcbiAgaXMgcHJvdmlkZWQuXCJcclxuIChbc21hcF1cclxuICAobWFwXHJcbiAgIChmbipcclxuICAgIFtwMV9fNDg4MzIjXVxyXG4gICAgKGlmLWxldCBbZSAoZmluZCBzbWFwIHAxX180ODgzMiMpXSAodmFsIGUpIHAxX180ODgzMiMpKSkpXHJcbiAoW3NtYXAgY29sbF1cclxuICAoaWZcclxuICAgKHZlY3Rvcj8gY29sbClcclxuICAgKGxldFxyXG4gICAgW24gKGNvdW50IGNvbGwpXVxyXG4gICAgKHJlZHVjZVxyXG4gICAgIChmblxyXG4gICAgICBbdiBpXVxyXG4gICAgICAoaWYtbGV0IFtlIChmaW5kIHNtYXAgKG50aCB2IGkpKV0gKGFzc29jIHYgaSAoc2Vjb25kIGUpKSB2KSlcclxuICAgICBjb2xsXHJcbiAgICAgKHRha2UgbiAoaXRlcmF0ZSBpbmMgMCkpKSlcclxuICAgKG1hcFxyXG4gICAgKGZuKlxyXG4gICAgIFtwMV9fNDg4MzMjXVxyXG4gICAgIChpZi1sZXQgW2UgKGZpbmQgc21hcCBwMV9fNDg4MzMjKV0gKHNlY29uZCBlKSBwMV9fNDg4MzMjKSlcclxuICAgIGNvbGwpKSkpXHJcbiJ9IHs6c3ltIGludD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnRlZ2VyPyBvciBpcyBhbiBpbnN0YW5jZSBvZiBnb29nLm1hdGguSW50ZWdlclxuICAgb3IgZ29vZy5tYXRoLkxvbmcuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50ZWdlcj8gb3IgaXMgYW4gaW5zdGFuY2Ugb2YgZ29vZy5tYXRoLkludGVnZXJcXG4gICBvciBnb29nLm1hdGguTG9uZy5cIlxyXG4gW3hdXHJcbiAob3JcclxuICAoaW50ZWdlcj8geClcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5JbnRlZ2VyIHgpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguTG9uZyB4KSkpXHJcbiJ9IHs6c3ltIGFzc29jaWF0aXZlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgSUFzc29jaWF0aXZlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzc29jaWF0aXZlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIElBc3NvY2lhdGl2ZVwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElBc3NvY2lhdGl2ZSB4KSlcclxuIn0gezpzeW0gdW5jaGVja2VkLWludCwgOm1ldGEgezpkb2MgIkNvZXJjZSB0byBpbnQgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtaW50XHJcbiBcIkNvZXJjZSB0byBpbnQgYnkgc3RyaXBwaW5nIGRlY2ltYWwgcGxhY2VzLlwiXHJcbiBbeF1cclxuIChmaXggeCkpXHJcbiJ9IHs6c3ltIGpzLWtleXMsIDptZXRhIHs6ZG9jICJSZXR1cm4gdGhlIEphdmFTY3JpcHQga2V5cyBmb3IgYW4gb2JqZWN0LiIsIDphcmdsaXN0cyAoW29ial0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLWtleXNcclxuIFwiUmV0dXJuIHRoZSBKYXZhU2NyaXB0IGtleXMgZm9yIGFuIG9iamVjdC5cIlxyXG4gW29ial1cclxuIChnb2JqZWN0L2dldEtleXMgb2JqKSlcclxuIn0gezpzeW0gaW5zdC1tcyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbaW5zdF0pfSwgOnByb3RvY29sIEluc3R9IHs6c3ltIGtleXdvcmQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIEtleXdvcmQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5d29yZD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIEtleXdvcmRcIlxyXG4gW3hdXHJcbiAoaW5zdGFuY2U/IEtleXdvcmQgeCkpXHJcbiJ9IHs6c3ltIGFycmF5LWl0ZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gYXJyYXktaXRlciBbeF0gKEFycmF5SXRlci4geCAwKSlcclxuIn0gezpzeW0gZm9yY2UsIDptZXRhIHs6ZG9jICJJZiB4IGlzIGEgRGVsYXksIHJldHVybnMgdGhlIChwb3NzaWJseSBjYWNoZWQpIHZhbHVlIG9mIGl0cyBleHByZXNzaW9uLCBlbHNlIHJldHVybnMgeCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3JjZVxyXG4gXCJJZiB4IGlzIGEgRGVsYXksIHJldHVybnMgdGhlIChwb3NzaWJseSBjYWNoZWQpIHZhbHVlIG9mIGl0cyBleHByZXNzaW9uLCBlbHNlIHJldHVybnMgeFwiXHJcbiBbeF1cclxuIChpZiAoZGVsYXk/IHgpIChkZXJlZiB4KSB4KSlcclxuIn0gezpzeW0gZ3JvdXAtYnksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIGtleWVkIGJ5IHRoZSByZXN1bHQgb2ZcbiAgZiBvbiBlYWNoIGVsZW1lbnQuIFRoZSB2YWx1ZSBhdCBlYWNoIGtleSB3aWxsIGJlIGEgdmVjdG9yIG9mIHRoZVxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXJlZCBpbiBjb2xsLiIsIDphcmdsaXN0cyAoW2YgY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdyb3VwLWJ5XHJcbiBcIlJldHVybnMgYSBtYXAgb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwga2V5ZWQgYnkgdGhlIHJlc3VsdCBvZlxcbiAgZiBvbiBlYWNoIGVsZW1lbnQuIFRoZSB2YWx1ZSBhdCBlYWNoIGtleSB3aWxsIGJlIGEgdmVjdG9yIG9mIHRoZVxcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyZWQgaW4gY29sbC5cIlxyXG4gW2YgY29sbF1cclxuIChwZXJzaXN0ZW50IVxyXG4gIChyZWR1Y2VcclxuICAgKGZuIFtyZXQgeF0gKGxldCBbayAoZiB4KV0gKGFzc29jISByZXQgayAoY29uaiAoZ2V0IHJldCBrIFtdKSB4KSkpKVxyXG4gICAodHJhbnNpZW50IHt9KVxyXG4gICBjb2xsKSkpXHJcbiJ9IHs6c3ltIC1yc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvZiB0aGUgaXRlbXMgaW4gY29sbCBpbiByZXZlcnNlZCBvcmRlci4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6cHJvdG9jb2wgSVJldmVyc2libGV9IHs6c3ltIHBybiwgOm1ldGEgezpkb2MgIlNhbWUgYXMgcHIgZm9sbG93ZWQgYnkgKG5ld2xpbmUpLiIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByblxyXG4gXCJTYW1lIGFzIHByIGZvbGxvd2VkIGJ5IChuZXdsaW5lKS5cIlxyXG4gWyYgb2Jqc11cclxuIChwci13aXRoLW9wdHMgb2JqcyAocHItb3B0cykpXHJcbiAod2hlbiAqcHJpbnQtbmV3bGluZSogKG5ld2xpbmUgKHByLW9wdHMpKSkpXHJcbiJ9IHs6c3ltIGRlZmF1bHQtZGlzcGF0Y2gtdmFsLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtdWx0aW1ldGhvZCwgcmV0dXJuIGl0J3MgZGVmYXVsdC1kaXNwYXRjaC12YWwuIiwgOmFyZ2xpc3RzIChbbXVsdGlmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZmF1bHQtZGlzcGF0Y2gtdmFsXHJcbiBcIkdpdmVuIGEgbXVsdGltZXRob2QsIHJldHVybiBpdCdzIGRlZmF1bHQtZGlzcGF0Y2gtdmFsLlwiXHJcbiBbbXVsdGlmbl1cclxuICgtZGVmYXVsdC1kaXNwYXRjaC12YWwgbXVsdGlmbikpXHJcbiJ9IHs6c3ltIGpzLWl0ZXJhYmxlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaGFzIGEgSmF2YVNjcmlwdCBpdGVyYXRvciBwcm9wZXJ0eSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1pdGVyYWJsZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBoYXMgYSBKYXZhU2NyaXB0IGl0ZXJhdG9yIHByb3BlcnR5XCJcclxuIFt4XVxyXG4gKGFuZCAobm90IChuaWw/IHgpKSAobm90IChuaWw/IChqcyogXCJ+e31bfnt9XVwiIHggSVRFUl9TWU1CT0wpKSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtbXVsdGlwbHksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIG51bXMuICgqKSByZXR1cm5zIDEuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtbXVsdGlwbHlcclxuIFwiUmV0dXJucyB0aGUgcHJvZHVjdCBvZiBudW1zLiAoKikgcmV0dXJucyAxLlwiXHJcbiAoW10gMSlcclxuIChbeF0geClcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1tdWx0aXBseSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2UgdW5jaGVja2VkLW11bHRpcGx5IChjbGpzLmNvcmUvdW5jaGVja2VkLW11bHRpcGx5IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBldmVuPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGV2ZW4sIHRocm93cyBhbiBleGNlcHRpb24gaWYgbiBpcyBub3QgYW4gaW50ZWdlciIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmVuP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgbiBpcyBldmVuLCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIG4gaXMgbm90IGFuIGludGVnZXJcIlxyXG4gW25dXHJcbiAoaWZcclxuICAoaW50ZWdlcj8gbilcclxuICAoemVybz8gKGJpdC1hbmQgbiAxKSlcclxuICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiQXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyOiBcIiBuKSkpKSlcclxuIn0gezpzeW0gZXM2LWl0ZXJhdG9yLXNlcSwgOm1ldGEgezpkb2MgIkVYUEVSSU1FTlRBTDogR2l2ZW4gYW4gRVMyMDE1IGNvbXBhdGlibGUgaXRlcmF0b3IgcmV0dXJuIGEgc2VxLiIsIDphcmdsaXN0cyAoW2l0ZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlczYtaXRlcmF0b3Itc2VxXHJcbiBcIkVYUEVSSU1FTlRBTDogR2l2ZW4gYW4gRVMyMDE1IGNvbXBhdGlibGUgaXRlcmF0b3IgcmV0dXJuIGEgc2VxLlwiXHJcbiBbaXRlcl1cclxuIChsZXRcclxuICBbdiAoLm5leHQgaXRlcildXHJcbiAgKGlmICguLWRvbmUgdikgbmlsIChFUzZJdGVyYXRvclNlcS4gKC4tdmFsdWUgdikgaXRlciBuaWwpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1kZWMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbnVtYmVyIG9uZSBsZXNzIHRoYW4geCwgYW4gaW50LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bmNoZWNrZWQtZGVjXHJcbiBcIlJldHVybnMgYSBudW1iZXIgb25lIGxlc3MgdGhhbiB4LCBhbiBpbnQuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS91bmNoZWNrZWQtZGVjIHgpKVxyXG4ifSB7OnN5bSBJbnN0LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoaW5zdC1tcyopfSB7OnN5bSBwZXJzaXN0ZW50LWFycmF5LW1hcC1zZXEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXJyIGkgX21ldGFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwZXJzaXN0ZW50LWFycmF5LW1hcC1zZXFcclxuIFthcnIgaSBfbWV0YV1cclxuICh3aGVuXHJcbiAgKDw9IGkgKC0gKGFsZW5ndGggYXJyKSAyKSlcclxuICAoUGVyc2lzdGVudEFycmF5TWFwU2VxLiBhcnIgaSBfbWV0YSkpKVxyXG4ifSB7OnN5bSB0YWdnZWQtbGl0ZXJhbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSB0YWdnZWQgbGl0ZXJhbCIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFnZ2VkLWxpdGVyYWw/XHJcbiBcIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHRhZ2dlZCBsaXRlcmFsXCJcclxuIFt2YWx1ZV1cclxuIChpbnN0YW5jZT8gVGFnZ2VkTGl0ZXJhbCB2YWx1ZSkpXHJcbiJ9IHs6c3ltIGRvdWJsZS1hcnJheSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gYXJyYXkgb2YgZG91Ymxlcy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxuICB3aXRoIENsb2p1cmUuIiwgOmFyZ2xpc3RzIFtbc2l6ZS1vci1zZXFdIFtzaXplIGluaXQtdmFsLW9yLXNlcV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRvdWJsZS1hcnJheVxyXG4gXCJDcmVhdGVzIGFuIGFycmF5IG9mIGRvdWJsZXMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcXG4gIHdpdGggQ2xvanVyZS5cIlxyXG4gKFtzaXplLW9yLXNlcV1cclxuICAoaWZcclxuICAgKG51bWJlcj8gc2l6ZS1vci1zZXEpXHJcbiAgIChkb3VibGUtYXJyYXkgc2l6ZS1vci1zZXEgbmlsKVxyXG4gICAoaW50by1hcnJheSBzaXplLW9yLXNlcSkpKVxyXG4gKFtzaXplIGluaXQtdmFsLW9yLXNlcV1cclxuICAobGV0XHJcbiAgIFthIChtYWtlLWFycmF5IHNpemUpXVxyXG4gICAoaWZcclxuICAgIChzZXE/IGluaXQtdmFsLW9yLXNlcSlcclxuICAgIChsZXRcclxuICAgICBbcyAoc2VxIGluaXQtdmFsLW9yLXNlcSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW2kgMCBzIHNdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCBzICg8IGkgc2l6ZSkpXHJcbiAgICAgICAoZG8gKGFzZXQgYSBpIChmaXJzdCBzKSkgKHJlY3VyIChpbmMgaSkgKG5leHQgcykpKVxyXG4gICAgICAgYSkpKVxyXG4gICAgKGRvIChkb3RpbWVzIFtpIHNpemVdIChhc2V0IGEgaSBpbml0LXZhbC1vci1zZXEpKSBhKSkpKSlcclxuIn0gezpzeW0gY3JlYXRlLW5zLCA6bWV0YSB7OmRvYyAiQ3JlYXRlIGEgbmV3IG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sLiBCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgW1tzeW1dIFtzeW0gbnMtb2JqXV19LCA6c291cmNlICIoZGVmblxyXG4gY3JlYXRlLW5zXHJcbiBcIkNyZWF0ZSBhIG5ldyBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbC4gQm9vdHN0cmFwIG9ubHkuXCJcclxuIChbc3ltXSAoY3JlYXRlLW5zIHN5bSAoZmluZC1ucy1vYmogc3ltKSkpXHJcbiAoW3N5bSBucy1vYmpdIChOYW1lc3BhY2UuIG5zLW9iaiBzeW0pKSlcclxuIn0gezpzeW0gZGVmbiwgOm1ldGEgezphcmdsaXN0cyAocXVvdGUgKFtuYW1lIGRvYy1zdHJpbmc/IGF0dHItbWFwPyBbcGFyYW1zKl0gcHJlcG9zdC1tYXA/IGJvZHldIFtuYW1lIGRvYy1zdHJpbmc/IGF0dHItbWFwPyAoW3BhcmFtcypdIHByZXBvc3QtbWFwPyBib2R5KSArIGF0dHItbWFwP10pKSwgOmRvYyAiU2FtZSBhcyAoZGVmIG5hbWUgKGNvcmUvZm4gW3BhcmFtcyogXSBleHBycyopKSBvciAoZGVmXG4gICAgbmFtZSAoY29yZS9mbiAoW3BhcmFtcyogXSBleHBycyopKykpIHdpdGggYW55IGRvYy1zdHJpbmcgb3IgYXR0cnMgYWRkZWRcbiAgICB0byB0aGUgdmFyIG1ldGFkYXRhLiBwcmVwb3N0LW1hcCBkZWZpbmVzIGEgbWFwIHdpdGggb3B0aW9uYWwga2V5c1xuICAgIDpwcmUgYW5kIDpwb3N0IHRoYXQgY29udGFpbiBjb2xsZWN0aW9ucyBvZiBwcmUgb3IgcG9zdCBjb25kaXRpb25zLiJ9LCA6c291cmNlICIoZGVmXHJcbiBkZWZuXHJcbiAoY29yZS9mblxyXG4gIGRlZm5cclxuICBbJmZvcm0gJmVudiBuYW1lICYgZmRlY2xdXHJcbiAgKGlmXHJcbiAgIChjb3JlL2luc3RhbmNlPyAjPyg6Y2xqIGNsb2p1cmUubGFuZy5TeW1ib2wgOmNsanMgU3ltYm9sKSBuYW1lKVxyXG4gICBuaWxcclxuICAgKHRocm93XHJcbiAgICAjPyg6Y2xqIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uIFwiRmlyc3QgYXJndW1lbnQgdG8gZGVmbiBtdXN0IGJlIGEgc3ltYm9sXCIpIDpjbGpzIChqcy9FcnJvci4gXCJGaXJzdCBhcmd1bWVudCB0byBkZWZuIG11c3QgYmUgYSBzeW1ib2xcIikpKSlcclxuICAoY29yZS9sZXRcclxuICAgW21cclxuICAgIChpZiAoY29yZS9zdHJpbmc/IChmaXJzdCBmZGVjbCkpIHs6ZG9jIChmaXJzdCBmZGVjbCl9IHt9KVxyXG4gICAgZmRlY2xcclxuICAgIChpZiAoY29yZS9zdHJpbmc/IChmaXJzdCBmZGVjbCkpIChuZXh0IGZkZWNsKSBmZGVjbClcclxuICAgIG1cclxuICAgIChpZiAobWFwPyAoZmlyc3QgZmRlY2wpKSAoY29uaiBtIChmaXJzdCBmZGVjbCkpIG0pXHJcbiAgICBmZGVjbFxyXG4gICAgKGlmIChtYXA/IChmaXJzdCBmZGVjbCkpIChuZXh0IGZkZWNsKSBmZGVjbClcclxuICAgIGZkZWNsXHJcbiAgICAoaWYgKHZlY3Rvcj8gKGZpcnN0IGZkZWNsKSkgKGNvcmUvbGlzdCBmZGVjbCkgZmRlY2wpXHJcbiAgICBtXHJcbiAgICAoaWYgKG1hcD8gKGxhc3QgZmRlY2wpKSAoY29uaiBtIChsYXN0IGZkZWNsKSkgbSlcclxuICAgIGZkZWNsXHJcbiAgICAoaWYgKG1hcD8gKGxhc3QgZmRlY2wpKSAoYnV0bGFzdCBmZGVjbCkgZmRlY2wpXHJcbiAgICBtXHJcbiAgICAoY29uaiB7OmFyZ2xpc3RzIChjb3JlL2xpc3QgJ3F1b3RlIChzaWdzIGZkZWNsKSl9IG0pXHJcbiAgICBtXHJcbiAgICAoY29uaiAoaWYgKG1ldGEgbmFtZSkgKG1ldGEgbmFtZSkge30pIG0pXVxyXG4gICAoY29yZS9jb25kXHJcbiAgICAobXVsdGktYXJpdHktZm4/IGZkZWNsKVxyXG4gICAgKG11bHRpLWFyaXR5LWZuXHJcbiAgICAgbmFtZVxyXG4gICAgIChpZlxyXG4gICAgICAoY29tcC9jaGVja2luZy10eXBlcz8pXHJcbiAgICAgICh1cGRhdGUtaW4gbSBbOmpzZG9jXSBjb25qIFwiQHBhcmFtIHsuLi4qfSB2YXJfYXJnc1wiKVxyXG4gICAgICBtKVxyXG4gICAgIGZkZWNsXHJcbiAgICAgKDpkZWYtZW1pdHMtdmFyICZlbnYpKVxyXG4gICAgKHZhcmlhZGljLWZuPyBmZGVjbClcclxuICAgICh2YXJpYWRpYy1mblxyXG4gICAgIG5hbWVcclxuICAgICAoaWZcclxuICAgICAgKGNvbXAvY2hlY2tpbmctdHlwZXM/KVxyXG4gICAgICAodXBkYXRlLWluIG0gWzpqc2RvY10gY29uaiBcIkBwYXJhbSB7Li4uKn0gdmFyX2FyZ3NcIilcclxuICAgICAgbSlcclxuICAgICBmZGVjbFxyXG4gICAgICg6ZGVmLWVtaXRzLXZhciAmZW52KSlcclxuICAgIDplbHNlXHJcbiAgICAoY29yZS9saXN0ICdkZWYgKHdpdGgtbWV0YSBuYW1lIG0pIChjb25zICdjbGpzLmNvcmUvZm4gZmRlY2wpKSkpKSlcclxuIn0gezpzeW0gc3ByZWFkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2FyZ2xpc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcHJlYWRcclxuIFthcmdsaXN0XVxyXG4gKHdoZW4tbm90XHJcbiAgKG5pbD8gYXJnbGlzdClcclxuICAobGV0XHJcbiAgIFtuIChuZXh0IGFyZ2xpc3QpXVxyXG4gICAoaWZcclxuICAgIChuaWw/IG4pXHJcbiAgICAoc2VxIChmaXJzdCBhcmdsaXN0KSlcclxuICAgIChjb25zIChmaXJzdCBhcmdsaXN0KSAoc3ByZWFkIG4pKSkpKSlcclxuIn0gezpzeW0gcnNlcSwgOm1ldGEgezpkb2MgIlJldHVybnMsIGluIGNvbnN0YW50IHRpbWUsIGEgc2VxIG9mIHRoZSBpdGVtcyBpbiByZXYgKHdoaWNoXG4gIGNhbiBiZSBhIHZlY3RvciBvciBzb3J0ZWQtbWFwKSwgaW4gcmV2ZXJzZSBvcmRlci4gSWYgcmV2IGlzIGVtcHR5IHJldHVybnMgbmlsIiwgOmFyZ2xpc3RzIChbcmV2XSl9LCA6c291cmNlICIoZGVmblxyXG4gcnNlcVxyXG4gXCJSZXR1cm5zLCBpbiBjb25zdGFudCB0aW1lLCBhIHNlcSBvZiB0aGUgaXRlbXMgaW4gcmV2ICh3aGljaFxcbiAgY2FuIGJlIGEgdmVjdG9yIG9yIHNvcnRlZC1tYXApLCBpbiByZXZlcnNlIG9yZGVyLiBJZiByZXYgaXMgZW1wdHkgcmV0dXJucyBuaWxcIlxyXG4gW3Jldl1cclxuICgtcnNlcSByZXYpKVxyXG4ifSB7OnN5bSBleC1jYXVzZSwgOm1ldGEgezpkb2MgIlJldHVybnMgZXhjZXB0aW9uIGNhdXNlIChhbiBFcnJvciAvIEV4Y2VwdGlvbkluZm8pIGlmIGV4IGlzIGFuXG4gIEV4Y2VwdGlvbkluZm8uXG4gIE90aGVyd2lzZSByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4LWNhdXNlXHJcbiBcIlJldHVybnMgZXhjZXB0aW9uIGNhdXNlIChhbiBFcnJvciAvIEV4Y2VwdGlvbkluZm8pIGlmIGV4IGlzIGFuXFxuICBFeGNlcHRpb25JbmZvLlxcbiAgT3RoZXJ3aXNlIHJldHVybnMgbmlsLlwiXHJcbiBbZXhdXHJcbiAod2hlbiAoaW5zdGFuY2U/IEV4Y2VwdGlvbkluZm8gZXgpICguLWNhdXNlIGV4KSkpXHJcbiJ9IHs6c3ltIElSZXNldCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgcmVzZXR0aW5nIGZ1bmN0aW9uYWxpdHkuIn0sIDptZXRob2RzICgtcmVzZXQhKX0gezpzeW0gSUVtcHR5YWJsZUNvbGxlY3Rpb24sIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY3JlYXRpbmcgYW4gZW1wdHkgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1lbXB0eSl9IHs6c3ltIGV4LW1lc3NhZ2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtZXNzYWdlIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBFcnJvciAvIEV4Y2VwdGlvbkluZm8gb2JqZWN0LlxuICBGb3Igbm9uLUVycm9ycyByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4LW1lc3NhZ2VcclxuIFwiUmV0dXJucyB0aGUgbWVzc2FnZSBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gRXJyb3IgLyBFeGNlcHRpb25JbmZvIG9iamVjdC5cXG4gIEZvciBub24tRXJyb3JzIHJldHVybnMgbmlsLlwiXHJcbiBbZXhdXHJcbiAod2hlbiAoaW5zdGFuY2U/IGpzL0Vycm9yIGV4KSAoLi1tZXNzYWdlIGV4KSkpXHJcbiJ9IHs6c3ltICpwcmludC1mbi1ib2RpZXMqLCA6bWV0YSB7OmRvYyAiKnByaW50LWZucy1ib2RpZXMqIGNvbnRyb2xzIHdoZXRoZXIgZnVuY3Rpb25zIHByaW50IHRoZWlyIHNvdXJjZSBvclxuICAgIG9ubHkgdGhlaXIgbmFtZXMuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LWZuLWJvZGllcyogZmFsc2UpXHJcbiJ9IHs6c3ltIHN0cmluZy1wcmludCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nLXByaW50XHJcbiBbeF1cclxuICh3aGVuXHJcbiAgKG5pbD8gKnByaW50LWZuKilcclxuICAodGhyb3dcclxuICAgKGpzL0Vycm9yLiBcIk5vICpwcmludC1mbiogZm4gc2V0IGZvciBldmFsdWF0aW9uIGVudmlyb25tZW50XCIpKSlcclxuICgqcHJpbnQtZm4qIHgpXHJcbiBuaWwpXHJcbiJ9IHs6c3ltIGZsb2F0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGZsb2F0IFt4XSB4KVxyXG4ifSB7OnN5bSBJUmVjb3JkLCA6bWV0YSB7OmRvYyAiTWFya2VyIGludGVyZmFjZSBpbmRpY2F0aW5nIGEgcmVjb3JkIG9iamVjdCJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gcHItc3RyLCA6bWV0YSB7OmRvYyAicHIgdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdC4gRnVuZGFtZW50YWwgZW50cnlwb2ludCB0byBJUHJpbnRXaXRoV3JpdGVyLiIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByLXN0clxyXG4gXCJwciB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0LiBGdW5kYW1lbnRhbCBlbnRyeXBvaW50IHRvIElQcmludFdpdGhXcml0ZXIuXCJcclxuIFsmIG9ianNdXHJcbiAocHItc3RyLXdpdGgtb3B0cyBvYmpzIChwci1vcHRzKSkpXHJcbiJ9IHs6c3ltIGVzNi1zZXQtZW50cmllcy1pdGVyYXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXM2LXNldC1lbnRyaWVzLWl0ZXJhdG9yXHJcbiBbY29sbF1cclxuIChFUzZTZXRFbnRyaWVzSXRlcmF0b3IuIChzZXEgY29sbCkpKVxyXG4ifSB7OnN5bSBjb25jYXQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgcmVwcmVzZW50aW5nIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc3VwcGxpZWQgY29sbHMuIiwgOmFyZ2xpc3RzIFtbXSBbeF0gW3ggeV0gW3ggeSAmIHpzXV19LCA6c291cmNlICIoZGVmblxyXG4gY29uY2F0XHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSByZXByZXNlbnRpbmcgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzdXBwbGllZCBjb2xscy5cIlxyXG4gKFtdIChsYXp5LXNlcSBuaWwpKVxyXG4gKFt4XSAobGF6eS1zZXEgeCkpXHJcbiAoW3ggeV1cclxuICAobGF6eS1zZXFcclxuICAgKGxldFxyXG4gICAgW3MgKHNlcSB4KV1cclxuICAgIChpZlxyXG4gICAgIHNcclxuICAgICAoaWZcclxuICAgICAgKGNodW5rZWQtc2VxPyBzKVxyXG4gICAgICAoY2h1bmstY29ucyAoY2h1bmstZmlyc3QgcykgKGNvbmNhdCAoY2h1bmstcmVzdCBzKSB5KSlcclxuICAgICAgKGNvbnMgKGZpcnN0IHMpIChjb25jYXQgKHJlc3QgcykgeSkpKVxyXG4gICAgIHkpKSkpXHJcbiAoW3ggeSAmIHpzXVxyXG4gIChsZXRcclxuICAgW2NhdFxyXG4gICAgKGZuXHJcbiAgICAgY2F0XHJcbiAgICAgW3h5cyB6c11cclxuICAgICAobGF6eS1zZXFcclxuICAgICAgKGxldFxyXG4gICAgICAgW3h5cyAoc2VxIHh5cyldXHJcbiAgICAgICAoaWZcclxuICAgICAgICB4eXNcclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGNodW5rZWQtc2VxPyB4eXMpXHJcbiAgICAgICAgIChjaHVuay1jb25zIChjaHVuay1maXJzdCB4eXMpIChjYXQgKGNodW5rLXJlc3QgeHlzKSB6cykpXHJcbiAgICAgICAgIChjb25zIChmaXJzdCB4eXMpIChjYXQgKHJlc3QgeHlzKSB6cykpKVxyXG4gICAgICAgICh3aGVuIHpzIChjYXQgKGZpcnN0IHpzKSAobmV4dCB6cykpKSkpKSldXHJcbiAgIChjYXQgKGNvbmNhdCB4IHkpIHpzKSkpKVxyXG4ifSB7OnN5bSAtbWV0aG9kcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZl0pfSwgOnByb3RvY29sIElNdWx0aUZufSB7OnN5bSBqcy1yZXNlcnZlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYganMtcmVzZXJ2ZWQgbmlsKVxyXG4ifSB7OnN5bSBJRGVyZWZXaXRoVGltZW91dCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKC1kZXJlZi13aXRoLXRpbWVvdXQpfSB7OnN5bSBzeW1ib2wsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgU3ltYm9sIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbmFtZS4gQXJpdHktMSB3b3Jrc1xuICBvbiBzdHJpbmdzLCBrZXl3b3JkcywgYW5kIHZhcnMuIiwgOmFyZ2xpc3RzIFtbbmFtZV0gW25zIG5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzeW1ib2xcclxuIFwiUmV0dXJucyBhIFN5bWJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIG5hbWUuIEFyaXR5LTEgd29ya3NcXG4gIG9uIHN0cmluZ3MsIGtleXdvcmRzLCBhbmQgdmFycy5cIlxyXG4gKFtuYW1lXVxyXG4gIChjb25kXHJcbiAgIChzeW1ib2w/IG5hbWUpXHJcbiAgIG5hbWVcclxuICAgKHN0cmluZz8gbmFtZSlcclxuICAgKGxldFxyXG4gICAgW2lkeCAoLmluZGV4T2YgbmFtZSBcIi9cIildXHJcbiAgICAoaWZcclxuICAgICAoPCBpZHggMSlcclxuICAgICAoc3ltYm9sIG5pbCBuYW1lKVxyXG4gICAgIChzeW1ib2xcclxuICAgICAgKC5zdWJzdHJpbmcgbmFtZSAwIGlkeClcclxuICAgICAgKC5zdWJzdHJpbmcgbmFtZSAoaW5jIGlkeCkgKC4gbmFtZSAtbGVuZ3RoKSkpKSlcclxuICAgKHZhcj8gbmFtZSlcclxuICAgKC4tc3ltIG5hbWUpXHJcbiAgIChrZXl3b3JkPyBuYW1lKVxyXG4gICAocmVjdXIgKC4tZnFuIG5hbWUpKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3cgKG5ldyBqcy9FcnJvciBcIm5vIGNvbnZlcnNpb24gdG8gc3ltYm9sXCIpKSkpXHJcbiAoW25zIG5hbWVdXHJcbiAgKGxldFxyXG4gICBbc3ltLXN0ciAoaWYtbm90IChuaWw/IG5zKSAoc3RyIG5zIFwiL1wiIG5hbWUpIG5hbWUpXVxyXG4gICAoU3ltYm9sLiBucyBuYW1lIHN5bS1zdHIgbmlsIG5pbCkpKSlcclxuIn0gezpzeW0gdG8tYXJyYXktMmQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgKHBvdGVudGlhbGx5LXJhZ2dlZCkgMi1kaW1lbnNpb25hbCBhcnJheVxuICBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0by1hcnJheS0yZFxyXG4gXCJSZXR1cm5zIGEgKHBvdGVudGlhbGx5LXJhZ2dlZCkgMi1kaW1lbnNpb25hbCBhcnJheVxcbiAgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgY29sbC5cIlxyXG4gW2NvbGxdXHJcbiAobGV0XHJcbiAgW3JldCAobWFrZS1hcnJheSAoY291bnQgY29sbCkpXVxyXG4gIChsb29wXHJcbiAgIFtpIDAgeHMgKHNlcSBjb2xsKV1cclxuICAgKHdoZW4tbm90XHJcbiAgICAobmlsPyB4cylcclxuICAgIChhc2V0IHJldCBpICh0by1hcnJheSAoZmlyc3QgeHMpKSlcclxuICAgIChyZWN1ciAoaW5jIGkpIChuZXh0IHhzKSkpKVxyXG4gIHJldCkpXHJcbiJ9IHs6c3ltIEV4Y2VwdGlvbkluZm8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWVzc2FnZSBkYXRhIGNhdXNlXSl9LCA6c291cmNlICIoZGVmblxyXG4gRXhjZXB0aW9uSW5mb1xyXG4gW21lc3NhZ2UgZGF0YSBjYXVzZV1cclxuIChsZXRcclxuICBbZSAoanMvRXJyb3IuIG1lc3NhZ2UpXVxyXG4gICh0aGlzLWFzXHJcbiAgIHRoaXNcclxuICAgKHNldCEgKC4tbWVzc2FnZSB0aGlzKSBtZXNzYWdlKVxyXG4gICAoc2V0ISAoLi1kYXRhIHRoaXMpIGRhdGEpXHJcbiAgIChzZXQhICguLWNhdXNlIHRoaXMpIGNhdXNlKVxyXG4gICAoZG9cclxuICAgIChzZXQhICguLW5hbWUgdGhpcykgKC4tbmFtZSBlKSlcclxuICAgIChzZXQhICguLWRlc2NyaXB0aW9uIHRoaXMpICguLWRlc2NyaXB0aW9uIGUpKVxyXG4gICAgKHNldCEgKC4tbnVtYmVyIHRoaXMpICguLW51bWJlciBlKSlcclxuICAgIChzZXQhICguLWZpbGVOYW1lIHRoaXMpICguLWZpbGVOYW1lIGUpKVxyXG4gICAgKHNldCEgKC4tbGluZU51bWJlciB0aGlzKSAoLi1saW5lTnVtYmVyIGUpKVxyXG4gICAgKHNldCEgKC4tY29sdW1uTnVtYmVyIHRoaXMpICguLWNvbHVtbk51bWJlciBlKSlcclxuICAgIChzZXQhICguLXN0YWNrIHRoaXMpICguLXN0YWNrIGUpKSlcclxuICAgdGhpcykpKVxyXG4ifSB7OnN5bSBtb2QsIDptZXRhIHs6ZG9jICJNb2R1bHVzIG9mIG51bSBhbmQgZGl2LiBUcnVuY2F0ZXMgdG93YXJkIG5lZ2F0aXZlIGluZmluaXR5LiIsIDphcmdsaXN0cyAoW24gZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1vZFxyXG4gXCJNb2R1bHVzIG9mIG51bSBhbmQgZGl2LiBUcnVuY2F0ZXMgdG93YXJkIG5lZ2F0aXZlIGluZmluaXR5LlwiXHJcbiBbbiBkXVxyXG4gKGpzLW1vZCAoKyAoanMtbW9kIG4gZCkgZCkgZCkpXHJcbiJ9IHs6c3ltIElTZXQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIHNldCBmdW5jdGlvbmFsaXR5IHRvIGEgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1kaXNqb2luKX0gezpzeW0gcG9wLCA6bWV0YSB7OmRvYyAiRm9yIGEgbGlzdCBvciBxdWV1ZSwgcmV0dXJucyBhIG5ldyBsaXN0L3F1ZXVlIHdpdGhvdXQgdGhlIGZpcnN0XG4gIGl0ZW0sIGZvciBhIHZlY3RvciwgcmV0dXJucyBhIG5ldyB2ZWN0b3Igd2l0aG91dCB0aGUgbGFzdCBpdGVtLlxuICBOb3RlIC0gbm90IHRoZSBzYW1lIGFzIG5leHQvYnV0bGFzdC4iLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9wXHJcbiBcIkZvciBhIGxpc3Qgb3IgcXVldWUsIHJldHVybnMgYSBuZXcgbGlzdC9xdWV1ZSB3aXRob3V0IHRoZSBmaXJzdFxcbiAgaXRlbSwgZm9yIGEgdmVjdG9yLCByZXR1cm5zIGEgbmV3IHZlY3RvciB3aXRob3V0IHRoZSBsYXN0IGl0ZW0uXFxuICBOb3RlIC0gbm90IHRoZSBzYW1lIGFzIG5leHQvYnV0bGFzdC5cIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3QgKG5pbD8gY29sbCkgKC1wb3AgY29sbCkpKVxyXG4ifSB7OnN5bSBJUGVuZGluZywgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciB0eXBlcyB3aGljaCBjYW4gaGF2ZSBhIGRlZmVycmVkIHJlYWxpemF0aW9uLiBDdXJyZW50bHkgb25seVxuICBpbXBsZW1lbnRlZCBieSBEZWxheSBhbmQgTGF6eVNlcS4ifSwgOm1ldGhvZHMgKC1yZWFsaXplZD8pfSB7OnN5bSAtZW50cnkta2V5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUga2V5IGZvciBlbnRyeS4iLCA6YXJnbGlzdHMgKFtjb2xsIGVudHJ5XSl9LCA6cHJvdG9jb2wgSVNvcnRlZH0gezpzeW0gQ0hBUl9NQVAsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBDSEFSX01BUFxyXG4gI2pzIHtcIl1cIiBcIl9SQlJBQ0tfXCIsIFwiJ1wiIFwiX1NJTkdMRVFVT1RFX1wiLCBcIj1cIiBcIl9FUV9cIiwgXCJcXFxcXFxcIlwiIFwiX0RPVUJMRVFVT1RFX1wiLCBcIiFcIiBcIl9CQU5HX1wiLCBcIipcIiBcIl9TVEFSX1wiLCBcIiVcIiBcIl9QRVJDRU5UX1wiLCBcInxcIiBcIl9CQVJfXCIsIFwiflwiIFwiX1RJTERFX1wiLCBcIi9cIiBcIl9TTEFTSF9cIiwgXCJcXFxcXFxcXFwiIFwiX0JTTEFTSF9cIiwgXCItXCIgXCJfXCIsIFwiP1wiIFwiX1FNQVJLX1wiLCBcIiZcIiBcIl9BTVBFUlNBTkRfXCIsIFwiOlwiIFwiX0NPTE9OX1wiLCBcIjxcIiBcIl9MVF9cIiwgXCJ7XCIgXCJfTEJSQUNFX1wiLCBcIn1cIiBcIl9SQlJBQ0VfXCIsIFwiW1wiIFwiX0xCUkFDS19cIiwgXCIjXCIgXCJfU0hBUlBfXCIsIFwiXlwiIFwiX0NBUkVUX1wiLCBcIitcIiBcIl9QTFVTX1wiLCBcIkBcIiBcIl9DSVJDQV9cIiwgXCI+XCIgXCJfR1RfXCJ9KVxyXG4ifSB7OnN5bSBkaXNzb2MhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHRyYW5zaWVudCBtYXAgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYSBtYXBwaW5nIGZvciBrZXkocykuIiwgOmFyZ2xpc3RzIFtbdGNvbGwga2V5XSBbdGNvbGwga2V5ICYga3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaXNzb2MhXHJcbiBcIlJldHVybnMgYSB0cmFuc2llbnQgbWFwIHRoYXQgZG9lc24ndCBjb250YWluIGEgbWFwcGluZyBmb3Iga2V5KHMpLlwiXHJcbiAoW3Rjb2xsIGtleV0gKC1kaXNzb2MhIHRjb2xsIGtleSkpXHJcbiAoW3Rjb2xsIGtleSAmIGtzXVxyXG4gIChsZXRcclxuICAgW250Y29sbCAoLWRpc3NvYyEgdGNvbGwga2V5KV1cclxuICAgKGlmIGtzIChyZWN1ciBudGNvbGwgKGZpcnN0IGtzKSAobmV4dCBrcykpIG50Y29sbCkpKSlcclxuIn0gezpzeW0gcmVkdWN0aW9ucywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgaW50ZXJtZWRpYXRlIHZhbHVlcyBvZiB0aGUgcmVkdWN0aW9uIChhc1xuICBwZXIgcmVkdWNlKSBvZiBjb2xsIGJ5IGYsIHN0YXJ0aW5nIHdpdGggaW5pdC4iLCA6YXJnbGlzdHMgW1tmIGNvbGxdIFtmIGluaXQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjdGlvbnNcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxIG9mIHRoZSBpbnRlcm1lZGlhdGUgdmFsdWVzIG9mIHRoZSByZWR1Y3Rpb24gKGFzXFxuICBwZXIgcmVkdWNlKSBvZiBjb2xsIGJ5IGYsIHN0YXJ0aW5nIHdpdGggaW5pdC5cIlxyXG4gKFtmIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgIChpZi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAocmVkdWN0aW9ucyBmIChmaXJzdCBzKSAocmVzdCBzKSlcclxuICAgIChsaXN0IChmKSkpKSlcclxuIChbZiBpbml0IGNvbGxdXHJcbiAgKGlmXHJcbiAgIChyZWR1Y2VkPyBpbml0KVxyXG4gICAobGlzdCBAaW5pdClcclxuICAgKGNvbnNcclxuICAgIGluaXRcclxuICAgIChsYXp5LXNlcVxyXG4gICAgICh3aGVuLWxldFxyXG4gICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgICAocmVkdWN0aW9ucyBmIChmIGluaXQgKGZpcnN0IHMpKSAocmVzdCBzKSkpKSkpKSlcclxuIn0gezpzeW0gZmFzdC1wYXRoLXByb3RvY29sLXBhcnRpdGlvbnMtY291bnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBmYXN0LXBhdGgtcHJvdG9jb2wtcGFydGl0aW9ucy1jb3VudFxyXG4gXCJ0b3RhbCBudW1iZXIgb2YgcGFydGl0aW9uc1wiXHJcbiAoY29yZS9sZXRcclxuICBbYyAoY291bnQgZmFzdC1wYXRoLXByb3RvY29scykgbSAoY29yZS9tb2QgYyAzMildXHJcbiAgKGlmIChjb3JlL3plcm8/IG0pIChjb3JlL3F1b3QgYyAzMikgKGNvcmUvaW5jIChjb3JlL3F1b3QgYyAzMikpKSkpXHJcbiJ9IHs6c3ltIGluZGV4ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBudGggaW4gY29uc3RhbnQgdGltZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIG50aCBpbiBjb25zdGFudCB0aW1lXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUluZGV4ZWQgeCkpXHJcbiJ9IHs6c3ltIC0sIDptZXRhIHs6ZG9jICJJZiBubyB5cyBhcmUgc3VwcGxpZWQsIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIHgsIGVsc2Ugc3VidHJhY3RzXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIC1cclxuIFwiSWYgbm8geXMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiB4LCBlbHNlIHN1YnRyYWN0c1xcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LlwiXHJcbiAoW3hdIChjbGpzLmNvcmUvLSB4KSlcclxuIChbeCB5XSAoY2xqcy5jb3JlLy0geCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSAtIChjbGpzLmNvcmUvLSB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gLWVxdWl2LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG8gYW5kIG90aGVyIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW28gb3RoZXJdKX0sIDpwcm90b2NvbCBJRXF1aXZ9IHs6c3ltIGFzc29jISwgOm1ldGEgezpkb2MgIldoZW4gYXBwbGllZCB0byBhIHRyYW5zaWVudCBtYXAsIGFkZHMgbWFwcGluZyBvZiBrZXkocykgdG9cbiAgdmFsKHMpLiBXaGVuIGFwcGxpZWQgdG8gYSB0cmFuc2llbnQgdmVjdG9yLCBzZXRzIHRoZSB2YWwgYXQgaW5kZXguXG4gIE5vdGUgLSBpbmRleCBtdXN0IGJlIDw9IChjb3VudCB2ZWN0b3IpLiBSZXR1cm5zIGNvbGwuIiwgOmFyZ2xpc3RzIFtbdGNvbGwga2V5IHZhbF0gW3Rjb2xsIGtleSB2YWwgJiBrdnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3NvYyFcclxuIFwiV2hlbiBhcHBsaWVkIHRvIGEgdHJhbnNpZW50IG1hcCwgYWRkcyBtYXBwaW5nIG9mIGtleShzKSB0b1xcbiAgdmFsKHMpLiBXaGVuIGFwcGxpZWQgdG8gYSB0cmFuc2llbnQgdmVjdG9yLCBzZXRzIHRoZSB2YWwgYXQgaW5kZXguXFxuICBOb3RlIC0gaW5kZXggbXVzdCBiZSA8PSAoY291bnQgdmVjdG9yKS4gUmV0dXJucyBjb2xsLlwiXHJcbiAoW3Rjb2xsIGtleSB2YWxdICgtYXNzb2MhIHRjb2xsIGtleSB2YWwpKVxyXG4gKFt0Y29sbCBrZXkgdmFsICYga3ZzXVxyXG4gIChsZXRcclxuICAgW250Y29sbCAoLWFzc29jISB0Y29sbCBrZXkgdmFsKV1cclxuICAgKGlmXHJcbiAgICBrdnNcclxuICAgIChyZWN1ciBudGNvbGwgKGZpcnN0IGt2cykgKHNlY29uZCBrdnMpIChubmV4dCBrdnMpKVxyXG4gICAgbnRjb2xsKSkpKVxyXG4ifSB7OnN5bSBoYXNoLXNldCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgaGFzaCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLiAgQW55IGVxdWFsIGtleXMgYXJlXG4gIGhhbmRsZWQgYXMgaWYgYnkgcmVwZWF0ZWQgdXNlcyBvZiBjb25qLiIsIDphcmdsaXN0cyBbW10gWyYga2V5c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhc2gtc2V0XHJcbiBcIlJldHVybnMgYSBuZXcgaGFzaCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLiAgQW55IGVxdWFsIGtleXMgYXJlXFxuICBoYW5kbGVkIGFzIGlmIGJ5IHJlcGVhdGVkIHVzZXMgb2YgY29uai5cIlxyXG4gKFtdICN7fSlcclxuIChbJiBrZXlzXSAoc2V0IGtleXMpKSlcclxuIn0gezpzeW0gcmVkdWNlLWt2LCA6bWV0YSB7OmRvYyAiUmVkdWNlcyBhbiBhc3NvY2lhdGl2ZSBjb2xsZWN0aW9uLiBmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDNcbiAgYXJndW1lbnRzLiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byBpbml0LCB0aGUgZmlyc3Qga2V5XG4gIGFuZCB0aGUgZmlyc3QgdmFsdWUgaW4gY29sbCwgdGhlbiBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGVcbiAgMm5kIGtleSBhbmQgdmFsdWUsIGV0Yy4gSWYgY29sbCBjb250YWlucyBubyBlbnRyaWVzLCByZXR1cm5zIGluaXRcbiAgYW5kIGYgaXMgbm90IGNhbGxlZC4gTm90ZSB0aGF0IHJlZHVjZS1rdiBpcyBzdXBwb3J0ZWQgb24gdmVjdG9ycyxcbiAgd2hlcmUgdGhlIGtleXMgd2lsbCBiZSB0aGUgb3JkaW5hbHMuIiwgOmFyZ2xpc3RzIFtbZiBpbml0IGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2Uta3ZcclxuIFwiUmVkdWNlcyBhbiBhc3NvY2lhdGl2ZSBjb2xsZWN0aW9uLiBmIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIDNcXG4gIGFyZ3VtZW50cy4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gaW5pdCwgdGhlIGZpcnN0IGtleVxcbiAgYW5kIHRoZSBmaXJzdCB2YWx1ZSBpbiBjb2xsLCB0aGVuIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZVxcbiAgMm5kIGtleSBhbmQgdmFsdWUsIGV0Yy4gSWYgY29sbCBjb250YWlucyBubyBlbnRyaWVzLCByZXR1cm5zIGluaXRcXG4gIGFuZCBmIGlzIG5vdCBjYWxsZWQuIE5vdGUgdGhhdCByZWR1Y2Uta3YgaXMgc3VwcG9ydGVkIG9uIHZlY3RvcnMsXFxuICB3aGVyZSB0aGUga2V5cyB3aWxsIGJlIHRoZSBvcmRpbmFscy5cIlxyXG4gKFtmIGluaXQgY29sbF0gKGlmLW5vdCAobmlsPyBjb2xsKSAoLWt2LXJlZHVjZSBjb2xsIGYgaW5pdCkgaW5pdCkpKVxyXG4ifSB7OnN5bSByZXNldCEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIG5ld3ZhbCB3aXRob3V0IHJlZ2FyZCBmb3IgdGhlXG4gIGN1cnJlbnQgdmFsdWUuIFJldHVybnMgbmV3LXZhbHVlLiIsIDphcmdsaXN0cyAoW2EgbmV3LXZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzZXQhXHJcbiBcIlNldHMgdGhlIHZhbHVlIG9mIGF0b20gdG8gbmV3dmFsIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVcXG4gIGN1cnJlbnQgdmFsdWUuIFJldHVybnMgbmV3LXZhbHVlLlwiXHJcbiBbYSBuZXctdmFsdWVdXHJcbiAoaWZcclxuICAoaW5zdGFuY2U/IEF0b20gYSlcclxuICAobGV0XHJcbiAgIFt2YWxpZGF0ZSAoLi12YWxpZGF0b3IgYSldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKG5pbD8gdmFsaWRhdGUpXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAodmFsaWRhdGUgbmV3LXZhbHVlKVxyXG4gICAgICh0aHJvdyAoanMvRXJyb3IuIFwiVmFsaWRhdG9yIHJlamVjdGVkIHJlZmVyZW5jZSBzdGF0ZVwiKSkpKVxyXG4gICAobGV0XHJcbiAgICBbb2xkLXZhbHVlICguLXN0YXRlIGEpXVxyXG4gICAgKHNldCEgKC4tc3RhdGUgYSkgbmV3LXZhbHVlKVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKG5pbD8gKC4td2F0Y2hlcyBhKSlcclxuICAgICAoLW5vdGlmeS13YXRjaGVzIGEgb2xkLXZhbHVlIG5ldy12YWx1ZSkpXHJcbiAgICBuZXctdmFsdWUpKVxyXG4gICgtcmVzZXQhIGEgbmV3LXZhbHVlKSkpXHJcbiJ9IHs6c3ltIG5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuYW1lIFN0cmluZyBvZiBhIHN0cmluZywgc3ltYm9sIG9yIGtleXdvcmQuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hbWVcclxuIFwiUmV0dXJucyB0aGUgbmFtZSBTdHJpbmcgb2YgYSBzdHJpbmcsIHN5bWJvbCBvciBrZXl3b3JkLlwiXHJcbiBbeF1cclxuIChpZlxyXG4gIChpbXBsZW1lbnRzPyBJTmFtZWQgeClcclxuICAoLW5hbWUgeClcclxuICAoaWZcclxuICAgKHN0cmluZz8geClcclxuICAgeFxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiRG9lc24ndCBzdXBwb3J0IG5hbWU6IFwiIHgpKSkpKSlcclxuIn0gezpzeW0gRm4sIDptZXRhIHs6ZG9jICJNYXJrZXIgcHJvdG9jb2wifSwgOm1ldGhvZHMgKCl9IHs6c3ltIGZmaXJzdCwgOm1ldGEgezpkb2MgIlNhbWUgYXMgKGZpcnN0IChmaXJzdCB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBmZmlyc3QgXCJTYW1lIGFzIChmaXJzdCAoZmlyc3QgeCkpXCIgW2NvbGxdIChmaXJzdCAoZmlyc3QgY29sbCkpKVxyXG4ifSB7OnN5bSBzb3J0ZWQtc2V0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBzb3J0ZWQgc2V0IHdpdGggc3VwcGxpZWQga2V5cy4iLCA6YXJnbGlzdHMgW1smIGtleXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3J0ZWQtc2V0XHJcbiBcIlJldHVybnMgYSBuZXcgc29ydGVkIHNldCB3aXRoIHN1cHBsaWVkIGtleXMuXCJcclxuIChbJiBrZXlzXSAocmVkdWNlIC1jb25qICguLUVNUFRZIFBlcnNpc3RlbnRUcmVlU2V0KSBrZXlzKSkpXHJcbiJ9IHs6c3ltIGNvdW50ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgaW1wbGVtZW50cyBjb3VudCBpbiBjb25zdGFudCB0aW1lIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvdW50ZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBjb2xsIGltcGxlbWVudHMgY291bnQgaW4gY29uc3RhbnQgdGltZVwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElDb3VudGVkIHgpKVxyXG4ifSB7OnN5bSB0YWdnZWQtbGl0ZXJhbCwgOm1ldGEgezpkb2MgIkNvbnN0cnVjdCBhIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSB0YWdnZWQgbGl0ZXJhbCBmcm9tIGFcbiAgdGFnIHN5bWJvbCBhbmQgYSBmb3JtLiIsIDphcmdsaXN0cyAoW3RhZyBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFnZ2VkLWxpdGVyYWxcclxuIFwiQ29uc3RydWN0IGEgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHRhZ2dlZCBsaXRlcmFsIGZyb20gYVxcbiAgdGFnIHN5bWJvbCBhbmQgYSBmb3JtLlwiXHJcbiBbdGFnIGZvcm1dXHJcbiB7OnByZSBbKHN5bWJvbD8gdGFnKV19XHJcbiAoVGFnZ2VkTGl0ZXJhbC4gdGFnIGZvcm0pKVxyXG4ifSB7OnN5bSBwcmludGxuLCA6bWV0YSB7OmRvYyAiU2FtZSBhcyBwcmludCBmb2xsb3dlZCBieSAobmV3bGluZSkiLCA6YXJnbGlzdHMgKFsmIG9ianNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmludGxuXHJcbiBcIlNhbWUgYXMgcHJpbnQgZm9sbG93ZWQgYnkgKG5ld2xpbmUpXCJcclxuIFsmIG9ianNdXHJcbiAocHItd2l0aC1vcHRzIG9ianMgKGFzc29jIChwci1vcHRzKSA6cmVhZGFibHkgZmFsc2UpKVxyXG4gKHdoZW4gKnByaW50LW5ld2xpbmUqIChuZXdsaW5lIChwci1vcHRzKSkpKVxyXG4ifSB7OnN5bSBhc3NvYy1pbiwgOm1ldGEgezpkb2MgIkFzc29jaWF0ZXMgYSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGtzIGlzIGFcbiAgc2VxdWVuY2Ugb2Yga2V5cyBhbmQgdiBpcyB0aGUgbmV3IHZhbHVlIGFuZCByZXR1cm5zIGEgbmV3IG5lc3RlZCBzdHJ1Y3R1cmUuXG4gIElmIGFueSBsZXZlbHMgZG8gbm90IGV4aXN0LCBoYXNoLW1hcHMgd2lsbCBiZSBjcmVhdGVkLiIsIDphcmdsaXN0cyAoW20gW2sgJiBrc10gdl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzc29jLWluXHJcbiBcIkFzc29jaWF0ZXMgYSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGtzIGlzIGFcXG4gIHNlcXVlbmNlIG9mIGtleXMgYW5kIHYgaXMgdGhlIG5ldyB2YWx1ZSBhbmQgcmV0dXJucyBhIG5ldyBuZXN0ZWQgc3RydWN0dXJlLlxcbiAgSWYgYW55IGxldmVscyBkbyBub3QgZXhpc3QsIGhhc2gtbWFwcyB3aWxsIGJlIGNyZWF0ZWQuXCJcclxuIFttIFtrICYga3NdIHZdXHJcbiAoaWYga3MgKGFzc29jIG0gayAoYXNzb2MtaW4gKGdldCBtIGspIGtzIHYpKSAoYXNzb2MgbSBrIHYpKSlcclxuIn0gezpzeW0gYml0LXRlc3QsIDptZXRhIHs6ZG9jICJUZXN0IGJpdCBhdCBpbmRleCBuIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmbiBiaXQtdGVzdCBcIlRlc3QgYml0IGF0IGluZGV4IG5cIiBbeCBuXSAoY2xqcy5jb3JlL2JpdC10ZXN0IHggbikpXHJcbiJ9IHs6c3ltIElTd2FwLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBzd2FwcGluZyBmdW5jdGlvbmFsaXR5LiJ9LCA6bWV0aG9kcyAoLXN3YXAhKX0gezpzeW0gbWVtb2l6ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGEgcmVmZXJlbnRpYWxseSB0cmFuc3BhcmVudCBmdW5jdGlvbi4gVGhlXG4gIG1lbW9pemVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGtlZXBzIGEgY2FjaGUgb2YgdGhlIG1hcHBpbmcgZnJvbSBhcmd1bWVudHNcbiAgdG8gcmVzdWx0cyBhbmQsIHdoZW4gY2FsbHMgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgYXJlIHJlcGVhdGVkIG9mdGVuLCBoYXNcbiAgaGlnaGVyIHBlcmZvcm1hbmNlIGF0IHRoZSBleHBlbnNlIG9mIGhpZ2hlciBtZW1vcnkgdXNlLiIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZW1vaXplXHJcbiBcIlJldHVybnMgYSBtZW1vaXplZCB2ZXJzaW9uIG9mIGEgcmVmZXJlbnRpYWxseSB0cmFuc3BhcmVudCBmdW5jdGlvbi4gVGhlXFxuICBtZW1vaXplZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBrZWVwcyBhIGNhY2hlIG9mIHRoZSBtYXBwaW5nIGZyb20gYXJndW1lbnRzXFxuICB0byByZXN1bHRzIGFuZCwgd2hlbiBjYWxscyB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhcmUgcmVwZWF0ZWQgb2Z0ZW4sIGhhc1xcbiAgaGlnaGVyIHBlcmZvcm1hbmNlIGF0IHRoZSBleHBlbnNlIG9mIGhpZ2hlciBtZW1vcnkgdXNlLlwiXHJcbiBbZl1cclxuIChsZXRcclxuICBbbWVtIChhdG9tIHt9KV1cclxuICAoZm5cclxuICAgWyYgYXJnc11cclxuICAgKGxldFxyXG4gICAgW3YgKGdldCBAbWVtIGFyZ3MgbG9va3VwLXNlbnRpbmVsKV1cclxuICAgIChpZlxyXG4gICAgIChpZGVudGljYWw/IHYgbG9va3VwLXNlbnRpbmVsKVxyXG4gICAgIChsZXQgW3JldCAoYXBwbHkgZiBhcmdzKV0gKHN3YXAhIG1lbSBhc3NvYyBhcmdzIHJldCkgcmV0KVxyXG4gICAgIHYpKSkpKVxyXG4ifSB7OnN5bSBhbHRlci1tZXRhISwgOm1ldGEgezpkb2MgIkF0b21pY2FsbHkgc2V0cyB0aGUgbWV0YWRhdGEgZm9yIGEgbmFtZXNwYWNlL3Zhci9yZWYvYWdlbnQvYXRvbSB0byBiZTpcblxuICAoYXBwbHkgZiBpdHMtY3VycmVudC1tZXRhIGFyZ3MpXG5cbiAgZiBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzIiwgOmFyZ2xpc3RzIChbaXJlZiBmICYgYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFsdGVyLW1ldGEhXHJcbiBcIkF0b21pY2FsbHkgc2V0cyB0aGUgbWV0YWRhdGEgZm9yIGEgbmFtZXNwYWNlL3Zhci9yZWYvYWdlbnQvYXRvbSB0byBiZTpcXG5cXG4gIChhcHBseSBmIGl0cy1jdXJyZW50LW1ldGEgYXJncylcXG5cXG4gIGYgbXVzdCBiZSBmcmVlIG9mIHNpZGUtZWZmZWN0c1wiXHJcbiBbaXJlZiBmICYgYXJnc11cclxuIChzZXQhICguLW1ldGEgaXJlZikgKGFwcGx5IGYgKC4tbWV0YSBpcmVmKSBhcmdzKSkpXHJcbiJ9IHs6c3ltIHplcm8/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG51bSBpcyB6ZXJvLCBlbHNlIGZhbHNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHplcm8/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBudW0gaXMgemVybywgZWxzZSBmYWxzZVwiXHJcbiBbeF1cclxuIChjbGpzLmNvcmUvemVybz8geCkpXHJcbiJ9IHs6c3ltIHNpbXBsZS1rZXl3b3JkPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggaXMgYSBrZXl3b3JkIHdpdGhvdXQgYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc2ltcGxlLWtleXdvcmQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBrZXl3b3JkIHdpdGhvdXQgYSBuYW1lc3BhY2VcIlxyXG4gW3hdXHJcbiAoYW5kIChrZXl3b3JkPyB4KSAobmlsPyAobmFtZXNwYWNlIHgpKSkpXHJcbiJ9IHs6c3ltICptYWluLWNsaS1mbiosIDptZXRhIHs6ZG9jICJXaGVuIGNvbXBpbGVkIGZvciBhIGNvbW1hbmQtbGluZSB0YXJnZXQsIHdoYXRldmVyIGZ1bmN0aW9uXG4gICptYWluLWNsaS1mbiogaXMgc2V0IHRvIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGNvbW1hbmQtbGluZVxuICBhcmd2IGFzIGFyZ3VtZW50cyJ9LCA6c291cmNlICIoZGVmICptYWluLWNsaS1mbiogbmlsKVxyXG4ifSB7OnN5bSAtYXNzb2MtbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgdmVjdG9yIHdpdGggdmFsdWUgdmFsIGFkZGVkIGF0IHBvc2l0aW9uIG4uIiwgOmFyZ2xpc3RzIChbY29sbCBuIHZhbF0pfSwgOnByb3RvY29sIElWZWN0b3J9IHs6c3ltIHVuY2hlY2tlZC1kZWMtaW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIHgsIGFuIGludC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLWRlYy1pbnRcclxuIFwiUmV0dXJucyBhIG51bWJlciBvbmUgbGVzcyB0aGFuIHgsIGFuIGludC5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3VuY2hlY2tlZC1kZWMtaW50IHgpKVxyXG4ifSB7OnN5bSBwZXJzaXN0ZW50ISwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcsIHBlcnNpc3RlbnQgdmVyc2lvbiBvZiB0aGUgdHJhbnNpZW50IGNvbGxlY3Rpb24sIGluXG4gIGNvbnN0YW50IHRpbWUuIFRoZSB0cmFuc2llbnQgY29sbGVjdGlvbiBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzXG4gIGNhbGwsIGFueSBzdWNoIHVzZSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4iLCA6YXJnbGlzdHMgKFt0Y29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBlcnNpc3RlbnQhXHJcbiBcIlJldHVybnMgYSBuZXcsIHBlcnNpc3RlbnQgdmVyc2lvbiBvZiB0aGUgdHJhbnNpZW50IGNvbGxlY3Rpb24sIGluXFxuICBjb25zdGFudCB0aW1lLiBUaGUgdHJhbnNpZW50IGNvbGxlY3Rpb24gY2Fubm90IGJlIHVzZWQgYWZ0ZXIgdGhpc1xcbiAgY2FsbCwgYW55IHN1Y2ggdXNlIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLlwiXHJcbiBbdGNvbGxdXHJcbiAoLXBlcnNpc3RlbnQhIHRjb2xsKSlcclxuIn0gezpzeW0gc2V0LXByaW50LWZuISwgOm1ldGEgezpkb2MgIlNldCAqcHJpbnQtZm4qIHRvIGYuIiwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm4gc2V0LXByaW50LWZuISBcIlNldCAqcHJpbnQtZm4qIHRvIGYuXCIgW2ZdIChzZXQhICpwcmludC1mbiogZikpXHJcbiJ9IHs6c3ltIG5uZXh0LCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAobmV4dCAobmV4dCB4KSkiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBubmV4dCBcIlNhbWUgYXMgKG5leHQgKG5leHQgeCkpXCIgW2NvbGxdIChuZXh0IChuZXh0IGNvbGwpKSlcclxuIn0gezpzeW0gYWRkLXdhdGNoLCA6bWV0YSB7OmRvYyAiQWRkcyBhIHdhdGNoIGZ1bmN0aW9uIHRvIGFuIGF0b20gcmVmZXJlbmNlLiBUaGUgd2F0Y2ggZm4gbXVzdCBiZSBhXG4gIGZuIG9mIDQgYXJnczogYSBrZXksIHRoZSByZWZlcmVuY2UsIGl0cyBvbGQtc3RhdGUsIGl0c1xuICBuZXctc3RhdGUuIFdoZW5ldmVyIHRoZSByZWZlcmVuY2UncyBzdGF0ZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCxcbiAgYW55IHJlZ2lzdGVyZWQgd2F0Y2hlcyB3aWxsIGhhdmUgdGhlaXIgZnVuY3Rpb25zIGNhbGxlZC4gVGhlIHdhdGNoXG4gIGZuIHdpbGwgYmUgY2FsbGVkIHN5bmNocm9ub3VzbHkuIE5vdGUgdGhhdCBhbiBhdG9tJ3Mgc3RhdGVcbiAgbWF5IGhhdmUgY2hhbmdlZCBhZ2FpbiBwcmlvciB0byB0aGUgZm4gY2FsbCwgc28gdXNlIG9sZC9uZXctc3RhdGVcbiAgcmF0aGVyIHRoYW4gZGVyZWZpbmcgdGhlIHJlZmVyZW5jZS4gS2V5cyBtdXN0IGJlIHVuaXF1ZSBwZXJcbiAgcmVmZXJlbmNlLCBhbmQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSB3YXRjaCB3aXRoIHJlbW92ZS13YXRjaCxcbiAgYnV0IGFyZSBvdGhlcndpc2UgY29uc2lkZXJlZCBvcGFxdWUgYnkgdGhlIHdhdGNoIG1lY2hhbmlzbS4gIEJlYXIgaW5cbiAgbWluZCB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3VsdCBvciBhY3Rpb24gb2YgdGhlIHdhdGNoIGZucyB0aGVcbiAgYXRvbSdzIHZhbHVlIHdpbGwgY2hhbmdlLiAgRXhhbXBsZTpcblxuICAgICAgKGRlZiBhIChhdG9tIDApKVxuICAgICAgKGFkZC13YXRjaCBhIDppbmMgKGZuIFtrIHIgbyBuXSAoYXNzZXJ0ICg9PSAwIG4pKSkpXG4gICAgICAoc3dhcCEgYSBpbmMpXG4gICAgICA7OyBBc3NlcnRpb24gRXJyb3JcbiAgICAgIChkZXJlZiBhKVxuICAgICAgOz0+IDEiLCA6YXJnbGlzdHMgKFtpcmVmIGtleSBmXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXdhdGNoXHJcbiBcIkFkZHMgYSB3YXRjaCBmdW5jdGlvbiB0byBhbiBhdG9tIHJlZmVyZW5jZS4gVGhlIHdhdGNoIGZuIG11c3QgYmUgYVxcbiAgZm4gb2YgNCBhcmdzOiBhIGtleSwgdGhlIHJlZmVyZW5jZSwgaXRzIG9sZC1zdGF0ZSwgaXRzXFxuICBuZXctc3RhdGUuIFdoZW5ldmVyIHRoZSByZWZlcmVuY2UncyBzdGF0ZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCxcXG4gIGFueSByZWdpc3RlcmVkIHdhdGNoZXMgd2lsbCBoYXZlIHRoZWlyIGZ1bmN0aW9ucyBjYWxsZWQuIFRoZSB3YXRjaFxcbiAgZm4gd2lsbCBiZSBjYWxsZWQgc3luY2hyb25vdXNseS4gTm90ZSB0aGF0IGFuIGF0b20ncyBzdGF0ZVxcbiAgbWF5IGhhdmUgY2hhbmdlZCBhZ2FpbiBwcmlvciB0byB0aGUgZm4gY2FsbCwgc28gdXNlIG9sZC9uZXctc3RhdGVcXG4gIHJhdGhlciB0aGFuIGRlcmVmaW5nIHRoZSByZWZlcmVuY2UuIEtleXMgbXVzdCBiZSB1bmlxdWUgcGVyXFxuICByZWZlcmVuY2UsIGFuZCBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlIHdhdGNoIHdpdGggcmVtb3ZlLXdhdGNoLFxcbiAgYnV0IGFyZSBvdGhlcndpc2UgY29uc2lkZXJlZCBvcGFxdWUgYnkgdGhlIHdhdGNoIG1lY2hhbmlzbS4gIEJlYXIgaW5cXG4gIG1pbmQgdGhhdCByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHQgb3IgYWN0aW9uIG9mIHRoZSB3YXRjaCBmbnMgdGhlXFxuICBhdG9tJ3MgdmFsdWUgd2lsbCBjaGFuZ2UuICBFeGFtcGxlOlxcblxcbiAgICAgIChkZWYgYSAoYXRvbSAwKSlcXG4gICAgICAoYWRkLXdhdGNoIGEgOmluYyAoZm4gW2sgciBvIG5dIChhc3NlcnQgKD09IDAgbikpKSlcXG4gICAgICAoc3dhcCEgYSBpbmMpXFxuICAgICAgOzsgQXNzZXJ0aW9uIEVycm9yXFxuICAgICAgKGRlcmVmIGEpXFxuICAgICAgOz0+IDFcIlxyXG4gW2lyZWYga2V5IGZdXHJcbiAoLWFkZC13YXRjaCBpcmVmIGtleSBmKVxyXG4gaXJlZilcclxuIn0gezpzeW0gbm90LWV2ZXJ5PywgOm1ldGEgezpkb2MgIlJldHVybnMgZmFsc2UgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBldmVyeSB4IGluXG4gIGNvbGwsIGVsc2UgdHJ1ZS4iLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3QtZXZlcnk/XHJcbiBcIlJldHVybnMgZmFsc2UgaWYgKHByZWQgeCkgaXMgbG9naWNhbCB0cnVlIGZvciBldmVyeSB4IGluXFxuICBjb2xsLCBlbHNlIHRydWUuXCJcclxuIFtwcmVkIGNvbGxdXHJcbiAobm90IChldmVyeT8gcHJlZCBjb2xsKSkpXHJcbiJ9IHs6c3ltIHJlbSwgOm1ldGEgezpkb2MgInJlbWFpbmRlciBvZiBkaXZpZGluZyBudW1lcmF0b3IgYnkgZGVub21pbmF0b3IuIiwgOmFyZ2xpc3RzIChbbiBkXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtXHJcbiBcInJlbWFpbmRlciBvZiBkaXZpZGluZyBudW1lcmF0b3IgYnkgZGVub21pbmF0b3IuXCJcclxuIFtuIGRdXHJcbiAobGV0IFtxIChxdW90IG4gZCldICgtIG4gKCogZCBxKSkpKVxyXG4ifSB7OnN5bSBpZmluZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIElGaW5kIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlmaW5kP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBpbXBsZW1lbnRzIElGaW5kXCJcclxuIFt4XVxyXG4gKHNhdGlzZmllcz8gSUZpbmQgeCkpXHJcbiJ9IHs6c3ltIHNvbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBmaXJzdCBsb2dpY2FsIHRydWUgdmFsdWUgb2YgKHByZWQgeCkgZm9yIGFueSB4IGluIGNvbGwsXG4gIGVsc2UgbmlsLiAgT25lIGNvbW1vbiBpZGlvbSBpcyB0byB1c2UgYSBzZXQgYXMgcHJlZCwgZm9yIGV4YW1wbGVcbiAgdGhpcyB3aWxsIHJldHVybiA6ZnJlZCBpZiA6ZnJlZCBpcyBpbiB0aGUgc2VxdWVuY2UsIG90aGVyd2lzZSBuaWw6XG4gIChzb21lICN7OmZyZWR9IGNvbGwpIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc29tZVxyXG4gXCJSZXR1cm5zIHRoZSBmaXJzdCBsb2dpY2FsIHRydWUgdmFsdWUgb2YgKHByZWQgeCkgZm9yIGFueSB4IGluIGNvbGwsXFxuICBlbHNlIG5pbC4gIE9uZSBjb21tb24gaWRpb20gaXMgdG8gdXNlIGEgc2V0IGFzIHByZWQsIGZvciBleGFtcGxlXFxuICB0aGlzIHdpbGwgcmV0dXJuIDpmcmVkIGlmIDpmcmVkIGlzIGluIHRoZSBzZXF1ZW5jZSwgb3RoZXJ3aXNlIG5pbDpcXG4gIChzb21lICN7OmZyZWR9IGNvbGwpXCJcclxuIFtwcmVkIGNvbGxdXHJcbiAod2hlbi1sZXQgW3MgKHNlcSBjb2xsKV0gKG9yIChwcmVkIChmaXJzdCBzKSkgKHJlY3VyIHByZWQgKG5leHQgcykpKSkpXHJcbiJ9IHs6c3ltIElOYW1lZCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgYSBuYW1lLiJ9LCA6bWV0aG9kcyAoLW5hbWUgLW5hbWVzcGFjZSl9IHs6c3ltIElSZWR1Y2UsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3Igc2VxIHR5cGVzIHRoYXQgY2FuIHJlZHVjZSB0aGVtc2VsdmVzLlxuICBDYWxsZWQgYnkgY2xqcy5jb3JlL3JlZHVjZS4ifSwgOm1ldGhvZHMgKC1yZWR1Y2UpfSB7OnN5bSBuZWctaW50PywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIG5lZ2F0aXZlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuZWctaW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBuZWdhdGl2ZS5cIlxyXG4gW3hdXHJcbiAoY29uZFxyXG4gIChpbnRlZ2VyPyB4KVxyXG4gIChuZWc/IHgpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguSW50ZWdlciB4KVxyXG4gICguaXNOZWdhdGl2ZSB4KVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkxvbmcgeClcclxuICAoLmlzTmVnYXRpdmUgeClcclxuICA6ZWxzZVxyXG4gIGZhbHNlKSlcclxuIn0gezpzeW0gZHJvcCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGFsbCBidXQgdGhlIGZpcnN0IG4gaXRlbXMgaW4gY29sbC5cbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW25dIFtuIGNvbGxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkcm9wXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGFsbCBidXQgdGhlIGZpcnN0IG4gaXRlbXMgaW4gY29sbC5cXG4gIFJldHVybnMgYSBzdGF0ZWZ1bCB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtuXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW25hICh2b2xhdGlsZSEgbildXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChsZXRcclxuICAgICAgIFtuIEBuYV1cclxuICAgICAgICh2c3dhcCEgbmEgZGVjKVxyXG4gICAgICAgKGlmIChwb3M/IG4pIHJlc3VsdCAocmYgcmVzdWx0IGlucHV0KSkpKSkpKSlcclxuIChbbiBjb2xsXVxyXG4gIHs6cHJlIFsobnVtYmVyPyBuKV19XHJcbiAgKGxldFxyXG4gICBbc3RlcFxyXG4gICAgKGZuXHJcbiAgICAgW24gY29sbF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAgIChpZiAoYW5kIChwb3M/IG4pIHMpIChyZWN1ciAoZGVjIG4pIChyZXN0IHMpKSBzKSkpXVxyXG4gICAobGF6eS1zZXEgKHN0ZXAgbiBjb2xsKSkpKSlcclxuIn0gezpzeW0ganMtb2JqLCA6bWV0YSB7OmRvYyAiQ3JlYXRlIEphdmFTcmlwdCBvYmplY3QgZnJvbSBhbiBldmVuIG51bWJlciBhcmd1bWVudHMgcmVwcmVzZW50aW5nXG4gIGludGVybGVhdmVkIGtleXMgYW5kIHZhbHVlcy4iLCA6YXJnbGlzdHMgW1tdIFsmIGtleXZhbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1vYmpcclxuIFwiQ3JlYXRlIEphdmFTcmlwdCBvYmplY3QgZnJvbSBhbiBldmVuIG51bWJlciBhcmd1bWVudHMgcmVwcmVzZW50aW5nXFxuICBpbnRlcmxlYXZlZCBrZXlzIGFuZCB2YWx1ZXMuXCJcclxuIChbXSAoY2xqcy5jb3JlL2pzLW9iaikpXHJcbiAoWyYga2V5dmFsc10gKGFwcGx5IGdvYmplY3QvY3JlYXRlIGtleXZhbHMpKSlcclxuIn0gezpzeW0gSVRyYW5zaWVudENvbGxlY3Rpb24sIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWRkaW5nIGJhc2ljIGZ1bmN0aW9uYWxpdHkgdG8gdHJhbnNpZW50IGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWNvbmohIC1wZXJzaXN0ZW50ISl9IHs6c3ltIG50aCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC4gZ2V0IHJldHVybnMgbmlsIGlmIGluZGV4IG91dCBvZlxuICBib3VuZHMsIG50aCB0aHJvd3MgYW4gZXhjZXB0aW9uIHVubGVzcyBub3QtZm91bmQgaXMgc3VwcGxpZWQuICBudGhcbiAgYWxzbyB3b3JrcyBmb3Igc3RyaW5ncywgYXJyYXlzLCByZWdleCBNYXRjaGVycyBhbmQgTGlzdHMsIGFuZCxcbiAgaW4gTyhuKSB0aW1lLCBmb3Igc2VxdWVuY2VzLiIsIDphcmdsaXN0cyBbW2NvbGwgbl0gW2NvbGwgbiBub3QtZm91bmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudGhcclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4LiBnZXQgcmV0dXJucyBuaWwgaWYgaW5kZXggb3V0IG9mXFxuICBib3VuZHMsIG50aCB0aHJvd3MgYW4gZXhjZXB0aW9uIHVubGVzcyBub3QtZm91bmQgaXMgc3VwcGxpZWQuICBudGhcXG4gIGFsc28gd29ya3MgZm9yIHN0cmluZ3MsIGFycmF5cywgcmVnZXggTWF0Y2hlcnMgYW5kIExpc3RzLCBhbmQsXFxuICBpbiBPKG4pIHRpbWUsIGZvciBzZXF1ZW5jZXMuXCJcclxuIChbY29sbCBuXVxyXG4gIChjb25kXHJcbiAgIChub3QgKG51bWJlcj8gbikpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIFwiSW5kZXggYXJndW1lbnQgdG8gbnRoIG11c3QgYmUgYSBudW1iZXJcIikpXHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIGNvbGxcclxuICAgKGltcGxlbWVudHM/IElJbmRleGVkIGNvbGwpXHJcbiAgICgtbnRoIGNvbGwgbilcclxuICAgKGFycmF5PyBjb2xsKVxyXG4gICAoaWZcclxuICAgIChhbmQgKDwgLTEgbiAoLi1sZW5ndGggY29sbCkpKVxyXG4gICAgKGFnZXQgY29sbCAoaW50IG4pKVxyXG4gICAgKHRocm93IChqcy9FcnJvci4gXCJJbmRleCBvdXQgb2YgYm91bmRzXCIpKSlcclxuICAgKHN0cmluZz8gY29sbClcclxuICAgKGlmXHJcbiAgICAoYW5kICg8IC0xIG4gKC4tbGVuZ3RoIGNvbGwpKSlcclxuICAgICguY2hhckF0IGNvbGwgKGludCBuKSlcclxuICAgICh0aHJvdyAoanMvRXJyb3IuIFwiSW5kZXggb3V0IG9mIGJvdW5kc1wiKSkpXHJcbiAgIChvciAoaW1wbGVtZW50cz8gSVNlcSBjb2xsKSAoaW1wbGVtZW50cz8gSVNlcXVlbnRpYWwgY29sbCkpXHJcbiAgIChpZlxyXG4gICAgKG5lZz8gbilcclxuICAgICh0aHJvdyAoanMvRXJyb3IuIFwiSW5kZXggb3V0IG9mIGJvdW5kc1wiKSlcclxuICAgIChsaW5lYXItdHJhdmVyc2FsLW50aCBjb2xsIG4pKVxyXG4gICAobmF0aXZlLXNhdGlzZmllcz8gSUluZGV4ZWQgY29sbClcclxuICAgKC1udGggY29sbCBuKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3dcclxuICAgIChqcy9FcnJvci5cclxuICAgICAoc3RyXHJcbiAgICAgIFwibnRoIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0eXBlIFwiXHJcbiAgICAgICh0eXBlLT5zdHIgKHR5cGUgY29sbCkpKSkpKSlcclxuIChbY29sbCBuIG5vdC1mb3VuZF1cclxuICAoY29uZFxyXG4gICAobm90IChudW1iZXI/IG4pKVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiBcIkluZGV4IGFyZ3VtZW50IHRvIG50aCBtdXN0IGJlIGEgbnVtYmVyLlwiKSlcclxuICAgKG5pbD8gY29sbClcclxuICAgbm90LWZvdW5kXHJcbiAgIChpbXBsZW1lbnRzPyBJSW5kZXhlZCBjb2xsKVxyXG4gICAoLW50aCBjb2xsIG4gbm90LWZvdW5kKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgIChpZiAoYW5kICg8IC0xIG4gKC4tbGVuZ3RoIGNvbGwpKSkgKGFnZXQgY29sbCAoaW50IG4pKSBub3QtZm91bmQpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgIChpZiAoYW5kICg8IC0xIG4gKC4tbGVuZ3RoIGNvbGwpKSkgKC5jaGFyQXQgY29sbCAoaW50IG4pKSBub3QtZm91bmQpXHJcbiAgIChvciAoaW1wbGVtZW50cz8gSVNlcSBjb2xsKSAoaW1wbGVtZW50cz8gSVNlcXVlbnRpYWwgY29sbCkpXHJcbiAgIChpZiAobmVnPyBuKSBub3QtZm91bmQgKGxpbmVhci10cmF2ZXJzYWwtbnRoIGNvbGwgbiBub3QtZm91bmQpKVxyXG4gICAobmF0aXZlLXNhdGlzZmllcz8gSUluZGV4ZWQgY29sbClcclxuICAgKC1udGggY29sbCBuIG5vdC1mb3VuZClcclxuICAgOmVsc2VcclxuICAgKHRocm93XHJcbiAgICAoanMvRXJyb3IuXHJcbiAgICAgKHN0clxyXG4gICAgICBcIm50aCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdHlwZSBcIlxyXG4gICAgICAodHlwZS0+c3RyICh0eXBlIGNvbGwpKSkpKSkpKVxyXG4ifSB7OnN5bSBzb3J0ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGNvbGwgc2F0aXNmaWVzIElTb3J0ZWQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gc29ydGVkP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVNvcnRlZFwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElTb3J0ZWQgeCkpXHJcbiJ9IHs6c3ltIG5pbD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBuaWwsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmlsP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBuaWwsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAoY29lcmNpdmUtPSB4IG5pbCkpXHJcbiJ9IHs6c3ltIHNwbGl0LWF0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHZlY3RvciBvZiBbKHRha2UgbiBjb2xsKSAoZHJvcCBuIGNvbGwpXSIsIDphcmdsaXN0cyAoW24gY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0LWF0XHJcbiBcIlJldHVybnMgYSB2ZWN0b3Igb2YgWyh0YWtlIG4gY29sbCkgKGRyb3AgbiBjb2xsKV1cIlxyXG4gW24gY29sbF1cclxuIFsodGFrZSBuIGNvbGwpIChkcm9wIG4gY29sbCldKVxyXG4ifSB7OnN5bSBwcm4tc3RyLXdpdGgtb3B0cywgOm1ldGEgezpkb2MgIlNhbWUgYXMgcHItc3RyLXdpdGgtb3B0cyBmb2xsb3dlZCBieSAobmV3bGluZSkiLCA6YXJnbGlzdHMgKFtvYmpzIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm4tc3RyLXdpdGgtb3B0c1xyXG4gXCJTYW1lIGFzIHByLXN0ci13aXRoLW9wdHMgZm9sbG93ZWQgYnkgKG5ld2xpbmUpXCJcclxuIFtvYmpzIG9wdHNdXHJcbiAoaWZcclxuICAoZW1wdHk/IG9ianMpXHJcbiAgXCJcXG5cIlxyXG4gIChsZXRcclxuICAgW3NiIChwci1zYi13aXRoLW9wdHMgb2JqcyBvcHRzKV1cclxuICAgKC5hcHBlbmQgc2IgXFxuZXdsaW5lKVxyXG4gICAoc3RyIHNiKSkpKVxyXG4ifSB7OnN5bSBub3QtbmF0aXZlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBub3QtbmF0aXZlIG5pbClcclxuIn0gezpzeW0gcmFuZG9tLXNhbXBsZSwgOm1ldGEgezpkb2MgIlJldHVybnMgaXRlbXMgZnJvbSBjb2xsIHdpdGggcmFuZG9tIHByb2JhYmlsaXR5IG9mIHByb2IgKDAuMCAtXG4gIDEuMCkuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbcHJvYl0gW3Byb2IgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJhbmRvbS1zYW1wbGVcclxuIFwiUmV0dXJucyBpdGVtcyBmcm9tIGNvbGwgd2l0aCByYW5kb20gcHJvYmFiaWxpdHkgb2YgcHJvYiAoMC4wIC1cXG4gIDEuMCkuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbcHJvYl0gKGZpbHRlciAoZm4gW19dICg8IChyYW5kKSBwcm9iKSkpKVxyXG4gKFtwcm9iIGNvbGxdIChmaWx0ZXIgKGZuIFtfXSAoPCAocmFuZCkgcHJvYikpIGNvbGwpKSlcclxuIn0gezpzeW0gc2VsZWN0LWtleXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIGNvbnRhaW5pbmcgb25seSB0aG9zZSBlbnRyaWVzIGluIG1hcCB3aG9zZSBrZXkgaXMgaW4ga2V5cyIsIDphcmdsaXN0cyAoW21hcCBrZXlzZXFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZWxlY3Qta2V5c1xyXG4gXCJSZXR1cm5zIGEgbWFwIGNvbnRhaW5pbmcgb25seSB0aG9zZSBlbnRyaWVzIGluIG1hcCB3aG9zZSBrZXkgaXMgaW4ga2V5c1wiXHJcbiBbbWFwIGtleXNlcV1cclxuIChsb29wXHJcbiAgW3JldCB7fSBrZXlzIChzZXEga2V5c2VxKV1cclxuICAoaWZcclxuICAga2V5c1xyXG4gICAobGV0XHJcbiAgICBba2V5IChmaXJzdCBrZXlzKSBlbnRyeSAoZ2V0IG1hcCBrZXkgOmNsanMuY29yZS9ub3QtZm91bmQpXVxyXG4gICAgKHJlY3VyXHJcbiAgICAgKGlmIChub3Q9IGVudHJ5IDpjbGpzLmNvcmUvbm90LWZvdW5kKSAoYXNzb2MgcmV0IGtleSBlbnRyeSkgcmV0KVxyXG4gICAgIChuZXh0IGtleXMpKSlcclxuICAgKC13aXRoLW1ldGEgcmV0IChtZXRhIG1hcCkpKSkpXHJcbiJ9IHs6c3ltIGJpdC1hbmQsIDptZXRhIHs6ZG9jICJCaXR3aXNlIGFuZCIsIDphcmdsaXN0cyBbW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiaXQtYW5kXHJcbiBcIkJpdHdpc2UgYW5kXCJcclxuIChbeCB5XSAoY2xqcy5jb3JlL2JpdC1hbmQgeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBiaXQtYW5kIChjbGpzLmNvcmUvYml0LWFuZCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gYm91bmRlZC1jb3VudCwgOm1ldGEgezpkb2MgIklmIGNvbGwgaXMgY291bnRlZD8gcmV0dXJucyBpdHMgY291bnQsIGVsc2Ugd2lsbCBjb3VudCBhdCBtb3N0IHRoZSBmaXJzdCBuXG4gICBlbGVtZW50cyBvZiBjb2xsIHVzaW5nIGl0cyBzZXEiLCA6YXJnbGlzdHMgKFtuIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBib3VuZGVkLWNvdW50XHJcbiBcIklmIGNvbGwgaXMgY291bnRlZD8gcmV0dXJucyBpdHMgY291bnQsIGVsc2Ugd2lsbCBjb3VudCBhdCBtb3N0IHRoZSBmaXJzdCBuXFxuICAgZWxlbWVudHMgb2YgY29sbCB1c2luZyBpdHMgc2VxXCJcclxuIHs6YWRkZWQgXCIxLjlcIn1cclxuIFtuIGNvbGxdXHJcbiAoaWZcclxuICAoY291bnRlZD8gY29sbClcclxuICAoY291bnQgY29sbClcclxuICAobG9vcFxyXG4gICBbaSAwIHMgKHNlcSBjb2xsKV1cclxuICAgKGlmIChhbmQgKG5vdCAobmlsPyBzKSkgKDwgaSBuKSkgKHJlY3VyIChpbmMgaSkgKG5leHQgcykpIGkpKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZSwgOm1ldGEgezpkb2MgIidVcGRhdGVzJyBhIHZhbHVlIGluIGFuIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUgayBpcyBhXG4gIGtleSBhbmQgZiBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCB0YWtlIHRoZSBvbGQgdmFsdWVcbiAgYW5kIGFueSBzdXBwbGllZCBhcmdzIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZSwgYW5kIHJldHVybnMgYSBuZXdcbiAgc3RydWN0dXJlLiAgSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgbmlsIGlzIHBhc3NlZCBhcyB0aGUgb2xkIHZhbHVlLiIsIDphcmdsaXN0cyBbW20gayBmXSBbbSBrIGYgeF0gW20gayBmIHggeV0gW20gayBmIHggeSB6XSBbbSBrIGYgeCB5IHogJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlXHJcbiBcIidVcGRhdGVzJyBhIHZhbHVlIGluIGFuIGFzc29jaWF0aXZlIHN0cnVjdHVyZSwgd2hlcmUgayBpcyBhXFxuICBrZXkgYW5kIGYgaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgdGFrZSB0aGUgb2xkIHZhbHVlXFxuICBhbmQgYW55IHN1cHBsaWVkIGFyZ3MgYW5kIHJldHVybiB0aGUgbmV3IHZhbHVlLCBhbmQgcmV0dXJucyBhIG5ld1xcbiAgc3RydWN0dXJlLiAgSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgbmlsIGlzIHBhc3NlZCBhcyB0aGUgb2xkIHZhbHVlLlwiXHJcbiAoW20gayBmXSAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSkpKVxyXG4gKFttIGsgZiB4XSAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSB4KSkpXHJcbiAoW20gayBmIHggeV0gKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgeCB5KSkpXHJcbiAoW20gayBmIHggeSB6XSAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSB4IHkgeikpKVxyXG4gKFttIGsgZiB4IHkgeiAmIG1vcmVdIChhc3NvYyBtIGsgKGFwcGx5IGYgKGdldCBtIGspIHggeSB6IG1vcmUpKSkpXHJcbiJ9IHs6c3ltIGdlbnN5bV9jb3VudGVyLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBnZW5zeW1fY291bnRlciBuaWwpXHJcbiJ9IHs6c3ltIGZpbmQtbWFjcm9zLW5zLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWFjcm9zIG5hbWVzcGFjZSBuYW1lZCBieSB0aGUgc3ltYm9sIG9yIG5pbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICBCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtbWFjcm9zLW5zXHJcbiBcIlJldHVybnMgdGhlIG1hY3JvcyBuYW1lc3BhY2UgbmFtZWQgYnkgdGhlIHN5bWJvbCBvciBuaWwgaWYgaXQgZG9lc24ndCBleGlzdC5cXG4gIEJvb3RzdHJhcCBvbmx5LlwiXHJcbiBbbnNdXHJcbiAod2hlbiAobmlsPyBOU19DQUNIRSkgKHNldCEgTlNfQ0FDSEUgKGF0b20ge30pKSlcclxuIChsZXRcclxuICBbbnMtc3RyXHJcbiAgIChzdHIgbnMpXHJcbiAgIG5zXHJcbiAgIChpZlxyXG4gICAgKG5vdCAoZ3N0cmluZy9jb250YWlucyBucy1zdHIgXCIkbWFjcm9zXCIpKVxyXG4gICAgKHN5bWJvbCAoc3RyIG5zLXN0ciBcIiRtYWNyb3NcIikpXHJcbiAgICBucylcclxuICAgdGhlLW5zXHJcbiAgIChnZXQgQE5TX0NBQ0hFIG5zKV1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IHRoZS1ucylcclxuICAgdGhlLW5zXHJcbiAgIChsZXRcclxuICAgIFtucy1vYmogKGZpbmQtbnMtb2JqIG5zKV1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChuaWw/IG5zLW9iailcclxuICAgICAobGV0XHJcbiAgICAgIFtuZXctbnMgKGNyZWF0ZS1ucyBucyBucy1vYmopXVxyXG4gICAgICAoc3dhcCEgTlNfQ0FDSEUgYXNzb2MgbnMgbmV3LW5zKVxyXG4gICAgICBuZXctbnMpKSkpKSlcclxuIn0gezpzeW0gbGlzdCosIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgaXRlbXMgcHJlcGVuZGVkIHRvIHRoZSByZXN0LCB0aGVcbiAgbGFzdCBvZiB3aGljaCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzZXF1ZW5jZS4iLCA6YXJnbGlzdHMgW1thcmdzXSBbYSBhcmdzXSBbYSBiIGFyZ3NdIFthIGIgYyBhcmdzXSBbYSBiIGMgZCAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsaXN0KlxyXG4gXCJDcmVhdGVzIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgaXRlbXMgcHJlcGVuZGVkIHRvIHRoZSByZXN0LCB0aGVcXG4gIGxhc3Qgb2Ygd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2VxdWVuY2UuXCJcclxuIChbYXJnc10gKHNlcSBhcmdzKSlcclxuIChbYSBhcmdzXSAoY29ucyBhIGFyZ3MpKVxyXG4gKFthIGIgYXJnc10gKGNvbnMgYSAoY29ucyBiIGFyZ3MpKSlcclxuIChbYSBiIGMgYXJnc10gKGNvbnMgYSAoY29ucyBiIChjb25zIGMgYXJncykpKSlcclxuIChbYSBiIGMgZCAmIG1vcmVdIChjb25zIGEgKGNvbnMgYiAoY29ucyBjIChjb25zIGQgKHNwcmVhZCBtb3JlKSkpKSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtaW4sIDptZXRhIHs6ZG9jICInVXBkYXRlcycgYSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsIHdoZXJlIGtzIGlzIGFcbiAgc2VxdWVuY2Ugb2Yga2V5cyBhbmQgZiBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCB0YWtlIHRoZSBvbGQgdmFsdWVcbiAgYW5kIGFueSBzdXBwbGllZCBhcmdzIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZSwgYW5kIHJldHVybnMgYSBuZXdcbiAgbmVzdGVkIHN0cnVjdHVyZS4gIElmIGFueSBsZXZlbHMgZG8gbm90IGV4aXN0LCBoYXNoLW1hcHMgd2lsbCBiZVxuICBjcmVhdGVkLiIsIDphcmdsaXN0cyBbW20gW2sgJiBrc10gZl0gW20gW2sgJiBrc10gZiBhXSBbbSBbayAmIGtzXSBmIGEgYl0gW20gW2sgJiBrc10gZiBhIGIgY10gW20gW2sgJiBrc10gZiBhIGIgYyAmIGFyZ3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtaW5cclxuIFwiJ1VwZGF0ZXMnIGEgdmFsdWUgaW4gYSBuZXN0ZWQgYXNzb2NpYXRpdmUgc3RydWN0dXJlLCB3aGVyZSBrcyBpcyBhXFxuICBzZXF1ZW5jZSBvZiBrZXlzIGFuZCBmIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgdGhlIG9sZCB2YWx1ZVxcbiAgYW5kIGFueSBzdXBwbGllZCBhcmdzIGFuZCByZXR1cm4gdGhlIG5ldyB2YWx1ZSwgYW5kIHJldHVybnMgYSBuZXdcXG4gIG5lc3RlZCBzdHJ1Y3R1cmUuICBJZiBhbnkgbGV2ZWxzIGRvIG5vdCBleGlzdCwgaGFzaC1tYXBzIHdpbGwgYmVcXG4gIGNyZWF0ZWQuXCJcclxuIChbbSBbayAmIGtzXSBmXVxyXG4gIChpZlxyXG4gICBrc1xyXG4gICAoYXNzb2MgbSBrICh1cGRhdGUtaW4gKGdldCBtIGspIGtzIGYpKVxyXG4gICAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSkpKSlcclxuIChbbSBbayAmIGtzXSBmIGFdXHJcbiAgKGlmXHJcbiAgIGtzXHJcbiAgIChhc3NvYyBtIGsgKHVwZGF0ZS1pbiAoZ2V0IG0gaykga3MgZiBhKSlcclxuICAgKGFzc29jIG0gayAoZiAoZ2V0IG0gaykgYSkpKSlcclxuIChbbSBbayAmIGtzXSBmIGEgYl1cclxuICAoaWZcclxuICAga3NcclxuICAgKGFzc29jIG0gayAodXBkYXRlLWluIChnZXQgbSBrKSBrcyBmIGEgYikpXHJcbiAgIChhc3NvYyBtIGsgKGYgKGdldCBtIGspIGEgYikpKSlcclxuIChbbSBbayAmIGtzXSBmIGEgYiBjXVxyXG4gIChpZlxyXG4gICBrc1xyXG4gICAoYXNzb2MgbSBrICh1cGRhdGUtaW4gKGdldCBtIGspIGtzIGYgYSBiIGMpKVxyXG4gICAoYXNzb2MgbSBrIChmIChnZXQgbSBrKSBhIGIgYykpKSlcclxuIChbbSBbayAmIGtzXSBmIGEgYiBjICYgYXJnc11cclxuICAoaWZcclxuICAga3NcclxuICAgKGFzc29jIG0gayAoYXBwbHkgdXBkYXRlLWluIChnZXQgbSBrKSBrcyBmIGEgYiBjIGFyZ3MpKVxyXG4gICAoYXNzb2MgbSBrIChhcHBseSBmIChnZXQgbSBrKSBhIGIgYyBhcmdzKSkpKSlcclxuIn0gezpzeW0gcHJlZmVyLW1ldGhvZCwgOm1ldGEgezpkb2MgIkNhdXNlcyB0aGUgbXVsdGltZXRob2QgdG8gcHJlZmVyIG1hdGNoZXMgb2YgZGlzcGF0Y2gtdmFsLXggb3ZlciBkaXNwYXRjaC12YWwteVxuICAgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0IiwgOmFyZ2xpc3RzIChbbXVsdGlmbiBkaXNwYXRjaC12YWwteCBkaXNwYXRjaC12YWwteV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByZWZlci1tZXRob2RcclxuIFwiQ2F1c2VzIHRoZSBtdWx0aW1ldGhvZCB0byBwcmVmZXIgbWF0Y2hlcyBvZiBkaXNwYXRjaC12YWwteCBvdmVyIGRpc3BhdGNoLXZhbC15XFxuICAgd2hlbiB0aGVyZSBpcyBhIGNvbmZsaWN0XCJcclxuIFttdWx0aWZuIGRpc3BhdGNoLXZhbC14IGRpc3BhdGNoLXZhbC15XVxyXG4gKC1wcmVmZXItbWV0aG9kIG11bHRpZm4gZGlzcGF0Y2gtdmFsLXggZGlzcGF0Y2gtdmFsLXkpKVxyXG4ifSB7OnN5bSBlbnN1cmUtcmVkdWNlZCwgOm1ldGEgezpkb2MgIklmIHggaXMgYWxyZWFkeSByZWR1Y2VkPywgcmV0dXJucyBpdCwgZWxzZSByZXR1cm5zIChyZWR1Y2VkIHgpIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuc3VyZS1yZWR1Y2VkXHJcbiBcIklmIHggaXMgYWxyZWFkeSByZWR1Y2VkPywgcmV0dXJucyBpdCwgZWxzZSByZXR1cm5zIChyZWR1Y2VkIHgpXCJcclxuIFt4XVxyXG4gKGlmIChyZWR1Y2VkPyB4KSB4IChyZWR1Y2VkIHgpKSlcclxuIn0gezpzeW0gaW5zdGFuY2U/LCA6bWV0YSB7OmRvYyAiRXZhbHVhdGVzIHggYW5kIHRlc3RzIGlmIGl0IGlzIGFuIGluc3RhbmNlIG9mIHRoZSB0eXBlXG4gIGMuIFJldHVybnMgdHJ1ZSBvciBmYWxzZSIsIDphcmdsaXN0cyAoW2MgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc3RhbmNlP1xyXG4gXCJFdmFsdWF0ZXMgeCBhbmQgdGVzdHMgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHR5cGVcXG4gIGMuIFJldHVybnMgdHJ1ZSBvciBmYWxzZVwiXHJcbiBbYyB4XVxyXG4gKGNsanMuY29yZS9pbnN0YW5jZT8gYyB4KSlcclxuIn0gezpzeW0gbWl4LWNvbGxlY3Rpb24taGFzaCwgOm1ldGEgezpkb2MgIk1peCBmaW5hbCBjb2xsZWN0aW9uIGhhc2ggZm9yIG9yZGVyZWQgb3IgdW5vcmRlcmVkIGNvbGxlY3Rpb25zLlxuICAgaGFzaC1iYXNpcyBpcyB0aGUgY29tYmluZWQgY29sbGVjdGlvbiBoYXNoLCBjb3VudCBpcyB0aGUgbnVtYmVyXG4gICBvZiBlbGVtZW50cyBpbmNsdWRlZCBpbiB0aGUgYmFzaXMuIE5vdGUgdGhpcyBpcyB0aGUgaGFzaCBjb2RlXG4gICBjb25zaXN0ZW50IHdpdGggPSwgZGlmZmVyZW50IGZyb20gLmhhc2hDb2RlLlxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLiIsIDphcmdsaXN0cyAoW2hhc2gtYmFzaXMgY291bnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXgtY29sbGVjdGlvbi1oYXNoXHJcbiBcIk1peCBmaW5hbCBjb2xsZWN0aW9uIGhhc2ggZm9yIG9yZGVyZWQgb3IgdW5vcmRlcmVkIGNvbGxlY3Rpb25zLlxcbiAgIGhhc2gtYmFzaXMgaXMgdGhlIGNvbWJpbmVkIGNvbGxlY3Rpb24gaGFzaCwgY291bnQgaXMgdGhlIG51bWJlclxcbiAgIG9mIGVsZW1lbnRzIGluY2x1ZGVkIGluIHRoZSBiYXNpcy4gTm90ZSB0aGlzIGlzIHRoZSBoYXNoIGNvZGVcXG4gICBjb25zaXN0ZW50IHdpdGggPSwgZGlmZmVyZW50IGZyb20gLmhhc2hDb2RlLlxcbiAgIFNlZSBodHRwOi8vY2xvanVyZS5vcmcvZGF0YV9zdHJ1Y3R1cmVzI2hhc2ggZm9yIGZ1bGwgYWxnb3JpdGhtcy5cIlxyXG4gW2hhc2gtYmFzaXMgY291bnRdXHJcbiAobGV0XHJcbiAgW2gxIG0zLXNlZWQgazEgKG0zLW1peC1LMSBoYXNoLWJhc2lzKSBoMSAobTMtbWl4LUgxIGgxIGsxKV1cclxuICAobTMtZm1peCBoMSBjb3VudCkpKVxyXG4ifSB7OnN5bSByZS1maW5kLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlyc3QgcmVnZXggbWF0Y2gsIGlmIGFueSwgb2YgcyB0byByZSwgdXNpbmdcbiAgcmUuZXhlYyhzKS4gUmV0dXJucyBhIHZlY3RvciwgY29udGFpbmluZyBmaXJzdCB0aGUgbWF0Y2hpbmdcbiAgc3Vic3RyaW5nLCB0aGVuIGFueSBjYXB0dXJpbmcgZ3JvdXBzIGlmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY29udGFpbnNcbiAgY2FwdHVyaW5nIGdyb3Vwcy4iLCA6YXJnbGlzdHMgKFtyZSBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmUtZmluZFxyXG4gXCJSZXR1cm5zIHRoZSBmaXJzdCByZWdleCBtYXRjaCwgaWYgYW55LCBvZiBzIHRvIHJlLCB1c2luZ1xcbiAgcmUuZXhlYyhzKS4gUmV0dXJucyBhIHZlY3RvciwgY29udGFpbmluZyBmaXJzdCB0aGUgbWF0Y2hpbmdcXG4gIHN1YnN0cmluZywgdGhlbiBhbnkgY2FwdHVyaW5nIGdyb3VwcyBpZiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNvbnRhaW5zXFxuICBjYXB0dXJpbmcgZ3JvdXBzLlwiXHJcbiBbcmUgc11cclxuIChpZlxyXG4gIChzdHJpbmc/IHMpXHJcbiAgKGxldFxyXG4gICBbbWF0Y2hlcyAoLmV4ZWMgcmUgcyldXHJcbiAgICh3aGVuLW5vdFxyXG4gICAgKG5pbD8gbWF0Y2hlcylcclxuICAgIChpZiAoPT0gKGNvdW50IG1hdGNoZXMpIDEpIChhZ2V0IG1hdGNoZXMgMCkgKHZlYyBtYXRjaGVzKSkpKVxyXG4gICh0aHJvdyAoanMvVHlwZUVycm9yLiBcInJlLWZpbmQgbXVzdCBtYXRjaCBhZ2FpbnN0IGEgc3RyaW5nLlwiKSkpKVxyXG4ifSB7OnN5bSBydW4hLCA6bWV0YSB7OmRvYyAiUnVucyB0aGUgc3VwcGxpZWQgcHJvY2VkdXJlICh2aWEgcmVkdWNlKSwgZm9yIHB1cnBvc2VzIG9mIHNpZGVcbiAgZWZmZWN0cywgb24gc3VjY2Vzc2l2ZSBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4gUmV0dXJucyBuaWwiLCA6YXJnbGlzdHMgKFtwcm9jIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBydW4hXHJcbiBcIlJ1bnMgdGhlIHN1cHBsaWVkIHByb2NlZHVyZSAodmlhIHJlZHVjZSksIGZvciBwdXJwb3NlcyBvZiBzaWRlXFxuICBlZmZlY3RzLCBvbiBzdWNjZXNzaXZlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLiBSZXR1cm5zIG5pbFwiXHJcbiBbcHJvYyBjb2xsXVxyXG4gKHJlZHVjZSAoZm4qIFtwMV9fNDg4NTIjIHAyX180ODg1MSNdIChwcm9jIHAyX180ODg1MSMpKSBuaWwgY29sbClcclxuIG5pbClcclxuIn0gezpzeW0gdmFsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgaW4gdGhlIG1hcCBlbnRyeS4iLCA6YXJnbGlzdHMgKFttYXAtZW50cnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2YWxcclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgaW4gdGhlIG1hcCBlbnRyeS5cIlxyXG4gW21hcC1lbnRyeV1cclxuICgtdmFsIG1hcC1lbnRyeSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1hZGQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1hZGRcclxuIFwiUmV0dXJucyB0aGUgc3VtIG9mIG51bXMuICgrKSByZXR1cm5zIDAuXCJcclxuIChbXSAwKVxyXG4gKFt4XSB4KVxyXG4gKFt4IHldIChjbGpzLmNvcmUvdW5jaGVja2VkLWFkZCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2UgdW5jaGVja2VkLWFkZCAoY2xqcy5jb3JlL3VuY2hlY2tlZC1hZGQgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHRyYW5zZm9ybWVyLWl0ZXJhdG9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hmb3JtIHNvdXJjZUl0ZXIgbXVsdGldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2Zvcm1lci1pdGVyYXRvclxyXG4gW3hmb3JtIHNvdXJjZUl0ZXIgbXVsdGldXHJcbiAobGV0XHJcbiAgW2l0ZXJhdG9yXHJcbiAgIChUcmFuc2Zvcm1lckl0ZXJhdG9yLiBFTVBUWSBOT05FIGZhbHNlIG5pbCBzb3VyY2VJdGVyIG11bHRpKV1cclxuICAoc2V0IVxyXG4gICAoLi14ZiBpdGVyYXRvcilcclxuICAgKHhmb3JtXHJcbiAgICAoZm5cclxuICAgICAoW10gbmlsKVxyXG4gICAgIChbYWNjXSBhY2MpXHJcbiAgICAgKFthY2Mgb11cclxuICAgICAgKHNldCEgKC4tYnVmZmVyIGl0ZXJhdG9yKSAoLmFkZCAoLi1idWZmZXIgaXRlcmF0b3IpIG8pKVxyXG4gICAgICBhY2MpKSkpXHJcbiAgaXRlcmF0b3IpKVxyXG4ifSB7OnN5bSBub3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpcyBsb2dpY2FsIGZhbHNlLCBmYWxzZSBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vdFxyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCBpcyBsb2dpY2FsIGZhbHNlLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKGNvbmQgKG5pbD8geCkgdHJ1ZSAoZmFsc2U/IHgpIHRydWUgOmVsc2UgZmFsc2UpKVxyXG4ifSB7OnN5bSAtdnJlc2V0ISwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIG9mIHZvbGF0aWxlIG8gdG8gbmV3LXZhbHVlIHdpdGhvdXQgcmVnYXJkIGZvciB0aGVcbiAgICAgY3VycmVudCB2YWx1ZS4gUmV0dXJucyBuZXctdmFsdWUuIiwgOmFyZ2xpc3RzIChbbyBuZXctdmFsdWVdKX0sIDpwcm90b2NvbCBJVm9sYXRpbGV9IHs6c3ltIHdpdGgtbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIG9iaiwgd2l0aFxuICBtYXAgbSBhcyBpdHMgbWV0YWRhdGEuIiwgOmFyZ2xpc3RzIChbbyBtZXRhXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2l0aC1tZXRhXHJcbiBcIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIG9iaiwgd2l0aFxcbiAgbWFwIG0gYXMgaXRzIG1ldGFkYXRhLlwiXHJcbiBbbyBtZXRhXVxyXG4gKGlmXHJcbiAgKGdvb2cvaXNGdW5jdGlvbiBvKVxyXG4gIChNZXRhRm4uIG8gbWV0YSlcclxuICAod2hlbi1ub3QgKG5pbD8gbykgKC13aXRoLW1ldGEgbyBtZXRhKSkpKVxyXG4ifSB7OnN5bSB1bnJlZHVjZWQsIDptZXRhIHs6ZG9jICJJZiB4IGlzIHJlZHVjZWQ/LCByZXR1cm5zIChkZXJlZiB4KSwgZWxzZSByZXR1cm5zIHgiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5yZWR1Y2VkXHJcbiBcIklmIHggaXMgcmVkdWNlZD8sIHJldHVybnMgKGRlcmVmIHgpLCBlbHNlIHJldHVybnMgeFwiXHJcbiBbeF1cclxuIChpZiAocmVkdWNlZD8geCkgKGRlcmVmIHgpIHgpKVxyXG4ifSB7OnN5bSByZWNvcmQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSVJlY29yZCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWNvcmQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIElSZWNvcmRcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJUmVjb3JkIHgpKVxyXG4ifSB7OnN5bSB0eXBlLCA6bWV0YSB7OmRvYyAiUmV0dXJuIHgncyBjb25zdHJ1Y3Rvci4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdHlwZVxyXG4gXCJSZXR1cm4geCdzIGNvbnN0cnVjdG9yLlwiXHJcbiBbeF1cclxuICh3aGVuLW5vdCAobmlsPyB4KSAoLi1jb25zdHJ1Y3RvciB4KSkpXHJcbiJ9IHs6c3ltIGlkZW50aWNhbD8sIDptZXRhIHs6ZG9jICJUZXN0cyBpZiAyIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgb2JqZWN0IiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4gaWRlbnRpY2FsP1xyXG4gXCJUZXN0cyBpZiAyIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgb2JqZWN0XCJcclxuIFt4IHldXHJcbiAoY2xqcy5jb3JlL2lkZW50aWNhbD8geCB5KSlcclxuIn0gezpzeW0gLW5hbWVzcGFjZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWVzcGFjZSBTdHJpbmcgb2YgeC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6cHJvdG9jb2wgSU5hbWVkfSB7OnN5bSB1bmNoZWNrZWQtZGl2aWRlLWludCwgOm1ldGEgezpkb2MgIklmIG5vIGRlbm9taW5hdG9ycyBhcmUgc3VwcGxpZWQsIHJldHVybnMgMS9udW1lcmF0b3IsXG4gIGVsc2UgcmV0dXJucyBudW1lcmF0b3IgZGl2aWRlZCBieSBhbGwgb2YgdGhlIGRlbm9taW5hdG9ycy4iLCA6YXJnbGlzdHMgW1t4XSBbeCB5XSBbeCB5ICYgbW9yZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuY2hlY2tlZC1kaXZpZGUtaW50XHJcbiBcIklmIG5vIGRlbm9taW5hdG9ycyBhcmUgc3VwcGxpZWQsIHJldHVybnMgMS9udW1lcmF0b3IsXFxuICBlbHNlIHJldHVybnMgbnVtZXJhdG9yIGRpdmlkZWQgYnkgYWxsIG9mIHRoZSBkZW5vbWluYXRvcnMuXCJcclxuIChbeF0gKHVuY2hlY2tlZC1kaXZpZGUtaW50IDEgeCkpXHJcbiAoW3ggeV0gKGNsanMuY29yZS9kaXZpZGUgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAocmVkdWNlIHVuY2hlY2tlZC1kaXZpZGUtaW50ICh1bmNoZWNrZWQtZGl2aWRlLWludCB4IHkpIG1vcmUpKSlcclxuIn0gezpzeW0gbnMtbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG5hbWVzcGFjZSwgYSBOYW1lc3BhY2Ugb2JqZWN0LlxuICBCb290c3RyYXAgb25seS4iLCA6YXJnbGlzdHMgKFtucy1vYmpdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBucy1uYW1lXHJcbiBcIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG5hbWVzcGFjZSwgYSBOYW1lc3BhY2Ugb2JqZWN0LlxcbiAgQm9vdHN0cmFwIG9ubHkuXCJcclxuIFtucy1vYmpdXHJcbiAoLi1uYW1lIG5zLW9iaikpXHJcbiJ9IHs6c3ltIG1heC1rZXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB4IGZvciB3aGljaCAoayB4KSwgYSBudW1iZXIsIGlzIGdyZWF0ZXN0LlxuXG4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWNoIHhzLCB0aGUgbGFzdCBvbmUgaXMgcmV0dXJuZWQuIiwgOmFyZ2xpc3RzIFtbayB4XSBbayB4IHldIFtrIHggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXgta2V5XHJcbiBcIlJldHVybnMgdGhlIHggZm9yIHdoaWNoIChrIHgpLCBhIG51bWJlciwgaXMgZ3JlYXRlc3QuXFxuXFxuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCB4cywgdGhlIGxhc3Qgb25lIGlzIHJldHVybmVkLlwiXHJcbiAoW2sgeF0geClcclxuIChbayB4IHldIChpZiAoPiAoayB4KSAoayB5KSkgeCB5KSlcclxuIChbayB4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2VcclxuICAgKGZuKiBbcDFfXzQ4ODM0IyBwMl9fNDg4MzUjXSAobWF4LWtleSBrIHAxX180ODgzNCMgcDJfXzQ4ODM1IykpXHJcbiAgIChtYXgta2V5IGsgeCB5KVxyXG4gICBtb3JlKSkpXHJcbiJ9IHs6c3ltICpvdXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqb3V0KiBuaWwpXHJcbiJ9IHs6c3ltIGhhc2gtc3RyaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLXN0cmluZ1xyXG4gW2tdXHJcbiAod2hlblxyXG4gICg+IHN0cmluZy1oYXNoLWNhY2hlLWNvdW50IDI1NSlcclxuICAoc2V0ISBzdHJpbmctaGFzaC1jYWNoZSAoanMtb2JqKSlcclxuICAoc2V0ISBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCAwKSlcclxuIChpZlxyXG4gIChuaWw/IGspXHJcbiAgMFxyXG4gIChsZXRcclxuICAgW2ggKHVuY2hlY2tlZC1nZXQgc3RyaW5nLWhhc2gtY2FjaGUgayldXHJcbiAgIChpZiAobnVtYmVyPyBoKSBoIChhZGQtdG8tc3RyaW5nLWhhc2gtY2FjaGUgaykpKSkpXHJcbiJ9IHs6c3ltIC1wcmVmZXJzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIHNldC12YWxpZGF0b3IhLCA6bWV0YSB7OmRvYyAiU2V0cyB0aGUgdmFsaWRhdG9yLWZuIGZvciBhbiBhdG9tLiB2YWxpZGF0b3ItZm4gbXVzdCBiZSBuaWwgb3IgYVxuICBzaWRlLWVmZmVjdC1mcmVlIGZuIG9mIG9uZSBhcmd1bWVudCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdGhlIGludGVuZGVkXG4gIG5ldyBzdGF0ZSBvbiBhbnkgc3RhdGUgY2hhbmdlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHVuYWNjZXB0YWJsZSwgdGhlXG4gIHZhbGlkYXRvci1mbiBzaG91bGQgcmV0dXJuIGZhbHNlIG9yIHRocm93IGFuIEVycm9yLiBJZiB0aGUgY3VycmVudCBzdGF0ZVxuICBpcyBub3QgYWNjZXB0YWJsZSB0byB0aGUgbmV3IHZhbGlkYXRvciwgYW4gRXJyb3Igd2lsbCBiZSB0aHJvd24gYW5kIHRoZVxuICB2YWxpZGF0b3Igd2lsbCBub3QgYmUgY2hhbmdlZC4iLCA6YXJnbGlzdHMgKFtpcmVmIHZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldC12YWxpZGF0b3IhXHJcbiBcIlNldHMgdGhlIHZhbGlkYXRvci1mbiBmb3IgYW4gYXRvbS4gdmFsaWRhdG9yLWZuIG11c3QgYmUgbmlsIG9yIGFcXG4gIHNpZGUtZWZmZWN0LWZyZWUgZm4gb2Ygb25lIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHBhc3NlZCB0aGUgaW50ZW5kZWRcXG4gIG5ldyBzdGF0ZSBvbiBhbnkgc3RhdGUgY2hhbmdlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHVuYWNjZXB0YWJsZSwgdGhlXFxuICB2YWxpZGF0b3ItZm4gc2hvdWxkIHJldHVybiBmYWxzZSBvciB0aHJvdyBhbiBFcnJvci4gSWYgdGhlIGN1cnJlbnQgc3RhdGVcXG4gIGlzIG5vdCBhY2NlcHRhYmxlIHRvIHRoZSBuZXcgdmFsaWRhdG9yLCBhbiBFcnJvciB3aWxsIGJlIHRocm93biBhbmQgdGhlXFxuICB2YWxpZGF0b3Igd2lsbCBub3QgYmUgY2hhbmdlZC5cIlxyXG4gW2lyZWYgdmFsXVxyXG4gKHdoZW5cclxuICAoYW5kIChzb21lPyB2YWwpIChub3QgKHZhbCAoLWRlcmVmIGlyZWYpKSkpXHJcbiAgKHRocm93IChqcy9FcnJvci4gXCJWYWxpZGF0b3IgcmVqZWN0ZWQgcmVmZXJlbmNlIHN0YXRlXCIpKSlcclxuIChzZXQhICguLXZhbGlkYXRvciBpcmVmKSB2YWwpKVxyXG4ifSB7OnN5bSBpZGVudD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmQiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaWRlbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZFwiXHJcbiBbeF1cclxuIChvciAoa2V5d29yZD8geCkgKHN5bWJvbD8geCkpKVxyXG4ifSB7OnN5bSAtbWV0YSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG1ldGFkYXRhIG9mIG9iamVjdCBvLiIsIDphcmdsaXN0cyAoW29dKX0sIDpwcm90b2NvbCBJTWV0YX0gezpzeW0gLWRpc3BhdGNoLWZuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIC1hZGQtbWV0aG9kLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mIGRpc3BhdGNoLXZhbCBtZXRob2RdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gc3dhcCEsIDptZXRhIHs6ZG9jICJBdG9taWNhbGx5IHN3YXBzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIGJlOlxuICAoYXBwbHkgZiBjdXJyZW50LXZhbHVlLW9mLWF0b20gYXJncykuIE5vdGUgdGhhdCBmIG1heSBiZSBjYWxsZWRcbiAgbXVsdGlwbGUgdGltZXMsIGFuZCB0aHVzIHNob3VsZCBiZSBmcmVlIG9mIHNpZGUgZWZmZWN0cy4gIFJldHVybnNcbiAgdGhlIHZhbHVlIHRoYXQgd2FzIHN3YXBwZWQgaW4uIiwgOmFyZ2xpc3RzIFtbYSBmXSBbYSBmIHhdIFthIGYgeCB5XSBbYSBmIHggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzd2FwIVxyXG4gXCJBdG9taWNhbGx5IHN3YXBzIHRoZSB2YWx1ZSBvZiBhdG9tIHRvIGJlOlxcbiAgKGFwcGx5IGYgY3VycmVudC12YWx1ZS1vZi1hdG9tIGFyZ3MpLiBOb3RlIHRoYXQgZiBtYXkgYmUgY2FsbGVkXFxuICBtdWx0aXBsZSB0aW1lcywgYW5kIHRodXMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLiAgUmV0dXJuc1xcbiAgdGhlIHZhbHVlIHRoYXQgd2FzIHN3YXBwZWQgaW4uXCJcclxuIChbYSBmXVxyXG4gIChpZiAoaW5zdGFuY2U/IEF0b20gYSkgKHJlc2V0ISBhIChmICguLXN0YXRlIGEpKSkgKC1zd2FwISBhIGYpKSlcclxuIChbYSBmIHhdXHJcbiAgKGlmIChpbnN0YW5jZT8gQXRvbSBhKSAocmVzZXQhIGEgKGYgKC4tc3RhdGUgYSkgeCkpICgtc3dhcCEgYSBmIHgpKSlcclxuIChbYSBmIHggeV1cclxuICAoaWZcclxuICAgKGluc3RhbmNlPyBBdG9tIGEpXHJcbiAgIChyZXNldCEgYSAoZiAoLi1zdGF0ZSBhKSB4IHkpKVxyXG4gICAoLXN3YXAhIGEgZiB4IHkpKSlcclxuIChbYSBmIHggeSAmIG1vcmVdXHJcbiAgKGlmXHJcbiAgIChpbnN0YW5jZT8gQXRvbSBhKVxyXG4gICAocmVzZXQhIGEgKGFwcGx5IGYgKC4tc3RhdGUgYSkgeCB5IG1vcmUpKVxyXG4gICAoLXN3YXAhIGEgZiB4IHkgbW9yZSkpKSlcclxuIn0gezpzeW0gdmFscywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgbWFwJ3MgdmFsdWVzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyAoc2VxIG1hcCkuIiwgOmFyZ2xpc3RzIChbbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFsc1xyXG4gXCJSZXR1cm5zIGEgc2VxdWVuY2Ugb2YgdGhlIG1hcCdzIHZhbHVlcywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgKHNlcSBtYXApLlwiXHJcbiBbbWFwXVxyXG4gKHdoZW4tbGV0IFttc2VxIChzZXEgbWFwKV0gKFZhbFNlcS4gbXNlcSBuaWwpKSlcclxuIn0gezpzeW0gLWNodW5rZWQtbmV4dCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGhvdXQgdGhlIGZpcnN0IGNodW5rLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJQ2h1bmtlZE5leHR9IHs6c3ltIHVuY2hlY2tlZC1zdWJ0cmFjdCwgOm1ldGEgezpkb2MgIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcbiAgdGhlIHlzIGZyb20geCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gdW5jaGVja2VkLXN1YnRyYWN0XHJcbiBcIklmIG5vIHlzIGFyZSBzdXBwbGllZCwgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgeCwgZWxzZSBzdWJ0cmFjdHNcXG4gIHRoZSB5cyBmcm9tIHggYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cIlxyXG4gKFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdCB4KSlcclxuIChbeCB5XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1zdWJ0cmFjdCB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2UgdW5jaGVja2VkLXN1YnRyYWN0IChjbGpzLmNvcmUvdW5jaGVja2VkLXN1YnRyYWN0IHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSB0YXA+LCA6bWV0YSB7OmRvYyAiU2VuZHMgeCB0byBhbnkgdGFwcy4gUmV0dXJucyB0aGUgcmVzdWx0IG9mICpleGVjLXRhcC1mbiosIGEgQm9vbGVhbiB2YWx1ZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdGFwPlxyXG4gXCJTZW5kcyB4IHRvIGFueSB0YXBzLiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgKmV4ZWMtdGFwLWZuKiwgYSBCb29sZWFuIHZhbHVlLlwiXHJcbiBbeF1cclxuIChtYXliZS1pbml0LXRhcHNldClcclxuICgqZXhlYy10YXAtZm4qXHJcbiAgKGZuIFtdIChkb3NlcSBbdGFwIEB0YXBzZXRdICh0cnkgKHRhcCB4KSAoY2F0Y2gganMvRXJyb3IgZXgpKSkpKSlcclxuIn0gezpzeW0gSU1hcCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgbWFwcGluZyBmdW5jdGlvbmFsaXR5IHRvIGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWRpc3NvYyl9IHs6c3ltIHNvcnRlZC1zZXQtYnksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHNvcnRlZCBzZXQgd2l0aCBzdXBwbGllZCBrZXlzLCB1c2luZyB0aGUgc3VwcGxpZWQgY29tcGFyYXRvci4iLCA6YXJnbGlzdHMgW1tjb21wYXJhdG9yICYga2V5c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRlZC1zZXQtYnlcclxuIFwiUmV0dXJucyBhIG5ldyBzb3J0ZWQgc2V0IHdpdGggc3VwcGxpZWQga2V5cywgdXNpbmcgdGhlIHN1cHBsaWVkIGNvbXBhcmF0b3IuXCJcclxuIChbY29tcGFyYXRvciAmIGtleXNdXHJcbiAgKHJlZHVjZVxyXG4gICAtY29ualxyXG4gICAoUGVyc2lzdGVudFRyZWVTZXQuIG5pbCAoc29ydGVkLW1hcC1ieSBjb21wYXJhdG9yKSAwKVxyXG4gICBrZXlzKSkpXHJcbiJ9IHs6c3ltIGNsb25lYWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUNsb25lYWJsZSBwcm90b2NvbC4iLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsb25lYWJsZT9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpbXBsZW1lbnRzIElDbG9uZWFibGUgcHJvdG9jb2wuXCJcclxuIFt2YWx1ZV1cclxuIChzYXRpc2ZpZXM/IElDbG9uZWFibGUgdmFsdWUpKVxyXG4ifSB7OnN5bSBxdWFsaWZpZWQtaWRlbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCBvciBrZXl3b3JkIHdpdGggYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVhbGlmaWVkLWlkZW50P1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmQgd2l0aCBhIG5hbWVzcGFjZVwiXHJcbiBbeF1cclxuIChib29sZWFuIChhbmQgKGlkZW50PyB4KSAobmFtZXNwYWNlIHgpIHRydWUpKSlcclxuIn0gezpzeW0gaGFzaC1zdHJpbmcqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLXN0cmluZypcclxuIFtzXVxyXG4gKGlmLW5vdFxyXG4gIChuaWw/IHMpXHJcbiAgKGxldFxyXG4gICBbbGVuICguLWxlbmd0aCBzKV1cclxuICAgKGlmXHJcbiAgICAocG9zPyBsZW4pXHJcbiAgICAobG9vcFxyXG4gICAgIFtpIDAgaGFzaCAwXVxyXG4gICAgIChpZlxyXG4gICAgICAoPCBpIGxlbilcclxuICAgICAgKHJlY3VyIChpbmMgaSkgKCsgKGltdWwgMzEgaGFzaCkgKC5jaGFyQ29kZUF0IHMgaSkpKVxyXG4gICAgICBoYXNoKSlcclxuICAgIDApKVxyXG4gIDApKVxyXG4ifSB7OnN5bSBrZXktdGVzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrZXkgb3RoZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrZXktdGVzdFxyXG4gW2tleSBvdGhlcl1cclxuIChjb25kXHJcbiAgKGlkZW50aWNhbD8ga2V5IG90aGVyKVxyXG4gIHRydWVcclxuICAoa2V5d29yZC1pZGVudGljYWw/IGtleSBvdGhlcilcclxuICB0cnVlXHJcbiAgOmVsc2VcclxuICAoPSBrZXkgb3RoZXIpKSlcclxuIn0gezpzeW0gLXJlc2V0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21mXSl9LCA6cHJvdG9jb2wgSU11bHRpRm59IHs6c3ltIHRydWU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHZhbHVlIHRydWUsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJ1ZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHZhbHVlIHRydWUsIGZhbHNlIG90aGVyd2lzZS5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL3RydWU/IHgpKVxyXG4ifSB7OnN5bSBhcnJheSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBuZXcgamF2YXNjcmlwdCBhcnJheS5cbkBwYXJhbSB7Li4uKn0gdmFyX2FyZ3MiLCA6YXJnbGlzdHMgKFt2YXItYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFycmF5XHJcbiBcIkNyZWF0ZXMgYSBuZXcgamF2YXNjcmlwdCBhcnJheS5cXG5AcGFyYW0gey4uLip9IHZhcl9hcmdzXCJcclxuIFt2YXItYXJnc11cclxuIChsZXRcclxuICBbYSAoanMvQXJyYXkuIChhbGVuZ3RoIChjbGpzLmNvcmUvanMtYXJndW1lbnRzKSkpXVxyXG4gIChsb29wXHJcbiAgIFtpIDBdXHJcbiAgIChpZlxyXG4gICAgKDwgaSAoYWxlbmd0aCBhKSlcclxuICAgIChkbyAoYXNldCBhIGkgKGFnZXQgKGNsanMuY29yZS9qcy1hcmd1bWVudHMpIGkpKSAocmVjdXIgKGluYyBpKSkpXHJcbiAgICBhKSkpKVxyXG4ifSB7OnN5bSBwcmludCwgOm1ldGEgezpkb2MgIlByaW50cyB0aGUgb2JqZWN0KHMpIHVzaW5nIHN0cmluZy1wcmludC5cbiAgcHJpbnQgYW5kIHByaW50bG4gcHJvZHVjZSBvdXRwdXQgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLiJ9LCA6c291cmNlICIoZGVmXHJcbiBwcmludFxyXG4gKGZuXHJcbiAgY2xqcy1jb3JlLXByaW50XHJcbiAgWyYgb2Jqc11cclxuICAocHItd2l0aC1vcHRzIG9ianMgKGFzc29jIChwci1vcHRzKSA6cmVhZGFibHkgZmFsc2UpKSkpXHJcbiJ9IHs6c3ltIC1wZWVrLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaXRlbSBmcm9tIHRoZSB0b3Agb2YgdGhlIHN0YWNrLiBJcyB1c2VkIGJ5IGNsanMuY29yZS9wZWVrLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJU3RhY2t9IHs6c3ltIElTZXEsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgY29sbGVjdGlvbnMgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlaXIgaXRlbXMgYXMgc2VxdWVuY2VzLiJ9LCA6bWV0aG9kcyAoLWZpcnN0IC1yZXN0KX0gezpzeW0gZW1wdHksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGVtcHR5IGNvbGxlY3Rpb24gb2YgdGhlIHNhbWUgY2F0ZWdvcnkgYXMgY29sbCwgb3IgbmlsIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtcHR5XHJcbiBcIlJldHVybnMgYW4gZW1wdHkgY29sbGVjdGlvbiBvZiB0aGUgc2FtZSBjYXRlZ29yeSBhcyBjb2xsLCBvciBuaWxcIlxyXG4gW2NvbGxdXHJcbiAod2hlbi1ub3RcclxuICAobmlsPyBjb2xsKVxyXG4gIChjb25kXHJcbiAgIChpbXBsZW1lbnRzPyBJRW1wdHlhYmxlQ29sbGVjdGlvbiBjb2xsKVxyXG4gICAoLWVtcHR5IGNvbGwpXHJcbiAgIChzYXRpc2ZpZXM/IElFbXB0eWFibGVDb2xsZWN0aW9uIGNvbGwpXHJcbiAgICgtZW1wdHkgY29sbClcclxuICAgOmVsc2VcclxuICAgbmlsKSkpXHJcbiJ9IHs6c3ltIHJlbW92ZS1tZXRob2QsIDptZXRhIHs6ZG9jICJSZW1vdmVzIHRoZSBtZXRob2Qgb2YgbXVsdGltZXRob2QgYXNzb2NpYXRlZCB3aXRoIGRpc3BhdGNoLXZhbHVlLiIsIDphcmdsaXN0cyAoW211bHRpZm4gZGlzcGF0Y2gtdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlLW1ldGhvZFxyXG4gXCJSZW1vdmVzIHRoZSBtZXRob2Qgb2YgbXVsdGltZXRob2QgYXNzb2NpYXRlZCB3aXRoIGRpc3BhdGNoLXZhbHVlLlwiXHJcbiBbbXVsdGlmbiBkaXNwYXRjaC12YWxdXHJcbiAoLXJlbW92ZS1tZXRob2QgbXVsdGlmbiBkaXNwYXRjaC12YWwpKVxyXG4ifSB7OnN5bSB2b2xhdGlsZSEsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGEgVm9sYXRpbGUgd2l0aCBhbiBpbml0aWFsIHZhbHVlIG9mIHZhbC4iLCA6YXJnbGlzdHMgKFt2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB2b2xhdGlsZSFcclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFZvbGF0aWxlIHdpdGggYW4gaW5pdGlhbCB2YWx1ZSBvZiB2YWwuXCJcclxuIFt2YWxdXHJcbiAoVm9sYXRpbGUuIHZhbCkpXHJcbiJ9IHs6c3ltIC8sIDptZXRhIHs6ZG9jICJJZiBubyBkZW5vbWluYXRvcnMgYXJlIHN1cHBsaWVkLCByZXR1cm5zIDEvbnVtZXJhdG9yLFxuICBlbHNlIHJldHVybnMgbnVtZXJhdG9yIGRpdmlkZWQgYnkgYWxsIG9mIHRoZSBkZW5vbWluYXRvcnMuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiAvXHJcbiBcIklmIG5vIGRlbm9taW5hdG9ycyBhcmUgc3VwcGxpZWQsIHJldHVybnMgMS9udW1lcmF0b3IsXFxuICBlbHNlIHJldHVybnMgbnVtZXJhdG9yIGRpdmlkZWQgYnkgYWxsIG9mIHRoZSBkZW5vbWluYXRvcnMuXCJcclxuIChbeF0gKC8gMSB4KSlcclxuIChbeCB5XSAoY2xqcy5jb3JlL2RpdmlkZSB4IHkpKVxyXG4gKFt4IHkgJiBtb3JlXSAocmVkdWNlIC8gKC8geCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIGJpdC1vciwgOm1ldGEgezpkb2MgIkJpdHdpc2Ugb3IiLCA6YXJnbGlzdHMgW1t4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gYml0LW9yXHJcbiBcIkJpdHdpc2Ugb3JcIlxyXG4gKFt4IHldIChjbGpzLmNvcmUvYml0LW9yIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgYml0LW9yIChjbGpzLmNvcmUvYml0LW9yIHggeSkgbW9yZSkpKVxyXG4ifSB7OnN5bSBtMy1mbWl4LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2gxIGxlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG0zLWZtaXhcclxuIFtoMSBsZW5dXHJcbiAoYXMtPlxyXG4gIChpbnQgaDEpXHJcbiAgaDFcclxuICAoYml0LXhvciBoMSBsZW4pXHJcbiAgKGJpdC14b3IgaDEgKHVuc2lnbmVkLWJpdC1zaGlmdC1yaWdodCBoMSAxNikpXHJcbiAgKGltdWwgaDEgKGludCAyMjQ2ODIyNTA3KSlcclxuICAoYml0LXhvciBoMSAodW5zaWduZWQtYml0LXNoaWZ0LXJpZ2h0IGgxIDEzKSlcclxuICAoaW11bCBoMSAoaW50IDMyNjY0ODk5MDkpKVxyXG4gIChiaXQteG9yIGgxICh1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQgaDEgMTYpKSkpXHJcbiJ9IHs6c3ltIHZlY3RvciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFyZ3MuIiwgOmFyZ2xpc3RzIChbJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmVjdG9yXHJcbiBcIkNyZWF0ZXMgYSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIGFyZ3MuXCJcclxuIFsmIGFyZ3NdXHJcbiAoaWZcclxuICAoYW5kIChpbnN0YW5jZT8gSW5kZXhlZFNlcSBhcmdzKSAoemVybz8gKC4taSBhcmdzKSkpXHJcbiAgKC5mcm9tQXJyYXlcclxuICAgUGVyc2lzdGVudFZlY3RvclxyXG4gICAoLi1hcnIgYXJncylcclxuICAgKG5vdCAoYXJyYXk/ICguLWFyciBhcmdzKSkpKVxyXG4gICh2ZWMgYXJncykpKVxyXG4ifSB7OnN5bSA+PSwgOm1ldGEgezpkb2MgIlJldHVybnMgbm9uLW5pbCBpZiBudW1zIGFyZSBpbiBtb25vdG9uaWNhbGx5IG5vbi1pbmNyZWFzaW5nIG9yZGVyLFxuICBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA+PVxyXG4gXCJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhcmUgaW4gbW9ub3RvbmljYWxseSBub24taW5jcmVhc2luZyBvcmRlcixcXG4gIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldIChjbGpzLmNvcmUvPj0geCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKGNsanMuY29yZS8+PSB4IHkpXHJcbiAgIChpZlxyXG4gICAgKG5leHQgbW9yZSlcclxuICAgIChyZWN1ciB5IChmaXJzdCBtb3JlKSAobmV4dCBtb3JlKSlcclxuICAgIChjbGpzLmNvcmUvPj0geSAoZmlyc3QgbW9yZSkpKVxyXG4gICBmYWxzZSkpKVxyXG4ifSB7OnN5bSBkcm9wLWxhc3QsIDptZXRhIHs6ZG9jICJSZXR1cm4gYSBsYXp5IHNlcXVlbmNlIG9mIGFsbCBidXQgdGhlIGxhc3QgbiAoZGVmYXVsdCAxKSBpdGVtcyBpbiBjb2xsIiwgOmFyZ2xpc3RzIFtbc10gW24gc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRyb3AtbGFzdFxyXG4gXCJSZXR1cm4gYSBsYXp5IHNlcXVlbmNlIG9mIGFsbCBidXQgdGhlIGxhc3QgbiAoZGVmYXVsdCAxKSBpdGVtcyBpbiBjb2xsXCJcclxuIChbc10gKGRyb3AtbGFzdCAxIHMpKVxyXG4gKFtuIHNdIChtYXAgKGZuIFt4IF9dIHgpIHMgKGRyb3AgbiBzKSkpKVxyXG4ifSB7OnN5bSBvYmplY3Q/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHgncyBjb25zdHJ1Y3RvciBpcyBPYmplY3QiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gb2JqZWN0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgeCdzIGNvbnN0cnVjdG9yIGlzIE9iamVjdFwiXHJcbiBbeF1cclxuIChpZi1ub3QgKG5pbD8geCkgKGlkZW50aWNhbD8gKC4tY29uc3RydWN0b3IgeCkganMvT2JqZWN0KSBmYWxzZSkpXHJcbiJ9IHs6c3ltIG5vdC1lbXB0eSwgOm1ldGEgezpkb2MgIklmIGNvbGwgaXMgZW1wdHksIHJldHVybnMgbmlsLCBlbHNlIGNvbGwiLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm90LWVtcHR5XHJcbiBcIklmIGNvbGwgaXMgZW1wdHksIHJldHVybnMgbmlsLCBlbHNlIGNvbGxcIlxyXG4gW2NvbGxdXHJcbiAod2hlbiAoc2VxIGNvbGwpIGNvbGwpKVxyXG4ifSB7OnN5bSBkaXN0aW5jdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIHdpdGggZHVwbGljYXRlcyByZW1vdmVkLlxuICBSZXR1cm5zIGEgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbXSBbY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRpc3RpbmN0XHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBlbGVtZW50cyBvZiBjb2xsIHdpdGggZHVwbGljYXRlcyByZW1vdmVkLlxcbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW11cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbc2VlbiAodm9sYXRpbGUhICN7fSldXHJcbiAgICAoZm5cclxuICAgICAoW10gKHJmKSlcclxuICAgICAoW3Jlc3VsdF0gKHJmIHJlc3VsdCkpXHJcbiAgICAgKFtyZXN1bHQgaW5wdXRdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGNvbnRhaW5zPyBAc2VlbiBpbnB1dClcclxuICAgICAgIHJlc3VsdFxyXG4gICAgICAgKGRvICh2c3dhcCEgc2VlbiBjb25qIGlucHV0KSAocmYgcmVzdWx0IGlucHV0KSkpKSkpKSlcclxuIChbY29sbF1cclxuICAobGV0XHJcbiAgIFtzdGVwXHJcbiAgICAoZm5cclxuICAgICBzdGVwXHJcbiAgICAgW3hzIHNlZW5dXHJcbiAgICAgKGxhenktc2VxXHJcbiAgICAgICgoZm5cclxuICAgICAgICBbW2YgOmFzIHhzXSBzZWVuXVxyXG4gICAgICAgICh3aGVuLWxldFxyXG4gICAgICAgICBbcyAoc2VxIHhzKV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICAoY29udGFpbnM/IHNlZW4gZilcclxuICAgICAgICAgIChyZWN1ciAocmVzdCBzKSBzZWVuKVxyXG4gICAgICAgICAgKGNvbnMgZiAoc3RlcCAocmVzdCBzKSAoY29uaiBzZWVuIGYpKSkpKSlcclxuICAgICAgIHhzXHJcbiAgICAgICBzZWVuKSkpXVxyXG4gICAoc3RlcCBjb2xsICN7fSkpKSlcclxuIn0gezpzeW0gcGFydGl0aW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgbGlzdHMgb2YgbiBpdGVtcyBlYWNoLCBhdCBvZmZzZXRzIHN0ZXBcbiAgYXBhcnQuIElmIHN0ZXAgaXMgbm90IHN1cHBsaWVkLCBkZWZhdWx0cyB0byBuLCBpLmUuIHRoZSBwYXJ0aXRpb25zXG4gIGRvIG5vdCBvdmVybGFwLiBJZiBhIHBhZCBjb2xsZWN0aW9uIGlzIHN1cHBsaWVkLCB1c2UgaXRzIGVsZW1lbnRzIGFzXG4gIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBsYXN0IHBhcnRpdGlvbiB1cCB0byBuIGl0ZW1zLiBJbiBjYXNlIHRoZXJlIGFyZVxuICBub3QgZW5vdWdoIHBhZGRpbmcgZWxlbWVudHMsIHJldHVybiBhIHBhcnRpdGlvbiB3aXRoIGxlc3MgdGhhbiBuIGl0ZW1zLiIsIDphcmdsaXN0cyBbW24gY29sbF0gW24gc3RlcCBjb2xsXSBbbiBzdGVwIHBhZCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGl0aW9uXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGxpc3RzIG9mIG4gaXRlbXMgZWFjaCwgYXQgb2Zmc2V0cyBzdGVwXFxuICBhcGFydC4gSWYgc3RlcCBpcyBub3Qgc3VwcGxpZWQsIGRlZmF1bHRzIHRvIG4sIGkuZS4gdGhlIHBhcnRpdGlvbnNcXG4gIGRvIG5vdCBvdmVybGFwLiBJZiBhIHBhZCBjb2xsZWN0aW9uIGlzIHN1cHBsaWVkLCB1c2UgaXRzIGVsZW1lbnRzIGFzXFxuICBuZWNlc3NhcnkgdG8gY29tcGxldGUgbGFzdCBwYXJ0aXRpb24gdXAgdG8gbiBpdGVtcy4gSW4gY2FzZSB0aGVyZSBhcmVcXG4gIG5vdCBlbm91Z2ggcGFkZGluZyBlbGVtZW50cywgcmV0dXJuIGEgcGFydGl0aW9uIHdpdGggbGVzcyB0aGFuIG4gaXRlbXMuXCJcclxuIChbbiBjb2xsXSAocGFydGl0aW9uIG4gbiBjb2xsKSlcclxuIChbbiBzdGVwIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChsZXRcclxuICAgICBbcCAodGFrZSBuIHMpXVxyXG4gICAgICh3aGVuXHJcbiAgICAgICg9PSBuIChjb3VudCBwKSlcclxuICAgICAgKGNvbnMgcCAocGFydGl0aW9uIG4gc3RlcCAoZHJvcCBzdGVwIHMpKSkpKSkpKVxyXG4gKFtuIHN0ZXAgcGFkIGNvbGxdXHJcbiAgKGxhenktc2VxXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW3MgKHNlcSBjb2xsKV1cclxuICAgIChsZXRcclxuICAgICBbcCAodGFrZSBuIHMpXVxyXG4gICAgIChpZlxyXG4gICAgICAoPT0gbiAoY291bnQgcCkpXHJcbiAgICAgIChjb25zIHAgKHBhcnRpdGlvbiBuIHN0ZXAgcGFkIChkcm9wIHN0ZXAgcykpKVxyXG4gICAgICAobGlzdCAodGFrZSBuIChjb25jYXQgcCBwYWQpKSkpKSkpKSlcclxuIn0gezpzeW0gSU11bHRpRm4sIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICgtYWRkLW1ldGhvZCAtZGVmYXVsdC1kaXNwYXRjaC12YWwgLWRpc3BhdGNoLWZuIC1nZXQtbWV0aG9kIC1tZXRob2RzIC1wcmVmZXItbWV0aG9kIC1wcmVmZXJzIC1yZW1vdmUtbWV0aG9kIC1yZXNldCl9IHs6c3ltIERFTVVOR0VfUEFUVEVSTiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgREVNVU5HRV9QQVRURVJOIG5pbClcclxuIn0gezpzeW0gSUFzc29jaWF0aXZlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBhc3NvY2lhdGl2aXR5IHRvIGNvbGxlY3Rpb25zLiJ9LCA6bWV0aG9kcyAoLWFzc29jIC1jb250YWlucy1rZXk/KX0gezpzeW0gYml0LWZsaXAsIDptZXRhIHs6ZG9jICJGbGlwIGJpdCBhdCBpbmRleCBuIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmbiBiaXQtZmxpcCBcIkZsaXAgYml0IGF0IGluZGV4IG5cIiBbeCBuXSAoY2xqcy5jb3JlL2JpdC1mbGlwIHggbikpXHJcbiJ9IHs6c3ltIGxvbmctYXJyYXksIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuIGFycmF5IG9mIGxvbmdzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XG4gIHdpdGggQ2xvanVyZS4iLCA6YXJnbGlzdHMgW1tzaXplLW9yLXNlcV0gW3NpemUgaW5pdC12YWwtb3Itc2VxXV19LCA6c291cmNlICIoZGVmblxyXG4gbG9uZy1hcnJheVxyXG4gXCJDcmVhdGVzIGFuIGFycmF5IG9mIGxvbmdzLiBEb2VzIG5vdCBjb2VyY2UgYXJyYXksIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5XFxuICB3aXRoIENsb2p1cmUuXCJcclxuIChbc2l6ZS1vci1zZXFdXHJcbiAgKGlmXHJcbiAgIChudW1iZXI/IHNpemUtb3Itc2VxKVxyXG4gICAobG9uZy1hcnJheSBzaXplLW9yLXNlcSBuaWwpXHJcbiAgIChpbnRvLWFycmF5IHNpemUtb3Itc2VxKSkpXHJcbiAoW3NpemUgaW5pdC12YWwtb3Itc2VxXVxyXG4gIChsZXRcclxuICAgW2EgKG1ha2UtYXJyYXkgc2l6ZSldXHJcbiAgIChpZlxyXG4gICAgKHNlcT8gaW5pdC12YWwtb3Itc2VxKVxyXG4gICAgKGxldFxyXG4gICAgIFtzIChzZXEgaW5pdC12YWwtb3Itc2VxKV1cclxuICAgICAobG9vcFxyXG4gICAgICBbaSAwIHMgc11cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kIHMgKDwgaSBzaXplKSlcclxuICAgICAgIChkbyAoYXNldCBhIGkgKGZpcnN0IHMpKSAocmVjdXIgKGluYyBpKSAobmV4dCBzKSkpXHJcbiAgICAgICBhKSkpXHJcbiAgICAoZG8gKGRvdGltZXMgW2kgc2l6ZV0gKGFzZXQgYSBpIGluaXQtdmFsLW9yLXNlcSkpIGEpKSkpKVxyXG4ifSB7OnN5bSBkZXNjZW5kYW50cywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGltbWVkaWF0ZSBhbmQgaW5kaXJlY3QgY2hpbGRyZW4gb2YgdGFnLCB0aHJvdWdoIGFcbiAgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZFxuICBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWQgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbFxuICBoaWVyYXJjaHkuIE5vdGU6IGRvZXMgbm90IHdvcmsgb24gSmF2YVNjcmlwdCB0eXBlIGluaGVyaXRhbmNlXG4gIHJlbGF0aW9uc2hpcHMuIiwgOmFyZ2xpc3RzIFtbdGFnXSBbaCB0YWddXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXNjZW5kYW50c1xyXG4gXCJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgYW5kIGluZGlyZWN0IGNoaWxkcmVuIG9mIHRhZywgdGhyb3VnaCBhXFxuICByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkXFxuICBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3Qgc3VwcGxpZWQgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbFxcbiAgaGllcmFyY2h5LiBOb3RlOiBkb2VzIG5vdCB3b3JrIG9uIEphdmFTY3JpcHQgdHlwZSBpbmhlcml0YW5jZVxcbiAgcmVsYXRpb25zaGlwcy5cIlxyXG4gKFt0YWddIChkZXNjZW5kYW50cyBAKGdldC1nbG9iYWwtaGllcmFyY2h5KSB0YWcpKVxyXG4gKFtoIHRhZ10gKG5vdC1lbXB0eSAoZ2V0ICg6ZGVzY2VuZGFudHMgaCkgdGFnKSkpKVxyXG4ifSB7OnN5bSBtZXJnZSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBtYXAgdGhhdCBjb25zaXN0cyBvZiB0aGUgcmVzdCBvZiB0aGUgbWFwcyBjb25qLWVkIG9udG9cbiAgdGhlIGZpcnN0LiAgSWYgYSBrZXkgb2NjdXJzIGluIG1vcmUgdGhhbiBvbmUgbWFwLCB0aGUgbWFwcGluZyBmcm9tXG4gIHRoZSBsYXR0ZXIgKGxlZnQtdG8tcmlnaHQpIHdpbGwgYmUgdGhlIG1hcHBpbmcgaW4gdGhlIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFsmIG1hcHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZVxyXG4gXCJSZXR1cm5zIGEgbWFwIHRoYXQgY29uc2lzdHMgb2YgdGhlIHJlc3Qgb2YgdGhlIG1hcHMgY29uai1lZCBvbnRvXFxuICB0aGUgZmlyc3QuICBJZiBhIGtleSBvY2N1cnMgaW4gbW9yZSB0aGFuIG9uZSBtYXAsIHRoZSBtYXBwaW5nIGZyb21cXG4gIHRoZSBsYXR0ZXIgKGxlZnQtdG8tcmlnaHQpIHdpbGwgYmUgdGhlIG1hcHBpbmcgaW4gdGhlIHJlc3VsdC5cIlxyXG4gWyYgbWFwc11cclxuICh3aGVuXHJcbiAgKHNvbWUgaWRlbnRpdHkgbWFwcylcclxuICAocmVkdWNlXHJcbiAgIChmbiogW3AxX180ODgyNiMgcDJfXzQ4ODI3I10gKGNvbmogKG9yIHAxX180ODgyNiMge30pIHAyX180ODgyNyMpKVxyXG4gICBtYXBzKSkpXHJcbiJ9IHs6c3ltIElTZXFhYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB0aGUgYWJpbGl0eSB0byBhIHR5cGUgdG8gYmUgdHJhbnNmb3JtZWQgaW50byBhIHNlcXVlbmNlLiJ9LCA6bWV0aG9kcyAoLXNlcSl9IHs6c3ltIGpzLW1vZCwgOm1ldGEgezpkb2MgIk1vZHVsdXMgb2YgbnVtIGFuZCBkaXYgd2l0aCBvcmlnaW5hbCBqYXZhc2NyaXB0IGJlaGF2aW9yLiBpLmUuIGJ1ZyBmb3IgbmVnYXRpdmUgbnVtYmVycyIsIDphcmdsaXN0cyAoW24gZF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLW1vZFxyXG4gXCJNb2R1bHVzIG9mIG51bSBhbmQgZGl2IHdpdGggb3JpZ2luYWwgamF2YXNjcmlwdCBiZWhhdmlvci4gaS5lLiBidWcgZm9yIG5lZ2F0aXZlIG51bWJlcnNcIlxyXG4gW24gZF1cclxuIChjbGpzLmNvcmUvanMtbW9kIG4gZCkpXHJcbiJ9IHs6c3ltIGludGVnZXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIG4gaXMgYSBKYXZhU2NyaXB0IG51bWJlciB3aXRoIG5vIGRlY2ltYWwgcGFydC4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50ZWdlcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIG4gaXMgYSBKYXZhU2NyaXB0IG51bWJlciB3aXRoIG5vIGRlY2ltYWwgcGFydC5cIlxyXG4gW25dXHJcbiAoYW5kXHJcbiAgKG51bWJlcj8gbilcclxuICAobm90IChqcy9pc05hTiBuKSlcclxuICAobm90IChpZGVudGljYWw/IG4ganMvSW5maW5pdHkpKVxyXG4gICg9PSAoanMvcGFyc2VGbG9hdCBuKSAoanMvcGFyc2VJbnQgbiAxMCkpKSlcclxuIn0gezpzeW0gTlNfQ0FDSEUsIDptZXRhIHs6ZG9jICJCb290c3RyYXAgb25seS4ifSwgOnNvdXJjZSAiKGRlZiBOU19DQUNIRSBuaWwpXHJcbiJ9IHs6c3ltIG1hcHYsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdmVjdG9yIGNvbnNpc3Rpbmcgb2YgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBmIHRvIHRoZVxuICBzZXQgb2YgZmlyc3QgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIHRoZSBzZXRcbiAgb2Ygc2Vjb25kIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXNcbiAgZXhoYXVzdGVkLiAgQW55IHJlbWFpbmluZyBpdGVtcyBpbiBvdGhlciBjb2xscyBhcmUgaWdub3JlZC4gRnVuY3Rpb25cbiAgZiBzaG91bGQgYWNjZXB0IG51bWJlci1vZi1jb2xscyBhcmd1bWVudHMuIiwgOmFyZ2xpc3RzIFtbZiBjb2xsXSBbZiBjMSBjMl0gW2YgYzEgYzIgYzNdIFtmIGMxIGMyIGMzICYgY29sbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXB2XHJcbiBcIlJldHVybnMgYSB2ZWN0b3IgY29uc2lzdGluZyBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGYgdG8gdGhlXFxuICBzZXQgb2YgZmlyc3QgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSBhcHBseWluZyBmIHRvIHRoZSBzZXRcXG4gIG9mIHNlY29uZCBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzXFxuICBleGhhdXN0ZWQuICBBbnkgcmVtYWluaW5nIGl0ZW1zIGluIG90aGVyIGNvbGxzIGFyZSBpZ25vcmVkLiBGdW5jdGlvblxcbiAgZiBzaG91bGQgYWNjZXB0IG51bWJlci1vZi1jb2xscyBhcmd1bWVudHMuXCJcclxuIChbZiBjb2xsXVxyXG4gICgtPlxyXG4gICAocmVkdWNlIChmbiBbdiBvXSAoY29uaiEgdiAoZiBvKSkpICh0cmFuc2llbnQgW10pIGNvbGwpXHJcbiAgIHBlcnNpc3RlbnQhKSlcclxuIChbZiBjMSBjMl0gKGludG8gW10gKG1hcCBmIGMxIGMyKSkpXHJcbiAoW2YgYzEgYzIgYzNdIChpbnRvIFtdIChtYXAgZiBjMSBjMiBjMykpKVxyXG4gKFtmIGMxIGMyIGMzICYgY29sbHNdIChpbnRvIFtdIChhcHBseSBtYXAgZiBjMSBjMiBjMyBjb2xscykpKSlcclxuIn0gezpzeW0gaW5maW5pdGU/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGZvciBJbmZpbml0eSBhbmQgLUluZmluaXR5IHZhbHVlcy4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5maW5pdGU/XHJcbiBcIlJldHVybnMgdHJ1ZSBmb3IgSW5maW5pdHkgYW5kIC1JbmZpbml0eSB2YWx1ZXMuXCJcclxuIFt4XVxyXG4gKG9yXHJcbiAgKGlkZW50aWNhbD8geCBqcy9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXHJcbiAgKGlkZW50aWNhbD8geCBqcy9OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSlcclxuIn0gezpzeW0gcGFydGl0aW9uLWFsbCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGxpc3RzIGxpa2UgcGFydGl0aW9uLCBidXQgbWF5IGluY2x1ZGVcbiAgcGFydGl0aW9ucyB3aXRoIGZld2VyIHRoYW4gbiBpdGVtcyBhdCB0aGUgZW5kLiAgUmV0dXJucyBhIHN0YXRlZnVsXG4gIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW25dIFtuIGNvbGxdIFtuIHN0ZXAgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnRpdGlvbi1hbGxcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgbGlzdHMgbGlrZSBwYXJ0aXRpb24sIGJ1dCBtYXkgaW5jbHVkZVxcbiAgcGFydGl0aW9ucyB3aXRoIGZld2VyIHRoYW4gbiBpdGVtcyBhdCB0aGUgZW5kLiAgUmV0dXJucyBhIHN0YXRlZnVsXFxuICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC5cIlxyXG4gKFtuXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChsZXRcclxuICAgIFthIChhcnJheS1saXN0KV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcmVzdWx0XHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICguaXNFbXB0eSBhKVxyXG4gICAgICAgICByZXN1bHRcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3YgKHZlYyAoLnRvQXJyYXkgYSkpXVxyXG4gICAgICAgICAgKC5jbGVhciBhKVxyXG4gICAgICAgICAgKHVucmVkdWNlZCAocmYgcmVzdWx0IHYpKSkpXVxyXG4gICAgICAgKHJmIHJlc3VsdCkpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAoLmFkZCBhIGlucHV0KVxyXG4gICAgICAoaWZcclxuICAgICAgICg9PSBuICguc2l6ZSBhKSlcclxuICAgICAgIChsZXQgW3YgKHZlYyAoLnRvQXJyYXkgYSkpXSAoLmNsZWFyIGEpIChyZiByZXN1bHQgdikpXHJcbiAgICAgICByZXN1bHQpKSkpKSlcclxuIChbbiBjb2xsXSAocGFydGl0aW9uLWFsbCBuIG4gY29sbCkpXHJcbiAoW24gc3RlcCBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAoY29ucyAodGFrZSBuIHMpIChwYXJ0aXRpb24tYWxsIG4gc3RlcCAoZHJvcCBzdGVwIHMpKSkpKSkpXHJcbiJ9IHs6c3ltIHBhcnRpdGlvbi1ieSwgOm1ldGEgezpkb2MgIkFwcGxpZXMgZiB0byBlYWNoIHZhbHVlIGluIGNvbGwsIHNwbGl0dGluZyBpdCBlYWNoIHRpbWUgZiByZXR1cm5zIGFcbiAgIG5ldyB2YWx1ZS4gIFJldHVybnMgYSBsYXp5IHNlcSBvZiBwYXJ0aXRpb25zLiAgUmV0dXJucyBhIHN0YXRlZnVsXG4gICB0cmFuc2R1Y2VyIHdoZW4gbm8gY29sbGVjdGlvbiBpcyBwcm92aWRlZC4iLCA6YXJnbGlzdHMgW1tmXSBbZiBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGl0aW9uLWJ5XHJcbiBcIkFwcGxpZXMgZiB0byBlYWNoIHZhbHVlIGluIGNvbGwsIHNwbGl0dGluZyBpdCBlYWNoIHRpbWUgZiByZXR1cm5zIGFcXG4gICBuZXcgdmFsdWUuICBSZXR1cm5zIGEgbGF6eSBzZXEgb2YgcGFydGl0aW9ucy4gIFJldHVybnMgYSBzdGF0ZWZ1bFxcbiAgIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW2ZdXHJcbiAgKGZuXHJcbiAgIFtyZl1cclxuICAgKGxldFxyXG4gICAgW2EgKGFycmF5LWxpc3QpIHBhICh2b2xhdGlsZSEgOmNsanMuY29yZS9ub25lKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcmVzdWx0XHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICguaXNFbXB0eSBhKVxyXG4gICAgICAgICByZXN1bHRcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3YgKHZlYyAoLnRvQXJyYXkgYSkpXVxyXG4gICAgICAgICAgKC5jbGVhciBhKVxyXG4gICAgICAgICAgKHVucmVkdWNlZCAocmYgcmVzdWx0IHYpKSkpXVxyXG4gICAgICAgKHJmIHJlc3VsdCkpKVxyXG4gICAgIChbcmVzdWx0IGlucHV0XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcHZhbCBAcGEgdmFsIChmIGlucHV0KV1cclxuICAgICAgICh2cmVzZXQhIHBhIHZhbClcclxuICAgICAgIChpZlxyXG4gICAgICAgIChvciAoa2V5d29yZC1pZGVudGljYWw/IHB2YWwgOmNsanMuY29yZS9ub25lKSAoPSB2YWwgcHZhbCkpXHJcbiAgICAgICAgKGRvICguYWRkIGEgaW5wdXQpIHJlc3VsdClcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFt2ICh2ZWMgKC50b0FycmF5IGEpKV1cclxuICAgICAgICAgKC5jbGVhciBhKVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbcmV0IChyZiByZXN1bHQgdildXHJcbiAgICAgICAgICAod2hlbi1ub3QgKHJlZHVjZWQ/IHJldCkgKC5hZGQgYSBpbnB1dCkpXHJcbiAgICAgICAgICByZXQpKSkpKSkpKSlcclxuIChbZiBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAobGV0XHJcbiAgICAgW2ZzdFxyXG4gICAgICAoZmlyc3QgcylcclxuICAgICAgZnZcclxuICAgICAgKGYgZnN0KVxyXG4gICAgICBydW5cclxuICAgICAgKGNvbnNcclxuICAgICAgIGZzdFxyXG4gICAgICAgKHRha2Utd2hpbGUgKGZuKiBbcDFfXzQ4ODM4I10gKD0gZnYgKGYgcDFfXzQ4ODM4IykpKSAobmV4dCBzKSkpXVxyXG4gICAgIChjb25zIHJ1biAocGFydGl0aW9uLWJ5IGYgKGxhenktc2VxIChkcm9wIChjb3VudCBydW4pIHMpKSkpKSkpKSlcclxuIn0gezpzeW0gSVNlcXVlbnRpYWwsIDptZXRhIHs6ZG9jICJNYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgYSBwZXJzaXN0ZW50IGNvbGxlY3Rpb24gb2Ygc2VxdWVudGlhbCBpdGVtcyJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gZXF1aXYtbWFwLCA6bWV0YSB7OmRvYyAiVGVzdCBtYXAgZXF1aXZhbGVuY2UuIFJldHVybnMgdHJ1ZSBpZiB4IGVxdWFscyB5LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4iLCA6YXJnbGlzdHMgKFt4IHldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlcXVpdi1tYXBcclxuIFwiVGVzdCBtYXAgZXF1aXZhbGVuY2UuIFJldHVybnMgdHJ1ZSBpZiB4IGVxdWFscyB5LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cIlxyXG4gW3ggeV1cclxuIChib29sZWFuXHJcbiAgKHdoZW5cclxuICAgKGFuZCAobWFwPyB5KSAobm90IChyZWNvcmQ/IHkpKSlcclxuICAgKHdoZW5cclxuICAgICg9PSAoY291bnQgeCkgKGNvdW50IHkpKVxyXG4gICAgKGlmXHJcbiAgICAgKHNhdGlzZmllcz8gSUtWUmVkdWNlIHgpXHJcbiAgICAgKHJlZHVjZS1rdlxyXG4gICAgICAoZm5cclxuICAgICAgIFtfIGsgdl1cclxuICAgICAgIChpZiAoPSAoZ2V0IHkgayBuZXZlci1lcXVpdikgdikgdHJ1ZSAocmVkdWNlZCBmYWxzZSkpKVxyXG4gICAgICB0cnVlXHJcbiAgICAgIHgpXHJcbiAgICAgKGV2ZXJ5P1xyXG4gICAgICAoZm4gW3hrdl0gKD0gKGdldCB5IChmaXJzdCB4a3YpIG5ldmVyLWVxdWl2KSAoc2Vjb25kIHhrdikpKVxyXG4gICAgICB4KSkpKSkpXHJcbiJ9IHs6c3ltIG9iamVjdC1hcnJheSwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4gRG9lcyBub3QgY29lcmNlIGFycmF5LCBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eVxuICB3aXRoIENsb2p1cmUuIiwgOmFyZ2xpc3RzIFtbc2l6ZS1vci1zZXFdIFtzaXplIGluaXQtdmFsLW9yLXNlcV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG9iamVjdC1hcnJheVxyXG4gXCJDcmVhdGVzIGFuIGFycmF5IG9mIG9iamVjdHMuIERvZXMgbm90IGNvZXJjZSBhcnJheSwgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHlcXG4gIHdpdGggQ2xvanVyZS5cIlxyXG4gKFtzaXplLW9yLXNlcV1cclxuICAoaWZcclxuICAgKG51bWJlcj8gc2l6ZS1vci1zZXEpXHJcbiAgIChvYmplY3QtYXJyYXkgc2l6ZS1vci1zZXEgbmlsKVxyXG4gICAoaW50by1hcnJheSBzaXplLW9yLXNlcSkpKVxyXG4gKFtzaXplIGluaXQtdmFsLW9yLXNlcV1cclxuICAobGV0XHJcbiAgIFthIChtYWtlLWFycmF5IHNpemUpXVxyXG4gICAoaWZcclxuICAgIChzZXE/IGluaXQtdmFsLW9yLXNlcSlcclxuICAgIChsZXRcclxuICAgICBbcyAoc2VxIGluaXQtdmFsLW9yLXNlcSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW2kgMCBzIHNdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCBzICg8IGkgc2l6ZSkpXHJcbiAgICAgICAoZG8gKGFzZXQgYSBpIChmaXJzdCBzKSkgKHJlY3VyIChpbmMgaSkgKG5leHQgcykpKVxyXG4gICAgICAgYSkpKVxyXG4gICAgKGRvIChkb3RpbWVzIFtpIHNpemVdIChhc2V0IGEgaSBpbml0LXZhbC1vci1zZXEpKSBhKSkpKSlcclxuIn0gezpzeW0gZGVyaXZlLCA6bWV0YSB7OmRvYyAiRXN0YWJsaXNoZXMgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGJldHdlZW4gcGFyZW50IGFuZFxuICB0YWcuIFBhcmVudCBtdXN0IGJlIGEgbmFtZXNwYWNlLXF1YWxpZmllZCBzeW1ib2wgb3Iga2V5d29yZCBhbmRcbiAgY2hpbGQgY2FuIGJlIGVpdGhlciBhIG5hbWVzcGFjZS1xdWFsaWZpZWQgc3ltYm9sIG9yIGtleXdvcmQgb3IgYVxuICBjbGFzcy4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdFxuICBzdXBwbGllZCBkZWZhdWx0cyB0bywgYW5kIG1vZGlmaWVzLCB0aGUgZ2xvYmFsIGhpZXJhcmNoeS4iLCA6YXJnbGlzdHMgW1t0YWcgcGFyZW50XSBbaCB0YWcgcGFyZW50XV19LCA6c291cmNlICIoZGVmblxyXG4gZGVyaXZlXHJcbiBcIkVzdGFibGlzaGVzIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhcmVudCBhbmRcXG4gIHRhZy4gUGFyZW50IG11c3QgYmUgYSBuYW1lc3BhY2UtcXVhbGlmaWVkIHN5bWJvbCBvciBrZXl3b3JkIGFuZFxcbiAgY2hpbGQgY2FuIGJlIGVpdGhlciBhIG5hbWVzcGFjZS1xdWFsaWZpZWQgc3ltYm9sIG9yIGtleXdvcmQgb3IgYVxcbiAgY2xhc3MuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3RcXG4gIHN1cHBsaWVkIGRlZmF1bHRzIHRvLCBhbmQgbW9kaWZpZXMsIHRoZSBnbG9iYWwgaGllcmFyY2h5LlwiXHJcbiAoW3RhZyBwYXJlbnRdXHJcbiAgKGFzc2VydCAobmFtZXNwYWNlIHBhcmVudCkpXHJcbiAgKHN3YXAtZ2xvYmFsLWhpZXJhcmNoeSEgZGVyaXZlIHRhZyBwYXJlbnQpXHJcbiAgbmlsKVxyXG4gKFtoIHRhZyBwYXJlbnRdXHJcbiAgKGFzc2VydCAobm90PSB0YWcgcGFyZW50KSlcclxuICAobGV0XHJcbiAgIFt0cFxyXG4gICAgKDpwYXJlbnRzIGgpXHJcbiAgICB0ZFxyXG4gICAgKDpkZXNjZW5kYW50cyBoKVxyXG4gICAgdGFcclxuICAgICg6YW5jZXN0b3JzIGgpXHJcbiAgICB0ZlxyXG4gICAgKGZuXHJcbiAgICAgW20gc291cmNlIHNvdXJjZXMgdGFyZ2V0IHRhcmdldHNdXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm5cclxuICAgICAgIFtyZXQga11cclxuICAgICAgIChhc3NvY1xyXG4gICAgICAgIHJldFxyXG4gICAgICAgIGtcclxuICAgICAgICAocmVkdWNlXHJcbiAgICAgICAgIGNvbmpcclxuICAgICAgICAgKGdldCB0YXJnZXRzIGsgI3t9KVxyXG4gICAgICAgICAoY29ucyB0YXJnZXQgKHRhcmdldHMgdGFyZ2V0KSkpKSlcclxuICAgICAgbVxyXG4gICAgICAoY29ucyBzb3VyY2UgKHNvdXJjZXMgc291cmNlKSkpKV1cclxuICAgKG9yXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoY29udGFpbnM/ICh0cCB0YWcpIHBhcmVudClcclxuICAgICAod2hlblxyXG4gICAgICAoY29udGFpbnM/ICh0YSB0YWcpIHBhcmVudClcclxuICAgICAgKHRocm93IChqcy9FcnJvci4gKHN0ciB0YWcgXCJhbHJlYWR5IGhhc1wiIHBhcmVudCBcImFzIGFuY2VzdG9yXCIpKSkpXHJcbiAgICAgKHdoZW5cclxuICAgICAgKGNvbnRhaW5zPyAodGEgcGFyZW50KSB0YWcpXHJcbiAgICAgICh0aHJvd1xyXG4gICAgICAgKGpzL0Vycm9yLlxyXG4gICAgICAgIChzdHIgXCJDeWNsaWMgZGVyaXZhdGlvbjpcIiBwYXJlbnQgXCJoYXNcIiB0YWcgXCJhcyBhbmNlc3RvclwiKSkpKVxyXG4gICAgIHs6cGFyZW50cyAoYXNzb2MgKDpwYXJlbnRzIGgpIHRhZyAoY29uaiAoZ2V0IHRwIHRhZyAje30pIHBhcmVudCkpLFxyXG4gICAgICA6YW5jZXN0b3JzICh0ZiAoOmFuY2VzdG9ycyBoKSB0YWcgdGQgcGFyZW50IHRhKSxcclxuICAgICAgOmRlc2NlbmRhbnRzICh0ZiAoOmRlc2NlbmRhbnRzIGgpIHBhcmVudCB0YSB0YWcgdGQpfSlcclxuICAgIGgpKSkpXHJcbiJ9IHs6c3ltIHNlcS1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuIHNlcS1pdGVyIFtjb2xsXSAoU2VxSXRlci4gSU5JVCBjb2xsKSlcclxuIn0gezpzeW0gSUNodW5rZWRTZXEsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYWNjZXNzaW5nIGEgY29sbGVjdGlvbiBhcyBzZXF1ZW50aWFsIGNodW5rcy4ifSwgOm1ldGhvZHMgKC1jaHVua2VkLWZpcnN0IC1jaHVua2VkLXJlc3QpfSB7OnN5bSBzcGVjaWFsLXN5bWJvbD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBuYW1lcyBhIHNwZWNpYWwgZm9ybSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGVjaWFsLXN5bWJvbD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggbmFtZXMgYSBzcGVjaWFsIGZvcm1cIlxyXG4gW3hdXHJcbiAoY29udGFpbnM/XHJcbiAgJyN7JiBjYXNlKiBkZWZyZWNvcmQqIHRyeSBucyogZmluYWxseSBsb29wKiBkbyBsZXRmbiogaWYgbmV3IG5zXHJcbiAgICAgZGVmdHlwZSogbGV0KiBqcyogZm4qIHJlY3VyIHNldCEgLiB2YXIgcXVvdGUgY2F0Y2ggdGhyb3cgZGVmfVxyXG4gIHgpKVxyXG4ifSB7OnN5bSBhbmNlc3RvcnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgYW5kIGluZGlyZWN0IHBhcmVudHMgb2YgdGFnLCBlaXRoZXIgdmlhIGEgSmF2YVNjcmlwdCB0eXBlXG4gIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoXG4gIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkXG4gIGRlZmF1bHRzIHRvIHRoZSBnbG9iYWwgaGllcmFyY2h5IiwgOmFyZ2xpc3RzIFtbdGFnXSBbaCB0YWddXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmNlc3RvcnNcclxuIFwiUmV0dXJucyB0aGUgaW1tZWRpYXRlIGFuZCBpbmRpcmVjdCBwYXJlbnRzIG9mIHRhZywgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZVxcbiAgaW5oZXJpdGFuY2UgcmVsYXRpb25zaGlwIG9yIGEgcmVsYXRpb25zaGlwIGVzdGFibGlzaGVkIHZpYSBkZXJpdmUuIGhcXG4gIG11c3QgYmUgYSBoaWVyYXJjaHkgb2J0YWluZWQgZnJvbSBtYWtlLWhpZXJhcmNoeSwgaWYgbm90IHN1cHBsaWVkXFxuICBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGhpZXJhcmNoeVwiXHJcbiAoW3RhZ10gKGFuY2VzdG9ycyBAKGdldC1nbG9iYWwtaGllcmFyY2h5KSB0YWcpKVxyXG4gKFtoIHRhZ10gKG5vdC1lbXB0eSAoZ2V0ICg6YW5jZXN0b3JzIGgpIHRhZykpKSlcclxuIn0gezpzeW0gc3Vic2VxLCA6bWV0YSB7OmRvYyAic2MgbXVzdCBiZSBhIHNvcnRlZCBjb2xsZWN0aW9uLCB0ZXN0KHMpIG9uZSBvZiA8LCA8PSwgPiBvclxuICA+PS4gUmV0dXJucyBhIHNlcSBvZiB0aG9zZSBlbnRyaWVzIHdpdGgga2V5cyBlayBmb3JcbiAgd2hpY2ggKHRlc3QgKC4uIHNjIGNvbXBhcmF0b3IgKGNvbXBhcmUgZWsga2V5KSkgMCkgaXMgdHJ1ZSIsIDphcmdsaXN0cyBbW3NjIHRlc3Qga2V5XSBbc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkgZW5kLXRlc3QgZW5kLWtleV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1YnNlcVxyXG4gXCJzYyBtdXN0IGJlIGEgc29ydGVkIGNvbGxlY3Rpb24sIHRlc3Qocykgb25lIG9mIDwsIDw9LCA+IG9yXFxuICA+PS4gUmV0dXJucyBhIHNlcSBvZiB0aG9zZSBlbnRyaWVzIHdpdGgga2V5cyBlayBmb3JcXG4gIHdoaWNoICh0ZXN0ICguLiBzYyBjb21wYXJhdG9yIChjb21wYXJlIGVrIGtleSkpIDApIGlzIHRydWVcIlxyXG4gKFtzYyB0ZXN0IGtleV1cclxuICAobGV0XHJcbiAgIFtpbmNsdWRlIChtay1ib3VuZC1mbiBzYyB0ZXN0IGtleSldXHJcbiAgIChpZlxyXG4gICAgKCN7PiA+PX0gdGVzdClcclxuICAgICh3aGVuLWxldFxyXG4gICAgIFtbZSA6YXMgc10gKC1zb3J0ZWQtc2VxLWZyb20gc2Mga2V5IHRydWUpXVxyXG4gICAgIChpZiAoaW5jbHVkZSBlKSBzIChuZXh0IHMpKSlcclxuICAgICh0YWtlLXdoaWxlIGluY2x1ZGUgKC1zb3J0ZWQtc2VxIHNjIHRydWUpKSkpKVxyXG4gKFtzYyBzdGFydC10ZXN0IHN0YXJ0LWtleSBlbmQtdGVzdCBlbmQta2V5XVxyXG4gICh3aGVuLWxldFxyXG4gICBbW2UgOmFzIHNdICgtc29ydGVkLXNlcS1mcm9tIHNjIHN0YXJ0LWtleSB0cnVlKV1cclxuICAgKHRha2Utd2hpbGVcclxuICAgIChtay1ib3VuZC1mbiBzYyBlbmQtdGVzdCBlbmQta2V5KVxyXG4gICAgKGlmICgobWstYm91bmQtZm4gc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkpIGUpIHMgKG5leHQgcykpKSkpKVxyXG4ifSB7OnN5bSBnZW5zeW0sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHN5bWJvbCB3aXRoIGEgdW5pcXVlIG5hbWUuIElmIGEgcHJlZml4IHN0cmluZyBpc1xuICBzdXBwbGllZCwgdGhlIG5hbWUgaXMgcHJlZml4IyB3aGVyZSAjIGlzIHNvbWUgdW5pcXVlIG51bWJlci4gSWZcbiAgcHJlZml4IGlzIG5vdCBzdXBwbGllZCwgdGhlIHByZWZpeCBpcyAnR19fJy4iLCA6YXJnbGlzdHMgW1tdIFtwcmVmaXgtc3RyaW5nXV19LCA6c291cmNlICIoZGVmblxyXG4gZ2Vuc3ltXHJcbiBcIlJldHVybnMgYSBuZXcgc3ltYm9sIHdpdGggYSB1bmlxdWUgbmFtZS4gSWYgYSBwcmVmaXggc3RyaW5nIGlzXFxuICBzdXBwbGllZCwgdGhlIG5hbWUgaXMgcHJlZml4IyB3aGVyZSAjIGlzIHNvbWUgdW5pcXVlIG51bWJlci4gSWZcXG4gIHByZWZpeCBpcyBub3Qgc3VwcGxpZWQsIHRoZSBwcmVmaXggaXMgJ0dfXycuXCJcclxuIChbXSAoZ2Vuc3ltIFwiR19fXCIpKVxyXG4gKFtwcmVmaXgtc3RyaW5nXVxyXG4gICh3aGVuIChuaWw/IGdlbnN5bV9jb3VudGVyKSAoc2V0ISBnZW5zeW1fY291bnRlciAoYXRvbSAwKSkpXHJcbiAgKHN5bWJvbCAoc3RyIHByZWZpeC1zdHJpbmcgKHN3YXAhIGdlbnN5bV9jb3VudGVyIGluYykpKSkpXHJcbiJ9IHs6c3ltIC1uZXh0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldyBjb2xsZWN0aW9uIG9mIGNvbGwgd2l0aG91dCB0aGUgZmlyc3QgaXRlbS4gSW4gY29udHJhc3QgdG9cbiAgICAgcmVzdCwgaXQgc2hvdWxkIHJldHVybiBuaWwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMsIGUuZy5cbiAgICAgKG5leHQgW10pID0+IG5pbFxuICAgICAobmV4dCBuaWwpID0+IG5pbCIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJTmV4dH0gezpzeW0gZGVsYXk/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB0cnVlIGlmIHggaXMgYSBEZWxheSBjcmVhdGVkIHdpdGggZGVsYXkiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVsYXk/XHJcbiBcInJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgRGVsYXkgY3JlYXRlZCB3aXRoIGRlbGF5XCJcclxuIFt4XVxyXG4gKGluc3RhbmNlPyBEZWxheSB4KSlcclxuIn0gezpzeW0gZmxhdHRlbiwgOm1ldGEgezpkb2MgIlRha2VzIGFueSBuZXN0ZWQgY29tYmluYXRpb24gb2Ygc2VxdWVudGlhbCB0aGluZ3MgKGxpc3RzLCB2ZWN0b3JzLFxuICBldGMuKSBhbmQgcmV0dXJucyB0aGVpciBjb250ZW50cyBhcyBhIHNpbmdsZSwgZmxhdCBzZXF1ZW5jZS5cbiAgKGZsYXR0ZW4gbmlsKSByZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZmxhdHRlblxyXG4gXCJUYWtlcyBhbnkgbmVzdGVkIGNvbWJpbmF0aW9uIG9mIHNlcXVlbnRpYWwgdGhpbmdzIChsaXN0cywgdmVjdG9ycyxcXG4gIGV0Yy4pIGFuZCByZXR1cm5zIHRoZWlyIGNvbnRlbnRzIGFzIGEgc2luZ2xlLCBmbGF0IHNlcXVlbmNlLlxcbiAgKGZsYXR0ZW4gbmlsKSByZXR1cm5zIG5pbC5cIlxyXG4gW3hdXHJcbiAoZmlsdGVyXHJcbiAgKGZuKiBbcDFfXzQ4ODI0I10gKG5vdCAoc2VxdWVudGlhbD8gcDFfXzQ4ODI0IykpKVxyXG4gIChyZXN0ICh0cmVlLXNlcSBzZXF1ZW50aWFsPyBzZXEgeCkpKSlcclxuIn0gezpzeW0gLWRpc3NvYywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBuZXcgY29sbGVjdGlvbiBvZiBjb2xsIHdpdGhvdXQgdGhlIG1hcHBpbmcgZm9yIGtleSBrLiIsIDphcmdsaXN0cyAoW2NvbGwga10pfSwgOnByb3RvY29sIElNYXB9IHs6c3ltIGRvdWJsZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gZG91YmxlcyBbeF0geClcclxuIn0gezpzeW0gaGFsdC13aGVuLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBlbmRzIHRyYW5zZHVjdGlvbiB3aGVuIHByZWQgcmV0dXJucyB0cnVlXG4gIGZvciBhbiBpbnB1dC4gV2hlbiByZXRmIGlzIHN1cHBsaWVkIGl0IG11c3QgYmUgYSBmbiBvZiAyIGFyZ3VtZW50cyAtXG4gIGl0IHdpbGwgYmUgcGFzc2VkIHRoZSAoY29tcGxldGVkKSByZXN1bHQgc28gZmFyIGFuZCB0aGUgaW5wdXQgdGhhdFxuICB0cmlnZ2VyZWQgdGhlIHByZWRpY2F0ZSwgYW5kIGl0cyByZXR1cm4gdmFsdWUgKGlmIGl0IGRvZXMgbm90IHRocm93XG4gIGFuIGV4Y2VwdGlvbikgd2lsbCBiZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB0cmFuc2R1Y2VyLiBJZiByZXRmXG4gIGlzIG5vdCBzdXBwbGllZCwgdGhlIGlucHV0IHRoYXQgdHJpZ2dlcmVkIHRoZSBwcmVkaWNhdGUgd2lsbCBiZVxuICByZXR1cm5lZC4gSWYgdGhlIHByZWRpY2F0ZSBuZXZlciByZXR1cm5zIHRydWUgdGhlIHRyYW5zZHVjdGlvbiBpc1xuICB1bmFmZmVjdGVkLiIsIDphcmdsaXN0cyBbW3ByZWRdIFtwcmVkIHJldGZdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYWx0LXdoZW5cclxuIFwiUmV0dXJucyBhIHRyYW5zZHVjZXIgdGhhdCBlbmRzIHRyYW5zZHVjdGlvbiB3aGVuIHByZWQgcmV0dXJucyB0cnVlXFxuICBmb3IgYW4gaW5wdXQuIFdoZW4gcmV0ZiBpcyBzdXBwbGllZCBpdCBtdXN0IGJlIGEgZm4gb2YgMiBhcmd1bWVudHMgLVxcbiAgaXQgd2lsbCBiZSBwYXNzZWQgdGhlIChjb21wbGV0ZWQpIHJlc3VsdCBzbyBmYXIgYW5kIHRoZSBpbnB1dCB0aGF0XFxuICB0cmlnZ2VyZWQgdGhlIHByZWRpY2F0ZSwgYW5kIGl0cyByZXR1cm4gdmFsdWUgKGlmIGl0IGRvZXMgbm90IHRocm93XFxuICBhbiBleGNlcHRpb24pIHdpbGwgYmUgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdHJhbnNkdWNlci4gSWYgcmV0ZlxcbiAgaXMgbm90IHN1cHBsaWVkLCB0aGUgaW5wdXQgdGhhdCB0cmlnZ2VyZWQgdGhlIHByZWRpY2F0ZSB3aWxsIGJlXFxuICByZXR1cm5lZC4gSWYgdGhlIHByZWRpY2F0ZSBuZXZlciByZXR1cm5zIHRydWUgdGhlIHRyYW5zZHVjdGlvbiBpc1xcbiAgdW5hZmZlY3RlZC5cIlxyXG4gezphZGRlZCBcIjEuOVwifVxyXG4gKFtwcmVkXSAoaGFsdC13aGVuIHByZWQgbmlsKSlcclxuIChbcHJlZCByZXRmXVxyXG4gIChmblxyXG4gICBbcmZdXHJcbiAgIChmblxyXG4gICAgKFtdIChyZikpXHJcbiAgICAoW3Jlc3VsdF1cclxuICAgICAoaWZcclxuICAgICAgKGFuZCAobWFwPyByZXN1bHQpIChjb250YWlucz8gcmVzdWx0IDpjbGpzLmNvcmUvaGFsdCkpXHJcbiAgICAgICg6Y2xqcy5jb3JlL2hhbHQgcmVzdWx0KVxyXG4gICAgICAocmYgcmVzdWx0KSkpXHJcbiAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAoaWZcclxuICAgICAgKHByZWQgaW5wdXQpXHJcbiAgICAgIChyZWR1Y2VkXHJcbiAgICAgICB7OmNsanMuY29yZS9oYWx0IChpZiByZXRmIChyZXRmIChyZiByZXN1bHQpIGlucHV0KSBpbnB1dCl9KVxyXG4gICAgICAocmYgcmVzdWx0IGlucHV0KSkpKSkpKVxyXG4ifSB7OnN5bSAtY29udGFpbnMta2V5PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBrIGlzIGEga2V5IGluIGNvbGwuIiwgOmFyZ2xpc3RzIChbY29sbCBrXSl9LCA6cHJvdG9jb2wgSUFzc29jaWF0aXZlfSB7OnN5bSByZW1vdmUtd2F0Y2gsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGEgd2F0Y2ggKHNldCBieSBhZGQtd2F0Y2gpIGZyb20gYSByZWZlcmVuY2UiLCA6YXJnbGlzdHMgKFtpcmVmIGtleV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbW92ZS13YXRjaFxyXG4gXCJSZW1vdmVzIGEgd2F0Y2ggKHNldCBieSBhZGQtd2F0Y2gpIGZyb20gYSByZWZlcmVuY2VcIlxyXG4gW2lyZWYga2V5XVxyXG4gKC1yZW1vdmUtd2F0Y2ggaXJlZiBrZXkpXHJcbiBpcmVmKVxyXG4ifSB7OnN5bSBleC1pbmZvLCA6bWV0YSB7OmRvYyAiQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEV4Y2VwdGlvbkluZm8sIGFuIEVycm9yIHR5cGUgdGhhdCBjYXJyaWVzIGFcbiAgbWFwIG9mIGFkZGl0aW9uYWwgZGF0YS4iLCA6YXJnbGlzdHMgW1ttc2cgZGF0YV0gW21zZyBkYXRhIGNhdXNlXV19LCA6c291cmNlICIoZGVmblxyXG4gZXgtaW5mb1xyXG4gXCJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgRXhjZXB0aW9uSW5mbywgYW4gRXJyb3IgdHlwZSB0aGF0IGNhcnJpZXMgYVxcbiAgbWFwIG9mIGFkZGl0aW9uYWwgZGF0YS5cIlxyXG4gKFttc2cgZGF0YV0gKGV4LWluZm8gbXNnIGRhdGEgbmlsKSlcclxuIChbbXNnIGRhdGEgY2F1c2VdIChFeGNlcHRpb25JbmZvLiBtc2cgZGF0YSBjYXVzZSkpKVxyXG4ifSB7OnN5bSBpZm4/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGYgcmV0dXJucyB0cnVlIGZvciBmbj8gb3Igc2F0aXNmaWVzIElGbi4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gaWZuP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgZiByZXR1cm5zIHRydWUgZm9yIGZuPyBvciBzYXRpc2ZpZXMgSUZuLlwiXHJcbiBbZl1cclxuIChvciAoZm4/IGYpIChzYXRpc2ZpZXM/IElGbiBmKSkpXHJcbiJ9IHs6c3ltIElBdG9tLCA6bWV0YSB7OmRvYyAiTWFya2VyIHByb3RvY29sIGluZGljYXRpbmcgYW4gYXRvbS4ifSwgOm1ldGhvZHMgKCl9IHs6c3ltIG5hdC1pbnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgYSBuYXR1cmFsIGludGVnZXIgdmFsdWUuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5hdC1pbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggc2F0aXNmaWVzIGludD8gYW5kIGlzIGEgbmF0dXJhbCBpbnRlZ2VyIHZhbHVlLlwiXHJcbiBbeF1cclxuIChjb25kXHJcbiAgKGludGVnZXI/IHgpXHJcbiAgKG5vdCAobmVnPyB4KSlcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5JbnRlZ2VyIHgpXHJcbiAgKG5vdCAoLmlzTmVnYXRpdmUgeCkpXHJcbiAgKGluc3RhbmNlPyBnb29nLm1hdGguTG9uZyB4KVxyXG4gIChub3QgKC5pc05lZ2F0aXZlIHgpKVxyXG4gIDplbHNlXHJcbiAgZmFsc2UpKVxyXG4ifSB7OnN5bSBJV2F0Y2hhYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHR5cGVzIHRoYXQgY2FuIGJlIHdhdGNoZWQuIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGJ5IEF0b20uIn0sIDptZXRob2RzICgtYWRkLXdhdGNoIC1ub3RpZnktd2F0Y2hlcyAtcmVtb3ZlLXdhdGNoKX0gezpzeW0gc3VidmVjLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHBlcnNpc3RlbnQgdmVjdG9yIG9mIHRoZSBpdGVtcyBpbiB2ZWN0b3IgZnJvbVxuICBzdGFydCAoaW5jbHVzaXZlKSB0byBlbmQgKGV4Y2x1c2l2ZSkuICBJZiBlbmQgaXMgbm90IHN1cHBsaWVkLFxuICBkZWZhdWx0cyB0byAoY291bnQgdmVjdG9yKS4gVGhpcyBvcGVyYXRpb24gaXMgTygxKSBhbmQgdmVyeSBmYXN0LCBhc1xuICB0aGUgcmVzdWx0aW5nIHZlY3RvciBzaGFyZXMgc3RydWN0dXJlIHdpdGggdGhlIG9yaWdpbmFsIGFuZCBub1xuICB0cmltbWluZyBpcyBkb25lLiIsIDphcmdsaXN0cyBbW3Ygc3RhcnRdIFt2IHN0YXJ0IGVuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1YnZlY1xyXG4gXCJSZXR1cm5zIGEgcGVyc2lzdGVudCB2ZWN0b3Igb2YgdGhlIGl0ZW1zIGluIHZlY3RvciBmcm9tXFxuICBzdGFydCAoaW5jbHVzaXZlKSB0byBlbmQgKGV4Y2x1c2l2ZSkuICBJZiBlbmQgaXMgbm90IHN1cHBsaWVkLFxcbiAgZGVmYXVsdHMgdG8gKGNvdW50IHZlY3RvcikuIFRoaXMgb3BlcmF0aW9uIGlzIE8oMSkgYW5kIHZlcnkgZmFzdCwgYXNcXG4gIHRoZSByZXN1bHRpbmcgdmVjdG9yIHNoYXJlcyBzdHJ1Y3R1cmUgd2l0aCB0aGUgb3JpZ2luYWwgYW5kIG5vXFxuICB0cmltbWluZyBpcyBkb25lLlwiXHJcbiAoW3Ygc3RhcnRdIChzdWJ2ZWMgdiBzdGFydCAoY291bnQgdikpKVxyXG4gKFt2IHN0YXJ0IGVuZF1cclxuICAoYXNzZXJ0IChhbmQgKG5vdCAobmlsPyBzdGFydCkpIChub3QgKG5pbD8gZW5kKSkpKVxyXG4gIChidWlsZC1zdWJ2ZWMgbmlsIHYgKGludCBzdGFydCkgKGludCBlbmQpIG5pbCkpKVxyXG4ifSB7OnN5bSAtcG9wISwgOm1ldGEgezpkb2MgIlJldHVybnMgdGNvbGwgd2l0aCB0aGUgbGFzdCBpdGVtIHJlbW92ZWQgZnJvbSBpdC4iLCA6YXJnbGlzdHMgKFt0Y29sbF0pfSwgOnByb3RvY29sIElUcmFuc2llbnRWZWN0b3J9IHs6c3ltIHBhcnRpYWwsIDptZXRhIHs6ZG9jICJUYWtlcyBhIGZ1bmN0aW9uIGYgYW5kIGZld2VyIHRoYW4gdGhlIG5vcm1hbCBhcmd1bWVudHMgdG8gZiwgYW5kXG4gIHJldHVybnMgYSBmbiB0aGF0IHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJncy4gV2hlblxuICBjYWxsZWQsIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBjYWxscyBmIHdpdGggYXJncyArIGFkZGl0aW9uYWwgYXJncy4iLCA6YXJnbGlzdHMgW1tmXSBbZiBhcmcxXSBbZiBhcmcxIGFyZzJdIFtmIGFyZzEgYXJnMiBhcmczXSBbZiBhcmcxIGFyZzIgYXJnMyAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJ0aWFsXHJcbiBcIlRha2VzIGEgZnVuY3Rpb24gZiBhbmQgZmV3ZXIgdGhhbiB0aGUgbm9ybWFsIGFyZ3VtZW50cyB0byBmLCBhbmRcXG4gIHJldHVybnMgYSBmbiB0aGF0IHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYXJncy4gV2hlblxcbiAgY2FsbGVkLCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gY2FsbHMgZiB3aXRoIGFyZ3MgKyBhZGRpdGlvbmFsIGFyZ3MuXCJcclxuIChbZl0gZilcclxuIChbZiBhcmcxXVxyXG4gIChmblxyXG4gICAoW10gKGYgYXJnMSkpXHJcbiAgIChbeF0gKGYgYXJnMSB4KSlcclxuICAgKFt4IHldIChmIGFyZzEgeCB5KSlcclxuICAgKFt4IHkgel0gKGYgYXJnMSB4IHkgeikpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoYXBwbHkgZiBhcmcxIHggeSB6IGFyZ3MpKSkpXHJcbiAoW2YgYXJnMSBhcmcyXVxyXG4gIChmblxyXG4gICAoW10gKGYgYXJnMSBhcmcyKSlcclxuICAgKFt4XSAoZiBhcmcxIGFyZzIgeCkpXHJcbiAgIChbeCB5XSAoZiBhcmcxIGFyZzIgeCB5KSlcclxuICAgKFt4IHkgel0gKGYgYXJnMSBhcmcyIHggeSB6KSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdIChhcHBseSBmIGFyZzEgYXJnMiB4IHkgeiBhcmdzKSkpKVxyXG4gKFtmIGFyZzEgYXJnMiBhcmczXVxyXG4gIChmblxyXG4gICAoW10gKGYgYXJnMSBhcmcyIGFyZzMpKVxyXG4gICAoW3hdIChmIGFyZzEgYXJnMiBhcmczIHgpKVxyXG4gICAoW3ggeV0gKGYgYXJnMSBhcmcyIGFyZzMgeCB5KSlcclxuICAgKFt4IHkgel0gKGYgYXJnMSBhcmcyIGFyZzMgeCB5IHopKVxyXG4gICAoW3ggeSB6ICYgYXJnc10gKGFwcGx5IGYgYXJnMSBhcmcyIGFyZzMgeCB5IHogYXJncykpKSlcclxuIChbZiBhcmcxIGFyZzIgYXJnMyAmIG1vcmVdXHJcbiAgKGZuIFsmIGFyZ3NdIChhcHBseSBmIGFyZzEgYXJnMiBhcmczIChjb25jYXQgbW9yZSBhcmdzKSkpKSlcclxuIn0gezpzeW0gY2h1bmtlZC1zZXE/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgSUNodW5rZWRTZXEuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNodW5rZWQtc2VxP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBJQ2h1bmtlZFNlcS5cIlxyXG4gW3hdXHJcbiAoaW1wbGVtZW50cz8gSUNodW5rZWRTZXEgeCkpXHJcbiJ9IHs6c3ltIHJlcGxpY2F0ZSwgOm1ldGEgezpkb2MgIkRFUFJFQ0FURUQ6IFVzZSAncmVwZWF0JyBpbnN0ZWFkLlxuICBSZXR1cm5zIGEgbGF6eSBzZXEgb2YgbiB4cy4iLCA6YXJnbGlzdHMgKFtuIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBsaWNhdGVcclxuIFwiREVQUkVDQVRFRDogVXNlICdyZXBlYXQnIGluc3RlYWQuXFxuICBSZXR1cm5zIGEgbGF6eSBzZXEgb2YgbiB4cy5cIlxyXG4gW24geF1cclxuICh0YWtlIG4gKHJlcGVhdCB4KSkpXHJcbiJ9IHs6c3ltIG1pbi1rZXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB4IGZvciB3aGljaCAoayB4KSwgYSBudW1iZXIsIGlzIGxlYXN0LlxuXG4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWNoIHhzLCB0aGUgbGFzdCBvbmUgaXMgcmV0dXJuZWQuIiwgOmFyZ2xpc3RzIFtbayB4XSBbayB4IHldIFtrIHggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaW4ta2V5XHJcbiBcIlJldHVybnMgdGhlIHggZm9yIHdoaWNoIChrIHgpLCBhIG51bWJlciwgaXMgbGVhc3QuXFxuXFxuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3VjaCB4cywgdGhlIGxhc3Qgb25lIGlzIHJldHVybmVkLlwiXHJcbiAoW2sgeF0geClcclxuIChbayB4IHldIChpZiAoPCAoayB4KSAoayB5KSkgeCB5KSlcclxuIChbayB4IHkgJiBtb3JlXVxyXG4gIChyZWR1Y2VcclxuICAgKGZuKiBbcDFfXzQ4ODM2IyBwMl9fNDg4MzcjXSAobWluLWtleSBrIHAxX180ODgzNiMgcDJfXzQ4ODM3IykpXHJcbiAgIChtaW4ta2V5IGsgeCB5KVxyXG4gICBtb3JlKSkpXHJcbiJ9IHs6c3ltIHJlZHVjZWQsIDptZXRhIHs6ZG9jICJXcmFwcyB4IGluIGEgd2F5IHN1Y2ggdGhhdCBhIHJlZHVjZSB3aWxsIHRlcm1pbmF0ZSB3aXRoIHRoZSB2YWx1ZSB4IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZHVjZWRcclxuIFwiV3JhcHMgeCBpbiBhIHdheSBzdWNoIHRoYXQgYSByZWR1Y2Ugd2lsbCB0ZXJtaW5hdGUgd2l0aCB0aGUgdmFsdWUgeFwiXHJcbiBbeF1cclxuIChSZWR1Y2VkLiB4KSlcclxuIn0gezpzeW0gcmUtbWF0Y2hlcywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHJlc3VsdCBvZiAocmUtZmluZCByZSBzKSBpZiByZSBmdWxseSBtYXRjaGVzIHMuIiwgOmFyZ2xpc3RzIChbcmUgc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlLW1hdGNoZXNcclxuIFwiUmV0dXJucyB0aGUgcmVzdWx0IG9mIChyZS1maW5kIHJlIHMpIGlmIHJlIGZ1bGx5IG1hdGNoZXMgcy5cIlxyXG4gW3JlIHNdXHJcbiAoaWZcclxuICAoc3RyaW5nPyBzKVxyXG4gIChsZXRcclxuICAgW21hdGNoZXMgKC5leGVjIHJlIHMpXVxyXG4gICAod2hlblxyXG4gICAgKGFuZCAobm90IChuaWw/IG1hdGNoZXMpKSAoPSAoYWdldCBtYXRjaGVzIDApIHMpKVxyXG4gICAgKGlmICg9PSAoY291bnQgbWF0Y2hlcykgMSkgKGFnZXQgbWF0Y2hlcyAwKSAodmVjIG1hdGNoZXMpKSkpXHJcbiAgKHRocm93IChqcy9UeXBlRXJyb3IuIFwicmUtbWF0Y2hlcyBtdXN0IG1hdGNoIGFnYWluc3QgYSBzdHJpbmcuXCIpKSkpXHJcbiJ9IHs6c3ltIGFycmF5LW1hcCwgOm1ldGEgezpkb2MgImtleXZhbCA9PiBrZXkgdmFsXG4gIFJldHVybnMgYSBuZXcgYXJyYXkgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuIiwgOmFyZ2xpc3RzIChbJiBrZXl2YWxzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXktbWFwXHJcbiBcImtleXZhbCA9PiBrZXkgdmFsXFxuICBSZXR1cm5zIGEgbmV3IGFycmF5IG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLlwiXHJcbiBbJiBrZXl2YWxzXVxyXG4gKGxldFxyXG4gIFthcnJcclxuICAgKGlmXHJcbiAgICAoYW5kIChpbnN0YW5jZT8gSW5kZXhlZFNlcSBrZXl2YWxzKSAoemVybz8gKC4taSBrZXl2YWxzKSkpXHJcbiAgICAoLi1hcnIga2V5dmFscylcclxuICAgIChpbnRvLWFycmF5IGtleXZhbHMpKV1cclxuICAoLmNyZWF0ZUFzSWZCeUFzc29jIFBlcnNpc3RlbnRBcnJheU1hcCBhcnIpKSlcclxuIn0gezpzeW0gSVRyYW5zaWVudFNldCwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciBhZGRpbmcgc2V0IGZ1bmN0aW9uYWxpdHkgdG8gYSB0cmFuc2llbnQgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1kaXNqb2luISl9IHs6c3ltIHVuY2hlY2tlZC1ieXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1ieXRlIFt4XSB4KVxyXG4ifSB7OnN5bSBldmVyeS1wcmVkLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBzZXQgb2YgcHJlZGljYXRlcyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGYgdGhhdCByZXR1cm5zIHRydWUgaWYgYWxsIG9mIGl0c1xuICBjb21wb3NpbmcgcHJlZGljYXRlcyByZXR1cm4gYSBsb2dpY2FsIHRydWUgdmFsdWUgYWdhaW5zdCBhbGwgb2YgaXRzIGFyZ3VtZW50cywgZWxzZSBpdCByZXR1cm5zXG4gIGZhbHNlLiBOb3RlIHRoYXQgZiBpcyBzaG9ydC1jaXJjdWl0aW5nIGluIHRoYXQgaXQgd2lsbCBzdG9wIGV4ZWN1dGlvbiBvbiB0aGUgZmlyc3RcbiAgYXJndW1lbnQgdGhhdCB0cmlnZ2VycyBhIGxvZ2ljYWwgZmFsc2UgcmVzdWx0IGFnYWluc3QgdGhlIG9yaWdpbmFsIHByZWRpY2F0ZXMuIiwgOmFyZ2xpc3RzIFtbcF0gW3AxIHAyXSBbcDEgcDIgcDNdIFtwMSBwMiBwMyAmIHBzXV19LCA6c291cmNlICIoZGVmblxyXG4gZXZlcnktcHJlZFxyXG4gXCJUYWtlcyBhIHNldCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gZiB0aGF0IHJldHVybnMgdHJ1ZSBpZiBhbGwgb2YgaXRzXFxuICBjb21wb3NpbmcgcHJlZGljYXRlcyByZXR1cm4gYSBsb2dpY2FsIHRydWUgdmFsdWUgYWdhaW5zdCBhbGwgb2YgaXRzIGFyZ3VtZW50cywgZWxzZSBpdCByZXR1cm5zXFxuICBmYWxzZS4gTm90ZSB0aGF0IGYgaXMgc2hvcnQtY2lyY3VpdGluZyBpbiB0aGF0IGl0IHdpbGwgc3RvcCBleGVjdXRpb24gb24gdGhlIGZpcnN0XFxuICBhcmd1bWVudCB0aGF0IHRyaWdnZXJzIGEgbG9naWNhbCBmYWxzZSByZXN1bHQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgcHJlZGljYXRlcy5cIlxyXG4gKFtwXVxyXG4gIChmblxyXG4gICBlcDFcclxuICAgKFtdIHRydWUpXHJcbiAgIChbeF0gKGJvb2xlYW4gKHAgeCkpKVxyXG4gICAoW3ggeV0gKGJvb2xlYW4gKGFuZCAocCB4KSAocCB5KSkpKVxyXG4gICAoW3ggeSB6XSAoYm9vbGVhbiAoYW5kIChwIHgpIChwIHkpIChwIHopKSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAoYm9vbGVhbiAoYW5kIChlcDEgeCB5IHopIChldmVyeT8gcCBhcmdzKSkpKSkpXHJcbiAoW3AxIHAyXVxyXG4gIChmblxyXG4gICBlcDJcclxuICAgKFtdIHRydWUpXHJcbiAgIChbeF0gKGJvb2xlYW4gKGFuZCAocDEgeCkgKHAyIHgpKSkpXHJcbiAgIChbeCB5XSAoYm9vbGVhbiAoYW5kIChwMSB4KSAocDEgeSkgKHAyIHgpIChwMiB5KSkpKVxyXG4gICAoW3ggeSB6XSAoYm9vbGVhbiAoYW5kIChwMSB4KSAocDEgeSkgKHAxIHopIChwMiB4KSAocDIgeSkgKHAyIHopKSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKGJvb2xlYW5cclxuICAgICAoYW5kXHJcbiAgICAgIChlcDIgeCB5IHopXHJcbiAgICAgIChldmVyeT9cclxuICAgICAgIChmbiogW3AxX180ODgxMSNdIChhbmQgKHAxIHAxX180ODgxMSMpIChwMiBwMV9fNDg4MTEjKSkpXHJcbiAgICAgICBhcmdzKSkpKSkpXHJcbiAoW3AxIHAyIHAzXVxyXG4gIChmblxyXG4gICBlcDNcclxuICAgKFtdIHRydWUpXHJcbiAgIChbeF0gKGJvb2xlYW4gKGFuZCAocDEgeCkgKHAyIHgpIChwMyB4KSkpKVxyXG4gICAoW3ggeV0gKGJvb2xlYW4gKGFuZCAocDEgeCkgKHAyIHgpIChwMyB4KSAocDEgeSkgKHAyIHkpIChwMyB5KSkpKVxyXG4gICAoW3ggeSB6XVxyXG4gICAgKGJvb2xlYW5cclxuICAgICAoYW5kXHJcbiAgICAgIChwMSB4KVxyXG4gICAgICAocDIgeClcclxuICAgICAgKHAzIHgpXHJcbiAgICAgIChwMSB5KVxyXG4gICAgICAocDIgeSlcclxuICAgICAgKHAzIHkpXHJcbiAgICAgIChwMSB6KVxyXG4gICAgICAocDIgeilcclxuICAgICAgKHAzIHopKSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXVxyXG4gICAgKGJvb2xlYW5cclxuICAgICAoYW5kXHJcbiAgICAgIChlcDMgeCB5IHopXHJcbiAgICAgIChldmVyeT9cclxuICAgICAgIChmbipcclxuICAgICAgICBbcDFfXzQ4ODEyI11cclxuICAgICAgICAoYW5kIChwMSBwMV9fNDg4MTIjKSAocDIgcDFfXzQ4ODEyIykgKHAzIHAxX180ODgxMiMpKSlcclxuICAgICAgIGFyZ3MpKSkpKSlcclxuIChbcDEgcDIgcDMgJiBwc11cclxuICAobGV0XHJcbiAgIFtwcyAobGlzdCogcDEgcDIgcDMgcHMpXVxyXG4gICAoZm5cclxuICAgIGVwblxyXG4gICAgKFtdIHRydWUpXHJcbiAgICAoW3hdIChldmVyeT8gKGZuKiBbcDFfXzQ4ODEzI10gKHAxX180ODgxMyMgeCkpIHBzKSlcclxuICAgIChbeCB5XVxyXG4gICAgIChldmVyeT9cclxuICAgICAgKGZuKiBbcDFfXzQ4ODE0I10gKGFuZCAocDFfXzQ4ODE0IyB4KSAocDFfXzQ4ODE0IyB5KSkpXHJcbiAgICAgIHBzKSlcclxuICAgIChbeCB5IHpdXHJcbiAgICAgKGV2ZXJ5P1xyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODE1I11cclxuICAgICAgIChhbmQgKHAxX180ODgxNSMgeCkgKHAxX180ODgxNSMgeSkgKHAxX180ODgxNSMgeikpKVxyXG4gICAgICBwcykpXHJcbiAgICAoW3ggeSB6ICYgYXJnc11cclxuICAgICAoYm9vbGVhblxyXG4gICAgICAoYW5kXHJcbiAgICAgICAoZXBuIHggeSB6KVxyXG4gICAgICAgKGV2ZXJ5PyAoZm4qIFtwMV9fNDg4MTYjXSAoZXZlcnk/IHAxX180ODgxNiMgYXJncykpIHBzKSkpKSkpKSlcclxuIn0gezpzeW0ga2V5cywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXF1ZW5jZSBvZiB0aGUgbWFwJ3Mga2V5cywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgKHNlcSBtYXApLiIsIDphcmdsaXN0cyAoW21hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXNcclxuIFwiUmV0dXJucyBhIHNlcXVlbmNlIG9mIHRoZSBtYXAncyBrZXlzLCBpbiB0aGUgc2FtZSBvcmRlciBhcyAoc2VxIG1hcCkuXCJcclxuIFttYXBdXHJcbiAod2hlbi1sZXQgW21zZXEgKHNlcSBtYXApXSAoS2V5U2VxLiBtc2VxIG5pbCkpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXByb3RvY29sLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Byb3RvIG9ial0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctcHJvdG9jb2xcclxuIFtwcm90byBvYmpdXHJcbiAobGV0XHJcbiAgW3R5XHJcbiAgICh0eXBlIG9iailcclxuICAgdHlcclxuICAgKGlmXHJcbiAgICAoYW5kIHR5ICguLWNsanMkbGFuZyR0eXBlIHR5KSlcclxuICAgICguLWNsanMkbGFuZyRjdG9yU3RyIHR5KVxyXG4gICAgKGdvb2cvdHlwZU9mIG9iaikpXVxyXG4gIChqcy9FcnJvci5cclxuICAgKC5qb2luXHJcbiAgICAoYXJyYXlcclxuICAgICBcIk5vIHByb3RvY29sIG1ldGhvZCBcIlxyXG4gICAgIHByb3RvXHJcbiAgICAgXCIgZGVmaW5lZCBmb3IgdHlwZSBcIlxyXG4gICAgIHR5XHJcbiAgICAgXCI6IFwiXHJcbiAgICAgb2JqKVxyXG4gICAgXCJcIikpKSlcclxuIn0gezpzeW0gbG9hZC1maWxlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2ZpbGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2FkLWZpbGVcclxuIFtmaWxlXVxyXG4gKHdoZW4tbm90IGpzL0NPTVBJTEVEIChjbGpzLmNvcmUvbG9hZC1maWxlKiBmaWxlKSkpXHJcbiJ9IHs6c3ltIGRpc3RpbmN0PywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiBubyB0d28gb2YgdGhlIGFyZ3VtZW50cyBhcmUgPSIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gZGlzdGluY3Q/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBubyB0d28gb2YgdGhlIGFyZ3VtZW50cyBhcmUgPVwiXHJcbiAoW3hdIHRydWUpXHJcbiAoW3ggeV0gKG5vdCAoPSB4IHkpKSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKG5vdCAoPSB4IHkpKVxyXG4gICAobG9vcFxyXG4gICAgW3MgI3t4IHl9IHhzIG1vcmVdXHJcbiAgICAobGV0XHJcbiAgICAgW3ggKGZpcnN0IHhzKSBldGMgKG5leHQgeHMpXVxyXG4gICAgIChpZiB4cyAoaWYgKGNvbnRhaW5zPyBzIHgpIGZhbHNlIChyZWN1ciAoY29uaiBzIHgpIGV0YykpIHRydWUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gcG9zLWludD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IHNhdGlzZmllcyBpbnQ/IGFuZCBpcyBwb3NpdGl2ZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9zLWludD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBzYXRpc2ZpZXMgaW50PyBhbmQgaXMgcG9zaXRpdmUuXCJcclxuIFt4XVxyXG4gKGNvbmRcclxuICAoaW50ZWdlcj8geClcclxuICAocG9zPyB4KVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkludGVnZXIgeClcclxuICAoYW5kIChub3QgKC5pc05lZ2F0aXZlIHgpKSAobm90ICguaXNaZXJvIHgpKSlcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5Mb25nIHgpXHJcbiAgKGFuZCAobm90ICguaXNOZWdhdGl2ZSB4KSkgKG5vdCAoLmlzWmVybyB4KSkpXHJcbiAgOmVsc2VcclxuICBmYWxzZSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1zaG9ydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1bmNoZWNrZWQtc2hvcnQgW3hdIHgpXHJcbiJ9IHs6c3ltIG1ldGhvZHMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm5zIGEgbWFwIG9mIGRpc3BhdGNoIHZhbHVlcyAtPiBkaXNwYXRjaCBmbnMiLCA6YXJnbGlzdHMgKFttdWx0aWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWV0aG9kc1xyXG4gXCJHaXZlbiBhIG11bHRpbWV0aG9kLCByZXR1cm5zIGEgbWFwIG9mIGRpc3BhdGNoIHZhbHVlcyAtPiBkaXNwYXRjaCBmbnNcIlxyXG4gW211bHRpZm5dXHJcbiAoLW1ldGhvZHMgbXVsdGlmbikpXHJcbiJ9IHs6c3ltIG9kZD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbiBpcyBvZGQsIHRocm93cyBhbiBleGNlcHRpb24gaWYgbiBpcyBub3QgYW4gaW50ZWdlciIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvZGQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBuIGlzIG9kZCwgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBuIGlzIG5vdCBhbiBpbnRlZ2VyXCJcclxuIFtuXVxyXG4gKG5vdCAoZXZlbj8gbikpKVxyXG4ifSB7OnN5bSAtZ2V0LW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttZiBkaXNwYXRjaC12YWxdKX0sIDpwcm90b2NvbCBJTXVsdGlGbn0gezpzeW0gZnJlcXVlbmNpZXMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIGZyb20gZGlzdGluY3QgaXRlbXMgaW4gY29sbCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzXG4gIHRoZXkgYXBwZWFyLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmcmVxdWVuY2llc1xyXG4gXCJSZXR1cm5zIGEgbWFwIGZyb20gZGlzdGluY3QgaXRlbXMgaW4gY29sbCB0byB0aGUgbnVtYmVyIG9mIHRpbWVzXFxuICB0aGV5IGFwcGVhci5cIlxyXG4gW2NvbGxdXHJcbiAocGVyc2lzdGVudCFcclxuICAocmVkdWNlXHJcbiAgIChmbiBbY291bnRzIHhdIChhc3NvYyEgY291bnRzIHggKGluYyAoZ2V0IGNvdW50cyB4IDApKSkpXHJcbiAgICh0cmFuc2llbnQge30pXHJcbiAgIGNvbGwpKSlcclxuIn0gezpzeW0gcmVkdWNlYWJsZT8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVJlZHVjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2VhYmxlP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgY29sbCBzYXRpc2ZpZXMgSVJlZHVjZVwiXHJcbiBbeF1cclxuIChzYXRpc2ZpZXM/IElSZWR1Y2UgeCkpXHJcbiJ9IHs6c3ltIHN0cmluZy1oYXNoLWNhY2hlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBzdHJpbmctaGFzaC1jYWNoZSAoanMtb2JqKSlcclxuIn0gezpzeW0gcnN1YnNlcSwgOm1ldGEgezpkb2MgInNjIG11c3QgYmUgYSBzb3J0ZWQgY29sbGVjdGlvbiwgdGVzdChzKSBvbmUgb2YgPCwgPD0sID4gb3JcbiAgPj0uIFJldHVybnMgYSByZXZlcnNlIHNlcSBvZiB0aG9zZSBlbnRyaWVzIHdpdGgga2V5cyBlayBmb3JcbiAgd2hpY2ggKHRlc3QgKC4uIHNjIGNvbXBhcmF0b3IgKGNvbXBhcmUgZWsga2V5KSkgMCkgaXMgdHJ1ZSIsIDphcmdsaXN0cyBbW3NjIHRlc3Qga2V5XSBbc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkgZW5kLXRlc3QgZW5kLWtleV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJzdWJzZXFcclxuIFwic2MgbXVzdCBiZSBhIHNvcnRlZCBjb2xsZWN0aW9uLCB0ZXN0KHMpIG9uZSBvZiA8LCA8PSwgPiBvclxcbiAgPj0uIFJldHVybnMgYSByZXZlcnNlIHNlcSBvZiB0aG9zZSBlbnRyaWVzIHdpdGgga2V5cyBlayBmb3JcXG4gIHdoaWNoICh0ZXN0ICguLiBzYyBjb21wYXJhdG9yIChjb21wYXJlIGVrIGtleSkpIDApIGlzIHRydWVcIlxyXG4gKFtzYyB0ZXN0IGtleV1cclxuICAobGV0XHJcbiAgIFtpbmNsdWRlIChtay1ib3VuZC1mbiBzYyB0ZXN0IGtleSldXHJcbiAgIChpZlxyXG4gICAgKCN7PCA8PX0gdGVzdClcclxuICAgICh3aGVuLWxldFxyXG4gICAgIFtbZSA6YXMgc10gKC1zb3J0ZWQtc2VxLWZyb20gc2Mga2V5IGZhbHNlKV1cclxuICAgICAoaWYgKGluY2x1ZGUgZSkgcyAobmV4dCBzKSkpXHJcbiAgICAodGFrZS13aGlsZSBpbmNsdWRlICgtc29ydGVkLXNlcSBzYyBmYWxzZSkpKSkpXHJcbiAoW3NjIHN0YXJ0LXRlc3Qgc3RhcnQta2V5IGVuZC10ZXN0IGVuZC1rZXldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtbZSA6YXMgc10gKC1zb3J0ZWQtc2VxLWZyb20gc2MgZW5kLWtleSBmYWxzZSldXHJcbiAgICh0YWtlLXdoaWxlXHJcbiAgICAobWstYm91bmQtZm4gc2Mgc3RhcnQtdGVzdCBzdGFydC1rZXkpXHJcbiAgICAoaWYgKChtay1ib3VuZC1mbiBzYyBlbmQtdGVzdCBlbmQta2V5KSBlKSBzIChuZXh0IHMpKSkpKSlcclxuIn0gezpzeW0gaW5jLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG51bWJlciBvbmUgZ3JlYXRlciB0aGFuIG51bS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5jXHJcbiBcIlJldHVybnMgYSBudW1iZXIgb25lIGdyZWF0ZXIgdGhhbiBudW0uXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS8rIHggMSkpXHJcbiJ9IHs6c3ltIHR5cGUtPnN0ciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0eV0pfSwgOnNvdXJjZSAiKGRlZm4gdHlwZS0+c3RyIFt0eV0gKGlmLWxldCBbcyAoLi1jbGpzJGxhbmckY3RvclN0ciB0eSldIHMgKHN0ciB0eSkpKVxyXG4ifSB7OnN5bSBnZXQtbWV0aG9kLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBtdWx0aW1ldGhvZCBhbmQgYSBkaXNwYXRjaCB2YWx1ZSwgcmV0dXJucyB0aGUgZGlzcGF0Y2ggZm5cbiAgdGhhdCB3b3VsZCBhcHBseSB0byB0aGF0IHZhbHVlLCBvciBuaWwgaWYgbm9uZSBhcHBseSBhbmQgbm8gZGVmYXVsdCIsIDphcmdsaXN0cyAoW211bHRpZm4gZGlzcGF0Y2gtdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LW1ldGhvZFxyXG4gXCJHaXZlbiBhIG11bHRpbWV0aG9kIGFuZCBhIGRpc3BhdGNoIHZhbHVlLCByZXR1cm5zIHRoZSBkaXNwYXRjaCBmblxcbiAgdGhhdCB3b3VsZCBhcHBseSB0byB0aGF0IHZhbHVlLCBvciBuaWwgaWYgbm9uZSBhcHBseSBhbmQgbm8gZGVmYXVsdFwiXHJcbiBbbXVsdGlmbiBkaXNwYXRjaC12YWxdXHJcbiAoLWdldC1tZXRob2QgbXVsdGlmbiBkaXNwYXRjaC12YWwpKVxyXG4ifSB7OnN5bSB1dWlkPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiB1dWlkPyBbeF0gKGltcGxlbWVudHM/IElVVUlEIHgpKVxyXG4ifSB7OnN5bSBlczYtZW50cmllcy1pdGVyYXRvciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtjb2xsXSl9LCA6c291cmNlICIoZGVmbiBlczYtZW50cmllcy1pdGVyYXRvciBbY29sbF0gKEVTNkVudHJpZXNJdGVyYXRvci4gKHNlcSBjb2xsKSkpXHJcbiJ9IHs6c3ltIGJpdC1jbGVhciwgOm1ldGEgezpkb2MgIkNsZWFyIGJpdCBhdCBpbmRleCBuIiwgOmFyZ2xpc3RzIChbeCBuXSl9LCA6c291cmNlICIoZGVmbiBiaXQtY2xlYXIgXCJDbGVhciBiaXQgYXQgaW5kZXggblwiIFt4IG5dIChjbGpzLmNvcmUvYml0LWNsZWFyIHggbikpXHJcbiJ9IHs6c3ltIGZpbHRlciwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIHRoZSBpdGVtcyBpbiBjb2xsIGZvciB3aGljaFxuICAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgdHJ1ZS4gcHJlZCBtdXN0IGJlIGZyZWUgb2Ygc2lkZS1lZmZlY3RzLlxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbcHJlZF0gW3ByZWQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbHRlclxyXG4gXCJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBmb3Igd2hpY2hcXG4gIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCB0cnVlLiBwcmVkIG11c3QgYmUgZnJlZSBvZiBzaWRlLWVmZmVjdHMuXFxuICBSZXR1cm5zIGEgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbcHJlZF1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAoZm5cclxuICAgIChbXSAocmYpKVxyXG4gICAgKFtyZXN1bHRdIChyZiByZXN1bHQpKVxyXG4gICAgKFtyZXN1bHQgaW5wdXRdIChpZiAocHJlZCBpbnB1dCkgKHJmIHJlc3VsdCBpbnB1dCkgcmVzdWx0KSkpKSlcclxuIChbcHJlZCBjb2xsXVxyXG4gIChsYXp5LXNlcVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtzIChzZXEgY29sbCldXHJcbiAgICAoaWZcclxuICAgICAoY2h1bmtlZC1zZXE/IHMpXHJcbiAgICAgKGxldFxyXG4gICAgICBbYyAoY2h1bmstZmlyc3Qgcykgc2l6ZSAoY291bnQgYykgYiAoY2h1bmstYnVmZmVyIHNpemUpXVxyXG4gICAgICAoZG90aW1lc1xyXG4gICAgICAgW2kgc2l6ZV1cclxuICAgICAgICh3aGVuIChwcmVkICgtbnRoIGMgaSkpIChjaHVuay1hcHBlbmQgYiAoLW50aCBjIGkpKSkpXHJcbiAgICAgIChjaHVuay1jb25zIChjaHVuayBiKSAoZmlsdGVyIHByZWQgKGNodW5rLXJlc3QgcykpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFtmIChmaXJzdCBzKSByIChyZXN0IHMpXVxyXG4gICAgICAoaWYgKHByZWQgZikgKGNvbnMgZiAoZmlsdGVyIHByZWQgcikpIChmaWx0ZXIgcHJlZCByKSkpKSkpKSlcclxuIn0gezpzeW0gLWFzc29jLW4hLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0Y29sbCB3aXRoIHZhbHVlIHZhbCBhZGRlZCBhdCBwb3NpdGlvbiBuLiIsIDphcmdsaXN0cyAoW3Rjb2xsIG4gdmFsXSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudFZlY3Rvcn0gezpzeW0gSVdpdGhNZXRhLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBtZXRhZGF0YSB0byBhbiBvYmplY3QuIn0sIDptZXRob2RzICgtd2l0aC1tZXRhKX0gezpzeW0gbGlzdCwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBpdGVtcy4iLCA6YXJnbGlzdHMgKFsmIHhzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGlzdFxyXG4gXCJDcmVhdGVzIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgaXRlbXMuXCJcclxuIFsmIHhzXVxyXG4gKGxldFxyXG4gIFthcnJcclxuICAgKGlmXHJcbiAgICAoYW5kIChpbnN0YW5jZT8gSW5kZXhlZFNlcSB4cykgKHplcm8/ICguLWkgeHMpKSlcclxuICAgICguLWFyciB4cylcclxuICAgIChsZXRcclxuICAgICBbYXJyIChhcnJheSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW3hzIHhzXVxyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAobmlsPyB4cylcclxuICAgICAgIChkbyAoLnB1c2ggYXJyICgtZmlyc3QgeHMpKSAocmVjdXIgKC1uZXh0IHhzKSkpXHJcbiAgICAgICBhcnIpKSkpXVxyXG4gIChsb29wXHJcbiAgIFtpIChhbGVuZ3RoIGFycikgciAoKV1cclxuICAgKGlmICg+IGkgMCkgKHJlY3VyIChkZWMgaSkgKC1jb25qIHIgKGFnZXQgYXJyIChkZWMgaSkpKSkgcikpKSlcclxuIn0gezpzeW0gKywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHN1bSBvZiBudW1zLiAoKykgcmV0dXJucyAwLiIsIDphcmdsaXN0cyBbW10gW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gK1xyXG4gXCJSZXR1cm5zIHRoZSBzdW0gb2YgbnVtcy4gKCspIHJldHVybnMgMC5cIlxyXG4gKFtdIDApXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS8rIHggeSkpXHJcbiAoW3ggeSAmIG1vcmVdIChyZWR1Y2UgKyAoY2xqcy5jb3JlLysgeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIHNwbGl0LXdpdGgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgdmVjdG9yIG9mIFsodGFrZS13aGlsZSBwcmVkIGNvbGwpIChkcm9wLXdoaWxlIHByZWQgY29sbCldIiwgOmFyZ2xpc3RzIChbcHJlZCBjb2xsXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXQtd2l0aFxyXG4gXCJSZXR1cm5zIGEgdmVjdG9yIG9mIFsodGFrZS13aGlsZSBwcmVkIGNvbGwpIChkcm9wLXdoaWxlIHByZWQgY29sbCldXCJcclxuIFtwcmVkIGNvbGxdXHJcbiBbKHRha2Utd2hpbGUgcHJlZCBjb2xsKSAoZHJvcC13aGlsZSBwcmVkIGNvbGwpXSlcclxuIn0gezpzeW0gYXNldCwgOm1ldGEgezpkb2MgIlNldHMgdGhlIHZhbHVlIGF0IHRoZSBpbmRleC9pbmRpY2VzLiBXb3JrcyBvbiBKYXZhU2NyaXB0IGFycmF5cy5cbiAgUmV0dXJucyB2YWwuIiwgOmFyZ2xpc3RzIFtbYXJyYXkgaWR4IHZhbF0gW2FycmF5IGlkeCBpZHgyICYgaWR4dl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFzZXRcclxuIFwiU2V0cyB0aGUgdmFsdWUgYXQgdGhlIGluZGV4L2luZGljZXMuIFdvcmtzIG9uIEphdmFTY3JpcHQgYXJyYXlzLlxcbiAgUmV0dXJucyB2YWwuXCJcclxuIChbYXJyYXkgaWR4IHZhbF0gKGNsanMuY29yZS9hc2V0IGFycmF5IGlkeCB2YWwpKVxyXG4gKFthcnJheSBpZHggaWR4MiAmIGlkeHZdIChhcHBseSBhc2V0IChhZ2V0IGFycmF5IGlkeCkgaWR4MiBpZHh2KSkpXHJcbiJ9IHs6c3ltIGludC1yb3RhdGUtbGVmdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnQtcm90YXRlLWxlZnRcclxuIFt4IG5dXHJcbiAoYml0LW9yIChiaXQtc2hpZnQtbGVmdCB4IG4pICh1bnNpZ25lZC1iaXQtc2hpZnQtcmlnaHQgeCAoLSBuKSkpKVxyXG4ifSB7OnN5bSBrZXl3b3JkLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIEtleXdvcmQgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBuYW1lLiAgRG8gbm90IHVzZSA6XG4gIGluIHRoZSBrZXl3b3JkIHN0cmluZ3MsIGl0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS4iLCA6YXJnbGlzdHMgW1tuYW1lXSBbbnMgbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGtleXdvcmRcclxuIFwiUmV0dXJucyBhIEtleXdvcmQgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBuYW1lLiAgRG8gbm90IHVzZSA6XFxuICBpbiB0aGUga2V5d29yZCBzdHJpbmdzLCBpdCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXCJcclxuIChbbmFtZV1cclxuICAoY29uZFxyXG4gICAoa2V5d29yZD8gbmFtZSlcclxuICAgbmFtZVxyXG4gICAoc3ltYm9sPyBuYW1lKVxyXG4gICAoS2V5d29yZC5cclxuICAgIChjbGpzLmNvcmUvbmFtZXNwYWNlIG5hbWUpXHJcbiAgICAoY2xqcy5jb3JlL25hbWUgbmFtZSlcclxuICAgICguLXN0ciBuYW1lKVxyXG4gICAgbmlsKVxyXG4gICAoPSBcIi9cIiBuYW1lKVxyXG4gICAoS2V5d29yZC4gbmlsIG5hbWUgbmFtZSBuaWwpXHJcbiAgIChzdHJpbmc/IG5hbWUpXHJcbiAgIChsZXRcclxuICAgIFtwYXJ0cyAoLnNwbGl0IG5hbWUgXCIvXCIpXVxyXG4gICAgKGlmXHJcbiAgICAgKD09IChhbGVuZ3RoIHBhcnRzKSAyKVxyXG4gICAgIChLZXl3b3JkLiAoYWdldCBwYXJ0cyAwKSAoYWdldCBwYXJ0cyAxKSBuYW1lIG5pbClcclxuICAgICAoS2V5d29yZC4gbmlsIChhZ2V0IHBhcnRzIDApIG5hbWUgbmlsKSkpKSlcclxuIChbbnMgbmFtZV1cclxuICAobGV0XHJcbiAgIFtuc1xyXG4gICAgKGNvbmRcclxuICAgICAoa2V5d29yZD8gbnMpXHJcbiAgICAgKGNsanMuY29yZS9uYW1lIG5zKVxyXG4gICAgIChzeW1ib2w/IG5zKVxyXG4gICAgIChjbGpzLmNvcmUvbmFtZSBucylcclxuICAgICA6ZWxzZVxyXG4gICAgIG5zKVxyXG4gICAgbmFtZVxyXG4gICAgKGNvbmRcclxuICAgICAoa2V5d29yZD8gbmFtZSlcclxuICAgICAoY2xqcy5jb3JlL25hbWUgbmFtZSlcclxuICAgICAoc3ltYm9sPyBuYW1lKVxyXG4gICAgIChjbGpzLmNvcmUvbmFtZSBuYW1lKVxyXG4gICAgIDplbHNlXHJcbiAgICAgbmFtZSldXHJcbiAgIChLZXl3b3JkLiBucyBuYW1lIChzdHIgKHdoZW4gbnMgKHN0ciBucyBcIi9cIikpIG5hbWUpIG5pbCkpKSlcclxuIn0gezpzeW0gKm5zKiwgOm1ldGEgezpkb2MgIlZhciBib3VuZCB0byB0aGUgY3VycmVudCBuYW1lc3BhY2UuIE9ubHkgdXNlZCBmb3IgYm9vdHN0cmFwcGluZy4ifSwgOnNvdXJjZSAiKGRlZiAqbnMqIG5pbClcclxuIn0gezpzeW0gKmFzc2VydCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICphc3NlcnQqIHRydWUpXHJcbiJ9IHs6c3ltIElDb2xsZWN0aW9uLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB0byBhIGNvbGxlY3Rpb24uIn0sIDptZXRob2RzICgtY29uail9IHs6c3ltIGNoYXJzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGNoYXJzIFt4XSB4KVxyXG4ifSB7OnN5bSBzdHIsIDptZXRhIHs6ZG9jICJXaXRoIG5vIGFyZ3MsIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4gV2l0aCBvbmUgYXJnIHgsIHJldHVybnNcbiAgeC50b1N0cmluZygpLiAgKHN0ciBuaWwpIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4gV2l0aCBtb3JlIHRoYW5cbiAgb25lIGFyZywgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyIHZhbHVlcyBvZiB0aGUgYXJncy4iLCA6YXJnbGlzdHMgW1tdIFt4XSBbeCAmIHlzXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RyXHJcbiBcIldpdGggbm8gYXJncywgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLiBXaXRoIG9uZSBhcmcgeCwgcmV0dXJuc1xcbiAgeC50b1N0cmluZygpLiAgKHN0ciBuaWwpIHJldHVybnMgdGhlIGVtcHR5IHN0cmluZy4gV2l0aCBtb3JlIHRoYW5cXG4gIG9uZSBhcmcsIHJldHVybnMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0ciB2YWx1ZXMgb2YgdGhlIGFyZ3MuXCJcclxuIChbXSBcIlwiKVxyXG4gKFt4XSAoaWYgKG5pbD8geCkgXCJcIiAoLmpvaW4gI2pzIFt4XSBcIlwiKSkpXHJcbiAoW3ggJiB5c11cclxuICAobG9vcFxyXG4gICBbc2IgKFN0cmluZ0J1ZmZlci4gKHN0ciB4KSkgbW9yZSB5c11cclxuICAgKGlmXHJcbiAgICBtb3JlXHJcbiAgICAocmVjdXIgKC4gc2IgKGFwcGVuZCAoc3RyIChmaXJzdCBtb3JlKSkpKSAobmV4dCBtb3JlKSlcclxuICAgICgudG9TdHJpbmcgc2IpKSkpKVxyXG4ifSB7OnN5bSBuZXh0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvZiB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0LiBDYWxscyBzZXEgb24gaXRzXG4gIGFyZ3VtZW50LiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMsIHJldHVybnMgbmlsIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5leHRcclxuIFwiUmV0dXJucyBhIHNlcSBvZiB0aGUgaXRlbXMgYWZ0ZXIgdGhlIGZpcnN0LiBDYWxscyBzZXEgb24gaXRzXFxuICBhcmd1bWVudC4gIElmIHRoZXJlIGFyZSBubyBtb3JlIGl0ZW1zLCByZXR1cm5zIG5pbFwiXHJcbiBbY29sbF1cclxuICh3aGVuLW5vdFxyXG4gIChuaWw/IGNvbGwpXHJcbiAgKGlmIChpbXBsZW1lbnRzPyBJTmV4dCBjb2xsKSAoLW5leHQgY29sbCkgKHNlcSAocmVzdCBjb2xsKSkpKSlcclxuIn0gezpzeW0gQVNlcSwgOm1ldGEgezpkb2MgIk1hcmtlciBwcm90b2NvbCBpbmRpY2F0aW5nIGFuIGFycmF5IHNlcXVlbmNlLiJ9LCA6bWV0aG9kcyAoKX0gezpzeW0gcHItc2VxLXdyaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvYmpzIHdyaXRlciBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHItc2VxLXdyaXRlclxyXG4gW29ianMgd3JpdGVyIG9wdHNdXHJcbiAocHItd3JpdGVyIChmaXJzdCBvYmpzKSB3cml0ZXIgb3B0cylcclxuIChkb3NlcVxyXG4gIFtvYmogKG5leHQgb2JqcyldXHJcbiAgKC13cml0ZSB3cml0ZXIgXCIgXCIpXHJcbiAgKHByLXdyaXRlciBvYmogd3JpdGVyIG9wdHMpKSlcclxuIn0gezpzeW0gSUZuLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyB0aGUgYWJpbGl0eSB0byBpbnZva2UgYW4gb2JqZWN0IGFzIGEgZnVuY3Rpb24uXG4gIEZvciBleGFtcGxlLCBhIHZlY3RvciBjYW4gYWxzbyBiZSB1c2VkIHRvIGxvb2sgdXAgYSB2YWx1ZTpcbiAgKFsxIDIgMyA0XSAxKSA9PiAyIn0sIDptZXRob2RzICgtaW52b2tlKX0gezpzeW0gcmVnZXhwPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBSZWdFeHAgaW5zdGFuY2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2V4cD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IFJlZ0V4cCBpbnN0YW5jZS5cIlxyXG4gW3hdXHJcbiAoaW5zdGFuY2U/IGpzL1JlZ0V4cCB4KSlcclxuIn0gezpzeW0gaGFzaC1tYXAsIDptZXRhIHs6ZG9jICJrZXl2YWwgPT4ga2V5IHZhbFxuICBSZXR1cm5zIGEgbmV3IGhhc2ggbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuIiwgOmFyZ2xpc3RzIChbJiBrZXl2YWxzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaGFzaC1tYXBcclxuIFwia2V5dmFsID0+IGtleSB2YWxcXG4gIFJldHVybnMgYSBuZXcgaGFzaCBtYXAgd2l0aCBzdXBwbGllZCBtYXBwaW5ncy5cIlxyXG4gWyYga2V5dmFsc11cclxuIChsb29wXHJcbiAgW2luIChzZXEga2V5dmFscykgb3V0ICh0cmFuc2llbnQgKC4tRU1QVFkgUGVyc2lzdGVudEhhc2hNYXApKV1cclxuICAoaWZcclxuICAgaW5cclxuICAgKHJlY3VyIChubmV4dCBpbikgKGFzc29jISBvdXQgKGZpcnN0IGluKSAoc2Vjb25kIGluKSkpXHJcbiAgIChwZXJzaXN0ZW50ISBvdXQpKSkpXHJcbiJ9IHs6c3ltICpleGVjLXRhcC1mbiosIDptZXRhIHs6ZG9jICJBcnJhbmdlcyB0byBoYXZlIHRhcCBmdW5jdGlvbnMgZXhlY3V0ZWQgdmlhIHRoZSBzdXBwbGllZCBmLCBhXG4gIGZ1bmN0aW9uIG9mIG5vIGFyZ3VtZW50cy4gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gKmV4ZWMtdGFwLWZuKlxyXG4gW2ZdXHJcbiAoYW5kIChleGlzdHM/IGpzL3NldFRpbWVvdXQpIChqcy9zZXRUaW1lb3V0IGYgMCkgdHJ1ZSkpXHJcbiJ9IHs6c3ltIHVuZGVyaXZlLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyBhIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYXJlbnQgYW5kXG4gIHRhZy4gaCBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdFxuICBzdXBwbGllZCBkZWZhdWx0cyB0bywgYW5kIG1vZGlmaWVzLCB0aGUgZ2xvYmFsIGhpZXJhcmNoeS4iLCA6YXJnbGlzdHMgW1t0YWcgcGFyZW50XSBbaCB0YWcgcGFyZW50XV19LCA6c291cmNlICIoZGVmblxyXG4gdW5kZXJpdmVcclxuIFwiUmVtb3ZlcyBhIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYXJlbnQgYW5kXFxuICB0YWcuIGggbXVzdCBiZSBhIGhpZXJhcmNoeSBvYnRhaW5lZCBmcm9tIG1ha2UtaGllcmFyY2h5LCBpZiBub3RcXG4gIHN1cHBsaWVkIGRlZmF1bHRzIHRvLCBhbmQgbW9kaWZpZXMsIHRoZSBnbG9iYWwgaGllcmFyY2h5LlwiXHJcbiAoW3RhZyBwYXJlbnRdIChzd2FwLWdsb2JhbC1oaWVyYXJjaHkhIHVuZGVyaXZlIHRhZyBwYXJlbnQpIG5pbClcclxuIChbaCB0YWcgcGFyZW50XVxyXG4gIChsZXRcclxuICAgW3BhcmVudE1hcFxyXG4gICAgKDpwYXJlbnRzIGgpXHJcbiAgICBjaGlsZHNQYXJlbnRzXHJcbiAgICAoaWYgKHBhcmVudE1hcCB0YWcpIChkaXNqIChwYXJlbnRNYXAgdGFnKSBwYXJlbnQpICN7fSlcclxuICAgIG5ld1BhcmVudHNcclxuICAgIChpZlxyXG4gICAgIChub3QtZW1wdHkgY2hpbGRzUGFyZW50cylcclxuICAgICAoYXNzb2MgcGFyZW50TWFwIHRhZyBjaGlsZHNQYXJlbnRzKVxyXG4gICAgIChkaXNzb2MgcGFyZW50TWFwIHRhZykpXHJcbiAgICBkZXJpdi1zZXFcclxuICAgIChmbGF0dGVuXHJcbiAgICAgKG1hcFxyXG4gICAgICAoZm4qXHJcbiAgICAgICBbcDFfXzQ4ODU1I11cclxuICAgICAgIChjb25zXHJcbiAgICAgICAgKGZpcnN0IHAxX180ODg1NSMpXHJcbiAgICAgICAgKGludGVycG9zZSAoZmlyc3QgcDFfXzQ4ODU1IykgKHNlY29uZCBwMV9fNDg4NTUjKSkpKVxyXG4gICAgICAoc2VxIG5ld1BhcmVudHMpKSldXHJcbiAgIChpZlxyXG4gICAgKGNvbnRhaW5zPyAocGFyZW50TWFwIHRhZykgcGFyZW50KVxyXG4gICAgKHJlZHVjZVxyXG4gICAgIChmbiogW3AxX180ODg1NiMgcDJfXzQ4ODU3I10gKGFwcGx5IGRlcml2ZSBwMV9fNDg4NTYjIHAyX180ODg1NyMpKVxyXG4gICAgIChtYWtlLWhpZXJhcmNoeSlcclxuICAgICAocGFydGl0aW9uIDIgZGVyaXYtc2VxKSlcclxuICAgIGgpKSkpXHJcbiJ9IHs6c3ltIC1yZXNldCEsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSB2YWx1ZSBvZiBvIHRvIG5ldy12YWx1ZS4iLCA6YXJnbGlzdHMgKFtvIG5ldy12YWx1ZV0pfSwgOnByb3RvY29sIElSZXNldH0gezpzeW0gLXJlc3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB3aXRob3V0IHRoZSBmaXJzdCBpdGVtLiBJdCBzaG91bGRcbiAgICAgYWx3YXlzIHJldHVybiBhIHNlcSwgZS5nLlxuICAgICAocmVzdCBbXSkgPT4gKClcbiAgICAgKHJlc3QgbmlsKSA9PiAoKSIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJU2VxfSB7OnN5bSBuaWwtaXRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuaWwtaXRlclxyXG4gW11cclxuIChyZWlmeVxyXG4gIE9iamVjdFxyXG4gIChoYXNOZXh0IFtfXSBmYWxzZSlcclxuICAobmV4dCBbX10gKGpzL0Vycm9yLiBcIk5vIHN1Y2ggZWxlbWVudFwiKSlcclxuICAocmVtb3ZlIFtfXSAoanMvRXJyb3IuIFwiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uXCIpKSkpXHJcbiJ9IHs6c3ltIGZhbHNlPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIHRoZSB2YWx1ZSBmYWxzZSwgZmFsc2Ugb3RoZXJ3aXNlLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmYWxzZT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgdGhlIHZhbHVlIGZhbHNlLCBmYWxzZSBvdGhlcndpc2UuXCJcclxuIFt4XVxyXG4gKGNsanMuY29yZS9mYWxzZT8geCkpXHJcbiJ9IHs6c3ltICpwcmludC1yZWFkYWJseSosIDptZXRhIHs6ZG9jICJXaGVuIHNldCB0byBsb2dpY2FsIGZhbHNlLCBzdHJpbmdzIGFuZCBjaGFyYWN0ZXJzIHdpbGwgYmUgcHJpbnRlZCB3aXRoXG4gIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGVzY2FwZSBzZXF1ZW5jZXMuXG5cbiAgRGVmYXVsdHMgdG8gdHJ1ZSJ9LCA6c291cmNlICIoZGVmICpwcmludC1yZWFkYWJseSogdHJ1ZSlcclxuIn0gezpzeW0gaW50cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBpbnRzIFt4XSB4KVxyXG4ifSB7OnN5bSBzb21lLWZuLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBzZXQgb2YgcHJlZGljYXRlcyBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGYgdGhhdCByZXR1cm5zIHRoZSBmaXJzdCBsb2dpY2FsIHRydWUgdmFsdWVcbiAgcmV0dXJuZWQgYnkgb25lIG9mIGl0cyBjb21wb3NpbmcgcHJlZGljYXRlcyBhZ2FpbnN0IGFueSBvZiBpdHMgYXJndW1lbnRzLCBlbHNlIGl0IHJldHVybnNcbiAgbG9naWNhbCBmYWxzZS4gTm90ZSB0aGF0IGYgaXMgc2hvcnQtY2lyY3VpdGluZyBpbiB0aGF0IGl0IHdpbGwgc3RvcCBleGVjdXRpb24gb24gdGhlIGZpcnN0XG4gIGFyZ3VtZW50IHRoYXQgdHJpZ2dlcnMgYSBsb2dpY2FsIHRydWUgcmVzdWx0IGFnYWluc3QgdGhlIG9yaWdpbmFsIHByZWRpY2F0ZXMuIiwgOmFyZ2xpc3RzIFtbcF0gW3AxIHAyXSBbcDEgcDIgcDNdIFtwMSBwMiBwMyAmIHBzXV19LCA6c291cmNlICIoZGVmblxyXG4gc29tZS1mblxyXG4gXCJUYWtlcyBhIHNldCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gZiB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGxvZ2ljYWwgdHJ1ZSB2YWx1ZVxcbiAgcmV0dXJuZWQgYnkgb25lIG9mIGl0cyBjb21wb3NpbmcgcHJlZGljYXRlcyBhZ2FpbnN0IGFueSBvZiBpdHMgYXJndW1lbnRzLCBlbHNlIGl0IHJldHVybnNcXG4gIGxvZ2ljYWwgZmFsc2UuIE5vdGUgdGhhdCBmIGlzIHNob3J0LWNpcmN1aXRpbmcgaW4gdGhhdCBpdCB3aWxsIHN0b3AgZXhlY3V0aW9uIG9uIHRoZSBmaXJzdFxcbiAgYXJndW1lbnQgdGhhdCB0cmlnZ2VycyBhIGxvZ2ljYWwgdHJ1ZSByZXN1bHQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgcHJlZGljYXRlcy5cIlxyXG4gKFtwXVxyXG4gIChmblxyXG4gICBzcDFcclxuICAgKFtdIG5pbClcclxuICAgKFt4XSAocCB4KSlcclxuICAgKFt4IHldIChvciAocCB4KSAocCB5KSkpXHJcbiAgIChbeCB5IHpdIChvciAocCB4KSAocCB5KSAocCB6KSkpXHJcbiAgIChbeCB5IHogJiBhcmdzXSAob3IgKHNwMSB4IHkgeikgKHNvbWUgcCBhcmdzKSkpKSlcclxuIChbcDEgcDJdXHJcbiAgKGZuXHJcbiAgIHNwMlxyXG4gICAoW10gbmlsKVxyXG4gICAoW3hdIChvciAocDEgeCkgKHAyIHgpKSlcclxuICAgKFt4IHldIChvciAocDEgeCkgKHAxIHkpIChwMiB4KSAocDIgeSkpKVxyXG4gICAoW3ggeSB6XSAob3IgKHAxIHgpIChwMSB5KSAocDEgeikgKHAyIHgpIChwMiB5KSAocDIgeikpKVxyXG4gICAoW3ggeSB6ICYgYXJnc11cclxuICAgIChvclxyXG4gICAgIChzcDIgeCB5IHopXHJcbiAgICAgKHNvbWVcclxuICAgICAgKGZuKiBbcDFfXzQ4ODE3I10gKG9yIChwMSBwMV9fNDg4MTcjKSAocDIgcDFfXzQ4ODE3IykpKVxyXG4gICAgICBhcmdzKSkpKSlcclxuIChbcDEgcDIgcDNdXHJcbiAgKGZuXHJcbiAgIHNwM1xyXG4gICAoW10gbmlsKVxyXG4gICAoW3hdIChvciAocDEgeCkgKHAyIHgpIChwMyB4KSkpXHJcbiAgIChbeCB5XSAob3IgKHAxIHgpIChwMiB4KSAocDMgeCkgKHAxIHkpIChwMiB5KSAocDMgeSkpKVxyXG4gICAoW3ggeSB6XVxyXG4gICAgKG9yXHJcbiAgICAgKHAxIHgpXHJcbiAgICAgKHAyIHgpXHJcbiAgICAgKHAzIHgpXHJcbiAgICAgKHAxIHkpXHJcbiAgICAgKHAyIHkpXHJcbiAgICAgKHAzIHkpXHJcbiAgICAgKHAxIHopXHJcbiAgICAgKHAyIHopXHJcbiAgICAgKHAzIHopKSlcclxuICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAob3JcclxuICAgICAoc3AzIHggeSB6KVxyXG4gICAgIChzb21lXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4MTgjXVxyXG4gICAgICAgKG9yIChwMSBwMV9fNDg4MTgjKSAocDIgcDFfXzQ4ODE4IykgKHAzIHAxX180ODgxOCMpKSlcclxuICAgICAgYXJncykpKSkpXHJcbiAoW3AxIHAyIHAzICYgcHNdXHJcbiAgKGxldFxyXG4gICBbcHMgKGxpc3QqIHAxIHAyIHAzIHBzKV1cclxuICAgKGZuXHJcbiAgICBzcG5cclxuICAgIChbXSBuaWwpXHJcbiAgICAoW3hdIChzb21lIChmbiogW3AxX180ODgxOSNdIChwMV9fNDg4MTkjIHgpKSBwcykpXHJcbiAgICAoW3ggeV1cclxuICAgICAoc29tZSAoZm4qIFtwMV9fNDg4MjAjXSAob3IgKHAxX180ODgyMCMgeCkgKHAxX180ODgyMCMgeSkpKSBwcykpXHJcbiAgICAoW3ggeSB6XVxyXG4gICAgIChzb21lXHJcbiAgICAgIChmbipcclxuICAgICAgIFtwMV9fNDg4MjEjXVxyXG4gICAgICAgKG9yIChwMV9fNDg4MjEjIHgpIChwMV9fNDg4MjEjIHkpIChwMV9fNDg4MjEjIHopKSlcclxuICAgICAgcHMpKVxyXG4gICAgKFt4IHkgeiAmIGFyZ3NdXHJcbiAgICAgKG9yXHJcbiAgICAgIChzcG4geCB5IHopXHJcbiAgICAgIChzb21lIChmbiogW3AxX180ODgyMiNdIChzb21lIHAxX180ODgyMiMgYXJncykpIHBzKSkpKSkpKVxyXG4ifSB7OnN5bSAqZmx1c2gtb24tbmV3bGluZSosIDptZXRhIHs6ZG9jICJXaGVuIHNldCB0byB0cnVlLCBvdXRwdXQgd2lsbCBiZSBmbHVzaGVkIHdoZW5ldmVyIGEgbmV3bGluZSBpcyBwcmludGVkLlxuXG4gIERlZmF1bHRzIHRvIHRydWUuIn0sIDpzb3VyY2UgIihkZWYgKmZsdXNoLW9uLW5ld2xpbmUqIHRydWUpXHJcbiJ9IHs6c3ltIHRvLWFycmF5LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiBjb2xsLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0by1hcnJheVxyXG4gXCJSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGNvbGwuXCJcclxuIFtjb2xsXVxyXG4gKGxldFxyXG4gIFthcnkgKGFycmF5KV1cclxuICAobG9vcFxyXG4gICBbcyAoc2VxIGNvbGwpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBzKVxyXG4gICAgKGRvICguIGFyeSBwdXNoIChmaXJzdCBzKSkgKHJlY3VyIChuZXh0IHMpKSlcclxuICAgIGFyeSkpKSlcclxuIn0gezpzeW0gbGlzdD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgeCBpbXBsZW1lbnRzIElMaXN0IiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpc3Q/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IGltcGxlbWVudHMgSUxpc3RcIlxyXG4gW3hdXHJcbiAoc2F0aXNmaWVzPyBJTGlzdCB4KSlcclxuIn0gezpzeW0gYXJyYXk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IGFycmF5LiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhcnJheT9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IGFycmF5LlwiXHJcbiBbeF1cclxuIChpZlxyXG4gIChpZGVudGljYWw/ICp0YXJnZXQqIFwibm9kZWpzXCIpXHJcbiAgKC5pc0FycmF5IGpzL0FycmF5IHgpXHJcbiAgKGluc3RhbmNlPyBqcy9BcnJheSB4KSkpXHJcbiJ9IHs6c3ltIHNpbXBsZS1pZGVudD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIG9yIGtleXdvcmQgd2l0aG91dCBhIG5hbWVzcGFjZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzaW1wbGUtaWRlbnQ/XHJcbiBcIlJldHVybiB0cnVlIGlmIHggaXMgYSBzeW1ib2wgb3Iga2V5d29yZCB3aXRob3V0IGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGFuZCAoaWRlbnQ/IHgpIChuaWw/IChuYW1lc3BhY2UgeCkpKSlcclxuIn0gezpzeW0gY2xvbmUsIDptZXRhIHs6ZG9jICJDbG9uZSB0aGUgc3VwcGxpZWQgdmFsdWUgd2hpY2ggbXVzdCBpbXBsZW1lbnQgSUNsb25lYWJsZS4iLCA6YXJnbGlzdHMgKFt2YWx1ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsb25lXHJcbiBcIkNsb25lIHRoZSBzdXBwbGllZCB2YWx1ZSB3aGljaCBtdXN0IGltcGxlbWVudCBJQ2xvbmVhYmxlLlwiXHJcbiBbdmFsdWVdXHJcbiAoLWNsb25lIHZhbHVlKSlcclxuIn0gezpzeW0gZGVtdW5nZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVtdW5nZVxyXG4gW25hbWVdXHJcbiAoKGlmIChzeW1ib2w/IG5hbWUpIHN5bWJvbCBzdHIpXHJcbiAgKGxldFxyXG4gICBbbmFtZScgKHN0ciBuYW1lKV1cclxuICAgKGlmIChpZGVudGljYWw/IG5hbWUnIFwiX0RPVF9fRE9UX1wiKSBcIi4uXCIgKGRlbXVuZ2Utc3RyIG5hbWUnKSkpKSlcclxuIn0gezpzeW0gYml0LW5vdCwgOm1ldGEgezpkb2MgIkJpdHdpc2UgY29tcGxlbWVudCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJpdC1ub3QgXCJCaXR3aXNlIGNvbXBsZW1lbnRcIiBbeF0gKGNsanMuY29yZS9iaXQtbm90IHgpKVxyXG4ifSB7OnN5bSBieXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJ5dGUgW3hdIHgpXHJcbiJ9IHs6c3ltIG1heCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGdyZWF0ZXN0IG9mIHRoZSBudW1zLiIsIDphcmdsaXN0cyBbW3hdIFt4IHldIFt4IHkgJiBtb3JlXV19LCA6c291cmNlICIoZGVmblxyXG4gbWF4XHJcbiBcIlJldHVybnMgdGhlIGdyZWF0ZXN0IG9mIHRoZSBudW1zLlwiXHJcbiAoW3hdIHgpXHJcbiAoW3ggeV0gKGNsanMuY29yZS9tYXggeCB5KSlcclxuIChbeCB5ICYgbW9yZV0gKHJlZHVjZSBtYXggKGNsanMuY29yZS9tYXggeCB5KSBtb3JlKSkpXHJcbiJ9IHs6c3ltIElDb21wYXJhYmxlLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIHZhbHVlcyB0aGF0IGNhbiBiZSBjb21wYXJlZC4ifSwgOm1ldGhvZHMgKC1jb21wYXJlKX0gezpzeW0gPT0sIDptZXRhIHs6ZG9jICJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhbGwgaGF2ZSB0aGUgZXF1aXZhbGVudFxuICB2YWx1ZSwgb3RoZXJ3aXNlIGZhbHNlLiBCZWhhdmlvciBvbiBub24gbnVtcyBpc1xuICB1bmRlZmluZWQuIiwgOmFyZ2xpc3RzIFtbeF0gW3ggeV0gW3ggeSAmIG1vcmVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiA9PVxyXG4gXCJSZXR1cm5zIG5vbi1uaWwgaWYgbnVtcyBhbGwgaGF2ZSB0aGUgZXF1aXZhbGVudFxcbiAgdmFsdWUsIG90aGVyd2lzZSBmYWxzZS4gQmVoYXZpb3Igb24gbm9uIG51bXMgaXNcXG4gIHVuZGVmaW5lZC5cIlxyXG4gKFt4XSB0cnVlKVxyXG4gKFt4IHldICgtZXF1aXYgeCB5KSlcclxuIChbeCB5ICYgbW9yZV1cclxuICAoaWZcclxuICAgKD09IHggeSlcclxuICAgKGlmXHJcbiAgICAobmV4dCBtb3JlKVxyXG4gICAgKHJlY3VyIHkgKGZpcnN0IG1vcmUpIChuZXh0IG1vcmUpKVxyXG4gICAgKD09IHkgKGZpcnN0IG1vcmUpKSlcclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gcGFyZW50cywgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGltbWVkaWF0ZSBwYXJlbnRzIG9mIHRhZywgZWl0aGVyIHZpYSBhIEphdmFTY3JpcHQgdHlwZVxuICBpbmhlcml0YW5jZSByZWxhdGlvbnNoaXAgb3IgYSByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgdmlhIGRlcml2ZS4gaFxuICBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZFxuICBkZWZhdWx0cyB0byB0aGUgZ2xvYmFsIGhpZXJhcmNoeSIsIDphcmdsaXN0cyBbW3RhZ10gW2ggdGFnXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFyZW50c1xyXG4gXCJSZXR1cm5zIHRoZSBpbW1lZGlhdGUgcGFyZW50cyBvZiB0YWcsIGVpdGhlciB2aWEgYSBKYXZhU2NyaXB0IHR5cGVcXG4gIGluaGVyaXRhbmNlIHJlbGF0aW9uc2hpcCBvciBhIHJlbGF0aW9uc2hpcCBlc3RhYmxpc2hlZCB2aWEgZGVyaXZlLiBoXFxuICBtdXN0IGJlIGEgaGllcmFyY2h5IG9idGFpbmVkIGZyb20gbWFrZS1oaWVyYXJjaHksIGlmIG5vdCBzdXBwbGllZFxcbiAgZGVmYXVsdHMgdG8gdGhlIGdsb2JhbCBoaWVyYXJjaHlcIlxyXG4gKFt0YWddIChwYXJlbnRzIEAoZ2V0LWdsb2JhbC1oaWVyYXJjaHkpIHRhZykpXHJcbiAoW2ggdGFnXSAobm90LWVtcHR5IChnZXQgKDpwYXJlbnRzIGgpIHRhZykpKSlcclxuIn0gezpzeW0gY291bnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uIChjb3VudCBuaWwpIHJldHVybnNcbiAgMC4gIEFsc28gd29ya3Mgb24gc3RyaW5ncywgYXJyYXlzLCBhbmQgTWFwcyIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb3VudFxyXG4gXCJSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uIChjb3VudCBuaWwpIHJldHVybnNcXG4gIDAuICBBbHNvIHdvcmtzIG9uIHN0cmluZ3MsIGFycmF5cywgYW5kIE1hcHNcIlxyXG4gW2NvbGxdXHJcbiAoaWYtbm90XHJcbiAgKG5pbD8gY29sbClcclxuICAoY29uZFxyXG4gICAoaW1wbGVtZW50cz8gSUNvdW50ZWQgY29sbClcclxuICAgKC1jb3VudCBjb2xsKVxyXG4gICAoYXJyYXk/IGNvbGwpXHJcbiAgIChhbGVuZ3RoIGNvbGwpXHJcbiAgIChzdHJpbmc/IGNvbGwpXHJcbiAgICguLWxlbmd0aCBjb2xsKVxyXG4gICAoaW1wbGVtZW50cz8gSVNlcWFibGUgY29sbClcclxuICAgKGFjY3VtdWxhdGluZy1zZXEtY291bnQgY29sbClcclxuICAgOmVsc2VcclxuICAgKC1jb3VudCBjb2xsKSlcclxuICAwKSlcclxuIn0gezpzeW0gLWRpc2pvaW4hLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0Y29sbCB3aXRob3V0IHYuIiwgOmFyZ2xpc3RzIChbdGNvbGwgdl0pfSwgOnByb3RvY29sIElUcmFuc2llbnRTZXR9IHs6c3ltICpsb2FkZWQtbGlicyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmb25jZSAqbG9hZGVkLWxpYnMqIG5pbClcclxuIn0gezpzeW0gc29ydGVkLW1hcC1ieSwgOm1ldGEgezpkb2MgImtleXZhbCA9PiBrZXkgdmFsXG4gIFJldHVybnMgYSBuZXcgc29ydGVkIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLCB1c2luZyB0aGUgc3VwcGxpZWQgY29tcGFyYXRvci4iLCA6YXJnbGlzdHMgW1tjb21wYXJhdG9yICYga2V5dmFsc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvcnRlZC1tYXAtYnlcclxuIFwia2V5dmFsID0+IGtleSB2YWxcXG4gIFJldHVybnMgYSBuZXcgc29ydGVkIG1hcCB3aXRoIHN1cHBsaWVkIG1hcHBpbmdzLCB1c2luZyB0aGUgc3VwcGxpZWQgY29tcGFyYXRvci5cIlxyXG4gKFtjb21wYXJhdG9yICYga2V5dmFsc11cclxuICAobG9vcFxyXG4gICBbaW5cclxuICAgIChzZXEga2V5dmFscylcclxuICAgIG91dFxyXG4gICAgKFBlcnNpc3RlbnRUcmVlTWFwLiAoZm4tPmNvbXBhcmF0b3IgY29tcGFyYXRvcikgbmlsIDAgbmlsIDApXVxyXG4gICAoaWYgaW4gKHJlY3VyIChubmV4dCBpbikgKGFzc29jIG91dCAoZmlyc3QgaW4pIChzZWNvbmQgaW4pKSkgb3V0KSkpKVxyXG4ifSB7OnN5bSBhcHBseSwgOm1ldGEgezpkb2MgIkFwcGxpZXMgZm4gZiB0byB0aGUgYXJndW1lbnQgbGlzdCBmb3JtZWQgYnkgcHJlcGVuZGluZyBpbnRlcnZlbmluZyBhcmd1bWVudHMgdG8gYXJncy4iLCA6YXJnbGlzdHMgW1tmIGFyZ3NdIFtmIHggYXJnc10gW2YgeCB5IGFyZ3NdIFtmIHggeSB6IGFyZ3NdIFtmIGEgYiBjIGQgJiBhcmdzXV19LCA6c291cmNlICIoZGVmblxyXG4gYXBwbHlcclxuIFwiQXBwbGllcyBmbiBmIHRvIHRoZSBhcmd1bWVudCBsaXN0IGZvcm1lZCBieSBwcmVwZW5kaW5nIGludGVydmVuaW5nIGFyZ3VtZW50cyB0byBhcmdzLlwiXHJcbiAoW2YgYXJnc11cclxuICAoaWZcclxuICAgKC4tY2xqcyRsYW5nJGFwcGx5VG8gZilcclxuICAgKGxldFxyXG4gICAgW2ZpeGVkLWFyaXR5XHJcbiAgICAgKC4tY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgZilcclxuICAgICBiY1xyXG4gICAgIChib3VuZGVkLWNvdW50IChpbmMgZml4ZWQtYXJpdHkpIGFyZ3MpXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IGJjIGZpeGVkLWFyaXR5KVxyXG4gICAgIChhcHBseS10byBmIGJjIGFyZ3MpXHJcbiAgICAgKC5jbGpzJGxhbmckYXBwbHlUbyBmIGFyZ3MpKSlcclxuICAgKGFwcGx5LXRvLXNpbXBsZSBmIChzZXEgYXJncykpKSlcclxuIChbZiB4IGFyZ3NdXHJcbiAgKGlmXHJcbiAgICguLWNsanMkbGFuZyRhcHBseVRvIGYpXHJcbiAgIChsZXRcclxuICAgIFthcmdsaXN0XHJcbiAgICAgKGxpc3QqIHggYXJncylcclxuICAgICBmaXhlZC1hcml0eVxyXG4gICAgICguLWNsanMkbGFuZyRtYXhGaXhlZEFyaXR5IGYpXHJcbiAgICAgYmNcclxuICAgICAoaW5jIChib3VuZGVkLWNvdW50IGZpeGVkLWFyaXR5IGFyZ3MpKV1cclxuICAgIChpZlxyXG4gICAgICg8PSBiYyBmaXhlZC1hcml0eSlcclxuICAgICAoYXBwbHktdG8gZiBiYyBhcmdsaXN0KVxyXG4gICAgICguY2xqcyRsYW5nJGFwcGx5VG8gZiBhcmdsaXN0KSkpXHJcbiAgIChhcHBseS10by1zaW1wbGUgZiB4IChzZXEgYXJncykpKSlcclxuIChbZiB4IHkgYXJnc11cclxuICAoaWZcclxuICAgKC4tY2xqcyRsYW5nJGFwcGx5VG8gZilcclxuICAgKGxldFxyXG4gICAgW2FyZ2xpc3RcclxuICAgICAobGlzdCogeCB5IGFyZ3MpXHJcbiAgICAgZml4ZWQtYXJpdHlcclxuICAgICAoLi1jbGpzJGxhbmckbWF4Rml4ZWRBcml0eSBmKVxyXG4gICAgIGJjXHJcbiAgICAgKCsgMiAoYm91bmRlZC1jb3VudCAoZGVjIGZpeGVkLWFyaXR5KSBhcmdzKSldXHJcbiAgICAoaWZcclxuICAgICAoPD0gYmMgZml4ZWQtYXJpdHkpXHJcbiAgICAgKGFwcGx5LXRvIGYgYmMgYXJnbGlzdClcclxuICAgICAoLmNsanMkbGFuZyRhcHBseVRvIGYgYXJnbGlzdCkpKVxyXG4gICAoYXBwbHktdG8tc2ltcGxlIGYgeCB5IChzZXEgYXJncykpKSlcclxuIChbZiB4IHkgeiBhcmdzXVxyXG4gIChpZlxyXG4gICAoLi1jbGpzJGxhbmckYXBwbHlUbyBmKVxyXG4gICAobGV0XHJcbiAgICBbYXJnbGlzdFxyXG4gICAgIChsaXN0KiB4IHkgeiBhcmdzKVxyXG4gICAgIGZpeGVkLWFyaXR5XHJcbiAgICAgKC4tY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgZilcclxuICAgICBiY1xyXG4gICAgICgrIDMgKGJvdW5kZWQtY291bnQgKC0gZml4ZWQtYXJpdHkgMikgYXJncykpXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IGJjIGZpeGVkLWFyaXR5KVxyXG4gICAgIChhcHBseS10byBmIGJjIGFyZ2xpc3QpXHJcbiAgICAgKC5jbGpzJGxhbmckYXBwbHlUbyBmIGFyZ2xpc3QpKSlcclxuICAgKGFwcGx5LXRvLXNpbXBsZSBmIHggeSB6IChzZXEgYXJncykpKSlcclxuIChbZiBhIGIgYyBkICYgYXJnc11cclxuICAoaWZcclxuICAgKC4tY2xqcyRsYW5nJGFwcGx5VG8gZilcclxuICAgKGxldFxyXG4gICAgW3NwcmVhZC1hcmdzXHJcbiAgICAgKHNwcmVhZCBhcmdzKVxyXG4gICAgIGFyZ2xpc3RcclxuICAgICAoY29ucyBhIChjb25zIGIgKGNvbnMgYyAoY29ucyBkIHNwcmVhZC1hcmdzKSkpKVxyXG4gICAgIGZpeGVkLWFyaXR5XHJcbiAgICAgKC4tY2xqcyRsYW5nJG1heEZpeGVkQXJpdHkgZilcclxuICAgICBiY1xyXG4gICAgICgrIDQgKGJvdW5kZWQtY291bnQgKC0gZml4ZWQtYXJpdHkgMykgc3ByZWFkLWFyZ3MpKV1cclxuICAgIChpZlxyXG4gICAgICg8PSBiYyBmaXhlZC1hcml0eSlcclxuICAgICAoYXBwbHktdG8gZiBiYyBhcmdsaXN0KVxyXG4gICAgICguY2xqcyRsYW5nJGFwcGx5VG8gZiBhcmdsaXN0KSkpXHJcbiAgIChhcHBseS10by1zaW1wbGUgZiBhIGIgYyBkIChzcHJlYWQgYXJncykpKSkpXHJcbiJ9IHs6c3ltIGFkZC10by1zdHJpbmctaGFzaC1jYWNoZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtrXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXRvLXN0cmluZy1oYXNoLWNhY2hlXHJcbiBba11cclxuIChsZXRcclxuICBbaCAoaGFzaC1zdHJpbmcqIGspXVxyXG4gIChnb2JqZWN0L3NldCBzdHJpbmctaGFzaC1jYWNoZSBrIGgpXHJcbiAgKHNldCEgc3RyaW5nLWhhc2gtY2FjaGUtY291bnQgKGluYyBzdHJpbmctaGFzaC1jYWNoZS1jb3VudCkpXHJcbiAgaCkpXHJcbiJ9IHs6c3ltIGNsai0+anMsIDptZXRhIHs6ZG9jICJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIENsb2p1cmVTY3JpcHQgdmFsdWVzIHRvIEphdmFTY3JpcHQuXG4gIHNldHMvdmVjdG9ycy9saXN0cyBiZWNvbWUgQXJyYXlzLCBLZXl3b3JkcyBhbmQgU3ltYm9sIGJlY29tZSBTdHJpbmdzLFxuICBNYXBzIGJlY29tZSBPYmplY3RzLiBBcmJpdHJhcnkga2V5cyBhcmUgZW5jb2RlZCB0byBieSBga2V5LT5qc2AuXG4gIE9wdGlvbnMgaXMgYSBrZXktdmFsdWUgcGFpciwgd2hlcmUgdGhlIG9ubHkgdmFsaWQga2V5IGlzXG4gIDprZXl3b3JkLWZuLCB3aGljaCBzaG91bGQgcG9pbnQgdG8gYSBzaW5nbGUtYXJndW1lbnQgZnVuY3Rpb24gdG8gYmVcbiAgY2FsbGVkIG9uIGtleXdvcmQga2V5cy4gRGVmYXVsdCB0byBgbmFtZWAuIiwgOmFyZ2xpc3RzIChbeCAmIHs6a2V5cyBba2V5d29yZC1mbl0sIDpvciB7a2V5d29yZC1mbiBuYW1lfSwgOmFzIG9wdGlvbnN9XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xqLT5qc1xyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIENsb2p1cmVTY3JpcHQgdmFsdWVzIHRvIEphdmFTY3JpcHQuXFxuICBzZXRzL3ZlY3RvcnMvbGlzdHMgYmVjb21lIEFycmF5cywgS2V5d29yZHMgYW5kIFN5bWJvbCBiZWNvbWUgU3RyaW5ncyxcXG4gIE1hcHMgYmVjb21lIE9iamVjdHMuIEFyYml0cmFyeSBrZXlzIGFyZSBlbmNvZGVkIHRvIGJ5IGBrZXktPmpzYC5cXG4gIE9wdGlvbnMgaXMgYSBrZXktdmFsdWUgcGFpciwgd2hlcmUgdGhlIG9ubHkgdmFsaWQga2V5IGlzXFxuICA6a2V5d29yZC1mbiwgd2hpY2ggc2hvdWxkIHBvaW50IHRvIGEgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9uIHRvIGJlXFxuICBjYWxsZWQgb24ga2V5d29yZCBrZXlzLiBEZWZhdWx0IHRvIGBuYW1lYC5cIlxyXG4gW3ggJiB7OmtleXMgW2tleXdvcmQtZm5dLCA6b3Ige2tleXdvcmQtZm4gbmFtZX0sIDphcyBvcHRpb25zfV1cclxuIChsZXRmblxyXG4gIFsoa2V5Zm4gW2tdIChrZXktPmpzIGsgdGhpc2ZuKSlcclxuICAgKHRoaXNmblxyXG4gICAgW3hdXHJcbiAgICAoY29uZFxyXG4gICAgIChuaWw/IHgpXHJcbiAgICAgbmlsXHJcbiAgICAgKHNhdGlzZmllcz8gSUVuY29kZUpTIHgpXHJcbiAgICAgKC1jbGotPmpzIHgpXHJcbiAgICAgKGtleXdvcmQ/IHgpXHJcbiAgICAgKGtleXdvcmQtZm4geClcclxuICAgICAoc3ltYm9sPyB4KVxyXG4gICAgIChzdHIgeClcclxuICAgICAobWFwPyB4KVxyXG4gICAgIChsZXRcclxuICAgICAgW20gKGpzLW9iaildXHJcbiAgICAgIChkb3NlcSBbW2sgdl0geF0gKGdvYmplY3Qvc2V0IG0gKGtleWZuIGspICh0aGlzZm4gdikpKVxyXG4gICAgICBtKVxyXG4gICAgIChjb2xsPyB4KVxyXG4gICAgIChsZXQgW2FyciAoYXJyYXkpXSAoZG9zZXEgW3ggKG1hcCB0aGlzZm4geCldICgucHVzaCBhcnIgeCkpIGFycilcclxuICAgICA6ZWxzZVxyXG4gICAgIHgpKV1cclxuICAodGhpc2ZuIHgpKSlcclxuIn0gezpzeW0gSUNodW5rZWROZXh0LCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFjY2Vzc2luZyB0aGUgY2h1bmtzIG9mIGEgY29sbGVjdGlvbi4ifSwgOm1ldGhvZHMgKC1jaHVua2VkLW5leHQpfSB7OnN5bSBpbnRlcnBvc2UsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXEgb2YgdGhlIGVsZW1lbnRzIG9mIGNvbGwgc2VwYXJhdGVkIGJ5IHNlcC5cbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLiIsIDphcmdsaXN0cyBbW3NlcF0gW3NlcCBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50ZXJwb3NlXHJcbiBcIlJldHVybnMgYSBsYXp5IHNlcSBvZiB0aGUgZWxlbWVudHMgb2YgY29sbCBzZXBhcmF0ZWQgYnkgc2VwLlxcbiAgUmV0dXJucyBhIHN0YXRlZnVsIHRyYW5zZHVjZXIgd2hlbiBubyBjb2xsZWN0aW9uIGlzIHByb3ZpZGVkLlwiXHJcbiAoW3NlcF1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbc3RhcnRlZCAodm9sYXRpbGUhIGZhbHNlKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGlmXHJcbiAgICAgICBAc3RhcnRlZFxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtzZXByIChyZiByZXN1bHQgc2VwKV1cclxuICAgICAgICAoaWYgKHJlZHVjZWQ/IHNlcHIpIHNlcHIgKHJmIHNlcHIgaW5wdXQpKSlcclxuICAgICAgIChkbyAodnJlc2V0ISBzdGFydGVkIHRydWUpIChyZiByZXN1bHQgaW5wdXQpKSkpKSkpKVxyXG4gKFtzZXAgY29sbF0gKGRyb3AgMSAoaW50ZXJsZWF2ZSAocmVwZWF0IHNlcCkgY29sbCkpKSlcclxuIn0gezpzeW0gZGVyZWYsIDptZXRhIHs6ZG9jICJBbHNvIHJlYWRlciBtYWNybzogQHZhci9AYXRvbS9AZGVsYXkuIFJldHVybnMgdGhlXG4gICBtb3N0LXJlY2VudGx5LWNvbW1pdHRlZCB2YWx1ZSBvZiByZWYuIFdoZW4gYXBwbGllZCB0byBhIHZhclxuICAgb3IgYXRvbSwgcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4gV2hlbiBhcHBsaWVkIHRvIGEgZGVsYXksIGZvcmNlc1xuICAgaXQgaWYgbm90IGFscmVhZHkgZm9yY2VkLiBTZWUgYWxzbyAtIHJlYWxpemVkPy4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVyZWZcclxuIFwiQWxzbyByZWFkZXIgbWFjcm86IEB2YXIvQGF0b20vQGRlbGF5LiBSZXR1cm5zIHRoZVxcbiAgIG1vc3QtcmVjZW50bHktY29tbWl0dGVkIHZhbHVlIG9mIHJlZi4gV2hlbiBhcHBsaWVkIHRvIGEgdmFyXFxuICAgb3IgYXRvbSwgcmV0dXJucyBpdHMgY3VycmVudCBzdGF0ZS4gV2hlbiBhcHBsaWVkIHRvIGEgZGVsYXksIGZvcmNlc1xcbiAgIGl0IGlmIG5vdCBhbHJlYWR5IGZvcmNlZC4gU2VlIGFsc28gLSByZWFsaXplZD8uXCJcclxuIFtvXVxyXG4gKC1kZXJlZiBvKSlcclxuIn0gezpzeW0gYXNzb2MsIDptZXRhIHs6ZG9jICJhc3NvY1tpYXRlXS4gV2hlbiBhcHBsaWVkIHRvIGEgbWFwLCByZXR1cm5zIGEgbmV3IG1hcCBvZiB0aGVcbiAgIHNhbWUgKGhhc2hlZC9zb3J0ZWQpIHR5cGUsIHRoYXQgY29udGFpbnMgdGhlIG1hcHBpbmcgb2Yga2V5KHMpIHRvXG4gICB2YWwocykuIFdoZW4gYXBwbGllZCB0byBhIHZlY3RvciwgcmV0dXJucyBhIG5ldyB2ZWN0b3IgdGhhdFxuICAgY29udGFpbnMgdmFsIGF0IGluZGV4LiBOb3RlIC0gaW5kZXggbXVzdCBiZSA8PSAoY291bnQgdmVjdG9yKS4iLCA6YXJnbGlzdHMgW1tjb2xsIGsgdl0gW2NvbGwgayB2ICYga3ZzXV19LCA6c291cmNlICIoZGVmblxyXG4gYXNzb2NcclxuIFwiYXNzb2NbaWF0ZV0uIFdoZW4gYXBwbGllZCB0byBhIG1hcCwgcmV0dXJucyBhIG5ldyBtYXAgb2YgdGhlXFxuICAgc2FtZSAoaGFzaGVkL3NvcnRlZCkgdHlwZSwgdGhhdCBjb250YWlucyB0aGUgbWFwcGluZyBvZiBrZXkocykgdG9cXG4gICB2YWwocykuIFdoZW4gYXBwbGllZCB0byBhIHZlY3RvciwgcmV0dXJucyBhIG5ldyB2ZWN0b3IgdGhhdFxcbiAgIGNvbnRhaW5zIHZhbCBhdCBpbmRleC4gTm90ZSAtIGluZGV4IG11c3QgYmUgPD0gKGNvdW50IHZlY3RvcikuXCJcclxuIChbY29sbCBrIHZdXHJcbiAgKGlmXHJcbiAgIChpbXBsZW1lbnRzPyBJQXNzb2NpYXRpdmUgY29sbClcclxuICAgKC1hc3NvYyBjb2xsIGsgdilcclxuICAgKGlmLW5vdCAobmlsPyBjb2xsKSAoLWFzc29jIGNvbGwgayB2KSAoYXJyYXktbWFwIGsgdikpKSlcclxuIChbY29sbCBrIHYgJiBrdnNdXHJcbiAgKGxldFxyXG4gICBbcmV0IChhc3NvYyBjb2xsIGsgdildXHJcbiAgIChpZiBrdnMgKHJlY3VyIHJldCAoZmlyc3Qga3ZzKSAoc2Vjb25kIGt2cykgKG5uZXh0IGt2cykpIHJldCkpKSlcclxuIn0gezpzeW0gdHJhbnNpZW50LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIG5ldywgdHJhbnNpZW50IHZlcnNpb24gb2YgdGhlIGNvbGxlY3Rpb24sIGluIGNvbnN0YW50IHRpbWUuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyYW5zaWVudFxyXG4gXCJSZXR1cm5zIGEgbmV3LCB0cmFuc2llbnQgdmVyc2lvbiBvZiB0aGUgY29sbGVjdGlvbiwgaW4gY29uc3RhbnQgdGltZS5cIlxyXG4gW2NvbGxdXHJcbiAoLWFzLXRyYW5zaWVudCBjb2xsKSlcclxuIn0gezpzeW0gLWRpc2pvaW4sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IGNvbGxlY3Rpb24gb2YgY29sbCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdi4iLCA6YXJnbGlzdHMgKFtjb2xsIHZdKX0sIDpwcm90b2NvbCBJU2V0fSB7OnN5bSBjaHVuay1jb25zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NodW5rIHJlc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaHVuay1jb25zXHJcbiBbY2h1bmsgcmVzdF1cclxuIChpZiAoemVybz8gKC1jb3VudCBjaHVuaykpIHJlc3QgKENodW5rZWRDb25zLiBjaHVuayByZXN0IG5pbCBuaWwpKSlcclxuIn0gezpzeW0gY29tcGFyYXRvciwgOm1ldGEgezpkb2MgIlJldHVybnMgYW4gSmF2YVNjcmlwdCBjb21wYXRpYmxlIGNvbXBhcmF0b3IgYmFzZWQgdXBvbiBwcmVkLiIsIDphcmdsaXN0cyAoW3ByZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb21wYXJhdG9yXHJcbiBcIlJldHVybnMgYW4gSmF2YVNjcmlwdCBjb21wYXRpYmxlIGNvbXBhcmF0b3IgYmFzZWQgdXBvbiBwcmVkLlwiXHJcbiBbcHJlZF1cclxuIChmbiBbeCB5XSAoY29uZCAocHJlZCB4IHkpIC0xIChwcmVkIHkgeCkgMSA6ZWxzZSAwKSkpXHJcbiJ9IHs6c3ltIHByaW50LXByZWZpeC1tYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHJlZml4IG0gcHJpbnQtb25lIHdyaXRlciBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJpbnQtcHJlZml4LW1hcFxyXG4gW3ByZWZpeCBtIHByaW50LW9uZSB3cml0ZXIgb3B0c11cclxuIChwci1zZXF1ZW50aWFsLXdyaXRlclxyXG4gIHdyaXRlclxyXG4gIChmblxyXG4gICBbZSB3IG9wdHNdXHJcbiAgIChkb1xyXG4gICAgKHByaW50LW9uZSAoa2V5IGUpIHcgb3B0cylcclxuICAgICgtd3JpdGUgdyBcXHNwYWNlKVxyXG4gICAgKHByaW50LW9uZSAodmFsIGUpIHcgb3B0cykpKVxyXG4gIChzdHIgcHJlZml4IFwie1wiKVxyXG4gIFwiLCBcIlxyXG4gIFwifVwiXHJcbiAgb3B0c1xyXG4gIChzZXEgbSkpKVxyXG4ifSB7OnN5bSBzb3J0ZWQtbWFwLCA6bWV0YSB7OmRvYyAia2V5dmFsID0+IGtleSB2YWxcbiAgUmV0dXJucyBhIG5ldyBzb3J0ZWQgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuIiwgOmFyZ2xpc3RzIFtbJiBrZXl2YWxzXV19LCA6c291cmNlICIoZGVmblxyXG4gc29ydGVkLW1hcFxyXG4gXCJrZXl2YWwgPT4ga2V5IHZhbFxcbiAgUmV0dXJucyBhIG5ldyBzb3J0ZWQgbWFwIHdpdGggc3VwcGxpZWQgbWFwcGluZ3MuXCJcclxuIChbJiBrZXl2YWxzXVxyXG4gIChsb29wXHJcbiAgIFtpbiAoc2VxIGtleXZhbHMpIG91dCAoLi1FTVBUWSBQZXJzaXN0ZW50VHJlZU1hcCldXHJcbiAgIChpZiBpbiAocmVjdXIgKG5uZXh0IGluKSAoYXNzb2Mgb3V0IChmaXJzdCBpbikgKHNlY29uZCBpbikpKSBvdXQpKSkpXHJcbiJ9IHs6c3ltIGRyb3Atd2hpbGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbGF6eSBzZXF1ZW5jZSBvZiB0aGUgaXRlbXMgaW4gY29sbCBzdGFydGluZyBmcm9tIHRoZVxuICBmaXJzdCBpdGVtIGZvciB3aGljaCAocHJlZCBpdGVtKSByZXR1cm5zIGxvZ2ljYWwgZmFsc2UuICBSZXR1cm5zIGFcbiAgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuIiwgOmFyZ2xpc3RzIFtbcHJlZF0gW3ByZWQgY29sbF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRyb3Atd2hpbGVcclxuIFwiUmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgdGhlIGl0ZW1zIGluIGNvbGwgc3RhcnRpbmcgZnJvbSB0aGVcXG4gIGZpcnN0IGl0ZW0gZm9yIHdoaWNoIChwcmVkIGl0ZW0pIHJldHVybnMgbG9naWNhbCBmYWxzZS4gIFJldHVybnMgYVxcbiAgc3RhdGVmdWwgdHJhbnNkdWNlciB3aGVuIG5vIGNvbGxlY3Rpb24gaXMgcHJvdmlkZWQuXCJcclxuIChbcHJlZF1cclxuICAoZm5cclxuICAgW3JmXVxyXG4gICAobGV0XHJcbiAgICBbZGEgKHZvbGF0aWxlISB0cnVlKV1cclxuICAgIChmblxyXG4gICAgIChbXSAocmYpKVxyXG4gICAgIChbcmVzdWx0XSAocmYgcmVzdWx0KSlcclxuICAgICAoW3Jlc3VsdCBpbnB1dF1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2Ryb3A/IEBkYV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChhbmQgZHJvcD8gKHByZWQgaW5wdXQpKVxyXG4gICAgICAgIHJlc3VsdFxyXG4gICAgICAgIChkbyAodnJlc2V0ISBkYSBuaWwpIChyZiByZXN1bHQgaW5wdXQpKSkpKSkpKSlcclxuIChbcHJlZCBjb2xsXVxyXG4gIChsZXRcclxuICAgW3N0ZXBcclxuICAgIChmblxyXG4gICAgIFtwcmVkIGNvbGxdXHJcbiAgICAgKGxldFxyXG4gICAgICBbcyAoc2VxIGNvbGwpXVxyXG4gICAgICAoaWYgKGFuZCBzIChwcmVkIChmaXJzdCBzKSkpIChyZWN1ciBwcmVkIChyZXN0IHMpKSBzKSkpXVxyXG4gICAobGF6eS1zZXEgKHN0ZXAgcHJlZCBjb2xsKSkpKSlcclxuIn0gezpzeW0gSVdyaXRlciwgOm1ldGEgezpkb2MgIlByb3RvY29sIGZvciB3cml0aW5nLiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBieSBTdHJpbmdCdWZmZXJXcml0ZXIuIn0sIDptZXRob2RzICgtZmx1c2ggLXdyaXRlKX0gezpzeW0gcmVhbGl6ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIGEgdmFsdWUgaGFzIGJlZW4gcHJvZHVjZWQgZm9yIGEgZGVsYXkgb3IgbGF6eSBzZXF1ZW5jZS4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhbGl6ZWQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBhIHZhbHVlIGhhcyBiZWVuIHByb2R1Y2VkIGZvciBhIGRlbGF5IG9yIGxhenkgc2VxdWVuY2UuXCJcclxuIFt4XVxyXG4gKC1yZWFsaXplZD8geCkpXHJcbiJ9IHs6c3ltICpwcmludC1mbiosIDptZXRhIHs6ZG9jICJFYWNoIHJ1bnRpbWUgZW52aXJvbm1lbnQgcHJvdmlkZXMgYSBkaWZmZXJlbnQgd2F5IHRvIHByaW50IG91dHB1dC5cbiAgV2hhdGV2ZXIgZnVuY3Rpb24gKnByaW50LWZuKiBpcyBib3VuZCB0byB3aWxsIGJlIHBhc3NlZCBhbnlcbiAgU3RyaW5ncyB3aGljaCBzaG91bGQgYmUgcHJpbnRlZC4ifSwgOnNvdXJjZSAiKGRlZm9uY2UgKnByaW50LWZuKiBuaWwpXHJcbiJ9IHs6c3ltIGNvbXBhcmUsIDptZXRhIHs6ZG9jICJDb21wYXJhdG9yLiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIG51bWJlclxuICB3aGVuIHggaXMgbG9naWNhbGx5ICdsZXNzIHRoYW4nLCAnZXF1YWwgdG8nLCBvciAnZ3JlYXRlciB0aGFuJ1xuICB5LiBVc2VzIElDb21wYXJhYmxlIGlmIGF2YWlsYWJsZSBhbmQgZ29vZ2xlLmFycmF5LmRlZmF1bHRDb21wYXJlIGZvciBvYmplY3RzXG4gb2YgdGhlIHNhbWUgdHlwZSBhbmQgc3BlY2lhbC1jYXNlcyBuaWwgdG8gYmUgbGVzcyB0aGFuIGFueSBvdGhlciBvYmplY3QuIiwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFyZVxyXG4gXCJDb21wYXJhdG9yLiBSZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIG51bWJlclxcbiAgd2hlbiB4IGlzIGxvZ2ljYWxseSAnbGVzcyB0aGFuJywgJ2VxdWFsIHRvJywgb3IgJ2dyZWF0ZXIgdGhhbidcXG4gIHkuIFVzZXMgSUNvbXBhcmFibGUgaWYgYXZhaWxhYmxlIGFuZCBnb29nbGUuYXJyYXkuZGVmYXVsdENvbXBhcmUgZm9yIG9iamVjdHNcXG4gb2YgdGhlIHNhbWUgdHlwZSBhbmQgc3BlY2lhbC1jYXNlcyBuaWwgdG8gYmUgbGVzcyB0aGFuIGFueSBvdGhlciBvYmplY3QuXCJcclxuIFt4IHldXHJcbiAoY29uZFxyXG4gIChpZGVudGljYWw/IHggeSlcclxuICAwXHJcbiAgKG5pbD8geClcclxuICAtMVxyXG4gIChuaWw/IHkpXHJcbiAgMVxyXG4gIChudW1iZXI/IHgpXHJcbiAgKGlmXHJcbiAgIChudW1iZXI/IHkpXHJcbiAgIChnYXJyYXkvZGVmYXVsdENvbXBhcmUgeCB5KVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiQ2Fubm90IGNvbXBhcmUgXCIgeCBcIiB0byBcIiB5KSkpKVxyXG4gIChzYXRpc2ZpZXM/IElDb21wYXJhYmxlIHgpXHJcbiAgKC1jb21wYXJlIHggeSlcclxuICA6ZWxzZVxyXG4gIChpZlxyXG4gICAoYW5kXHJcbiAgICAob3IgKHN0cmluZz8geCkgKGFycmF5PyB4KSAodHJ1ZT8geCkgKGZhbHNlPyB4KSlcclxuICAgIChpZGVudGljYWw/ICh0eXBlIHgpICh0eXBlIHkpKSlcclxuICAgKGdhcnJheS9kZWZhdWx0Q29tcGFyZSB4IHkpXHJcbiAgICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJDYW5ub3QgY29tcGFyZSBcIiB4IFwiIHRvIFwiIHkpKSkpKSlcclxuIn0gezpzeW0gY29tcGxlbWVudCwgOm1ldGEgezpkb2MgIlRha2VzIGEgZm4gZiBhbmQgcmV0dXJucyBhIGZuIHRoYXQgdGFrZXMgdGhlIHNhbWUgYXJndW1lbnRzIGFzIGYsXG4gIGhhcyB0aGUgc2FtZSBlZmZlY3RzLCBpZiBhbnksIGFuZCByZXR1cm5zIHRoZSBvcHBvc2l0ZSB0cnV0aCB2YWx1ZS4iLCA6YXJnbGlzdHMgKFtmXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGxlbWVudFxyXG4gXCJUYWtlcyBhIGZuIGYgYW5kIHJldHVybnMgYSBmbiB0aGF0IHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBmLFxcbiAgaGFzIHRoZSBzYW1lIGVmZmVjdHMsIGlmIGFueSwgYW5kIHJldHVybnMgdGhlIG9wcG9zaXRlIHRydXRoIHZhbHVlLlwiXHJcbiBbZl1cclxuIChmblxyXG4gIChbXSAobm90IChmKSkpXHJcbiAgKFt4XSAobm90IChmIHgpKSlcclxuICAoW3ggeV0gKG5vdCAoZiB4IHkpKSlcclxuICAoW3ggeSAmIHpzXSAobm90IChhcHBseSBmIHggeSB6cykpKSkpXHJcbiJ9IHs6c3ltIC1hc3NvYyEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHRyYW5zaWVudCBjb2xsZWN0aW9uIG9mIHRjb2xsIHdpdGggYSBtYXBwaW5nIGZyb20ga2V5IHRvXG4gICAgIHZhbCBhZGRlZCB0byBpdC4iLCA6YXJnbGlzdHMgKFt0Y29sbCBrZXkgdmFsXSl9LCA6cHJvdG9jb2wgSVRyYW5zaWVudEFzc29jaWF0aXZlfSB7OnN5bSAqcHJpbnQtZHVwKiwgOm1ldGEgezpkb2MgIldoZW4gc2V0IHRvIGxvZ2ljYWwgdHJ1ZSwgb2JqZWN0cyB3aWxsIGJlIHByaW50ZWQgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXNcbiAgdGhlaXIgdHlwZSB3aGVuIHJlYWQgaW4gbGF0ZXIuXG5cbiAgRGVmYXVsdHMgdG8gZmFsc2UuIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LWR1cCogZmFsc2UpXHJcbiJ9IHs6c3ltIHN0cmluZy1pdGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHN0cmluZy1pdGVyIFt4XSAoU3RyaW5nSXRlci4geCAwKSlcclxuIn0gezpzeW0gLWtleS0+anMsIDptZXRhIHs6ZG9jICJUcmFuc2Zvcm1zIG1hcCBrZXlzIHRvIHZhbGlkIEphdmFTY3JpcHQga2V5cy4gQXJiaXRyYXJ5IGtleXMgYXJlXG4gIGVuY29kZWQgdG8gdGhlaXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHZpYSAocHItc3RyIHgpIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnByb3RvY29sIElFbmNvZGVKU30gezpzeW0gSURlcmVmLCA6bWV0YSB7OmRvYyAiUHJvdG9jb2wgZm9yIGFkZGluZyBkZXJlZmVyZW5jZSBmdW5jdGlvbmFsaXR5IHRvIGEgcmVmZXJlbmNlLiJ9LCA6bWV0aG9kcyAoLWRlcmVmKX0gezpzeW0gc2VxdWVuY2UsIDptZXRhIHs6ZG9jICJDb2VyY2VzIGNvbGwgdG8gYSAocG9zc2libHkgZW1wdHkpIHNlcXVlbmNlLCBpZiBpdCBpcyBub3QgYWxyZWFkeVxuICBvbmUuIFdpbGwgbm90IGZvcmNlIGEgbGF6eSBzZXEuIChzZXF1ZW5jZSBuaWwpIHlpZWxkcyAoKSwgV2hlbiBhXG4gIHRyYW5zZHVjZXIgaXMgc3VwcGxpZWQsIHJldHVybnMgYSBsYXp5IHNlcXVlbmNlIG9mIGFwcGxpY2F0aW9ucyBvZlxuICB0aGUgdHJhbnNmb3JtIHRvIHRoZSBpdGVtcyBpbiBjb2xsKHMpLCBpLmUuIHRvIHRoZSBzZXQgb2YgZmlyc3RcbiAgaXRlbXMgb2YgZWFjaCBjb2xsLCBmb2xsb3dlZCBieSB0aGUgc2V0IG9mIHNlY29uZFxuICBpdGVtcyBpbiBlYWNoIGNvbGwsIHVudGlsIGFueSBvbmUgb2YgdGhlIGNvbGxzIGlzIGV4aGF1c3RlZC4gIEFueVxuICByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIFRoZSB0cmFuc2Zvcm0gc2hvdWxkIGFjY2VwdFxuICBudW1iZXItb2YtY29sbHMgYXJndW1lbnRzIiwgOmFyZ2xpc3RzIFtbY29sbF0gW3hmb3JtIGNvbGxdIFt4Zm9ybSBjb2xsICYgY29sbHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZXF1ZW5jZVxyXG4gXCJDb2VyY2VzIGNvbGwgdG8gYSAocG9zc2libHkgZW1wdHkpIHNlcXVlbmNlLCBpZiBpdCBpcyBub3QgYWxyZWFkeVxcbiAgb25lLiBXaWxsIG5vdCBmb3JjZSBhIGxhenkgc2VxLiAoc2VxdWVuY2UgbmlsKSB5aWVsZHMgKCksIFdoZW4gYVxcbiAgdHJhbnNkdWNlciBpcyBzdXBwbGllZCwgcmV0dXJucyBhIGxhenkgc2VxdWVuY2Ugb2YgYXBwbGljYXRpb25zIG9mXFxuICB0aGUgdHJhbnNmb3JtIHRvIHRoZSBpdGVtcyBpbiBjb2xsKHMpLCBpLmUuIHRvIHRoZSBzZXQgb2YgZmlyc3RcXG4gIGl0ZW1zIG9mIGVhY2ggY29sbCwgZm9sbG93ZWQgYnkgdGhlIHNldCBvZiBzZWNvbmRcXG4gIGl0ZW1zIGluIGVhY2ggY29sbCwgdW50aWwgYW55IG9uZSBvZiB0aGUgY29sbHMgaXMgZXhoYXVzdGVkLiAgQW55XFxuICByZW1haW5pbmcgaXRlbXMgaW4gb3RoZXIgY29sbHMgYXJlIGlnbm9yZWQuIFRoZSB0cmFuc2Zvcm0gc2hvdWxkIGFjY2VwdFxcbiAgbnVtYmVyLW9mLWNvbGxzIGFyZ3VtZW50c1wiXHJcbiAoW2NvbGxdIChpZiAoc2VxPyBjb2xsKSBjb2xsIChvciAoc2VxIGNvbGwpICgpKSkpXHJcbiAoW3hmb3JtIGNvbGxdXHJcbiAgKG9yXHJcbiAgIChjaHVua0l0ZXJhdG9yU2VxICguY3JlYXRlIFRyYW5zZm9ybWVySXRlcmF0b3IgeGZvcm0gKGl0ZXIgY29sbCkpKVxyXG4gICAoKSkpXHJcbiAoW3hmb3JtIGNvbGwgJiBjb2xsc11cclxuICAob3JcclxuICAgKGNodW5rSXRlcmF0b3JTZXFcclxuICAgICguY3JlYXRlTXVsdGlcclxuICAgICBUcmFuc2Zvcm1lckl0ZXJhdG9yXHJcbiAgICAgeGZvcm1cclxuICAgICAobWFwIGl0ZXIgKGNvbnMgY29sbCBjb2xscykpKSlcclxuICAgKCkpKSlcclxuIn0gezpzeW0gY29uc3RhbnRseSwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIGFuZCByZXR1cm5zIHguIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnN0YW50bHlcclxuIFwiUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgeC5cIlxyXG4gW3hdXHJcbiAoZm4gWyYgYXJnc10geCkpXHJcbiJ9IHs6c3ltIGNodW5rZWQtc2VxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3ZlYyBpIG9mZl0gW3ZlYyBub2RlIGkgb2ZmXSBbdmVjIG5vZGUgaSBvZmYgbWV0YV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNodW5rZWQtc2VxXHJcbiAoW3ZlYyBpIG9mZl0gKENodW5rZWRTZXEuIHZlYyAoYXJyYXktZm9yIHZlYyBpKSBpIG9mZiBuaWwgbmlsKSlcclxuIChbdmVjIG5vZGUgaSBvZmZdIChDaHVua2VkU2VxLiB2ZWMgbm9kZSBpIG9mZiBuaWwgbmlsKSlcclxuIChbdmVjIG5vZGUgaSBvZmYgbWV0YV0gKENodW5rZWRTZXEuIHZlYyBub2RlIGkgb2ZmIG1ldGEgbmlsKSkpXHJcbiJ9IHs6c3ltIElTb3J0ZWQsIDptZXRhIHs6ZG9jICJQcm90b2NvbCBmb3IgYSBjb2xsZWN0aW9uIHdoaWNoIGNhbiByZXByZXNlbnQgdGhlaXIgaXRlbXNcbiAgaW4gYSBzb3J0ZWQgbWFubmVyLiAifSwgOm1ldGhvZHMgKC1jb21wYXJhdG9yIC1lbnRyeS1rZXkgLXNvcnRlZC1zZXEgLXNvcnRlZC1zZXEtZnJvbSl9IHs6c3ltIG1ha2UtYXJyYXksIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYSBKYXZhU2NyaXB0IGFycmF5IG9mIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4gQWNjZXB0cyBpZ25vcmVkXG4gIHR5cGUgYXJndW1lbnQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBDbG9qdXJlLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZWZmaWNpZW50XG4gIHdheSB0byBhbGxvY2F0ZSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheXMgaW4gSmF2YVNjcmlwdDsgYXMgc3VjaCwgdGhpcyBmdW5jdGlvblxuICB3aWxsIHJ1biBpbiBwb2x5bm9taWFsIHRpbWUgd2hlbiBjYWxsZWQgd2l0aCAzIG9yIG1vcmUgYXJndW1lbnRzLiIsIDphcmdsaXN0cyBbW3NpemVdIFt0eXBlIHNpemVdIFt0eXBlIHNpemUgJiBtb3JlLXNpemVzXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFrZS1hcnJheVxyXG4gXCJDb25zdHJ1Y3QgYSBKYXZhU2NyaXB0IGFycmF5IG9mIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4gQWNjZXB0cyBpZ25vcmVkXFxuICB0eXBlIGFyZ3VtZW50IGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ2xvanVyZS4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIGVmZmljaWVudFxcbiAgd2F5IHRvIGFsbG9jYXRlIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5cyBpbiBKYXZhU2NyaXB0OyBhcyBzdWNoLCB0aGlzIGZ1bmN0aW9uXFxuICB3aWxsIHJ1biBpbiBwb2x5bm9taWFsIHRpbWUgd2hlbiBjYWxsZWQgd2l0aCAzIG9yIG1vcmUgYXJndW1lbnRzLlwiXHJcbiAoW3NpemVdIChqcy9BcnJheS4gc2l6ZSkpXHJcbiAoW3R5cGUgc2l6ZV0gKG1ha2UtYXJyYXkgc2l6ZSkpXHJcbiAoW3R5cGUgc2l6ZSAmIG1vcmUtc2l6ZXNdXHJcbiAgKGxldFxyXG4gICBbZGltcyBtb3JlLXNpemVzIGRpbWFycmF5IChtYWtlLWFycmF5IHNpemUpXVxyXG4gICAoZG90aW1lc1xyXG4gICAgW2kgKGFsZW5ndGggZGltYXJyYXkpXVxyXG4gICAgKGFzZXQgZGltYXJyYXkgaSAoYXBwbHkgbWFrZS1hcnJheSBuaWwgZGltcykpKVxyXG4gICBkaW1hcnJheSkpKVxyXG4ifSB7OnN5bSBzaG9ydHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gc2hvcnRzIFt4XSB4KVxyXG4ifSB7OnN5bSAqdW5jaGVja2VkLWlmKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKnVuY2hlY2tlZC1pZiogZmFsc2UpXHJcbiJ9IHs6c3ltIGVuYWJsZS1jb25zb2xlLXByaW50ISwgOm1ldGEgezpkb2MgIlNldCAqcHJpbnQtZm4qIHRvIGNvbnNvbGUubG9nIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5hYmxlLWNvbnNvbGUtcHJpbnQhXHJcbiBcIlNldCAqcHJpbnQtZm4qIHRvIGNvbnNvbGUubG9nXCJcclxuIFtdXHJcbiAoc2V0ISAqcHJpbnQtbmV3bGluZSogZmFsc2UpXHJcbiAoc2V0LXByaW50LWZuIVxyXG4gIChmblxyXG4gICBbXVxyXG4gICAobGV0XHJcbiAgICBbeHMgKGpzLWFyZ3VtZW50cyldXHJcbiAgICAoLmFwcGx5ICguLWxvZyBqcy9jb25zb2xlKSBqcy9jb25zb2xlIChnYXJyYXkvY2xvbmUgeHMpKSkpKVxyXG4gKHNldC1wcmludC1lcnItZm4hXHJcbiAgKGZuXHJcbiAgIFtdXHJcbiAgIChsZXRcclxuICAgIFt4cyAoanMtYXJndW1lbnRzKV1cclxuICAgICguYXBwbHkgKC4tZXJyb3IganMvY29uc29sZSkganMvY29uc29sZSAoZ2FycmF5L2Nsb25lIHhzKSkpKSlcclxuIG5pbClcclxuIn0gezpzeW0gLWZsdXNoLCA6bWV0YSB7OmRvYyAiRmx1c2ggd3JpdGVyLiIsIDphcmdsaXN0cyAoW3dyaXRlcl0pfSwgOnByb3RvY29sIElXcml0ZXJ9IHs6c3ltIGNvbXBsZXRpbmcsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHJlZHVjaW5nIGZ1bmN0aW9uIGYgb2YgMiBhcmdzIGFuZCByZXR1cm5zIGEgZm4gc3VpdGFibGUgZm9yXG4gIHRyYW5zZHVjZSBieSBhZGRpbmcgYW4gYXJpdHktMSBzaWduYXR1cmUgdGhhdCBjYWxscyBjZiAoZGVmYXVsdCAtXG4gIGlkZW50aXR5KSBvbiB0aGUgcmVzdWx0IGFyZ3VtZW50LiIsIDphcmdsaXN0cyBbW2ZdIFtmIGNmXV19LCA6c291cmNlICIoZGVmblxyXG4gY29tcGxldGluZ1xyXG4gXCJUYWtlcyBhIHJlZHVjaW5nIGZ1bmN0aW9uIGYgb2YgMiBhcmdzIGFuZCByZXR1cm5zIGEgZm4gc3VpdGFibGUgZm9yXFxuICB0cmFuc2R1Y2UgYnkgYWRkaW5nIGFuIGFyaXR5LTEgc2lnbmF0dXJlIHRoYXQgY2FsbHMgY2YgKGRlZmF1bHQgLVxcbiAgaWRlbnRpdHkpIG9uIHRoZSByZXN1bHQgYXJndW1lbnQuXCJcclxuIChbZl0gKGNvbXBsZXRpbmcgZiBpZGVudGl0eSkpXHJcbiAoW2YgY2ZdIChmbiAoW10gKGYpKSAoW3hdIChjZiB4KSkgKFt4IHldIChmIHggeSkpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1uZWdhdGUtaW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1uZWdhdGUtaW50IFt4XSAoY2xqcy5jb3JlL3VuY2hlY2tlZC1uZWdhdGUtaW50IHgpKVxyXG4ifSB7OnN5bSBoYXNoLXVub3JkZXJlZC1jb2xsLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgaGFzaCBjb2RlLCBjb25zaXN0ZW50IHdpdGggPSwgZm9yIGFuIGV4dGVybmFsIHVub3JkZXJlZFxuICAgY29sbGVjdGlvbiBpbXBsZW1lbnRpbmcgSXRlcmFibGUuIEZvciBtYXBzLCB0aGUgaXRlcmF0b3Igc2hvdWxkXG4gICByZXR1cm4gbWFwIGVudHJpZXMgd2hvc2UgaGFzaCBpcyBjb21wdXRlZCBhc1xuICAgICAoaGFzaC1vcmRlcmVkLWNvbGwgW2sgdl0pLlxuICAgU2VlIGh0dHA6Ly9jbG9qdXJlLm9yZy9kYXRhX3N0cnVjdHVyZXMjaGFzaCBmb3IgZnVsbCBhbGdvcml0aG1zLiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXNoLXVub3JkZXJlZC1jb2xsXHJcbiBcIlJldHVybnMgdGhlIGhhc2ggY29kZSwgY29uc2lzdGVudCB3aXRoID0sIGZvciBhbiBleHRlcm5hbCB1bm9yZGVyZWRcXG4gICBjb2xsZWN0aW9uIGltcGxlbWVudGluZyBJdGVyYWJsZS4gRm9yIG1hcHMsIHRoZSBpdGVyYXRvciBzaG91bGRcXG4gICByZXR1cm4gbWFwIGVudHJpZXMgd2hvc2UgaGFzaCBpcyBjb21wdXRlZCBhc1xcbiAgICAgKGhhc2gtb3JkZXJlZC1jb2xsIFtrIHZdKS5cXG4gICBTZWUgaHR0cDovL2Nsb2p1cmUub3JnL2RhdGFfc3RydWN0dXJlcyNoYXNoIGZvciBmdWxsIGFsZ29yaXRobXMuXCJcclxuIFtjb2xsXVxyXG4gKGxvb3BcclxuICBbbiAwIGhhc2gtY29kZSAwIGNvbGwgKHNlcSBjb2xsKV1cclxuICAoaWYtbm90XHJcbiAgIChuaWw/IGNvbGwpXHJcbiAgIChyZWN1clxyXG4gICAgKGluYyBuKVxyXG4gICAgKGJpdC1vciAoKyBoYXNoLWNvZGUgKGhhc2ggKGZpcnN0IGNvbGwpKSkgMClcclxuICAgIChuZXh0IGNvbGwpKVxyXG4gICAobWl4LWNvbGxlY3Rpb24taGFzaCBoYXNoLWNvZGUgbikpKSlcclxuIn0gezpzeW0gcmVwZWF0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGxhenkgKGluZmluaXRlISwgb3IgbGVuZ3RoIG4gaWYgc3VwcGxpZWQpIHNlcXVlbmNlIG9mIHhzLiIsIDphcmdsaXN0cyBbW3hdIFtuIHhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXBlYXRcclxuIFwiUmV0dXJucyBhIGxhenkgKGluZmluaXRlISwgb3IgbGVuZ3RoIG4gaWYgc3VwcGxpZWQpIHNlcXVlbmNlIG9mIHhzLlwiXHJcbiAoW3hdIChSZXBlYXQuIG5pbCAtMSB4IG5pbCBuaWwpKVxyXG4gKFtuIHhdIChpZiAocG9zPyBuKSAoUmVwZWF0LiBuaWwgbiB4IG5pbCBuaWwpICguLUVNUFRZIExpc3QpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1pbmMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm4gdW5jaGVja2VkLWluYyBbeF0gKGNsanMuY29yZS91bmNoZWNrZWQtaW5jIHgpKVxyXG4ifSB7OnN5bSBudGhuZXh0LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnRoIG5leHQgb2YgY29sbCwgKHNlcSBjb2xsKSB3aGVuIG4gaXMgMC4iLCA6YXJnbGlzdHMgKFtjb2xsIG5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBudGhuZXh0XHJcbiBcIlJldHVybnMgdGhlIG50aCBuZXh0IG9mIGNvbGwsIChzZXEgY29sbCkgd2hlbiBuIGlzIDAuXCJcclxuIFtjb2xsIG5dXHJcbiAobG9vcFxyXG4gIFtuIG4geHMgKHNlcSBjb2xsKV1cclxuICAoaWYgKGFuZCB4cyAocG9zPyBuKSkgKHJlY3VyIChkZWMgbikgKG5leHQgeHMpKSB4cykpKVxyXG4ifSB7OnN5bSBnZXQtdmFsaWRhdG9yLCA6bWV0YSB7OmRvYyAiR2V0cyB0aGUgdmFsaWRhdG9yLWZuIGZvciBhIHZhci9yZWYvYWdlbnQvYXRvbS4iLCA6YXJnbGlzdHMgKFtpcmVmXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXZhbGlkYXRvclxyXG4gXCJHZXRzIHRoZSB2YWxpZGF0b3ItZm4gZm9yIGEgdmFyL3JlZi9hZ2VudC9hdG9tLlwiXHJcbiBbaXJlZl1cclxuICguLXZhbGlkYXRvciBpcmVmKSlcclxuIn0gezpzeW0gbnVtYmVyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB4IGlzIGEgSmF2YVNjcmlwdCBudW1iZXIuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWJlcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHggaXMgYSBKYXZhU2NyaXB0IG51bWJlci5cIlxyXG4gW3hdXHJcbiAoY2xqcy5jb3JlL251bWJlcj8geCkpXHJcbiJ9IHs6c3ltIC1jb25qISwgOm1ldGEgezpkb2MgIkFkZHMgdmFsdWUgdmFsIHRvIHRjb2xsIGFuZCByZXR1cm5zIHRjb2xsLiIsIDphcmdsaXN0cyAoW3Rjb2xsIHZhbF0pfSwgOnByb3RvY29sIElUcmFuc2llbnRDb2xsZWN0aW9ufSB7OnN5bSBjaHVuay1uZXh0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaHVuay1uZXh0XHJcbiBbc11cclxuIChpZlxyXG4gIChpbXBsZW1lbnRzPyBJQ2h1bmtlZE5leHQgcylcclxuICAoLWNodW5rZWQtbmV4dCBzKVxyXG4gIChzZXEgKC1jaHVua2VkLXJlc3QgcykpKSlcclxuIn0gezpzeW0gcHJpbnQtc3RyLCA6bWV0YSB7OmRvYyAicHJpbnQgdG8gYSBzdHJpbmcsIHJldHVybmluZyBpdCIsIDphcmdsaXN0cyAoWyYgb2Jqc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LXN0clxyXG4gXCJwcmludCB0byBhIHN0cmluZywgcmV0dXJuaW5nIGl0XCJcclxuIFsmIG9ianNdXHJcbiAocHItc3RyLXdpdGgtb3B0cyBvYmpzIChhc3NvYyAocHItb3B0cykgOnJlYWRhYmx5IGZhbHNlKSkpXHJcbiJ9IHs6c3ltIG5vdC1hbnk/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBmYWxzZSBpZiAocHJlZCB4KSBpcyBsb2dpY2FsIHRydWUgZm9yIGFueSB4IGluIGNvbGwsXG4gIGVsc2UgdHJ1ZS4iLCA6YXJnbGlzdHMgKFtwcmVkIGNvbGxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub3QtYW55P1xyXG4gXCJSZXR1cm5zIGZhbHNlIGlmIChwcmVkIHgpIGlzIGxvZ2ljYWwgdHJ1ZSBmb3IgYW55IHggaW4gY29sbCxcXG4gIGVsc2UgdHJ1ZS5cIlxyXG4gW3ByZWQgY29sbF1cclxuIChub3QgKHNvbWUgcHJlZCBjb2xsKSkpXHJcbiJ9IHs6c3ltIGludG8tYXJyYXksIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGFycmF5IHdpdGggY29tcG9uZW50cyBzZXQgdG8gdGhlIHZhbHVlcyBpbiBhc2VxLiBPcHRpb25hbCB0eXBlXG4gIGFyZ3VtZW50IGFjY2VwdGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQ2xvanVyZS4iLCA6YXJnbGlzdHMgW1thc2VxXSBbdHlwZSBhc2VxXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50by1hcnJheVxyXG4gXCJSZXR1cm5zIGFuIGFycmF5IHdpdGggY29tcG9uZW50cyBzZXQgdG8gdGhlIHZhbHVlcyBpbiBhc2VxLiBPcHRpb25hbCB0eXBlXFxuICBhcmd1bWVudCBhY2NlcHRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIENsb2p1cmUuXCJcclxuIChbYXNlcV0gKGludG8tYXJyYXkgbmlsIGFzZXEpKVxyXG4gKFt0eXBlIGFzZXFdIChyZWR1Y2UgKGZuIFthIHhdICgucHVzaCBhIHgpIGEpIChhcnJheSkgYXNlcSkpKVxyXG4ifSB7OnN5bSAtaGFzaCwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGhhc2ggY29kZSBvZiBvLiIsIDphcmdsaXN0cyAoW29dKX0sIDpwcm90b2NvbCBJSGFzaH0gezpzeW0gcXVhbGlmaWVkLXN5bWJvbD8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgc3ltYm9sIHdpdGggYSBuYW1lc3BhY2UiLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcXVhbGlmaWVkLXN5bWJvbD9cclxuIFwiUmV0dXJuIHRydWUgaWYgeCBpcyBhIHN5bWJvbCB3aXRoIGEgbmFtZXNwYWNlXCJcclxuIFt4XVxyXG4gKGJvb2xlYW4gKGFuZCAoc3ltYm9sPyB4KSAobmFtZXNwYWNlIHgpIHRydWUpKSlcclxuIn0gezpzeW0gLWRpc3NvYyEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbmV3IHRyYW5zaWVudCBjb2xsZWN0aW9uIG9mIHRjb2xsIHdpdGhvdXQgdGhlIG1hcHBpbmcgZm9yIGtleS4iLCA6YXJnbGlzdHMgKFt0Y29sbCBrZXldKX0sIDpwcm90b2NvbCBJVHJhbnNpZW50TWFwfSB7OnN5bSBjaHVuay1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2FwYWNpdHldKX0sIDpzb3VyY2UgIihkZWZuIGNodW5rLWJ1ZmZlciBbY2FwYWNpdHldIChDaHVua0J1ZmZlci4gKG1ha2UtYXJyYXkgY2FwYWNpdHkpIDApKVxyXG4ifSB7OnN5bSBzZXFhYmxlPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHRoZSBzZXEgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIGZvciBzIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlcWFibGU/XHJcbiBcIlJldHVybiB0cnVlIGlmIHRoZSBzZXEgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIGZvciBzXCJcclxuIFtzXVxyXG4gKG9yIChuaWw/IHMpIChzYXRpc2ZpZXM/IElTZXFhYmxlIHMpIChhcnJheT8gcykgKHN0cmluZz8gcykpKVxyXG4ifSB7OnN5bSBzeW1ib2w/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgeCBpcyBhIFN5bWJvbCIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHN5bWJvbD8gXCJSZXR1cm4gdHJ1ZSBpZiB4IGlzIGEgU3ltYm9sXCIgW3hdIChpbnN0YW5jZT8gU3ltYm9sIHgpKVxyXG4ifSB7OnN5bSBtMy1oYXNoLXVuZW5jb2RlZC1jaGFycywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtpbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG0zLWhhc2gtdW5lbmNvZGVkLWNoYXJzXHJcbiBbaW5dXHJcbiAobGV0XHJcbiAgW2gxXHJcbiAgIChsb29wXHJcbiAgICBbaSAxIGgxIG0zLXNlZWRdXHJcbiAgICAoaWZcclxuICAgICAoPCBpICguLWxlbmd0aCBpbikpXHJcbiAgICAgKHJlY3VyXHJcbiAgICAgICgrIGkgMilcclxuICAgICAgKG0zLW1peC1IMVxyXG4gICAgICAgaDFcclxuICAgICAgIChtMy1taXgtSzFcclxuICAgICAgICAoYml0LW9yXHJcbiAgICAgICAgICguY2hhckNvZGVBdCBpbiAoZGVjIGkpKVxyXG4gICAgICAgICAoYml0LXNoaWZ0LWxlZnQgKC5jaGFyQ29kZUF0IGluIGkpIDE2KSkpKSlcclxuICAgICBoMSkpXHJcbiAgIGgxXHJcbiAgIChpZlxyXG4gICAgKD09IChiaXQtYW5kICguLWxlbmd0aCBpbikgMSkgMSlcclxuICAgIChiaXQteG9yIGgxIChtMy1taXgtSzEgKC5jaGFyQ29kZUF0IGluIChkZWMgKC4tbGVuZ3RoIGluKSkpKSlcclxuICAgIGgxKV1cclxuICAobTMtZm1peCBoMSAoaW11bCAyICguLWxlbmd0aCBpbikpKSkpXHJcbiJ9IHs6c3ltIHVuY2hlY2tlZC1jaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1jaGFyIFt4XSB4KVxyXG4ifSB7OnN5bSBzeXN0ZW0tdGltZSwgOm1ldGEgezpkb2MgIlJldHVybnMgaGlnaGVzdCByZXNvbHV0aW9uIHRpbWUgb2ZmZXJlZCBieSBob3N0IGluIG1pbGxpc2Vjb25kcy4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzeXN0ZW0tdGltZVxyXG4gXCJSZXR1cm5zIGhpZ2hlc3QgcmVzb2x1dGlvbiB0aW1lIG9mZmVyZWQgYnkgaG9zdCBpbiBtaWxsaXNlY29uZHMuXCJcclxuIFtdXHJcbiAoY29uZFxyXG4gIChhbmQgKGV4aXN0cz8ganMvcGVyZm9ybWFuY2UpIChub3QgKG5pbD8gKC4ganMvcGVyZm9ybWFuY2UgLW5vdykpKSlcclxuICAoLm5vdyBqcy9wZXJmb3JtYW5jZSlcclxuICAoYW5kIChleGlzdHM/IGpzL3Byb2Nlc3MpIChub3QgKG5pbD8gKC4ganMvcHJvY2VzcyAtaHJ0aW1lKSkpKVxyXG4gIChsZXRcclxuICAgW3QgKC5ocnRpbWUganMvcHJvY2VzcyldXHJcbiAgICgvICgrICgqIChhZ2V0IHQgMCkgMS4wRTkpIChhZ2V0IHQgMSkpIDEwMDAwMDAuMCkpXHJcbiAgOmVsc2VcclxuICAoLmdldFRpbWUgKGpzL0RhdGUuKSkpKVxyXG4ifSB7OnN5bSAtaW52b2tlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RoaXNdIFt0aGlzIGFdIFt0aGlzIGEgYl0gW3RoaXMgYSBiIGNdIFt0aGlzIGEgYiBjIGRdIFt0aGlzIGEgYiBjIGQgZV0gW3RoaXMgYSBiIGMgZCBlIGZdIFt0aGlzIGEgYiBjIGQgZSBmIGddIFt0aGlzIGEgYiBjIGQgZSBmIGcgaF0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGldIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGpdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGoga10gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGxdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG1dIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbl0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG9dIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHBdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcV0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHJdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHNdIFt0aGlzIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdF0gW3RoaXMgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHJlc3RdKX0sIDpwcm90b2NvbCBJRm59IHs6c3ltIGNvbGw/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHggc2F0aXNmaWVzIElDb2xsZWN0aW9uIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbGw/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiB4IHNhdGlzZmllcyBJQ29sbGVjdGlvblwiXHJcbiBbeF1cclxuIChpZiAobmlsPyB4KSBmYWxzZSAoc2F0aXNmaWVzPyBJQ29sbGVjdGlvbiB4KSkpXHJcbiJ9IHs6c3ltIGdldC1pbiwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHZhbHVlIGluIGEgbmVzdGVkIGFzc29jaWF0aXZlIHN0cnVjdHVyZSxcbiAgd2hlcmUga3MgaXMgYSBzZXF1ZW5jZSBvZiBrZXlzLiBSZXR1cm5zIG5pbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LFxuICBvciB0aGUgbm90LWZvdW5kIHZhbHVlIGlmIHN1cHBsaWVkLiIsIDphcmdsaXN0cyBbW20ga3NdIFttIGtzIG5vdC1mb3VuZF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1pblxyXG4gXCJSZXR1cm5zIHRoZSB2YWx1ZSBpbiBhIG5lc3RlZCBhc3NvY2lhdGl2ZSBzdHJ1Y3R1cmUsXFxuICB3aGVyZSBrcyBpcyBhIHNlcXVlbmNlIG9mIGtleXMuIFJldHVybnMgbmlsIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQsXFxuICBvciB0aGUgbm90LWZvdW5kIHZhbHVlIGlmIHN1cHBsaWVkLlwiXHJcbiB7OmFkZGVkIFwiMS4yXCIsIDpzdGF0aWMgdHJ1ZX1cclxuIChbbSBrc10gKHJlZHVjZSBnZXQgbSBrcykpXHJcbiAoW20ga3Mgbm90LWZvdW5kXVxyXG4gIChsb29wXHJcbiAgIFtzZW50aW5lbCBsb29rdXAtc2VudGluZWwgbSBtIGtzIChzZXEga3MpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBrcylcclxuICAgIChsZXRcclxuICAgICBbbSAoZ2V0IG0gKGZpcnN0IGtzKSBzZW50aW5lbCldXHJcbiAgICAgKGlmXHJcbiAgICAgIChpZGVudGljYWw/IHNlbnRpbmVsIG0pXHJcbiAgICAgIG5vdC1mb3VuZFxyXG4gICAgICAocmVjdXIgc2VudGluZWwgbSAobmV4dCBrcykpKSlcclxuICAgIG0pKSkpXHJcbiJ9IHs6c3ltIGZuZXh0LCA6bWV0YSB7OmRvYyAiU2FtZSBhcyAoZmlyc3QgKG5leHQgeCkpIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm4gZm5leHQgXCJTYW1lIGFzIChmaXJzdCAobmV4dCB4KSlcIiBbY29sbF0gKGZpcnN0IChuZXh0IGNvbGwpKSlcclxuIn0gezpzeW0gSUxpc3QsIDptZXRhIHs6ZG9jICJNYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgYSBwZXJzaXN0ZW50IGxpc3QifSwgOm1ldGhvZHMgKCl9IHs6c3ltIC12YWwsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbWFwIGVudHJ5LiIsIDphcmdsaXN0cyAoW2NvbGxdKX0sIDpwcm90b2NvbCBJTWFwRW50cnl9IHs6c3ltIGJ5dGVzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGJ5dGVzIFt4XSB4KVxyXG4ifSB7OnN5bSAtc2VxLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHNlcSBvZiBvLCBvciBuaWwgaWYgbyBpcyBlbXB0eS4iLCA6YXJnbGlzdHMgKFtvXSl9LCA6cHJvdG9jb2wgSVNlcWFibGV9KSwgY2xqcy50b29scy5yZWFkZXIucmVhZGVyLXR5cGVzICh7OnN5bSBpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbiBJbmRleGluZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXIiLCA6YXJnbGlzdHMgW1tzLW9yLXJkcl0gW3Mtb3ItcmRyIGJ1Zi1sZW5dIFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhbiBJbmRleGluZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXJcIlxyXG4gKFtzLW9yLXJkcl0gKGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgMSkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW5dIChpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4gbmlsKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXHJcbiAgKEluZGV4aW5nUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChpZlxyXG4gICAgKHN0cmluZz8gcy1vci1yZHIpXHJcbiAgICAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbilcclxuICAgIHMtb3ItcmRyKVxyXG4gICAxXHJcbiAgIDFcclxuICAgdHJ1ZVxyXG4gICBuaWxcclxuICAgMFxyXG4gICBmaWxlLW5hbWUpKSlcclxuIn0gezpzeW0gbG9nLXNvdXJjZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcmVhZGVyIGZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb2ctc291cmNlKlxyXG4gW3JlYWRlciBmXVxyXG4gKGxldFxyXG4gIFtidWZmZXIgKDpidWZmZXIgQCguLWZyYW1lcyByZWFkZXIpKV1cclxuICAodHJ5XHJcbiAgIChzd2FwIVxyXG4gICAgKC4tZnJhbWVzIHJlYWRlcilcclxuICAgIHVwZGF0ZS1pblxyXG4gICAgWzpvZmZzZXRdXHJcbiAgICBjb25qXHJcbiAgICAoLmdldExlbmd0aCBidWZmZXIpKVxyXG4gICAobGV0XHJcbiAgICBbcmV0IChmKV1cclxuICAgIChpZlxyXG4gICAgIChpbXBsZW1lbnRzPyBJTWV0YSByZXQpXHJcbiAgICAgKG1lcmdlLW1ldGEgcmV0IHs6c291cmNlIChwZWVrLXNvdXJjZS1sb2cgQCguLWZyYW1lcyByZWFkZXIpKX0pXHJcbiAgICAgcmV0KSlcclxuICAgKGZpbmFsbHkgKHN3YXAhICguLWZyYW1lcyByZWFkZXIpIHVwZGF0ZS1pbiBbOm9mZnNldF0gcmVzdCkpKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLW1ldGEsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSBhcyBgb2JqYCwgd2l0aCBpdHNcbm1ldGFkYXRhIG1lcmdlZCBvdmVyIGBtYC4iLCA6YXJnbGlzdHMgKFtvYmogbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLW1ldGFcclxuIFwiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgYG9iamAsIHdpdGggaXRzXFxubWV0YWRhdGEgbWVyZ2VkIG92ZXIgYG1gLlwiXHJcbiBbb2JqIG1dXHJcbiAobGV0XHJcbiAgW29yaWctbWV0YSAobWV0YSBvYmopXVxyXG4gICh3aXRoLW1ldGEgb2JqIChtZXJnZSBtIChkaXNzb2Mgb3JpZy1tZXRhIDpzb3VyY2UpKSkpKVxyXG4ifSB7OnN5bSBSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChwZWVrLWNoYXIgcmVhZC1jaGFyKX0gezpzeW0gc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyBvciBQdXNoYmFja1JlYWRlciIsIDphcmdsaXN0cyBbW3Mtb3ItcmRyXSBbcy1vci1yZHIgYnVmLWxlbl0gW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXV19LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWxvZ2dpbmctcHVzaC1iYWNrLXJlYWRlclxyXG4gXCJDcmVhdGVzIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXJcIlxyXG4gKFtzLW9yLXJkcl0gKHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgMSkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW5dXHJcbiAgKHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIgcy1vci1yZHIgYnVmLWxlbiBuaWwpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1cclxuICAoU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyLlxyXG4gICAoaWZcclxuICAgIChzdHJpbmc/IHMtb3ItcmRyKVxyXG4gICAgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4pXHJcbiAgICBzLW9yLXJkcilcclxuICAgMVxyXG4gICAxXHJcbiAgIHRydWVcclxuICAgbmlsXHJcbiAgIDBcclxuICAgZmlsZS1uYW1lXHJcbiAgIChhdG9tIHs6YnVmZmVyIChTdHJpbmdCdWZmZXIuKSwgOm9mZnNldCAnKDApfSkpKSlcclxuIn0gezpzeW0gdW5yZWFkLCA6bWV0YSB7OmRvYyAiUHVzaGVzIGJhY2sgYSBzaW5nbGUgY2hhcmFjdGVyIG9uIHRvIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXIgY2hdKX0sIDpwcm90b2NvbCBJUHVzaGJhY2tSZWFkZXJ9IHs6c3ltIHBlZWstY2hhciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgY2hhciBmcm9tIHRoZSBSZWFkZXIgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSByZWFkZXIgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgUmVhZGVyfSB7OnN5bSBJUHVzaGJhY2tSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzICh1bnJlYWQpfSB7OnN5bSBpbmRleGluZy1yZWFkZXI/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHRoZSByZWFkZXIgc2F0aXNmaWVzIEluZGV4aW5nUmVhZGVyIiwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhpbmctcmVhZGVyP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgdGhlIHJlYWRlciBzYXRpc2ZpZXMgSW5kZXhpbmdSZWFkZXJcIlxyXG4gW3Jkcl1cclxuIChpbXBsZW1lbnRzPyBJbmRleGluZ1JlYWRlciByZHIpKVxyXG4ifSB7OnN5bSBzdHJpbmctcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFN0cmluZ1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIiwgOmFyZ2xpc3RzIFtbc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZy1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFN0cmluZ1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nXCJcclxuIChbc10gKFN0cmluZ1JlYWRlci4gcyAoY291bnQgcykgMCkpKVxyXG4ifSB7OnN5bSByZWFkLWNoYXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IGNoYXIgZnJvbSB0aGUgUmVhZGVyLCBuaWwgaWYgdGhlIGVuZCBvZiBzdHJlYW0gaGFzIGJlZW4gcmVhY2hlZCIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIFJlYWRlcn0gezpzeW0gZ2V0LWNvbHVtbi1udW1iZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZWFkIGZyb20gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSB7OnN5bSBnZXQtZmlsZS1uYW1lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgZmlsZSBuYW1lIHRoZSByZWFkZXIgaXMgcmVhZGluZyBmcm9tLCBvciBuaWwiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0gezpzeW0gcmVhZC1saW5lLCA6bWV0YSB7OmRvYyAiUmVhZHMgYSBsaW5lIGZyb20gdGhlIHJlYWRlciBvciBmcm9tICppbiogaWYgbm8gcmVhZGVyIGlzIHNwZWNpZmllZCIsIDphcmdsaXN0cyBbW3Jkcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtbGluZVxyXG4gXCJSZWFkcyBhIGxpbmUgZnJvbSB0aGUgcmVhZGVyIG9yIGZyb20gKmluKiBpZiBubyByZWFkZXIgaXMgc3BlY2lmaWVkXCJcclxuIChbcmRyXVxyXG4gIChsb29wXHJcbiAgIFtjIChyZWFkLWNoYXIgcmRyKSBzIChTdHJpbmdCdWZmZXIuKV1cclxuICAgKGlmIChuZXdsaW5lPyBjKSAoc3RyIHMpIChyZWN1ciAocmVhZC1jaGFyIHJkcikgKC5hcHBlbmQgcyBjKSkpKSkpXHJcbiJ9IHs6c3ltIHN0cmluZy1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIFB1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmciLCA6YXJnbGlzdHMgW1tzXSBbcyBidWYtbGVuXV19LCA6c291cmNlICIoZGVmblxyXG4gc3RyaW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFB1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmdcIlxyXG4gKFtzXSAoc3RyaW5nLXB1c2gtYmFjay1yZWFkZXIgcyAxKSlcclxuIChbcyBidWYtbGVuXVxyXG4gIChQdXNoYmFja1JlYWRlci5cclxuICAgKHN0cmluZy1yZWFkZXIgcylcclxuICAgKG9iamVjdC1hcnJheSBidWYtbGVuKVxyXG4gICBidWYtbGVuXHJcbiAgIGJ1Zi1sZW4pKSlcclxuIn0gezpzeW0gbGluZS1zdGFydD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgcmRyIGlzIGFuIEluZGV4aW5nUmVhZGVyIGFuZCB0aGUgY3VycmVudCBjaGFyIHN0YXJ0cyBhIG5ldyBsaW5lIiwgOmFyZ2xpc3RzIChbcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZS1zdGFydD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciBhbmQgdGhlIGN1cnJlbnQgY2hhciBzdGFydHMgYSBuZXcgbGluZVwiXHJcbiBbcmRyXVxyXG4gKHdoZW4gKGluZGV4aW5nLXJlYWRlcj8gcmRyKSAoPT0gMSAoZ2V0LWNvbHVtbi1udW1iZXIgcmRyKSkpKVxyXG4ifSB7OnN5bSBzb3VyY2UtbG9nZ2luZy1yZWFkZXI/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1sb2dnaW5nLXJlYWRlcj9cclxuIFtyZHJdXHJcbiAoaW5zdGFuY2U/IFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciByZHIpKVxyXG4ifSB7OnN5bSBJbmRleGluZ1JlYWRlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGdldC1jb2x1bW4tbnVtYmVyIGdldC1maWxlLW5hbWUgZ2V0LWxpbmUtbnVtYmVyKX0gezpzeW0gbm9kZS1yZWFkYWJsZS1wdXNoLWJhY2stcmVhZGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlYWRhYmxlXSl9LCA6c291cmNlICIoZGVmblxyXG4gbm9kZS1yZWFkYWJsZS1wdXNoLWJhY2stcmVhZGVyXHJcbiBbcmVhZGFibGVdXHJcbiAoUHVzaGJhY2tSZWFkZXIuXHJcbiAgKE5vZGVSZWFkYWJsZVJlYWRlci4gcmVhZGFibGUgbmlsKVxyXG4gIChvYmplY3QtYXJyYXkgMSlcclxuICAxXHJcbiAgMSkpXHJcbiJ9IHs6c3ltIGdldC1saW5lLW51bWJlciwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZWFkIGZyb20gdGhlIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIEluZGV4aW5nUmVhZGVyfSksIGNsanMuZW52ICh7OnN5bSAqY29tcGlsZXIqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY29tcGlsZXIqIG5pbClcclxuIn0gezpzeW0gZGVmYXVsdC1jb21waWxlci1lbnYqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wdGlvbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZWZhdWx0LWNvbXBpbGVyLWVudipcclxuIFtvcHRpb25zXVxyXG4gKG1lcmdlXHJcbiAgezpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgeydjbGpzLnVzZXIgezpuYW1lICdjbGpzLnVzZXJ9fSxcclxuICAgOmNsanMuYW5hbHl6ZXIvY29uc3RhbnQtdGFibGUge30sXHJcbiAgIDpjbGpzLmFuYWx5emVyL2RhdGEtcmVhZGVycyB7fSxcclxuICAgOmNsanMuYW5hbHl6ZXIvZXh0ZXJuc1xyXG4gICAjPyg6Y2xqIChleHRlcm5zL2V4dGVybnMtbWFwICg6ZXh0ZXJucy1zb3VyY2VzIG9wdGlvbnMpKSA6Y2xqcyBuaWwpLFxyXG4gICA6b3B0aW9ucyBvcHRpb25zfVxyXG4gICM/QCg6Y2xqIFsod2hlbiAoYW5kICg9IDpub2RlanMgKDp0YXJnZXQgb3B0aW9ucykpIChub3QgKGZhbHNlPyAoOm5vZGVqcy1ydCBvcHRpb25zKSkpKSB7Om5vZGUtbW9kdWxlLWluZGV4IGRlcHMvbmF0aXZlLW5vZGUtbW9kdWxlc30pIHs6anMtZGVwZW5kZW5jeS1pbmRleCAoZGVwcy9qcy1kZXBlbmRlbmN5LWluZGV4IG9wdGlvbnMpfV0pKSlcclxuIn0gezpzeW0gZGVmYXVsdC1jb21waWxlci1lbnYsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbXSBbb3B0aW9uc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlZmF1bHQtY29tcGlsZXItZW52XHJcbiAoW10gKGRlZmF1bHQtY29tcGlsZXItZW52IHt9KSlcclxuIChbb3B0aW9uc10gKGF0b20gKGRlZmF1bHQtY29tcGlsZXItZW52KiBvcHRpb25zKSkpKVxyXG4ifSksIHBhcmVuLXNvdXAuY29uc29sZSAoezpzeW0gY3JlYXRlLWNvbnNvbGUtaGlzdG9yeSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjcmVhdGUtY29uc29sZS1oaXN0b3J5XHJcbiBbXVxyXG4gKGF0b20gezpjdXJyZW50LWxpbmUgMCwgOmxpbmVzIFtdLCA6c3RhcnQgMH0pKVxyXG4ifSB7OnN5bSBnZXQtY29uc29sZS1zdGFydCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWNvbnNvbGUtc3RhcnRcclxuIFsqY29uc29sZS1oaXN0b3J5XVxyXG4gKC0+ICpjb25zb2xlLWhpc3RvcnkgZGVyZWYgOnN0YXJ0KSlcclxuIn0gezpzeW0gdXBkYXRlLWNvbnNvbGUtc3RhcnQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3Rvcnkgc3RhcnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtY29uc29sZS1zdGFydCFcclxuIFsqY29uc29sZS1oaXN0b3J5IHN0YXJ0XVxyXG4gKHN3YXAhICpjb25zb2xlLWhpc3RvcnkgYXNzb2MgOnN0YXJ0IHN0YXJ0KSlcclxuIn0gezpzeW0gdXBkYXRlLWNvbnNvbGUtaGlzdG9yeSEsIDptZXRhIHs6ZG9jICJVcGRhdGVzIHRoZSBjb25zb2xlIGhpc3RvcnkgYXRvbS4iLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5IGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtY29uc29sZS1oaXN0b3J5IVxyXG4gXCJVcGRhdGVzIHRoZSBjb25zb2xlIGhpc3RvcnkgYXRvbS5cIlxyXG4gWypjb25zb2xlLWhpc3RvcnkgbGluZV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LWxpbmUgbGluZXNdfSBAKmNvbnNvbGUtaGlzdG9yeV1cclxuICAoc3dhcCFcclxuICAgKmNvbnNvbGUtaGlzdG9yeVxyXG4gICAoZm5cclxuICAgIFtjb25zb2xlLWhpc3RvcnldXHJcbiAgICAobGV0XHJcbiAgICAgW2xpbmVzXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGFuZCAoc2VxIGxpbmUpIChub3Q9IGxpbmUgKGxhc3QgbGluZXMpKSlcclxuICAgICAgIChjb25qIGxpbmVzIGxpbmUpXHJcbiAgICAgICBsaW5lcyldXHJcbiAgICAgKGFzc29jXHJcbiAgICAgIGNvbnNvbGUtaGlzdG9yeVxyXG4gICAgICA6Y3VycmVudC1saW5lXHJcbiAgICAgIChjb3VudCBsaW5lcylcclxuICAgICAgOmxpbmVzXHJcbiAgICAgIGxpbmVzKSkpKSkpXHJcbiJ9IHs6c3ltIGdldC1wcmV2aW91cy1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJldmlvdXMgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuIiwgOmFyZ2xpc3RzIChbKmNvbnNvbGUtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1wcmV2aW91cy1saW5lXHJcbiBcIlJldHVybnMgdGhlIHByZXZpb3VzIGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmNvbnNvbGUtaGlzdG9yeV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LWxpbmUgbGluZXNdfSBAKmNvbnNvbGUtaGlzdG9yeV1cclxuICAoZ2V0IGxpbmVzIChkZWMgY3VycmVudC1saW5lKSkpKVxyXG4ifSB7OnN5bSBnZXQtbmV4dC1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqY29uc29sZS1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LW5leHQtbGluZVxyXG4gXCJSZXR1cm5zIHRoZSBuZXh0IGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmNvbnNvbGUtaGlzdG9yeV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LWxpbmUgbGluZXNdfSBAKmNvbnNvbGUtaGlzdG9yeV1cclxuICAoZ2V0IGxpbmVzIChpbmMgY3VycmVudC1saW5lKSkpKVxyXG4ifSB7OnN5bSB1cCEsIDptZXRhIHs6ZG9jICJDaGFuZ2VzIHRoZSBjdXJyZW50IGxpbmUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cCFcclxuIFwiQ2hhbmdlcyB0aGUgY3VycmVudCBsaW5lIGFuZCByZXR1cm5zIHRoZSBwcmV2aW91cyBsaW5lIGZyb20gY29uc29sZS1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWypjb25zb2xlLWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW2xpbmUgKGdldC1wcmV2aW91cy1saW5lICpjb25zb2xlLWhpc3RvcnkpXVxyXG4gIChpZlxyXG4gICBsaW5lXHJcbiAgIChzd2FwISAqY29uc29sZS1oaXN0b3J5IHVwZGF0ZSA6Y3VycmVudC1saW5lIGRlYylcclxuICAgKHN3YXAhICpjb25zb2xlLWhpc3RvcnkgYXNzb2MgOmN1cnJlbnQtbGluZSAtMSkpXHJcbiAgbGluZSkpXHJcbiJ9IHs6c3ltIGRvd24hLCA6bWV0YSB7OmRvYyAiQ2hhbmdlcyB0aGUgY3VycmVudCBsaW5lIGFuZCByZXR1cm5zIHRoZSBuZXh0IGxpbmUgZnJvbSBjb25zb2xlLWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWypjb25zb2xlLWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkb3duIVxyXG4gXCJDaGFuZ2VzIHRoZSBjdXJyZW50IGxpbmUgYW5kIHJldHVybnMgdGhlIG5leHQgbGluZSBmcm9tIGNvbnNvbGUtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqY29uc29sZS1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFtsaW5lIChnZXQtbmV4dC1saW5lICpjb25zb2xlLWhpc3RvcnkpXVxyXG4gIChpZlxyXG4gICBsaW5lXHJcbiAgIChzd2FwISAqY29uc29sZS1oaXN0b3J5IHVwZGF0ZSA6Y3VycmVudC1saW5lIGluYylcclxuICAgKHN3YXAhXHJcbiAgICAqY29uc29sZS1oaXN0b3J5XHJcbiAgICBhc3NvY1xyXG4gICAgOmN1cnJlbnQtbGluZVxyXG4gICAgKC0+IEAqY29uc29sZS1oaXN0b3J5IDpsaW5lcyBjb3VudCkpKVxyXG4gIGxpbmUpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYyAoezpzeW0gUHViLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoc3ViKiB1bnN1YiogdW5zdWItYWxsKil9IHs6c3ltIHJlZHVjZSwgOm1ldGEgezpkb2MgImYgc2hvdWxkIGJlIGEgZnVuY3Rpb24gb2YgMiBhcmd1bWVudHMuIFJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmdcbiAgdGhlIHNpbmdsZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byBpbml0IGFuZCB0aGUgZmlyc3QgaXRlbSBmcm9tIHRoZVxuICBjaGFubmVsLCB0aGVuIGFwcGx5aW5nIGYgdG8gdGhhdCByZXN1bHQgYW5kIHRoZSAybmQgaXRlbSwgZXRjLiBJZlxuICB0aGUgY2hhbm5lbCBjbG9zZXMgd2l0aG91dCB5aWVsZGluZyBpdGVtcywgcmV0dXJucyBpbml0IGFuZCBmIGlzIG5vdFxuICBjYWxsZWQuIGNoIG11c3QgY2xvc2UgYmVmb3JlIHJlZHVjZSBwcm9kdWNlcyBhIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFtmIGluaXQgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWR1Y2VcclxuIFwiZiBzaG91bGQgYmUgYSBmdW5jdGlvbiBvZiAyIGFyZ3VtZW50cy4gUmV0dXJucyBhIGNoYW5uZWwgY29udGFpbmluZ1xcbiAgdGhlIHNpbmdsZSByZXN1bHQgb2YgYXBwbHlpbmcgZiB0byBpbml0IGFuZCB0aGUgZmlyc3QgaXRlbSBmcm9tIHRoZVxcbiAgY2hhbm5lbCwgdGhlbiBhcHBseWluZyBmIHRvIHRoYXQgcmVzdWx0IGFuZCB0aGUgMm5kIGl0ZW0sIGV0Yy4gSWZcXG4gIHRoZSBjaGFubmVsIGNsb3NlcyB3aXRob3V0IHlpZWxkaW5nIGl0ZW1zLCByZXR1cm5zIGluaXQgYW5kIGYgaXMgbm90XFxuICBjYWxsZWQuIGNoIG11c3QgY2xvc2UgYmVmb3JlIHJlZHVjZSBwcm9kdWNlcyBhIHJlc3VsdC5cIlxyXG4gW2YgaW5pdCBjaF1cclxuIChnby1sb29wXHJcbiAgW3JldCBpbml0XVxyXG4gIChsZXRcclxuICAgW3YgKDwhIGNoKV1cclxuICAgKGlmXHJcbiAgICAobmlsPyB2KVxyXG4gICAgcmV0XHJcbiAgICAobGV0IFtyZXQnIChmIHJldCB2KV0gKGlmIChyZWR1Y2VkPyByZXQnKSBAcmV0JyAocmVjdXIgcmV0JykpKSkpKSlcclxuIn0gezpzeW0gcmVtb3ZlPiwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyAoW3AgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZW1vdmU+XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiBbcCBjaF1cclxuIChmaWx0ZXI+IChjb21wbGVtZW50IHApIGNoKSlcclxuIn0gezpzeW0gdGltZW91dCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCBjbG9zZSBhZnRlciBtc2VjcyIsIDphcmdsaXN0cyAoW21zZWNzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGltZW91dFxyXG4gXCJSZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgY2xvc2UgYWZ0ZXIgbXNlY3NcIlxyXG4gW21zZWNzXVxyXG4gKHRpbWVycy90aW1lb3V0IG1zZWNzKSlcclxuIn0gezpzeW0gdW5zdWIqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3AgdiBjaF0pfSwgOnByb3RvY29sIFB1Yn0gezpzeW0gYWRtaXgqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW20gY2hdKX0sIDpwcm90b2NvbCBNaXh9IHs6c3ltIHVubWl4KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIGNoXSl9LCA6cHJvdG9jb2wgTWl4fSB7OnN5bSBtaXgsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGEgbWl4IG9mIG9uZSBvciBtb3JlIGlucHV0IGNoYW5uZWxzIHdoaWNoIHdpbGxcbiAgYmUgcHV0IG9uIHRoZSBzdXBwbGllZCBvdXQgY2hhbm5lbC4gSW5wdXQgc291cmNlcyBjYW4gYmUgYWRkZWQgdG9cbiAgdGhlIG1peCB3aXRoICdhZG1peCcsIGFuZCByZW1vdmVkIHdpdGggJ3VubWl4Jy4gQSBtaXggc3VwcG9ydHNcbiAgc29sb2luZywgbXV0aW5nIGFuZCBwYXVzaW5nIG11bHRpcGxlIGlucHV0cyBhdG9taWNhbGx5IHVzaW5nXG4gICd0b2dnbGUnLCBhbmQgY2FuIHNvbG8gdXNpbmcgZWl0aGVyIG11dGluZyBvciBwYXVzaW5nIGFzIGRldGVybWluZWRcbiAgYnkgJ3NvbG8tbW9kZScuXG5cbiAgRWFjaCBjaGFubmVsIGNhbiBoYXZlIHplcm8gb3IgbW9yZSBib29sZWFuIG1vZGVzIHNldCB2aWEgJ3RvZ2dsZSc6XG5cbiAgOnNvbG8gLSB3aGVuIHRydWUsIG9ubHkgdGhpcyAob25kIG90aGVyIHNvbG9lZCkgY2hhbm5lbChzKSB3aWxsIGFwcGVhclxuICAgICAgICAgIGluIHRoZSBtaXggb3V0cHV0IGNoYW5uZWwuIDptdXRlIGFuZCA6cGF1c2Ugc3RhdGVzIG9mIHNvbG9lZFxuICAgICAgICAgIGNoYW5uZWxzIGFyZSBpZ25vcmVkLiBJZiBzb2xvLW1vZGUgaXMgOm11dGUsIG5vbi1zb2xvZWRcbiAgICAgICAgICBjaGFubmVscyBhcmUgbXV0ZWQsIGlmIDpwYXVzZSwgbm9uLXNvbG9lZCBjaGFubmVscyBhcmVcbiAgICAgICAgICBwYXVzZWQuXG5cbiAgOm11dGUgLSBtdXRlZCBjaGFubmVscyB3aWxsIGhhdmUgdGhlaXIgY29udGVudHMgY29uc3VtZWQgYnV0IG5vdCBpbmNsdWRlZCBpbiB0aGUgbWl4XG4gIDpwYXVzZSAtIHBhdXNlZCBjaGFubmVscyB3aWxsIG5vdCBoYXZlIHRoZWlyIGNvbnRlbnRzIGNvbnN1bWVkIChhbmQgdGh1cyBhbHNvIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWl4KVxuIiwgOmFyZ2xpc3RzIChbb3V0XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWl4XHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBtaXggb2Ygb25lIG9yIG1vcmUgaW5wdXQgY2hhbm5lbHMgd2hpY2ggd2lsbFxcbiAgYmUgcHV0IG9uIHRoZSBzdXBwbGllZCBvdXQgY2hhbm5lbC4gSW5wdXQgc291cmNlcyBjYW4gYmUgYWRkZWQgdG9cXG4gIHRoZSBtaXggd2l0aCAnYWRtaXgnLCBhbmQgcmVtb3ZlZCB3aXRoICd1bm1peCcuIEEgbWl4IHN1cHBvcnRzXFxuICBzb2xvaW5nLCBtdXRpbmcgYW5kIHBhdXNpbmcgbXVsdGlwbGUgaW5wdXRzIGF0b21pY2FsbHkgdXNpbmdcXG4gICd0b2dnbGUnLCBhbmQgY2FuIHNvbG8gdXNpbmcgZWl0aGVyIG11dGluZyBvciBwYXVzaW5nIGFzIGRldGVybWluZWRcXG4gIGJ5ICdzb2xvLW1vZGUnLlxcblxcbiAgRWFjaCBjaGFubmVsIGNhbiBoYXZlIHplcm8gb3IgbW9yZSBib29sZWFuIG1vZGVzIHNldCB2aWEgJ3RvZ2dsZSc6XFxuXFxuICA6c29sbyAtIHdoZW4gdHJ1ZSwgb25seSB0aGlzIChvbmQgb3RoZXIgc29sb2VkKSBjaGFubmVsKHMpIHdpbGwgYXBwZWFyXFxuICAgICAgICAgIGluIHRoZSBtaXggb3V0cHV0IGNoYW5uZWwuIDptdXRlIGFuZCA6cGF1c2Ugc3RhdGVzIG9mIHNvbG9lZFxcbiAgICAgICAgICBjaGFubmVscyBhcmUgaWdub3JlZC4gSWYgc29sby1tb2RlIGlzIDptdXRlLCBub24tc29sb2VkXFxuICAgICAgICAgIGNoYW5uZWxzIGFyZSBtdXRlZCwgaWYgOnBhdXNlLCBub24tc29sb2VkIGNoYW5uZWxzIGFyZVxcbiAgICAgICAgICBwYXVzZWQuXFxuXFxuICA6bXV0ZSAtIG11dGVkIGNoYW5uZWxzIHdpbGwgaGF2ZSB0aGVpciBjb250ZW50cyBjb25zdW1lZCBidXQgbm90IGluY2x1ZGVkIGluIHRoZSBtaXhcXG4gIDpwYXVzZSAtIHBhdXNlZCBjaGFubmVscyB3aWxsIG5vdCBoYXZlIHRoZWlyIGNvbnRlbnRzIGNvbnN1bWVkIChhbmQgdGh1cyBhbHNvIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWl4KVxcblwiXHJcbiBbb3V0XVxyXG4gKGxldFxyXG4gIFtjc1xyXG4gICAoYXRvbSB7fSlcclxuICAgc29sby1tb2Rlc1xyXG4gICAjezpwYXVzZSA6bXV0ZX1cclxuICAgYXR0cnNcclxuICAgKGNvbmogc29sby1tb2RlcyA6c29sbylcclxuICAgc29sby1tb2RlXHJcbiAgIChhdG9tIDptdXRlKVxyXG4gICBjaGFuZ2VcclxuICAgKGNoYW4pXHJcbiAgIGNoYW5nZWRcclxuICAgKGZuKiBbXSAocHV0ISBjaGFuZ2UgdHJ1ZSkpXHJcbiAgIHBpY2tcclxuICAgKGZuXHJcbiAgICBbYXR0ciBjaHNdXHJcbiAgICAocmVkdWNlLWt2IChmbiBbcmV0IGMgdl0gKGlmIChhdHRyIHYpIChjb25qIHJldCBjKSByZXQpKSAje30gY2hzKSlcclxuICAgY2FsYy1zdGF0ZVxyXG4gICAoZm5cclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW2Noc1xyXG4gICAgICBAY3NcclxuICAgICAgbW9kZVxyXG4gICAgICBAc29sby1tb2RlXHJcbiAgICAgIHNvbG9zXHJcbiAgICAgIChwaWNrIDpzb2xvIGNocylcclxuICAgICAgcGF1c2VzXHJcbiAgICAgIChwaWNrIDpwYXVzZSBjaHMpXVxyXG4gICAgIHs6c29sb3Mgc29sb3MsXHJcbiAgICAgIDptdXRlcyAocGljayA6bXV0ZSBjaHMpLFxyXG4gICAgICA6cmVhZHNcclxuICAgICAgKGNvbmpcclxuICAgICAgIChpZlxyXG4gICAgICAgIChhbmQgKD0gbW9kZSA6cGF1c2UpIChub3QgKGVtcHR5PyBzb2xvcykpKVxyXG4gICAgICAgICh2ZWMgc29sb3MpXHJcbiAgICAgICAgKHZlYyAocmVtb3ZlIHBhdXNlcyAoa2V5cyBjaHMpKSkpXHJcbiAgICAgICBjaGFuZ2UpfSkpXHJcbiAgIG1cclxuICAgKHJlaWZ5XHJcbiAgICBNdXhcclxuICAgIChtdXhjaCogW19dIG91dClcclxuICAgIE1peFxyXG4gICAgKGFkbWl4KiBbXyBjaF0gKHN3YXAhIGNzIGFzc29jIGNoIHt9KSAoY2hhbmdlZCkpXHJcbiAgICAodW5taXgqIFtfIGNoXSAoc3dhcCEgY3MgZGlzc29jIGNoKSAoY2hhbmdlZCkpXHJcbiAgICAodW5taXgtYWxsKiBbX10gKHJlc2V0ISBjcyB7fSkgKGNoYW5nZWQpKVxyXG4gICAgKHRvZ2dsZSpcclxuICAgICBbXyBzdGF0ZS1tYXBdXHJcbiAgICAgKHN3YXAhIGNzIChwYXJ0aWFsIG1lcmdlLXdpdGggY2xqcy5jb3JlL21lcmdlKSBzdGF0ZS1tYXApXHJcbiAgICAgKGNoYW5nZWQpKVxyXG4gICAgKHNvbG8tbW9kZSpcclxuICAgICBbXyBtb2RlXVxyXG4gICAgIChhc3NlcnRcclxuICAgICAgKHNvbG8tbW9kZXMgbW9kZSlcclxuICAgICAgKHN0ciBcIm1vZGUgbXVzdCBiZSBvbmUgb2Y6IFwiIHNvbG8tbW9kZXMpKVxyXG4gICAgIChyZXNldCEgc29sby1tb2RlIG1vZGUpXHJcbiAgICAgKGNoYW5nZWQpKSldXHJcbiAgKGdvLWxvb3BcclxuICAgW3s6a2V5cyBbc29sb3MgbXV0ZXMgcmVhZHNdLCA6YXMgc3RhdGV9IChjYWxjLXN0YXRlKV1cclxuICAgKGxldFxyXG4gICAgW1t2IGNdIChhbHRzISByZWFkcyldXHJcbiAgICAoaWZcclxuICAgICAob3IgKG5pbD8gdikgKD0gYyBjaGFuZ2UpKVxyXG4gICAgIChkbyAod2hlbiAobmlsPyB2KSAoc3dhcCEgY3MgZGlzc29jIGMpKSAocmVjdXIgKGNhbGMtc3RhdGUpKSlcclxuICAgICAoaWZcclxuICAgICAgKG9yIChzb2xvcyBjKSAoYW5kIChlbXB0eT8gc29sb3MpIChub3QgKG11dGVzIGMpKSkpXHJcbiAgICAgICh3aGVuICg+ISBvdXQgdikgKHJlY3VyIHN0YXRlKSlcclxuICAgICAgKHJlY3VyIHN0YXRlKSkpKSlcclxuICBtKSlcclxuIn0gezpzeW0gcHViLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHB1YihsaWNhdGlvbikgb2YgdGhlIHN1cHBsaWVkIGNoYW5uZWwsXG4gIHBhcnRpdGlvbmVkIGludG8gdG9waWNzIGJ5IHRoZSB0b3BpYy1mbi4gdG9waWMtZm4gd2lsbCBiZSBhcHBsaWVkIHRvXG4gIGVhY2ggdmFsdWUgb24gdGhlIGNoYW5uZWwgYW5kIHRoZSByZXN1bHQgd2lsbCBkZXRlcm1pbmUgdGhlICd0b3BpYydcbiAgb24gd2hpY2ggdGhhdCB2YWx1ZSB3aWxsIGJlIHB1dC4gQ2hhbm5lbHMgY2FuIGJlIHN1YnNjcmliZWQgdG9cbiAgcmVjZWl2ZSBjb3BpZXMgb2YgdG9waWNzIHVzaW5nICdzdWInLCBhbmQgdW5zdWJzY3JpYmVkIHVzaW5nXG4gICd1bnN1YicuIEVhY2ggdG9waWMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFuIGludGVybmFsIG11bHQgb24gYVxuICBkZWRpY2F0ZWQgY2hhbm5lbC4gQnkgZGVmYXVsdCB0aGVzZSBpbnRlcm5hbCBjaGFubmVscyBhcmVcbiAgdW5idWZmZXJlZCwgYnV0IGEgYnVmLWZuIGNhbiBiZSBzdXBwbGllZCB3aGljaCwgZ2l2ZW4gYSB0b3BpYyxcbiAgY3JlYXRlcyBhIGJ1ZmZlciB3aXRoIGRlc2lyZWQgcHJvcGVydGllcy5cblxuICBFYWNoIGl0ZW0gaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHN1YnMgaW4gcGFyYWxsZWwgYW5kIHN5bmNocm9ub3VzbHksXG4gIGkuZS4gZWFjaCBzdWIgbXVzdCBhY2NlcHQgYmVmb3JlIHRoZSBuZXh0IGl0ZW0gaXMgZGlzdHJpYnV0ZWQuIFVzZVxuICBidWZmZXJpbmcvd2luZG93aW5nIHRvIHByZXZlbnQgc2xvdyBzdWJzIGZyb20gaG9sZGluZyB1cCB0aGUgcHViLlxuXG4gIEl0ZW1zIHJlY2VpdmVkIHdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHN1YnMgZ2V0IGRyb3BwZWQuXG5cbiAgTm90ZSB0aGF0IGlmIGJ1Zi1mbnMgYXJlIHVzZWQgdGhlbiBlYWNoIHRvcGljIGlzIGhhbmRsZWRcbiAgYXN5bmNocm9ub3VzbHksIGkuZS4gaWYgYSBjaGFubmVsIGlzIHN1YnNjcmliZWQgdG8gbW9yZSB0aGFuIG9uZVxuICB0b3BpYyBpdCBzaG91bGQgbm90IGV4cGVjdCB0aGVtIHRvIGJlIGludGVybGVhdmVkIGlkZW50aWNhbGx5IHdpdGhcbiAgdGhlIHNvdXJjZS4iLCA6YXJnbGlzdHMgW1tjaCB0b3BpYy1mbl0gW2NoIHRvcGljLWZuIGJ1Zi1mbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHB1YlxyXG4gXCJDcmVhdGVzIGFuZCByZXR1cm5zIGEgcHViKGxpY2F0aW9uKSBvZiB0aGUgc3VwcGxpZWQgY2hhbm5lbCxcXG4gIHBhcnRpdGlvbmVkIGludG8gdG9waWNzIGJ5IHRoZSB0b3BpYy1mbi4gdG9waWMtZm4gd2lsbCBiZSBhcHBsaWVkIHRvXFxuICBlYWNoIHZhbHVlIG9uIHRoZSBjaGFubmVsIGFuZCB0aGUgcmVzdWx0IHdpbGwgZGV0ZXJtaW5lIHRoZSAndG9waWMnXFxuICBvbiB3aGljaCB0aGF0IHZhbHVlIHdpbGwgYmUgcHV0LiBDaGFubmVscyBjYW4gYmUgc3Vic2NyaWJlZCB0b1xcbiAgcmVjZWl2ZSBjb3BpZXMgb2YgdG9waWNzIHVzaW5nICdzdWInLCBhbmQgdW5zdWJzY3JpYmVkIHVzaW5nXFxuICAndW5zdWInLiBFYWNoIHRvcGljIHdpbGwgYmUgaGFuZGxlZCBieSBhbiBpbnRlcm5hbCBtdWx0IG9uIGFcXG4gIGRlZGljYXRlZCBjaGFubmVsLiBCeSBkZWZhdWx0IHRoZXNlIGludGVybmFsIGNoYW5uZWxzIGFyZVxcbiAgdW5idWZmZXJlZCwgYnV0IGEgYnVmLWZuIGNhbiBiZSBzdXBwbGllZCB3aGljaCwgZ2l2ZW4gYSB0b3BpYyxcXG4gIGNyZWF0ZXMgYSBidWZmZXIgd2l0aCBkZXNpcmVkIHByb3BlcnRpZXMuXFxuXFxuICBFYWNoIGl0ZW0gaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHN1YnMgaW4gcGFyYWxsZWwgYW5kIHN5bmNocm9ub3VzbHksXFxuICBpLmUuIGVhY2ggc3ViIG11c3QgYWNjZXB0IGJlZm9yZSB0aGUgbmV4dCBpdGVtIGlzIGRpc3RyaWJ1dGVkLiBVc2VcXG4gIGJ1ZmZlcmluZy93aW5kb3dpbmcgdG8gcHJldmVudCBzbG93IHN1YnMgZnJvbSBob2xkaW5nIHVwIHRoZSBwdWIuXFxuXFxuICBJdGVtcyByZWNlaXZlZCB3aGVuIHRoZXJlIGFyZSBubyBtYXRjaGluZyBzdWJzIGdldCBkcm9wcGVkLlxcblxcbiAgTm90ZSB0aGF0IGlmIGJ1Zi1mbnMgYXJlIHVzZWQgdGhlbiBlYWNoIHRvcGljIGlzIGhhbmRsZWRcXG4gIGFzeW5jaHJvbm91c2x5LCBpLmUuIGlmIGEgY2hhbm5lbCBpcyBzdWJzY3JpYmVkIHRvIG1vcmUgdGhhbiBvbmVcXG4gIHRvcGljIGl0IHNob3VsZCBub3QgZXhwZWN0IHRoZW0gdG8gYmUgaW50ZXJsZWF2ZWQgaWRlbnRpY2FsbHkgd2l0aFxcbiAgdGhlIHNvdXJjZS5cIlxyXG4gKFtjaCB0b3BpYy1mbl0gKHB1YiBjaCB0b3BpYy1mbiAoY29uc3RhbnRseSBuaWwpKSlcclxuIChbY2ggdG9waWMtZm4gYnVmLWZuXVxyXG4gIChsZXRcclxuICAgW211bHRzXHJcbiAgICAoYXRvbSB7fSlcclxuICAgIGVuc3VyZS1tdWx0XHJcbiAgICAoZm5cclxuICAgICBbdG9waWNdXHJcbiAgICAgKG9yXHJcbiAgICAgIChnZXQgQG11bHRzIHRvcGljKVxyXG4gICAgICAoZ2V0XHJcbiAgICAgICAoc3dhcCFcclxuICAgICAgICBtdWx0c1xyXG4gICAgICAgIChmbipcclxuICAgICAgICAgW3AxX180ODY2OCNdXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKHAxX180ODY2OCMgdG9waWMpXHJcbiAgICAgICAgICBwMV9fNDg2NjgjXHJcbiAgICAgICAgICAoYXNzb2MgcDFfXzQ4NjY4IyB0b3BpYyAobXVsdCAoY2hhbiAoYnVmLWZuIHRvcGljKSkpKSkpKVxyXG4gICAgICAgdG9waWMpKSlcclxuICAgIHBcclxuICAgIChyZWlmeVxyXG4gICAgIE11eFxyXG4gICAgIChtdXhjaCogW19dIGNoKVxyXG4gICAgIFB1YlxyXG4gICAgIChzdWIqXHJcbiAgICAgIFtwIHRvcGljIGNoIGNsb3NlP11cclxuICAgICAgKGxldCBbbSAoZW5zdXJlLW11bHQgdG9waWMpXSAodGFwIG0gY2ggY2xvc2U/KSkpXHJcbiAgICAgKHVuc3ViKlxyXG4gICAgICBbcCB0b3BpYyBjaF1cclxuICAgICAgKHdoZW4tbGV0IFttIChnZXQgQG11bHRzIHRvcGljKV0gKHVudGFwIG0gY2gpKSlcclxuICAgICAodW5zdWItYWxsKiBbX10gKHJlc2V0ISBtdWx0cyB7fSkpXHJcbiAgICAgKHVuc3ViLWFsbCogW18gdG9waWNdIChzd2FwISBtdWx0cyBkaXNzb2MgdG9waWMpKSldXHJcbiAgIChnby1sb29wXHJcbiAgICBbXVxyXG4gICAgKGxldFxyXG4gICAgIFt2YWwgKDwhIGNoKV1cclxuICAgICAoaWZcclxuICAgICAgKG5pbD8gdmFsKVxyXG4gICAgICAoZG9zZXEgW20gKHZhbHMgQG11bHRzKV0gKGNsb3NlISAobXV4Y2gqIG0pKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW3RvcGljICh0b3BpYy1mbiB2YWwpIG0gKGdldCBAbXVsdHMgdG9waWMpXVxyXG4gICAgICAgKHdoZW5cclxuICAgICAgICBtXHJcbiAgICAgICAgKHdoZW4tbm90ICg+ISAobXV4Y2gqIG0pIHZhbCkgKHN3YXAhIG11bHRzIGRpc3NvYyB0b3BpYykpKVxyXG4gICAgICAgKHJlY3VyKSkpKSlcclxuICAgcCkpKVxyXG4ifSB7OnN5bSB0YWtlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGNoYW5uZWwgdGhhdCB3aWxsIHJldHVybiwgYXQgbW9zdCwgbiBpdGVtcyBmcm9tIGNoLiBBZnRlciBuIGl0ZW1zXG4gICBoYXZlIGJlZW4gcmV0dXJuZWQsIG9yIGNoIGhhcyBiZWVuIGNsb3NlZCwgdGhlIHJldHVybiBjaGFuZWwgd2lsbCBjbG9zZS5cblxuICBUaGUgb3V0cHV0IGNoYW5uZWwgaXMgdW5idWZmZXJlZCBieSBkZWZhdWx0LCB1bmxlc3MgYnVmLW9yLW4gaXMgZ2l2ZW4uIiwgOmFyZ2xpc3RzIFtbbiBjaF0gW24gY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlXHJcbiBcIlJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCByZXR1cm4sIGF0IG1vc3QsIG4gaXRlbXMgZnJvbSBjaC4gQWZ0ZXIgbiBpdGVtc1xcbiAgIGhhdmUgYmVlbiByZXR1cm5lZCwgb3IgY2ggaGFzIGJlZW4gY2xvc2VkLCB0aGUgcmV0dXJuIGNoYW5lbCB3aWxsIGNsb3NlLlxcblxcbiAgVGhlIG91dHB1dCBjaGFubmVsIGlzIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgdW5sZXNzIGJ1Zi1vci1uIGlzIGdpdmVuLlwiXHJcbiAoW24gY2hdICh0YWtlIG4gY2ggbmlsKSlcclxuIChbbiBjaCBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ29cclxuICAgIChsb29wXHJcbiAgICAgW3ggMF1cclxuICAgICAod2hlblxyXG4gICAgICAoPCB4IG4pXHJcbiAgICAgIChsZXRcclxuICAgICAgIFt2ICg8ISBjaCldXHJcbiAgICAgICAod2hlbiAobm90IChuaWw/IHYpKSAoPiEgb3V0IHYpIChyZWN1ciAoaW5jIHgpKSkpKSlcclxuICAgIChjbG9zZSEgb3V0KSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIHVuc3ViLWFsbCosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcF0gW3Agdl0pfSwgOnByb3RvY29sIFB1Yn0gezpzeW0gPCEsIDptZXRhIHs6ZG9jICJ0YWtlcyBhIHZhbCBmcm9tIHBvcnQuIE11c3QgYmUgY2FsbGVkIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBXaWxsXG4gIHJldHVybiBuaWwgaWYgY2xvc2VkLiBXaWxsIHBhcmsgaWYgbm90aGluZyBpcyBhdmFpbGFibGUuXG4gIFJldHVybnMgdHJ1ZSB1bmxlc3MgcG9ydCBpcyBhbHJlYWR5IGNsb3NlZCIsIDphcmdsaXN0cyAoW3BvcnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiA8IVxyXG4gXCJ0YWtlcyBhIHZhbCBmcm9tIHBvcnQuIE11c3QgYmUgY2FsbGVkIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBXaWxsXFxuICByZXR1cm4gbmlsIGlmIGNsb3NlZC4gV2lsbCBwYXJrIGlmIG5vdGhpbmcgaXMgYXZhaWxhYmxlLlxcbiAgUmV0dXJucyB0cnVlIHVubGVzcyBwb3J0IGlzIGFscmVhZHkgY2xvc2VkXCJcclxuIFtwb3J0XVxyXG4gKHRocm93IChqcy9FcnJvci4gXCI8ISB1c2VkIG5vdCBpbiAoZ28gLi4uKSBibG9ja1wiKSkpXHJcbiJ9IHs6c3ltIG1hcCwgOm1ldGEgezpkb2MgIlRha2VzIGEgZnVuY3Rpb24gYW5kIGEgY29sbGVjdGlvbiBvZiBzb3VyY2UgY2hhbm5lbHMsIGFuZCByZXR1cm5zIGFcbiAgY2hhbm5lbCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIGYgdG8gdGhlIHNldFxuICBvZiBmaXJzdCBpdGVtcyB0YWtlbiBmcm9tIGVhY2ggc291cmNlIGNoYW5uZWwsIGZvbGxvd2VkIGJ5IGFwcGx5aW5nXG4gIGYgdG8gdGhlIHNldCBvZiBzZWNvbmQgaXRlbXMgZnJvbSBlYWNoIGNoYW5uZWwsIHVudGlsIGFueSBvbmUgb2YgdGhlXG4gIGNoYW5uZWxzIGlzIGNsb3NlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG91dHB1dCBjaGFubmVsIHdpbGwgYmVcbiAgY2xvc2VkLiBUaGUgcmV0dXJuZWQgY2hhbm5lbCB3aWxsIGJlIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgYVxuICBidWYtb3ItbiBjYW4gYmUgc3VwcGxpZWQiLCA6YXJnbGlzdHMgW1tmIGNoc10gW2YgY2hzIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gbWFwXHJcbiBcIlRha2VzIGEgZnVuY3Rpb24gYW5kIGEgY29sbGVjdGlvbiBvZiBzb3VyY2UgY2hhbm5lbHMsIGFuZCByZXR1cm5zIGFcXG4gIGNoYW5uZWwgd2hpY2ggY29udGFpbnMgdGhlIHZhbHVlcyBwcm9kdWNlZCBieSBhcHBseWluZyBmIHRvIHRoZSBzZXRcXG4gIG9mIGZpcnN0IGl0ZW1zIHRha2VuIGZyb20gZWFjaCBzb3VyY2UgY2hhbm5lbCwgZm9sbG93ZWQgYnkgYXBwbHlpbmdcXG4gIGYgdG8gdGhlIHNldCBvZiBzZWNvbmQgaXRlbXMgZnJvbSBlYWNoIGNoYW5uZWwsIHVudGlsIGFueSBvbmUgb2YgdGhlXFxuICBjaGFubmVscyBpcyBjbG9zZWQsIGF0IHdoaWNoIHBvaW50IHRoZSBvdXRwdXQgY2hhbm5lbCB3aWxsIGJlXFxuICBjbG9zZWQuIFRoZSByZXR1cm5lZCBjaGFubmVsIHdpbGwgYmUgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciBhXFxuICBidWYtb3ItbiBjYW4gYmUgc3VwcGxpZWRcIlxyXG4gKFtmIGNoc10gKG1hcCBmIGNocyBuaWwpKVxyXG4gKFtmIGNocyBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtjaHNcclxuICAgICh2ZWMgY2hzKVxyXG4gICAgb3V0XHJcbiAgICAoY2hhbiBidWYtb3ItbilcclxuICAgIGNudFxyXG4gICAgKGNvdW50IGNocylcclxuICAgIHJldHNcclxuICAgIChvYmplY3QtYXJyYXkgY250KVxyXG4gICAgZGNoYW5cclxuICAgIChjaGFuIDEpXHJcbiAgICBkY3RyXHJcbiAgICAoYXRvbSBuaWwpXHJcbiAgICBkb25lXHJcbiAgICAobWFwdlxyXG4gICAgIChmblxyXG4gICAgICBbaV1cclxuICAgICAgKGZuXHJcbiAgICAgICBbcmV0XVxyXG4gICAgICAgKGFzZXQgcmV0cyBpIHJldClcclxuICAgICAgICh3aGVuICh6ZXJvPyAoc3dhcCEgZGN0ciBkZWMpKSAocHV0ISBkY2hhbiAoLnNsaWNlIHJldHMgMCkpKSkpXHJcbiAgICAgKHJhbmdlIGNudCkpXVxyXG4gICAoZ28tbG9vcFxyXG4gICAgW11cclxuICAgIChyZXNldCEgZGN0ciBjbnQpXHJcbiAgICAoZG90aW1lc1xyXG4gICAgIFtpIGNudF1cclxuICAgICAodHJ5XHJcbiAgICAgICh0YWtlISAoY2hzIGkpIChkb25lIGkpKVxyXG4gICAgICAoY2F0Y2gganMvT2JqZWN0IGUgKHN3YXAhIGRjdHIgZGVjKSkpKVxyXG4gICAgKGxldFxyXG4gICAgIFtyZXRzICg8ISBkY2hhbildXHJcbiAgICAgKGlmXHJcbiAgICAgIChzb21lIG5pbD8gcmV0cylcclxuICAgICAgKGNsb3NlISBvdXQpXHJcbiAgICAgIChkbyAoPiEgb3V0IChhcHBseSBmIHJldHMpKSAocmVjdXIpKSkpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gTXV4LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAobXV4Y2gqKX0gezpzeW0gbWFwY2F0PiwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW2Ygb3V0XSBbZiBvdXQgYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXBjYXQ+XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW2Ygb3V0XSAobWFwY2F0PiBmIG91dCBuaWwpKVxyXG4gKFtmIG91dCBidWYtb3Itbl0gKGxldCBbaW4gKGNoYW4gYnVmLW9yLW4pXSAobWFwY2F0KiBmIGluIG91dCkgaW4pKSlcclxuIn0gezpzeW0gYnVmZmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIGZpeGVkIGJ1ZmZlciBvZiBzaXplIG4uIFdoZW4gZnVsbCwgcHV0cyB3aWxsIGJsb2NrL3BhcmsuIiwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGJ1ZmZlclxyXG4gXCJSZXR1cm5zIGEgZml4ZWQgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgYmxvY2svcGFyay5cIlxyXG4gW25dXHJcbiAoYnVmZmVycy9maXhlZC1idWZmZXIgbikpXHJcbiJ9IHs6c3ltIGNsb3NlISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1twb3J0XV19LCA6c291cmNlICIoZGVmbiBjbG9zZSEgKFtwb3J0XSAoaW1wbC9jbG9zZSEgcG9ydCkpKVxyXG4ifSB7OnN5bSBvZmZlciEsIDptZXRhIHs6ZG9jICJQdXRzIGEgdmFsIGludG8gcG9ydCBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIHNvIGltbWVkaWF0ZWx5LlxuICBuaWwgdmFsdWVzIGFyZSBub3QgYWxsb3dlZC4gTmV2ZXIgYmxvY2tzLiBSZXR1cm5zIHRydWUgaWYgb2ZmZXIgc3VjY2VlZHMuIiwgOmFyZ2xpc3RzIChbcG9ydCB2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvZmZlciFcclxuIFwiUHV0cyBhIHZhbCBpbnRvIHBvcnQgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseS5cXG4gIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBOZXZlciBibG9ja3MuIFJldHVybnMgdHJ1ZSBpZiBvZmZlciBzdWNjZWVkcy5cIlxyXG4gW3BvcnQgdmFsXVxyXG4gKGxldFxyXG4gIFtyZXQgKGltcGwvcHV0ISBwb3J0IHZhbCAoZm4taGFuZGxlciBub3AgZmFsc2UpKV1cclxuICAod2hlbiByZXQgQHJldCkpKVxyXG4ifSB7OnN5bSBjaGFuLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aCBhbiBvcHRpb25hbCBidWZmZXIsIGFuIG9wdGlvbmFsIHRyYW5zZHVjZXIgKGxpa2UgKG1hcCBmKSxcbiAgKGZpbHRlciBwKSBldGMgb3IgYSBjb21wb3NpdGlvbiB0aGVyZW9mKSwgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBoYW5kbGVyLlxuICBJZiBidWYtb3ItbiBpcyBhIG51bWJlciwgd2lsbCBjcmVhdGUgYW5kIHVzZSBhIGZpeGVkIGJ1ZmZlciBvZiB0aGF0IHNpemUuIElmIGFcbiAgdHJhbnNkdWNlciBpcyBzdXBwbGllZCBhIGJ1ZmZlciBtdXN0IGJlIHNwZWNpZmllZC4gZXgtaGFuZGxlciBtdXN0IGJlIGFcbiAgZm4gb2Ygb25lIGFyZ3VtZW50IC0gaWYgYW4gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgdHJhbnNmb3JtYXRpb24gaXQgd2lsbCBiZSBjYWxsZWRcbiAgd2l0aCB0aGUgdGhyb3duIHZhbHVlIGFzIGFuIGFyZ3VtZW50LCBhbmQgYW55IG5vbi1uaWwgcmV0dXJuIHZhbHVlIHdpbGwgYmUgcGxhY2VkXG4gIGluIHRoZSBjaGFubmVsLiIsIDphcmdsaXN0cyBbW10gW2J1Zi1vci1uXSBbYnVmLW9yLW4geGZvcm1dIFtidWYtb3ItbiB4Zm9ybSBleC1oYW5kbGVyXV19LCA6c291cmNlICIoZGVmblxyXG4gY2hhblxyXG4gXCJDcmVhdGVzIGEgY2hhbm5lbCB3aXRoIGFuIG9wdGlvbmFsIGJ1ZmZlciwgYW4gb3B0aW9uYWwgdHJhbnNkdWNlciAobGlrZSAobWFwIGYpLFxcbiAgKGZpbHRlciBwKSBldGMgb3IgYSBjb21wb3NpdGlvbiB0aGVyZW9mKSwgYW5kIGFuIG9wdGlvbmFsIGV4Y2VwdGlvbiBoYW5kbGVyLlxcbiAgSWYgYnVmLW9yLW4gaXMgYSBudW1iZXIsIHdpbGwgY3JlYXRlIGFuZCB1c2UgYSBmaXhlZCBidWZmZXIgb2YgdGhhdCBzaXplLiBJZiBhXFxuICB0cmFuc2R1Y2VyIGlzIHN1cHBsaWVkIGEgYnVmZmVyIG11c3QgYmUgc3BlY2lmaWVkLiBleC1oYW5kbGVyIG11c3QgYmUgYVxcbiAgZm4gb2Ygb25lIGFyZ3VtZW50IC0gaWYgYW4gZXhjZXB0aW9uIG9jY3VycyBkdXJpbmcgdHJhbnNmb3JtYXRpb24gaXQgd2lsbCBiZSBjYWxsZWRcXG4gIHdpdGggdGhlIHRocm93biB2YWx1ZSBhcyBhbiBhcmd1bWVudCwgYW5kIGFueSBub24tbmlsIHJldHVybiB2YWx1ZSB3aWxsIGJlIHBsYWNlZFxcbiAgaW4gdGhlIGNoYW5uZWwuXCJcclxuIChbXSAoY2hhbiBuaWwpKVxyXG4gKFtidWYtb3Itbl0gKGNoYW4gYnVmLW9yLW4gbmlsIG5pbCkpXHJcbiAoW2J1Zi1vci1uIHhmb3JtXSAoY2hhbiBidWYtb3ItbiB4Zm9ybSBuaWwpKVxyXG4gKFtidWYtb3ItbiB4Zm9ybSBleC1oYW5kbGVyXVxyXG4gIChsZXRcclxuICAgW2J1Zi1vci1uIChpZiAoPSBidWYtb3ItbiAwKSBuaWwgYnVmLW9yLW4pXVxyXG4gICAod2hlblxyXG4gICAgeGZvcm1cclxuICAgIChhc3NlcnQgYnVmLW9yLW4gXCJidWZmZXIgbXVzdCBiZSBzdXBwbGllZCB3aGVuIHRyYW5zZHVjZXIgaXNcIikpXHJcbiAgIChjaGFubmVscy9jaGFuXHJcbiAgICAoaWYgKG51bWJlcj8gYnVmLW9yLW4pIChidWZmZXIgYnVmLW9yLW4pIGJ1Zi1vci1uKVxyXG4gICAgeGZvcm1cclxuICAgIGV4LWhhbmRsZXIpKSkpXHJcbiJ9IHs6c3ltIHNvbG8tbW9kZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBtb2RlXSl9LCA6cHJvdG9jb2wgTWl4fSB7OnN5bSB0YXAsIDptZXRhIHs6ZG9jICJDb3BpZXMgdGhlIG11bHQgc291cmNlIG9udG8gdGhlIHN1cHBsaWVkIGNoYW5uZWwuXG5cbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBzb3VyY2UgY2xvc2VzLFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuIiwgOmFyZ2xpc3RzIFtbbXVsdCBjaF0gW211bHQgY2ggY2xvc2U/XV19LCA6c291cmNlICIoZGVmblxyXG4gdGFwXHJcbiBcIkNvcGllcyB0aGUgbXVsdCBzb3VyY2Ugb250byB0aGUgc3VwcGxpZWQgY2hhbm5lbC5cXG5cXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgc291cmNlIGNsb3NlcyxcXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci5cIlxyXG4gKFttdWx0IGNoXSAodGFwIG11bHQgY2ggdHJ1ZSkpXHJcbiAoW211bHQgY2ggY2xvc2U/XSAodGFwKiBtdWx0IGNoIGNsb3NlPykgY2gpKVxyXG4ifSB7OnN5bSBhZG1peCwgOm1ldGEgezpkb2MgIkFkZHMgY2ggYXMgYW4gaW5wdXQgdG8gdGhlIG1peCIsIDphcmdsaXN0cyAoW21peCBjaF0pfSwgOnNvdXJjZSAiKGRlZm4gYWRtaXggXCJBZGRzIGNoIGFzIGFuIGlucHV0IHRvIHRoZSBtaXhcIiBbbWl4IGNoXSAoYWRtaXgqIG1peCBjaCkpXHJcbiJ9IHs6c3ltIHByb21pc2UtY2hhbiwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBwcm9taXNlIGNoYW5uZWwgd2l0aCBhbiBvcHRpb25hbCB0cmFuc2R1Y2VyLCBhbmQgYW4gb3B0aW9uYWxcbiAgZXhjZXB0aW9uLWhhbmRsZXIuIEEgcHJvbWlzZSBjaGFubmVsIGNhbiB0YWtlIGV4YWN0bHkgb25lIHZhbHVlIHRoYXQgY29uc3VtZXJzXG4gIHdpbGwgcmVjZWl2ZS4gT25jZSBmdWxsLCBwdXRzIGNvbXBsZXRlIGJ1dCB2YWwgaXMgZHJvcHBlZCAobm8gdHJhbnNmZXIpLlxuICBDb25zdW1lcnMgd2lsbCBibG9jayB1bnRpbCBlaXRoZXIgYSB2YWx1ZSBpcyBwbGFjZWQgaW4gdGhlIGNoYW5uZWwgb3IgdGhlXG4gIGNoYW5uZWwgaXMgY2xvc2VkLiBTZWUgY2hhbiBmb3IgdGhlIHNlbWFudGljcyBvZiB4Zm9ybSBhbmQgZXgtaGFuZGxlci4iLCA6YXJnbGlzdHMgW1tdIFt4Zm9ybV0gW3hmb3JtIGV4LWhhbmRsZXJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm9taXNlLWNoYW5cclxuIFwiQ3JlYXRlcyBhIHByb21pc2UgY2hhbm5lbCB3aXRoIGFuIG9wdGlvbmFsIHRyYW5zZHVjZXIsIGFuZCBhbiBvcHRpb25hbFxcbiAgZXhjZXB0aW9uLWhhbmRsZXIuIEEgcHJvbWlzZSBjaGFubmVsIGNhbiB0YWtlIGV4YWN0bHkgb25lIHZhbHVlIHRoYXQgY29uc3VtZXJzXFxuICB3aWxsIHJlY2VpdmUuIE9uY2UgZnVsbCwgcHV0cyBjb21wbGV0ZSBidXQgdmFsIGlzIGRyb3BwZWQgKG5vIHRyYW5zZmVyKS5cXG4gIENvbnN1bWVycyB3aWxsIGJsb2NrIHVudGlsIGVpdGhlciBhIHZhbHVlIGlzIHBsYWNlZCBpbiB0aGUgY2hhbm5lbCBvciB0aGVcXG4gIGNoYW5uZWwgaXMgY2xvc2VkLiBTZWUgY2hhbiBmb3IgdGhlIHNlbWFudGljcyBvZiB4Zm9ybSBhbmQgZXgtaGFuZGxlci5cIlxyXG4gKFtdIChwcm9taXNlLWNoYW4gbmlsKSlcclxuIChbeGZvcm1dIChwcm9taXNlLWNoYW4geGZvcm0gbmlsKSlcclxuIChbeGZvcm0gZXgtaGFuZGxlcl0gKGNoYW4gKGJ1ZmZlcnMvcHJvbWlzZS1idWZmZXIpIHhmb3JtIGV4LWhhbmRsZXIpKSlcclxuIn0gezpzeW0gdW5pcXVlLCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbY2hdIFtjaCBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuaXF1ZVxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtjaF0gKHVuaXF1ZSBjaCBuaWwpKVxyXG4gKFtjaCBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ29cclxuICAgIChsb29wXHJcbiAgICAgW2xhc3QgbmlsXVxyXG4gICAgIChsZXRcclxuICAgICAgW3YgKDwhIGNoKV1cclxuICAgICAgKHdoZW5cclxuICAgICAgIChub3QgKG5pbD8gdikpXHJcbiAgICAgICAoaWYgKD0gdiBsYXN0KSAocmVjdXIgbGFzdCkgKGRvICg+ISBvdXQgdikgKHJlY3VyIHYpKSkpKSlcclxuICAgIChjbG9zZSEgb3V0KSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIG11eGNoKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtfXSl9LCA6cHJvdG9jb2wgTXV4fSB7OnN5bSBzb2xvLW1vZGUsIDptZXRhIHs6ZG9jICJTZXRzIHRoZSBzb2xvIG1vZGUgb2YgdGhlIG1peC4gbW9kZSBtdXN0IGJlIG9uZSBvZiA6bXV0ZSBvciA6cGF1c2UiLCA6YXJnbGlzdHMgKFttaXggbW9kZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvbG8tbW9kZVxyXG4gXCJTZXRzIHRoZSBzb2xvIG1vZGUgb2YgdGhlIG1peC4gbW9kZSBtdXN0IGJlIG9uZSBvZiA6bXV0ZSBvciA6cGF1c2VcIlxyXG4gW21peCBtb2RlXVxyXG4gKHNvbG8tbW9kZSogbWl4IG1vZGUpKVxyXG4ifSB7OnN5bSB0cmFuc2R1Y2UsIDptZXRhIHs6ZG9jICJhc3luYy9yZWR1Y2VzIGEgY2hhbm5lbCB3aXRoIGEgdHJhbnNmb3JtYXRpb24gKHhmb3JtIGYpLlxuICBSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nIHRoZSByZXN1bHQuICBjaCBtdXN0IGNsb3NlIGJlZm9yZVxuICB0cmFuc2R1Y2UgcHJvZHVjZXMgYSByZXN1bHQuIiwgOmFyZ2xpc3RzIChbeGZvcm0gZiBpbml0IGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJhbnNkdWNlXHJcbiBcImFzeW5jL3JlZHVjZXMgYSBjaGFubmVsIHdpdGggYSB0cmFuc2Zvcm1hdGlvbiAoeGZvcm0gZikuXFxuICBSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nIHRoZSByZXN1bHQuICBjaCBtdXN0IGNsb3NlIGJlZm9yZVxcbiAgdHJhbnNkdWNlIHByb2R1Y2VzIGEgcmVzdWx0LlwiXHJcbiBbeGZvcm0gZiBpbml0IGNoXVxyXG4gKGxldCBbZiAoeGZvcm0gZildIChnbyAobGV0IFtyZXQgKDwhIChyZWR1Y2UgZiBpbml0IGNoKSldIChmIHJldCkpKSkpXHJcbiJ9IHs6c3ltIG9udG8tY2hhbiwgOm1ldGEgezpkb2MgIlB1dHMgdGhlIGNvbnRlbnRzIG9mIGNvbGwgaW50byB0aGUgc3VwcGxpZWQgY2hhbm5lbC5cblxuICBCeSBkZWZhdWx0IHRoZSBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIGFmdGVyIHRoZSBpdGVtcyBhcmUgY29waWVkLFxuICBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyBwYXJhbWV0ZXIuXG5cbiAgUmV0dXJucyBhIGNoYW5uZWwgd2hpY2ggd2lsbCBjbG9zZSBhZnRlciB0aGUgaXRlbXMgYXJlIGNvcGllZC4iLCA6YXJnbGlzdHMgW1tjaCBjb2xsXSBbY2ggY29sbCBjbG9zZT9dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvbnRvLWNoYW5cclxuIFwiUHV0cyB0aGUgY29udGVudHMgb2YgY29sbCBpbnRvIHRoZSBzdXBwbGllZCBjaGFubmVsLlxcblxcbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCBhZnRlciB0aGUgaXRlbXMgYXJlIGNvcGllZCxcXG4gIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/IHBhcmFtZXRlci5cXG5cXG4gIFJldHVybnMgYSBjaGFubmVsIHdoaWNoIHdpbGwgY2xvc2UgYWZ0ZXIgdGhlIGl0ZW1zIGFyZSBjb3BpZWQuXCJcclxuIChbY2ggY29sbF0gKG9udG8tY2hhbiBjaCBjb2xsIHRydWUpKVxyXG4gKFtjaCBjb2xsIGNsb3NlP11cclxuICAoZ28tbG9vcFxyXG4gICBbdnMgKHNlcSBjb2xsKV1cclxuICAgKGlmXHJcbiAgICAoYW5kIHZzICg+ISBjaCAoZmlyc3QgdnMpKSlcclxuICAgIChyZWN1ciAobmV4dCB2cykpXHJcbiAgICAod2hlbiBjbG9zZT8gKGNsb3NlISBjaCkpKSkpKVxyXG4ifSB7OnN5bSB0by1jaGFuLCA6bWV0YSB7OmRvYyAiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGNoYW5uZWwgd2hpY2ggY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGNvbGwsXG4gIGNsb3Npbmcgd2hlbiBleGhhdXN0ZWQuIiwgOmFyZ2xpc3RzIChbY29sbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRvLWNoYW5cclxuIFwiQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGNoYW5uZWwgd2hpY2ggY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGNvbGwsXFxuICBjbG9zaW5nIHdoZW4gZXhoYXVzdGVkLlwiXHJcbiBbY29sbF1cclxuIChsZXQgW2NoIChjaGFuIChib3VuZGVkLWNvdW50IDEwMCBjb2xsKSldIChvbnRvLWNoYW4gY2ggY29sbCkgY2gpKVxyXG4ifSB7OnN5bSBkcm9wcGluZy1idWZmZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgY29tcGxldGUgYnV0XG4gIHZhbCB3aWxsIGJlIGRyb3BwZWQgKG5vIHRyYW5zZmVyKS4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZHJvcHBpbmctYnVmZmVyXHJcbiBcIlJldHVybnMgYSBidWZmZXIgb2Ygc2l6ZSBuLiBXaGVuIGZ1bGwsIHB1dHMgd2lsbCBjb21wbGV0ZSBidXRcXG4gIHZhbCB3aWxsIGJlIGRyb3BwZWQgKG5vIHRyYW5zZmVyKS5cIlxyXG4gW25dXHJcbiAoYnVmZmVycy9kcm9wcGluZy1idWZmZXIgbikpXHJcbiJ9IHs6c3ltIHVudGFwLWFsbCwgOm1ldGEgezpkb2MgIkRpc2Nvbm5lY3RzIGFsbCB0YXJnZXQgY2hhbm5lbHMgZnJvbSBhIG11bHQiLCA6YXJnbGlzdHMgKFttdWx0XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW50YXAtYWxsXHJcbiBcIkRpc2Nvbm5lY3RzIGFsbCB0YXJnZXQgY2hhbm5lbHMgZnJvbSBhIG11bHRcIlxyXG4gW211bHRdXHJcbiAodW50YXAtYWxsKiBtdWx0KSlcclxuIn0gezpzeW0gaW50bywgOm1ldGEgezpkb2MgIlJldHVybnMgYSBjaGFubmVsIGNvbnRhaW5pbmcgdGhlIHNpbmdsZSAoY29sbGVjdGlvbikgcmVzdWx0IG9mIHRoZVxuICBpdGVtcyB0YWtlbiBmcm9tIHRoZSBjaGFubmVsIGNvbmpvaW5lZCB0byB0aGUgc3VwcGxpZWRcbiAgY29sbGVjdGlvbi4gY2ggbXVzdCBjbG9zZSBiZWZvcmUgaW50byBwcm9kdWNlcyBhIHJlc3VsdC4iLCA6YXJnbGlzdHMgKFtjb2xsIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW50b1xyXG4gXCJSZXR1cm5zIGEgY2hhbm5lbCBjb250YWluaW5nIHRoZSBzaW5nbGUgKGNvbGxlY3Rpb24pIHJlc3VsdCBvZiB0aGVcXG4gIGl0ZW1zIHRha2VuIGZyb20gdGhlIGNoYW5uZWwgY29uam9pbmVkIHRvIHRoZSBzdXBwbGllZFxcbiAgY29sbGVjdGlvbi4gY2ggbXVzdCBjbG9zZSBiZWZvcmUgaW50byBwcm9kdWNlcyBhIHJlc3VsdC5cIlxyXG4gW2NvbGwgY2hdXHJcbiAocmVkdWNlIGNvbmogY29sbCBjaCkpXHJcbiJ9IHs6c3ltIHBpcGVsaW5lLCA6bWV0YSB7OmRvYyAiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xuICBjaGFubmVsLCBzdWJqZWN0IHRvIHRoZSB0cmFuc2R1Y2VyIHhmLCB3aXRoIHBhcmFsbGVsaXNtIG4uIEJlY2F1c2VcbiAgaXQgaXMgcGFyYWxsZWwsIHRoZSB0cmFuc2R1Y2VyIHdpbGwgYmUgYXBwbGllZCBpbmRlcGVuZGVudGx5IHRvIGVhY2hcbiAgZWxlbWVudCwgbm90IGFjcm9zcyBlbGVtZW50cywgYW5kIG1heSBwcm9kdWNlIHplcm8gb3IgbW9yZSBvdXRwdXRzXG4gIHBlciBpbnB1dC4gIE91dHB1dHMgd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciByZWxhdGl2ZSB0byB0aGVcbiAgaW5wdXRzLiBCeSBkZWZhdWx0LCB0aGUgdG8gY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBmcm9tXG4gIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsXG4gIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzLlxuXG4gIE5vdGUgdGhpcyBpcyBzdXBwbGllZCBmb3IgQVBJIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgQ2xvanVyZSB2ZXJzaW9uLlxuICBWYWx1ZXMgb2YgTiA+IDEgd2lsbCBub3QgcmVzdWx0IGluIGFjdHVhbCBjb25jdXJyZW5jeSBpbiBhXG4gIHNpbmdsZS10aHJlYWRlZCBydW50aW1lLiIsIDphcmdsaXN0cyBbW24gdG8geGYgZnJvbV0gW24gdG8geGYgZnJvbSBjbG9zZT9dIFtuIHRvIHhmIGZyb20gY2xvc2U/IGV4LWhhbmRsZXJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwaXBlbGluZVxyXG4gXCJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXFxuICBjaGFubmVsLCBzdWJqZWN0IHRvIHRoZSB0cmFuc2R1Y2VyIHhmLCB3aXRoIHBhcmFsbGVsaXNtIG4uIEJlY2F1c2VcXG4gIGl0IGlzIHBhcmFsbGVsLCB0aGUgdHJhbnNkdWNlciB3aWxsIGJlIGFwcGxpZWQgaW5kZXBlbmRlbnRseSB0byBlYWNoXFxuICBlbGVtZW50LCBub3QgYWNyb3NzIGVsZW1lbnRzLCBhbmQgbWF5IHByb2R1Y2UgemVybyBvciBtb3JlIG91dHB1dHNcXG4gIHBlciBpbnB1dC4gIE91dHB1dHMgd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciByZWxhdGl2ZSB0byB0aGVcXG4gIGlucHV0cy4gQnkgZGVmYXVsdCwgdGhlIHRvIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbVxcbiAgY2hhbm5lbCBjbG9zZXMsIGJ1dCBjYW4gYmUgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGxcXG4gIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzLlxcblxcbiAgTm90ZSB0aGlzIGlzIHN1cHBsaWVkIGZvciBBUEkgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDbG9qdXJlIHZlcnNpb24uXFxuICBWYWx1ZXMgb2YgTiA+IDEgd2lsbCBub3QgcmVzdWx0IGluIGFjdHVhbCBjb25jdXJyZW5jeSBpbiBhXFxuICBzaW5nbGUtdGhyZWFkZWQgcnVudGltZS5cIlxyXG4gKFtuIHRvIHhmIGZyb21dIChwaXBlbGluZSBuIHRvIHhmIGZyb20gdHJ1ZSkpXHJcbiAoW24gdG8geGYgZnJvbSBjbG9zZT9dIChwaXBlbGluZSBuIHRvIHhmIGZyb20gY2xvc2U/IG5pbCkpXHJcbiAoW24gdG8geGYgZnJvbSBjbG9zZT8gZXgtaGFuZGxlcl1cclxuICAocGlwZWxpbmUqIG4gdG8geGYgZnJvbSBjbG9zZT8gZXgtaGFuZGxlciA6Y29tcHV0ZSkpKVxyXG4ifSB7OnN5bSBzdWIsIDptZXRhIHs6ZG9jICJTdWJzY3JpYmVzIGEgY2hhbm5lbCB0byBhIHRvcGljIG9mIGEgcHViLlxuXG4gIEJ5IGRlZmF1bHQgdGhlIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgc291cmNlIGNsb3NlcyxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLiIsIDphcmdsaXN0cyBbW3AgdG9waWMgY2hdIFtwIHRvcGljIGNoIGNsb3NlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN1YlxyXG4gXCJTdWJzY3JpYmVzIGEgY2hhbm5lbCB0byBhIHRvcGljIG9mIGEgcHViLlxcblxcbiAgQnkgZGVmYXVsdCB0aGUgY2hhbm5lbCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBzb3VyY2UgY2xvc2VzLFxcbiAgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gcGFyYW1ldGVyLlwiXHJcbiAoW3AgdG9waWMgY2hdIChzdWIgcCB0b3BpYyBjaCB0cnVlKSlcclxuIChbcCB0b3BpYyBjaCBjbG9zZT9dIChzdWIqIHAgdG9waWMgY2ggY2xvc2U/KSkpXHJcbiJ9IHs6c3ltIG1hcD4sIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgKFtmIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwPlxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gW2YgY2hdXHJcbiAocmVpZnlcclxuICBpbXBsL0NoYW5uZWxcclxuICAoY2xvc2UhIFtfXSAoaW1wbC9jbG9zZSEgY2gpKVxyXG4gIGltcGwvUmVhZFBvcnRcclxuICAodGFrZSEgW18gZm4xXSAoaW1wbC90YWtlISBjaCBmbjEpKVxyXG4gIGltcGwvV3JpdGVQb3J0XHJcbiAgKHB1dCEgW18gdmFsIGZuMV0gKGltcGwvcHV0ISBjaCAoZiB2YWwpIGZuMSkpKSlcclxuIn0gezpzeW0gcGlwZSwgOm1ldGEgezpkb2MgIlRha2VzIGVsZW1lbnRzIGZyb20gdGhlIGZyb20gY2hhbm5lbCBhbmQgc3VwcGxpZXMgdGhlbSB0byB0aGUgdG9cbiAgIGNoYW5uZWwuIEJ5IGRlZmF1bHQsIHRoZSB0byBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb21cbiAgIGNoYW5uZWwgY2xvc2VzLCBidXQgY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIGNsb3NlPyAgcGFyYW1ldGVyLiBXaWxsXG4gICBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbSBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3NlcyIsIDphcmdsaXN0cyBbW2Zyb20gdG9dIFtmcm9tIHRvIGNsb3NlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBpcGVcclxuIFwiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xcbiAgIGNoYW5uZWwuIEJ5IGRlZmF1bHQsIHRoZSB0byBjaGFubmVsIHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIGZyb21cXG4gICBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbFxcbiAgIHN0b3AgY29uc3VtaW5nIHRoZSBmcm9tIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzXCJcclxuIChbZnJvbSB0b10gKHBpcGUgZnJvbSB0byB0cnVlKSlcclxuIChbZnJvbSB0byBjbG9zZT9dXHJcbiAgKGdvLWxvb3BcclxuICAgW11cclxuICAgKGxldFxyXG4gICAgW3YgKDwhIGZyb20pXVxyXG4gICAgKGlmIChuaWw/IHYpICh3aGVuIGNsb3NlPyAoY2xvc2UhIHRvKSkgKHdoZW4gKD4hIHRvIHYpIChyZWN1cikpKSkpXHJcbiAgdG8pKVxyXG4ifSB7OnN5bSB1bm1peCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgY2ggYXMgYW4gaW5wdXQgdG8gdGhlIG1peCIsIDphcmdsaXN0cyAoW21peCBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVubWl4XHJcbiBcIlJlbW92ZXMgY2ggYXMgYW4gaW5wdXQgdG8gdGhlIG1peFwiXHJcbiBbbWl4IGNoXVxyXG4gKHVubWl4KiBtaXggY2gpKVxyXG4ifSB7OnN5bSBmaWx0ZXI8LCA6bWV0YSB7OmRvYyAiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkIiwgOmFyZ2xpc3RzIFtbcCBjaF0gW3AgY2ggYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaWx0ZXI8XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW3AgY2hdIChmaWx0ZXI8IHAgY2ggbmlsKSlcclxuIChbcCBjaCBidWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFtvdXQgKGNoYW4gYnVmLW9yLW4pXVxyXG4gICAoZ28tbG9vcFxyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbdmFsICg8ISBjaCldXHJcbiAgICAgKGlmXHJcbiAgICAgIChuaWw/IHZhbClcclxuICAgICAgKGNsb3NlISBvdXQpXHJcbiAgICAgIChkbyAod2hlbiAocCB2YWwpICg+ISBvdXQgdmFsKSkgKHJlY3VyKSkpKSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIHN1YiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcCB2IGNoIGNsb3NlP10pfSwgOnByb3RvY29sIFB1Yn0gezpzeW0gcmVtb3ZlPCwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW3AgY2hdIFtwIGNoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVtb3ZlPFxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gKFtwIGNoXSAocmVtb3ZlPCBwIGNoIG5pbCkpXHJcbiAoW3AgY2ggYnVmLW9yLW5dIChmaWx0ZXI8IChjb21wbGVtZW50IHApIGNoIGJ1Zi1vci1uKSkpXHJcbiJ9IHs6c3ltIHVudGFwKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIGNoXSl9LCA6cHJvdG9jb2wgTXVsdH0gezpzeW0gdG9nZ2xlLCA6bWV0YSB7OmRvYyAiQXRvbWljYWxseSBzZXRzIHRoZSBzdGF0ZShzKSBvZiBvbmUgb3IgbW9yZSBjaGFubmVscyBpbiBhIG1peC4gVGhlXG4gIHN0YXRlIG1hcCBpcyBhIG1hcCBvZiBjaGFubmVscyAtPiBjaGFubmVsLXN0YXRlLW1hcC4gQVxuICBjaGFubmVsLXN0YXRlLW1hcCBpcyBhIG1hcCBvZiBhdHRycyAtPiBib29sZWFuLCB3aGVyZSBhdHRyIGlzIG9uZSBvclxuICBtb3JlIG9mIDptdXRlLCA6cGF1c2Ugb3IgOnNvbG8uIEFueSBzdGF0ZXMgc3VwcGxpZWQgYXJlIG1lcmdlZCB3aXRoXG4gIHRoZSBjdXJyZW50IHN0YXRlLlxuXG4gIE5vdGUgdGhhdCBjaGFubmVscyBjYW4gYmUgYWRkZWQgdG8gYSBtaXggdmlhIHRvZ2dsZSwgd2hpY2ggY2FuIGJlXG4gIHVzZWQgdG8gYWRkIGNoYW5uZWxzIGluIGEgcGFydGljdWxhciAoZS5nLiBwYXVzZWQpIHN0YXRlLiIsIDphcmdsaXN0cyAoW21peCBzdGF0ZS1tYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0b2dnbGVcclxuIFwiQXRvbWljYWxseSBzZXRzIHRoZSBzdGF0ZShzKSBvZiBvbmUgb3IgbW9yZSBjaGFubmVscyBpbiBhIG1peC4gVGhlXFxuICBzdGF0ZSBtYXAgaXMgYSBtYXAgb2YgY2hhbm5lbHMgLT4gY2hhbm5lbC1zdGF0ZS1tYXAuIEFcXG4gIGNoYW5uZWwtc3RhdGUtbWFwIGlzIGEgbWFwIG9mIGF0dHJzIC0+IGJvb2xlYW4sIHdoZXJlIGF0dHIgaXMgb25lIG9yXFxuICBtb3JlIG9mIDptdXRlLCA6cGF1c2Ugb3IgOnNvbG8uIEFueSBzdGF0ZXMgc3VwcGxpZWQgYXJlIG1lcmdlZCB3aXRoXFxuICB0aGUgY3VycmVudCBzdGF0ZS5cXG5cXG4gIE5vdGUgdGhhdCBjaGFubmVscyBjYW4gYmUgYWRkZWQgdG8gYSBtaXggdmlhIHRvZ2dsZSwgd2hpY2ggY2FuIGJlXFxuICB1c2VkIHRvIGFkZCBjaGFubmVscyBpbiBhIHBhcnRpY3VsYXIgKGUuZy4gcGF1c2VkKSBzdGF0ZS5cIlxyXG4gW21peCBzdGF0ZS1tYXBdXHJcbiAodG9nZ2xlKiBtaXggc3RhdGUtbWFwKSlcclxuIn0gezpzeW0gdW50YXAtYWxsKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttXSl9LCA6cHJvdG9jb2wgTXVsdH0gezpzeW0gc2xpZGluZy1idWZmZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgY29tcGxldGUsIGFuZCBiZVxuICBidWZmZXJlZCwgYnV0IG9sZGVzdCBlbGVtZW50cyBpbiBidWZmZXIgd2lsbCBiZSBkcm9wcGVkIChub3RcbiAgdHJhbnNmZXJyZWQpLiIsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzbGlkaW5nLWJ1ZmZlclxyXG4gXCJSZXR1cm5zIGEgYnVmZmVyIG9mIHNpemUgbi4gV2hlbiBmdWxsLCBwdXRzIHdpbGwgY29tcGxldGUsIGFuZCBiZVxcbiAgYnVmZmVyZWQsIGJ1dCBvbGRlc3QgZWxlbWVudHMgaW4gYnVmZmVyIHdpbGwgYmUgZHJvcHBlZCAobm90XFxuICB0cmFuc2ZlcnJlZCkuXCJcclxuIFtuXVxyXG4gKGJ1ZmZlcnMvc2xpZGluZy1idWZmZXIgbikpXHJcbiJ9IHs6c3ltIHBhcnRpdGlvbiwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW24gY2hdIFtuIGNoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGl0aW9uXHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW24gY2hdIChwYXJ0aXRpb24gbiBjaCBuaWwpKVxyXG4gKFtuIGNoIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnb1xyXG4gICAgKGxvb3BcclxuICAgICBbYXJyIChtYWtlLWFycmF5IG4pIGlkeCAwXVxyXG4gICAgIChsZXRcclxuICAgICAgW3YgKDwhIGNoKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAobm90IChuaWw/IHYpKVxyXG4gICAgICAgKGRvXHJcbiAgICAgICAgKGFzZXQgYXJyIGlkeCB2KVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW25ldy1pZHggKGluYyBpZHgpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgICg8IG5ldy1pZHggbilcclxuICAgICAgICAgIChyZWN1ciBhcnIgbmV3LWlkeClcclxuICAgICAgICAgIChkbyAoPiEgb3V0ICh2ZWMgYXJyKSkgKHJlY3VyIChtYWtlLWFycmF5IG4pIDApKSkpKVxyXG4gICAgICAgKGRvICh3aGVuICg+IGlkeCAwKSAoPiEgb3V0ICh2ZWMgYXJyKSkpIChjbG9zZSEgb3V0KSkpKSkpXHJcbiAgIG91dCkpKVxyXG4ifSB7OnN5bSBNdWx0LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodGFwKiB1bnRhcCogdW50YXAtYWxsKil9IHs6c3ltIG1lcmdlLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBjb2xsZWN0aW9uIG9mIHNvdXJjZSBjaGFubmVscyBhbmQgcmV0dXJucyBhIGNoYW5uZWwgd2hpY2hcbiAgY29udGFpbnMgYWxsIHZhbHVlcyB0YWtlbiBmcm9tIHRoZW0uIFRoZSByZXR1cm5lZCBjaGFubmVsIHdpbGwgYmVcbiAgdW5idWZmZXJlZCBieSBkZWZhdWx0LCBvciBhIGJ1Zi1vci1uIGNhbiBiZSBzdXBwbGllZC4gVGhlIGNoYW5uZWxcbiAgd2lsbCBjbG9zZSBhZnRlciBhbGwgdGhlIHNvdXJjZSBjaGFubmVscyBoYXZlIGNsb3NlZC4iLCA6YXJnbGlzdHMgW1tjaHNdIFtjaHMgYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZVxyXG4gXCJUYWtlcyBhIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNoYW5uZWxzIGFuZCByZXR1cm5zIGEgY2hhbm5lbCB3aGljaFxcbiAgY29udGFpbnMgYWxsIHZhbHVlcyB0YWtlbiBmcm9tIHRoZW0uIFRoZSByZXR1cm5lZCBjaGFubmVsIHdpbGwgYmVcXG4gIHVuYnVmZmVyZWQgYnkgZGVmYXVsdCwgb3IgYSBidWYtb3ItbiBjYW4gYmUgc3VwcGxpZWQuIFRoZSBjaGFubmVsXFxuICB3aWxsIGNsb3NlIGFmdGVyIGFsbCB0aGUgc291cmNlIGNoYW5uZWxzIGhhdmUgY2xvc2VkLlwiXHJcbiAoW2Noc10gKG1lcmdlIGNocyBuaWwpKVxyXG4gKFtjaHMgYnVmLW9yLW5dXHJcbiAgKGxldFxyXG4gICBbb3V0IChjaGFuIGJ1Zi1vci1uKV1cclxuICAgKGdvLWxvb3BcclxuICAgIFtjcyAodmVjIGNocyldXHJcbiAgICAoaWZcclxuICAgICAocG9zPyAoY291bnQgY3MpKVxyXG4gICAgIChsZXRcclxuICAgICAgW1t2IGNdIChhbHRzISBjcyldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG5pbD8gdilcclxuICAgICAgIChyZWN1ciAoZmlsdGVydiAoZm4qIFtwMV9fNDg2NjkjXSAobm90PSBjIHAxX180ODY2OSMpKSBjcykpXHJcbiAgICAgICAoZG8gKD4hIG91dCB2KSAocmVjdXIgY3MpKSkpXHJcbiAgICAgKGNsb3NlISBvdXQpKSlcclxuICAgb3V0KSkpXHJcbiJ9IHs6c3ltIHBhcnRpdGlvbi1ieSwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyBbW2YgY2hdIFtmIGNoIGJ1Zi1vci1uXV19LCA6c291cmNlICIoZGVmblxyXG4gcGFydGl0aW9uLWJ5XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiAoW2YgY2hdIChwYXJ0aXRpb24tYnkgZiBjaCBuaWwpKVxyXG4gKFtmIGNoIGJ1Zi1vci1uXVxyXG4gIChsZXRcclxuICAgW291dCAoY2hhbiBidWYtb3ItbildXHJcbiAgIChnb1xyXG4gICAgKGxvb3BcclxuICAgICBbbHN0IChtYWtlLWFycmF5IDApIGxhc3QgOmNsanMuY29yZS5hc3luYy9ub3RoaW5nXVxyXG4gICAgIChsZXRcclxuICAgICAgW3YgKDwhIGNoKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAobm90IChuaWw/IHYpKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtuZXctaXRtIChmIHYpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAob3JcclxuICAgICAgICAgICg9IG5ldy1pdG0gbGFzdClcclxuICAgICAgICAgIChrZXl3b3JkLWlkZW50aWNhbD8gbGFzdCA6Y2xqcy5jb3JlLmFzeW5jL25vdGhpbmcpKVxyXG4gICAgICAgICAoZG8gKC5wdXNoIGxzdCB2KSAocmVjdXIgbHN0IG5ldy1pdG0pKVxyXG4gICAgICAgICAoZG9cclxuICAgICAgICAgICg+ISBvdXQgKHZlYyBsc3QpKVxyXG4gICAgICAgICAgKGxldFxyXG4gICAgICAgICAgIFtuZXctbHN0IChtYWtlLWFycmF5IDApXVxyXG4gICAgICAgICAgICgucHVzaCBuZXctbHN0IHYpXHJcbiAgICAgICAgICAgKHJlY3VyIG5ldy1sc3QgbmV3LWl0bSkpKSkpXHJcbiAgICAgICAoZG9cclxuICAgICAgICAod2hlbiAoPiAoYWxlbmd0aCBsc3QpIDApICg+ISBvdXQgKHZlYyBsc3QpKSlcclxuICAgICAgICAoY2xvc2UhIG91dCkpKSkpKVxyXG4gICBvdXQpKSlcclxuIn0gezpzeW0gdW5zdWItYWxsLCA6bWV0YSB7OmRvYyAiVW5zdWJzY3JpYmVzIGFsbCBjaGFubmVscyBmcm9tIGEgcHViLCBvciBhIHRvcGljIG9mIGEgcHViIiwgOmFyZ2xpc3RzIFtbcF0gW3AgdG9waWNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnN1Yi1hbGxcclxuIFwiVW5zdWJzY3JpYmVzIGFsbCBjaGFubmVscyBmcm9tIGEgcHViLCBvciBhIHRvcGljIG9mIGEgcHViXCJcclxuIChbcF0gKHVuc3ViLWFsbCogcCkpXHJcbiAoW3AgdG9waWNdICh1bnN1Yi1hbGwqIHAgdG9waWMpKSlcclxuIn0gezpzeW0gPiEsIDptZXRhIHs6ZG9jICJwdXRzIGEgdmFsIGludG8gcG9ydC4gbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIE11c3QgYmUgY2FsbGVkXG4gIGluc2lkZSBhIChnbyAuLi4pIGJsb2NrLiBXaWxsIHBhcmsgaWYgbm8gYnVmZmVyIHNwYWNlIGlzIGF2YWlsYWJsZS5cbiAgUmV0dXJucyB0cnVlIHVubGVzcyBwb3J0IGlzIGFscmVhZHkgY2xvc2VkLiIsIDphcmdsaXN0cyAoW3BvcnQgdmFsXSl9LCA6c291cmNlICIoZGVmblxyXG4gPiFcclxuIFwicHV0cyBhIHZhbCBpbnRvIHBvcnQuIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBNdXN0IGJlIGNhbGxlZFxcbiAgaW5zaWRlIGEgKGdvIC4uLikgYmxvY2suIFdpbGwgcGFyayBpZiBubyBidWZmZXIgc3BhY2UgaXMgYXZhaWxhYmxlLlxcbiAgUmV0dXJucyB0cnVlIHVubGVzcyBwb3J0IGlzIGFscmVhZHkgY2xvc2VkLlwiXHJcbiBbcG9ydCB2YWxdXHJcbiAodGhyb3cgKGpzL0Vycm9yLiBcIj4hIHVzZWQgbm90IGluIChnbyAuLi4pIGJsb2NrXCIpKSlcclxuIn0gezpzeW0gdW5taXgtYWxsKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttXSl9LCA6cHJvdG9jb2wgTWl4fSB7OnN5bSBzcGxpdCwgOm1ldGEgezpkb2MgIlRha2VzIGEgcHJlZGljYXRlIGFuZCBhIHNvdXJjZSBjaGFubmVsIGFuZCByZXR1cm5zIGEgdmVjdG9yIG9mIHR3b1xuICBjaGFubmVscywgdGhlIGZpcnN0IG9mIHdoaWNoIHdpbGwgY29udGFpbiB0aGUgdmFsdWVzIGZvciB3aGljaCB0aGVcbiAgcHJlZGljYXRlIHJldHVybmVkIHRydWUsIHRoZSBzZWNvbmQgdGhvc2UgZm9yIHdoaWNoIGl0IHJldHVybmVkXG4gIGZhbHNlLlxuXG4gIFRoZSBvdXQgY2hhbm5lbHMgd2lsbCBiZSB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIHR3byBidWYtb3ItbnMgY2FuXG4gIGJlIHN1cHBsaWVkLiBUaGUgY2hhbm5lbHMgd2lsbCBjbG9zZSBhZnRlciB0aGUgc291cmNlIGNoYW5uZWwgaGFzXG4gIGNsb3NlZC4iLCA6YXJnbGlzdHMgW1twIGNoXSBbcCBjaCB0LWJ1Zi1vci1uIGYtYnVmLW9yLW5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzcGxpdFxyXG4gXCJUYWtlcyBhIHByZWRpY2F0ZSBhbmQgYSBzb3VyY2UgY2hhbm5lbCBhbmQgcmV0dXJucyBhIHZlY3RvciBvZiB0d29cXG4gIGNoYW5uZWxzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggd2lsbCBjb250YWluIHRoZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZVxcbiAgcHJlZGljYXRlIHJldHVybmVkIHRydWUsIHRoZSBzZWNvbmQgdGhvc2UgZm9yIHdoaWNoIGl0IHJldHVybmVkXFxuICBmYWxzZS5cXG5cXG4gIFRoZSBvdXQgY2hhbm5lbHMgd2lsbCBiZSB1bmJ1ZmZlcmVkIGJ5IGRlZmF1bHQsIG9yIHR3byBidWYtb3ItbnMgY2FuXFxuICBiZSBzdXBwbGllZC4gVGhlIGNoYW5uZWxzIHdpbGwgY2xvc2UgYWZ0ZXIgdGhlIHNvdXJjZSBjaGFubmVsIGhhc1xcbiAgY2xvc2VkLlwiXHJcbiAoW3AgY2hdIChzcGxpdCBwIGNoIG5pbCBuaWwpKVxyXG4gKFtwIGNoIHQtYnVmLW9yLW4gZi1idWYtb3Itbl1cclxuICAobGV0XHJcbiAgIFt0YyAoY2hhbiB0LWJ1Zi1vci1uKSBmYyAoY2hhbiBmLWJ1Zi1vci1uKV1cclxuICAgKGdvLWxvb3BcclxuICAgIFtdXHJcbiAgICAobGV0XHJcbiAgICAgW3YgKDwhIGNoKV1cclxuICAgICAoaWZcclxuICAgICAgKG5pbD8gdilcclxuICAgICAgKGRvIChjbG9zZSEgdGMpIChjbG9zZSEgZmMpKVxyXG4gICAgICAod2hlbiAoPiEgKGlmIChwIHYpIHRjIGZjKSB2KSAocmVjdXIpKSkpKVxyXG4gICBbdGMgZmNdKSkpXHJcbiJ9IHs6c3ltIHVubWl4LWFsbCwgOm1ldGEgezpkb2MgInJlbW92ZXMgYWxsIGlucHV0cyBmcm9tIHRoZSBtaXgiLCA6YXJnbGlzdHMgKFttaXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bm1peC1hbGxcclxuIFwicmVtb3ZlcyBhbGwgaW5wdXRzIGZyb20gdGhlIG1peFwiXHJcbiBbbWl4XVxyXG4gKHVubWl4LWFsbCogbWl4KSlcclxuIn0gezpzeW0gZmlsdGVyPiwgOm1ldGEgezpkb2MgIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZCIsIDphcmdsaXN0cyAoW3AgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaWx0ZXI+XHJcbiBcIkRlcHJlY2F0ZWQgLSB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZC4gVXNlIHRyYW5zZHVjZXIgaW5zdGVhZFwiXHJcbiBbcCBjaF1cclxuIChyZWlmeVxyXG4gIGltcGwvQ2hhbm5lbFxyXG4gIChjbG9zZSEgW19dIChpbXBsL2Nsb3NlISBjaCkpXHJcbiAgKGNsb3NlZD8gW19dIChpbXBsL2Nsb3NlZD8gY2gpKVxyXG4gIGltcGwvUmVhZFBvcnRcclxuICAodGFrZSEgW18gZm4xXSAoaW1wbC90YWtlISBjaCBmbjEpKVxyXG4gIGltcGwvV3JpdGVQb3J0XHJcbiAgKHB1dCFcclxuICAgW18gdmFsIGZuMV1cclxuICAgKGlmXHJcbiAgICAocCB2YWwpXHJcbiAgICAoaW1wbC9wdXQhIGNoIHZhbCBmbjEpXHJcbiAgICAoY2hhbm5lbHMvYm94IChub3QgKGltcGwvY2xvc2VkPyBjaCkpKSkpKSlcclxuIn0gezpzeW0gdGFwKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttIGNoIGNsb3NlP10pfSwgOnByb3RvY29sIE11bHR9IHs6c3ltIHVudGFwLCA6bWV0YSB7OmRvYyAiRGlzY29ubmVjdHMgYSB0YXJnZXQgY2hhbm5lbCBmcm9tIGEgbXVsdCIsIDphcmdsaXN0cyAoW211bHQgY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1bnRhcFxyXG4gXCJEaXNjb25uZWN0cyBhIHRhcmdldCBjaGFubmVsIGZyb20gYSBtdWx0XCJcclxuIFttdWx0IGNoXVxyXG4gKHVudGFwKiBtdWx0IGNoKSlcclxuIn0gezpzeW0gYWx0cyEsIDptZXRhIHs6ZG9jICJDb21wbGV0ZXMgYXQgbW9zdCBvbmUgb2Ygc2V2ZXJhbCBjaGFubmVsIG9wZXJhdGlvbnMuIE11c3QgYmUgY2FsbGVkXG4gICBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gcG9ydHMgaXMgYSB2ZWN0b3Igb2YgY2hhbm5lbCBlbmRwb2ludHMsXG4gICB3aGljaCBjYW4gYmUgZWl0aGVyIGEgY2hhbm5lbCB0byB0YWtlIGZyb20gb3IgYSB2ZWN0b3Igb2ZcbiAgW2NoYW5uZWwtdG8tcHV0LXRvIHZhbC10by1wdXRdLCBpbiBhbnkgY29tYmluYXRpb24uIFRha2VzIHdpbGwgYmVcbiAgbWFkZSBhcyBpZiBieSA8ISwgYW5kIHB1dHMgd2lsbCBiZSBtYWRlIGFzIGlmIGJ5ID4hLiBVbmxlc3NcbiAgdGhlIDpwcmlvcml0eSBvcHRpb24gaXMgdHJ1ZSwgaWYgbW9yZSB0aGFuIG9uZSBwb3J0IG9wZXJhdGlvbiBpc1xuICByZWFkeSBhIG5vbi1kZXRlcm1pbmlzdGljIGNob2ljZSB3aWxsIGJlIG1hZGUuIElmIG5vIG9wZXJhdGlvbiBpc1xuICByZWFkeSBhbmQgYSA6ZGVmYXVsdCB2YWx1ZSBpcyBzdXBwbGllZCwgW2RlZmF1bHQtdmFsIDpkZWZhdWx0XSB3aWxsXG4gIGJlIHJldHVybmVkLCBvdGhlcndpc2UgYWx0cyEgd2lsbCBwYXJrIHVudGlsIHRoZSBmaXJzdCBvcGVyYXRpb24gdG9cbiAgYmVjb21lIHJlYWR5IGNvbXBsZXRlcy4gUmV0dXJucyBbdmFsIHBvcnRdIG9mIHRoZSBjb21wbGV0ZWRcbiAgb3BlcmF0aW9uLCB3aGVyZSB2YWwgaXMgdGhlIHZhbHVlIHRha2VuIGZvciB0YWtlcywgYW5kIGFcbiAgYm9vbGVhbiAodHJ1ZSB1bmxlc3MgYWxyZWFkeSBjbG9zZWQsIGFzIHBlciBwdXQhKSBmb3IgcHV0cy5cblxuICBvcHRzIGFyZSBwYXNzZWQgYXMgOmtleSB2YWwgLi4uIFN1cHBvcnRlZCBvcHRpb25zOlxuXG4gIDpkZWZhdWx0IHZhbCAtIHRoZSB2YWx1ZSB0byB1c2UgaWYgbm9uZSBvZiB0aGUgb3BlcmF0aW9ucyBhcmUgaW1tZWRpYXRlbHkgcmVhZHlcbiAgOnByaW9yaXR5IHRydWUgLSAoZGVmYXVsdCBuaWwpIHdoZW4gdHJ1ZSwgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0cmllZCBpbiBvcmRlci5cblxuICBOb3RlOiB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgcG9ydCBleHBzIG9yIHZhbCBleHBycyB3aWxsIGJlXG4gIHVzZWQsIG5vciBpbiB3aGF0IG9yZGVyIHNob3VsZCB0aGV5IGJlLCBzbyB0aGV5IHNob3VsZCBub3QgYmVcbiAgZGVwZW5kZWQgdXBvbiBmb3Igc2lkZSBlZmZlY3RzLiIsIDphcmdsaXN0cyAoW3BvcnRzICYgezphcyBvcHRzfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFsdHMhXHJcbiBcIkNvbXBsZXRlcyBhdCBtb3N0IG9uZSBvZiBzZXZlcmFsIGNoYW5uZWwgb3BlcmF0aW9ucy4gTXVzdCBiZSBjYWxsZWRcXG4gICBpbnNpZGUgYSAoZ28gLi4uKSBibG9jay4gcG9ydHMgaXMgYSB2ZWN0b3Igb2YgY2hhbm5lbCBlbmRwb2ludHMsXFxuICAgd2hpY2ggY2FuIGJlIGVpdGhlciBhIGNoYW5uZWwgdG8gdGFrZSBmcm9tIG9yIGEgdmVjdG9yIG9mXFxuICBbY2hhbm5lbC10by1wdXQtdG8gdmFsLXRvLXB1dF0sIGluIGFueSBjb21iaW5hdGlvbi4gVGFrZXMgd2lsbCBiZVxcbiAgbWFkZSBhcyBpZiBieSA8ISwgYW5kIHB1dHMgd2lsbCBiZSBtYWRlIGFzIGlmIGJ5ID4hLiBVbmxlc3NcXG4gIHRoZSA6cHJpb3JpdHkgb3B0aW9uIGlzIHRydWUsIGlmIG1vcmUgdGhhbiBvbmUgcG9ydCBvcGVyYXRpb24gaXNcXG4gIHJlYWR5IGEgbm9uLWRldGVybWluaXN0aWMgY2hvaWNlIHdpbGwgYmUgbWFkZS4gSWYgbm8gb3BlcmF0aW9uIGlzXFxuICByZWFkeSBhbmQgYSA6ZGVmYXVsdCB2YWx1ZSBpcyBzdXBwbGllZCwgW2RlZmF1bHQtdmFsIDpkZWZhdWx0XSB3aWxsXFxuICBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIGFsdHMhIHdpbGwgcGFyayB1bnRpbCB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRvXFxuICBiZWNvbWUgcmVhZHkgY29tcGxldGVzLiBSZXR1cm5zIFt2YWwgcG9ydF0gb2YgdGhlIGNvbXBsZXRlZFxcbiAgb3BlcmF0aW9uLCB3aGVyZSB2YWwgaXMgdGhlIHZhbHVlIHRha2VuIGZvciB0YWtlcywgYW5kIGFcXG4gIGJvb2xlYW4gKHRydWUgdW5sZXNzIGFscmVhZHkgY2xvc2VkLCBhcyBwZXIgcHV0ISkgZm9yIHB1dHMuXFxuXFxuICBvcHRzIGFyZSBwYXNzZWQgYXMgOmtleSB2YWwgLi4uIFN1cHBvcnRlZCBvcHRpb25zOlxcblxcbiAgOmRlZmF1bHQgdmFsIC0gdGhlIHZhbHVlIHRvIHVzZSBpZiBub25lIG9mIHRoZSBvcGVyYXRpb25zIGFyZSBpbW1lZGlhdGVseSByZWFkeVxcbiAgOnByaW9yaXR5IHRydWUgLSAoZGVmYXVsdCBuaWwpIHdoZW4gdHJ1ZSwgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0cmllZCBpbiBvcmRlci5cXG5cXG4gIE5vdGU6IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBwb3J0IGV4cHMgb3IgdmFsIGV4cHJzIHdpbGwgYmVcXG4gIHVzZWQsIG5vciBpbiB3aGF0IG9yZGVyIHNob3VsZCB0aGV5IGJlLCBzbyB0aGV5IHNob3VsZCBub3QgYmVcXG4gIGRlcGVuZGVkIHVwb24gZm9yIHNpZGUgZWZmZWN0cy5cIlxyXG4gW3BvcnRzICYgezphcyBvcHRzfV1cclxuICh0aHJvdyAoanMvRXJyb3IuIFwiYWx0cyEgdXNlZCBub3QgaW4gKGdvIC4uLikgYmxvY2tcIikpKVxyXG4ifSB7OnN5bSB1bnN1YiwgOm1ldGEgezpkb2MgIlVuc3Vic2NyaWJlcyBhIGNoYW5uZWwgZnJvbSBhIHRvcGljIG9mIGEgcHViIiwgOmFyZ2xpc3RzIChbcCB0b3BpYyBjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuc3ViXHJcbiBcIlVuc3Vic2NyaWJlcyBhIGNoYW5uZWwgZnJvbSBhIHRvcGljIG9mIGEgcHViXCJcclxuIFtwIHRvcGljIGNoXVxyXG4gKHVuc3ViKiBwIHRvcGljIGNoKSlcclxuIn0gezpzeW0gcG9sbCEsIDptZXRhIHs6ZG9jICJUYWtlcyBhIHZhbCBmcm9tIHBvcnQgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBzbyBpbW1lZGlhdGVseS5cbiAgTmV2ZXIgYmxvY2tzLiBSZXR1cm5zIHZhbHVlIGlmIHN1Y2Nlc3NmdWwsIG5pbCBvdGhlcndpc2UuIiwgOmFyZ2xpc3RzIChbcG9ydF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBvbGwhXHJcbiBcIlRha2VzIGEgdmFsIGZyb20gcG9ydCBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIHNvIGltbWVkaWF0ZWx5LlxcbiAgTmV2ZXIgYmxvY2tzLiBSZXR1cm5zIHZhbHVlIGlmIHN1Y2Nlc3NmdWwsIG5pbCBvdGhlcndpc2UuXCJcclxuIFtwb3J0XVxyXG4gKGxldCBbcmV0IChpbXBsL3Rha2UhIHBvcnQgKGZuLWhhbmRsZXIgbm9wIGZhbHNlKSldICh3aGVuIHJldCBAcmV0KSkpXHJcbiJ9IHs6c3ltIG1hcDwsIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgKFtmIGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWFwPFxyXG4gXCJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWRcIlxyXG4gW2YgY2hdXHJcbiAocmVpZnlcclxuICBpbXBsL0NoYW5uZWxcclxuICAoY2xvc2UhIFtfXSAoaW1wbC9jbG9zZSEgY2gpKVxyXG4gIChjbG9zZWQ/IFtfXSAoaW1wbC9jbG9zZWQ/IGNoKSlcclxuICBpbXBsL1JlYWRQb3J0XHJcbiAgKHRha2UhXHJcbiAgIFtfIGZuMV1cclxuICAgKGxldFxyXG4gICAgW3JldFxyXG4gICAgIChpbXBsL3Rha2UhXHJcbiAgICAgIGNoXHJcbiAgICAgIChyZWlmeVxyXG4gICAgICAgaW1wbC9IYW5kbGVyXHJcbiAgICAgICAoYWN0aXZlPyBbX10gKGltcGwvYWN0aXZlPyBmbjEpKVxyXG4gICAgICAgKGJsb2NrYWJsZT8gW19dIHRydWUpXHJcbiAgICAgICAoY29tbWl0XHJcbiAgICAgICAgW19dXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbZjEgKGltcGwvY29tbWl0IGZuMSldXHJcbiAgICAgICAgIChmbipcclxuICAgICAgICAgIFtwMV9fNDg2NzAjXVxyXG4gICAgICAgICAgKGYxIChpZiAobmlsPyBwMV9fNDg2NzAjKSBuaWwgKGYgcDFfXzQ4NjcwIykpKSkpKSkpXVxyXG4gICAgKGlmIChhbmQgcmV0IChub3QgKG5pbD8gQHJldCkpKSAoY2hhbm5lbHMvYm94IChmIEByZXQpKSByZXQpKSlcclxuICBpbXBsL1dyaXRlUG9ydFxyXG4gIChwdXQhIFtfIHZhbCBmbjFdIChpbXBsL3B1dCEgY2ggdmFsIGZuMSkpKSlcclxuIn0gezpzeW0gZG8tYWx0cywgOm1ldGEgezpkb2MgInJldHVybnMgZGVyZWZhYmxlIFt2YWwgcG9ydF0gaWYgaW1tZWRpYXRlLCBuaWwgaWYgZW5xdWV1ZWQiLCA6YXJnbGlzdHMgKFtmcmV0IHBvcnRzIG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkby1hbHRzXHJcbiBcInJldHVybnMgZGVyZWZhYmxlIFt2YWwgcG9ydF0gaWYgaW1tZWRpYXRlLCBuaWwgaWYgZW5xdWV1ZWRcIlxyXG4gW2ZyZXQgcG9ydHMgb3B0c11cclxuIChsZXRcclxuICBbZmxhZ1xyXG4gICAoYWx0LWZsYWcpXHJcbiAgIG5cclxuICAgKGNvdW50IHBvcnRzKVxyXG4gICBpZHhzXHJcbiAgIChyYW5kb20tYXJyYXkgbilcclxuICAgcHJpb3JpdHlcclxuICAgKDpwcmlvcml0eSBvcHRzKVxyXG4gICByZXRcclxuICAgKGxvb3BcclxuICAgIFtpIDBdXHJcbiAgICAod2hlblxyXG4gICAgICg8IGkgbilcclxuICAgICAobGV0XHJcbiAgICAgIFtpZHhcclxuICAgICAgIChpZiBwcmlvcml0eSBpIChhZ2V0IGlkeHMgaSkpXHJcbiAgICAgICBwb3J0XHJcbiAgICAgICAobnRoIHBvcnRzIGlkeClcclxuICAgICAgIHdwb3J0XHJcbiAgICAgICAod2hlbiAodmVjdG9yPyBwb3J0KSAocG9ydCAwKSlcclxuICAgICAgIHZib3hcclxuICAgICAgIChpZlxyXG4gICAgICAgIHdwb3J0XHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbdmFsIChwb3J0IDEpXVxyXG4gICAgICAgICAoaW1wbC9wdXQhXHJcbiAgICAgICAgICB3cG9ydFxyXG4gICAgICAgICAgdmFsXHJcbiAgICAgICAgICAoYWx0LWhhbmRsZXJcclxuICAgICAgICAgICBmbGFnXHJcbiAgICAgICAgICAgKGZuKiBbcDFfXzQ4NjY2I10gKGZyZXQgW3AxX180ODY2NiMgd3BvcnRdKSkpKSlcclxuICAgICAgICAoaW1wbC90YWtlIVxyXG4gICAgICAgICBwb3J0XHJcbiAgICAgICAgIChhbHQtaGFuZGxlclxyXG4gICAgICAgICAgZmxhZ1xyXG4gICAgICAgICAgKGZuKiBbcDFfXzQ4NjY3I10gKGZyZXQgW3AxX180ODY2NyMgcG9ydF0pKSkpKV1cclxuICAgICAgKGlmXHJcbiAgICAgICB2Ym94XHJcbiAgICAgICAoY2hhbm5lbHMvYm94IFtAdmJveCAob3Igd3BvcnQgcG9ydCldKVxyXG4gICAgICAgKHJlY3VyIChpbmMgaSkpKSkpKV1cclxuICAob3JcclxuICAgcmV0XHJcbiAgICh3aGVuXHJcbiAgICAoY29udGFpbnM/IG9wdHMgOmRlZmF1bHQpXHJcbiAgICAod2hlbi1sZXRcclxuICAgICBbZ290IChhbmQgKGltcGwvYWN0aXZlPyBmbGFnKSAoaW1wbC9jb21taXQgZmxhZykpXVxyXG4gICAgIChjaGFubmVscy9ib3ggWyg6ZGVmYXVsdCBvcHRzKSA6ZGVmYXVsdF0pKSkpKSlcclxuIn0gezpzeW0gcGlwZWxpbmUtYXN5bmMsIDptZXRhIHs6ZG9jICJUYWtlcyBlbGVtZW50cyBmcm9tIHRoZSBmcm9tIGNoYW5uZWwgYW5kIHN1cHBsaWVzIHRoZW0gdG8gdGhlIHRvXG4gIGNoYW5uZWwsIHN1YmplY3QgdG8gdGhlIGFzeW5jIGZ1bmN0aW9uIGFmLCB3aXRoIHBhcmFsbGVsaXNtIG4uIGFmXG4gIG11c3QgYmUgYSBmdW5jdGlvbiBvZiB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYW4gaW5wdXQgdmFsdWUgYW5kXG4gIHRoZSBzZWNvbmQgYSBjaGFubmVsIG9uIHdoaWNoIHRvIHBsYWNlIHRoZSByZXN1bHQocykuIGFmIG11c3QgY2xvc2UhXG4gIHRoZSBjaGFubmVsIGJlZm9yZSByZXR1cm5pbmcuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCBhZiB3aWxsXG4gIHJldHVybiBpbW1lZGlhdGVseSwgaGF2aW5nIGxhdW5jaGVkIHNvbWUgYXN5bmNocm9ub3VzIG9wZXJhdGlvblxuICB3aG9zZSBjb21wbGV0aW9uL2NhbGxiYWNrIHdpbGwgbWFuaXB1bGF0ZSB0aGUgcmVzdWx0IGNoYW5uZWwuIE91dHB1dHNcbiAgd2lsbCBiZSByZXR1cm5lZCBpbiBvcmRlciByZWxhdGl2ZSB0byAgdGhlIGlucHV0cy4gQnkgZGVmYXVsdCwgdGhlIHRvXG4gIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbSBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZVxuICBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZT8gIHBhcmFtZXRlci4gV2lsbCBzdG9wIGNvbnN1bWluZyB0aGUgZnJvbVxuICBjaGFubmVsIGlmIHRoZSB0byBjaGFubmVsIGNsb3Nlcy4iLCA6YXJnbGlzdHMgW1tuIHRvIGFmIGZyb21dIFtuIHRvIGFmIGZyb20gY2xvc2U/XV19LCA6c291cmNlICIoZGVmblxyXG4gcGlwZWxpbmUtYXN5bmNcclxuIFwiVGFrZXMgZWxlbWVudHMgZnJvbSB0aGUgZnJvbSBjaGFubmVsIGFuZCBzdXBwbGllcyB0aGVtIHRvIHRoZSB0b1xcbiAgY2hhbm5lbCwgc3ViamVjdCB0byB0aGUgYXN5bmMgZnVuY3Rpb24gYWYsIHdpdGggcGFyYWxsZWxpc20gbi4gYWZcXG4gIG11c3QgYmUgYSBmdW5jdGlvbiBvZiB0d28gYXJndW1lbnRzLCB0aGUgZmlyc3QgYW4gaW5wdXQgdmFsdWUgYW5kXFxuICB0aGUgc2Vjb25kIGEgY2hhbm5lbCBvbiB3aGljaCB0byBwbGFjZSB0aGUgcmVzdWx0KHMpLiBhZiBtdXN0IGNsb3NlIVxcbiAgdGhlIGNoYW5uZWwgYmVmb3JlIHJldHVybmluZy4gIFRoZSBwcmVzdW1wdGlvbiBpcyB0aGF0IGFmIHdpbGxcXG4gIHJldHVybiBpbW1lZGlhdGVseSwgaGF2aW5nIGxhdW5jaGVkIHNvbWUgYXN5bmNocm9ub3VzIG9wZXJhdGlvblxcbiAgd2hvc2UgY29tcGxldGlvbi9jYWxsYmFjayB3aWxsIG1hbmlwdWxhdGUgdGhlIHJlc3VsdCBjaGFubmVsLiBPdXRwdXRzXFxuICB3aWxsIGJlIHJldHVybmVkIGluIG9yZGVyIHJlbGF0aXZlIHRvICB0aGUgaW5wdXRzLiBCeSBkZWZhdWx0LCB0aGUgdG9cXG4gIGNoYW5uZWwgd2lsbCBiZSBjbG9zZWQgd2hlbiB0aGUgZnJvbSBjaGFubmVsIGNsb3NlcywgYnV0IGNhbiBiZVxcbiAgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2U/ICBwYXJhbWV0ZXIuIFdpbGwgc3RvcCBjb25zdW1pbmcgdGhlIGZyb21cXG4gIGNoYW5uZWwgaWYgdGhlIHRvIGNoYW5uZWwgY2xvc2VzLlwiXHJcbiAoW24gdG8gYWYgZnJvbV0gKHBpcGVsaW5lLWFzeW5jIG4gdG8gYWYgZnJvbSB0cnVlKSlcclxuIChbbiB0byBhZiBmcm9tIGNsb3NlP10gKHBpcGVsaW5lKiBuIHRvIGFmIGZyb20gY2xvc2U/IG5pbCA6YXN5bmMpKSlcclxuIn0gezpzeW0gTWl4LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoYWRtaXgqIHNvbG8tbW9kZSogdG9nZ2xlKiB1bm1peCogdW5taXgtYWxsKil9IHs6c3ltIHRvZ2dsZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbSBzdGF0ZS1tYXBdKX0sIDpwcm90b2NvbCBNaXh9IHs6c3ltIG11bHQsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGFuZCByZXR1cm5zIGEgbXVsdChpcGxlKSBvZiB0aGUgc3VwcGxpZWQgY2hhbm5lbC4gQ2hhbm5lbHNcbiAgY29udGFpbmluZyBjb3BpZXMgb2YgdGhlIGNoYW5uZWwgY2FuIGJlIGNyZWF0ZWQgd2l0aCAndGFwJywgYW5kXG4gIGRldGFjaGVkIHdpdGggJ3VudGFwJy5cblxuICBFYWNoIGl0ZW0gaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHRhcHMgaW4gcGFyYWxsZWwgYW5kIHN5bmNocm9ub3VzbHksXG4gIGkuZS4gZWFjaCB0YXAgbXVzdCBhY2NlcHQgYmVmb3JlIHRoZSBuZXh0IGl0ZW0gaXMgZGlzdHJpYnV0ZWQuIFVzZVxuICBidWZmZXJpbmcvd2luZG93aW5nIHRvIHByZXZlbnQgc2xvdyB0YXBzIGZyb20gaG9sZGluZyB1cCB0aGUgbXVsdC5cblxuICBJdGVtcyByZWNlaXZlZCB3aGVuIHRoZXJlIGFyZSBubyB0YXBzIGdldCBkcm9wcGVkLlxuXG4gIElmIGEgdGFwIHB1dHMgdG8gYSBjbG9zZWQgY2hhbm5lbCwgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIG11bHQuIiwgOmFyZ2xpc3RzIChbY2hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdWx0XHJcbiBcIkNyZWF0ZXMgYW5kIHJldHVybnMgYSBtdWx0KGlwbGUpIG9mIHRoZSBzdXBwbGllZCBjaGFubmVsLiBDaGFubmVsc1xcbiAgY29udGFpbmluZyBjb3BpZXMgb2YgdGhlIGNoYW5uZWwgY2FuIGJlIGNyZWF0ZWQgd2l0aCAndGFwJywgYW5kXFxuICBkZXRhY2hlZCB3aXRoICd1bnRhcCcuXFxuXFxuICBFYWNoIGl0ZW0gaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHRhcHMgaW4gcGFyYWxsZWwgYW5kIHN5bmNocm9ub3VzbHksXFxuICBpLmUuIGVhY2ggdGFwIG11c3QgYWNjZXB0IGJlZm9yZSB0aGUgbmV4dCBpdGVtIGlzIGRpc3RyaWJ1dGVkLiBVc2VcXG4gIGJ1ZmZlcmluZy93aW5kb3dpbmcgdG8gcHJldmVudCBzbG93IHRhcHMgZnJvbSBob2xkaW5nIHVwIHRoZSBtdWx0LlxcblxcbiAgSXRlbXMgcmVjZWl2ZWQgd2hlbiB0aGVyZSBhcmUgbm8gdGFwcyBnZXQgZHJvcHBlZC5cXG5cXG4gIElmIGEgdGFwIHB1dHMgdG8gYSBjbG9zZWQgY2hhbm5lbCwgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIG11bHQuXCJcclxuIFtjaF1cclxuIChsZXRcclxuICBbY3NcclxuICAgKGF0b20ge30pXHJcbiAgIG1cclxuICAgKHJlaWZ5XHJcbiAgICBNdXhcclxuICAgIChtdXhjaCogW19dIGNoKVxyXG4gICAgTXVsdFxyXG4gICAgKHRhcCogW18gY2ggY2xvc2U/XSAoc3dhcCEgY3MgYXNzb2MgY2ggY2xvc2U/KSBuaWwpXHJcbiAgICAodW50YXAqIFtfIGNoXSAoc3dhcCEgY3MgZGlzc29jIGNoKSBuaWwpXHJcbiAgICAodW50YXAtYWxsKiBbX10gKHJlc2V0ISBjcyB7fSkgbmlsKSlcclxuICAgZGNoYW5cclxuICAgKGNoYW4gMSlcclxuICAgZGN0clxyXG4gICAoYXRvbSBuaWwpXHJcbiAgIGRvbmVcclxuICAgKGZuIFtfXSAod2hlbiAoemVybz8gKHN3YXAhIGRjdHIgZGVjKSkgKHB1dCEgZGNoYW4gdHJ1ZSkpKV1cclxuICAoZ28tbG9vcFxyXG4gICBbXVxyXG4gICAobGV0XHJcbiAgICBbdmFsICg8ISBjaCldXHJcbiAgICAoaWZcclxuICAgICAobmlsPyB2YWwpXHJcbiAgICAgKGRvc2VxIFtbYyBjbG9zZT9dIEBjc10gKHdoZW4gY2xvc2U/IChjbG9zZSEgYykpKVxyXG4gICAgIChsZXRcclxuICAgICAgW2NocyAoa2V5cyBAY3MpXVxyXG4gICAgICAocmVzZXQhIGRjdHIgKGNvdW50IGNocykpXHJcbiAgICAgIChkb3NlcVxyXG4gICAgICAgW2MgY2hzXVxyXG4gICAgICAgKHdoZW4tbm90IChwdXQhIGMgdmFsIGRvbmUpIChkb25lIG5pbCkgKHVudGFwKiBtIGMpKSlcclxuICAgICAgKHdoZW4gKHNlcSBjaHMpICg8ISBkY2hhbikpXHJcbiAgICAgIChyZWN1cikpKSkpXHJcbiAgbSkpXHJcbiJ9IHs6c3ltIG1hcGNhdDwsIDptZXRhIHs6ZG9jICJEZXByZWNhdGVkIC0gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbW92ZWQuIFVzZSB0cmFuc2R1Y2VyIGluc3RlYWQiLCA6YXJnbGlzdHMgW1tmIGluXSBbZiBpbiBidWYtb3Itbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcGNhdDxcclxuIFwiRGVwcmVjYXRlZCAtIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkLiBVc2UgdHJhbnNkdWNlciBpbnN0ZWFkXCJcclxuIChbZiBpbl0gKG1hcGNhdDwgZiBpbiBuaWwpKVxyXG4gKFtmIGluIGJ1Zi1vci1uXSAobGV0IFtvdXQgKGNoYW4gYnVmLW9yLW4pXSAobWFwY2F0KiBmIGluIG91dCkgb3V0KSkpXHJcbiJ9IHs6c3ltIGlvYy1hbHRzISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBjb250LWJsb2NrIHBvcnRzICYgezphcyBvcHRzfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGlvYy1hbHRzIVxyXG4gW3N0YXRlIGNvbnQtYmxvY2sgcG9ydHMgJiB7OmFzIG9wdHN9XVxyXG4gKGlvYy9hc2V0LWFsbCEgc3RhdGUgaGVscGVycy9TVEFURS1JRFggY29udC1ibG9jaylcclxuICh3aGVuLWxldFxyXG4gIFtjYlxyXG4gICAoY2xqcy5jb3JlLmFzeW5jL2RvLWFsdHNcclxuICAgIChmblxyXG4gICAgIFt2YWxdXHJcbiAgICAgKGlvYy9hc2V0LWFsbCEgc3RhdGUgaGVscGVycy9WQUxVRS1JRFggdmFsKVxyXG4gICAgIChoZWxwZXJzL3J1bi1zdGF0ZS1tYWNoaW5lLXdyYXBwZWQgc3RhdGUpKVxyXG4gICAgcG9ydHNcclxuICAgIG9wdHMpXVxyXG4gIChpb2MvYXNldC1hbGwhIHN0YXRlIGhlbHBlcnMvVkFMVUUtSURYIEBjYilcclxuICA6cmVjdXIpKVxyXG4ifSB7OnN5bSB1bmJsb2NraW5nLWJ1ZmZlcj8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgYSBjaGFubmVsIGNyZWF0ZWQgd2l0aCBidWZmIHdpbGwgbmV2ZXIgYmxvY2suIFRoYXQgaXMgdG8gc2F5LFxuICAgcHV0cyBpbnRvIHRoaXMgYnVmZmVyIHdpbGwgbmV2ZXIgY2F1c2UgdGhlIGJ1ZmZlciB0byBiZSBmdWxsLiAiLCA6YXJnbGlzdHMgKFtidWZmXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5ibG9ja2luZy1idWZmZXI/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBhIGNoYW5uZWwgY3JlYXRlZCB3aXRoIGJ1ZmYgd2lsbCBuZXZlciBibG9jay4gVGhhdCBpcyB0byBzYXksXFxuICAgcHV0cyBpbnRvIHRoaXMgYnVmZmVyIHdpbGwgbmV2ZXIgY2F1c2UgdGhlIGJ1ZmZlciB0byBiZSBmdWxsLiBcIlxyXG4gW2J1ZmZdXHJcbiAoc2F0aXNmaWVzPyBpbXBsL1VuYmxvY2tpbmdCdWZmZXIgYnVmZikpXHJcbiJ9IHs6c3ltIHB1dCEsIDptZXRhIHs6ZG9jICJBc3luY2hyb25vdXNseSBwdXRzIGEgdmFsIGludG8gcG9ydCwgY2FsbGluZyBmbjEgKGlmIHN1cHBsaWVkKSB3aGVuXG4gICBjb21wbGV0ZS4gbmlsIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQuIFdpbGwgdGhyb3cgaWYgY2xvc2VkLiBJZlxuICAgb24tY2FsbGVyPyAoZGVmYXVsdCB0cnVlKSBpcyB0cnVlLCBhbmQgdGhlIHB1dCBpcyBpbW1lZGlhdGVseVxuICAgYWNjZXB0ZWQsIHdpbGwgY2FsbCBmbjEgb24gY2FsbGluZyB0aHJlYWQuICBSZXR1cm5zIG5pbC4iLCA6YXJnbGlzdHMgW1twb3J0IHZhbF0gW3BvcnQgdmFsIGZuMV0gW3BvcnQgdmFsIGZuMSBvbi1jYWxsZXI/XV19LCA6c291cmNlICIoZGVmblxyXG4gcHV0IVxyXG4gXCJBc3luY2hyb25vdXNseSBwdXRzIGEgdmFsIGludG8gcG9ydCwgY2FsbGluZyBmbjEgKGlmIHN1cHBsaWVkKSB3aGVuXFxuICAgY29tcGxldGUuIG5pbCB2YWx1ZXMgYXJlIG5vdCBhbGxvd2VkLiBXaWxsIHRocm93IGlmIGNsb3NlZC4gSWZcXG4gICBvbi1jYWxsZXI/IChkZWZhdWx0IHRydWUpIGlzIHRydWUsIGFuZCB0aGUgcHV0IGlzIGltbWVkaWF0ZWx5XFxuICAgYWNjZXB0ZWQsIHdpbGwgY2FsbCBmbjEgb24gY2FsbGluZyB0aHJlYWQuICBSZXR1cm5zIG5pbC5cIlxyXG4gKFtwb3J0IHZhbF0gKGlmLWxldCBbcmV0IChpbXBsL3B1dCEgcG9ydCB2YWwgZmhub3ApXSBAcmV0IHRydWUpKVxyXG4gKFtwb3J0IHZhbCBmbjFdIChwdXQhIHBvcnQgdmFsIGZuMSB0cnVlKSlcclxuIChbcG9ydCB2YWwgZm4xIG9uLWNhbGxlcj9dXHJcbiAgKGlmLWxldFxyXG4gICBbcmV0YiAoaW1wbC9wdXQhIHBvcnQgdmFsIChmbi1oYW5kbGVyIGZuMSkpXVxyXG4gICAobGV0XHJcbiAgICBbcmV0IEByZXRiXVxyXG4gICAgKGlmIG9uLWNhbGxlcj8gKGZuMSByZXQpIChkaXNwYXRjaC9ydW4gKGZuKiBbXSAoZm4xIHJldCkpKSlcclxuICAgIHJldClcclxuICAgdHJ1ZSkpKVxyXG4ifSB7OnN5bSB0YWtlISwgOm1ldGEgezpkb2MgIkFzeW5jaHJvbm91c2x5IHRha2VzIGEgdmFsIGZyb20gcG9ydCwgcGFzc2luZyB0byBmbjEuIFdpbGwgcGFzcyBuaWxcbiAgIGlmIGNsb3NlZC4gSWYgb24tY2FsbGVyPyAoZGVmYXVsdCB0cnVlKSBpcyB0cnVlLCBhbmQgdmFsdWUgaXNcbiAgIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgd2lsbCBjYWxsIGZuMSBvbiBjYWxsaW5nIHRocmVhZC5cbiAgIFJldHVybnMgbmlsLiIsIDphcmdsaXN0cyBbW3BvcnQgZm4xXSBbcG9ydCBmbjEgb24tY2FsbGVyP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRha2UhXHJcbiBcIkFzeW5jaHJvbm91c2x5IHRha2VzIGEgdmFsIGZyb20gcG9ydCwgcGFzc2luZyB0byBmbjEuIFdpbGwgcGFzcyBuaWxcXG4gICBpZiBjbG9zZWQuIElmIG9uLWNhbGxlcj8gKGRlZmF1bHQgdHJ1ZSkgaXMgdHJ1ZSwgYW5kIHZhbHVlIGlzXFxuICAgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCB3aWxsIGNhbGwgZm4xIG9uIGNhbGxpbmcgdGhyZWFkLlxcbiAgIFJldHVybnMgbmlsLlwiXHJcbiAoW3BvcnQgZm4xXSAodGFrZSEgcG9ydCBmbjEgdHJ1ZSkpXHJcbiAoW3BvcnQgZm4xIG9uLWNhbGxlcj9dXHJcbiAgKGxldFxyXG4gICBbcmV0IChpbXBsL3Rha2UhIHBvcnQgKGZuLWhhbmRsZXIgZm4xKSldXHJcbiAgICh3aGVuXHJcbiAgICByZXRcclxuICAgIChsZXRcclxuICAgICBbdmFsIEByZXRdXHJcbiAgICAgKGlmIG9uLWNhbGxlcj8gKGZuMSB2YWwpIChkaXNwYXRjaC9ydW4gKGZuKiBbXSAoZm4xIHZhbCkpKSkpKVxyXG4gICBuaWwpKSlcclxuIn0pLCBjbGpzLmNvcmUuYXN5bmMuaW1wbC5idWZmZXJzICh7OnN5bSBhY29weSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcmMgc3JjLXN0YXJ0IGRlc3QgZGVzdC1zdGFydCBsZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhY29weVxyXG4gW3NyYyBzcmMtc3RhcnQgZGVzdCBkZXN0LXN0YXJ0IGxlbl1cclxuIChsb29wXHJcbiAgW2NudCAwXVxyXG4gICh3aGVuXHJcbiAgICg8IGNudCBsZW4pXHJcbiAgIChhc2V0IGRlc3QgKCsgZGVzdC1zdGFydCBjbnQpIChhZ2V0IHNyYyAoKyBzcmMtc3RhcnQgY250KSkpXHJcbiAgIChyZWN1ciAoaW5jIGNudCkpKSkpXHJcbiJ9IHs6c3ltIHJpbmctYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByaW5nLWJ1ZmZlclxyXG4gW25dXHJcbiAoYXNzZXJ0ICg+IG4gMCkgXCJDYW4ndCBjcmVhdGUgYSByaW5nIGJ1ZmZlciBvZiBzaXplIDBcIilcclxuIChSaW5nQnVmZmVyLiAwIDAgMCAobWFrZS1hcnJheSBuKSkpXHJcbiJ9IHs6c3ltIGZpeGVkLWJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmbiBmaXhlZC1idWZmZXIgW25dIChGaXhlZEJ1ZmZlci4gKHJpbmctYnVmZmVyIG4pIG4pKVxyXG4ifSB7OnN5bSBkcm9wcGluZy1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm4gZHJvcHBpbmctYnVmZmVyIFtuXSAoRHJvcHBpbmdCdWZmZXIuIChyaW5nLWJ1ZmZlciBuKSBuKSlcclxuIn0gezpzeW0gc2xpZGluZy1idWZmZXIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbl0pfSwgOnNvdXJjZSAiKGRlZm4gc2xpZGluZy1idWZmZXIgW25dIChTbGlkaW5nQnVmZmVyLiAocmluZy1idWZmZXIgbikgbikpXHJcbiJ9IHs6c3ltIHByb21pc2UtYnVmZmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gcHJvbWlzZS1idWZmZXIgW10gKFByb21pc2VCdWZmZXIuIE5PLVZBTCkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwucHJvdG9jb2xzICh7OnN5bSByZW1vdmUhLCA6bWV0YSB7OmRvYyAicmVtb3ZlIGFuZCByZXR1cm4gbmV4dCBpdGVtIGZyb20gYnVmZmVyLCBjYWxsZWQgdW5kZXIgY2hhbiBtdXRleCIsIDphcmdsaXN0cyAoW2JdKX0sIDpwcm90b2NvbCBCdWZmZXJ9IHs6c3ltIGNsb3NlLWJ1ZiEsIDptZXRhIHs6ZG9jICJjYWxsZWQgb24gY2hhbiBjbG9zZWQgdW5kZXIgY2hhbiBtdXRleCwgcmV0dXJuIGlnbm9yZWQiLCA6YXJnbGlzdHMgKFtiXSl9LCA6cHJvdG9jb2wgQnVmZmVyfSB7OnN5bSBjbG9zZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY2hhbl0pfSwgOnByb3RvY29sIENoYW5uZWx9IHs6c3ltIEhhbmRsZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChhY3RpdmU/IGJsb2NrYWJsZT8gY29tbWl0KX0gezpzeW0gYmxvY2thYmxlPywgOm1ldGEgezpkb2MgInJldHVybnMgdHJ1ZSBpZiB0aGlzIGhhbmRsZXIgbWF5IGJlIGJsb2NrZWQsIG90aGVyd2lzZSBpdCBtdXN0IG5vdCBibG9jayIsIDphcmdsaXN0cyAoW2hdKX0sIDpwcm90b2NvbCBIYW5kbGVyfSB7OnN5bSBhY3RpdmU/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB0cnVlIGlmIGhhcyBjYWxsYmFjay4gTXVzdCB3b3JrIHcvbyBsb2NrIiwgOmFyZ2xpc3RzIChbaF0pfSwgOnByb3RvY29sIEhhbmRsZXJ9IHs6c3ltIEJ1ZmZlciwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKGFkZCEqIGNsb3NlLWJ1ZiEgZnVsbD8gcmVtb3ZlISl9IHs6c3ltIGZ1bGw/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB0cnVlIGlmIGJ1ZmZlciBjYW5ub3QgYWNjZXB0IHB1dCIsIDphcmdsaXN0cyAoW2JdKX0sIDpwcm90b2NvbCBCdWZmZXJ9IHs6c3ltIGFkZCEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbYl0gW2IgaXRtXV19LCA6c291cmNlICIoZGVmbiBhZGQhIChbYl0gYikgKFtiIGl0bV0gKGFzc2VydCAobm90IChuaWw/IGl0bSkpKSAoYWRkISogYiBpdG0pKSlcclxuIn0gezpzeW0gYWRkISosIDptZXRhIHs6ZG9jICJpZiByb29tLCBhZGQgaXRlbSB0byB0aGUgYnVmZmVyLCByZXR1cm5zIGIsIGNhbGxlZCB1bmRlciBjaGFuIG11dGV4IiwgOmFyZ2xpc3RzIChbYiBpdG1dKX0sIDpwcm90b2NvbCBCdWZmZXJ9IHs6c3ltIFJlYWRQb3J0LCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodGFrZSEpfSB7OnN5bSBDaGFubmVsLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoY2xvc2UhIGNsb3NlZD8pfSB7OnN5bSBjbG9zZWQ/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NoYW5dKX0sIDpwcm90b2NvbCBDaGFubmVsfSB7OnN5bSBVbmJsb2NraW5nQnVmZmVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoKX0gezpzeW0gTUFYLVFVRVVFLVNJWkUsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1BWC1RVUVVRS1TSVpFIDEwMjQpXHJcbiJ9IHs6c3ltIGNvbW1pdCwgOm1ldGEgezpkb2MgImNvbW1pdCB0byBmdWxmaWxsaW5nIGl0cyBlbmQgb2YgdGhlIHRyYW5zZmVyLCByZXR1cm5zIGNiLiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gbG9jayIsIDphcmdsaXN0cyAoW2hdKX0sIDpwcm90b2NvbCBIYW5kbGVyfSB7OnN5bSBwdXQhLCA6bWV0YSB7OmRvYyAiZGVyZWZhYmxlIGJvb2xlYW4gKGZhbHNlIGlmIGFscmVhZHkgY2xvc2VkKSBpZiBoYW5kbGVkLCBuaWwgaWYgcHV0IHdhcyBlbnF1ZXVlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IHRocm93IG9uIG5pbCB2YWwuIiwgOmFyZ2xpc3RzIChbcG9ydCB2YWwgZm4xLWhhbmRsZXJdKX0sIDpwcm90b2NvbCBXcml0ZVBvcnR9IHs6c3ltIHRha2UhLCA6bWV0YSB7OmRvYyAiZGVyZWZhYmxlIHZhbCBpZiB0YWtlbiwgbmlsIGlmIHRha2Ugd2FzIGVucXVldWVkIiwgOmFyZ2xpc3RzIChbcG9ydCBmbjEtaGFuZGxlcl0pfSwgOnByb3RvY29sIFJlYWRQb3J0fSB7OnN5bSBXcml0ZVBvcnQsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChwdXQhKX0pLCBydW0uZGVyaXZlZC1hdG9tICh7OnN5bSBkZXJpdmVkLWF0b20sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcmVmcyBrZXkgZl0gW3JlZnMga2V5IGYgb3B0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlcml2ZWQtYXRvbVxyXG4gKFtyZWZzIGtleSBmXSAoZGVyaXZlZC1hdG9tIHJlZnMga2V5IGYge30pKVxyXG4gKFtyZWZzIGtleSBmIG9wdHNdXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtyZWYgY2hlY2stZXF1YWxzP10sIDpvciB7Y2hlY2stZXF1YWxzPyB0cnVlfX1cclxuICAgIG9wdHNcclxuICAgIHJlY2FsY1xyXG4gICAgKGNhc2VcclxuICAgICAoY291bnQgcmVmcylcclxuICAgICAxXHJcbiAgICAgKGxldCBbW2FdIHJlZnNdIChmbiogW10gKGYgQGEpKSlcclxuICAgICAyXHJcbiAgICAgKGxldCBbW2EgYl0gcmVmc10gKGZuKiBbXSAoZiBAYSBAYikpKVxyXG4gICAgIDNcclxuICAgICAobGV0IFtbYSBiIGNdIHJlZnNdIChmbiogW10gKGYgQGEgQGIgQGMpKSlcclxuICAgICAoZm4qIFtdIChhcHBseSBmIChtYXAgZGVyZWYgcmVmcykpKSlcclxuICAgIHNpbmtcclxuICAgIChpZiByZWYgKGRvdG8gcmVmIChyZXNldCEgKHJlY2FsYykpKSAoYXRvbSAocmVjYWxjKSkpXHJcbiAgICB3YXRjaFxyXG4gICAgKGlmXHJcbiAgICAgY2hlY2stZXF1YWxzP1xyXG4gICAgIChmblxyXG4gICAgICBbXyBfIF8gX11cclxuICAgICAgKGxldFxyXG4gICAgICAgW25ldy12YWwgKHJlY2FsYyldXHJcbiAgICAgICAod2hlbiAobm90PSBAc2luayBuZXctdmFsKSAocmVzZXQhIHNpbmsgbmV3LXZhbCkpKSlcclxuICAgICAoZm4gW18gXyBfIF9dIChyZXNldCEgc2luayAocmVjYWxjKSkpKV1cclxuICAgKGRvc2VxIFtyZWYgcmVmc10gKGFkZC13YXRjaCByZWYga2V5IHdhdGNoKSlcclxuICAgc2luaykpKVxyXG4ifSksIG1pc3Rha2VzLXdlcmUtbWFkZS5jb3JlICh7OnN5bSBjYW4tcmVkbz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHJlZG8uIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbi1yZWRvP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHJlZG8uXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKHNvbWU/IChnZXQtbmV4dC1zdGF0ZSAqZWRpdC1oaXN0b3J5KSkpXHJcbiJ9IHs6c3ltIGF0b20/LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYXRvbT9cclxuIChmbipcclxuICBbcDFfXzQ5MDE1I11cclxuICAoaW5zdGFuY2U/XHJcbiAgICM/KDpjbGogY2xvanVyZS5sYW5nLkF0b20gOmNsanMgY2xqcy5jb3JlL0F0b20pXHJcbiAgIHAxX180OTAxNSMpKSlcclxuIn0gezpzeW0gZ2V0LWN1cnJlbnQtc3RhdGUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWN1cnJlbnQtc3RhdGVcclxuIFwiUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmcm9tIGVkaXQtaGlzdG9yeSwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUuXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtc3RhdGUgc3RhdGVzXX0gQCplZGl0LWhpc3RvcnldXHJcbiAgKGdldCBzdGF0ZXMgY3VycmVudC1zdGF0ZSkpKVxyXG4ifSB7OnN5bSB1bmRvISwgOm1ldGEgezpkb2MgIkNoYW5nZXMgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5kbyFcclxuIFwiQ2hhbmdlcyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgcHJldmlvdXMgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLlwiXHJcbiBbKmVkaXQtaGlzdG9yeV1cclxuICh3aGVuLWxldFxyXG4gIFtzdGF0ZSAoZ2V0LXByZXZpb3VzLXN0YXRlICplZGl0LWhpc3RvcnkpXVxyXG4gIChzd2FwISAqZWRpdC1oaXN0b3J5IHVwZGF0ZSA6Y3VycmVudC1zdGF0ZSBkZWMpXHJcbiAgc3RhdGUpKVxyXG4ifSB7OnN5bSByZWRvISwgOm1ldGEgezpkb2MgIkNoYW5nZXMgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHJldHVybnMgdGhlIG5leHQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWRvIVxyXG4gXCJDaGFuZ2VzIHRoZSBjdXJyZW50IHN0YXRlIGFuZCByZXR1cm5zIHRoZSBuZXh0IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAod2hlbi1sZXRcclxuICBbc3RhdGUgKGdldC1uZXh0LXN0YXRlICplZGl0LWhpc3RvcnkpXVxyXG4gIChzd2FwISAqZWRpdC1oaXN0b3J5IHVwZGF0ZSA6Y3VycmVudC1zdGF0ZSBpbmMpXHJcbiAgc3RhdGUpKVxyXG4ifSB7OnN5bSBjYW4tdW5kbz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHVuZG8uIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNhbi11bmRvP1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHVuZG8uXCJcclxuIFsqZWRpdC1oaXN0b3J5XVxyXG4gKHNvbWU/IChnZXQtcHJldmlvdXMtc3RhdGUgKmVkaXQtaGlzdG9yeSkpKVxyXG4ifSB7OnN5bSBnZXQtbmV4dC1zdGF0ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG5leHQgc3RhdGUgZnJvbSBlZGl0LWhpc3RvcnksIG9yIG5pbCBpZiB0aGVyZSBpcyBub25lLiIsIDphcmdsaXN0cyAoWyplZGl0LWhpc3RvcnldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbmV4dC1zdGF0ZVxyXG4gXCJSZXR1cm5zIHRoZSBuZXh0IHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZSBzdGF0ZXNdfSBAKmVkaXQtaGlzdG9yeV1cclxuICAoZ2V0IHN0YXRlcyAoaW5jIGN1cnJlbnQtc3RhdGUpKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1jdXJzb3ItcG9zaXRpb24hLCA6bWV0YSB7OmRvYyAiVXBkYXRlcyBvbmx5IHRoZSBjdXJzb3IgcG9zaXRpb24uIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeSBjdXJzb3ItcG9zaXRpb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtY3Vyc29yLXBvc2l0aW9uIVxyXG4gXCJVcGRhdGVzIG9ubHkgdGhlIGN1cnNvciBwb3NpdGlvbi5cIlxyXG4gWyplZGl0LWhpc3RvcnkgY3Vyc29yLXBvc2l0aW9uXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW2N1cnJlbnQtc3RhdGVdfSBAKmVkaXQtaGlzdG9yeV1cclxuICAod2hlblxyXG4gICAoPj0gY3VycmVudC1zdGF0ZSAwKVxyXG4gICAoc3dhcCFcclxuICAgICplZGl0LWhpc3RvcnlcclxuICAgIGFzc29jLWluXHJcbiAgICBbOnN0YXRlcyBjdXJyZW50LXN0YXRlIDpjdXJzb3ItcG9zaXRpb25dXHJcbiAgICBjdXJzb3ItcG9zaXRpb24pKSkpXHJcbiJ9IHs6c3ltIHVwZGF0ZS1lZGl0LWhpc3RvcnkhLCA6bWV0YSB7OmRvYyAiVXBkYXRlcyB0aGUgZWRpdCBoaXN0b3J5IGF0b20uIiwgOmFyZ2xpc3RzIChbKmVkaXQtaGlzdG9yeSBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVwZGF0ZS1lZGl0LWhpc3RvcnkhXHJcbiBcIlVwZGF0ZXMgdGhlIGVkaXQgaGlzdG9yeSBhdG9tLlwiXHJcbiBbKmVkaXQtaGlzdG9yeSBzdGF0ZV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJyZW50LXN0YXRlIHN0YXRlcyBsaW1pdF19XHJcbiAgIEAqZWRpdC1oaXN0b3J5XHJcbiAgIG9sZC1zdGF0ZVxyXG4gICAoZ2V0IHN0YXRlcyBjdXJyZW50LXN0YXRlKVxyXG4gICBvbGQtY3Vyc29yLXBvc2l0aW9uXHJcbiAgIChvciAoZmlyc3QgKDpvcmlnaW5hbC1jdXJzb3ItcG9zaXRpb24gb2xkLXN0YXRlKSkgMClcclxuICAgbmV3LWN1cnNvci1wb3NpdGlvblxyXG4gICAoZmlyc3QgKDpjdXJzb3ItcG9zaXRpb24gc3RhdGUpKVxyXG4gICBuZXctY3Vyc29yLWNoYW5nZVxyXG4gICAoLSBuZXctY3Vyc29yLXBvc2l0aW9uIG9sZC1jdXJzb3ItcG9zaXRpb24pXHJcbiAgIHN0YXRlXHJcbiAgIChhc3NvYyBzdGF0ZSA6b3JpZ2luYWwtY3Vyc29yLXBvc2l0aW9uICg6Y3Vyc29yLXBvc2l0aW9uIHN0YXRlKSldXHJcbiAgKHdoZW5cclxuICAgKG9yXHJcbiAgICAobm90PSAoOnRleHQgb2xkLXN0YXRlKSAoOnRleHQgc3RhdGUpKVxyXG4gICAgKDpzZWxlY3Rpb24tY2hhbmdlPyBzdGF0ZSkpXHJcbiAgIChzd2FwIVxyXG4gICAgKmVkaXQtaGlzdG9yeVxyXG4gICAgKGZuXHJcbiAgICAgW2VkaXQtaGlzdG9yeV1cclxuICAgICAobGV0XHJcbiAgICAgIFtuZXctY3VycmVudC1zdGF0ZVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKG9yICg8PSBjdXJyZW50LXN0YXRlIDEpIChub3Q9IG5ldy1jdXJzb3ItY2hhbmdlIDEpKVxyXG4gICAgICAgIChpbmMgY3VycmVudC1zdGF0ZSlcclxuICAgICAgICBjdXJyZW50LXN0YXRlKVxyXG4gICAgICAgbmV3LXN0YXRlc1xyXG4gICAgICAgKHN1YnZlYyBzdGF0ZXMgMCBuZXctY3VycmVudC1zdGF0ZSlcclxuICAgICAgIG5ldy1zdGF0ZXNcclxuICAgICAgIChjb25qIG5ldy1zdGF0ZXMgc3RhdGUpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChhbmQgbGltaXQgKD4gKGNvdW50IG5ldy1zdGF0ZXMpIGxpbWl0KSlcclxuICAgICAgIChhc3NvY1xyXG4gICAgICAgIGVkaXQtaGlzdG9yeVxyXG4gICAgICAgIDpjdXJyZW50LXN0YXRlXHJcbiAgICAgICAgKGRlYyBuZXctY3VycmVudC1zdGF0ZSlcclxuICAgICAgICA6c3RhdGVzXHJcbiAgICAgICAgKHN1YnZlYyBuZXctc3RhdGVzIDEpKVxyXG4gICAgICAgKGFzc29jXHJcbiAgICAgICAgZWRpdC1oaXN0b3J5XHJcbiAgICAgICAgOmN1cnJlbnQtc3RhdGVcclxuICAgICAgICBuZXctY3VycmVudC1zdGF0ZVxyXG4gICAgICAgIDpzdGF0ZXNcclxuICAgICAgICBuZXctc3RhdGVzKSkpKSkpKSlcclxuIn0gezpzeW0gY3JlYXRlLWVkaXQtaGlzdG9yeSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGNyZWF0ZS1lZGl0LWhpc3RvcnkgW10gKGF0b20gezpjdXJyZW50LXN0YXRlIC0xLCA6c3RhdGVzIFtdfSkpXHJcbiJ9IHs6c3ltIGdldC1wcmV2aW91cy1zdGF0ZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIHByZXZpb3VzIHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS4iLCA6YXJnbGlzdHMgKFsqZWRpdC1oaXN0b3J5XSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXByZXZpb3VzLXN0YXRlXHJcbiBcIlJldHVybnMgdGhlIHByZXZpb3VzIHN0YXRlIGZyb20gZWRpdC1oaXN0b3J5LCBvciBuaWwgaWYgdGhlcmUgaXMgbm9uZS5cIlxyXG4gWyplZGl0LWhpc3RvcnldXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbY3VycmVudC1zdGF0ZSBzdGF0ZXNdfSBAKmVkaXQtaGlzdG9yeV1cclxuICAoZ2V0IHN0YXRlcyAoZGVjIGN1cnJlbnQtc3RhdGUpKSkpXHJcbiJ9KSwgY2xqcy50b29scy5yZWFkZXIuaW1wbC5pbnNwZWN0ICh7OnN5bSBpbnNwZWN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSBzdXBwbGllZC5cbiAgIE1heSBiZSB0aGUgYSBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXRzZWxmIChlLmcuIFwidHJ1ZVwiKVxuICAgb3IgaXQgbWF5IGJlIGEgZGVzY3JpcHRpb24gKGUuZy4gXCJhbiBpbnN0YW5jZSBvZiBGb29cIikuXG4gICBJZiB0cnVuY2F0ZSBpcyB0cnVlIHRoZW4gcmV0dXJuIGEgdmVyeSB0ZXJzZSB2ZXJzaW9uIG9mXG4gICB0aGUgaW5zcGVjdGlvbi4iLCA6YXJnbGlzdHMgW1t4XSBbdHJ1bmNhdGUgeF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc3BlY3RcclxuIFwiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSBzdXBwbGllZC5cXG4gICBNYXkgYmUgdGhlIGEgc3RyaW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlIGl0c2VsZiAoZS5nLiBcXFwidHJ1ZVxcXCIpXFxuICAgb3IgaXQgbWF5IGJlIGEgZGVzY3JpcHRpb24gKGUuZy4gXFxcImFuIGluc3RhbmNlIG9mIEZvb1xcXCIpLlxcbiAgIElmIHRydW5jYXRlIGlzIHRydWUgdGhlbiByZXR1cm4gYSB2ZXJ5IHRlcnNlIHZlcnNpb24gb2ZcXG4gICB0aGUgaW5zcGVjdGlvbi5cIlxyXG4gKFt4XSAoaW5zcGVjdCogZmFsc2UgeCkpXHJcbiAoW3RydW5jYXRlIHhdIChpbnNwZWN0KiB0cnVuY2F0ZSB4KSkpXHJcbiJ9KSwgc2FibG9uby5jb3JlICh7OnN5bSB3cmFwLWF0dHJzLCA6bWV0YSB7OmRvYyAiQWRkIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSBhcmd1bWVudCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGVsZW1lbnQgdmVjdG9yLiIsIDphcmdsaXN0cyAoW2Z1bmNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3cmFwLWF0dHJzXHJcbiBcIkFkZCBhbiBvcHRpb25hbCBhdHRyaWJ1dGUgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBlbGVtZW50IHZlY3Rvci5cIlxyXG4gW2Z1bmNdXHJcbiAoZm5cclxuICBbJiBhcmdzXVxyXG4gIChpZlxyXG4gICAobWFwPyAoZmlyc3QgYXJncykpXHJcbiAgIChsZXRcclxuICAgIFtbdGFnICYgYm9keV0gKGFwcGx5IGZ1bmMgKHJlc3QgYXJncykpXVxyXG4gICAgKGlmXHJcbiAgICAgKG1hcD8gKGZpcnN0IGJvZHkpKVxyXG4gICAgIChpbnRvIFt0YWcgKG1lcmdlIChmaXJzdCBib2R5KSAoZmlyc3QgYXJncykpXSAocmVzdCBib2R5KSlcclxuICAgICAoaW50byBbdGFnIChmaXJzdCBhcmdzKV0gYm9keSkpKVxyXG4gICAoYXBwbHkgZnVuYyBhcmdzKSkpKVxyXG4ifSB7OnN5bSBpbmNsdWRlLWNzcywgOm1ldGEgezpkb2MgIkluY2x1ZGUgYSBsaXN0IG9mIGV4dGVybmFsIHN0eWxlc2hlZXQgZmlsZXMuIiwgOmFyZ2xpc3RzIChbJiBzdHlsZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmNsdWRlLWNzc1xyXG4gXCJJbmNsdWRlIGEgbGlzdCBvZiBleHRlcm5hbCBzdHlsZXNoZWV0IGZpbGVzLlwiXHJcbiBbJiBzdHlsZXNdXHJcbiAoZm9yXHJcbiAgW3N0eWxlIHN0eWxlc11cclxuICBbOmxpbmsgezp0eXBlIFwidGV4dC9jc3NcIiwgOmhyZWYgKGFzLXN0ciBzdHlsZSksIDpyZWwgXCJzdHlsZXNoZWV0XCJ9XSkpXHJcbiJ9IHs6c3ltIGluY2x1ZGUtanMsIDptZXRhIHs6ZG9jICJJbmNsdWRlIHRoZSBKYXZhU2NyaXB0IGxpYnJhcnkgYXQgYHNyY2AuIiwgOmFyZ2xpc3RzIChbc3JjXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5jbHVkZS1qc1xyXG4gXCJJbmNsdWRlIHRoZSBKYXZhU2NyaXB0IGxpYnJhcnkgYXQgYHNyY2AuXCJcclxuIFtzcmNdXHJcbiAoZG9tL2FwcGVuZENoaWxkXHJcbiAgKC4tYm9keSAoZG9tL2dldERvY3VtZW50KSlcclxuICAoZG9tL2NyZWF0ZURvbSBcInNjcmlwdFwiICNqcyB7OnNyYyBzcmN9KSkpXHJcbiJ9IHs6c3ltIGluY2x1ZGUtcmVhY3QsIDptZXRhIHs6ZG9jICJJbmNsdWRlIEZhY2Vib29rJ3MgUmVhY3QgSmF2YVNjcmlwdCBsaWJyYXJ5LiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluY2x1ZGUtcmVhY3RcclxuIFwiSW5jbHVkZSBGYWNlYm9vaydzIFJlYWN0IEphdmFTY3JpcHQgbGlicmFyeS5cIlxyXG4gW11cclxuIChpbmNsdWRlLWpzIFwiaHR0cDovL2ZiLm1lL3JlYWN0LTAuMTIuMi5qc1wiKSlcclxuIn0gezpzeW0gKmdyb3VwKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmdyb3VwKiBbXSlcclxuIn0gezpzeW0gZmlsZS11cGxvYWQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGZpbGUtdXBsb2FkIGZpbGUtZmllbGQpXHJcbiJ9KSwgY2xvanVyZS5zZXQgKHs6c3ltIHVuaW9uLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoZSBpbnB1dCBzZXRzIiwgOmFyZ2xpc3RzIFtbXSBbczFdIFtzMSBzMl0gW3MxIHMyICYgc2V0c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVuaW9uXHJcbiBcIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGUgaW5wdXQgc2V0c1wiXHJcbiAoW10gI3t9KVxyXG4gKFtzMV0gczEpXHJcbiAoW3MxIHMyXVxyXG4gIChpZlxyXG4gICAoPCAoY291bnQgczEpIChjb3VudCBzMikpXHJcbiAgIChyZWR1Y2UgY29uaiBzMiBzMSlcclxuICAgKHJlZHVjZSBjb25qIHMxIHMyKSkpXHJcbiAoW3MxIHMyICYgc2V0c11cclxuICAobGV0XHJcbiAgIFtidWJibGVkLXNldHMgKGJ1YmJsZS1tYXgta2V5IGNvdW50IChjb25qIHNldHMgczIgczEpKV1cclxuICAgKHJlZHVjZSBpbnRvIChmaXJzdCBidWJibGVkLXNldHMpIChyZXN0IGJ1YmJsZWQtc2V0cykpKSkpXHJcbiJ9IHs6c3ltIG1hcC1pbnZlcnQsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBtYXAgd2l0aCB0aGUgdmFscyBtYXBwZWQgdG8gdGhlIGtleXMuIiwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1pbnZlcnRcclxuIFwiUmV0dXJucyB0aGUgbWFwIHdpdGggdGhlIHZhbHMgbWFwcGVkIHRvIHRoZSBrZXlzLlwiXHJcbiBbbV1cclxuIChyZWR1Y2UgKGZuIFttIFtrIHZdXSAoYXNzb2MgbSB2IGspKSB7fSBtKSlcclxuIn0gezpzeW0gam9pbiwgOm1ldGEgezpkb2MgIldoZW4gcGFzc2VkIDIgcmVscywgcmV0dXJucyB0aGUgcmVsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hdHVyYWxcbiAgam9pbi4gV2hlbiBwYXNzZWQgYW4gYWRkaXRpb25hbCBrZXltYXAsIGpvaW5zIG9uIHRoZSBjb3JyZXNwb25kaW5nXG4gIGtleXMuIiwgOmFyZ2xpc3RzIFtbeHJlbCB5cmVsXSBbeHJlbCB5cmVsIGttXV19LCA6c291cmNlICIoZGVmblxyXG4gam9pblxyXG4gXCJXaGVuIHBhc3NlZCAyIHJlbHMsIHJldHVybnMgdGhlIHJlbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYXR1cmFsXFxuICBqb2luLiBXaGVuIHBhc3NlZCBhbiBhZGRpdGlvbmFsIGtleW1hcCwgam9pbnMgb24gdGhlIGNvcnJlc3BvbmRpbmdcXG4gIGtleXMuXCJcclxuIChbeHJlbCB5cmVsXVxyXG4gIChpZlxyXG4gICAoYW5kIChzZXEgeHJlbCkgKHNlcSB5cmVsKSlcclxuICAgKGxldFxyXG4gICAgW2tzXHJcbiAgICAgKGludGVyc2VjdGlvbiAoc2V0IChrZXlzIChmaXJzdCB4cmVsKSkpIChzZXQgKGtleXMgKGZpcnN0IHlyZWwpKSkpXHJcbiAgICAgW3Igc11cclxuICAgICAoaWYgKDw9IChjb3VudCB4cmVsKSAoY291bnQgeXJlbCkpIFt4cmVsIHlyZWxdIFt5cmVsIHhyZWxdKVxyXG4gICAgIGlkeFxyXG4gICAgIChpbmRleCByIGtzKV1cclxuICAgIChyZWR1Y2VcclxuICAgICAoZm5cclxuICAgICAgW3JldCB4XVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZm91bmQgKGlkeCAoc2VsZWN0LWtleXMgeCBrcykpXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgZm91bmRcclxuICAgICAgICAocmVkdWNlXHJcbiAgICAgICAgIChmbipcclxuICAgICAgICAgIFtwMV9fNDg5ODIjIHAyX180ODk4MyNdXHJcbiAgICAgICAgICAoY29uaiBwMV9fNDg5ODIjIChtZXJnZSBwMl9fNDg5ODMjIHgpKSlcclxuICAgICAgICAgcmV0XHJcbiAgICAgICAgIGZvdW5kKVxyXG4gICAgICAgIHJldCkpKVxyXG4gICAgICN7fVxyXG4gICAgIHMpKVxyXG4gICAje30pKVxyXG4gKFt4cmVsIHlyZWwga21dXHJcbiAgKGxldFxyXG4gICBbW3IgcyBrXVxyXG4gICAgKGlmXHJcbiAgICAgKDw9IChjb3VudCB4cmVsKSAoY291bnQgeXJlbCkpXHJcbiAgICAgW3hyZWwgeXJlbCAobWFwLWludmVydCBrbSldXHJcbiAgICAgW3lyZWwgeHJlbCBrbV0pXHJcbiAgICBpZHhcclxuICAgIChpbmRleCByICh2YWxzIGspKV1cclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW3JldCB4XVxyXG4gICAgIChsZXRcclxuICAgICAgW2ZvdW5kIChpZHggKHJlbmFtZS1rZXlzIChzZWxlY3Qta2V5cyB4IChrZXlzIGspKSBrKSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgZm91bmRcclxuICAgICAgIChyZWR1Y2VcclxuICAgICAgICAoZm4qXHJcbiAgICAgICAgIFtwMV9fNDg5ODQjIHAyX180ODk4NSNdXHJcbiAgICAgICAgIChjb25qIHAxX180ODk4NCMgKG1lcmdlIHAyX180ODk4NSMgeCkpKVxyXG4gICAgICAgIHJldFxyXG4gICAgICAgIGZvdW5kKVxyXG4gICAgICAgcmV0KSkpXHJcbiAgICAje31cclxuICAgIHMpKSkpXHJcbiJ9IHs6c3ltIHNlbGVjdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzZXQgb2YgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBwcmVkIGlzIHRydWUiLCA6YXJnbGlzdHMgKFtwcmVkIHhzZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzZWxlY3RcclxuIFwiUmV0dXJucyBhIHNldCBvZiB0aGUgZWxlbWVudHMgZm9yIHdoaWNoIHByZWQgaXMgdHJ1ZVwiXHJcbiBbcHJlZCB4c2V0XVxyXG4gKHJlZHVjZSAoZm4gW3Mga10gKGlmIChwcmVkIGspIHMgKGRpc2ogcyBrKSkpIHhzZXQgeHNldCkpXHJcbiJ9IHs6c3ltIGludGVyc2VjdGlvbiwgOm1ldGEgezpkb2MgIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGlucHV0IHNldHMiLCA6YXJnbGlzdHMgW1tzMV0gW3MxIHMyXSBbczEgczIgJiBzZXRzXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50ZXJzZWN0aW9uXHJcbiBcIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIGlucHV0IHNldHNcIlxyXG4gKFtzMV0gczEpXHJcbiAoW3MxIHMyXVxyXG4gIChpZlxyXG4gICAoPCAoY291bnQgczIpIChjb3VudCBzMSkpXHJcbiAgIChyZWN1ciBzMiBzMSlcclxuICAgKHJlZHVjZVxyXG4gICAgKGZuXHJcbiAgICAgW3Jlc3VsdCBpdGVtXVxyXG4gICAgIChpZiAoY29udGFpbnM/IHMyIGl0ZW0pIHJlc3VsdCAoZGlzaiByZXN1bHQgaXRlbSkpKVxyXG4gICAgczFcclxuICAgIHMxKSkpXHJcbiAoW3MxIHMyICYgc2V0c11cclxuICAobGV0XHJcbiAgIFtidWJibGVkLXNldHNcclxuICAgIChidWJibGUtbWF4LWtleVxyXG4gICAgIChmbiogW3AxX180ODk3OSNdICgtIChjb3VudCBwMV9fNDg5NzkjKSkpXHJcbiAgICAgKGNvbmogc2V0cyBzMiBzMSkpXVxyXG4gICAocmVkdWNlIGludGVyc2VjdGlvbiAoZmlyc3QgYnViYmxlZC1zZXRzKSAocmVzdCBidWJibGVkLXNldHMpKSkpKVxyXG4ifSB7OnN5bSBzdXBlcnNldD8sIDptZXRhIHs6ZG9jICJJcyBzZXQxIGEgc3VwZXJzZXQgb2Ygc2V0Mj8iLCA6YXJnbGlzdHMgKFtzZXQxIHNldDJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdXBlcnNldD9cclxuIFwiSXMgc2V0MSBhIHN1cGVyc2V0IG9mIHNldDI/XCJcclxuIFtzZXQxIHNldDJdXHJcbiAoYW5kXHJcbiAgKD49IChjb3VudCBzZXQxKSAoY291bnQgc2V0MikpXHJcbiAgKGV2ZXJ5PyAoZm4qIFtwMV9fNDg5ODcjXSAoY29udGFpbnM/IHNldDEgcDFfXzQ4OTg3IykpIHNldDIpKSlcclxuIn0gezpzeW0gaW5kZXgsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgbWFwIG9mIHRoZSBkaXN0aW5jdCB2YWx1ZXMgb2Yga3MgaW4gdGhlIHhyZWwgbWFwcGVkIHRvIGFcbiAgc2V0IG9mIHRoZSBtYXBzIGluIHhyZWwgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2Yga3MuIiwgOmFyZ2xpc3RzIChbeHJlbCBrc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4XHJcbiBcIlJldHVybnMgYSBtYXAgb2YgdGhlIGRpc3RpbmN0IHZhbHVlcyBvZiBrcyBpbiB0aGUgeHJlbCBtYXBwZWQgdG8gYVxcbiAgc2V0IG9mIHRoZSBtYXBzIGluIHhyZWwgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgb2Yga3MuXCJcclxuIFt4cmVsIGtzXVxyXG4gKHJlZHVjZVxyXG4gIChmblxyXG4gICBbbSB4XVxyXG4gICAobGV0IFtpayAoc2VsZWN0LWtleXMgeCBrcyldIChhc3NvYyBtIGlrIChjb25qIChnZXQgbSBpayAje30pIHgpKSkpXHJcbiAge31cclxuICB4cmVsKSlcclxuIn0gezpzeW0gc3Vic2V0PywgOm1ldGEgezpkb2MgIklzIHNldDEgYSBzdWJzZXQgb2Ygc2V0Mj8iLCA6YXJnbGlzdHMgKFtzZXQxIHNldDJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdWJzZXQ/XHJcbiBcIklzIHNldDEgYSBzdWJzZXQgb2Ygc2V0Mj9cIlxyXG4gW3NldDEgc2V0Ml1cclxuIChhbmRcclxuICAoPD0gKGNvdW50IHNldDEpIChjb3VudCBzZXQyKSlcclxuICAoZXZlcnk/IChmbiogW3AxX180ODk4NiNdIChjb250YWlucz8gc2V0MiBwMV9fNDg5ODYjKSkgc2V0MSkpKVxyXG4ifSB7OnN5bSByZW5hbWUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcmVsIG9mIHRoZSBtYXBzIGluIHhyZWwgd2l0aCB0aGUga2V5cyBpbiBrbWFwIHJlbmFtZWQgdG8gdGhlIHZhbHMgaW4ga21hcCIsIDphcmdsaXN0cyAoW3hyZWwga21hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbmFtZVxyXG4gXCJSZXR1cm5zIGEgcmVsIG9mIHRoZSBtYXBzIGluIHhyZWwgd2l0aCB0aGUga2V5cyBpbiBrbWFwIHJlbmFtZWQgdG8gdGhlIHZhbHMgaW4ga21hcFwiXHJcbiBbeHJlbCBrbWFwXVxyXG4gKHNldCAobWFwIChmbiogW3AxX180ODk4MSNdIChyZW5hbWUta2V5cyBwMV9fNDg5ODEjIGttYXApKSB4cmVsKSkpXHJcbiJ9IHs6c3ltIHJlbmFtZS1rZXlzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbWFwIHdpdGggdGhlIGtleXMgaW4ga21hcCByZW5hbWVkIHRvIHRoZSB2YWxzIGluIGttYXAiLCA6YXJnbGlzdHMgKFttYXAga21hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlbmFtZS1rZXlzXHJcbiBcIlJldHVybnMgdGhlIG1hcCB3aXRoIHRoZSBrZXlzIGluIGttYXAgcmVuYW1lZCB0byB0aGUgdmFscyBpbiBrbWFwXCJcclxuIFttYXAga21hcF1cclxuIChyZWR1Y2VcclxuICAoZm5cclxuICAgW20gW29sZCBuZXddXVxyXG4gICAoaWYgKGNvbnRhaW5zPyBtYXAgb2xkKSAoYXNzb2MgbSBuZXcgKGdldCBtYXAgb2xkKSkgbSkpXHJcbiAgKGFwcGx5IGRpc3NvYyBtYXAgKGtleXMga21hcCkpXHJcbiAga21hcCkpXHJcbiJ9IHs6c3ltIHByb2plY3QsIDptZXRhIHs6ZG9jICJSZXR1cm5zIGEgcmVsIG9mIHRoZSBlbGVtZW50cyBvZiB4cmVsIHdpdGggb25seSB0aGUga2V5cyBpbiBrcyIsIDphcmdsaXN0cyAoW3hyZWwga3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm9qZWN0XHJcbiBcIlJldHVybnMgYSByZWwgb2YgdGhlIGVsZW1lbnRzIG9mIHhyZWwgd2l0aCBvbmx5IHRoZSBrZXlzIGluIGtzXCJcclxuIFt4cmVsIGtzXVxyXG4gKHNldCAobWFwIChmbiogW3AxX180ODk4MCNdIChzZWxlY3Qta2V5cyBwMV9fNDg5ODAjIGtzKSkgeHJlbCkpKVxyXG4ifSB7OnN5bSBkaWZmZXJlbmNlLCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc2V0IHRoYXQgaXMgdGhlIGZpcnN0IHNldCB3aXRob3V0IGVsZW1lbnRzIG9mIHRoZSByZW1haW5pbmcgc2V0cyIsIDphcmdsaXN0cyBbW3MxXSBbczEgczJdIFtzMSBzMiAmIHNldHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkaWZmZXJlbmNlXHJcbiBcIlJldHVybiBhIHNldCB0aGF0IGlzIHRoZSBmaXJzdCBzZXQgd2l0aG91dCBlbGVtZW50cyBvZiB0aGUgcmVtYWluaW5nIHNldHNcIlxyXG4gKFtzMV0gczEpXHJcbiAoW3MxIHMyXVxyXG4gIChpZlxyXG4gICAoPCAoY291bnQgczEpIChjb3VudCBzMikpXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFtyZXN1bHQgaXRlbV1cclxuICAgICAoaWYgKGNvbnRhaW5zPyBzMiBpdGVtKSAoZGlzaiByZXN1bHQgaXRlbSkgcmVzdWx0KSlcclxuICAgIHMxXHJcbiAgICBzMSlcclxuICAgKHJlZHVjZSBkaXNqIHMxIHMyKSkpXHJcbiAoW3MxIHMyICYgc2V0c10gKHJlZHVjZSBkaWZmZXJlbmNlIHMxIChjb25qIHNldHMgczIpKSkpXHJcbiJ9KSwgb2RveWxlLnJ1bSAoezpzeW0gKm1hdGNoZXMqLCA6bWV0YSB7OmRvYyAiSWYgYm91bmQgdG8gYW4gdm9sYXRpbGUgY29udGFpbmluZyBhIGhhc2ggbWFwLFxuICAgICAgICAgICAgbWF0Y2hlcyB0cmlnZ2VyZWQgYnkgYGZpcmUtcnVsZXNgIHdpbGwgYmUgc3RvcmVkIGluIGl0XG4gICAgICAgICAgICByYXRoZXIgdGhhbiBpbiB0aGUgYXRvbSBjcmVhdGVkIGJ5IGBydWxlc2V0YC5cbiAgICAgICAgICAgIFRoaXMgaXMgaW1wb3J0YW50IHdoZW4gbW9kaWZ5aW5nIHRoZSBzZXNzaW9uIGluIGEgc2VydmVyLXNpZGVcbiAgICAgICAgICAgIHJvdXRlIGJlY2F1c2UgaXQgZW5zdXJlcyB0aGUgbW9kaWZpY2F0aW9ucyB3aWxsIGJlIGxvY2FsXG4gICAgICAgICAgICBhbmQgd2lsbCBub3QgYWZmZWN0IG90aGVyIGNvbm5lY3Rpb25zIGhhcHBlbmluZyBzaW11bHRhbmVvdXNseS5cbiAgICAgICAgICAgIERvIG5vdCB1c2UgaXQgZnJvbSBjbG9qdXJlc2NyaXB0LiJ9LCA6c291cmNlICIoZGVmICptYXRjaGVzKiBuaWwpXHJcbiJ9IHs6c3ltIGF0b20sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGF0b20gdGhhdCBjYW4gaG9sZCBsb2NhbCBzdGF0ZSBmb3IgYSBjb21wb25lbnQuXG4gIE9ubHkgd29ya3MgaW4gYSA6dGhlbiBibG9jay4iLCA6YXJnbGlzdHMgKFtpbml0aWFsLXZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gYXRvbVxyXG4gXCJSZXR1cm5zIGFuIGF0b20gdGhhdCBjYW4gaG9sZCBsb2NhbCBzdGF0ZSBmb3IgYSBjb21wb25lbnQuXFxuICBPbmx5IHdvcmtzIGluIGEgOnRoZW4gYmxvY2suXCJcclxuIFtpbml0aWFsLXZhbHVlXVxyXG4gKHdoZW4tbm90XHJcbiAgKmxvY2FsLXBvaW50ZXIqXHJcbiAgKHRocm93IChleC1pbmZvIFwiWW91IGNhbm5vdCBjYWxsIGBhdG9tYCBoZXJlXCIge30pKSlcclxuICh3aGVuLW5vdFxyXG4gIEAqY2FuLXJldHVybi1hdG9tPypcclxuICAodGhyb3dcclxuICAgKGV4LWluZm8gXCJZb3UgY2FuIG9ubHkgY2FsbCBgYXRvbWAgb25jZSBpbiBlYWNoIDp0aGVuIGJsb2NrXCIge30pKSlcclxuICh2cmVzZXQhICpjYW4tcmV0dXJuLWF0b20/KiBmYWxzZSlcclxuIChpZi1sZXRcclxuICBbKmxvY2FsIEAqbG9jYWwtcG9pbnRlcipdXHJcbiAgKmxvY2FsXHJcbiAgKGxldFxyXG4gICBbKmxvY2FsIChyZXNldCEgKmxvY2FsLXBvaW50ZXIqIChjbG9qdXJlLmNvcmUvYXRvbSBpbml0aWFsLXZhbHVlKSldXHJcbiAgICh3aGVuLWxldFxyXG4gICAgW2NtcCAqcmVhY3QtY29tcG9uZW50Kl1cclxuICAgIChhZGQtd2F0Y2hcclxuICAgICAqbG9jYWxcclxuICAgICA6b2RveWxlLnJ1bS9sb2NhbFxyXG4gICAgIChmbiBbXyBfIHAgbl0gKHdoZW4gKG5vdD0gcCBuKSAoLmZvcmNlVXBkYXRlIGNtcCkpKSkpXHJcbiAgICpsb2NhbCkpKVxyXG4ifSB7OnN5bSBwcm9wLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgcHJvcCBzZW50IHRvIHRoZSBjb21wb25lbnQuIE9ubHkgd29ya3MgaW4gYSA6dGhlbiBibG9jay4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm9wXHJcbiBcIlJldHVybnMgdGhlIHByb3Agc2VudCB0byB0aGUgY29tcG9uZW50LiBPbmx5IHdvcmtzIGluIGEgOnRoZW4gYmxvY2suXCJcclxuIFtdXHJcbiAod2hlbi1ub3RcclxuICAqbG9jYWwtcG9pbnRlcipcclxuICAodGhyb3cgKGV4LWluZm8gXCJZb3UgY2Fubm90IGNhbGwgYHByb3BgIGhlcmVcIiB7fSkpKVxyXG4gKnByb3AqKVxyXG4ifSB7OnN5bSByZWFjdGl2ZSwgOm1ldGEgezpkb2MgIkEgcnVtIG1peGluIHRoYXQgbWFrZXMgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IHJlYWN0IHRvIGNoYW5nZXMgZnJvbVxuICB0aGUgc2Vzc2lvbiBhbmQgdGhlIGxvY2FsIGF0b20uIiwgOmFyZ2xpc3RzIChbcnVsZS1rZXkgKm1hdGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhY3RpdmVcclxuIFwiQSBydW0gbWl4aW4gdGhhdCBtYWtlcyB0aGUgYXNzb2NpYXRlZCBjb21wb25lbnQgcmVhY3QgdG8gY2hhbmdlcyBmcm9tXFxuICB0aGUgc2Vzc2lvbiBhbmQgdGhlIGxvY2FsIGF0b20uXCJcclxuIFtydWxlLWtleSAqbWF0Y2hdXHJcbiB7OmluaXRcclxuICAoZm5cclxuICAgW3N0YXRlIHByb3BzXVxyXG4gICAoLT5cclxuICAgIHN0YXRlXHJcbiAgICAoYXNzb2MgOm9kb3lsZS5ydW0vbG9jYWwtcG9pbnRlciAoY2xvanVyZS5jb3JlL2F0b20gbmlsKSlcclxuICAgICM/KDpjbGpzIChhc3NvYyA6b2RveWxlLnJ1bS9nbG9iYWwta2V5IChsZXQgW2dsb2JhbC1rZXkgKHJhbmRvbS11dWlkKSBjbXAgKDpydW0vcmVhY3QtY29tcG9uZW50IHN0YXRlKV0gKGFkZC13YXRjaCAqbWF0Y2ggZ2xvYmFsLWtleSAoZm4gW18gXyBwIG5dICh3aGVuIChub3Q9IHAgbikgKC5mb3JjZVVwZGF0ZSBjbXApKSkpIGdsb2JhbC1rZXkpKSkpKSxcclxuICA6d3JhcC1yZW5kZXJcclxuICAoZm5cclxuICAgW3JlbmRlci1mbl1cclxuICAgKGZuXHJcbiAgICBbc3RhdGVdXHJcbiAgICAoYmluZGluZ1xyXG4gICAgIFsqbG9jYWwtcG9pbnRlcipcclxuICAgICAgKDpvZG95bGUucnVtL2xvY2FsLXBvaW50ZXIgc3RhdGUpXHJcbiAgICAgICpyZWFjdC1jb21wb25lbnQqXHJcbiAgICAgICg6cnVtL3JlYWN0LWNvbXBvbmVudCBzdGF0ZSlcclxuICAgICAgKmNhbi1yZXR1cm4tYXRvbT8qXHJcbiAgICAgICh2b2xhdGlsZSEgdHJ1ZSlcclxuICAgICAgKnByb3AqXHJcbiAgICAgIChmaXJzdCAoOnJ1bS9hcmdzIHN0YXRlKSlcclxuICAgICAgby8qbWF0Y2gqXHJcbiAgICAgICM/KDpjbGpzIChjbG9qdXJlLmNvcmUvZGVyZWYgKm1hdGNoKSA6Y2xqIChvciAoc29tZS0+ICptYXRjaGVzKiBkZXJlZiBydWxlLWtleSkgKGNsb2p1cmUuY29yZS9kZXJlZiAqbWF0Y2gpKSldXHJcbiAgICAgKHJlbmRlci1mbiBzdGF0ZSkpKSksXHJcbiAgOndpbGwtdW5tb3VudFxyXG4gIChmblxyXG4gICBbc3RhdGVdXHJcbiAgICM/KDpjbGpzIChyZW1vdmUtd2F0Y2ggKm1hdGNoICg6b2RveWxlLnJ1bS9nbG9iYWwta2V5IHN0YXRlKSkpXHJcbiAgICh3aGVuLWxldFxyXG4gICAgWypsb2NhbCBAKDpvZG95bGUucnVtL2xvY2FsLXBvaW50ZXIgc3RhdGUpXVxyXG4gICAgKHJlbW92ZS13YXRjaCAqbG9jYWwgOm9kb3lsZS5ydW0vbG9jYWwpKVxyXG4gICAoZGlzc29jIHN0YXRlIDpvZG95bGUucnVtL2xvY2FsLXBvaW50ZXIpKX0pXHJcbiJ9KSwgcGFyZW4tc291cC5pbnN0YXJlcGwgKHs6c3ltICp3ZWItd29ya2VyLXBhdGgqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqd2ViLXdvcmtlci1wYXRoKiBuaWwpXHJcbiJ9IHs6c3ltIGZvcm0tPnNlcmlhbGl6YWJsZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9ybS0+c2VyaWFsaXphYmxlXHJcbiBbZm9ybV1cclxuIChpZlxyXG4gIChpbnN0YW5jZT8ganMvRXJyb3IgZm9ybSlcclxuICAoYXJyYXlcclxuICAgKG9yIChzb21lLT4gZm9ybSAuLWNhdXNlIC4tbWVzc2FnZSkgKC4tbWVzc2FnZSBmb3JtKSlcclxuICAgKC4tZmlsZU5hbWUgZm9ybSlcclxuICAgKC4tbGluZU51bWJlciBmb3JtKSlcclxuICAocHItc3RyIGZvcm0pKSlcclxuIn0gezpzeW0gcmVzdWx0cy0+aHRtbCwgOm1ldGEgezpkb2MgIlJldHVybnMgSFRNTCBmb3IgdGhlIGdpdmVuIGV2YWwgcmVzdWx0cy4iLCA6YXJnbGlzdHMgKFtyZXN1bHRzIGxvY2F0aW9ucyBsaW1pdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc3VsdHMtPmh0bWxcclxuIFwiUmV0dXJucyBIVE1MIGZvciB0aGUgZ2l2ZW4gZXZhbCByZXN1bHRzLlwiXHJcbiBbcmVzdWx0cyBsb2NhdGlvbnMgbGltaXRdXHJcbiAobG9vcFxyXG4gIFtpIDAgZXZhbHMgKHRyYW5zaWVudCBbXSldXHJcbiAgKGxldFxyXG4gICBbcmVzIChnZXQgcmVzdWx0cyBpKSB7OmtleXMgW3RvcCBoZWlnaHRdfSAoZ2V0IGxvY2F0aW9ucyBpKV1cclxuICAgKGlmXHJcbiAgICAoYW5kIHJlcyB0b3AgaGVpZ2h0KVxyXG4gICAgKHJlY3VyXHJcbiAgICAgKGluYyBpKVxyXG4gICAgIChjb25qIVxyXG4gICAgICBldmFsc1xyXG4gICAgICAoZm9ybWF0XHJcbiAgICAgICBcIjxkaXYgY2xhc3M9JyVzJyBzdHlsZT0ndG9wOiAlc3B4OyBoZWlnaHQ6ICVzcHg7IG1pbi1oZWlnaHQ6ICVzcHgnPiVzPC9kaXY+XCJcclxuICAgICAgIChpZiAoYXJyYXk/IHJlcykgXCJyZXN1bHQgZXJyb3JcIiBcInJlc3VsdFwiKVxyXG4gICAgICAgdG9wXHJcbiAgICAgICBoZWlnaHRcclxuICAgICAgIGhlaWdodFxyXG4gICAgICAgKHNvbWUtPlxyXG4gICAgICAgIChpZiAoYXJyYXk/IHJlcykgKGZpcnN0IHJlcykgcmVzKVxyXG4gICAgICAgICh0cnVuY2F0ZSBsaW1pdClcclxuICAgICAgICBocy9lc2NhcGUtaHRtbC1zdHIpKSkpXHJcbiAgICAoam9pbiAocGVyc2lzdGVudCEgZXZhbHMpKSkpKSlcclxuIn0gezpzeW0gdXNlLXdlYi13b3JrZXIhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVzZS13ZWItd29ya2VyIVxyXG4gW11cclxuIChzZXQhICp3ZWItd29ya2VyLXBhdGgqIFwicGFyZW4tc291cC1jb21waWxlci5qc1wiKSlcclxuIn0gezpzeW0gZWxlbT8sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGVsZW0/IChmbiogW3AxX180OTA0MCNdIChpbnN0YW5jZT8ganMvRWxlbWVudCBwMV9fNDkwNDAjKSkpXHJcbiJ9IHs6c3ltIGNvbGxlY3Rpb24tPmNvbnRlbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZWxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbGxlY3Rpb24tPmNvbnRlbnRcclxuIFtlbGVtXVxyXG4gKGxvb3BcclxuICBbZSBlbGVtIGNvbnRlbnQgKC4tdGV4dENvbnRlbnQgZWxlbSldXHJcbiAgKGlmLWxldFxyXG4gICBbcHJldiAoLi1wcmV2aW91c1NpYmxpbmcgZSldXHJcbiAgIChpZlxyXG4gICAgKHRleHQtbm9kZT8gcHJldilcclxuICAgIChyZWN1ciBwcmV2IChzdHIgKC4tdGV4dENvbnRlbnQgcHJldikgY29udGVudCkpXHJcbiAgICBjb250ZW50KVxyXG4gICBjb250ZW50KSkpXHJcbiJ9IHs6c3ltIHRydW5jYXRlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3RleHQgbGltaXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cnVuY2F0ZVxyXG4gW3RleHQgbGltaXRdXHJcbiAoaWYgKD4gKGNvdW50IHRleHQpIGxpbWl0KSAoc3RyIChzdWJzIHRleHQgMCBsaW1pdCkgXCIuLi5cIikgdGV4dCkpXHJcbiJ9IHs6c3ltIGNyZWF0ZS1jb21waWxlci1mbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY3JlYXRlLWNvbXBpbGVyLWZuXHJcbiBbb3B0c11cclxuIChpZi1sZXRcclxuICBbd29ya2VyIChzb21lLT4gKndlYi13b3JrZXItcGF0aCoganMvV29ya2VyLildXHJcbiAgKGZuXHJcbiAgIFtjb2xsIHJlY2VpdmUtZm5dXHJcbiAgIChzZXQhXHJcbiAgICAoLi1vbm1lc3NhZ2Ugd29ya2VyKVxyXG4gICAgKGZuKiBbcDFfXzQ5MDQxI10gKHJlY2VpdmUtZm4gKHZlYyAoLi1kYXRhIHAxX180OTA0MSMpKSkpKVxyXG4gICAoLnBvc3RNZXNzYWdlIHdvcmtlciAoaW50by1hcnJheSBjb2xsKSkpXHJcbiAgKGZuXHJcbiAgIFtjb2xsIHJlY2VpdmUtZm5dXHJcbiAgIChlcy9jb2RlLT5yZXN1bHRzXHJcbiAgICBjb2xsXHJcbiAgICAoZm5cclxuICAgICBbcmVzdWx0c11cclxuICAgICAocmVjZWl2ZS1mbiAoaW50by1hcnJheSAobWFwdiBmb3JtLT5zZXJpYWxpemFibGUgcmVzdWx0cykpKSlcclxuICAgIG9wdHMpKSkpXHJcbiJ9IHs6c3ltIGdldC1jb2xsZWN0aW9ucywgOm1ldGEgezpkb2MgIlJldHVybnMgY29sbGVjdGlvbnMgZnJvbSB0aGUgZ2l2ZW4gRE9NIG5vZGUuIiwgOmFyZ2xpc3RzIChbZWxlbWVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1jb2xsZWN0aW9uc1xyXG4gXCJSZXR1cm5zIGNvbGxlY3Rpb25zIGZyb20gdGhlIGdpdmVuIERPTSBub2RlLlwiXHJcbiBbZWxlbWVudF1cclxuICh2ZWNcclxuICAoZm9yXHJcbiAgIFtlbGVtXHJcbiAgICAoLT4gZWxlbWVudCAuLWNoaWxkcmVuIGFycmF5LXNlcSlcclxuICAgIDpsZXRcclxuICAgIFtjbGFzc2VzICguLWNsYXNzTGlzdCBlbGVtKV1cclxuICAgIDp3aGVuXHJcbiAgICAob3IgKC5jb250YWlucyBjbGFzc2VzIFwiY29sbGVjdGlvblwiKSAoLmNvbnRhaW5zIGNsYXNzZXMgXCJzeW1ib2xcIikpXVxyXG4gICBlbGVtKSkpXHJcbiJ9IHs6c3ltIGVsZW1zLT5sb2NhdGlvbnMsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiBlYWNoIGVsZW0uIiwgOmFyZ2xpc3RzIChbZWxlbXMgdG9wLW9mZnNldF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsZW1zLT5sb2NhdGlvbnNcclxuIFwiUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgZWFjaCBlbGVtLlwiXHJcbiBbZWxlbXMgdG9wLW9mZnNldF1cclxuIChsb29wXHJcbiAgW2kgMCBsb2NhdGlvbnMgKHRyYW5zaWVudCBbXSldXHJcbiAgKGlmLWxldFxyXG4gICBbZWxlbSAoZ2V0IGVsZW1zIGkpXVxyXG4gICAobGV0XHJcbiAgICBbdG9wXHJcbiAgICAgKC0+IGVsZW0gLi1vZmZzZXRUb3AgKC0gdG9wLW9mZnNldCkpXHJcbiAgICAgaGVpZ2h0XHJcbiAgICAgKC0+IGVsZW0gLi1vZmZzZXRIZWlnaHQpXVxyXG4gICAgKHJlY3VyIChpbmMgaSkgKGNvbmohIGxvY2F0aW9ucyB7OnRvcCB0b3AsIDpoZWlnaHQgaGVpZ2h0fSkpKVxyXG4gICAocGVyc2lzdGVudCEgbG9jYXRpb25zKSkpKVxyXG4ifSksIGNsanMucHByaW50ICh7OnN5bSBwcHJpbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbb2JqZWN0XSBbb2JqZWN0IHdyaXRlcl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBwcmludFxyXG4gKFtvYmplY3RdXHJcbiAgKGxldFxyXG4gICBbc2IgKFN0cmluZ0J1ZmZlci4pXVxyXG4gICAoYmluZGluZ1xyXG4gICAgWypvdXQqIChTdHJpbmdCdWZmZXJXcml0ZXIuIHNiKV1cclxuICAgIChwcHJpbnQgb2JqZWN0ICpvdXQqKVxyXG4gICAgKHN0cmluZy1wcmludCAoc3RyIHNiKSkpKSlcclxuIChbb2JqZWN0IHdyaXRlcl1cclxuICAod2l0aC1wcmV0dHktd3JpdGVyXHJcbiAgIHdyaXRlclxyXG4gICAoYmluZGluZyBbKnByaW50LXByZXR0eSogdHJ1ZV0gKHdyaXRlLW91dCBvYmplY3QpKVxyXG4gICAoaWYgKG5vdCAoPSAwIChnZXQtY29sdW1uICpvdXQqKSkpICgtd3JpdGUgKm91dCogXFxuZXdsaW5lKSkpKSlcclxuIn0gezpzeW0gZ2V0LXByZXR0eS13cml0ZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBJV3JpdGVyIHBhc3NlZCBpbiB3cmFwcGVkIGluIGEgcHJldHR5IHdyaXRlciBwcm94eSwgdW5sZXNzIGl0J3NcbmFscmVhZHkgYSBwcmV0dHkgd3JpdGVyLiBHZW5lcmFsbHksIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiwgc2luY2UgcHByaW50LFxud3JpdGUsIGFuZCBjbC1mb3JtYXQgYWxsIGNhbGwgaXQgaWYgdGhleSBuZWVkIHRvLiBIb3dldmVyIGlmIHlvdSB3YW50IHRoZSBzdGF0ZSB0byBiZVxucHJlc2VydmVkIGFjcm9zcyBjYWxscywgeW91IHdpbGwgd2FudCB0byB3cmFwIHRoZW0gd2l0aCB0aGlzLlxuXG5Gb3IgZXhhbXBsZSwgd2hlbiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBjb2x1bW4tYXdhcmUgb3V0cHV0IHdpdGggbXVsdGlwbGUgY2FsbHMgdG8gY2wtZm9ybWF0LFxuZG8gaXQgbGlrZSBpbiB0aGlzIGV4YW1wbGU6XG5cbiAgICAoZGVmbiBwcmludC10YWJsZSBbYXNlcSBjb2x1bW4td2lkdGhdXG4gICAgICAoYmluZGluZyBbKm91dCogKGdldC1wcmV0dHktd3JpdGVyICpvdXQqKV1cbiAgICAgICAgKGRvc2VxIFtyb3cgYXNlcV1cbiAgICAgICAgICAoZG9zZXEgW2NvbCByb3ddXG4gICAgICAgICAgICAoY2wtZm9ybWF0IHRydWUgXCJ+NER+Nyx2VFwiIGNvbCBjb2x1bW4td2lkdGgpKVxuICAgICAgICAgIChwcm4pKSkpXG5cbk5vdyB3aGVuIHlvdSBydW46XG5cbiAgICB1c2VyPiAocHJpbnQtdGFibGUgKG1hcCAjKHZlY3RvciAlICgqICUgJSkgKCogJSAlICUpKSAocmFuZ2UgMSAxMSkpIDgpXG5cbkl0IHByaW50cyBhIHRhYmxlIG9mIHNxdWFyZXMgYW5kIGN1YmVzIGZvciB0aGUgbnVtYmVycyBmcm9tIDEgdG8gMTA6XG5cbiAgICAgICAxICAgICAgMSAgICAgICAxXG4gICAgICAgMiAgICAgIDQgICAgICAgOFxuICAgICAgIDMgICAgICA5ICAgICAgMjdcbiAgICAgICA0ICAgICAxNiAgICAgIDY0XG4gICAgICAgNSAgICAgMjUgICAgIDEyNVxuICAgICAgIDYgICAgIDM2ICAgICAyMTZcbiAgICAgICA3ICAgICA0OSAgICAgMzQzXG4gICAgICAgOCAgICAgNjQgICAgIDUxMlxuICAgICAgIDkgICAgIDgxICAgICA3MjlcbiAgICAgIDEwICAgIDEwMCAgICAxMDAwIiwgOmFyZ2xpc3RzIChbd3JpdGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXByZXR0eS13cml0ZXJcclxuIFwiUmV0dXJucyB0aGUgSVdyaXRlciBwYXNzZWQgaW4gd3JhcHBlZCBpbiBhIHByZXR0eSB3cml0ZXIgcHJveHksIHVubGVzcyBpdCdzXFxuYWxyZWFkeSBhIHByZXR0eSB3cml0ZXIuIEdlbmVyYWxseSwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLCBzaW5jZSBwcHJpbnQsXFxud3JpdGUsIGFuZCBjbC1mb3JtYXQgYWxsIGNhbGwgaXQgaWYgdGhleSBuZWVkIHRvLiBIb3dldmVyIGlmIHlvdSB3YW50IHRoZSBzdGF0ZSB0byBiZVxcbnByZXNlcnZlZCBhY3Jvc3MgY2FsbHMsIHlvdSB3aWxsIHdhbnQgdG8gd3JhcCB0aGVtIHdpdGggdGhpcy5cXG5cXG5Gb3IgZXhhbXBsZSwgd2hlbiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBjb2x1bW4tYXdhcmUgb3V0cHV0IHdpdGggbXVsdGlwbGUgY2FsbHMgdG8gY2wtZm9ybWF0LFxcbmRvIGl0IGxpa2UgaW4gdGhpcyBleGFtcGxlOlxcblxcbiAgICAoZGVmbiBwcmludC10YWJsZSBbYXNlcSBjb2x1bW4td2lkdGhdXFxuICAgICAgKGJpbmRpbmcgWypvdXQqIChnZXQtcHJldHR5LXdyaXRlciAqb3V0KildXFxuICAgICAgICAoZG9zZXEgW3JvdyBhc2VxXVxcbiAgICAgICAgICAoZG9zZXEgW2NvbCByb3ddXFxuICAgICAgICAgICAgKGNsLWZvcm1hdCB0cnVlIFxcXCJ+NER+Nyx2VFxcXCIgY29sIGNvbHVtbi13aWR0aCkpXFxuICAgICAgICAgIChwcm4pKSkpXFxuXFxuTm93IHdoZW4geW91IHJ1bjpcXG5cXG4gICAgdXNlcj4gKHByaW50LXRhYmxlIChtYXAgIyh2ZWN0b3IgJSAoKiAlICUpICgqICUgJSAlKSkgKHJhbmdlIDEgMTEpKSA4KVxcblxcbkl0IHByaW50cyBhIHRhYmxlIG9mIHNxdWFyZXMgYW5kIGN1YmVzIGZvciB0aGUgbnVtYmVycyBmcm9tIDEgdG8gMTA6XFxuXFxuICAgICAgIDEgICAgICAxICAgICAgIDFcXG4gICAgICAgMiAgICAgIDQgICAgICAgOFxcbiAgICAgICAzICAgICAgOSAgICAgIDI3XFxuICAgICAgIDQgICAgIDE2ICAgICAgNjRcXG4gICAgICAgNSAgICAgMjUgICAgIDEyNVxcbiAgICAgICA2ICAgICAzNiAgICAgMjE2XFxuICAgICAgIDcgICAgIDQ5ICAgICAzNDNcXG4gICAgICAgOCAgICAgNjQgICAgIDUxMlxcbiAgICAgICA5ICAgICA4MSAgICAgNzI5XFxuICAgICAgMTAgICAgMTAwICAgIDEwMDBcIlxyXG4gW3dyaXRlcl1cclxuIChpZlxyXG4gIChwcmV0dHktd3JpdGVyPyB3cml0ZXIpXHJcbiAgd3JpdGVyXHJcbiAgKHByZXR0eS13cml0ZXIgd3JpdGVyICpwcmludC1yaWdodC1tYXJnaW4qICpwcmludC1taXNlci13aWR0aCopKSlcclxuIn0gezpzeW0gKnByaW50LXN1cHByZXNzLW5hbWVzcGFjZXMqLCA6bWV0YSB7OmRvYyAiRG9uJ3QgcHJpbnQgbmFtZXNwYWNlcyB3aXRoIHN5bWJvbHMuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuXG5wcmV0dHkgcHJpbnRpbmcgdGhlIHJlc3VsdHMgb2YgbWFjcm8gZXhwYW5zaW9ucyJ9LCA6c291cmNlICIoZGVmICpwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKiBuaWwpXHJcbiJ9IHs6c3ltIGNoYXItY29kZSwgOm1ldGEgezpkb2MgIkNvbnZlcnQgY2hhciB0byBpbnQiLCA6YXJnbGlzdHMgKFtjXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hhci1jb2RlXHJcbiBcIkNvbnZlcnQgY2hhciB0byBpbnRcIlxyXG4gW2NdXHJcbiAoY29uZFxyXG4gIChudW1iZXI/IGMpXHJcbiAgY1xyXG4gIChhbmQgKHN0cmluZz8gYykgKD09ICguLWxlbmd0aCBjKSAxKSlcclxuICAoLmNoYXJDb2RlQXQgYyAwKVxyXG4gIDplbHNlXHJcbiAgKHRocm93XHJcbiAgIChqcy9FcnJvci4gXCJBcmd1bWVudCB0byBjaGFyIG11c3QgYmUgYSBjaGFyYWN0ZXIgb3IgbnVtYmVyXCIpKSkpXHJcbiJ9IHs6c3ltICpwcmludC1wcmV0dHkqLCA6bWV0YSB7OmRvYyAiQmluZCB0byB0cnVlIGlmIHlvdSB3YW50IHdyaXRlIHRvIHVzZSBwcmV0dHkgcHJpbnRpbmcifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtcHJldHR5KiB0cnVlKVxyXG4ifSB7OnN5bSAqcHJpbnQtcHByaW50LWRpc3BhdGNoKiwgOm1ldGEgezpkb2MgIlRoZSBwcmV0dHkgcHJpbnQgZGlzcGF0Y2ggZnVuY3Rpb24uIFVzZSB3aXRoLXBwcmludC1kaXNwYXRjaCBvclxuc2V0LXBwcmludC1kaXNwYXRjaCB0byBtb2RpZnkuIn0sIDpzb3VyY2UgIihkZWZvbmNlICpwcmludC1wcHJpbnQtZGlzcGF0Y2gqIG5pbClcclxuIn0gezpzeW0gcHByaW50LW5ld2xpbmUsIDptZXRhIHs6ZG9jICJQcmludCBhIGNvbmRpdGlvbmFsIG5ld2xpbmUgdG8gYSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBraW5kIHNwZWNpZmllcyBpZiB0aGVcbiAgbmV3bGluZSBpcyA6bGluZWFyLCA6bWlzZXIsIDpmaWxsLCBvciA6bWFuZGF0b3J5LlxuXG4gIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cblxuICBPdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci4iLCA6YXJnbGlzdHMgKFtraW5kXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50LW5ld2xpbmVcclxuIFwiUHJpbnQgYSBjb25kaXRpb25hbCBuZXdsaW5lIHRvIGEgcHJldHR5IHByaW50aW5nIHN0cmVhbS4ga2luZCBzcGVjaWZpZXMgaWYgdGhlXFxuICBuZXdsaW5lIGlzIDpsaW5lYXIsIDptaXNlciwgOmZpbGwsIG9yIDptYW5kYXRvcnkuXFxuXFxuICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXFxuXFxuICBPdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci5cIlxyXG4gW2tpbmRdXHJcbiAoY2hlY2stZW51bWVyYXRlZC1hcmcga2luZCAjezptYW5kYXRvcnkgOm1pc2VyIDpmaWxsIDpsaW5lYXJ9KVxyXG4gKG5sICpvdXQqIGtpbmQpKVxyXG4ifSB7OnN5bSBmbG9hdD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbiBpcyBhbiBmbG9hdC4iLCA6YXJnbGlzdHMgKFtuXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmxvYXQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBuIGlzIGFuIGZsb2F0LlwiXHJcbiBbbl1cclxuIChhbmRcclxuICAobnVtYmVyPyBuKVxyXG4gIChub3QgKGpzL2lzTmFOIG4pKVxyXG4gIChub3QgKGlkZW50aWNhbD8gbiBqcy9JbmZpbml0eSkpXHJcbiAgKG5vdCAoPT0gKGpzL3BhcnNlRmxvYXQgbikgKGpzL3BhcnNlSW50IG4gMTApKSkpKVxyXG4ifSB7OnN5bSBwcHJpbnQtdGFiLCA6bWV0YSB7OmRvYyAiVGFiIGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByZXR0eSBwcmludGluZyBzdHJlYW0uIGtpbmQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHRhYlxuaXMgOmxpbmUsIDpzZWN0aW9uLCA6bGluZS1yZWxhdGl2ZSwgb3IgOnNlY3Rpb24tcmVsYXRpdmUuXG5cbkNvbG51bSBhbmQgY29saW5jIHNwZWNpZnkgdGhlIHRhcmdldCBjb2x1bW4gYW5kIHRoZSBpbmNyZW1lbnQgdG8gbW92ZSB0aGUgdGFyZ2V0XG5mb3J3YXJkIGlmIHRoZSBvdXRwdXQgaXMgYWxyZWFkeSBwYXN0IHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5cblRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHdyaXRpbmcgY3VzdG9tIGRpc3BhdGNoIGZ1bmN0aW9ucy5cblxuT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuXG5cblRISVMgRlVOQ1RJT04gSVMgTk9UIFlFVCBJTVBMRU1FTlRFRC4iLCA6YXJnbGlzdHMgKFtraW5kIGNvbG51bSBjb2xpbmNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcHJpbnQtdGFiXHJcbiBcIlRhYiBhdCB0aGlzIHBvaW50IGluIHRoZSBwcmV0dHkgcHJpbnRpbmcgc3RyZWFtLiBraW5kIHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0YWJcXG5pcyA6bGluZSwgOnNlY3Rpb24sIDpsaW5lLXJlbGF0aXZlLCBvciA6c2VjdGlvbi1yZWxhdGl2ZS5cXG5cXG5Db2xudW0gYW5kIGNvbGluYyBzcGVjaWZ5IHRoZSB0YXJnZXQgY29sdW1uIGFuZCB0aGUgaW5jcmVtZW50IHRvIG1vdmUgdGhlIHRhcmdldFxcbmZvcndhcmQgaWYgdGhlIG91dHB1dCBpcyBhbHJlYWR5IHBhc3QgdGhlIG9yaWdpbmFsIHRhcmdldC5cXG5cXG5UaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2hlbiB3cml0aW5nIGN1c3RvbSBkaXNwYXRjaCBmdW5jdGlvbnMuXFxuXFxuT3V0cHV0IGlzIHNlbnQgdG8gKm91dCogd2hpY2ggbXVzdCBiZSBhIHByZXR0eSBwcmludGluZyB3cml0ZXIuXFxuXFxuVEhJUyBGVU5DVElPTiBJUyBOT1QgWUVUIElNUExFTUVOVEVELlwiXHJcbiB7OmFkZGVkIFwiMS4yXCJ9XHJcbiBba2luZCBjb2xudW0gY29saW5jXVxyXG4gKGNoZWNrLWVudW1lcmF0ZWQtYXJnXHJcbiAga2luZFxyXG4gICN7OnNlY3Rpb24gOmxpbmUgOmxpbmUtcmVsYXRpdmUgOnNlY3Rpb24tcmVsYXRpdmV9KVxyXG4gKHRocm93IChqcy9FcnJvci4gXCJwcHJpbnQtdGFiIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcIikpKVxyXG4ifSB7OnN5bSBwcHJpbnQtc2V0LCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBwcHJpbnQtc2V0IChmb3JtYXR0ZXItb3V0IFwifjwje347fkB7fnd+XiB+Ol9+fX47fX46PlwiKSlcclxuIn0gezpzeW0gcHJpbnQtdGFibGUsIDptZXRhIHs6ZG9jICJQcmludHMgYSBjb2xsZWN0aW9uIG9mIG1hcHMgaW4gYSB0ZXh0dWFsIHRhYmxlLiBQcmludHMgdGFibGUgaGVhZGluZ3NcbiAgIGtzLCBhbmQgdGhlbiBhIGxpbmUgb2Ygb3V0cHV0IGZvciBlYWNoIHJvdywgY29ycmVzcG9uZGluZyB0byB0aGUga2V5c1xuICAgaW4ga3MuIElmIGtzIGFyZSBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGtleXMgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gcm93cy4iLCA6YXJnbGlzdHMgW1trcyByb3dzXSBbcm93c11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHByaW50LXRhYmxlXHJcbiBcIlByaW50cyBhIGNvbGxlY3Rpb24gb2YgbWFwcyBpbiBhIHRleHR1YWwgdGFibGUuIFByaW50cyB0YWJsZSBoZWFkaW5nc1xcbiAgIGtzLCBhbmQgdGhlbiBhIGxpbmUgb2Ygb3V0cHV0IGZvciBlYWNoIHJvdywgY29ycmVzcG9uZGluZyB0byB0aGUga2V5c1xcbiAgIGluIGtzLiBJZiBrcyBhcmUgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBrZXlzIG9mIHRoZSBmaXJzdCBpdGVtIGluIHJvd3MuXCJcclxuIHs6YWRkZWQgXCIxLjNcIn1cclxuIChba3Mgcm93c11cclxuICAod2hlblxyXG4gICAoc2VxIHJvd3MpXHJcbiAgIChsZXRcclxuICAgIFt3aWR0aHNcclxuICAgICAobWFwXHJcbiAgICAgIChmblxyXG4gICAgICAgW2tdXHJcbiAgICAgICAoYXBwbHlcclxuICAgICAgICBtYXhcclxuICAgICAgICAoY291bnQgKHN0ciBrKSlcclxuICAgICAgICAobWFwXHJcbiAgICAgICAgIChmbiogW3AxX180ODkyOCNdIChjb3VudCAoc3RyIChnZXQgcDFfXzQ4OTI4IyBrKSkpKVxyXG4gICAgICAgICByb3dzKSkpXHJcbiAgICAgIGtzKVxyXG4gICAgIHNwYWNlcnNcclxuICAgICAobWFwXHJcbiAgICAgIChmbiogW3AxX180ODkyOSNdIChhcHBseSBzdHIgKHJlcGVhdCBwMV9fNDg5MjkjIFwiLVwiKSkpXHJcbiAgICAgIHdpZHRocylcclxuICAgICBmbXQtcm93XHJcbiAgICAgKGZuXHJcbiAgICAgIFtsZWFkZXIgZGl2aWRlciB0cmFpbGVyIHJvd11cclxuICAgICAgKHN0clxyXG4gICAgICAgbGVhZGVyXHJcbiAgICAgICAoYXBwbHlcclxuICAgICAgICBzdHJcclxuICAgICAgICAoaW50ZXJwb3NlXHJcbiAgICAgICAgIGRpdmlkZXJcclxuICAgICAgICAgKGZvclxyXG4gICAgICAgICAgW1tjb2wgd2lkdGhdXHJcbiAgICAgICAgICAgKG1hcFxyXG4gICAgICAgICAgICB2ZWN0b3JcclxuICAgICAgICAgICAgKG1hcCAoZm4qIFtwMV9fNDg5MzAjXSAoZ2V0IHJvdyBwMV9fNDg5MzAjKSkga3MpXHJcbiAgICAgICAgICAgIHdpZHRocyldXHJcbiAgICAgICAgICAoYWRkLXBhZGRpbmcgd2lkdGggKHN0ciBjb2wpKSkpKVxyXG4gICAgICAgdHJhaWxlcikpXVxyXG4gICAgKGNsanMuY29yZS9wcmludGxuKVxyXG4gICAgKGNsanMuY29yZS9wcmludGxuIChmbXQtcm93IFwifCBcIiBcIiB8IFwiIFwiIHxcIiAoemlwbWFwIGtzIGtzKSkpXHJcbiAgICAoY2xqcy5jb3JlL3ByaW50bG4gKGZtdC1yb3cgXCJ8LVwiIFwiLSstXCIgXCItfFwiICh6aXBtYXAga3Mgc3BhY2VycykpKVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW3JvdyByb3dzXVxyXG4gICAgIChjbGpzLmNvcmUvcHJpbnRsbiAoZm10LXJvdyBcInwgXCIgXCIgfCBcIiBcIiB8XCIgcm93KSkpKSkpXHJcbiAoW3Jvd3NdIChwcmludC10YWJsZSAoa2V5cyAoZmlyc3Qgcm93cykpIHJvd3MpKSlcclxuIn0gezpzeW0gc2V0LXBwcmludC1kaXNwYXRjaCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmdW5jdGlvbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNldC1wcHJpbnQtZGlzcGF0Y2hcclxuIFtmdW5jdGlvbl1cclxuIChzZXQhICpwcmludC1wcHJpbnQtZGlzcGF0Y2gqIGZ1bmN0aW9uKVxyXG4gbmlsKVxyXG4ifSB7OnN5bSBmcmVzaC1saW5lLCA6bWV0YSB7OmRvYyAiTWFrZSBhIG5ld2xpbmUgaWYgKm91dCogaXMgbm90IGFscmVhZHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gSWYgKm91dCogaXNcbm5vdCBhIHByZXR0eSB3cml0ZXIgKHdoaWNoIGtlZXBzIHRyYWNrIG9mIGNvbHVtbnMpLCB0aGlzIGZ1bmN0aW9uIGFsd2F5cyBvdXRwdXRzIGEgbmV3bGluZS4iLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmcmVzaC1saW5lXHJcbiBcIk1ha2UgYSBuZXdsaW5lIGlmICpvdXQqIGlzIG5vdCBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuIElmICpvdXQqIGlzXFxubm90IGEgcHJldHR5IHdyaXRlciAod2hpY2gga2VlcHMgdHJhY2sgb2YgY29sdW1ucyksIHRoaXMgZnVuY3Rpb24gYWx3YXlzIG91dHB1dHMgYSBuZXdsaW5lLlwiXHJcbiBbXVxyXG4gKGlmXHJcbiAgKHNhdGlzZmllcz8gSURlcmVmICpvdXQqKVxyXG4gIChpZiAobm90ICg9IDAgKGdldC1jb2x1bW4gKDpiYXNlIEBAKm91dCopKSkpIChwcm4pKVxyXG4gIChwcm4pKSlcclxuIn0gezpzeW0gcHByaW50LWluZGVudCwgOm1ldGEgezpkb2MgIkNyZWF0ZSBhbiBpbmRlbnQgYXQgdGhpcyBwb2ludCBpbiB0aGUgcHJldHR5IHByaW50aW5nIHN0cmVhbS4gVGhpcyBkZWZpbmVzIGhvd1xuZm9sbG93aW5nIGxpbmVzIGFyZSBpbmRlbnRlZC4gcmVsYXRpdmUtdG8gY2FuIGJlIGVpdGhlciA6YmxvY2sgb3IgOmN1cnJlbnQgZGVwZW5kaW5nXG53aGV0aGVyIHRoZSBpbmRlbnQgc2hvdWxkIGJlIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgbG9naWNhbCBibG9jayBvclxudGhlIGN1cnJlbnQgY29sdW1uIHBvc2l0aW9uLiBuIGlzIGFuIG9mZnNldC5cblxuVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxuXG5PdXRwdXQgaXMgc2VudCB0byAqb3V0KiB3aGljaCBtdXN0IGJlIGEgcHJldHR5IHByaW50aW5nIHdyaXRlci4iLCA6YXJnbGlzdHMgKFtyZWxhdGl2ZS10byBuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHByaW50LWluZGVudFxyXG4gXCJDcmVhdGUgYW4gaW5kZW50IGF0IHRoaXMgcG9pbnQgaW4gdGhlIHByZXR0eSBwcmludGluZyBzdHJlYW0uIFRoaXMgZGVmaW5lcyBob3dcXG5mb2xsb3dpbmcgbGluZXMgYXJlIGluZGVudGVkLiByZWxhdGl2ZS10byBjYW4gYmUgZWl0aGVyIDpibG9jayBvciA6Y3VycmVudCBkZXBlbmRpbmdcXG53aGV0aGVyIHRoZSBpbmRlbnQgc2hvdWxkIGJlIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgbG9naWNhbCBibG9jayBvclxcbnRoZSBjdXJyZW50IGNvbHVtbiBwb3NpdGlvbi4gbiBpcyBhbiBvZmZzZXQuXFxuXFxuVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gd3JpdGluZyBjdXN0b20gZGlzcGF0Y2ggZnVuY3Rpb25zLlxcblxcbk91dHB1dCBpcyBzZW50IHRvICpvdXQqIHdoaWNoIG11c3QgYmUgYSBwcmV0dHkgcHJpbnRpbmcgd3JpdGVyLlwiXHJcbiBbcmVsYXRpdmUtdG8gbl1cclxuIChjaGVjay1lbnVtZXJhdGVkLWFyZyByZWxhdGl2ZS10byAjezpibG9jayA6Y3VycmVudH0pXHJcbiAoaW5kZW50ICpvdXQqIHJlbGF0aXZlLXRvIG4pKVxyXG4ifSB7OnN5bSAqcHJpbnQtcmFkaXgqLCA6bWV0YSB7OmRvYyAiUHJpbnQgYSByYWRpeCBzcGVjaWZpZXIgaW4gZnJvbnQgb2YgaW50ZWdlcnMgYW5kIHJhdGlvbmFscy4gSWYgKnByaW50LWJhc2UqIGlzIDIsIDgsXG5vciAxNiwgdGhlbiB0aGUgcmFkaXggc3BlY2lmaWVyIHVzZWQgaXMgI2IsICNvLCBvciAjeCwgcmVzcGVjdGl2ZWx5LiBPdGhlcndpc2UgdGhlXG5yYWRpeCBzcGVjaWZpZXIgaXMgaW4gdGhlIGZvcm0gI1hYciB3aGVyZSBYWCBpcyB0aGUgZGVjaW1hbCB2YWx1ZSBvZiAqcHJpbnQtYmFzZSogIn0sIDpzb3VyY2UgIihkZWYgKnByaW50LXJhZGl4KiBuaWwpXHJcbiJ9IHs6c3ltIElQcmV0dHlGbHVzaCwgOm1ldGEgezpkb2MgbmlsfSwgOm1ldGhvZHMgKC1wcGZsdXNoKX0gezpzeW0gY2wtZm9ybWF0LCA6bWV0YSB7OmRvYyAiQW4gaW1wbGVtZW50YXRpb24gb2YgYSBDb21tb24gTGlzcCBjb21wYXRpYmxlIGZvcm1hdCBmdW5jdGlvbi4gY2wtZm9ybWF0IGZvcm1hdHMgaXRzXG5hcmd1bWVudHMgdG8gYW4gb3V0cHV0IHN0cmVhbSBvciBzdHJpbmcgYmFzZWQgb24gdGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBnaXZlbi4gSXRcbnN1cHBvcnRzIHNvcGhpc3RpY2F0ZWQgZm9ybWF0dGluZyBvZiBzdHJ1Y3R1cmVkIGRhdGEuXG5cbldyaXRlciBzYXRpc2ZpZXMgSVdyaXRlciwgdHJ1ZSB0byBvdXRwdXQgdmlhICpwcmludC1mbiogb3IgbmlsIHRvIG91dHB1dFxudG8gYSBzdHJpbmcsIGZvcm1hdC1pbiBpcyB0aGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGFuZCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50c1xuYXJlIHRoZSBkYXRhIHRvIGJlIGZvcm1hdHRlZC5cblxuVGhlIGZvcm1hdCBjb250cm9sIHN0cmluZyBpcyBhIHN0cmluZyB0byBiZSBvdXRwdXQgd2l0aCBlbWJlZGRlZCAnZm9ybWF0IGRpcmVjdGl2ZXMnXG5kZXNjcmliaW5nIGhvdyB0byBmb3JtYXQgdGhlIHZhcmlvdXMgYXJndW1lbnRzIHBhc3NlZCBpbi5cblxuSWYgd3JpdGVyIGlzIG5pbCwgY2wtZm9ybWF0IHJldHVybnMgdGhlIGZvcm1hdHRlZCByZXN1bHQgc3RyaW5nLiBPdGhlcndpc2UsIGNsLWZvcm1hdFxucmV0dXJucyBuaWwuXG5cbkZvciBleGFtcGxlOlxuIChsZXQgW3Jlc3VsdHMgWzQ2IDM4IDIyXV1cbiAgICAgICAgKGNsLWZvcm1hdCB0cnVlIFwiVGhlcmUgflthcmV+O2lzfjo7YXJlfl1+OiogfmQgcmVzdWx0fjpwOiB+e35kfl4sIH59fiVcIlxuICAgICAgICAgICAgICAgICAgIChjb3VudCByZXN1bHRzKSByZXN1bHRzKSlcblxuUHJpbnRzIHZpYSAqcHJpbnQtZm4qOlxuIFRoZXJlIGFyZSAzIHJlc3VsdHM6IDQ2LCAzOCwgMjJcblxuRGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBvbiBmb3JtYXQgY29udHJvbCBzdHJpbmdzIGlzIGF2YWlsYWJsZSBpbiB0aGUgXCJDb21tb24gTGlzcCB0aGVcbkxhbmd1YWdlLCAybmQgZWRpdGlvblwiLCBDaGFwdGVyIDIyIChhdmFpbGFibGUgb25saW5lIGF0OlxuaHR0cDovL3d3dy5jcy5jbXUuZWR1L2Fmcy9jcy5jbXUuZWR1L3Byb2plY3QvYWktcmVwb3NpdG9yeS9haS9odG1sL2NsdGwvY2xtL25vZGUyMDAuaHRtbCNTRUNUSU9OMDAyNjMzMDAwMDAwMDAwMDAwMDAwKVxuYW5kIGluIHRoZSBDb21tb24gTGlzcCBIeXBlclNwZWMgYXRcbmh0dHA6Ly93d3cubGlzcHdvcmtzLmNvbS9kb2N1bWVudGF0aW9uL0h5cGVyU3BlYy9Cb2R5LzIyX2MuaHRtIiwgOmFyZ2xpc3RzIChbd3JpdGVyIGZvcm1hdC1pbiAmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjbC1mb3JtYXRcclxuIFwiQW4gaW1wbGVtZW50YXRpb24gb2YgYSBDb21tb24gTGlzcCBjb21wYXRpYmxlIGZvcm1hdCBmdW5jdGlvbi4gY2wtZm9ybWF0IGZvcm1hdHMgaXRzXFxuYXJndW1lbnRzIHRvIGFuIG91dHB1dCBzdHJlYW0gb3Igc3RyaW5nIGJhc2VkIG9uIHRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgZ2l2ZW4uIEl0XFxuc3VwcG9ydHMgc29waGlzdGljYXRlZCBmb3JtYXR0aW5nIG9mIHN0cnVjdHVyZWQgZGF0YS5cXG5cXG5Xcml0ZXIgc2F0aXNmaWVzIElXcml0ZXIsIHRydWUgdG8gb3V0cHV0IHZpYSAqcHJpbnQtZm4qIG9yIG5pbCB0byBvdXRwdXRcXG50byBhIHN0cmluZywgZm9ybWF0LWluIGlzIHRoZSBmb3JtYXQgY29udHJvbCBzdHJpbmcgYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzXFxuYXJlIHRoZSBkYXRhIHRvIGJlIGZvcm1hdHRlZC5cXG5cXG5UaGUgZm9ybWF0IGNvbnRyb2wgc3RyaW5nIGlzIGEgc3RyaW5nIHRvIGJlIG91dHB1dCB3aXRoIGVtYmVkZGVkICdmb3JtYXQgZGlyZWN0aXZlcydcXG5kZXNjcmliaW5nIGhvdyB0byBmb3JtYXQgdGhlIHZhcmlvdXMgYXJndW1lbnRzIHBhc3NlZCBpbi5cXG5cXG5JZiB3cml0ZXIgaXMgbmlsLCBjbC1mb3JtYXQgcmV0dXJucyB0aGUgZm9ybWF0dGVkIHJlc3VsdCBzdHJpbmcuIE90aGVyd2lzZSwgY2wtZm9ybWF0XFxucmV0dXJucyBuaWwuXFxuXFxuRm9yIGV4YW1wbGU6XFxuIChsZXQgW3Jlc3VsdHMgWzQ2IDM4IDIyXV1cXG4gICAgICAgIChjbC1mb3JtYXQgdHJ1ZSBcXFwiVGhlcmUgflthcmV+O2lzfjo7YXJlfl1+OiogfmQgcmVzdWx0fjpwOiB+e35kfl4sIH59fiVcXFwiXFxuICAgICAgICAgICAgICAgICAgIChjb3VudCByZXN1bHRzKSByZXN1bHRzKSlcXG5cXG5QcmludHMgdmlhICpwcmludC1mbio6XFxuIFRoZXJlIGFyZSAzIHJlc3VsdHM6IDQ2LCAzOCwgMjJcXG5cXG5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9uIGZvcm1hdCBjb250cm9sIHN0cmluZ3MgaXMgYXZhaWxhYmxlIGluIHRoZSBcXFwiQ29tbW9uIExpc3AgdGhlXFxuTGFuZ3VhZ2UsIDJuZCBlZGl0aW9uXFxcIiwgQ2hhcHRlciAyMiAoYXZhaWxhYmxlIG9ubGluZSBhdDpcXG5odHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2NzLmNtdS5lZHUvcHJvamVjdC9haS1yZXBvc2l0b3J5L2FpL2h0bWwvY2x0bC9jbG0vbm9kZTIwMC5odG1sI1NFQ1RJT04wMDI2MzMwMDAwMDAwMDAwMDAwMDApXFxuYW5kIGluIHRoZSBDb21tb24gTGlzcCBIeXBlclNwZWMgYXRcXG5odHRwOi8vd3d3Lmxpc3B3b3Jrcy5jb20vZG9jdW1lbnRhdGlvbi9IeXBlclNwZWMvQm9keS8yMl9jLmh0bVwiXHJcbiB7OnNlZS1hbHNvXHJcbiAgW1tcImh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MuY211LmVkdS9wcm9qZWN0L2FpLXJlcG9zaXRvcnkvYWkvaHRtbC9jbHRsL2NsbS9ub2RlMjAwLmh0bWwjU0VDVElPTjAwMjYzMzAwMDAwMDAwMDAwMDAwMFwiXHJcbiAgICBcIkNvbW1vbiBMaXNwIHRoZSBMYW5ndWFnZVwiXVxyXG4gICBbXCJodHRwOi8vd3d3Lmxpc3B3b3Jrcy5jb20vZG9jdW1lbnRhdGlvbi9IeXBlclNwZWMvQm9keS8yMl9jLmh0bVwiXHJcbiAgICBcIkNvbW1vbiBMaXNwIEh5cGVyU3BlY1wiXV19XHJcbiBbd3JpdGVyIGZvcm1hdC1pbiAmIGFyZ3NdXHJcbiAobGV0XHJcbiAgW2NvbXBpbGVkLWZvcm1hdFxyXG4gICAoaWYgKHN0cmluZz8gZm9ybWF0LWluKSAoY29tcGlsZS1mb3JtYXQgZm9ybWF0LWluKSBmb3JtYXQtaW4pXHJcbiAgIG5hdmlnYXRvclxyXG4gICAoaW5pdC1uYXZpZ2F0b3IgYXJncyldXHJcbiAgKGV4ZWN1dGUtZm9ybWF0IHdyaXRlciBjb21waWxlZC1mb3JtYXQgbmF2aWdhdG9yKSkpXHJcbiJ9IHs6c3ltICpwcmludC1taXNlci13aWR0aCosIDptZXRhIHs6ZG9jICJUaGUgY29sdW1uIGF0IHdoaWNoIHRvIGVudGVyIG1pc2VyIHN0eWxlLiBEZXBlbmRpbmcgb24gdGhlIGRpc3BhdGNoIHRhYmxlLFxubWlzZXIgc3R5bGUgYWRkIG5ld2xpbmVzIGluIG1vcmUgcGxhY2VzIHRvIHRyeSB0byBrZWVwIGxpbmVzIHNob3J0IGFsbG93aW5nIGZvciBmdXJ0aGVyXG5sZXZlbHMgb2YgbmVzdGluZy4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtbWlzZXItd2lkdGgqIDQwKVxyXG4ifSB7OnN5bSB3cml0ZSwgOm1ldGEgezpkb2MgIldyaXRlIGFuIG9iamVjdCBzdWJqZWN0IHRvIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIHRoZSBwcmludGVyIGNvbnRyb2wgdmFyaWFibGVzLlxuVXNlIHRoZSBrdy1hcmdzIGFyZ3VtZW50IHRvIG92ZXJyaWRlIGluZGl2aWR1YWwgdmFyaWFibGVzIGZvciB0aGlzIGNhbGwgKGFuZCBhbnlcbnJlY3Vyc2l2ZSBjYWxscykuIFJldHVybnMgdGhlIHN0cmluZyByZXN1bHQgaWYgOnN0cmVhbSBpcyBuaWwgb3IgbmlsIG90aGVyd2lzZS5cblxuVGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBjYW4gYmUgcGFzc2VkIHdpdGggdmFsdWVzOlxuICBLZXl3b3JkICAgICAgICAgICAgICBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZVxuICA6c3RyZWFtICAgICAgICAgICAgICBXcml0ZXIgZm9yIG91dHB1dCBvciBuaWwgICAgICAgICAgICAgdHJ1ZSAoaW5kaWNhdGVzICpvdXQqKVxuICA6YmFzZSAgICAgICAgICAgICAgICBCYXNlIHRvIHVzZSBmb3Igd3JpdGluZyByYXRpb25hbHMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtYmFzZSpcbiAgOmNpcmNsZSogICAgICAgICAgICAgSWYgdHJ1ZSwgbWFyayBjaXJjdWxhciBzdHJ1Y3R1cmVzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWNpcmNsZSpcbiAgOmxlbmd0aCAgICAgICAgICAgICAgTWF4aW11bSBlbGVtZW50cyB0byBzaG93IGluIHN1Ymxpc3RzIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxlbmd0aCpcbiAgOmxldmVsICAgICAgICAgICAgICAgTWF4aW11bSBkZXB0aCAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxldmVsKlxuICA6bGluZXMqICAgICAgICAgICAgICBNYXhpbXVtIGxpbmVzIG9mIG91dHB1dCAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtbGluZXMqXG4gIDptaXNlci13aWR0aCAgICAgICAgIFdpZHRoIHRvIGVudGVyIG1pc2VyIG1vZGUgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1taXNlci13aWR0aCpcbiAgOmRpc3BhdGNoICAgICAgICAgICAgVGhlIHByZXR0eSBwcmludCBkaXNwYXRjaCBmdW5jdGlvbiAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXBwcmludC1kaXNwYXRjaCpcbiAgOnByZXR0eSAgICAgICAgICAgICAgSWYgdHJ1ZSwgZG8gcHJldHR5IHByaW50aW5nICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXByZXR0eSpcbiAgOnJhZGl4ICAgICAgICAgICAgICAgSWYgdHJ1ZSwgcHJlcGVuZCBhIHJhZGl4IHNwZWNpZmllciAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJhZGl4KlxuICA6cmVhZGFibHkqICAgICAgICAgICBJZiB0cnVlLCBwcmludCByZWFkYWJseSAgICAgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcmVhZGFibHkqXG4gIDpyaWdodC1tYXJnaW4gICAgICAgIFRoZSBjb2x1bW4gZm9yIHRoZSByaWdodCBtYXJnaW4gICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1yaWdodC1tYXJnaW4qXG4gIDpzdXBwcmVzcy1uYW1lc3BhY2VzIElmIHRydWUsIG5vIG5hbWVzcGFjZXMgaW4gc3ltYm9scyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKlxuXG4gICogPSBub3QgeWV0IHN1cHBvcnRlZFxuIiwgOmFyZ2xpc3RzIChbb2JqZWN0ICYga3ctYXJnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdyaXRlXHJcbiBcIldyaXRlIGFuIG9iamVjdCBzdWJqZWN0IHRvIHRoZSBjdXJyZW50IGJpbmRpbmdzIG9mIHRoZSBwcmludGVyIGNvbnRyb2wgdmFyaWFibGVzLlxcblVzZSB0aGUga3ctYXJncyBhcmd1bWVudCB0byBvdmVycmlkZSBpbmRpdmlkdWFsIHZhcmlhYmxlcyBmb3IgdGhpcyBjYWxsIChhbmQgYW55XFxucmVjdXJzaXZlIGNhbGxzKS4gUmV0dXJucyB0aGUgc3RyaW5nIHJlc3VsdCBpZiA6c3RyZWFtIGlzIG5pbCBvciBuaWwgb3RoZXJ3aXNlLlxcblxcblRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB3aXRoIHZhbHVlczpcXG4gIEtleXdvcmQgICAgICAgICAgICAgIE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlXFxuICA6c3RyZWFtICAgICAgICAgICAgICBXcml0ZXIgZm9yIG91dHB1dCBvciBuaWwgICAgICAgICAgICAgdHJ1ZSAoaW5kaWNhdGVzICpvdXQqKVxcbiAgOmJhc2UgICAgICAgICAgICAgICAgQmFzZSB0byB1c2UgZm9yIHdyaXRpbmcgcmF0aW9uYWxzICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWJhc2UqXFxuICA6Y2lyY2xlKiAgICAgICAgICAgICBJZiB0cnVlLCBtYXJrIGNpcmN1bGFyIHN0cnVjdHVyZXMgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtY2lyY2xlKlxcbiAgOmxlbmd0aCAgICAgICAgICAgICAgTWF4aW11bSBlbGVtZW50cyB0byBzaG93IGluIHN1Ymxpc3RzIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LWxlbmd0aCpcXG4gIDpsZXZlbCAgICAgICAgICAgICAgIE1heGltdW0gZGVwdGggICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1sZXZlbCpcXG4gIDpsaW5lcyogICAgICAgICAgICAgIE1heGltdW0gbGluZXMgb2Ygb3V0cHV0ICAgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1saW5lcypcXG4gIDptaXNlci13aWR0aCAgICAgICAgIFdpZHRoIHRvIGVudGVyIG1pc2VyIG1vZGUgICAgICAgICAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1taXNlci13aWR0aCpcXG4gIDpkaXNwYXRjaCAgICAgICAgICAgIFRoZSBwcmV0dHkgcHJpbnQgZGlzcGF0Y2ggZnVuY3Rpb24gICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1wcHJpbnQtZGlzcGF0Y2gqXFxuICA6cHJldHR5ICAgICAgICAgICAgICBJZiB0cnVlLCBkbyBwcmV0dHkgcHJpbnRpbmcgICAgICAgICAgQ3VycmVudCB2YWx1ZSBvZiAqcHJpbnQtcHJldHR5KlxcbiAgOnJhZGl4ICAgICAgICAgICAgICAgSWYgdHJ1ZSwgcHJlcGVuZCBhIHJhZGl4IHNwZWNpZmllciAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJhZGl4KlxcbiAgOnJlYWRhYmx5KiAgICAgICAgICAgSWYgdHJ1ZSwgcHJpbnQgcmVhZGFibHkgICAgICAgICAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJlYWRhYmx5KlxcbiAgOnJpZ2h0LW1hcmdpbiAgICAgICAgVGhlIGNvbHVtbiBmb3IgdGhlIHJpZ2h0IG1hcmdpbiAgICAgIEN1cnJlbnQgdmFsdWUgb2YgKnByaW50LXJpZ2h0LW1hcmdpbipcXG4gIDpzdXBwcmVzcy1uYW1lc3BhY2VzIElmIHRydWUsIG5vIG5hbWVzcGFjZXMgaW4gc3ltYm9scyAgICBDdXJyZW50IHZhbHVlIG9mICpwcmludC1zdXBwcmVzcy1uYW1lc3BhY2VzKlxcblxcbiAgKiA9IG5vdCB5ZXQgc3VwcG9ydGVkXFxuXCJcclxuIFtvYmplY3QgJiBrdy1hcmdzXVxyXG4gKGxldFxyXG4gIFtvcHRpb25zIChtZXJnZSB7OnN0cmVhbSB0cnVlfSAoYXBwbHkgaGFzaC1tYXAga3ctYXJncykpXVxyXG4gIChiaW5kaW5nXHJcbiAgIFtjbGpzLnBwcmludC8qcHJpbnQtYmFzZSpcclxuICAgICg6YmFzZSBvcHRpb25zIGNsanMucHByaW50LypwcmludC1iYXNlKilcclxuICAgIGNsanMucHByaW50LypwcmludC1jaXJjbGUqXHJcbiAgICAoOmNpcmNsZSBvcHRpb25zIGNsanMucHByaW50LypwcmludC1jaXJjbGUqKVxyXG4gICAgY2xqcy5jb3JlLypwcmludC1sZW5ndGgqXHJcbiAgICAoOmxlbmd0aCBvcHRpb25zIGNsanMuY29yZS8qcHJpbnQtbGVuZ3RoKilcclxuICAgIGNsanMuY29yZS8qcHJpbnQtbGV2ZWwqXHJcbiAgICAoOmxldmVsIG9wdGlvbnMgY2xqcy5jb3JlLypwcmludC1sZXZlbCopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtbGluZXMqXHJcbiAgICAoOmxpbmVzIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LWxpbmVzKilcclxuICAgIGNsanMucHByaW50LypwcmludC1taXNlci13aWR0aCpcclxuICAgICg6bWlzZXItd2lkdGggb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtbWlzZXItd2lkdGgqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LXBwcmludC1kaXNwYXRjaCpcclxuICAgICg6ZGlzcGF0Y2ggb3B0aW9ucyBjbGpzLnBwcmludC8qcHJpbnQtcHByaW50LWRpc3BhdGNoKilcclxuICAgIGNsanMucHByaW50LypwcmludC1wcmV0dHkqXHJcbiAgICAoOnByZXR0eSBvcHRpb25zIGNsanMucHByaW50LypwcmludC1wcmV0dHkqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LXJhZGl4KlxyXG4gICAgKDpyYWRpeCBvcHRpb25zIGNsanMucHByaW50LypwcmludC1yYWRpeCopXHJcbiAgICBjbGpzLmNvcmUvKnByaW50LXJlYWRhYmx5KlxyXG4gICAgKDpyZWFkYWJseSBvcHRpb25zIGNsanMuY29yZS8qcHJpbnQtcmVhZGFibHkqKVxyXG4gICAgY2xqcy5wcHJpbnQvKnByaW50LXJpZ2h0LW1hcmdpbipcclxuICAgICg6cmlnaHQtbWFyZ2luIG9wdGlvbnMgY2xqcy5wcHJpbnQvKnByaW50LXJpZ2h0LW1hcmdpbiopXHJcbiAgICBjbGpzLnBwcmludC8qcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcypcclxuICAgICg6c3VwcHJlc3MtbmFtZXNwYWNlc1xyXG4gICAgIG9wdGlvbnNcclxuICAgICBjbGpzLnBwcmludC8qcHJpbnQtc3VwcHJlc3MtbmFtZXNwYWNlcyopXVxyXG4gICAoYmluZGluZ1xyXG4gICAgW11cclxuICAgIChsZXRcclxuICAgICBbc2JcclxuICAgICAgKFN0cmluZ0J1ZmZlci4pXHJcbiAgICAgIG9wdHZhbFxyXG4gICAgICAoaWYgKGNvbnRhaW5zPyBvcHRpb25zIDpzdHJlYW0pICg6c3RyZWFtIG9wdGlvbnMpIHRydWUpXHJcbiAgICAgIGJhc2Utd3JpdGVyXHJcbiAgICAgIChpZlxyXG4gICAgICAgKG9yICh0cnVlPyBvcHR2YWwpIChuaWw/IG9wdHZhbCkpXHJcbiAgICAgICAoU3RyaW5nQnVmZmVyV3JpdGVyLiBzYilcclxuICAgICAgIG9wdHZhbCldXHJcbiAgICAgKGlmXHJcbiAgICAgICpwcmludC1wcmV0dHkqXHJcbiAgICAgICh3aXRoLXByZXR0eS13cml0ZXIgYmFzZS13cml0ZXIgKHdyaXRlLW91dCBvYmplY3QpKVxyXG4gICAgICAoYmluZGluZyBbKm91dCogYmFzZS13cml0ZXJdIChwciBvYmplY3QpKSlcclxuICAgICAoaWYgKHRydWU/IG9wdHZhbCkgKHN0cmluZy1wcmludCAoc3RyIHNiKSkpXHJcbiAgICAgKGlmIChuaWw/IG9wdHZhbCkgKHN0ciBzYikpKSkpKSlcclxuIn0gezpzeW0gLXBwZmx1c2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHBdKX0sIDpwcm90b2NvbCBJUHJldHR5Rmx1c2h9IHs6c3ltICpwcmludC1yaWdodC1tYXJnaW4qLCA6bWV0YSB7OmRvYyAiUHJldHR5IHByaW50aW5nIHdpbGwgdHJ5IHRvIGF2b2lkIGFueXRoaW5nIGdvaW5nIGJleW9uZCB0aGlzIGNvbHVtbi5cblNldCBpdCB0byBuaWwgdG8gaGF2ZSBwcHJpbnQgbGV0IHRoZSBsaW5lIGJlIGFyYml0cmFyaWx5IGxvbmcuIFRoaXMgd2lsbCBpZ25vcmUgYWxsXG5ub24tbWFuZGF0b3J5IG5ld2xpbmVzLiJ9LCA6c291cmNlICIoZGVmICpwcmludC1yaWdodC1tYXJnaW4qIDcyKVxyXG4ifSB7OnN5bSB3cml0ZS1vdXQsIDptZXRhIHs6ZG9jICJXcml0ZSBhbiBvYmplY3QgdG8gKm91dCogc3ViamVjdCB0byB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiB0aGUgcHJpbnRlciBjb250cm9sXG52YXJpYWJsZXMuIFVzZSB0aGUga3ctYXJncyBhcmd1bWVudCB0byBvdmVycmlkZSBpbmRpdmlkdWFsIHZhcmlhYmxlcyBmb3IgdGhpcyBjYWxsIChhbmRcbmFueSByZWN1cnNpdmUgY2FsbHMpLlxuXG4qb3V0KiBtdXN0IGJlIGEgUHJldHR5V3JpdGVyIGlmIHByZXR0eSBwcmludGluZyBpcyBlbmFibGVkLiBUaGlzIGlzIHRoZSByZXNwb25zaWJpbGl0eVxub2YgdGhlIGNhbGxlci5cblxuVGhpcyBtZXRob2QgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2UgYnkgcHJldHR5IHByaW50IGRpc3BhdGNoIGZ1bmN0aW9ucyB0aGF0XG5hbHJlYWR5IGtub3cgdGhhdCB0aGUgcHJldHR5IHByaW50ZXIgd2lsbCBoYXZlIHNldCB1cCB0aGVpciBlbnZpcm9ubWVudCBhcHByb3ByaWF0ZWx5LlxuTm9ybWFsIGxpYnJhcnkgY2xpZW50cyBzaG91bGQgdXNlIHRoZSBzdGFuZGFyZCBcIndyaXRlXCIgaW50ZXJmYWNlLiAiLCA6YXJnbGlzdHMgKFtvYmplY3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3cml0ZS1vdXRcclxuIFwiV3JpdGUgYW4gb2JqZWN0IHRvICpvdXQqIHN1YmplY3QgdG8gdGhlIGN1cnJlbnQgYmluZGluZ3Mgb2YgdGhlIHByaW50ZXIgY29udHJvbFxcbnZhcmlhYmxlcy4gVXNlIHRoZSBrdy1hcmdzIGFyZ3VtZW50IHRvIG92ZXJyaWRlIGluZGl2aWR1YWwgdmFyaWFibGVzIGZvciB0aGlzIGNhbGwgKGFuZFxcbmFueSByZWN1cnNpdmUgY2FsbHMpLlxcblxcbipvdXQqIG11c3QgYmUgYSBQcmV0dHlXcml0ZXIgaWYgcHJldHR5IHByaW50aW5nIGlzIGVuYWJsZWQuIFRoaXMgaXMgdGhlIHJlc3BvbnNpYmlsaXR5XFxub2YgdGhlIGNhbGxlci5cXG5cXG5UaGlzIG1ldGhvZCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSBieSBwcmV0dHkgcHJpbnQgZGlzcGF0Y2ggZnVuY3Rpb25zIHRoYXRcXG5hbHJlYWR5IGtub3cgdGhhdCB0aGUgcHJldHR5IHByaW50ZXIgd2lsbCBoYXZlIHNldCB1cCB0aGVpciBlbnZpcm9ubWVudCBhcHByb3ByaWF0ZWx5Llxcbk5vcm1hbCBsaWJyYXJ5IGNsaWVudHMgc2hvdWxkIHVzZSB0aGUgc3RhbmRhcmQgXFxcIndyaXRlXFxcIiBpbnRlcmZhY2UuIFwiXHJcbiBbb2JqZWN0XVxyXG4gKGxldFxyXG4gIFtsZW5ndGgtcmVhY2hlZFxyXG4gICAoYW5kXHJcbiAgICAqY3VycmVudC1sZW5ndGgqXHJcbiAgICAqcHJpbnQtbGVuZ3RoKlxyXG4gICAgKD49ICpjdXJyZW50LWxlbmd0aCogKnByaW50LWxlbmd0aCopKV1cclxuICAoaWYtbm90XHJcbiAgICpwcmludC1wcmV0dHkqXHJcbiAgIChwciBvYmplY3QpXHJcbiAgIChpZlxyXG4gICAgbGVuZ3RoLXJlYWNoZWRcclxuICAgICgtd3JpdGUgKm91dCogXCIuLi5cIilcclxuICAgIChkb1xyXG4gICAgIChpZlxyXG4gICAgICAqY3VycmVudC1sZW5ndGgqXHJcbiAgICAgIChzZXQhICpjdXJyZW50LWxlbmd0aCogKGluYyAqY3VycmVudC1sZW5ndGgqKSkpXHJcbiAgICAgKCpwcmludC1wcHJpbnQtZGlzcGF0Y2gqIG9iamVjdCkpKSlcclxuICBsZW5ndGgtcmVhY2hlZCkpXHJcbiJ9IHs6c3ltICpwcmludC1iYXNlKiwgOm1ldGEgezpkb2MgIlRoZSBiYXNlIHRvIHVzZSBmb3IgcHJpbnRpbmcgaW50ZWdlcnMgYW5kIHJhdGlvbmFscy4ifSwgOnNvdXJjZSAiKGRlZiAqcHJpbnQtYmFzZSogMTApXHJcbiJ9KSwgcnVtLnV0aWwgKHs6c3ltIGNvbGxlY3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba2V5IG1peGluc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbGxlY3RcclxuIFtrZXkgbWl4aW5zXVxyXG4gKGludG8gW10gKGtlZXAgKGZuIFttXSAoZ2V0IG0ga2V5KSkpIG1peGlucykpXHJcbiJ9IHs6c3ltIGNvbGxlY3QqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2tleXMgbWl4aW5zXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29sbGVjdCpcclxuIFtrZXlzIG1peGluc11cclxuIChpbnRvIFtdIChtYXBjYXQgKGZuIFttXSAoa2VlcCAoZm4gW2tdIChnZXQgbSBrKSkga2V5cykpKSBtaXhpbnMpKVxyXG4ifSB7OnN5bSBjYWxsLWFsbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZSBmbnMgJiBhcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FsbC1hbGxcclxuIFtzdGF0ZSBmbnMgJiBhcmdzXVxyXG4gKHJlZHVjZSAoZm4gW3N0YXRlIGZuXSAoYXBwbHkgZm4gc3RhdGUgYXJncykpIHN0YXRlIGZucykpXHJcbiJ9KSwgb2FrY2xqcy50b29scy5yZWFkZXIuaW1wbC5pbnNwZWN0ICh7OnN5bSBpbnNwZWN0LCA6bWV0YSB7OmRvYyAiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSBzdXBwbGllZC5cbiAgIE1heSBiZSB0aGUgYSBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXRzZWxmIChlLmcuIFwidHJ1ZVwiKVxuICAgb3IgaXQgbWF5IGJlIGEgZGVzY3JpcHRpb24gKGUuZy4gXCJhbiBpbnN0YW5jZSBvZiBGb29cIikuXG4gICBJZiB0cnVuY2F0ZSBpcyB0cnVlIHRoZW4gcmV0dXJuIGEgdmVyeSB0ZXJzZSB2ZXJzaW9uIG9mXG4gICB0aGUgaW5zcGVjdGlvbi4iLCA6YXJnbGlzdHMgW1t4XSBbdHJ1bmNhdGUgeF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc3BlY3RcclxuIFwiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSB2YWx1ZSBzdXBwbGllZC5cXG4gICBNYXkgYmUgdGhlIGEgc3RyaW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlIGl0c2VsZiAoZS5nLiBcXFwidHJ1ZVxcXCIpXFxuICAgb3IgaXQgbWF5IGJlIGEgZGVzY3JpcHRpb24gKGUuZy4gXFxcImFuIGluc3RhbmNlIG9mIEZvb1xcXCIpLlxcbiAgIElmIHRydW5jYXRlIGlzIHRydWUgdGhlbiByZXR1cm4gYSB2ZXJ5IHRlcnNlIHZlcnNpb24gb2ZcXG4gICB0aGUgaW5zcGVjdGlvbi5cIlxyXG4gKFt4XSAoaW5zcGVjdCogZmFsc2UgeCkpXHJcbiAoW3RydW5jYXRlIHhdIChpbnNwZWN0KiB0cnVuY2F0ZSB4KSkpXHJcbiJ9KSwgc2FibG9uby5pbnRlcnByZXRlciAoezpzeW0gaW50ZXJwcmV0LCA6bWV0YSB7OmRvYyAiSW50ZXJwcmV0IGEgQ2xvanVyZSBkYXRhIHN0cnVjdHVyZSBhcyBhIFJlYWN0IGZuIGNhbGwuIiwgOmFyZ2xpc3RzIChbdGhpc10pfSwgOnByb3RvY29sIElJbnRlcnByZXRlcn0gezpzeW0gSUludGVycHJldGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoaW50ZXJwcmV0KX0gezpzeW0gY29udHJvbGxlZC1pbnB1dD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgYHR5cGVgIGFuZCBgcHJvcHNgIGFyZSB1c2VkIGEgY29udHJvbGxlZCBpbnB1dCxcbiAgb3RoZXJ3aXNlIGZhbHNlLiIsIDphcmdsaXN0cyAoW3R5cGUgcHJvcHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb250cm9sbGVkLWlucHV0P1xyXG4gXCJSZXR1cm5zIHRydWUgaWYgYHR5cGVgIGFuZCBgcHJvcHNgIGFyZSB1c2VkIGEgY29udHJvbGxlZCBpbnB1dCxcXG4gIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gW3R5cGUgcHJvcHNdXHJcbiAjPyg6Y2xqcyAoYW5kIChvYmplY3Q/IHByb3BzKSAoY2FzZSB0eXBlIFwiaW5wdXRcIiAob3IgKGV4aXN0cz8gKC4tY2hlY2tlZCBwcm9wcykpIChleGlzdHM/ICguLXZhbHVlIHByb3BzKSkpIFwic2VsZWN0XCIgKGV4aXN0cz8gKC4tdmFsdWUgcHJvcHMpKSBcInRleHRhcmVhXCIgKGV4aXN0cz8gKC4tdmFsdWUgcHJvcHMpKSBmYWxzZSkpKSlcclxuIn0gezpzeW0gY3JlYXRlLWVsZW1lbnQsIDptZXRhIHs6ZG9jICJDcmVhdGUgYSBSZWFjdCBlbGVtZW50LiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2hlbiBydW5uaW5nXG4gIHVuZGVyIENsb2p1cmVTY3JpcHQsIGFuZCBhIG9tLmRvbS5FbGVtZW50IHJlY29yZCBpbiBDbG9qdXJlLiIsIDphcmdsaXN0cyAoW3R5cGUgcHJvcHMgJiBjaGlsZHJlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNyZWF0ZS1lbGVtZW50XHJcbiBcIkNyZWF0ZSBhIFJlYWN0IGVsZW1lbnQuIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aGVuIHJ1bm5pbmdcXG4gIHVuZGVyIENsb2p1cmVTY3JpcHQsIGFuZCBhIG9tLmRvbS5FbGVtZW50IHJlY29yZCBpbiBDbG9qdXJlLlwiXHJcbiBbdHlwZSBwcm9wcyAmIGNoaWxkcmVuXVxyXG4gIz8oOmNsaiAoZG9tL2VsZW1lbnQgezphdHRycyBwcm9wcywgOmNoaWxkcmVuIGNoaWxkcmVuLCA6cmVhY3Qta2V5IG5pbCwgOnRhZyB0eXBlfSkgOmNsanMgKGFwcGx5IGpzL1JlYWN0LmNyZWF0ZUVsZW1lbnQgKGVsZW1lbnQtY2xhc3MgdHlwZSBwcm9wcykgcHJvcHMgY2hpbGRyZW4pKSlcclxuIn0gezpzeW0gYXR0cmlidXRlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthdHRyc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGF0dHJpYnV0ZXNcclxuIFthdHRyc11cclxuICM/KDpjbGogKC0+ICh1dGlsL2h0bWwtdG8tZG9tLWF0dHJzIGF0dHJzKSAodXBkYXRlIDpjbGFzc05hbWUgKGZuKiBbcDFfXzQ5MDUzI10gKHNvbWUtPj4gcDFfXzQ5MDUzIyAoc3RyL2pvaW4gXCIgXCIpKSkpKSA6Y2xqcyAod2hlbi1sZXQgW2pzLWF0dHJzIChjbGotPmpzICh1dGlsL2h0bWwtdG8tZG9tLWF0dHJzIGF0dHJzKSldIChsZXQgW2NsYXNzICguLWNsYXNzTmFtZSBqcy1hdHRycykgY2xhc3MgKGlmIChhcnJheT8gY2xhc3MpIChqb2luIFwiIFwiIGNsYXNzKSBjbGFzcyldIChpZiAoYmxhbms/IGNsYXNzKSAoanMtZGVsZXRlIGpzLWF0dHJzIFwiY2xhc3NOYW1lXCIpIChzZXQhICguLWNsYXNzTmFtZSBqcy1hdHRycykgY2xhc3MpKSBqcy1hdHRycykpKSlcclxuIn0gezpzeW0gZWxlbWVudCwgOm1ldGEgezpkb2MgIlJlbmRlciBhbiBlbGVtZW50IHZlY3RvciBhcyBhIEhUTUwgZWxlbWVudC4iLCA6YXJnbGlzdHMgKFtlbGVtZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxlbWVudFxyXG4gXCJSZW5kZXIgYW4gZWxlbWVudCB2ZWN0b3IgYXMgYSBIVE1MIGVsZW1lbnQuXCJcclxuIFtlbGVtZW50XVxyXG4gKGxldFxyXG4gIFtbdHlwZSBhdHRycyBjb250ZW50XSAobm9ybWFsaXplL2VsZW1lbnQgZWxlbWVudCldXHJcbiAgKGFwcGx5XHJcbiAgIGNyZWF0ZS1lbGVtZW50XHJcbiAgIHR5cGVcclxuICAgKGF0dHJpYnV0ZXMgYXR0cnMpXHJcbiAgIChpbnRlcnByZXQtc2VxIGNvbnRlbnQpKSkpXHJcbiJ9KSwgZWRuYS5wYXJzZSAoezpzeW0gYWNjaWRlbnRhbHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGFjY2lkZW50YWxzICN7XFwjIFxcPSBcXF99KVxyXG4ifSB7OnN5bSBhY2NpZGVudGFsLT5rZXl3b3JkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBhY2NpZGVudGFsLT5rZXl3b3JkIHtcXCMgOnNoYXJwLCBcXD0gOmZsYXQsIFxcXyA6bmF0dXJhbH0pXHJcbiJ9IHs6c3ltIG5vdGU/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIG5vdGU/IFt4XSAobm90PSA6Y2xvanVyZS5zcGVjLmFscGhhL2ludmFsaWQgKHBhcnNlLW5vdGUgeCkpKVxyXG4ifSB7OnN5bSBkaWdpdHMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGRpZ2l0cyAje1xcMCBcXDEgXFwyIFxcMyBcXDQgXFw1IFxcNiBcXDcgXFw4IFxcOX0pXHJcbiJ9IHs6c3ltIGluc3RydW1lbnRzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBpbnN0cnVtZW50cyAoZ2V0LWluc3RydW1lbnRzKSlcclxuIn0gezpzeW0gcGFyc2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbY29udGVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlXHJcbiBbY29udGVudF1cclxuIChsZXRcclxuICBbcmVzIChzL2NvbmZvcm0gOmVkbmEucGFyc2Uvc3Vic2NvcmUgY29udGVudCldXHJcbiAgKGlmXHJcbiAgICg9IHJlcyA6Y2xvanVyZS5zcGVjLmFscGhhL2ludmFsaWQpXHJcbiAgICh0aHJvd1xyXG4gICAgKCM/KDpjbGogRXhjZXB0aW9uLiA6Y2xqcyBqcy9FcnJvci4pXHJcbiAgICAgKGV4cG91bmQvZXhwb3VuZC1zdHIgOmVkbmEucGFyc2Uvc3Vic2NvcmUgY29udGVudCkpKVxyXG4gICByZXMpKSlcclxuIn0gezpzeW0gbm90ZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIG5vdGVzICN7XFxhIFxcYiBcXGMgXFxkIFxcZSBcXGYgXFxnfSlcclxuIn0gezpzeW0gb2N0YXZlLW9wZXJhdG9ycywgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgb2N0YXZlLW9wZXJhdG9ycyAje1xcKyBcXC19KVxyXG4ifSB7OnN5bSBwYXJzZS1ub3RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW25vdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1ub3RlXHJcbiBbbm90ZV1cclxuIChpZi1ub3RcclxuICAoa2V5d29yZD8gbm90ZSlcclxuICA6Y2xvanVyZS5zcGVjLmFscGhhL2ludmFsaWRcclxuICAocy9jb25mb3JtIDplZG5hLnBhcnNlL25vdGUtcGFydHMgKHNlcSAobmFtZSBub3RlKSkpKSlcclxuIn0pLCBjbGpzLnRvb2xzLnJlYWRlci5pbXBsLnV0aWxzICh7OnN5bSByZWFkZXItY29uZGl0aW9uYWwsIDptZXRhIHs6ZG9jICJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsLlxuICBJZiB0cnVlLCBzcGxpY2luZz8gaW5kaWNhdGVzIHJlYWQtY29uZC1zcGxpY2luZy4iLCA6YXJnbGlzdHMgKFtmb3JtIHNwbGljaW5nP10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWRlci1jb25kaXRpb25hbFxyXG4gXCJDb25zdHJ1Y3QgYSBkYXRhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVhZGVyIGNvbmRpdGlvbmFsLlxcbiAgSWYgdHJ1ZSwgc3BsaWNpbmc/IGluZGljYXRlcyByZWFkLWNvbmQtc3BsaWNpbmcuXCJcclxuIFtmb3JtIHNwbGljaW5nP11cclxuIChSZWFkZXJDb25kaXRpb25hbC4gc3BsaWNpbmc/IGZvcm0pKVxyXG4ifSB7OnN5bSB3aGl0ZXNwYWNlPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2UiLCA6YXJnbGlzdHMgKFtjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdoaXRlc3BhY2U/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2VcIlxyXG4gW2NoXVxyXG4gKHdoZW4tbm90IChuaWw/IGNoKSAoaWYgKGlkZW50aWNhbD8gY2ggXFwsKSB0cnVlICgudGVzdCB3cy1yeCBjaCkpKSlcclxuIn0gezpzeW0gY2hhci1jb2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2NoIGJhc2VdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGFyLWNvZGVcclxuIFtjaCBiYXNlXVxyXG4gKGxldCBbY29kZSAoanMvcGFyc2VJbnQgY2ggYmFzZSldIChpZiAoanMvaXNOYU4gY29kZSkgLTEgY29kZSkpKVxyXG4ifSB7OnN5bSBsYXN0LWlkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBsYXN0LWlkIChhdG9tIDApKVxyXG4ifSB7OnN5bSBjaGFyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIGNoYXIgW3hdICh3aGVuLW5vdCAobmlsPyB4KSAoY2xqcy5jb3JlL2NoYXIgeCkpKVxyXG4ifSB7OnN5bSBudW1lcmljPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIG51bWVyaWMiLCA6YXJnbGlzdHMgKFtjaF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWVyaWM/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIG51bWVyaWNcIlxyXG4gW2NoXVxyXG4gKHdoZW4tbm90IChuaWw/IGNoKSAoZ3N0cmluZy9pc051bWVyaWMgY2gpKSlcclxuIn0gezpzeW0gc2Vjb25kJywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtbYSBiXV0pfSwgOnNvdXJjZSAiKGRlZm4gc2Vjb25kJyBbW2EgYl1dICh3aGVuLW5vdCBhIGIpKVxyXG4ifSB7OnN5bSBkZXN1Z2FyLW1ldGEsIDptZXRhIHs6ZG9jICJSZXNvbHZlcyBzeW50YWN0aWNhbCBzdWdhciBpbiBtZXRhZGF0YSIsIDphcmdsaXN0cyAoW2ZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXN1Z2FyLW1ldGFcclxuIFwiUmVzb2x2ZXMgc3ludGFjdGljYWwgc3VnYXIgaW4gbWV0YWRhdGFcIlxyXG4gW2ZdXHJcbiAoY29uZFxyXG4gIChrZXl3b3JkPyBmKVxyXG4gIHtmIHRydWV9XHJcbiAgKHN5bWJvbD8gZilcclxuICB7OnRhZyBmfVxyXG4gIChzdHJpbmc/IGYpXHJcbiAgezp0YWcgZn1cclxuICA6ZWxzZVxyXG4gIGYpKVxyXG4ifSB7OnN5bSBuZXh0LWlkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm4gbmV4dC1pZCBbXSAoc3dhcCEgbGFzdC1pZCBpbmMpKVxyXG4ifSB7OnN5bSBleC1pbmZvPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm4gZXgtaW5mbz8gW2V4XSAoaW5zdGFuY2U/IGNsanMuY29yZS5FeGNlcHRpb25JbmZvIGV4KSlcclxuIn0gezpzeW0gcmVhZGVyLWNvbmRpdGlvbmFsPywgOm1ldGEgezpkb2MgIlJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyB0aGUgZGF0YSByZXByZXNlbnRhdGlvbiBvZiBhIHJlYWRlciBjb25kaXRpb25hbCIsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZGVyLWNvbmRpdGlvbmFsP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlIGRhdGEgcmVwcmVzZW50YXRpb24gb2YgYSByZWFkZXIgY29uZGl0aW9uYWxcIlxyXG4gW3ZhbHVlXVxyXG4gKGluc3RhbmNlPyBSZWFkZXJDb25kaXRpb25hbCB2YWx1ZSkpXHJcbiJ9IHs6c3ltIG5ld2xpbmU/LCA6bWV0YSB7OmRvYyAiQ2hlY2tzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmUiLCA6YXJnbGlzdHMgKFtjXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmV3bGluZT9cclxuIFwiQ2hlY2tzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmVcIlxyXG4gW2NdXHJcbiAob3IgKGlkZW50aWNhbD8gXFxuZXdsaW5lIGMpIChpZGVudGljYWw/IFwiXFxuXCIgYykgKG5pbD8gYykpKVxyXG4ifSB7OnN5bSBuYW1lc3BhY2Uta2V5cywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucyBrZXlzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbmFtZXNwYWNlLWtleXNcclxuIFtucyBrZXlzXVxyXG4gKGZvclxyXG4gIFtrZXkga2V5c11cclxuICAoaWZcclxuICAgKG9yIChzeW1ib2w/IGtleSkgKGtleXdvcmQ/IGtleSkpXHJcbiAgIChsZXRcclxuICAgIFtba2V5LW5zIGtleS1uYW1lXVxyXG4gICAgICgoanV4dCBuYW1lc3BhY2UgbmFtZSkga2V5KVxyXG4gICAgIC0+a2V5XHJcbiAgICAgKGlmIChzeW1ib2w/IGtleSkgc3ltYm9sIGtleXdvcmQpXVxyXG4gICAgKGNvbmRcclxuICAgICAobmlsPyBrZXktbnMpXHJcbiAgICAgKC0+a2V5IG5zIGtleS1uYW1lKVxyXG4gICAgICg9IFwiX1wiIGtleS1ucylcclxuICAgICAoLT5rZXkga2V5LW5hbWUpXHJcbiAgICAgOmVsc2VcclxuICAgICBrZXkpKVxyXG4gICBrZXkpKSlcclxuIn0gezpzeW0gd3MtcngsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHdzLXJ4ICNcIltcXHNdXCIpXHJcbiJ9KSwgY2xqcy50YWdnZWQtbGl0ZXJhbHMgKHs6c3ltIHJlYWQtcXVldWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtcXVldWVcclxuIFtmb3JtXVxyXG4gKHdoZW4tbm90XHJcbiAgKHZlY3Rvcj8gZm9ybSlcclxuICAodGhyb3dcclxuICAgIz8oOmNsaiAoUnVudGltZUV4Y2VwdGlvbi4gXCJRdWV1ZSBsaXRlcmFsIGV4cGVjdHMgYSB2ZWN0b3IgZm9yIGl0cyBlbGVtZW50cy5cIikgOmNsanMgKGpzL0Vycm9yLiBcIlF1ZXVlIGxpdGVyYWwgZXhwZWN0cyBhIHZlY3RvciBmb3IgaXRzIGVsZW1lbnRzLlwiKSkpKVxyXG4gKGxpc3QgJ2NsanMuY29yZS9pbnRvICdjbGpzLmNvcmUuUGVyc2lzdGVudFF1ZXVlLkVNUFRZIGZvcm0pKVxyXG4ifSB7OnN5bSB2YWxpZC1qcy1saXRlcmFsLWtleT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhbGlkLWpzLWxpdGVyYWwta2V5P1xyXG4gW2tdXHJcbiAob3IgKHN0cmluZz8gaykgKGFuZCAoa2V5d29yZD8gaykgKG5pbD8gKG5hbWVzcGFjZSBrKSkpKSlcclxuIn0gezpzeW0gcmVhZC1qcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1qc1xyXG4gW2Zvcm1dXHJcbiAod2hlbi1ub3RcclxuICAob3IgKHZlY3Rvcj8gZm9ybSkgKG1hcD8gZm9ybSkpXHJcbiAgKHRocm93XHJcbiAgICM/KDpjbGogKFJ1bnRpbWVFeGNlcHRpb24uIFwiSmF2YVNjcmlwdCBsaXRlcmFsIG11c3QgdXNlIG1hcCBvciB2ZWN0b3Igbm90YXRpb25cIikgOmNsanMgKGpzL0Vycm9yLiBcIkphdmFTY3JpcHQgbGl0ZXJhbCBtdXN0IHVzZSBtYXAgb3IgdmVjdG9yIG5vdGF0aW9uXCIpKSkpXHJcbiAod2hlbi1ub3RcclxuICAob3IgKG5vdCAobWFwPyBmb3JtKSkgKGV2ZXJ5PyB2YWxpZC1qcy1saXRlcmFsLWtleT8gKGtleXMgZm9ybSkpKVxyXG4gICh0aHJvd1xyXG4gICAjPyg6Y2xqIChSdW50aW1lRXhjZXB0aW9uLiBcIkphdmFTY3JpcHQgbGl0ZXJhbCBrZXlzIG11c3QgYmUgc3RyaW5ncyBvciB1bnF1YWxpZmllZCBrZXl3b3Jkc1wiKSA6Y2xqcyAoanMvRXJyb3IuIFwiSmF2YVNjcmlwdCBsaXRlcmFsIGtleXMgbXVzdCBiZSBzdHJpbmdzIG9yIHVucXVhbGlmaWVkIGtleXdvcmRzXCIpKSkpXHJcbiAoSlNWYWx1ZS4gZm9ybSkpXHJcbiJ9IHs6c3ltICpjbGpzLWRhdGEtcmVhZGVycyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqY2xqcy1kYXRhLXJlYWRlcnMqXHJcbiAobWVyZ2VcclxuICAjPyg6Y2xqICpkYXRhLXJlYWRlcnMqKVxyXG4gIHsncXVldWUgcmVhZC1xdWV1ZSwgJ3V1aWQgcmVhZC11dWlkLCAnaW5zdCByZWFkLWluc3QsICdqcyByZWFkLWpzfSkpXHJcbiJ9KSwgY2xqcy5hbmFseXplciAoezpzeW0gdHlwZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0eXBlP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHRdXHJcbiAod2hlblxyXG4gIChhbmQgKHNvbWU/IHQpIChzeW1ib2w/IHQpKVxyXG4gIChsZXRcclxuICAgW3ZhciAocmVzb2x2ZS12YXIgZW52IHQpXVxyXG4gICAoaWYtc29tZVxyXG4gICAgW3R5cGUgKDp0eXBlIHZhcildXHJcbiAgICB0eXBlXHJcbiAgICAoaWYtc29tZVxyXG4gICAgIFt0eXBlICgtPiB2YXIgOmluZm8gOnR5cGUpXVxyXG4gICAgIHR5cGVcclxuICAgICAoaWYtc29tZVxyXG4gICAgICBbcHJvdG8gKDpwcm90b2NvbC1zeW1ib2wgdmFyKV1cclxuICAgICAgcHJvdG9cclxuICAgICAgKGdldCAnI3tjbGpzLmNvcmUvUGVyc2lzdGVudEhhc2hNYXAgY2xqcy5jb3JlL0xpc3R9IHQpKSkpKSkpXHJcbiJ9IHs6c3ltIGdldC1uYW1lc3BhY2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtba2V5XSBbY2VudiBrZXldXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtbmFtZXNwYWNlXHJcbiAoW2tleV0gKGdldC1uYW1lc3BhY2UgZW52Lypjb21waWxlcioga2V5KSlcclxuIChbY2VudiBrZXldXHJcbiAgKGlmLXNvbWVcclxuICAgW25zIChnZXQtaW4gQGNlbnYgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMga2V5XSldXHJcbiAgIG5zXHJcbiAgICh3aGVuICg9ICdjbGpzLnVzZXIga2V5KSB7Om5hbWUgJ2NsanMudXNlcn0pKSkpXHJcbiJ9IHs6c3ltIGVsaWRlLXJlYWRlci1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlbGlkZS1yZWFkZXItbWV0YVxyXG4gW21dXHJcbiAoZGlzc29jIG0gOmZpbGUgOmxpbmUgOmNvbHVtbiA6ZW5kLWNvbHVtbiA6ZW5kLWxpbmUgOnNvdXJjZSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctcmVuYW1lPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzeW0gY2Vudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctcmVuYW1lP1xyXG4gW3N5bSBjZW52XVxyXG4gKGxldFxyXG4gIFtsaWIgKHN5bWJvbCAobmFtZXNwYWNlIHN5bSkpIHN5bSAoc3ltYm9sIChuYW1lIHN5bSkpXVxyXG4gIChtaXNzaW5nLXVzZT8gbGliIHN5bSBjZW52KSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtaW52b2tlYWJsZS1ucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucyBjdXJyZW50LW5zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtaW52b2tlYWJsZS1uc1xyXG4gW25zIGN1cnJlbnQtbnMgZW52XVxyXG4gKGxldFxyXG4gIFtucyAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnMpIG1vZHVsZS10eXBlIChucy0+bW9kdWxlLXR5cGUgbnMpXVxyXG4gIChjYXNlXHJcbiAgIG1vZHVsZS10eXBlXHJcbiAgIDpqc1xyXG4gICB7Om5hbWVcclxuICAgIChzeW1ib2xcclxuICAgICAob3JcclxuICAgICAgKGdldHMgQGVudi8qY29tcGlsZXIqIDpqcy1tb2R1bGUtaW5kZXggbnMgOm5hbWUpXHJcbiAgICAgIChyZXNvbHZlLW5zLWFsaWFzIGVudiBucykpKSxcclxuICAgIDpvcCA6anMtdmFyLFxyXG4gICAgOm5zICdqc31cclxuICAgOm5vZGVcclxuICAgezpuYW1lXHJcbiAgICAoc3ltYm9sXHJcbiAgICAgKHN0ciBjdXJyZW50LW5zKVxyXG4gICAgIChtdW5nZS1ub2RlLWxpYiAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnMpKSksXHJcbiAgICA6b3AgOmpzLXZhcixcclxuICAgIDpucyBjdXJyZW50LW5zfVxyXG4gICA6Z2xvYmFsXHJcbiAgIHs6bmFtZVxyXG4gICAgKHN5bWJvbFxyXG4gICAgIChzdHIgY3VycmVudC1ucylcclxuICAgICAobXVuZ2UtZ2xvYmFsLWV4cG9ydCAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnMpKSksXHJcbiAgICA6b3AgOmpzLXZhcixcclxuICAgIDpucyBjdXJyZW50LW5zfSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWxldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbmNsLWVudiBbXyBiaW5kaW5ncyAmIGV4cHJzIDphcyBmb3JtXSBpcy1sb29wIHdpZGVuZWQtdGFnc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0XHJcbiBbZW5jbC1lbnYgW18gYmluZGluZ3MgJiBleHBycyA6YXMgZm9ybV0gaXMtbG9vcCB3aWRlbmVkLXRhZ3NdXHJcbiAod2hlbi1ub3RcclxuICAoYW5kICh2ZWN0b3I/IGJpbmRpbmdzKSAoZXZlbj8gKGNvdW50IGJpbmRpbmdzKSkpXHJcbiAgKHRocm93XHJcbiAgIChlcnJvclxyXG4gICAgZW5jbC1lbnZcclxuICAgIFwiYmluZGluZ3MgbXVzdCBiZSB2ZWN0b3Igb2YgZXZlbiBudW1iZXIgb2YgZWxlbWVudHNcIikpKVxyXG4gKGxldFxyXG4gIFtjb250ZXh0XHJcbiAgICg6Y29udGV4dCBlbmNsLWVudilcclxuICAgb3BcclxuICAgKGlmICh0cnVlPyBpcy1sb29wKSA6bG9vcCA6bGV0KVxyXG4gICBiaW5kaW5nc1xyXG4gICAoaWZcclxuICAgIHdpZGVuZWQtdGFnc1xyXG4gICAgKHZlY1xyXG4gICAgIChtYXBjYXRcclxuICAgICAgKGZuXHJcbiAgICAgICBbW25hbWUgaW5pdF0gd2lkZW5lZC10YWddXHJcbiAgICAgICBbKHZhcnktbWV0YSBuYW1lIGFzc29jIDp0YWcgd2lkZW5lZC10YWcpIGluaXRdKVxyXG4gICAgICAocGFydGl0aW9uIDIgYmluZGluZ3MpXHJcbiAgICAgIHdpZGVuZWQtdGFncykpXHJcbiAgICBiaW5kaW5ncylcclxuICAgW2JlcyBlbnZdXHJcbiAgICgtPlxyXG4gICAgZW5jbC1lbnZcclxuICAgIChjb25kLT4gKHRydWU/IGlzLWxvb3ApIChhc3NvYyA6aW4tbG9vcCB0cnVlKSlcclxuICAgIChhbmFseXplLWxldC1iaW5kaW5ncyBiaW5kaW5ncyBvcCkpXHJcbiAgIHJlY3VyLWZyYW1lXHJcbiAgICh3aGVuXHJcbiAgICAodHJ1ZT8gaXMtbG9vcClcclxuICAgIHs6cGFyYW1zIGJlcywgOmZsYWcgKGF0b20gbmlsKSwgOnRhZ3MgKGF0b20gKG1hcHYgOnRhZyBiZXMpKX0pXHJcbiAgIHJlY3VyLWZyYW1lc1xyXG4gICAoaWYgcmVjdXItZnJhbWUgKGNvbnMgcmVjdXItZnJhbWUgKnJlY3VyLWZyYW1lcyopICpyZWN1ci1mcmFtZXMqKVxyXG4gICBsb29wLWxldHNcclxuICAgKGNvbmRcclxuICAgICh0cnVlPyBpcy1sb29wKVxyXG4gICAgKmxvb3AtbGV0cypcclxuICAgIChzb21lPyAqbG9vcC1sZXRzKilcclxuICAgIChjb25zIHs6cGFyYW1zIGJlc30gKmxvb3AtbGV0cyopKVxyXG4gICB3YXJuLWFjY1xyXG4gICAod2hlbiAoYW5kIGlzLWxvb3AgKG5vdCB3aWRlbmVkLXRhZ3MpKSAoYXRvbSBbXSkpXHJcbiAgIGV4cHJcclxuICAgKGlmXHJcbiAgICB3YXJuLWFjY1xyXG4gICAgKHdpdGgtd2FybmluZy1oYW5kbGVyc1xyXG4gICAgIFsoYWNjdW11bGF0aW5nLXdhcm5pbmctaGFuZGxlciB3YXJuLWFjYyldXHJcbiAgICAgKGFuYWx5emUtbGV0LWJvZHkgZW52IGNvbnRleHQgZXhwcnMgcmVjdXItZnJhbWVzIGxvb3AtbGV0cykpXHJcbiAgICAoYW5hbHl6ZS1sZXQtYm9keSBlbnYgY29udGV4dCBleHBycyByZWN1ci1mcmFtZXMgbG9vcC1sZXRzKSlcclxuICAgY2hpbGRyZW5cclxuICAgWzpiaW5kaW5ncyA6Ym9keV1cclxuICAgbmlsLT5hbnlcclxuICAgKGZuaWwgaWRlbnRpdHkgJ2FueSldXHJcbiAgKGlmXHJcbiAgIChhbmRcclxuICAgIGlzLWxvb3BcclxuICAgIChub3Qgd2lkZW5lZC10YWdzKVxyXG4gICAgKG5vdD1cclxuICAgICAobWFwdiBuaWwtPmFueSBAKDp0YWdzIHJlY3VyLWZyYW1lKSlcclxuICAgICAobWFwdiAoY29tcCBuaWwtPmFueSA6dGFnKSBiZXMpKSlcclxuICAgKHJlY3VyIGVuY2wtZW52IGZvcm0gaXMtbG9vcCBAKDp0YWdzIHJlY3VyLWZyYW1lKSlcclxuICAgKGRvXHJcbiAgICAod2hlbiB3YXJuLWFjYyAocmVwbGF5LWFjY3VtdWxhdGVkLXdhcm5pbmdzIHdhcm4tYWNjKSlcclxuICAgIHs6b3Agb3AsXHJcbiAgICAgOmVudiBlbmNsLWVudixcclxuICAgICA6YmluZGluZ3MgYmVzLFxyXG4gICAgIDpib2R5IChhc3NvYyBleHByIDpib2R5PyB0cnVlKSxcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDpjaGlsZHJlbiBjaGlsZHJlbn0pKSkpXHJcbiJ9IHs6c3ltIHZhci1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3Zhcl0gW3ZhciBleHByLWVudl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhci1tZXRhXHJcbiAoW3Zhcl0gKHZhci1tZXRhIHZhciBuaWwpKVxyXG4gKFt2YXIgZXhwci1lbnZdXHJcbiAgKGxldFxyXG4gICBbc3ltXHJcbiAgICAoOm5hbWUgdmFyKVxyXG4gICAga3NcclxuICAgIFs6bnMgOmRvYyA6ZmlsZSA6bGluZSA6Y29sdW1uXVxyXG4gICAgbVxyXG4gICAgKG1lcmdlXHJcbiAgICAgKGxldFxyXG4gICAgICBbdXNlci1tZXRhICg6bWV0YSB2YXIpIHVrcyAoa2V5cyB1c2VyLW1ldGEpXVxyXG4gICAgICAoemlwbWFwXHJcbiAgICAgICB1a3NcclxuICAgICAgIChtYXBcclxuICAgICAgICAoZm4qIFtwMV9fNDg1OTYjXSAobGlzdCAncXVvdGUgKGdldCB1c2VyLW1ldGEgcDFfXzQ4NTk2IykpKVxyXG4gICAgICAgIHVrcykpKVxyXG4gICAgIChhc3NvY1xyXG4gICAgICAoemlwbWFwXHJcbiAgICAgICBrc1xyXG4gICAgICAgKG1hcCAoZm4qIFtwMV9fNDg1OTcjXSAobGlzdCAncXVvdGUgKGdldCB2YXIgcDFfXzQ4NTk3IykpKSBrcykpXHJcbiAgICAgIDpuYW1lXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdxdW90ZSlcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChzeW1ib2wgKG5hbWUgKDpuYW1lIHZhcikpKSkpKSlcclxuICAgICAgOnRlc3RcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS93aGVuKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3Qgc3ltKVxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICcuLWNsanMkbGFuZyR0ZXN0KVxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IHN5bSkpKSkpKSkpXHJcbiAgICAgIDphcmdsaXN0c1xyXG4gICAgICAobGV0XHJcbiAgICAgICBbYXJnbGlzdHNcclxuICAgICAgICAoOmFyZ2xpc3RzIHZhcilcclxuICAgICAgICBhcmdsaXN0cydcclxuICAgICAgICAoaWYgKD0gJ3F1b3RlIChmaXJzdCBhcmdsaXN0cykpIChzZWNvbmQgYXJnbGlzdHMpIGFyZ2xpc3RzKV1cclxuICAgICAgIChsaXN0XHJcbiAgICAgICAgJ3F1b3RlXHJcbiAgICAgICAgKGRvYWxsIChtYXAgd2l0aC1tZXRhIGFyZ2xpc3RzJyAoOmFyZ2xpc3RzLW1ldGEgdmFyKSkpKSkpKV1cclxuICAgKGlmIGV4cHItZW52IChhbmFseXplIGV4cHItZW52IG0pIG0pKSkpXHJcbiJ9IHs6c3ltIGRlc3VnYXItbnMtc3BlY3MsIDptZXRhIHs6ZG9jICJHaXZlbiBhbiBvcmlnaW5hbCBzZXQgb2YgbnMgc3BlY3MgZGVzdWdhciA6aW5jbHVkZS1tYWNyb3MgYW5kIDpyZWZlci1tYWNyb3NcbiAgIHVzYWdlIGludG8gb25seSBwcmltaXRpdmUgc3BlYyBmb3JtcyAtIDp1c2UsIDpyZXF1aXJlLCA6dXNlLW1hY3JvcyxcbiAgIDpyZXF1aXJlLW1hY3Jvcy4gSWYgYSBsaWJyYXJ5IGluY2x1ZGVzIGEgbWFjcm8gZmlsZSBvZiB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgIGFzIHRoZSBuYW1lc3BhY2Ugd2lsbCBhbHNvIGJlIGRlc3VnYXJlZC4iLCA6YXJnbGlzdHMgKFthcmdzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVzdWdhci1ucy1zcGVjc1xyXG4gXCJHaXZlbiBhbiBvcmlnaW5hbCBzZXQgb2YgbnMgc3BlY3MgZGVzdWdhciA6aW5jbHVkZS1tYWNyb3MgYW5kIDpyZWZlci1tYWNyb3NcXG4gICB1c2FnZSBpbnRvIG9ubHkgcHJpbWl0aXZlIHNwZWMgZm9ybXMgLSA6dXNlLCA6cmVxdWlyZSwgOnVzZS1tYWNyb3MsXFxuICAgOnJlcXVpcmUtbWFjcm9zLiBJZiBhIGxpYnJhcnkgaW5jbHVkZXMgYSBtYWNybyBmaWxlIG9mIHdpdGggdGhlIHNhbWUgbmFtZVxcbiAgIGFzIHRoZSBuYW1lc3BhY2Ugd2lsbCBhbHNvIGJlIGRlc3VnYXJlZC5cIlxyXG4gW2FyZ3NdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbcmVxdWlyZV0sIDphcyBpbmRleGVkfVxyXG4gICAoLT4+IGFyZ3MgKG1hcCAoZm4gW1trICYgc3BlY3NdXSBbayAoaW50byBbXSBzcGVjcyldKSkgKGludG8ge30pKVxyXG4gICBzdWdhci1rZXlzXHJcbiAgICN7OmluY2x1ZGUtbWFjcm9zIDpyZWZlci1tYWNyb3N9XHJcbiAgIHJlbW92ZS1mcm9tLXNwZWNcclxuICAgKGZuXHJcbiAgICBbcHJlZCBzcGVjXVxyXG4gICAgKGlmLW5vdFxyXG4gICAgIChhbmQgKHNlcXVlbnRpYWw/IHNwZWMpIChzb21lIHByZWQgc3BlYykpXHJcbiAgICAgc3BlY1xyXG4gICAgIChsZXRcclxuICAgICAgW1tsIHJdIChzcGxpdC13aXRoIChjb21wbGVtZW50IHByZWQpIHNwZWMpXVxyXG4gICAgICAocmVjdXIgcHJlZCAoY29uY2F0IGwgKGRyb3AgMiByKSkpKSkpXHJcbiAgIHJlcGxhY2UtcmVmZXItbWFjcm9zXHJcbiAgIChmblxyXG4gICAgW3NwZWNdXHJcbiAgICAoaWYtbm90XHJcbiAgICAgKHNlcXVlbnRpYWw/IHNwZWMpXHJcbiAgICAgc3BlY1xyXG4gICAgIChtYXAgKGZuIFt4XSAoaWYgKD0geCA6cmVmZXItbWFjcm9zKSA6cmVmZXIgeCkpIHNwZWMpKSlcclxuICAgcmVsb2FkLXNwZWM/XHJcbiAgIChmbiogW3AxX180ODYyMSNdICgjezpyZWxvYWQgOnJlbG9hZC1hbGx9IHAxX180ODYyMSMpKVxyXG4gICB0by1tYWNyby1zcGVjc1xyXG4gICAoZm5cclxuICAgIFtzcGVjc11cclxuICAgICgtPj5cclxuICAgICBzcGVjc1xyXG4gICAgIChmaWx0ZXJcclxuICAgICAgKGZuXHJcbiAgICAgICBbeF1cclxuICAgICAgIChvclxyXG4gICAgICAgIChhbmQgKHNlcXVlbnRpYWw/IHgpIChzb21lIHN1Z2FyLWtleXMgeCkpXHJcbiAgICAgICAgKHJlbG9hZC1zcGVjPyB4KVxyXG4gICAgICAgIChtYWNyby1hdXRvbG9hZC1ucz8geCkpKSlcclxuICAgICAobWFwXHJcbiAgICAgIChmblxyXG4gICAgICAgW3hdXHJcbiAgICAgICAoaWYtbm90XHJcbiAgICAgICAgKHJlbG9hZC1zcGVjPyB4KVxyXG4gICAgICAgICgtPj5cclxuICAgICAgICAgeFxyXG4gICAgICAgICAocmVtb3ZlLWZyb20tc3BlYyAjezppbmNsdWRlLW1hY3Jvc30pXHJcbiAgICAgICAgIChyZW1vdmUtZnJvbS1zcGVjICN7OnJlZmVyfSlcclxuICAgICAgICAgKHJlbW92ZS1mcm9tLXNwZWMgI3s6cmVuYW1lfSlcclxuICAgICAgICAgKHJlcGxhY2UtcmVmZXItbWFjcm9zKSlcclxuICAgICAgICB4KSkpKSlcclxuICAgcmVtb3ZlLXN1Z2FyXHJcbiAgIChwYXJ0aWFsIHJlbW92ZS1mcm9tLXNwZWMgc3VnYXIta2V5cyldXHJcbiAgKGlmLXNvbWVcclxuICAgW3JlcXVpcmUtc3BlY3MgKHNlcSAodG8tbWFjcm8tc3BlY3MgcmVxdWlyZSkpXVxyXG4gICAobWFwXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAoaWYtbm90XHJcbiAgICAgIChyZWxvYWQtc3BlYz8geClcclxuICAgICAgKGxldCBbW2sgdl0geF0gKGNvbnMgayAobWFwIHJlbW92ZS1zdWdhciB2KSkpXHJcbiAgICAgIHgpKVxyXG4gICAgKHVwZGF0ZS1pbiBpbmRleGVkIFs6cmVxdWlyZS1tYWNyb3NdIChmbmlsIGludG8gW10pIHJlcXVpcmUtc3BlY3MpKVxyXG4gICBhcmdzKSkpXHJcbiJ9IHs6c3ltIGpzLXRhZz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGpzLXRhZz9cclxuIFt4XVxyXG4gKGFuZCAoc3ltYm9sPyB4KSAob3IgKD0gJ2pzIHgpICg9IFwianNcIiAobmFtZXNwYWNlIHgpKSkpKVxyXG4ifSB7OnN5bSBlbnN1cmUtZGVmcywgOm1ldGEgezpkb2MgIkVuc3VyZXMgdGhhdCBhIG5vbi1uaWwgZGVmcyBtYXAgZXhpc3RzIGluIHRoZSBjb21waWxlciBzdGF0ZSBmb3IgYSBnaXZlblxuICBucy4gKEEgbm9uLW5pbCBkZWZzIG1hcCBzaWduaWZpZXMgdGhhdCB0aGUgbmFtZXNwYWNlIGhhcyBiZWVuIGFuYWx5emVkLikiLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVuc3VyZS1kZWZzXHJcbiBcIkVuc3VyZXMgdGhhdCBhIG5vbi1uaWwgZGVmcyBtYXAgZXhpc3RzIGluIHRoZSBjb21waWxlciBzdGF0ZSBmb3IgYSBnaXZlblxcbiAgbnMuIChBIG5vbi1uaWwgZGVmcyBtYXAgc2lnbmlmaWVzIHRoYXQgdGhlIG5hbWVzcGFjZSBoYXMgYmVlbiBhbmFseXplZC4pXCJcclxuIFtuc11cclxuIChzd2FwIVxyXG4gIGVudi8qY29tcGlsZXIqXHJcbiAgdXBkYXRlLWluXHJcbiAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOmRlZnNdXHJcbiAgKGZuKiBbcDFfXzQ4NjQ2I10gKG9yIHAxX180ODY0NiMge30pKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbWFwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1tYXBcclxuIFtlbnYgZm9ybV1cclxuIChsZXRcclxuICBbZXhwci1lbnZcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAga3NcclxuICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAobWFwdlxyXG4gICAgIChmbiogW3AxX180ODYzNSNdIChhbmFseXplIGV4cHItZW52IHAxX180ODYzNSMpKVxyXG4gICAgIChrZXlzIGZvcm0pKSlcclxuICAgdnNcclxuICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAobWFwdlxyXG4gICAgIChmbiogW3AxX180ODYzNiNdIChhbmFseXplIGV4cHItZW52IHAxX180ODYzNiMpKVxyXG4gICAgICh2YWxzIGZvcm0pKSldXHJcbiAgKGFuYWx5emUtd3JhcC1tZXRhXHJcbiAgIHs6b3AgOm1hcCxcclxuICAgIDplbnYgZW52LFxyXG4gICAgOmZvcm0gZm9ybSxcclxuICAgIDprZXlzIGtzLFxyXG4gICAgOnZhbHMgdnMsXHJcbiAgICA6Y2hpbGRyZW4gWzprZXlzIDp2YWxzXSxcclxuICAgIDp0YWcgJ2NsanMuY29yZS9JTWFwfSkpKVxyXG4ifSB7OnN5bSBOVU1FUklDX1NFVCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTlVNRVJJQ19TRVQgJyN7YW55IGxvbmcgZG91YmxlIG51bWJlcn0pXHJcbiJ9IHs6c3ltIGFuYWx5emUtcmVjb3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1yZWNvcmRcclxuIFtlbnYgeF1cclxuIChsZXRcclxuICBbX2l0ZW1zX1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXIgKGFuYWx5emUgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcikgKGludG8ge30geCkpKVxyXG4gICBbbnMgbmFtZV1cclxuICAgKHJlY29yZC1ucytuYW1lIHgpXVxyXG4gIHs6b3AgOmNvbnN0LFxyXG4gICA6dmFsIHgsXHJcbiAgIDplbnYgZW52LFxyXG4gICA6Zm9ybSB4LFxyXG4gICA6dGFnIChzeW1ib2wgKHN0ciBucykgKHN0ciBuYW1lKSl9KSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zZXEqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW29wIGVudiBmb3JtIG5hbWUgb3B0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc2VxKlxyXG4gW29wIGVudiBmb3JtIG5hbWUgb3B0c11cclxuIChpZlxyXG4gIChjb250YWlucz8gc3BlY2lhbHMgb3ApXHJcbiAgKHBhcnNlIG9wIGVudiBmb3JtIG5hbWUgb3B0cylcclxuICAocGFyc2UtaW52b2tlIGVudiBmb3JtKSkpXHJcbiJ9IHs6c3ltIGNvbnN0YW50cy1ucy1zeW0sIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBjb25zdGFudHMtbnMtc3ltXHJcbiBcIlRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNvbnN0YW50cyB0YWJsZSBhcyBhIHN5bWJvbC5cIlxyXG4gJ2NsanMuY29yZS5jb25zdGFudHMpXHJcbiJ9IHs6c3ltIHJlc29sdmUtYWxpYXMsIDptZXRhIHs6ZG9jICJUYWtlcyBhIG5hbWVzcGFjZSBhbmQgYW4gdW5xdWFsaWZpZWQgc3ltYm9sIGFuZCBwb3RlbnRpYWxseSByZXR1cm5zIGEgbmV3XG4gIHN5bWJvbCB0byBiZSB1c2VkIGluIGxpZXUgb2YgdGhlIG9yaWdpbmFsLiIsIDphcmdsaXN0cyAoW25zIHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtYWxpYXNcclxuIFwiVGFrZXMgYSBuYW1lc3BhY2UgYW5kIGFuIHVucXVhbGlmaWVkIHN5bWJvbCBhbmQgcG90ZW50aWFsbHkgcmV0dXJucyBhIG5ld1xcbiAgc3ltYm9sIHRvIGJlIHVzZWQgaW4gbGlldSBvZiB0aGUgb3JpZ2luYWwuXCJcclxuIFtucyBzeW1dXHJcbiAoaWZcclxuICAoYW5kICg9ICdjbGpzLmNvcmUgbnMpICgnI3thZ2V0IGFzZXR9IHN5bSkgKGNoZWNrZWQtYXJyYXlzKSlcclxuICAoZ2V0LWluXHJcbiAgICd7Ondhcm4ge2FnZXQgY2hlY2tlZC1hZ2V0LCBhc2V0IGNoZWNrZWQtYXNldH0sXHJcbiAgICAgOmVycm9yIHthZ2V0IGNoZWNrZWQtYWdldCcsIGFzZXQgY2hlY2tlZC1hc2V0J319XHJcbiAgIFsoY2hlY2tlZC1hcnJheXMpIHN5bV0pXHJcbiAgc3ltKSlcclxuIn0gezpzeW0gKmNsanMtZGVwLXNldCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLWRlcC1zZXQqICh3aXRoLW1ldGEgI3t9IHs6ZGVwLXBhdGggW119KSlcclxuIn0gezpzeW0gcmVzb2x2ZS12YXIsIDptZXRhIHs6ZG9jICJSZXNvbHZlIGEgdmFyLiBBY2NlcHRzIGEgc2lkZS1lZmZlY3RpbmcgY29uZmlybSBmbiBmb3IgcHJvZHVjaW5nXG4gICB3YXJuaW5ncyBhYm91dCB1bnJlc29sdmVkIHZhcnMuIiwgOmFyZ2xpc3RzIFtbZW52IHN5bV0gW2VudiBzeW0gY29uZmlybV0gW2VudiBzeW0gY29uZmlybSBkZWZhdWx0P11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtdmFyXHJcbiBcIlJlc29sdmUgYSB2YXIuIEFjY2VwdHMgYSBzaWRlLWVmZmVjdGluZyBjb25maXJtIGZuIGZvciBwcm9kdWNpbmdcXG4gICB3YXJuaW5ncyBhYm91dCB1bnJlc29sdmVkIHZhcnMuXCJcclxuIChbZW52IHN5bV0gKHJlc29sdmUtdmFyIGVudiBzeW0gbmlsKSlcclxuIChbZW52IHN5bSBjb25maXJtXSAocmVzb2x2ZS12YXIgZW52IHN5bSBjb25maXJtIHRydWUpKVxyXG4gKFtlbnYgc3ltIGNvbmZpcm0gZGVmYXVsdD9dXHJcbiAgKGxldFxyXG4gICBbbG9jYWxzICg6bG9jYWxzIGVudildXHJcbiAgIChpZlxyXG4gICAgIz8oOmNsaiAoPSBcImpzXCIgKG5hbWVzcGFjZSBzeW0pKSA6Y2xqcyAoaWRlbnRpY2FsPyBcImpzXCIgKG5hbWVzcGFjZSBzeW0pKSlcclxuICAgIChsZXRcclxuICAgICBbc3ltblxyXG4gICAgICAoLT4gc3ltIG5hbWUgc3ltYm9sKVxyXG4gICAgICBzaGFkb3dlZC1ieS1sb2NhbFxyXG4gICAgICAoaGFuZGxlLXN5bWJvbC1sb2NhbCBzeW1uIChnZXQgbG9jYWxzIHN5bW4pKV1cclxuICAgICAoY29uZFxyXG4gICAgICAoc29tZT8gc2hhZG93ZWQtYnktbG9jYWwpXHJcbiAgICAgIChkb1xyXG4gICAgICAgKHdhcm5pbmcgOmpzLXNoYWRvd2VkLWJ5LWxvY2FsIGVudiB7Om5hbWUgc3ltfSlcclxuICAgICAgIChhc3NvYyBzaGFkb3dlZC1ieS1sb2NhbCA6b3AgOmxvY2FsKSlcclxuICAgICAgOmVsc2VcclxuICAgICAgKGxldFxyXG4gICAgICAgW3ByZSAoLT4+IChzdHJpbmcvc3BsaXQgKG5hbWUgc3ltKSAjXCJcXC5cIikgKG1hcCBzeW1ib2wpIHZlYyldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIChhbmRcclxuICAgICAgICAgKG5vdCAoaGFzLWV4dGVybj8gcHJlKSlcclxuICAgICAgICAgKG5vdCAoLT4gc3ltIG1ldGEgOmNsanMuYW5hbHl6ZXIvbm8tcmVzb2x2ZSkpKVxyXG4gICAgICAgIChzd2FwIVxyXG4gICAgICAgICBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICB1cGRhdGUtaW5cclxuICAgICAgICAgKGludG9cclxuICAgICAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzICgtPiBlbnYgOm5zIDpuYW1lKSA6ZXh0ZXJuc11cclxuICAgICAgICAgIHByZSlcclxuICAgICAgICAgbWVyZ2VcclxuICAgICAgICAge30pKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgezpuYW1lIHN5bSxcclxuICAgICAgICAgOm9wIDpqcy12YXIsXHJcbiAgICAgICAgIDpucyAnanMsXHJcbiAgICAgICAgIDp0YWdcclxuICAgICAgICAgKHdpdGgtbWV0YVxyXG4gICAgICAgICAgKG9yIChqcy10YWcgcHJlKSAoOnRhZyAobWV0YSBzeW0pKSAnanMpXHJcbiAgICAgICAgICB7OnByZWZpeCBwcmV9KX1cclxuICAgICAgICAod2hlbi1sZXRcclxuICAgICAgICAgW3JldC10YWcgKGpzLXRhZyBwcmUgOnJldC10YWcpXVxyXG4gICAgICAgICB7OmpzLWZuLXZhciB0cnVlLCA6cmV0LXRhZyByZXQtdGFnfSkpKSkpXHJcbiAgICAobGV0XHJcbiAgICAgW3NcclxuICAgICAgKHN0ciBzeW0pXHJcbiAgICAgIGxiXHJcbiAgICAgIChoYW5kbGUtc3ltYm9sLWxvY2FsIHN5bSAoZ2V0IGxvY2FscyBzeW0pKVxyXG4gICAgICBjdXJyZW50LW5zXHJcbiAgICAgICgtPiBlbnYgOm5zIDpuYW1lKV1cclxuICAgICAoY29uZFxyXG4gICAgICAoc29tZT8gbGIpXHJcbiAgICAgIChhc3NvYyBsYiA6b3AgOmxvY2FsKVxyXG4gICAgICAoc29tZT8gKG5hbWVzcGFjZSBzeW0pKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbbnNcclxuICAgICAgICAobmFtZXNwYWNlIHN5bSlcclxuICAgICAgICBuc1xyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAjPyg6Y2xqICg9IFwiY2xvanVyZS5jb3JlXCIgbnMpIDpjbGpzIChpZGVudGljYWw/IFwiY2xvanVyZS5jb3JlXCIgbnMpKVxyXG4gICAgICAgICBcImNsanMuY29yZVwiXHJcbiAgICAgICAgIG5zKVxyXG4gICAgICAgIGZ1bGwtbnNcclxuICAgICAgICAocmVzb2x2ZS1ucy1hbGlhc1xyXG4gICAgICAgICBlbnZcclxuICAgICAgICAgbnNcclxuICAgICAgICAgKG9yXHJcbiAgICAgICAgICAoYW5kXHJcbiAgICAgICAgICAgKGpzLW1vZHVsZS1leGlzdHM/IG5zKVxyXG4gICAgICAgICAgIChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6anMtbW9kdWxlLWluZGV4IG5zIDpuYW1lKSlcclxuICAgICAgICAgIChzeW1ib2wgbnMpKSldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIChzb21lPyBjb25maXJtKVxyXG4gICAgICAgICh3aGVuIChub3Q9IGN1cnJlbnQtbnMgZnVsbC1ucykgKGNvbmZpcm0tbnMgZW52IGZ1bGwtbnMpKVxyXG4gICAgICAgIChjb25maXJtIGVudiBmdWxsLW5zIChzeW1ib2wgKG5hbWUgc3ltKSkpKVxyXG4gICAgICAgKHJlc29sdmUqIGVudiBzeW0gZnVsbC1ucyBjdXJyZW50LW5zKSlcclxuICAgICAgKGRvdHRlZC1zeW1ib2w/IHN5bSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW2lkeFxyXG4gICAgICAgICguaW5kZXhPZiBzIFwiLlwiKVxyXG4gICAgICAgIHByZWZpeFxyXG4gICAgICAgIChzeW1ib2wgKHN1YnMgcyAwIGlkeCkpXHJcbiAgICAgICAgc3VmZml4XHJcbiAgICAgICAgKHN1YnMgcyAoaW5jIGlkeCkpXVxyXG4gICAgICAgKGlmLWxldFxyXG4gICAgICAgIFtyZXNvbHZlZCAocmVzb2x2ZS12YXIgZW52IHByZWZpeCBuaWwgZmFsc2UpXVxyXG4gICAgICAgICh1cGRhdGVcclxuICAgICAgICAgcmVzb2x2ZWRcclxuICAgICAgICAgOm5hbWVcclxuICAgICAgICAgKGZuKiBbcDFfXzQ4NTk1I10gKHN5bWJvbCAoc3RyIHAxX180ODU5NSMgXCIuXCIgc3VmZml4KSkpKVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2lkeFxyXG4gICAgICAgICAgKC5sYXN0SW5kZXhPZiBzIFwiLlwiKVxyXG4gICAgICAgICAgcHJlXHJcbiAgICAgICAgICAoc3VicyBzIDAgaWR4KVxyXG4gICAgICAgICAgc3VmXHJcbiAgICAgICAgICAoc3VicyBzIChpbmMgaWR4KSldXHJcbiAgICAgICAgIHs6b3AgOnZhciwgOm5hbWUgKHN5bWJvbCBwcmUgc3VmKSwgOm5zIChzeW1ib2wgcHJlKX0pKSlcclxuICAgICAgKHNvbWU/XHJcbiAgICAgICAoZ2V0c1xyXG4gICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgOnVzZXNcclxuICAgICAgICBzeW0pKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbZnVsbC1uc1xyXG4gICAgICAgIChnZXRzXHJcbiAgICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICAgOnVzZXNcclxuICAgICAgICAgc3ltKV1cclxuICAgICAgIChyZXNvbHZlKiBlbnYgc3ltIGZ1bGwtbnMgY3VycmVudC1ucykpXHJcbiAgICAgIChzb21lP1xyXG4gICAgICAgKGdldHNcclxuICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgIDpyZW5hbWVzXHJcbiAgICAgICAgc3ltKSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW3F1YWxpZmllZC1zeW1ib2xcclxuICAgICAgICAoZ2V0c1xyXG4gICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgIDpyZW5hbWVzXHJcbiAgICAgICAgIHN5bSlcclxuICAgICAgICBmdWxsLW5zXHJcbiAgICAgICAgKHN5bWJvbCAobmFtZXNwYWNlIHF1YWxpZmllZC1zeW1ib2wpKVxyXG4gICAgICAgIHN5bVxyXG4gICAgICAgIChzeW1ib2wgKG5hbWUgcXVhbGlmaWVkLXN5bWJvbCkpXVxyXG4gICAgICAgKHJlc29sdmUqIGVudiBzeW0gZnVsbC1ucyBjdXJyZW50LW5zKSlcclxuICAgICAgKHNvbWU/XHJcbiAgICAgICAoZ2V0c1xyXG4gICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAgICBjdXJyZW50LW5zXHJcbiAgICAgICAgOmltcG9ydHNcclxuICAgICAgICBzeW0pKVxyXG4gICAgICAocmVjdXJcclxuICAgICAgIGVudlxyXG4gICAgICAgKGdldHNcclxuICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgIDppbXBvcnRzXHJcbiAgICAgICAgc3ltKVxyXG4gICAgICAgY29uZmlybVxyXG4gICAgICAgZGVmYXVsdD8pXHJcbiAgICAgIChzb21lP1xyXG4gICAgICAgKGdldHNcclxuICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgY3VycmVudC1uc1xyXG4gICAgICAgIDpkZWZzXHJcbiAgICAgICAgc3ltKSlcclxuICAgICAgKGRvXHJcbiAgICAgICAod2hlbiAoc29tZT8gY29uZmlybSkgKGNvbmZpcm0gZW52IGN1cnJlbnQtbnMgc3ltKSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIChnZXRzXHJcbiAgICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICAgOmRlZnNcclxuICAgICAgICAgc3ltKVxyXG4gICAgICAgIHs6bmFtZSAoc3ltYm9sIChzdHIgY3VycmVudC1ucykgKHN0ciBzeW0pKSxcclxuICAgICAgICAgOm9wIDp2YXIsXHJcbiAgICAgICAgIDpucyBjdXJyZW50LW5zfSkpXHJcbiAgICAgIChjb3JlLW5hbWU/IGVudiBzeW0pXHJcbiAgICAgIChkb1xyXG4gICAgICAgKHdoZW4gKHNvbWU/IGNvbmZpcm0pIChjb25maXJtIGVudiAnY2xqcy5jb3JlIHN5bSkpXHJcbiAgICAgICAobWVyZ2VcclxuICAgICAgICAoZ2V0c1xyXG4gICAgICAgICBAZW52Lypjb21waWxlcipcclxuICAgICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgICAnY2xqcy5jb3JlXHJcbiAgICAgICAgIDpkZWZzXHJcbiAgICAgICAgIHN5bSlcclxuICAgICAgICB7Om5hbWUgKHN5bWJvbCBcImNsanMuY29yZVwiIChzdHIgc3ltKSksXHJcbiAgICAgICAgIDpvcCA6dmFyLFxyXG4gICAgICAgICA6bnMgJ2NsanMuY29yZX0pKVxyXG4gICAgICAoaW52b2tlYWJsZS1ucz8gcyBlbnYpXHJcbiAgICAgIChyZXNvbHZlLWludm9rZWFibGUtbnMgcyBjdXJyZW50LW5zIGVudilcclxuICAgICAgOmVsc2VcclxuICAgICAgKHdoZW5cclxuICAgICAgIGRlZmF1bHQ/XHJcbiAgICAgICAod2hlbiAoc29tZT8gY29uZmlybSkgKGNvbmZpcm0gZW52IGN1cnJlbnQtbnMgc3ltKSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIChnZXRzXHJcbiAgICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAgICAgIGN1cnJlbnQtbnNcclxuICAgICAgICAgOmRlZnNcclxuICAgICAgICAgc3ltKVxyXG4gICAgICAgIHs6bmFtZSAoc3ltYm9sIChzdHIgY3VycmVudC1ucykgKHN0ciBzeW0pKSxcclxuICAgICAgICAgOm9wIDp2YXIsXHJcbiAgICAgICAgIDpucyBjdXJyZW50LW5zfSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGpzLXN0YXItc2VnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy1zdGFyLXNlZ1xyXG4gW3NdXHJcbiAobGV0XHJcbiAgW2lkeCAoLmluZGV4T2YgcyBcIn57XCIpXVxyXG4gIChpZlxyXG4gICAoPT0gLTEgaWR4KVxyXG4gICAobGlzdCBzKVxyXG4gICAobGV0XHJcbiAgICBbZW5kICguaW5kZXhPZiBzIFwifVwiIGlkeCldXHJcbiAgICAobGF6eS1zZXFcclxuICAgICAoY29ucyAoc3VicyBzIDAgaWR4KSAoanMtc3Rhci1zZWcgKHN1YnMgcyAoaW5jIGVuZCkpKSkpKSkpKVxyXG4ifSB7OnN5bSBkZXAtaGFzLWdsb2JhbC1leHBvcnRzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttb2R1bGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXAtaGFzLWdsb2JhbC1leHBvcnRzP1xyXG4gW21vZHVsZV1cclxuIChsZXRcclxuICBbZ2xvYmFsLWV4cG9ydHNcclxuICAgKGdldC1pblxyXG4gICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICBbOmpzLWRlcGVuZGVuY3ktaW5kZXggKHN0ciBtb2R1bGUpIDpnbG9iYWwtZXhwb3J0c10pXVxyXG4gIChvclxyXG4gICAoY29udGFpbnM/IGdsb2JhbC1leHBvcnRzIChzeW1ib2wgbW9kdWxlKSlcclxuICAgKGNvbnRhaW5zPyBnbG9iYWwtZXhwb3J0cyAobmFtZSBtb2R1bGUpKSkpKVxyXG4ifSB7OnN5bSByZWdpc3Rlci1zcGVjcywgOm1ldGEgezpkb2MgIlJlZ2lzdGVycyBzcGVjZWQgdmFycyBmb3VuZCBpbiBhIG5hbWVzcGFjZSBhbmFseXNpcyBjYWNoZS4iLCA6YXJnbGlzdHMgKFtjYWNoZWQtbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdpc3Rlci1zcGVjc1xyXG4gXCJSZWdpc3RlcnMgc3BlY2VkIHZhcnMgZm91bmQgaW4gYSBuYW1lc3BhY2UgYW5hbHlzaXMgY2FjaGUuXCJcclxuIFtjYWNoZWQtbnNdXHJcbiAjPyg6Y2xqICh0cnkgKGxvY2tpbmcgbG9hZC1tdXRleCAoY2xvanVyZS5jb3JlL3JlcXVpcmUgKHF1b3RlIGNsanMuc3BlYy5hbHBoYSkpKSAoY2F0Y2ggVGhyb3dhYmxlIHQpKSlcclxuIChsZXRcclxuICBbezprZXlzIFtyZWdpc3RyeS1yZWYgc3BlY2VkLXZhcnNdfSAoZ2V0LXNwZWMtdmFycyldXHJcbiAgKHdoZW4tbGV0XHJcbiAgIFtyZWdpc3RyeSAoc2VxICg6Y2xqcy5zcGVjL3JlZ2lzdHJ5LXJlZiBjYWNoZWQtbnMpKV1cclxuICAgKHdoZW4gcmVnaXN0cnktcmVmIChzd2FwISBAcmVnaXN0cnktcmVmIGludG8gcmVnaXN0cnkpKSlcclxuICAod2hlbi1sZXRcclxuICAgW3ZhcnMgKHNlcSAoOmNsanMuc3BlYy9zcGVjZWQtdmFycyBjYWNoZWQtbnMpKV1cclxuICAgKHdoZW4gc3BlY2VkLXZhcnMgKHN3YXAhIEBzcGVjZWQtdmFycyBpbnRvIHZhcnMpKSkpKVxyXG4ifSB7OnN5bSBnZXQtZXh0ZXJucywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIGdldC1leHRlcm5zIFtdICg6Y2xqcy5hbmFseXplci9leHRlcm5zIEBlbnYvKmNvbXBpbGVyKikpXHJcbiJ9IHs6c3ltICpwYXNzZXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcGFzc2VzKiBuaWwpXHJcbiJ9IHs6c3ltIGhhcy1leHRlcm4/KiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1twcmUgZXh0ZXJuc10gW3ByZSBleHRlcm5zIHRvcF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhhcy1leHRlcm4/KlxyXG4gKFtwcmUgZXh0ZXJuc11cclxuICAobGV0XHJcbiAgIFtwcmVcclxuICAgIChpZi1zb21lXHJcbiAgICAgW21lIChmaW5kIChnZXQtaW4gZXh0ZXJucyAnW1dpbmRvdyBwcm90b3R5cGVdKSAoZmlyc3QgcHJlKSldXHJcbiAgICAgKGlmLXNvbWVcclxuICAgICAgW3RhZyAoLT4gbWUgZmlyc3QgbWV0YSA6dGFnKV1cclxuICAgICAgKGludG8gW3RhZyAncHJvdG90eXBlXSAobmV4dCBwcmUpKVxyXG4gICAgICBwcmUpXHJcbiAgICAgcHJlKV1cclxuICAgKGhhcy1leHRlcm4/KiBwcmUgZXh0ZXJucyBleHRlcm5zKSkpXHJcbiAoW3ByZSBleHRlcm5zIHRvcF1cclxuICAoY29uZFxyXG4gICAoZW1wdHk/IHByZSlcclxuICAgdHJ1ZVxyXG4gICA6ZWxzZVxyXG4gICAobGV0XHJcbiAgICBbeCAoZmlyc3QgcHJlKSBtZSAoZmluZCBleHRlcm5zIHgpXVxyXG4gICAgKGNvbmRcclxuICAgICAobm90IG1lKVxyXG4gICAgIGZhbHNlXHJcbiAgICAgOmVsc2VcclxuICAgICAobGV0XHJcbiAgICAgIFtbeCcgZXh0ZXJucyddIG1lIHhtZXRhIChtZXRhIHgnKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoYW5kICg9ICdGdW5jdGlvbiAoOnRhZyB4bWV0YSkpICg6Y3RvciB4bWV0YSkpXHJcbiAgICAgICAob3JcclxuICAgICAgICAoaGFzLWV4dGVybj8qIChpbnRvICdbcHJvdG90eXBlXSAobmV4dCBwcmUpKSBleHRlcm5zJyB0b3ApXHJcbiAgICAgICAgKGhhcy1leHRlcm4/KiAobmV4dCBwcmUpIGV4dGVybnMnIHRvcCkpXHJcbiAgICAgICAocmVjdXIgKG5leHQgcHJlKSBleHRlcm5zJyB0b3ApKSkpKSkpKVxyXG4ifSB7OnN5bSBoYW5kbGUtc3ltYm9sLWxvY2FsLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bSBsYl0pfSwgOnNvdXJjZSAiKGRlZm4gaGFuZGxlLXN5bWJvbC1sb2NhbCBbc3ltIGxiXSAoaWYgKHN5bWJvbD8gbGIpIHs6bmFtZSBzeW19IGxiKSlcclxuIn0gezpzeW0gZ2V0LWV4cGFuZGVyLW5zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBuc3RyXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LWV4cGFuZGVyLW5zXHJcbiBbZW52IG5zdHJdXHJcbiAobGV0XHJcbiAgW3Jlc1xyXG4gICAob3JcclxuICAgIChyZXNvbHZlLW1hY3JvLW5zLWFsaWFzIGVudiBuc3RyIG5pbClcclxuICAgIChyZXNvbHZlLW5zLWFsaWFzIGVudiBuc3RyIG5pbCkpXHJcbiAgIG5zdHJcclxuICAgKGlmIChzb21lPyByZXMpIChzdHIgcmVzKSBuc3RyKV1cclxuICAoY29uZFxyXG4gICAjP0AoOmNsaiBbKD0gXCJjbG9qdXJlLmNvcmVcIiBuc3RyKSAoZmluZC1ucyAocXVvdGUgY2xqcy5jb3JlKSldIDpjbGpzIFsoaWRlbnRpY2FsPyBcImNsb2p1cmUuY29yZVwiIG5zdHIpIChmaW5kLW1hY3Jvcy1ucyBDTEpTX0NPUkVfTUFDUk9TX1NZTSldKVxyXG4gICAjP0AoOmNsaiBbKD0gXCJjbG9qdXJlLnJlcGxcIiBuc3RyKSAoZmluZC1ucyAocXVvdGUgY2xqcy5yZXBsKSldIDpjbGpzIFsoaWRlbnRpY2FsPyBcImNsb2p1cmUucmVwbFwiIG5zdHIpIChmaW5kLW1hY3Jvcy1ucyAocXVvdGUgY2xqcy5yZXBsKSldKVxyXG4gICAjP0AoOmNsaiBbKC5jb250YWlucyBuc3RyIFwiLlwiKSAoZmluZC1ucyAoc3ltYm9sIG5zdHIpKV0gOmNsanMgWyhnb29nLnN0cmluZy9jb250YWlucyBuc3RyIFwiLlwiKSAoZmluZC1tYWNyb3MtbnMgKHN5bWJvbCBuc3RyKSldKVxyXG4gICA6ZWxzZVxyXG4gICAoc29tZS0+XHJcbiAgICBlbnZcclxuICAgIDpuc1xyXG4gICAgOnJlcXVpcmUtbWFjcm9zXHJcbiAgICAoZ2V0IChzeW1ib2wgbnN0cikpXHJcbiAgICAjPyg6Y2xqIGZpbmQtbnMgOmNsanMgZmluZC1tYWNyb3MtbnMpKSkpKVxyXG4ifSB7OnN5bSBtZXNzYWdlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWVzc2FnZVxyXG4gW2VudiBzXVxyXG4gKHN0clxyXG4gIHNcclxuICAoaWZcclxuICAgKDpsaW5lIGVudilcclxuICAgKHN0ciBcIiBhdCBsaW5lIFwiICg6bGluZSBlbnYpIFwiIFwiICpjbGpzLWZpbGUqKVxyXG4gICAod2hlbiAqY2xqcy1maWxlKiAoc3RyIFwiIGluIGZpbGUgXCIgKmNsanMtZmlsZSopKSkpKVxyXG4ifSB7OnN5bSBwYXJzZS1pbnZva2UsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1pbnZva2VcclxuIFtlbnYgZm9ybV1cclxuIChkaXNhbGxvd2luZy1yZWN1ciAocGFyc2UtaW52b2tlKiBlbnYgZm9ybSkpKVxyXG4ifSB7OnN5bSAqY2xqcy13YXJuaW5nLWhhbmRsZXJzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtd2FybmluZy1oYW5kbGVycyogW2RlZmF1bHQtd2FybmluZy1oYW5kbGVyXSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zZXEqLXdyYXAsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3AgZW52IGZvcm0gbmFtZSBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zZXEqLXdyYXBcclxuIFtvcCBlbnYgZm9ybSBuYW1lIG9wdHNdXHJcbiAod3JhcHBpbmctZXJyb3JzIGVudiAoYW5hbHl6ZS1zZXEqIG9wIGVudiBmb3JtIG5hbWUgb3B0cykpKVxyXG4ifSB7OnN5bSBjb25maXJtLWJpbmRpbmdzLCA6bWV0YSB7OmRvYyAiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCBlbnYsIGFuZCBuYW1lcywgYSBsaXN0IG9mIHN5bWJvbHMsIGNvbmZpcm1cbiAgIHRoYXQgYWxsIGNvcnJlc3BvbmQgdG8gZGVjbGFyZWQgZHluYW1pYyB2YXJzLiIsIDphcmdsaXN0cyAoW2VudiBuYW1lc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZpcm0tYmluZGluZ3NcclxuIFwiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCBlbnYsIGFuZCBuYW1lcywgYSBsaXN0IG9mIHN5bWJvbHMsIGNvbmZpcm1cXG4gICB0aGF0IGFsbCBjb3JyZXNwb25kIHRvIGRlY2xhcmVkIGR5bmFtaWMgdmFycy5cIlxyXG4gW2VudiBuYW1lc11cclxuIChkb3NlcVxyXG4gIFtuYW1lIG5hbWVzXVxyXG4gIChsZXRcclxuICAgW2VudlxyXG4gICAgKGFzc29jIGVudiA6bnMgKGdldC1uYW1lc3BhY2UgKmNsanMtbnMqKSlcclxuICAgIGV2XHJcbiAgICAocmVzb2x2ZS1leGlzdGluZy12YXIgZW52IG5hbWUpXVxyXG4gICAod2hlblxyXG4gICAgKGFuZCBldiAobm90ICgtPiBldiA6ZHluYW1pYykpKVxyXG4gICAgKHdhcm5pbmcgOmR5bmFtaWMgZW52IHs6ZXYgZXYsIDpuYW1lICg6bmFtZSBldil9KSkpKSlcclxuIn0gezpzeW0gaGFzLWV4dGVybj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcHJlXSBbcHJlIGV4dGVybnNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXMtZXh0ZXJuP1xyXG4gKFtwcmVdIChoYXMtZXh0ZXJuPyBwcmUgKGdldC1leHRlcm5zKSkpXHJcbiAoW3ByZSBleHRlcm5zXVxyXG4gIChvclxyXG4gICAoaGFzLWV4dGVybj8qIHByZSBleHRlcm5zKVxyXG4gICAod2hlblxyXG4gICAgKD0gMSAoY291bnQgcHJlKSlcclxuICAgIChsZXRcclxuICAgICBbeCAoZmlyc3QgcHJlKV1cclxuICAgICAob3JcclxuICAgICAgKGdldC1pbiBleHRlcm5zIChjb25qICdbV2luZG93IHByb3RvdHlwZV0geCkpXHJcbiAgICAgIChnZXQtaW4gZXh0ZXJucyAoY29uaiAnW051bWJlcl0geCkpKSkpXHJcbiAgICgtPiAobGFzdCBwcmUpIHN0ciAoc3RyaW5nL3N0YXJ0cy13aXRoPyBcImNsanMkXCIpKSkpKVxyXG4ifSB7OnN5bSBmb3JlaWduLWRlcD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZGVwXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9yZWlnbi1kZXA/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtkZXBdXHJcbiAobGV0XHJcbiAgW2pzLWluZGV4ICg6anMtZGVwZW5kZW5jeS1pbmRleCBAZW52Lypjb21waWxlciopXVxyXG4gIChpZi1zb21lXHJcbiAgIFtbXyB7OmtleXMgW2ZvcmVpZ25dfV0gKGZpbmQganMtaW5kZXggKG5hbWUgZGVwKSldXHJcbiAgIGZvcmVpZ25cclxuICAgZmFsc2UpKSlcclxuIn0gezpzeW0gbWlzc2luZy1yZW5hbWUtbWFjcm8/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctcmVuYW1lLW1hY3JvP1xyXG4gW3N5bV1cclxuIChsZXRcclxuICBbbGliXHJcbiAgIChzeW1ib2wgKG5hbWVzcGFjZSBzeW0pKVxyXG4gICBzeW1cclxuICAgKHN5bWJvbCAobmFtZSBzeW0pKVxyXG4gICB0aGUtbnNcclxuICAgIz8oOmNsaiAoZmluZC1ucyBsaWIpIDpjbGpzIChmaW5kLW1hY3Jvcy1ucyBsaWIpKV1cclxuICAob3IgKG5pbD8gdGhlLW5zKSAobmlsPyAoLmZpbmRJbnRlcm5lZFZhciB0aGUtbnMgc3ltKSkpKSlcclxuIn0gezpzeW0gbWlzc2luZy11c2VzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3VzZXMgZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gbWlzc2luZy11c2VzXHJcbiBbdXNlcyBlbnZdXHJcbiAobGV0XHJcbiAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gIChpbnRvXHJcbiAgIHt9XHJcbiAgIChmaWx0ZXIgKGZuIFtbc3ltIGxpYl1dIChtaXNzaW5nLXVzZT8gbGliIHN5bSBjZW52KSkgdXNlcykpKSlcclxuIn0gezpzeW0gbWlzc2luZy11c2U/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2xpYiBzeW0gY2Vudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctdXNlP1xyXG4gW2xpYiBzeW0gY2Vudl1cclxuIChsZXRcclxuICBbanMtbGliIChnZXQtaW4gY2VudiBbOmpzLWRlcGVuZGVuY3ktaW5kZXggKG5hbWUgbGliKV0pXVxyXG4gIChhbmRcclxuICAgKD1cclxuICAgIChnZXQtaW5cclxuICAgICBjZW52XHJcbiAgICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbGliIDpkZWZzIHN5bV1cclxuICAgICA6Y2xqcy5hbmFseXplci9ub3QtZm91bmQpXHJcbiAgICA6Y2xqcy5hbmFseXplci9ub3QtZm91bmQpXHJcbiAgIChub3QgKD0gKGdldCBqcy1saWIgOmdyb3VwKSA6Z29vZykpXHJcbiAgIChub3QgKGdldCBqcy1saWIgOmNsb3N1cmUtbGliKSlcclxuICAgKG5vdCAobm9kZS1tb2R1bGUtZGVwPyBsaWIpKVxyXG4gICAobm90IChkZXAtaGFzLWdsb2JhbC1leHBvcnRzPyBsaWIpKSkpKVxyXG4ifSB7OnN5bSBlczUtYWxsb3dlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgZXM1LWFsbG93ZWQgI3tcImRlZmF1bHRcIn0pXHJcbiJ9IHs6c3ltIGFuYWx5emUsIDptZXRhIHs6ZG9jICJHaXZlbiBhbiBlbnZpcm9ubWVudCwgYSBtYXAgY29udGFpbmluZyB7OmxvY2FscyAobWFwcGluZyBvZiBuYW1lcyB0byBiaW5kaW5ncyksIDpjb250ZXh0XG4gIChvbmUgb2YgOnN0YXRlbWVudCwgOmV4cHIsIDpyZXR1cm4pLCA6bnMgKGEgc3ltYm9sIG5hbWluZyB0aGVcbiAgY29tcGlsYXRpb24gbnMpfSwgYW5kIGZvcm0sIHJldHVybnMgYW4gZXhwcmVzc2lvbiBvYmplY3QgKGEgbWFwXG4gIGNvbnRhaW5pbmcgYXQgbGVhc3QgOmZvcm0sIDpvcCBhbmQgOmVudiBrZXlzKS4gSWYgZXhwciBoYXMgYW55IChpbW1lZGlhdGVseSlcbiAgbmVzdGVkIGV4cHJzLCBtdXN0IGhhdmUgYSA6Y2hpbGRyZW4gZW50cnkuIFRoaXMgbXVzdCBiZSBhIHZlY3RvciBvZiBrZXl3b3JkcyBuYW1pbmdcbiAgdGhlIGltbWVkaWF0ZWx5IG5lc3RlZCBmaWVsZHMgbWFwcGVkIHRvIGFuIGV4cHIgb3IgdmVjdG9yIG9mIGV4cHJzLiBUaGlzIHdpbGxcbiAgZmFjaWxpdGF0ZSBjb2RlIHdhbGtpbmcgd2l0aG91dCBrbm93aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBvcCBzZXQuIiwgOmFyZ2xpc3RzIFtbZW52IGZvcm1dIFtlbnYgZm9ybSBuYW1lXSBbZW52IGZvcm0gbmFtZSBvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZVxyXG4gXCJHaXZlbiBhbiBlbnZpcm9ubWVudCwgYSBtYXAgY29udGFpbmluZyB7OmxvY2FscyAobWFwcGluZyBvZiBuYW1lcyB0byBiaW5kaW5ncyksIDpjb250ZXh0XFxuICAob25lIG9mIDpzdGF0ZW1lbnQsIDpleHByLCA6cmV0dXJuKSwgOm5zIChhIHN5bWJvbCBuYW1pbmcgdGhlXFxuICBjb21waWxhdGlvbiBucyl9LCBhbmQgZm9ybSwgcmV0dXJucyBhbiBleHByZXNzaW9uIG9iamVjdCAoYSBtYXBcXG4gIGNvbnRhaW5pbmcgYXQgbGVhc3QgOmZvcm0sIDpvcCBhbmQgOmVudiBrZXlzKS4gSWYgZXhwciBoYXMgYW55IChpbW1lZGlhdGVseSlcXG4gIG5lc3RlZCBleHBycywgbXVzdCBoYXZlIGEgOmNoaWxkcmVuIGVudHJ5LiBUaGlzIG11c3QgYmUgYSB2ZWN0b3Igb2Yga2V5d29yZHMgbmFtaW5nXFxuICB0aGUgaW1tZWRpYXRlbHkgbmVzdGVkIGZpZWxkcyBtYXBwZWQgdG8gYW4gZXhwciBvciB2ZWN0b3Igb2YgZXhwcnMuIFRoaXMgd2lsbFxcbiAgZmFjaWxpdGF0ZSBjb2RlIHdhbGtpbmcgd2l0aG91dCBrbm93aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBvcCBzZXQuXCJcclxuIChbZW52IGZvcm1dIChhbmFseXplIGVudiBmb3JtIG5pbCkpXHJcbiAoW2VudiBmb3JtIG5hbWVdXHJcbiAgKGFuYWx5emVcclxuICAgZW52XHJcbiAgIGZvcm1cclxuICAgbmFtZVxyXG4gICAod2hlbiBlbnYvKmNvbXBpbGVyKiAoOm9wdGlvbnMgQGVudi8qY29tcGlsZXIqKSkpKVxyXG4gKFtlbnYgZm9ybSBuYW1lIG9wdHNdXHJcbiAgKHdyYXBwaW5nLWVycm9yc1xyXG4gICBlbnZcclxuICAgKGlmXHJcbiAgICAoYW5hbHl6ZWQ/IGZvcm0pXHJcbiAgICAobm8td2FybiAoYW5hbHl6ZSogZW52IGZvcm0gbmFtZSBvcHRzKSlcclxuICAgIChhbmFseXplKiBlbnYgZm9ybSBuYW1lIG9wdHMpKSkpKVxyXG4ifSB7OnN5bSB1c2VkPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXNlZD9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2VudiBzeW1dXHJcbiAob3JcclxuICAoc29tZT8gKGdldHMgZW52IDpucyA6dXNlLW1hY3JvcyBzeW0pKVxyXG4gIChzb21lP1xyXG4gICAoZ2V0c1xyXG4gICAgQGVudi8qY29tcGlsZXIqXHJcbiAgICA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzXHJcbiAgICAoZ2V0cyBlbnYgOm5zIDpuYW1lKVxyXG4gICAgOnVzZS1tYWNyb3NcclxuICAgIHN5bSkpKSlcclxuIn0gezpzeW0gbm9kZS1tb2R1bGUtZGVwPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttb2R1bGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBub2RlLW1vZHVsZS1kZXA/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFttb2R1bGVdXHJcbiAjPyg6Y2xqIChjb250YWlucz8gKGdldC1pbiAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSBbOm5vZGUtbW9kdWxlLWluZGV4XSkgKHN0ciBtb2R1bGUpKSA6Y2xqcyAodHJ5IChhbmQgKD0gKnRhcmdldCogXCJub2RlanNcIikgKGJvb2xlYW4gKGpzL3JlcXVpcmUucmVzb2x2ZSAoc3RyIG1vZHVsZSkpKSkgKGNhdGNoIDpkZWZhdWx0IF8gZmFsc2UpKSkpXHJcbiJ9IHs6c3ltIHBhcnNlLXR5cGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbb3AgZW52IFtfIHRzeW0gZmllbGRzIHBtYXNrcyBib2R5IDphcyBmb3JtXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLXR5cGVcclxuIFtvcCBlbnYgW18gdHN5bSBmaWVsZHMgcG1hc2tzIGJvZHkgOmFzIGZvcm1dXVxyXG4gKGxldFxyXG4gIFt0XHJcbiAgICg6bmFtZSAocmVzb2x2ZS12YXIgKGRpc3NvYyBlbnYgOmxvY2FscykgdHN5bSkpXHJcbiAgIGxvY2Fsc1xyXG4gICAocmVkdWNlXHJcbiAgICAoZm5cclxuICAgICBbbSBmbGRdXHJcbiAgICAgKGFzc29jXHJcbiAgICAgIG1cclxuICAgICAgZmxkXHJcbiAgICAgIHs6bmFtZSBmbGQsXHJcbiAgICAgICA6ZmllbGQgdHJ1ZSxcclxuICAgICAgIDpjb2x1bW4gKGdldC1jb2wgZmxkIGVudiksXHJcbiAgICAgICA6dW5zeW5jaHJvbml6ZWQtbXV0YWJsZSAoLT4gZmxkIG1ldGEgOnVuc3luY2hyb25pemVkLW11dGFibGUpLFxyXG4gICAgICAgOmxpbmUgKGdldC1saW5lIGZsZCBlbnYpLFxyXG4gICAgICAgOnRhZyAoLT4gZmxkIG1ldGEgOnRhZyksXHJcbiAgICAgICA6bXV0YWJsZSAoLT4gZmxkIG1ldGEgOm11dGFibGUpLFxyXG4gICAgICAgOnZvbGF0aWxlLW11dGFibGUgKC0+IGZsZCBtZXRhIDp2b2xhdGlsZS1tdXRhYmxlKSxcclxuICAgICAgIDpzaGFkb3cgKG0gZmxkKSxcclxuICAgICAgIDpsb2NhbCA6ZmllbGR9KSlcclxuICAgIHt9XHJcbiAgICAoaWZcclxuICAgICAoPSA6ZGVmcmVjb3JkIG9wKVxyXG4gICAgIChjb25jYXQgZmllbGRzICdbX19tZXRhIF9fZXh0bWFwIF9faGFzaF0pXHJcbiAgICAgZmllbGRzKSlcclxuICAgcHJvdG9jb2xzXHJcbiAgICgtPiB0c3ltIG1ldGEgOnByb3RvY29scyldXHJcbiAgKHN3YXAhXHJcbiAgIGVudi8qY29tcGlsZXIqXHJcbiAgIHVwZGF0ZS1pblxyXG4gICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoLT4gZW52IDpucyA6bmFtZSkgOmRlZnMgdHN5bV1cclxuICAgKGZuXHJcbiAgICBbbV1cclxuICAgIChsZXRcclxuICAgICBbbVxyXG4gICAgICAoYXNzb2NcclxuICAgICAgIChvciBtIHt9KVxyXG4gICAgICAgOm5hbWVcclxuICAgICAgIHRcclxuICAgICAgIDp0YWdcclxuICAgICAgICdmdW5jdGlvblxyXG4gICAgICAgOnR5cGVcclxuICAgICAgIHRydWVcclxuICAgICAgIDpudW0tZmllbGRzXHJcbiAgICAgICAoY291bnQgZmllbGRzKVxyXG4gICAgICAgOnJlY29yZFxyXG4gICAgICAgKD0gOmRlZnJlY29yZCBvcCkpXVxyXG4gICAgIChtZXJnZVxyXG4gICAgICBtXHJcbiAgICAgIChkaXNzb2MgKG1ldGEgdHN5bSkgOnByb3RvY29scylcclxuICAgICAgezpwcm90b2NvbHMgcHJvdG9jb2xzfVxyXG4gICAgICAoc291cmNlLWluZm8gdHN5bSBlbnYpKSkpKVxyXG4gIHs6Y2hpbGRyZW4gWzpib2R5XSxcclxuICAgOnBtYXNrcyBwbWFza3MsXHJcbiAgIDpwcm90b2NvbHMgKGRpc2ogcHJvdG9jb2xzICdjbGpzLmNvcmUvT2JqZWN0KSxcclxuICAgOmZpZWxkcyBmaWVsZHMsXHJcbiAgIDpvcCBvcCxcclxuICAgOmVudiBlbnYsXHJcbiAgIDp0IHQsXHJcbiAgIDpmb3JtIGZvcm0sXHJcbiAgIDp0YWcgJ2Z1bmN0aW9uLFxyXG4gICA6Ym9keSAoYW5hbHl6ZSAoYXNzb2MgZW52IDpsb2NhbHMgbG9jYWxzKSBib2R5KX0pKVxyXG4ifSB7OnN5bSBnZXRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW20gazAgazFdIFttIGswIGsxIGsyXSBbbSBrMCBrMSBrMiBrM11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldHNcclxuIChbbSBrMCBrMV1cclxuICAobGV0XHJcbiAgIFttIChnZXQgbSBrMCBTRU5USU5FTCldXHJcbiAgICh3aGVuLW5vdCAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKSAoZ2V0IG0gazEpKSkpXHJcbiAoW20gazAgazEgazJdXHJcbiAgKGxldFxyXG4gICBbbSAoZ2V0IG0gazAgU0VOVElORUwpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChpZGVudGljYWw/IG0gU0VOVElORUwpXHJcbiAgICAobGV0XHJcbiAgICAgW20gKGdldCBtIGsxIFNFTlRJTkVMKV1cclxuICAgICAod2hlbi1ub3QgKGlkZW50aWNhbD8gbSBTRU5USU5FTCkgKGdldCBtIGsyKSkpKSkpXHJcbiAoW20gazAgazEgazIgazNdXHJcbiAgKGxldFxyXG4gICBbbSAoZ2V0IG0gazAgU0VOVElORUwpXVxyXG4gICAod2hlbi1ub3RcclxuICAgIChpZGVudGljYWw/IG0gU0VOVElORUwpXHJcbiAgICAobGV0XHJcbiAgICAgW20gKGdldCBtIGsxIFNFTlRJTkVMKV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKGlkZW50aWNhbD8gbSBTRU5USU5FTClcclxuICAgICAgKGxldFxyXG4gICAgICAgW20gKGdldCBtIGsyIFNFTlRJTkVMKV1cclxuICAgICAgICh3aGVuLW5vdCAoaWRlbnRpY2FsPyBtIFNFTlRJTkVMKSAoZ2V0IG0gazMpKSkpKSkpKSlcclxuIn0gezpzeW0gY2hlY2stcmVuYW1lLW1hY3Jvcy1pbmZlcnJpbmctbWlzc2luZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW25hbWUgcmVuYW1lc10sIDphcyBhc3R9IGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLXJlbmFtZS1tYWNyb3MtaW5mZXJyaW5nLW1pc3NpbmdcclxuIFt7OmtleXMgW25hbWUgcmVuYW1lc10sIDphcyBhc3R9IGVudl1cclxuIChsZXRcclxuICBbbWlzc2luZy1yZW5hbWVzXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kICphbmFseXplLWRlcHMqIChzZXEgcmVuYW1lcykpXHJcbiAgICAobWlzc2luZy1yZW5hbWVzIHJlbmFtZXMgZW52KSlcclxuICAgbWF5YmUtbWFjcm9zXHJcbiAgIChhcHBseSBkaXNzb2MgcmVuYW1lcyAoa2V5cyBtaXNzaW5nLXJlbmFtZXMpKVxyXG4gICBtaXNzaW5nLXJlbmFtZS1tYWNyb3NcclxuICAgKGluZmVycmVkLXJlbmFtZS1tYWNyb3MgbWlzc2luZy1yZW5hbWVzIGVudilcclxuICAgcmVtb3ZlLW1pc3NpbmctcmVuYW1lc1xyXG4gICAoZm4qIFtwMV9fNDg2MTUjXSAoYXBwbHkgZGlzc29jIHAxX180ODYxNSMgKGtleXMgbWlzc2luZy1yZW5hbWVzKSkpXHJcbiAgIGFzdCdcclxuICAgKC0+XHJcbiAgICBhc3RcclxuICAgICh1cGRhdGUtaW5cclxuICAgICBbOnJlbmFtZS1tYWNyb3NdXHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ4NjE2I11cclxuICAgICAgKC0+XHJcbiAgICAgICBwMV9fNDg2MTYjXHJcbiAgICAgICAobWVyZ2UgbWlzc2luZy1yZW5hbWUtbWFjcm9zKVxyXG4gICAgICAgKG1lcmdlIChpbmZlcnJlZC1yZW5hbWUtbWFjcm9zIG1heWJlLW1hY3JvcyBlbnYpKSkpKVxyXG4gICAgKHVwZGF0ZS1pbiBbOnJlbmFtZXNdIHJlbW92ZS1taXNzaW5nLXJlbmFtZXMpKV1cclxuICAoc3dhcCFcclxuICAgZW52Lypjb21waWxlcipcclxuICAgKGZuKlxyXG4gICAgW3AxX180ODYxNyNdXHJcbiAgICAoLT5cclxuICAgICBwMV9fNDg2MTcjXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuYW1lIDpyZW5hbWUtbWFjcm9zXVxyXG4gICAgICBtZXJnZVxyXG4gICAgICAoOnJlbmFtZS1tYWNyb3MgYXN0JykpXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuYW1lIDpyZW5hbWVzXVxyXG4gICAgICByZW1vdmUtbWlzc2luZy1yZW5hbWVzKSkpKVxyXG4gIGFzdCcpKVxyXG4ifSB7OnN5bSAqYWxsb3ctbnMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqYWxsb3ctbnMqIHRydWUpXHJcbiJ9IHs6c3ltIGFuYWx5emUtY29uc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWNvbnN0XHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbdGFnXX0gKGFuYWx5emUgKGFzc29jIGVudiA6cXVvdGVkPyB0cnVlKSBmb3JtKV1cclxuICB7Om9wIDpjb25zdCxcclxuICAgOmVudiBlbnYsXHJcbiAgIDpsaXRlcmFsPyB0cnVlLFxyXG4gICA6dmFsIGZvcm0sXHJcbiAgIDp0YWcgdGFnLFxyXG4gICA6Zm9ybSBmb3JtfSkpXHJcbiJ9IHs6c3ltIGluZmVyLWludm9rZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYge2YgOmZuLCA6a2V5cyBbYXJnc10sIDphcyBlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVyLWludm9rZVxyXG4gW2VudiB7ZiA6Zm4sIDprZXlzIFthcmdzXSwgOmFzIGV9XVxyXG4gKGxldFxyXG4gIFttZSAoYXNzb2MgKGZpbmQtbWF0Y2hpbmctbWV0aG9kIGYgYXJncykgOm9wIDpmbi1tZXRob2QpXVxyXG4gIChpZi1zb21lXHJcbiAgIFtyZXQtdGFnIChpbmZlci10YWcgZW52IG1lKV1cclxuICAgcmV0LXRhZ1xyXG4gICAobGV0XHJcbiAgICBbezprZXlzIFtpbmZvXX0gZl1cclxuICAgIChpZi1zb21lXHJcbiAgICAgW3JldC10YWdcclxuICAgICAgKGlmXHJcbiAgICAgICAob3IgKHRydWU/ICg6Zm4tdmFyIGluZm8pKSAodHJ1ZT8gKDpqcy1mbi12YXIgaW5mbykpKVxyXG4gICAgICAgKDpyZXQtdGFnIGluZm8pXHJcbiAgICAgICAod2hlbiAoPSAnanMgKDpucyBpbmZvKSkgJ2pzKSldXHJcbiAgICAgcmV0LXRhZ1xyXG4gICAgIEFOWV9TWU0pKSkpKVxyXG4ifSB7OnN5bSAqY2xqcy1zdGF0aWMtZm5zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtc3RhdGljLWZucyogZmFsc2UpXHJcbiJ9IHs6c3ltIGFycmF5LXR5cGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYXJyYXktdHlwZXNcclxuICcje2Jvb2xlYW4gZmxvYXRzIGxvbmdzIG9iamVjdHMgYXJyYXkgZG91YmxlcyBjaGFycyBpbnRzIHNob3J0c1xyXG4gICAgYnl0ZXN9KVxyXG4ifSB7OnN5bSAqY2hlY2stYWxpYXMtZHVwZXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqY2hlY2stYWxpYXMtZHVwZXMqIHRydWUpXHJcbiJ9IHs6c3ltIG1hY3JvLW5zLW5hbWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hY3JvLW5zLW5hbWVcclxuIFtuYW1lXVxyXG4gKGxldFxyXG4gIFtuYW1lLXN0ciAoc3RyIG5hbWUpXVxyXG4gIChpZi1ub3RcclxuICAgIz8oOmNsaiAoLmVuZHNXaXRoIG5hbWUtc3RyIFwiJG1hY3Jvc1wiKSA6Y2xqcyAoZ3N0cmluZy9lbmRzV2l0aCBuYW1lLXN0ciBcIiRtYWNyb3NcIikpXHJcbiAgIChzeW1ib2wgKHN0ciBuYW1lLXN0ciBcIiRtYWNyb3NcIikpXHJcbiAgIG5hbWUpKSlcclxuIn0gezpzeW0gKnJlbG9hZC1tYWNyb3MqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcmVsb2FkLW1hY3JvcyogZmFsc2UpXHJcbiJ9IHs6c3ltIGNvbXBpbGVyLW9wdGlvbnMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmbiBjb21waWxlci1vcHRpb25zIFtdIChnZXQgQGVudi8qY29tcGlsZXIqIDpvcHRpb25zKSlcclxuIn0gezpzeW0gcmVzb2x2ZS1leGlzdGluZy12YXIsIDptZXRhIHs6ZG9jICJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgc3ltLCBhIHN5bWJvbCwgcmVzb2x2ZSBhbiBleGlzdGluZyB2YXIuXG4gICBFbWl0cyBhIHdhcm5pbmcgaWYgbm8gc3VjaCB2YXIgZXhpc3RzLiIsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLWV4aXN0aW5nLXZhclxyXG4gXCJHaXZlbiBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgc3ltLCBhIHN5bWJvbCwgcmVzb2x2ZSBhbiBleGlzdGluZyB2YXIuXFxuICAgRW1pdHMgYSB3YXJuaW5nIGlmIG5vIHN1Y2ggdmFyIGV4aXN0cy5cIlxyXG4gW2VudiBzeW1dXHJcbiAoaWYtbm90XHJcbiAgKC0+IHN5bSBtZXRhIDpjbGpzLmFuYWx5emVyL25vLXJlc29sdmUpXHJcbiAgKHJlc29sdmUtdmFyIGVudiBzeW0gY29uZmlybS12YXItZXhpc3RzKVxyXG4gIChyZXNvbHZlLXZhciBlbnYgc3ltKSkpXHJcbiJ9IHs6c3ltIHJlcXVpcmVkPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtucyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXF1aXJlZD9cclxuIFtucyBlbnZdXHJcbiAob3JcclxuICAoY29udGFpbnM/IChzZXQgKHZhbHMgKGdldHMgZW52IDpucyA6cmVxdWlyZXMpKSkgbnMpXHJcbiAgKGNvbnRhaW5zPyAoc2V0ICh2YWxzIChnZXRzIGVudiA6bnMgOnVzZXMpKSkgbnMpKSlcclxuIn0gezpzeW0gbm9kZS1saWtlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tdIFtvcHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gbm9kZS1saWtlP1xyXG4gKFtdIChub2RlLWxpa2U/IChjb21waWxlci1vcHRpb25zKSkpXHJcbiAoW29wdHNdIChhbmQgKD0gOm5vZGVqcyAoOnRhcmdldCBvcHRzKSkgKGZhbHNlPyAoOm5vZGVqcy1ydCBvcHRzKSkpKSlcclxuIn0gezpzeW0gTk9UX05BVElWRSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgTk9UX05BVElWRSAnI3tjbGogbm90LW5hdGl2ZX0pXHJcbiJ9IHs6c3ltIElHTk9SRV9TWU0sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIElHTk9SRV9TWU0gJ2lnbm9yZSlcclxuIn0gezpzeW0gcGFyc2UtaW52b2tlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgW2YgJiBhcmdzIDphcyBmb3JtXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLWludm9rZSpcclxuIFtlbnYgW2YgJiBhcmdzIDphcyBmb3JtXV1cclxuIChsZXRcclxuICBbZW52ZVxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBmZXhwclxyXG4gICAoYW5hbHl6ZSBlbnZlIGYpXHJcbiAgIGFyZ2NcclxuICAgKGNvdW50IGFyZ3MpXHJcbiAgIGZuLXZhcj9cclxuICAgKG9yICgtPiBmZXhwciA6aW5mbyA6Zm4tdmFyKSAoLT4gZmV4cHIgOmluZm8gOmpzLWZuLXZhcikpXHJcbiAgIGt3P1xyXG4gICAoPSAnY2xqcy5jb3JlL0tleXdvcmQgKDp0YWcgZmV4cHIpKVxyXG4gICBjdXItbnNcclxuICAgKC0+IGVudiA6bnMgOm5hbWUpXHJcbiAgIEhPLWludm9rZT9cclxuICAgKGFuZFxyXG4gICAgKGJvb2xlYW4gKmNsanMtc3RhdGljLWZucyopXHJcbiAgICAobm90IGZuLXZhcj8pXHJcbiAgICAobm90IChqcy10YWc/IGYpKVxyXG4gICAgKG5vdCBrdz8pXHJcbiAgICAobm90IChhbmFseXplZD8gZikpKVxyXG4gICBiaW5kLWYtZXhwcj9cclxuICAgKGFuZCBITy1pbnZva2U/IChub3QgKHN5bWJvbD8gZikpKVxyXG4gICBiaW5kLWFyZ3M/XHJcbiAgIChhbmQgSE8taW52b2tlPyAobm90IChhbGwtdmFsdWVzPyBhcmdzKSkpXVxyXG4gICh3aGVuXHJcbiAgIGZuLXZhcj9cclxuICAgKGxldFxyXG4gICAgW3t2YXJpYWRpYyA6dmFyaWFkaWM/LFxyXG4gICAgICA6a2V5cyBbbWF4LWZpeGVkLWFyaXR5IG1ldGhvZC1wYXJhbXMgbmFtZSBucyBtYWNyb119XHJcbiAgICAgKDppbmZvIGZleHByKV1cclxuICAgICh3aGVuXHJcbiAgICAgKGFuZFxyXG4gICAgICAjPyg6Y2xqcyAobm90IChhbmQgKGdzdHJpbmcvZW5kc1dpdGggKHN0ciBjdXItbnMpIFwiJG1hY3Jvc1wiKSAoc3ltYm9sLWlkZW50aWNhbD8gY3VyLW5zIG5zKSAodHJ1ZT8gbWFjcm8pKSkpXHJcbiAgICAgIChpbnZhbGlkLWFyaXR5PyBhcmdjIG1ldGhvZC1wYXJhbXMgdmFyaWFkaWMgbWF4LWZpeGVkLWFyaXR5KSlcclxuICAgICAod2FybmluZyA6Zm4tYXJpdHkgZW52IHs6bmFtZSBuYW1lLCA6YXJnYyBhcmdjfSkpKSlcclxuICAod2hlblxyXG4gICAoYW5kIGt3PyAobm90IChvciAoPT0gMSBhcmdjKSAoPT0gMiBhcmdjKSkpKVxyXG4gICAod2FybmluZyA6Zm4tYXJpdHkgZW52IHs6bmFtZSAoZmlyc3QgZm9ybSksIDphcmdjIGFyZ2N9KSlcclxuICAobGV0XHJcbiAgIFtkZXByZWNhdGVkP1xyXG4gICAgKC0+IGZleHByIDppbmZvIDpkZXByZWNhdGVkKVxyXG4gICAgbm8td2Fybj9cclxuICAgICgtPiBmb3JtIG1ldGEgOmRlcHJlY2F0aW9uLW5vd2FybildXHJcbiAgICh3aGVuXHJcbiAgICAoYW5kIChib29sZWFuIGRlcHJlY2F0ZWQ/KSAobm90IChib29sZWFuIG5vLXdhcm4/KSkpXHJcbiAgICAod2FybmluZyA6Zm4tZGVwcmVjYXRlZCBlbnYgezpmZXhwciBmZXhwcn0pKSlcclxuICAod2hlblxyXG4gICAoc29tZT8gKC0+IGZleHByIDppbmZvIDp0eXBlKSlcclxuICAgKHdhcm5pbmcgOmludm9rZS1jdG9yIGVudiB7OmZleHByIGZleHByfSkpXHJcbiAgKGlmXHJcbiAgIChvciBiaW5kLWFyZ3M/IGJpbmQtZi1leHByPylcclxuICAgKGxldFxyXG4gICAgW2FyZy1zeW1zXHJcbiAgICAgKHdoZW4gYmluZC1hcmdzPyAodGFrZSBhcmdjIChyZXBlYXRlZGx5IGdlbnN5bSkpKVxyXG4gICAgIGYtc3ltXHJcbiAgICAgKHdoZW4gYmluZC1mLWV4cHI/IChnZW5zeW0gXCJmZXhwcl9fXCIpKVxyXG4gICAgIGJpbmRpbmdzXHJcbiAgICAgKGNvbmQtPlxyXG4gICAgICBbXVxyXG4gICAgICBiaW5kLWFyZ3M/XHJcbiAgICAgIChpbnRvIChpbnRlcmxlYXZlIGFyZy1zeW1zIGFyZ3MpKVxyXG4gICAgICBiaW5kLWYtZXhwcj9cclxuICAgICAgKGNvbmogZi1zeW0gKGFuYWx5emVkIGYpKSlcclxuICAgICB0YWdcclxuICAgICAoOnRhZyAobWV0YSBmb3JtKSldXHJcbiAgICAoYW5hbHl6ZVxyXG4gICAgIGVudlxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvbGV0KVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL3ZlY1xyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxIChjbG9qdXJlLmNvcmUvY29uY2F0IGJpbmRpbmdzKSkpKSlcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgKHdpdGgtbWV0YVxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKGFuYWx5emVkIChpZiBiaW5kLWYtZXhwcj8gZi1zeW0gZikpKVxyXG4gICAgICAgICAgICAgKGlmIGJpbmQtYXJncz8gYXJnLXN5bXMgYXJncykpKSlcclxuICAgICAgICAgIHs6dGFnIHRhZ30pKSkpKSkpXHJcbiAgIChsZXRcclxuICAgIFthbmEtZXhwclxyXG4gICAgIChmbiogW3AxX180ODYzMyNdIChhbmFseXplIGVudmUgcDFfXzQ4NjMzIykpXHJcbiAgICAgYXJnZXhwcnNcclxuICAgICAobWFwdiBhbmEtZXhwciBhcmdzKV1cclxuICAgIChpZlxyXG4gICAgIChhbmRcclxuICAgICAgKGFuZCAoa2V5d29yZD8gZikgKG5pbD8gKG5hbWVzcGFjZSBmKSkpXHJcbiAgICAgICg9PSAxIChjb3VudCBhcmdzKSlcclxuICAgICAgKHJlY29yZC13aXRoLWZpZWxkPyAoOnRhZyAoZmlyc3QgYXJnZXhwcnMpKSAoc3ltYm9sIChuYW1lIGYpKSkpXHJcbiAgICAgKGxldFxyXG4gICAgICBbZmllbGQtYWNjZXNzLWZvcm0gKGxpc3QqIChzeW1ib2wgKHN0ciBcIi4tXCIgKG5hbWUgZikpKSBhcmdzKV1cclxuICAgICAgKG5vLXdhcm4gKGFuYWx5emUgZW52IGZpZWxkLWFjY2Vzcy1mb3JtKSkpXHJcbiAgICAgezplbnYgZW52LFxyXG4gICAgICA6b3AgOmludm9rZSxcclxuICAgICAgOmZvcm0gZm9ybSxcclxuICAgICAgOmZuIGZleHByLFxyXG4gICAgICA6YXJncyBhcmdleHBycyxcclxuICAgICAgOmNoaWxkcmVuIFs6Zm4gOmFyZ3NdfSkpKSkpXHJcbiJ9IHs6c3ltICpjaGVja2VkLWFycmF5cyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjaGVja2VkLWFycmF5cyogZmFsc2UpXHJcbiJ9IHs6c3ltIGFzdC1jaGlsZHJlbiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3QtY2hpbGRyZW5cclxuIFthc3RdXHJcbiAobWFwY2F0XHJcbiAgKGZuIFtjXSAobGV0IFtnIChnZXQgYXN0IGMpXSAoY29uZCAodmVjdG9yPyBnKSBnIGcgW2ddKSkpXHJcbiAgKDpjaGlsZHJlbiBhc3QpKSlcclxuIn0gezpzeW0gbG9hZGVkLWpzLW5zPywgOm1ldGEgezpkb2MgIkNoZWNrIGlmIGEgSmF2YVNjcmlwdCBuYW1lc3BhY2UgaGFzIGJlZW4gbG9hZGVkLiBKYXZhU2NyaXB0IHZhcnMgYXJlXG4gIG5vdCBjdXJyZW50bHkgY2hlY2tlZC4iLCA6YXJnbGlzdHMgKFtlbnYgcHJlZml4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9hZGVkLWpzLW5zP1xyXG4gXCJDaGVjayBpZiBhIEphdmFTY3JpcHQgbmFtZXNwYWNlIGhhcyBiZWVuIGxvYWRlZC4gSmF2YVNjcmlwdCB2YXJzIGFyZVxcbiAgbm90IGN1cnJlbnRseSBjaGVja2VkLlwiXHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgcHJlZml4XVxyXG4gKHdoZW4tbm90XHJcbiAgKGdldHMgQGVudi8qY29tcGlsZXIqIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgcHJlZml4KVxyXG4gIChsZXRcclxuICAgW25zICg6bnMgZW52KV1cclxuICAgKG9yXHJcbiAgICAoc29tZT8gKGdldCAoOnJlcXVpcmVzIG5zKSBwcmVmaXgpKVxyXG4gICAgKHNvbWU/IChnZXQgKDppbXBvcnRzIG5zKSBwcmVmaXgpKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS12ZWN0b3IsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXZlY3RvclxyXG4gW2VudiBmb3JtXVxyXG4gKGxldFxyXG4gIFtleHByLWVudlxyXG4gICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKVxyXG4gICBpdGVtc1xyXG4gICAoZGlzYWxsb3dpbmctcmVjdXJcclxuICAgIChtYXB2IChmbiogW3AxX180ODYzOCNdIChhbmFseXplIGV4cHItZW52IHAxX180ODYzOCMpKSBmb3JtKSldXHJcbiAgKGFuYWx5emUtd3JhcC1tZXRhXHJcbiAgIHs6b3AgOnZlY3RvcixcclxuICAgIDplbnYgZW52LFxyXG4gICAgOmZvcm0gZm9ybSxcclxuICAgIDppdGVtcyBpdGVtcyxcclxuICAgIDpjaGlsZHJlbiBbOml0ZW1zXSxcclxuICAgIDp0YWcgJ2NsanMuY29yZS9JVmVjdG9yfSkpKVxyXG4ifSB7OnN5bSB1bndyYXAtcXVvdGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtvcF0sIDphcyBleHByfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVud3JhcC1xdW90ZVxyXG4gW3s6a2V5cyBbb3BdLCA6YXMgZXhwcn1dXHJcbiAoaWZcclxuICAjPyg6Y2xqICg9IG9wIDpxdW90ZSkgOmNsanMgKGtleXdvcmQtaWRlbnRpY2FsPyBvcCA6cXVvdGUpKVxyXG4gICg6ZXhwciBleHByKVxyXG4gIGV4cHIpKVxyXG4ifSB7OnN5bSBuYW1lc3BhY2VzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gbmFtZXNwYWNlc1xyXG4gIz8oOmNsaiAocmVpZnkgY2xvanVyZS5sYW5nLklEZXJlZiAoZGVyZWYgW19dIChpZiAoc29tZT8gZW52Lypjb21waWxlciopICg6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopKSBkZWZhdWx0LW5hbWVzcGFjZXMpKSkgOmNsanMgKHJlaWZ5IElEZXJlZiAoLWRlcmVmIFtfXSAoaWYgKHNvbWU/IGVudi8qY29tcGlsZXIqKSAoOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyAoY2xvanVyZS5jb3JlL2RlcmVmIGVudi8qY29tcGlsZXIqKSkgZGVmYXVsdC1uYW1lc3BhY2VzKSkpKSlcclxuIn0gezpzeW0gZWxpZGUtYW5hbHl6ZXItbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmbiBlbGlkZS1hbmFseXplci1tZXRhIFttXSAoZGlzc29jIG0gOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQpKVxyXG4ifSB7OnN5bSBhbmFseXplLWxldC1ib2R5LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBjb250ZXh0IGV4cHJzIHJlY3VyLWZyYW1lcyBsb29wLWxldHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWxldC1ib2R5XHJcbiBbZW52IGNvbnRleHQgZXhwcnMgcmVjdXItZnJhbWVzIGxvb3AtbGV0c11cclxuIChiaW5kaW5nXHJcbiAgWypyZWN1ci1mcmFtZXMqIHJlY3VyLWZyYW1lcyAqbG9vcC1sZXRzKiBsb29wLWxldHNdXHJcbiAgKGFuYWx5emUtbGV0LWJvZHkqIGVudiBjb250ZXh0IGV4cHJzKSkpXHJcbiJ9IHs6c3ltIGV4dGVybi1wcmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltIGN1cnJlbnQtbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHRlcm4tcHJlXHJcbiBbc3ltIGN1cnJlbnQtbnNdXHJcbiAobGV0XHJcbiAgW3ByZVxyXG4gICAoaW50b1xyXG4gICAgJ1tPYmplY3RdXHJcbiAgICAoLT4+IChzdHJpbmcvc3BsaXQgKG5hbWUgc3ltKSAjXCJcXC5cIikgKG1hcCBzeW1ib2wpIHZlYykpXVxyXG4gICh3aGVuLW5vdFxyXG4gICAoaGFzLWV4dGVybj8gcHJlKVxyXG4gICAoc3dhcCFcclxuICAgIGVudi8qY29tcGlsZXIqXHJcbiAgICB1cGRhdGUtaW5cclxuICAgIChpbnRvIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGN1cnJlbnQtbnMgOmV4dGVybnNdIHByZSlcclxuICAgIG1lcmdlXHJcbiAgICB7fSkpXHJcbiAgcHJlKSlcclxuIn0gezpzeW0gZ2V0LWNvbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4IGVudl0pfSwgOnNvdXJjZSAiKGRlZm4gZ2V0LWNvbCBbeCBlbnZdIChvciAoLT4geCBtZXRhIDpjb2x1bW4pICg6Y29sdW1uIGVudikpKVxyXG4ifSB7OnN5bSBiYXNpYy12YWxpZGF0ZS1ucy1zcGVjLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBtYWNyb3M/IHNwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiYXNpYy12YWxpZGF0ZS1ucy1zcGVjXHJcbiBbZW52IG1hY3Jvcz8gc3BlY11cclxuICh3aGVuLW5vdFxyXG4gIChvciAoc3ltYm9sPyBzcGVjKSAoc3RyaW5nPyBzcGVjKSAoc2VxdWVudGlhbD8gc3BlYykpXHJcbiAgKHRocm93XHJcbiAgIChlcnJvclxyXG4gICAgZW52XHJcbiAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgc3BlY1xyXG4gICAgIFwiT25seSBbbGliLm5zICYgb3B0aW9uc10gYW5kIGxpYi5ucyBzcGVjcyBzdXBwb3J0ZWQgaW4gOnJlcXVpcmUgLyA6cmVxdWlyZS1tYWNyb3NcIikpKSlcclxuICh3aGVuXHJcbiAgKHNlcXVlbnRpYWw/IHNwZWMpXHJcbiAgKHdoZW4tbm90XHJcbiAgIChvciAoc3ltYm9sPyAoZmlyc3Qgc3BlYykpIChzdHJpbmc/IChmaXJzdCBzcGVjKSkpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yXHJcbiAgICAgZW52XHJcbiAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICBzcGVjXHJcbiAgICAgIFwiTGlicmFyeSBuYW1lIG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgc3ltYm9sIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpXHJcbiAgKHdoZW4tbm90XHJcbiAgIChvZGQ/IChjb3VudCBzcGVjKSlcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3JcclxuICAgICBlbnZcclxuICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgIHNwZWNcclxuICAgICAgXCJPbmx5IDphcyBhbGlhcywgOnJlZmVyIChuYW1lcykgYW5kIDpyZW5hbWUge2Zyb20gdG99IG9wdGlvbnMgc3VwcG9ydGVkIGluIDpyZXF1aXJlXCIpKSkpXHJcbiAgKHdoZW4tbm90XHJcbiAgIChldmVyeT8gI3s6YXMgOnJlbmFtZSA6cmVmZXJ9IChtYXAgZmlyc3QgKHBhcnRpdGlvbiAyIChuZXh0IHNwZWMpKSkpXHJcbiAgICh0aHJvd1xyXG4gICAgKGVycm9yXHJcbiAgICAgZW52XHJcbiAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICBzcGVjXHJcbiAgICAgIFwiT25seSA6YXMsIDpyZWZlciBhbmQgOnJlbmFtZSBvcHRpb25zIHN1cHBvcnRlZCBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKVxyXG4gICh3aGVuLW5vdFxyXG4gICAobGV0XHJcbiAgICBbZnMgKGZyZXF1ZW5jaWVzIChuZXh0IHNwZWMpKV1cclxuICAgIChhbmQgKDw9IChmcyA6YXMgMCkgMSkgKDw9IChmcyA6cmVmZXIgMCkgMSkpKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvclxyXG4gICAgIGVudlxyXG4gICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgc3BlY1xyXG4gICAgICBcIkVhY2ggb2YgOmFzIGFuZCA6cmVmZXIgb3B0aW9ucyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSBpbiA6cmVxdWlyZSAvIDpyZXF1aXJlLW1hY3Jvc1wiKSkpKSkpXHJcbiJ9IHs6c3ltICpjbGpzLXdhcm5pbmdzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpjbGpzLXdhcm5pbmdzKlxyXG4gezppbnZva2UtY3RvciB0cnVlLFxyXG4gIDpleHRlbmRpbmctYmFzZS1qcy10eXBlIHRydWUsXHJcbiAgOnVuc3VwcG9ydGVkLXByZXByb2Nlc3MtdmFsdWUgdHJ1ZSxcclxuICA6cmVkZWYgdHJ1ZSxcclxuICA6anMtc2hhZG93ZWQtYnktbG9jYWwgdHJ1ZSxcclxuICA6dW5zdXBwb3J0ZWQtanMtbW9kdWxlLXR5cGUgdHJ1ZSxcclxuICA6aW52YWxpZC1wcm90b2NvbC1zeW1ib2wgdHJ1ZSxcclxuICA6cHJpdmF0ZS12YXItYWNjZXNzIHRydWUsXHJcbiAgOnByb3RvY29sLWR1cGVkLW1ldGhvZCB0cnVlLFxyXG4gIDptdW5nZWQtbmFtZXNwYWNlIHRydWUsXHJcbiAgOnNpbmdsZS1zZWdtZW50LW5hbWVzcGFjZSB0cnVlLFxyXG4gIDpmbi1hcml0eSB0cnVlLFxyXG4gIDppbmZlci13YXJuaW5nIGZhbHNlLFxyXG4gIDp2YXJpYWRpYy1tYXgtYXJpdHkgdHJ1ZSxcclxuICA6cHJvdG9jb2wtd2l0aC12YXJpYWRpYy1tZXRob2QgdHJ1ZSxcclxuICA6Zm4tZGVwcmVjYXRlZCB0cnVlLFxyXG4gIDp1bmRlY2xhcmVkLXZhciB0cnVlLFxyXG4gIDpkZWNsYXJlZC1hcmdsaXN0cy1taXNtYXRjaCB0cnVlLFxyXG4gIDpwcmVhbWJsZS1taXNzaW5nIHRydWUsXHJcbiAgOnVuZGVjbGFyZWQtcHJvdG9jb2wtc3ltYm9sIHRydWUsXHJcbiAgOnByb3RvY29sLXdpdGgtb3ZlcndyaXRpbmctbWV0aG9kIHRydWUsXHJcbiAgOmR5bmFtaWMgdHJ1ZSxcclxuICA6aW52YWxpZC1hcnJheS1hY2Nlc3MgdHJ1ZSxcclxuICA6dW5wcm92aWRlZCB0cnVlLFxyXG4gIDpucy12YXItY2xhc2ggdHJ1ZSxcclxuICA6dW5kZWNsYXJlZC1ucyB0cnVlLFxyXG4gIDpub24tZHluYW1pYy1lYXJtdWZmZWQtdmFyIHRydWUsXHJcbiAgOnVuZGVjbGFyZWQtbnMtZm9ybSB0cnVlLFxyXG4gIDppbnZhbGlkLWFyaXRobWV0aWMgdHJ1ZSxcclxuICA6cHJvdG9jb2wtZGVwcmVjYXRlZCB0cnVlLFxyXG4gIDpmbi12YXIgdHJ1ZSxcclxuICA6cHJvdG9jb2wtaW1wbC1yZWN1ci13aXRoLXRhcmdldCB0cnVlLFxyXG4gIDpvdmVybG9hZC1hcml0eSB0cnVlLFxyXG4gIDpwcm90b2NvbC1tdWx0aXBsZS1pbXBscyB0cnVlLFxyXG4gIDpyZWRlZi1pbi1maWxlIHRydWUsXHJcbiAgOnByb3RvY29sLWludmFsaWQtbWV0aG9kIHRydWUsXHJcbiAgOmV4dGVuZC10eXBlLWludmFsaWQtbWV0aG9kLXNoYXBlIHRydWUsXHJcbiAgOm11bHRpcGxlLXZhcmlhZGljLW92ZXJsb2FkcyB0cnVlLFxyXG4gIDpwcm90b2NvbC1pbXBsLXdpdGgtdmFyaWFkaWMtbWV0aG9kIHRydWV9KVxyXG4ifSB7OnN5bSBhbGlhcy0+dHlwZSwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGFsaWFzLT50eXBlXHJcbiAne29iamVjdCBPYmplY3QsXHJcbiAgIHN0cmluZyBTdHJpbmcsXHJcbiAgIG51bWJlciBOdW1iZXIsXHJcbiAgIGFycmF5IEFycmF5LFxyXG4gICBmdW5jdGlvbiBGdW5jdGlvbixcclxuICAgYm9vbGVhbiBCb29sZWFuLFxyXG4gICBzeW1ib2wgU3ltYm9sfSlcclxuIn0gezpzeW0gYW5hbHl6ZWQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyBib29sZWFuIGlmIHRoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIGFuYWx5emVkLiIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplZD9cclxuIFwiUmV0dXJucyBib29sZWFuIGlmIHRoZSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gbWFya2VkIGFzIGFuYWx5emVkLlwiXHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFt4XVxyXG4gKGJvb2xlYW5cclxuICAoY29uZFxyXG4gICAodW5zb3J0ZWQtbWFwPyB4KVxyXG4gICAoOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQgeClcclxuICAgOmVsc2VcclxuICAgKDpjbGpzLmFuYWx5emVyL2FuYWx5emVkIChtZXRhIHgpKSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLWRlcHMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIGxpYiwgYSBuYW1lc3BhY2UsIGRlcHMsIGl0cyBkZXBlbmRlbmNpZXMsIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnRcbiAgIGFuZCBvcHRzLCBjb21waWxlciBvcHRpb25zIC0gYW5hbHl6ZSBhbGwgb2YgdGhlIGRlcGVuZGVuY2llcy4gUmVxdWlyZWQgdG9cbiAgIGNvcnJlY3RseSBhbmFseXplIHVzYWdlIG9mIG90aGVyIG5hbWVzcGFjZXMuIiwgOmFyZ2xpc3RzIFtbbGliIGRlcHMgZW52XSBbbGliIGRlcHMgZW52IG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWRlcHNcclxuIFwiR2l2ZW4gYSBsaWIsIGEgbmFtZXNwYWNlLCBkZXBzLCBpdHMgZGVwZW5kZW5jaWVzLCBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50XFxuICAgYW5kIG9wdHMsIGNvbXBpbGVyIG9wdGlvbnMgLSBhbmFseXplIGFsbCBvZiB0aGUgZGVwZW5kZW5jaWVzLiBSZXF1aXJlZCB0b1xcbiAgIGNvcnJlY3RseSBhbmFseXplIHVzYWdlIG9mIG90aGVyIG5hbWVzcGFjZXMuXCJcclxuIChbbGliIGRlcHMgZW52XVxyXG4gIChhbmFseXplLWRlcHNcclxuICAgbGliXHJcbiAgIGRlcHNcclxuICAgZW52XHJcbiAgICh3aGVuIGVudi8qY29tcGlsZXIqICg6b3B0aW9ucyBAZW52Lypjb21waWxlciopKSkpXHJcbiAoW2xpYiBkZXBzIGVudiBvcHRzXVxyXG4gIChsZXRcclxuICAgW2NvbXBpbGVyIEBlbnYvKmNvbXBpbGVyKl1cclxuICAgKGJpbmRpbmdcclxuICAgIFsqY2xqcy1kZXAtc2V0KlxyXG4gICAgICh2YXJ5LW1ldGFcclxuICAgICAgKGNvbmogKmNsanMtZGVwLXNldCogbGliKVxyXG4gICAgICB1cGRhdGUtaW5cclxuICAgICAgWzpkZXAtcGF0aF1cclxuICAgICAgY29ualxyXG4gICAgICBsaWIpXVxyXG4gICAgKGFzc2VydFxyXG4gICAgIChldmVyeT9cclxuICAgICAgKGZuKiBbcDFfXzQ4NjExI10gKG5vdCAoY29udGFpbnM/ICpjbGpzLWRlcC1zZXQqIHAxX180ODYxMSMpKSlcclxuICAgICAgZGVwcylcclxuICAgICAoc3RyXHJcbiAgICAgIFwiQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZCwgXCJcclxuICAgICAgKGFwcGx5XHJcbiAgICAgICBzdHJcclxuICAgICAgIChpbnRlcnBvc2VcclxuICAgICAgICBcIiAtPiBcIlxyXG4gICAgICAgIChjb25qXHJcbiAgICAgICAgICgtPiAqY2xqcy1kZXAtc2V0KiBtZXRhIDpkZXAtcGF0aClcclxuICAgICAgICAgKHNvbWUgKmNsanMtZGVwLXNldCogZGVwcykpKSkpKVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW2RlcCBkZXBzXVxyXG4gICAgICh3aGVuLW5vdFxyXG4gICAgICAob3JcclxuICAgICAgIChzb21lPyAoZ2V0LWluIGNvbXBpbGVyIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGRlcCA6ZGVmc10pKVxyXG4gICAgICAgKG5vZGUtbW9kdWxlLWRlcD8gZGVwKVxyXG4gICAgICAgKGpzLW1vZHVsZS1leGlzdHM/IChuYW1lIGRlcCkpXHJcbiAgICAgICAjPyg6Y2xqIChkZXBzL2ZpbmQtY2xhc3NwYXRoLWxpYiBkZXApKSlcclxuICAgICAgKGlmXHJcbiAgICAgICAoY29udGFpbnM/ICg6anMtZGVwZW5kZW5jeS1pbmRleCBjb21waWxlcikgKG5hbWUgZGVwKSlcclxuICAgICAgIChsZXRcclxuICAgICAgICBbZGVwLW5hbWUgKG5hbWUgZGVwKV1cclxuICAgICAgICAod2hlblxyXG4gICAgICAgICAoc3RyaW5nL3N0YXJ0cy13aXRoPyBkZXAtbmFtZSBcImdvb2cuXCIpXHJcbiAgICAgICAgICM/KDpjbGogKGxldCBbanMtbGliIChnZXQtaW4gY29tcGlsZXIgWzpqcy1kZXBlbmRlbmN5LWluZGV4IGRlcC1uYW1lXSkgbnMgKGV4dGVybnMvYW5hbHl6ZS1nb29nLWZpbGUgKDpmaWxlIGpzLWxpYikgKHN5bWJvbCBkZXAtbmFtZSkpXSAoc3dhcCEgZW52Lypjb21waWxlciogdXBkYXRlLWluIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIGRlcF0gbWVyZ2UgbnMpKSkpKVxyXG4gICAgICAgIz8oOmNsaiAoaWYtc29tZSBbc3JjIChsb2NhdGUtc3JjIGRlcCldIChhbmFseXplLWZpbGUgc3JjIG9wdHMpICh0aHJvdyAoZXJyb3IgZW52IChlcnJvci1tZXNzYWdlIDp1bmRlY2xhcmVkLW5zIHs6bnMtc3ltIGRlcCwgOmpzLXByb3ZpZGUgKG5hbWUgZGVwKX0pKSkpIDpjbGpzICh0aHJvdyAoZXJyb3IgZW52IChlcnJvci1tZXNzYWdlIDp1bmRlY2xhcmVkLW5zIHs6bnMtc3ltIGRlcCwgOmpzLXByb3ZpZGUgKG5hbWUgZGVwKX0pKSkpKSkpKSkpKVxyXG4ifSB7OnN5bSBhcnJheS10eXBlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0XSl9LCA6c291cmNlICIoZGVmblxyXG4gYXJyYXktdHlwZT9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW3RdXHJcbiAoY29uZFxyXG4gIChuaWw/IHQpXHJcbiAgdHJ1ZVxyXG4gICg9ICdjbGotbmlsIHQpXHJcbiAgdHJ1ZVxyXG4gIChqcy10YWc/IHQpXHJcbiAgdHJ1ZVxyXG4gICg9ICdhbnkgdClcclxuICB0cnVlXHJcbiAgKGNvbnRhaW5zPyBhcnJheS10eXBlcyB0KVxyXG4gIHRydWVcclxuICA6ZWxzZVxyXG4gIChib29sZWFuXHJcbiAgICh3aGVuXHJcbiAgICAjPyg6Y2xqIChzZXQ/IHQpIDpjbGpzIChjbGpzLXNldD8gdCkpXHJcbiAgICAob3IgKGNvbnRhaW5zPyB0ICdhbnkpIChjb250YWlucz8gdCAnanMpIChzb21lIGFycmF5LXR5cGVzIHQpKSkpKSlcclxuIn0gezpzeW0gZG90dGVkLXN5bWJvbD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gZG90dGVkLXN5bWJvbD9cclxuIFtzeW1dXHJcbiAobGV0XHJcbiAgW3MgKHN0ciBzeW0pXVxyXG4gICM/KDpjbGogKGFuZCAoLmNvbnRhaW5zIHMgXCIuXCIpIChub3QgKC5jb250YWlucyBzIFwiLi5cIikpKSA6Y2xqcyAoYW5kIChnb29nLnN0cmluZy9jb250YWlucyBzIFwiLlwiKSAobm90IChnb29nLnN0cmluZy9jb250YWlucyBzIFwiLi5cIikpKSkpKVxyXG4ifSB7OnN5bSAqY2xqcy1tYWNyb3MtaXMtY2xhc3NwYXRoKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtbWFjcm9zLWlzLWNsYXNzcGF0aCogdHJ1ZSlcclxuIn0gezpzeW0gKmFsbG93LXJlZGVmKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmFsbG93LXJlZGVmKiBmYWxzZSlcclxuIn0gezpzeW0gYW5hbHl6ZS1mbi1tZXRob2QtYm9keSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybSByZWN1ci1mcmFtZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWZuLW1ldGhvZC1ib2R5XHJcbiBbZW52IGZvcm0gcmVjdXItZnJhbWVzXVxyXG4gKGJpbmRpbmcgWypyZWN1ci1mcmFtZXMqIHJlY3VyLWZyYW1lc10gKGFuYWx5emUgZW52IGZvcm0pKSlcclxuIn0gezpzeW0gaW5mZXItdHlwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgezprZXlzIFt0YWddLCA6YXMgYXN0fSBfXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXItdHlwZVxyXG4gW2VudiB7OmtleXMgW3RhZ10sIDphcyBhc3R9IF9dXHJcbiAoaWZcclxuICAob3IgKG5pbD8gdGFnKSAoPSAnZnVuY3Rpb24gdGFnKSlcclxuICAoaWZcclxuICAgKD0gOmZuICg6b3AgYXN0KSlcclxuICAgKHVwZGF0ZVxyXG4gICAgYXN0XHJcbiAgICA6bWV0aG9kc1xyXG4gICAgKGZuXHJcbiAgICAgW21zXVxyXG4gICAgIChpbnRvXHJcbiAgICAgIFtdXHJcbiAgICAgIChtYXAgKGZuKiBbcDFfXzQ4NjQzI10gKGluZmVyLXR5cGUgZW52IHAxX180ODY0MyMgXykpKVxyXG4gICAgICBtcykpKVxyXG4gICAoaWYtc29tZSBbdGFnIChpbmZlci10YWcgZW52IGFzdCldIChhc3NvYyBhc3QgOnRhZyB0YWcpIGFzdCkpXHJcbiAgYXN0KSlcclxuIn0gezpzeW0gcGFyc2UtaW1wb3J0LXNwZWMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGRlcHMgc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLWltcG9ydC1zcGVjXHJcbiBbZW52IGRlcHMgc3BlY11cclxuICh3aGVuLW5vdFxyXG4gIChvclxyXG4gICAoYW5kIChzZXF1ZW50aWFsPyBzcGVjKSAoZXZlcnk/IHN5bWJvbD8gc3BlYykpXHJcbiAgIChhbmQgKHN5bWJvbD8gc3BlYykgKG5pbD8gKG5hbWVzcGFjZSBzcGVjKSkpKVxyXG4gICh0aHJvd1xyXG4gICAoZXJyb3JcclxuICAgIGVudlxyXG4gICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgIHNwZWNcclxuICAgICBcIk9ubHkgbGliLm5zLkN0b3Igb3IgW2xpYi5ucyBDdG9yKl0gc3BlYyBzdXBwb3J0ZWQgaW4gOmltcG9ydFwiKSkpKVxyXG4gKGxldFxyXG4gIFtpbXBvcnQtbWFwXHJcbiAgIChjb25kXHJcbiAgICAoc2VxdWVudGlhbD8gc3BlYylcclxuICAgICgtPj5cclxuICAgICAocmVzdCBzcGVjKVxyXG4gICAgIChtYXBcclxuICAgICAgKGZuKlxyXG4gICAgICAgW3AxX180ODYyMCNdXHJcbiAgICAgICAodmVjdG9yIHAxX180ODYyMCMgKHN5bWJvbCAoc3RyIChmaXJzdCBzcGVjKSBcIi5cIiBwMV9fNDg2MjAjKSkpKSlcclxuICAgICAoaW50byB7fSkpXHJcbiAgICAobm90ICg9PSAtMSAoLmluZGV4T2YgKHN0ciBzcGVjKSBcIi5cIikpKVxyXG4gICAgeyhzeW1ib2wgKGxhc3QgKHN0cmluZy9zcGxpdCAoc3RyIHNwZWMpICNcIlxcLlwiKSkpIHNwZWN9XHJcbiAgICA6ZWxzZVxyXG4gICAge30pXVxyXG4gIChkb3NlcSBbW18gc3BlY10gaW1wb3J0LW1hcF0gKHN3YXAhIGRlcHMgY29uaiBzcGVjKSlcclxuICB7OmltcG9ydCBpbXBvcnQtbWFwLCA6cmVxdWlyZSBpbXBvcnQtbWFwfSkpXHJcbiJ9IHs6c3ltIGNsai1ucy0+Y2xqcy1ucywgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3ltYm9sIHRoYXQgc3RhcnRzIHdpdGggY2xvanVyZSBhcyB0aGUgZmlyc3Qgc2VnbWVudCByZXR1cm4gdGhlXG4gICBzYW1lIHN5bWJvbCB3aXRoIHRoZSBmaXJzdCBzZWdtZW50IHJlcGxhY2VkIHdpdGggY2xqcyIsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNsai1ucy0+Y2xqcy1uc1xyXG4gXCJHaXZlbiBhIHN5bWJvbCB0aGF0IHN0YXJ0cyB3aXRoIGNsb2p1cmUgYXMgdGhlIGZpcnN0IHNlZ21lbnQgcmV0dXJuIHRoZVxcbiAgIHNhbWUgc3ltYm9sIHdpdGggdGhlIGZpcnN0IHNlZ21lbnQgcmVwbGFjZWQgd2l0aCBjbGpzXCJcclxuIFtzeW1dXHJcbiAobGV0XHJcbiAgW3NlZ3MgKHN0cmluZy9zcGxpdCAoY2xvanVyZS5jb3JlL25hbWUgc3ltKSAjXCJcXC5cIildXHJcbiAgKGlmXHJcbiAgICg9IFwiY2xvanVyZVwiIChmaXJzdCBzZWdzKSlcclxuICAgKHN5bWJvbCAoc3RyaW5nL2pvaW4gXCIuXCIgKGNvbnMgXCJjbGpzXCIgKG5leHQgc2VncykpKSlcclxuICAgc3ltKSkpXHJcbiJ9IHs6c3ltIGNvbnN0YW50LXZhbHVlPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW29wXSwgOmFzIGFzdH1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25zdGFudC12YWx1ZT9cclxuIFt7OmtleXMgW29wXSwgOmFzIGFzdH1dXHJcbiAob3JcclxuICAoI3s6Y29uc3QgOnF1b3RlfSBvcClcclxuICAoYW5kXHJcbiAgICgjezp2ZWN0b3IgOnNldCA6bWFwfSBvcClcclxuICAgKGV2ZXJ5PyBjb25zdGFudC12YWx1ZT8gKGFzdC1jaGlsZHJlbiBhc3QpKSkpKVxyXG4ifSB7OnN5bSBkdW1wLXNwZWNzLCA6bWV0YSB7OmRvYyAiRHVtcHMgcmVnaXN0ZXJlZCBzcGVjZWQgdmFycyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UgaW50byB0aGUgY29tcGlsZXJcbiAgZW52aXJvbm1lbnQuIiwgOmFyZ2xpc3RzIChbbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkdW1wLXNwZWNzXHJcbiBcIkR1bXBzIHJlZ2lzdGVyZWQgc3BlY2VkIHZhcnMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlIGludG8gdGhlIGNvbXBpbGVyXFxuICBlbnZpcm9ubWVudC5cIlxyXG4gW25zXVxyXG4gKGxldFxyXG4gIFtzcGVjLXZhcnMgKGdldC1zcGVjLXZhcnMpIG5zLXN0ciAoc3RyIG5zKV1cclxuICAoc3dhcCFcclxuICAgZW52Lypjb21waWxlcipcclxuICAgdXBkYXRlLWluXHJcbiAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zXVxyXG4gICBtZXJnZVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtyZWdpc3RyeS1yZWYgKDpyZWdpc3RyeS1yZWYgc3BlYy12YXJzKV1cclxuICAgIHs6Y2xqcy5zcGVjL3JlZ2lzdHJ5LXJlZlxyXG4gICAgIChpbnRvXHJcbiAgICAgIFtdXHJcbiAgICAgIChmaWx0ZXIgKGZuIFtbayBfXV0gKD0gbnMtc3RyIChuYW1lc3BhY2UgaykpKSlcclxuICAgICAgQEByZWdpc3RyeS1yZWYpfSlcclxuICAgKHdoZW4tbGV0XHJcbiAgICBbc3BlY2VkLXZhcnMgKDpzcGVjZWQtdmFycyBzcGVjLXZhcnMpXVxyXG4gICAgezpjbGpzLnNwZWMvc3BlY2VkLXZhcnNcclxuICAgICAoaW50b1xyXG4gICAgICBbXVxyXG4gICAgICAoZmlsdGVyXHJcbiAgICAgICAoZm5cclxuICAgICAgICBbdl1cclxuICAgICAgICAob3IgKD0gbnMtc3RyIChuYW1lc3BhY2UgdikpICg9IG5zICgtPiB2IG1ldGEgOmZkZWYtbnMpKSkpKVxyXG4gICAgICBAQHNwZWNlZC12YXJzKX0pKSkpXHJcbiJ9IHs6c3ltICpmbi1pbnZva2UtZGlyZWN0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmZuLWludm9rZS1kaXJlY3QqIGZhbHNlKVxyXG4ifSB7OnN5bSB1c2UtPnJlcXVpcmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IFtsaWIgJiBmaWx0ZXJzIDphcyBzcGVjXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHVzZS0+cmVxdWlyZVxyXG4gW2VudiBbbGliICYgZmlsdGVycyA6YXMgc3BlY11dXHJcbiAod2hlbi1ub3RcclxuICAoYW5kIChzeW1ib2w/IGxpYikgKG9kZD8gKGNvdW50IHNwZWMpKSlcclxuICAodGhyb3dcclxuICAgKGVycm9yXHJcbiAgICBlbnZcclxuICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICBzcGVjXHJcbiAgICAgXCJPbmx5IFtsaWIubnMgOm9ubHkgKG5hbWVzKV0gYW5kIG9wdGlvbmFsbHkgYDpyZW5hbWUge2Zyb20gdG99YCBzcGVjcyBzdXBwb3J0ZWQgaW4gOnVzZSAvIDp1c2UtbWFjcm9zXCIpKSkpXHJcbiAobG9vcFxyXG4gIFtmcyAoc2VxIGZpbHRlcnMpIHJldCBbbGliXSBlcnIgZmFsc2VdXHJcbiAgKGNvbmRcclxuICAgKHRydWU/IGVycilcclxuICAgKHRocm93XHJcbiAgICAoZXJyb3JcclxuICAgICBlbnZcclxuICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgIHNwZWNcclxuICAgICAgXCJPbmx5IFtsaWIubnMgOm9ubHkgKG5hbWVzKV0gYW5kIG9wdGlvbmFsbHkgYDpyZW5hbWUge2Zyb20gdG99YCBzcGVjcyBzdXBwb3J0ZWQgaW4gOnVzZSAvIDp1c2UtbWFjcm9zXCIpKSlcclxuICAgKHNvbWU/IGZzKVxyXG4gICAobGV0XHJcbiAgICBba3cgKGZpcnN0IGZzKSBvbmx5PyAoPSBrdyA6b25seSldXHJcbiAgICAoaWZcclxuICAgICAob3Igb25seT8gKD0ga3cgOnJlbmFtZSkpXHJcbiAgICAgKGlmXHJcbiAgICAgIChzb21lPyAoc29tZSAjeyhpZiBvbmx5PyA6cmVmZXIga3cpfSByZXQpKVxyXG4gICAgICAodGhyb3dcclxuICAgICAgIChlcnJvclxyXG4gICAgICAgIGVudlxyXG4gICAgICAgIChwYXJzZS1ucy1lcnJvci1tc2dcclxuICAgICAgICAgc3BlY1xyXG4gICAgICAgICBcIkVhY2ggb2YgOm9ubHkgYW5kIDpyZW5hbWUgb3B0aW9ucyBtYXkgb25seSBiZSBzcGVjaWZpZWQgb25jZSBpbiA6dXNlIC8gOnVzZS1tYWNyb3NcIikpKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcmVmcyAoc2Vjb25kIGZzKV1cclxuICAgICAgIChpZi1ub3RcclxuICAgICAgICAob3JcclxuICAgICAgICAgKGFuZCBvbmx5PyAoc2VxdWVudGlhbD8gcmVmcykgKGV2ZXJ5PyBzeW1ib2w/IHJlZnMpKVxyXG4gICAgICAgICAoYW5kXHJcbiAgICAgICAgICAoPSBrdyA6cmVuYW1lKVxyXG4gICAgICAgICAgKG1hcD8gcmVmcylcclxuICAgICAgICAgIChldmVyeT9cclxuICAgICAgICAgICAoZm4qIFtwMV9fNDg2MTkjXSAoZXZlcnk/IHN5bWJvbD8gcDFfXzQ4NjE5IykpXHJcbiAgICAgICAgICAgcmVmcykpKVxyXG4gICAgICAgIChyZWN1ciBmcyByZXQgdHJ1ZSlcclxuICAgICAgICAocmVjdXJcclxuICAgICAgICAgKG5uZXh0IGZzKVxyXG4gICAgICAgICAoaW50byByZXQgWyhpZiBvbmx5PyA6cmVmZXIga3cpIHJlZnNdKVxyXG4gICAgICAgICBmYWxzZSkpKSlcclxuICAgICAocmVjdXIgZnMgcmV0IHRydWUpKSlcclxuICAgOmVsc2VcclxuICAgKGlmIChzb21lPyAoc29tZSAjezpyZWZlcn0gcmV0KSkgcmV0IChyZWN1ciBmcyByZXQgdHJ1ZSkpKSkpXHJcbiJ9IHs6c3ltIGluZmVycmVkLXVzZS1tYWNyb3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdXNlLW1hY3JvcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmZlcnJlZC11c2UtbWFjcm9zXHJcbiBbdXNlLW1hY3JvcyBlbnZdXHJcbiAobGV0XHJcbiAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gIChpbnRvXHJcbiAgIHt9XHJcbiAgIChmaWx0ZXJcclxuICAgIChmbiBbW3N5bSBsaWJdXSAobm90IChtaXNzaW5nLXVzZS1tYWNybz8gbGliIHN5bSkpKVxyXG4gICAgdXNlLW1hY3JvcykpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1zeW1ib2wsIDptZXRhIHs6ZG9jICJGaW5kcyB0aGUgdmFyIGFzc29jaWF0ZWQgd2l0aCBzeW0iLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1zeW1ib2xcclxuIFwiRmluZHMgdGhlIHZhciBhc3NvY2lhdGVkIHdpdGggc3ltXCJcclxuIFtlbnYgc3ltXVxyXG4gKGlmXHJcbiAgKDpxdW90ZWQ/IGVudilcclxuICAoZG9cclxuICAgKHJlZ2lzdGVyLWNvbnN0YW50ISBlbnYgc3ltKVxyXG4gICAoYW5hbHl6ZS13cmFwLW1ldGFcclxuICAgIHs6b3AgOmNvbnN0LFxyXG4gICAgIDp2YWwgc3ltLFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIHN5bSxcclxuICAgICA6dGFnICdjbGpzLmNvcmUvU3ltYm9sfSkpXHJcbiAgKGxldFxyXG4gICBbezprZXlzIFtsaW5lIGNvbHVtbl19XHJcbiAgICAobWV0YSBzeW0pXHJcbiAgICBlbnZcclxuICAgIChpZi1ub3QgKG5pbD8gbGluZSkgKGFzc29jIGVudiA6bGluZSBsaW5lKSBlbnYpXHJcbiAgICBlbnZcclxuICAgIChpZi1ub3QgKG5pbD8gY29sdW1uKSAoYXNzb2MgZW52IDpjb2x1bW4gY29sdW1uKSBlbnYpXHJcbiAgICByZXRcclxuICAgIHs6ZW52IGVudiwgOmZvcm0gc3ltfVxyXG4gICAgbGNsc1xyXG4gICAgKDpsb2NhbHMgZW52KV1cclxuICAgKGlmLXNvbWVcclxuICAgIFtsYiAoaGFuZGxlLXN5bWJvbC1sb2NhbCBzeW0gKGdldCBsY2xzIHN5bSkpXVxyXG4gICAgKG1lcmdlXHJcbiAgICAgKGFzc29jIHJldCA6b3AgOmxvY2FsIDppbmZvIGxiKVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChtYXA/IGxiKVxyXG4gICAgICAoc2VsZWN0LWtleXMgbGIgWzpuYW1lIDpsb2NhbCA6YXJnLWlkIDp2YXJpYWRpYz8gOmluaXRdKSkpXHJcbiAgICAobGV0XHJcbiAgICAgW3N5bS1tZXRhXHJcbiAgICAgIChtZXRhIHN5bSlcclxuICAgICAgc3ltLW5zXHJcbiAgICAgIChuYW1lc3BhY2Ugc3ltKVxyXG4gICAgICBjdXItbnNcclxuICAgICAgKHN0ciAoLT4gZW52IDpucyA6bmFtZSkpXHJcbiAgICAgICM/QCg6Y2xqcyBbc3ltIChpZiAoYW5kIHN5bS1ucyAobm90PSBzeW0tbnMgXCJjbGpzLmNvcmVcIikgKGdzdHJpbmcvZW5kc1dpdGggY3VyLW5zIFwiJG1hY3Jvc1wiKSAobm90IChnc3RyaW5nL2VuZHNXaXRoIHN5bS1ucyBcIiRtYWNyb3NcIikpICg9IHN5bS1ucyAoc3VicyBjdXItbnMgMCAoLSAoY291bnQgY3VyLW5zKSA3KSkpKSAoc3ltYm9sIChzdHIgc3ltLW5zIFwiJG1hY3Jvc1wiKSAobmFtZSBzeW0pKSBzeW0pXSlcclxuICAgICAgaW5mb1xyXG4gICAgICAoaWYtbm90XHJcbiAgICAgICAoY29udGFpbnM/IHN5bS1tZXRhIDpjbGpzLmFuYWx5emVyL2FuYWx5emVkKVxyXG4gICAgICAgKHJlc29sdmUtZXhpc3RpbmctdmFyIGVudiBzeW0pXHJcbiAgICAgICAocmVzb2x2ZS12YXIgZW52IHN5bSkpXVxyXG4gICAgIChhc3NlcnQgKDpvcCBpbmZvKSAoOm9wIGluZm8pKVxyXG4gICAgIChkZXN1Z2FyLWRvdHRlZC1leHByXHJcbiAgICAgIChpZi1ub3RcclxuICAgICAgICh0cnVlPyAoOmRlZi12YXIgZW52KSlcclxuICAgICAgIChtZXJnZVxyXG4gICAgICAgIChhc3NvYyByZXQgOmluZm8gaW5mbylcclxuICAgICAgICAoc2VsZWN0LWtleXMgaW5mbyBbOm9wIDpuYW1lIDpucyA6dGFnXSlcclxuICAgICAgICAod2hlbi1sZXRcclxuICAgICAgICAgW2NvbnN0LWV4cHIgKDpjb25zdC1leHByIGluZm8pXVxyXG4gICAgICAgICB7OmNvbnN0LWV4cHIgY29uc3QtZXhwcn0pKVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtpbmZvIChyZXNvbHZlLXZhciBlbnYgc3ltKV1cclxuICAgICAgICAobWVyZ2VcclxuICAgICAgICAgKGFzc29jIHJldCA6b3AgOnZhciA6aW5mbyBpbmZvKVxyXG4gICAgICAgICAoc2VsZWN0LWtleXMgaW5mbyBbOm9wIDpuYW1lIDpucyA6dGFnXSkpKSkpKSkpKSlcclxuIn0gezpzeW0gY29uZmlybS12YXItZXhpc3RzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2VudiBwcmVmaXggc3VmZml4XSBbZW52IHByZWZpeCBzdWZmaXggbWlzc2luZy1mbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbmZpcm0tdmFyLWV4aXN0c1xyXG4gKFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuICAobGV0XHJcbiAgIFt3YXJuIChjb25maXJtLXZhci1leGlzdC13YXJuaW5nIGVudiBwcmVmaXggc3VmZml4KV1cclxuICAgKGNvbmZpcm0tdmFyLWV4aXN0cyBlbnYgcHJlZml4IHN1ZmZpeCB3YXJuKSkpXHJcbiAoW2VudiBwcmVmaXggc3VmZml4IG1pc3NpbmctZm5dXHJcbiAgKGxldFxyXG4gICBbc3Vmc3RyXHJcbiAgICAoc3RyIHN1ZmZpeClcclxuICAgIHN1ZmZpeC1zdHJcclxuICAgIChpZlxyXG4gICAgIChhbmRcclxuICAgICAgIz8oOmNsaiAobm90PSBcIi4uXCIgc3Vmc3RyKSA6Y2xqcyAobm90IChpZGVudGljYWw/IFwiLi5cIiBzdWZzdHIpKSlcclxuICAgICAgIz8oOmNsaiAocmUtZmluZCAjXCJcXC5cIiBzdWZzdHIpIDpjbGpzICgudGVzdCAjXCJcXC5cIiBzdWZzdHIpKSlcclxuICAgICAoZmlyc3QgKHN0cmluZy9zcGxpdCBzdWZzdHIgI1wiXFwuXCIpKVxyXG4gICAgIHN1ZmZpeClcclxuICAgIHN1ZmZpeFxyXG4gICAgKHN5bWJvbCBzdWZmaXgtc3RyKV1cclxuICAgKHdoZW5cclxuICAgIChhbmRcclxuICAgICAobm90IChpbXBsaWNpdC1pbXBvcnQ/IGVudiBwcmVmaXggc3VmZml4KSlcclxuICAgICAobm90IChsb2FkZWQtanMtbnM/IGVudiBwcmVmaXgpKVxyXG4gICAgIChub3QgKGFuZCAoPSAnY2xqcy5jb3JlIHByZWZpeCkgKD0gJ3VucXVvdGUgc3VmZml4KSkpXHJcbiAgICAgKG5pbD9cclxuICAgICAgKGdldHNcclxuICAgICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICAgOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlc1xyXG4gICAgICAgcHJlZml4XHJcbiAgICAgICA6ZGVmc1xyXG4gICAgICAgc3VmZml4KSlcclxuICAgICAobm90IChqcy1tb2R1bGUtZXhpc3RzPyBwcmVmaXgpKSlcclxuICAgIChtaXNzaW5nLWZuIGVudiBwcmVmaXggc3VmZml4KSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1rZXl3b3JkLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWtleXdvcmRcclxuIFtlbnYgc3ltXVxyXG4gKHJlZ2lzdGVyLWNvbnN0YW50ISBlbnYgc3ltKVxyXG4gezpvcCA6Y29uc3QsIDp2YWwgc3ltLCA6ZW52IGVudiwgOmZvcm0gc3ltLCA6dGFnICdjbGpzLmNvcmUvS2V5d29yZH0pXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LWJpbmRpbmdzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VuY2wtZW52IGJpbmRpbmdzIG9wXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXQtYmluZGluZ3NcclxuIFtlbmNsLWVudiBiaW5kaW5ncyBvcF1cclxuIChkaXNhbGxvd2luZy1yZWN1ciAoYW5hbHl6ZS1sZXQtYmluZGluZ3MqIGVuY2wtZW52IGJpbmRpbmdzIG9wKSkpXHJcbiJ9IHs6c3ltIG11bmdlLWdsb2JhbC1leHBvcnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbmFtZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG11bmdlLWdsb2JhbC1leHBvcnRcclxuIFtuYW1lXVxyXG4gKHN0clxyXG4gIFwiZ2xvYmFsJG1vZHVsZSRcIlxyXG4gIChtdW5nZVxyXG4gICAoc3RyaW5nL3JlcGxhY2UgKHN0ciBuYW1lKSAjXCJbLlxcL11cIiAjPyg6Y2xqIFwiXFxcXCRcIiA6Y2xqcyBcIiQkXCIpKSkpKVxyXG4ifSB7OnN5bSAqbG9vcC1sZXRzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmxvb3AtbGV0cyogKCkpXHJcbiJ9IHs6c3ltIC0+dHlwZS1zZXQsIDptZXRhIHs6ZG9jICJFbnN1cmVzIHRoYXQgYSB0eXBlIHRhZyBpcyBhIHNldC4iLCA6YXJnbGlzdHMgKFt0XSl9LCA6c291cmNlICIoZGVmblxyXG4gLT50eXBlLXNldFxyXG4gXCJFbnN1cmVzIHRoYXQgYSB0eXBlIHRhZyBpcyBhIHNldC5cIlxyXG4gW3RdXHJcbiAoaWYgIz8oOmNsaiAoc2V0PyB0KSA6Y2xqcyAoY2xqcy1zZXQ/IHQpKSB0ICN7dH0pKVxyXG4ifSB7OnN5bSBqcy10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbcHJlXSBbcHJlIHRhZy10eXBlXSBbcHJlIHRhZy10eXBlIGV4dGVybnNdIFtwcmUgdGFnLXR5cGUgZXh0ZXJucyB0b3BdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBqcy10YWdcclxuIChbcHJlXSAoanMtdGFnIHByZSA6dGFnKSlcclxuIChbcHJlIHRhZy10eXBlXSAoanMtdGFnIHByZSB0YWctdHlwZSAoZ2V0LWV4dGVybnMpKSlcclxuIChbcHJlIHRhZy10eXBlIGV4dGVybnNdIChqcy10YWcgcHJlIHRhZy10eXBlIGV4dGVybnMgZXh0ZXJucykpXHJcbiAoW3ByZSB0YWctdHlwZSBleHRlcm5zIHRvcF1cclxuICAod2hlbi1sZXRcclxuICAgW1twIGV4dGVybnMnIDphcyBtZV0gKGZpbmQgZXh0ZXJucyAoZmlyc3QgcHJlKSldXHJcbiAgIChsZXRcclxuICAgIFt0YWcgKC0+IHAgbWV0YSB0YWctdHlwZSldXHJcbiAgICAoaWZcclxuICAgICAoPSAoY291bnQgcHJlKSAxKVxyXG4gICAgICh3aGVuIHRhZyAoc3ltYm9sIFwianNcIiAoc3RyIChhbGlhcy0+dHlwZSB0YWcgdGFnKSkpKVxyXG4gICAgIChvclxyXG4gICAgICAoanMtdGFnIChuZXh0IHByZSkgdGFnLXR5cGUgZXh0ZXJucycgdG9wKVxyXG4gICAgICAoanMtdGFnXHJcbiAgICAgICAoaW50byAnW3Byb3RvdHlwZV0gKG5leHQgcHJlKSlcclxuICAgICAgIHRhZy10eXBlXHJcbiAgICAgICAoZ2V0IHRvcCB0YWcpXHJcbiAgICAgICB0b3ApKSkpKSkpXHJcbiJ9IHs6c3ltIGpzLXJlc2VydmVkLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4ganMtcmVzZXJ2ZWRcclxuICN7XCJ0eXBlb2ZcIiBcImZsb2F0XCIgXCJpbXBsZW1lbnRzXCIgXCJlbHNlXCIgXCJib29sZWFuXCIgXCJhYnN0cmFjdFwiIFwiaW50XCJcclxuICAgXCJzdGF0aWNcIiBcInBhY2thZ2VcIiBcInRoaXNcIiBcImF3YWl0XCIgXCJ5aWVsZFwiIFwiaW50ZXJmYWNlXCIgXCJ2b2lkXCJcclxuICAgXCJkZWxldGVcIiBcImNsYXNzXCIgXCJleHBvcnRcIiBcInZhclwiIFwidHJ5XCIgXCJsb25nXCIgXCJudWxsXCIgXCJyZXR1cm5cIlxyXG4gICBcIm1ldGhvZHNcIiBcIm5hdGl2ZVwiIFwicHJpdmF0ZVwiIFwibmV3XCIgXCJmb3JcIiBcImNhdGNoXCIgXCJleHRlbmRzXCIgXCJzaG9ydFwiXHJcbiAgIFwicHJvdGVjdGVkXCIgXCJ0aHJvd3NcIiBcInN5bmNocm9uaXplZFwiIFwidHJhbnNpZW50XCIgXCJzdXBlclwiIFwiaWZcIiBcImxldFwiXHJcbiAgIFwiaW1wb3J0XCIgXCJjaGFyXCIgXCJzd2l0Y2hcIiBcImNvbnN0XCIgXCJjYXNlXCIgXCJicmVha1wiIFwidm9sYXRpbGVcIlxyXG4gICBcImZ1bmN0aW9uXCIgXCJjb250aW51ZVwiIFwiZmluYWxcIiBcImRvXCIgXCJkb3VibGVcIiBcIndoaWxlXCIgXCJwdWJsaWNcIlxyXG4gICBcImFyZ3VtZW50c1wiIFwiZGVidWdnZXJcIiBcIndpdGhcIiBcImluc3RhbmNlb2ZcIiBcImRlZmF1bHRcIiBcInRocm93XCIgXCJnb3RvXCJcclxuICAgXCJmaW5hbGx5XCIgXCJieXRlXCIgXCJjb25zdHJ1Y3RvclwiIFwiaW5cIiBcImVudW1cIn0pXHJcbiJ9IHs6c3ltICpsb2FkLXRlc3RzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmxvYWQtdGVzdHMqIHRydWUpXHJcbiJ9IHs6c3ltIGNoZWNrLXVzZS1tYWNyb3MtaW5mZXJyaW5nLW1pc3NpbmcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtuYW1lIHVzZXMgdXNlLW1hY3Jvc10sIDphcyBhc3R9IGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLXVzZS1tYWNyb3MtaW5mZXJyaW5nLW1pc3NpbmdcclxuIFt7OmtleXMgW25hbWUgdXNlcyB1c2UtbWFjcm9zXSwgOmFzIGFzdH0gZW52XVxyXG4gKGxldFxyXG4gIFttaXNzaW5nLXVzZXNcclxuICAgKHdoZW4gKGFuZCAqYW5hbHl6ZS1kZXBzKiAoc2VxIHVzZXMpKSAobWlzc2luZy11c2VzIHVzZXMgZW52KSlcclxuICAgbWF5YmUtbWFjcm9zXHJcbiAgIChhcHBseSBkaXNzb2MgdXNlcyAoa2V5cyBtaXNzaW5nLXVzZXMpKVxyXG4gICByZW1vdmUtbWlzc2luZy11c2VzXHJcbiAgIChmbiogW3AxX180ODYxMiNdIChhcHBseSBkaXNzb2MgcDFfXzQ4NjEyIyAoa2V5cyBtaXNzaW5nLXVzZXMpKSlcclxuICAgYXN0J1xyXG4gICAoLT5cclxuICAgIGFzdFxyXG4gICAgKHVwZGF0ZS1pblxyXG4gICAgIFs6dXNlLW1hY3Jvc11cclxuICAgICAoZm4qXHJcbiAgICAgIFtwMV9fNDg2MTMjXVxyXG4gICAgICAoLT5cclxuICAgICAgIHAxX180ODYxMyNcclxuICAgICAgIChtZXJnZSAoY2hlY2stdXNlLW1hY3JvcyB1c2UtbWFjcm9zIG1pc3NpbmctdXNlcyBlbnYpKVxyXG4gICAgICAgKG1lcmdlIChpbmZlcnJlZC11c2UtbWFjcm9zIG1heWJlLW1hY3JvcyBlbnYpKSkpKVxyXG4gICAgKHVwZGF0ZS1pbiBbOnVzZXNdIHJlbW92ZS1taXNzaW5nLXVzZXMpKV1cclxuICAoc3dhcCFcclxuICAgZW52Lypjb21waWxlcipcclxuICAgKGZuKlxyXG4gICAgW3AxX180ODYxNCNdXHJcbiAgICAoLT5cclxuICAgICBwMV9fNDg2MTQjXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuYW1lIDp1c2UtbWFjcm9zXVxyXG4gICAgICBtZXJnZVxyXG4gICAgICAoOnVzZS1tYWNyb3MgYXN0JykpXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuYW1lIDp1c2VzXVxyXG4gICAgICByZW1vdmUtbWlzc2luZy11c2VzKSkpKVxyXG4gIGFzdCcpKVxyXG4ifSB7OnN5bSBjYW5vbmljYWxpemUtdHlwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2Fub25pY2FsaXplLXR5cGVcclxuIFt0XVxyXG4gXCJFbnN1cmVzIHRoYXQgYSB0eXBlIHRhZyBpcyBlaXRoZXIgbmlsLCBhIHR5cGUgc3ltYm9sLCBvciBhIG5vbi1zaW5nbGV0b25cXG4gIHNldCBvZiB0eXBlIHN5bWJvbHMsIGFic29yYmluZyBjbGotbmlsIGludG8gc2VxIGFuZCBhbGwgdHlwZXMgaW50byBhbnkuXCJcclxuIChjb25kXHJcbiAgKHN5bWJvbD8gdClcclxuICB0XHJcbiAgKGVtcHR5PyB0KVxyXG4gIG5pbFxyXG4gICg9PSAxIChjb3VudCB0KSlcclxuICAoZmlyc3QgdClcclxuICAoY29udGFpbnM/IHQgJ2FueSlcclxuICAnYW55XHJcbiAgKGNvbnRhaW5zPyB0ICdzZXEpXHJcbiAgKGxldCBbcmVzIChkaXNqIHQgJ2Nsai1uaWwpXSAoaWYgKD09IDEgKGNvdW50IHJlcykpICdzZXEgcmVzKSlcclxuICA6ZWxzZVxyXG4gIHQpKVxyXG4ifSB7OnN5bSBtYWNyb2V4cGFuZC0xKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hY3JvZXhwYW5kLTEqXHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW29wIChmaXJzdCBmb3JtKV1cclxuICAoaWZcclxuICAgKGNvbnRhaW5zPyBzcGVjaWFscyBvcClcclxuICAgKGRvXHJcbiAgICAod2hlblxyXG4gICAgICg9ICducyBvcClcclxuICAgICAoZG8tbWFjcm9leHBhbmQtY2hlY2tcclxuICAgICAgZW52XHJcbiAgICAgIGZvcm1cclxuICAgICAgKGdldC1leHBhbmRlciAnY2xqcy5jb3JlL25zLXNwZWNpYWwtZm9ybSBlbnYpKSlcclxuICAgIGZvcm0pXHJcbiAgIChpZi1zb21lXHJcbiAgICBbbWFjLXZhciAod2hlbiAoc3ltYm9sPyBvcCkgKGdldC1leHBhbmRlciBvcCBlbnYpKV1cclxuICAgICgjP0AoOmNsaiBbYmluZGluZyBbKm5zKiAoY3JlYXRlLW5zICpjbGpzLW5zKildXSA6Y2xqcyBbZG9dKVxyXG4gICAgIChkby1tYWNyb2V4cGFuZC1jaGVjayBlbnYgZm9ybSBtYWMtdmFyKVxyXG4gICAgIChsZXRcclxuICAgICAgW2Zvcm0nXHJcbiAgICAgICAodHJ5XHJcbiAgICAgICAgIz8oOmNsanMgKGNoZWNrLW1hY3JvLWFyaXR5IG1hYy12YXIgZm9ybSkpXHJcbiAgICAgICAgKGFwcGx5IEBtYWMtdmFyIGZvcm0gZW52IChyZXN0IGZvcm0pKVxyXG4gICAgICAgICM/KDpjbGogKGNhdGNoIEFyaXR5RXhjZXB0aW9uIGUgKHRocm93IChBcml0eUV4Y2VwdGlvbi4gKC0gKC5hY3R1YWwgZSkgMikgKC5uYW1lIGUpKSkpKVxyXG4gICAgICAgIChjYXRjaFxyXG4gICAgICAgICAjPyg6Y2xqIFRocm93YWJsZSA6Y2xqcyA6ZGVmYXVsdClcclxuICAgICAgICAgZVxyXG4gICAgICAgICAodGhyb3dcclxuICAgICAgICAgIChleC1pbmZvXHJcbiAgICAgICAgICAgbmlsXHJcbiAgICAgICAgICAgKGVycm9yLWRhdGEgZW52IDptYWNyb2V4cGFuc2lvbiAodmFyLT5zeW0gbWFjLXZhcikpXHJcbiAgICAgICAgICAgZSkpKSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgIz8oOmNsaiAoc2VxPyBmb3JtJykgOmNsanMgKGNsanMtc2VxPyBmb3JtJykpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3N5bScgKGZpcnN0IGZvcm0nKSBzeW0gKGZpcnN0IGZvcm0pXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAjPyg6Y2xqICg9IHN5bScgKHF1b3RlIGpzKikpIDpjbGpzIChzeW1ib2wtaWRlbnRpY2FsPyBzeW0nIEpTX1NUQVJfU1lNKSlcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3N5bVxyXG4gICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAoc29tZT8gKG5hbWVzcGFjZSBzeW0pKVxyXG4gICAgICAgICAgICBzeW1cclxuICAgICAgICAgICAgKHN5bWJvbCBcImNsanMuY29yZVwiIChzdHIgc3ltKSkpXHJcbiAgICAgICAgICAganMtb3BcclxuICAgICAgICAgICB7OmpzLW9wIHN5bX1cclxuICAgICAgICAgICBudW1lcmljXHJcbiAgICAgICAgICAgIz8oOmNsaiAoLT4gbWFjLXZhciBtZXRhIDpjbGpzLmFuYWx5emVyL251bWVyaWMpIDpjbGpzIChsZXQgW21hYy12YXItbnMgKHN5bWJvbCAobmFtZXNwYWNlICguLXN5bSBtYWMtdmFyKSkpIG1hYy12YXItbmFtZSAoc3ltYm9sIChuYW1lICguLXN5bSBtYWMtdmFyKSkpXSAoZ2V0LWluIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG1hYy12YXItbnMgOmRlZnMgbWFjLXZhci1uYW1lIDptZXRhIDpjbGpzLmFuYWx5emVyL251bWVyaWNdKSkpXHJcbiAgICAgICAgICAganMtb3BcclxuICAgICAgICAgICAoaWYgKHRydWU/IG51bWVyaWMpIChhc3NvYyBqcy1vcCA6bnVtZXJpYyB0cnVlKSBqcy1vcCldXHJcbiAgICAgICAgICAodmFyeS1tZXRhIGZvcm0nIG1lcmdlIGpzLW9wKSlcclxuICAgICAgICAgZm9ybScpKVxyXG4gICAgICAgZm9ybScpKSlcclxuICAgIChpZlxyXG4gICAgIChzeW1ib2w/IG9wKVxyXG4gICAgIChsZXRcclxuICAgICAgW29wbmFtZSAoc3RyIG9wKV1cclxuICAgICAgKGNvbmRcclxuICAgICAgIChpZGVudGljYWw/IFxcLiAjPyg6Y2xqIChmaXJzdCBvcG5hbWUpIDpjbGpzICguY2hhckF0IG9wbmFtZSAwKSkpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW1t0YXJnZXQgJiBhcmdzXSAobmV4dCBmb3JtKV1cclxuICAgICAgICAod2l0aC1tZXRhXHJcbiAgICAgICAgIChsaXN0KlxyXG4gICAgICAgICAgIz8oOmNsaiAocXVvdGUgLikgOmNsanMgRE9UX1NZTSlcclxuICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgKHN5bWJvbCAoc3VicyBvcG5hbWUgMSkpXHJcbiAgICAgICAgICBhcmdzKVxyXG4gICAgICAgICAobWV0YSBmb3JtKSkpXHJcbiAgICAgICAoaWRlbnRpY2FsP1xyXG4gICAgICAgIFxcLlxyXG4gICAgICAgICM/KDpjbGogKGxhc3Qgb3BuYW1lKSA6Y2xqcyAoLmNoYXJBdCBvcG5hbWUgKGRlYyAoLiBvcG5hbWUgLWxlbmd0aCkpKSkpXHJcbiAgICAgICAod2l0aC1tZXRhXHJcbiAgICAgICAgKGxpc3QqXHJcbiAgICAgICAgICM/KDpjbGogKHF1b3RlIG5ldykgOmNsanMgTkVXX1NZTSlcclxuICAgICAgICAgKHN5bWJvbCAoc3VicyBvcG5hbWUgMCAoZGVjIChjb3VudCBvcG5hbWUpKSkpXHJcbiAgICAgICAgIChuZXh0IGZvcm0pKVxyXG4gICAgICAgIChtZXRhIGZvcm0pKVxyXG4gICAgICAgOmVsc2VcclxuICAgICAgIGZvcm0pKVxyXG4gICAgIGZvcm0pKSkpKVxyXG4ifSB7OnN5bSBjaGVjay11c2UtbWFjcm9zLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW3VzZS1tYWNyb3MgZW52XSBbdXNlLW1hY3JvcyBtaXNzaW5nLXVzZXMgZW52XV19LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stdXNlLW1hY3Jvc1xyXG4gKFt1c2UtbWFjcm9zIGVudl0gKGNoZWNrLXVzZS1tYWNyb3MgdXNlLW1hY3JvcyBuaWwgZW52KSlcclxuIChbdXNlLW1hY3JvcyBtaXNzaW5nLXVzZXMgZW52XVxyXG4gIChsZXRcclxuICAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gICAoZG9zZXFcclxuICAgIFtbc3ltIGxpYl0gdXNlLW1hY3Jvc11cclxuICAgICh3aGVuXHJcbiAgICAgKG1pc3NpbmctdXNlLW1hY3JvPyBsaWIgc3ltKVxyXG4gICAgICh0aHJvd1xyXG4gICAgICAoZXJyb3JcclxuICAgICAgIGVudlxyXG4gICAgICAgKGVycm9yLW1lc3NhZ2VcclxuICAgICAgICA6dW5kZWNsYXJlZC1ucy1mb3JtXHJcbiAgICAgICAgezp0eXBlIFwibWFjcm9cIiwgOmxpYiBsaWIsIDpzeW0gc3ltfSkpKSkpXHJcbiAgIChjaGVjay11c2VzIChtaXNzaW5nLXVzZS1tYWNyb3MgbWlzc2luZy11c2VzIGVudikgZW52KVxyXG4gICAoaW5mZXJyZWQtdXNlLW1hY3JvcyBtaXNzaW5nLXVzZXMgZW52KSkpKVxyXG4ifSB7OnN5bSBnZXQtZXhwYW5kZXIsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHN5bSwgYSBzeW1ib2wgaWRlbnRpZnlpbmcgYSBtYWNybywgYW5kIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnRcbiAgIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBDbG9qdXJlIG1hY3JvZXhwYW5kZXIuIiwgOmFyZ2xpc3RzIChbc3ltIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1leHBhbmRlclxyXG4gXCJHaXZlbiBhIHN5bSwgYSBzeW1ib2wgaWRlbnRpZnlpbmcgYSBtYWNybywgYW5kIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnRcXG4gICByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgQ2xvanVyZSBtYWNyb2V4cGFuZGVyLlwiXHJcbiBbc3ltIGVudl1cclxuIChsZXRcclxuICBbbXZhciAoZ2V0LWV4cGFuZGVyKiBzeW0gZW52KV1cclxuICAod2hlblxyXG4gICAoYW5kIChzb21lPyBtdmFyKSAjPyg6Y2xqICguaXNNYWNybyBtdmFyKSA6Y2xqcyAoLmlzTWFjcm8gbXZhcikpKVxyXG4gICBtdmFyKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtanMtc3RhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYganNmb3JtIGFyZ3MgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtanMtc3RhclxyXG4gW2VudiBqc2Zvcm0gYXJncyBmb3JtXVxyXG4gKGRpc2FsbG93aW5nLXJlY3VyIChhbmFseXplLWpzLXN0YXIqIGVudiBqc2Zvcm0gYXJncyBmb3JtKSkpXHJcbiJ9IHs6c3ltIGpzLXN0YXItaW50ZXJwLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBzXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtc3Rhci1pbnRlcnBcclxuIFtlbnYgc11cclxuIChsZXRcclxuICBbaWR4ICguaW5kZXhPZiBzIFwifntcIildXHJcbiAgKGlmXHJcbiAgICg9PSAtMSBpZHgpXHJcbiAgIChsaXN0IHMpXHJcbiAgIChsZXRcclxuICAgIFtlbmRcclxuICAgICAoLmluZGV4T2YgcyBcIn1cIiBpZHgpXHJcbiAgICAgaW5uZXJcclxuICAgICAoOm5hbWVcclxuICAgICAgKHJlc29sdmUtZXhpc3RpbmctdmFyIGVudiAoc3ltYm9sIChzdWJzIHMgKCsgMiBpZHgpIGVuZCkpKSldXHJcbiAgICAobGF6eS1zZXFcclxuICAgICAoY29uc1xyXG4gICAgICAoc3VicyBzIDAgaWR4KVxyXG4gICAgICAoY29ucyBpbm5lciAoanMtc3Rhci1pbnRlcnAgZW52IChzdWJzIHMgKGluYyBlbmQpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltICpyZWN1ci1mcmFtZXMqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcmVjdXItZnJhbWVzKiBuaWwpXHJcbiJ9IHs6c3ltIGFuYWx5emUtZm4tbWV0aG9kcy1wYXNzMiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWVudiBsb2NhbHMgdHlwZSBtZXRoc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZm4tbWV0aG9kcy1wYXNzMipcclxuIFttZW52IGxvY2FscyB0eXBlIG1ldGhzXVxyXG4gKG1hcHZcclxuICAoZm4qXHJcbiAgIFtwMV9fNDg2MDUjXVxyXG4gICAoYW5hbHl6ZS1mbi1tZXRob2QgbWVudiBsb2NhbHMgcDFfXzQ4NjA1IyB0eXBlIHRydWUpKVxyXG4gIG1ldGhzKSlcclxuIn0gezpzeW0gbWFjcm9leHBhbmQtMSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIGZvcm0sIGEgQ2xvanVyZVNjcmlwdCBmb3JtLFxuICAgbWFjcm9leHBhbmQgdGhlIGZvcm0gb25jZS4iLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hY3JvZXhwYW5kLTFcclxuIFwiR2l2ZW4gYSBlbnYsIGFuIGFuYWx5c2lzIGVudmlyb25tZW50LCBhbmQgZm9ybSwgYSBDbG9qdXJlU2NyaXB0IGZvcm0sXFxuICAgbWFjcm9leHBhbmQgdGhlIGZvcm0gb25jZS5cIlxyXG4gW2VudiBmb3JtXVxyXG4gKHdyYXBwaW5nLWVycm9ycyBlbnYgKG1hY3JvZXhwYW5kLTEqIGVudiBmb3JtKSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtbWFjcm8tdmFyLCA6bWV0YSB7OmRvYyAiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIHN5bSwgYSBzeW1ib2wsIHJlc29sdmUgYSBtYWNyby4iLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1tYWNyby12YXJcclxuIFwiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIHN5bSwgYSBzeW1ib2wsIHJlc29sdmUgYSBtYWNyby5cIlxyXG4gW2VudiBzeW1dXHJcbiAobGV0XHJcbiAgW25zXHJcbiAgICgtPiBlbnYgOm5zIDpuYW1lKVxyXG4gICBuYW1lc3BhY2VzXHJcbiAgIChnZXQgQGVudi8qY29tcGlsZXIqIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMpXVxyXG4gIChjb25kXHJcbiAgIChzb21lPyAobmFtZXNwYWNlIHN5bSkpXHJcbiAgIChsZXRcclxuICAgIFtuc1xyXG4gICAgIChuYW1lc3BhY2Ugc3ltKVxyXG4gICAgIG5zXHJcbiAgICAgKGlmICg9IFwiY2xvanVyZS5jb3JlXCIgbnMpIFwiY2xqcy5jb3JlXCIgbnMpXHJcbiAgICAgZnVsbC1uc1xyXG4gICAgIChyZXNvbHZlLW1hY3JvLW5zLWFsaWFzIGVudiBucylcclxuICAgICAjP0AoOmNsanMgW2Z1bGwtbnMgKGlmLW5vdCAoc3RyaW5nL2VuZHMtd2l0aD8gKHN0ciBmdWxsLW5zKSBcIiRtYWNyb3NcIikgKHN5bWJvbCAoc3RyIGZ1bGwtbnMgXCIkbWFjcm9zXCIpKSBmdWxsLW5zKV0pXVxyXG4gICAgIz8oOmNsaiAoZ2V0LWluIG5hbWVzcGFjZXMgW2Z1bGwtbnMgOm1hY3JvcyAoc3ltYm9sIChuYW1lIHN5bSkpXSkgOmNsanMgKGdldC1pbiBuYW1lc3BhY2VzIFtmdWxsLW5zIDpkZWZzIChzeW1ib2wgKG5hbWUgc3ltKSldKSkpXHJcbiAgIChzb21lPyAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDp1c2UtbWFjcm9zIHN5bV0pKVxyXG4gICAobGV0XHJcbiAgICBbZnVsbC1ucyAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDp1c2UtbWFjcm9zIHN5bV0pXVxyXG4gICAgKGdldC1pbiBuYW1lc3BhY2VzIFtmdWxsLW5zIDptYWNyb3Mgc3ltXSkpXHJcbiAgIChzb21lPyAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDpyZW5hbWUtbWFjcm9zIHN5bV0pKVxyXG4gICAobGV0XHJcbiAgICBbcXVhbGlmaWVkLXN5bWJvbFxyXG4gICAgIChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOnJlbmFtZS1tYWNyb3Mgc3ltXSlcclxuICAgICBmdWxsLW5zXHJcbiAgICAgKHN5bWJvbCAobmFtZXNwYWNlIHF1YWxpZmllZC1zeW1ib2wpKVxyXG4gICAgIHN5bVxyXG4gICAgIChzeW1ib2wgKG5hbWUgcXVhbGlmaWVkLXN5bWJvbCkpXVxyXG4gICAgKGdldC1pbiBuYW1lc3BhY2VzIFtmdWxsLW5zIDptYWNyb3Mgc3ltXSkpXHJcbiAgIDplbHNlXHJcbiAgIChsZXRcclxuICAgIFtuc1xyXG4gICAgIChjb25kXHJcbiAgICAgIChzb21lPyAoZ2V0LWluIG5hbWVzcGFjZXMgW25zIDptYWNyb3Mgc3ltXSkpXHJcbiAgICAgIG5zXHJcbiAgICAgIChjb3JlLW5hbWU/IGVudiBzeW0pXHJcbiAgICAgICM/KDpjbGogKHF1b3RlIGNsanMuY29yZSkgOmNsanMgQ0xKU19DT1JFX01BQ1JPU19TWU0pKV1cclxuICAgICh3aGVuXHJcbiAgICAgKHNvbWU/IG5zKVxyXG4gICAgICM/KDpjbGogKGdldC1pbiBuYW1lc3BhY2VzIFtucyA6bWFjcm9zIHN5bV0pIDpjbGpzIChnZXQtaW4gbmFtZXNwYWNlcyBbbnMgOmRlZnMgc3ltXSkpKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQtYmluZGluZy1pbml0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBpbml0IGxvb3AtbGV0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtbGV0LWJpbmRpbmctaW5pdFxyXG4gW2VudiBpbml0IGxvb3AtbGV0c11cclxuIChiaW5kaW5nIFsqbG9vcC1sZXRzKiBsb29wLWxldHNdIChhbmFseXplIGVudiBpbml0KSkpXHJcbiJ9IHs6c3ltIGluZmVyLXRhZywgOm1ldGEgezpkb2MgIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBlLCBhbiBBU1Qgbm9kZSwgcmV0dXJuIHRoZSBpbmZlcnJlZFxuICAgdHlwZSBvZiB0aGUgbm9kZSIsIDphcmdsaXN0cyAoW2VudiBlXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5mZXItdGFnXHJcbiBcIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBlLCBhbiBBU1Qgbm9kZSwgcmV0dXJuIHRoZSBpbmZlcnJlZFxcbiAgIHR5cGUgb2YgdGhlIG5vZGVcIlxyXG4gW2VudiBlXVxyXG4gKGlmLXNvbWVcclxuICBbdGFnIChnZXQtdGFnIGUpXVxyXG4gIHRhZ1xyXG4gIChjYXNlXHJcbiAgICg6b3AgZSlcclxuICAgOnJlY3VyXHJcbiAgIElHTk9SRV9TWU1cclxuICAgOnRocm93XHJcbiAgIElHTk9SRV9TWU1cclxuICAgOmxldFxyXG4gICAoaW5mZXItdGFnIGVudiAoOmJvZHkgZSkpXHJcbiAgIDpsb29wXHJcbiAgIChpbmZlci10YWcgZW52ICg6Ym9keSBlKSlcclxuICAgOmRvXHJcbiAgIChpbmZlci10YWcgZW52ICg6cmV0IGUpKVxyXG4gICA6Zm4tbWV0aG9kXHJcbiAgIChpbmZlci10YWcgZW52ICg6Ym9keSBlKSlcclxuICAgOmRlZlxyXG4gICAoaW5mZXItdGFnIGVudiAoOmluaXQgZSkpXHJcbiAgIDppbnZva2VcclxuICAgKGluZmVyLWludm9rZSBlbnYgZSlcclxuICAgOmlmXHJcbiAgIChpbmZlci1pZiBlbnYgZSlcclxuICAgOmNvbnN0XHJcbiAgIChjYXNlICg6Zm9ybSBlKSB0cnVlIEJPT0xFQU5fU1lNIGZhbHNlIEJPT0xFQU5fU1lNIEFOWV9TWU0pXHJcbiAgIDpxdW90ZVxyXG4gICAoaW5mZXItdGFnIGVudiAoOmV4cHIgZSkpXHJcbiAgICg6dmFyIDpsb2NhbCA6anMtdmFyIDpiaW5kaW5nKVxyXG4gICAoaWYtc29tZVxyXG4gICAgW2luaXQgKDppbml0IGUpXVxyXG4gICAgKGluZmVyLXRhZyBlbnYgaW5pdClcclxuICAgIChpbmZlci10YWcgZW52ICg6aW5mbyBlKSkpXHJcbiAgICg6aG9zdC1maWVsZCA6aG9zdC1jYWxsKVxyXG4gICBBTllfU1lNXHJcbiAgIDpqc1xyXG4gICBBTllfU1lNXHJcbiAgIG5pbCkpKVxyXG4ifSB7OnN5bSBjYW5vbmljYWxpemUtaW1wb3J0LXNwZWNzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWNzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2Fub25pY2FsaXplLWltcG9ydC1zcGVjc1xyXG4gW3NwZWNzXVxyXG4gKGxldGZuXHJcbiAgWyhjYW5vbmljYWxpemVcclxuICAgIFtxdW90ZWQtc3BlYy1vci1rd11cclxuICAgIChpZlxyXG4gICAgIChrZXl3b3JkPyBxdW90ZWQtc3BlYy1vci1rdylcclxuICAgICBxdW90ZWQtc3BlYy1vci1rd1xyXG4gICAgIChzZWNvbmQgcXVvdGVkLXNwZWMtb3Ita3cpKSldXHJcbiAgKG1hcCBjYW5vbmljYWxpemUgc3BlY3MpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1mb3JtLXNlcSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1tmb3Jtc10gW2Zvcm1zIG9wdHNdIFtmb3JtcyBvcHRzIHJldHVybi1sYXN0P11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZm9ybS1zZXFcclxuIChbZm9ybXNdXHJcbiAgKGFuYWx5emUtZm9ybS1zZXFcclxuICAgZm9ybXNcclxuICAgKHdoZW4gZW52Lypjb21waWxlciogKDpvcHRpb25zIEBlbnYvKmNvbXBpbGVyKikpKSlcclxuIChbZm9ybXMgb3B0c10gKGFuYWx5emUtZm9ybS1zZXEgZm9ybXMgb3B0cyBmYWxzZSkpXHJcbiAoW2Zvcm1zIG9wdHMgcmV0dXJuLWxhc3Q/XVxyXG4gIChsZXRcclxuICAgW2VudiAoYXNzb2MgKGVtcHR5LWVudikgOmJ1aWxkLW9wdGlvbnMgb3B0cyldXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbKmZpbGUtZGVmcypcclxuICAgICBuaWxcclxuICAgICAjP0AoOmNsaiBbKnVuY2hlY2tlZC1pZiogZmFsc2UgKnVuY2hlY2tlZC1hcnJheXMqIGZhbHNlXSlcclxuICAgICAqY2xqcy1ucypcclxuICAgICAnY2xqcy51c2VyXHJcbiAgICAgKmNsanMtZmlsZSpcclxuICAgICBuaWxcclxuICAgICByZWFkZXIvKmFsaWFzLW1hcCpcclxuICAgICAob3IgcmVhZGVyLyphbGlhcy1tYXAqIHt9KV1cclxuICAgIChsb29wXHJcbiAgICAgW25zIG5pbCBmb3JtcyBmb3JtcyBsYXN0LWFzdCBuaWxdXHJcbiAgICAgKGlmXHJcbiAgICAgIChzb21lPyBmb3JtcylcclxuICAgICAgKGxldFxyXG4gICAgICAgW2Zvcm1cclxuICAgICAgICAoZmlyc3QgZm9ybXMpXHJcbiAgICAgICAgZW52XHJcbiAgICAgICAgKGFzc29jIGVudiA6bnMgKGdldC1uYW1lc3BhY2UgKmNsanMtbnMqKSlcclxuICAgICAgICBhc3RcclxuICAgICAgICAoYW5hbHl6ZSBlbnYgZm9ybSBuaWwgb3B0cyldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoPSAoOm9wIGFzdCkgOm5zKVxyXG4gICAgICAgIChyZWN1ciAoOm5hbWUgYXN0KSAobmV4dCBmb3JtcykgYXN0KVxyXG4gICAgICAgIChyZWN1ciBucyAobmV4dCBmb3JtcykgYXN0KSkpXHJcbiAgICAgIChpZiByZXR1cm4tbGFzdD8gbGFzdC1hc3QgbnMpKSkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtbGV0LWJvZHkqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBjb250ZXh0IGV4cHJzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXQtYm9keSpcclxuIFtlbnYgY29udGV4dCBleHByc11cclxuIChhbmFseXplXHJcbiAgKGFzc29jIGVudiA6Y29udGV4dCAoaWYgKD0gOmV4cHIgY29udGV4dCkgOnJldHVybiBjb250ZXh0KSlcclxuICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAoY2xvanVyZS5jb3JlL2NvbmNhdCAoY2xvanVyZS5jb3JlL2xpc3QgJ2RvKSBleHBycykpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtanMtc3RhciosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGpzZm9ybSBhcmdzIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWpzLXN0YXIqXHJcbiBbZW52IGpzZm9ybSBhcmdzIGZvcm1dXHJcbiAobGV0XHJcbiAgW2VudmVcclxuICAgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgZm9ybS1tZXRhXHJcbiAgIChtZXRhIGZvcm0pXHJcbiAgIHNlZ3NcclxuICAgKGpzLXN0YXItc2VnIGpzZm9ybSlcclxuICAgdGFnXHJcbiAgIChnZXQtanMtdGFnIGZvcm0pXHJcbiAgIGpzLW9wXHJcbiAgICg6anMtb3AgZm9ybS1tZXRhKVxyXG4gICBhcmdleHByc1xyXG4gICAoYW5hbHl6ZS1qcy1zdGFyLWFyZ3MganMtb3AgZW52ZSBhcmdzKVxyXG4gICBudW1lcmljXHJcbiAgICg6bnVtZXJpYyBmb3JtLW1ldGEpXHJcbiAgIHZhbGlkYXRlXHJcbiAgIChmblxyXG4gICAgW3dhcm5pbmctdHlwZSB2YWxpZC10eXBlcz9dXHJcbiAgICAobGV0XHJcbiAgICAgW3R5cGVzXHJcbiAgICAgIChtYXAgKGZuKiBbcDFfXzQ4NjMwI10gKGluZmVyLXRhZyBlbnYgcDFfXzQ4NjMwIykpIGFyZ2V4cHJzKV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKHZhbGlkLXR5cGVzPyB0eXBlcylcclxuICAgICAgKHdhcm5pbmdcclxuICAgICAgIHdhcm5pbmctdHlwZVxyXG4gICAgICAgZW52XHJcbiAgICAgICB7OmpzLW9wIGpzLW9wLCA6dHlwZXMgKGludG8gW10gdHlwZXMpfSkpKSlcclxuICAgb3AtbWF0Y2g/XHJcbiAgIChmblxyXG4gICAgW3N5bV1cclxuICAgICM/KDpjbGogKD0gc3ltICg6anMtb3AgZm9ybS1tZXRhKSkgOmNsanMgKHN5bWJvbC1pZGVudGljYWw/IHN5bSAoOmpzLW9wIGZvcm0tbWV0YSkpKSldXHJcbiAgKHdoZW5cclxuICAgKHRydWU/IG51bWVyaWMpXHJcbiAgICh2YWxpZGF0ZVxyXG4gICAgOmludmFsaWQtYXJpdGhtZXRpY1xyXG4gICAgKGZuKiBbcDFfXzQ4NjMxI10gKGV2ZXJ5PyBudW1lcmljLXR5cGU/IHAxX180ODYzMSMpKSkpXHJcbiAgezphcmdzIGFyZ2V4cHJzLFxyXG4gICA6Y2hpbGRyZW4gWzphcmdzXSxcclxuICAgOm51bWVyaWMgbnVtZXJpYyxcclxuICAgOnNlZ3Mgc2VncyxcclxuICAgOm9wIDpqcyxcclxuICAgOmVudiBlbnYsXHJcbiAgIDpqcy1vcCBqcy1vcCxcclxuICAgOmZvcm0gZm9ybSxcclxuICAgOnRhZyB0YWd9KSlcclxuIn0gezpzeW0gaW5mZXJyZWQtcmVuYW1lLW1hY3JvcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZW5hbWUtbWFjcm9zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVycmVkLXJlbmFtZS1tYWNyb3NcclxuIFtyZW5hbWUtbWFjcm9zIGVudl1cclxuIChpbnRvXHJcbiAge31cclxuICAoZmlsdGVyXHJcbiAgIChmbiBbW18gcXVhbGlmaWVkLXN5bV1dIChub3QgKG1pc3NpbmctcmVuYW1lLW1hY3JvPyBxdWFsaWZpZWQtc3ltKSkpXHJcbiAgIHJlbmFtZS1tYWNyb3MpKSlcclxuIn0gezpzeW0gcGFyc2UtbnMtZXJyb3ItbXNnLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgbXNnXSl9LCA6c291cmNlICIoZGVmblxyXG4gcGFyc2UtbnMtZXJyb3ItbXNnXHJcbiBbc3BlYyBtc2ddXHJcbiAoc3RyIG1zZyBcIjsgb2ZmZW5kaW5nIHNwZWM6IFwiIChwci1zdHIgc3BlYykpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXVzZS1tYWNybz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbGliIHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctdXNlLW1hY3JvP1xyXG4gW2xpYiBzeW1dXHJcbiAod2hlblxyXG4gIChzeW1ib2w/IGxpYilcclxuICAobGV0XHJcbiAgIFt0aGUtbnMgIz8oOmNsaiAoZmluZC1ucyBsaWIpIDpjbGpzIChmaW5kLW1hY3Jvcy1ucyBsaWIpKV1cclxuICAgKG9yIChuaWw/IHRoZS1ucykgKG5pbD8gKC5maW5kSW50ZXJuZWRWYXIgdGhlLW5zIHN5bSkpKSkpKVxyXG4ifSB7OnN5bSByZWNvcmQtbnMrbmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVjb3JkLW5zK25hbWVcclxuIFt4XVxyXG4gKG1hcFxyXG4gIHN5bWJvbFxyXG4gICM/KDpjbGogKChqdXh0IChjb21wIChmbiogW3AxX180ODY0MiNdIChzdHJpbmcvam9pbiBcIi5cIiBwMV9fNDg2NDIjKSkgYnV0bGFzdCkgbGFzdCkgKHN0cmluZy9zcGxpdCAoLmdldE5hbWUgKHR5cGUgeCkpICNcIlxcLlwiKSkgOmNsanMgKHN0cmluZy9zcGxpdCAocHItc3RyICh0eXBlIHgpKSAjXCIvXCIpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emVkLCA6bWV0YSB7OmRvYyAiTWFyayBhIGZvcm0gYXMgYmVpbmcgYW5hbHl6ZWQuIEFzc3VtZXMgeCBzYXRpc2ZpZXMgSU1ldGEuIFVzZWZ1bCB0byBzdXBwcmVzc1xuICB3YXJuaW5ncyB0aGF0IHdpbGwgaGF2ZSBiZWVuIGNhdWdodCBieSBhIGZpcnN0IGNvbXBpbGVyIHBhc3MuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emVkXHJcbiBcIk1hcmsgYSBmb3JtIGFzIGJlaW5nIGFuYWx5emVkLiBBc3N1bWVzIHggc2F0aXNmaWVzIElNZXRhLiBVc2VmdWwgdG8gc3VwcHJlc3NcXG4gIHdhcm5pbmdzIHRoYXQgd2lsbCBoYXZlIGJlZW4gY2F1Z2h0IGJ5IGEgZmlyc3QgY29tcGlsZXIgcGFzcy5cIlxyXG4gW3hdXHJcbiAoY29uZFxyXG4gICh1bnNvcnRlZC1tYXA/IHgpXHJcbiAgKGFzc29jIHggOmNsanMuYW5hbHl6ZXIvYW5hbHl6ZWQgdHJ1ZSlcclxuICA6ZWxzZVxyXG4gICh2YXJ5LW1ldGEgeCBhc3NvYyA6Y2xqcy5hbmFseXplci9hbmFseXplZCB0cnVlKSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtc3ltYm9sLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlc29sdmUtc3ltYm9sXHJcbiBbc3ltXVxyXG4gKGlmXHJcbiAgKGFuZCAobm90IChuYW1lc3BhY2Ugc3ltKSkgKGRvdHRlZC1zeW1ib2w/IHN5bSkpXHJcbiAgc3ltXHJcbiAgKDpuYW1lXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbKnByaXZhdGUtdmFyLWFjY2Vzcy1ub3dhcm4qIHRydWVdXHJcbiAgICAocmVzb2x2ZS12YXJcclxuICAgICAoYXNzb2MgQGVudi8qY29tcGlsZXIqIDpucyAoZ2V0LW5hbWVzcGFjZSAqY2xqcy1ucyopKVxyXG4gICAgIHN5bSkpKSkpXHJcbiJ9IHs6c3ltIG1pc3NpbmctcmVuYW1lcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZW5hbWVzIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1pc3NpbmctcmVuYW1lc1xyXG4gW3JlbmFtZXMgZW52XVxyXG4gKGxldFxyXG4gIFtjZW52IEBlbnYvKmNvbXBpbGVyKl1cclxuICAoaW50b1xyXG4gICB7fVxyXG4gICAoZmlsdGVyXHJcbiAgICAoZm4gW1tfIHF1YWxpZmllZC1zeW1dXSAobWlzc2luZy1yZW5hbWU/IHF1YWxpZmllZC1zeW0gY2VudikpXHJcbiAgICByZW5hbWVzKSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LXBhc3NlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGRlZmF1bHQtcGFzc2VzXHJcbiAjPyg6Y2xqIFtpbmZlci10eXBlIGNoZWNrLWludm9rZS1hcmctdHlwZXMgbnMtc2lkZS1lZmZlY3RzXSA6Y2xqcyBbaW5mZXItdHlwZSBjaGVjay1pbnZva2UtYXJnLXR5cGVzXSkpXHJcbiJ9IHs6c3ltICpjbGpzLW1hY3Jvcy1wYXRoKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtbWFjcm9zLXBhdGgqIFwiL2NsanMvY29yZVwiKVxyXG4ifSB7OnN5bSBjb25maXJtLXZhci1leGlzdC13YXJuaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBwcmVmaXggc3VmZml4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uZmlybS12YXItZXhpc3Qtd2FybmluZ1xyXG4gW2VudiBwcmVmaXggc3VmZml4XVxyXG4gKGZuXHJcbiAgW2VudiBwcmVmaXggc3VmZml4XVxyXG4gICh3YXJuaW5nXHJcbiAgIDp1bmRlY2xhcmVkLXZhclxyXG4gICBlbnZcclxuICAgezpwcmVmaXggcHJlZml4LFxyXG4gICAgOnN1ZmZpeCBzdWZmaXgsXHJcbiAgICA6bWFjcm8tcHJlc2VudD9cclxuICAgIChub3RcclxuICAgICAobmlsPyAoZ2V0LWV4cGFuZGVyIChzeW1ib2wgKHN0ciBwcmVmaXgpIChzdHIgc3VmZml4KSkgZW52KSkpfSkpKVxyXG4ifSB7OnN5bSB1bmNoZWNrZWQtYXJyYXlzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIHVuY2hlY2tlZC1hcnJheXM/IFtdICp1bmNoZWNrZWQtYXJyYXlzKilcclxuIn0gezpzeW0gYW5hbHl6ZS1kb3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHRhcmdldCBmaWVsZCBtZW1iZXIrIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWRvdFxyXG4gW2VudiB0YXJnZXQgZmllbGQgbWVtYmVyKyBmb3JtXVxyXG4gKGxldFxyXG4gIFt2XHJcbiAgIFt0YXJnZXQgZmllbGQgbWVtYmVyK11cclxuICAgezprZXlzIFtkb3QtYWN0aW9uIHRhcmdldCBtZXRob2QgZmllbGQgYXJnc119XHJcbiAgIChidWlsZC1kb3QtZm9ybSB2KVxyXG4gICBlbnZlXHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIHRhcmdldGV4cHJcclxuICAgKGFuYWx5emUgZW52ZSB0YXJnZXQpXHJcbiAgIGZvcm0tbWV0YVxyXG4gICAobWV0YSBmb3JtKVxyXG4gICB0YXJnZXQtdGFnXHJcbiAgICg6dGFnIHRhcmdldGV4cHIpXHJcbiAgIHByb3BcclxuICAgKG9yIGZpZWxkIG1ldGhvZClcclxuICAgdGFnXHJcbiAgIChvclxyXG4gICAgKDp0YWcgZm9ybS1tZXRhKVxyXG4gICAgKGFuZFxyXG4gICAgIChqcy10YWc/IHRhcmdldC10YWcpXHJcbiAgICAgKHZhcnktbWV0YVxyXG4gICAgICAobm9ybWFsaXplLWpzLXRhZyB0YXJnZXQtdGFnKVxyXG4gICAgICB1cGRhdGUtaW5cclxuICAgICAgWzpwcmVmaXhdXHJcbiAgICAgIChmbmlsIGNvbmogJ1tPYmplY3RdKVxyXG4gICAgICBwcm9wKSlcclxuICAgIG5pbCldXHJcbiAgKHdoZW5cclxuICAgKGFuZFxyXG4gICAgKG5vdD0gJ2NvbnN0cnVjdG9yIHByb3ApXHJcbiAgICAobm90IChzdHJpbmcvc3RhcnRzLXdpdGg/IChzdHIgcHJvcCkgXCJjbGpzJFwiKSlcclxuICAgIChub3QgKC0+IHByb3AgbWV0YSA6cHJvdG9jb2wtbWV0aG9kKSkpXHJcbiAgICh3aGVuXHJcbiAgICAoPSAnT2JqZWN0IChmaXJzdCAoLT4gdGFnIG1ldGEgOnByZWZpeCkpKVxyXG4gICAgKHdhcm5pbmdcclxuICAgICA6aW5mZXItd2FybmluZ1xyXG4gICAgIGVudlxyXG4gICAgIHs6d2Fybi10eXBlIDpvYmplY3QsIDpmb3JtIGZvcm0sIDpwcm9wZXJ0eSBwcm9wfSkpXHJcbiAgICh3aGVuXHJcbiAgICAobm90PSAnanMgdGFyZ2V0LXRhZylcclxuICAgICh3aGVuXHJcbiAgICAgKG9yIChuaWw/IHRhcmdldC10YWcpICgnI3thbnl9IHRhcmdldC10YWcpKVxyXG4gICAgICh3YXJuaW5nXHJcbiAgICAgIDppbmZlci13YXJuaW5nXHJcbiAgICAgIGVudlxyXG4gICAgICB7Ondhcm4tdHlwZSA6dGFyZ2V0LCA6Zm9ybSBmb3JtLCA6cHJvcGVydHkgcHJvcH0pKVxyXG4gICAgKGxldFxyXG4gICAgIFtbcHJlJyBwcmVdICgoanV4dCBidXRsYXN0IGlkZW50aXR5KSAoLT4gdGFnIG1ldGEgOnByZWZpeCkpXVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChhbmQgKGhhcy1leHRlcm4/IHByZScpIChub3QgKGhhcy1leHRlcm4/IHByZSkpKVxyXG4gICAgICAod2FybmluZ1xyXG4gICAgICAgOmluZmVyLXdhcm5pbmdcclxuICAgICAgIGVudlxyXG4gICAgICAgezp3YXJuLXR5cGUgOnByb3BlcnR5LFxyXG4gICAgICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgICAgOnR5cGVcclxuICAgICAgICAoc3ltYm9sXHJcbiAgICAgICAgIFwianNcIlxyXG4gICAgICAgICAoc3RyaW5nL2pvaW5cclxuICAgICAgICAgIFwiLlwiXHJcbiAgICAgICAgICAoY29uZC0+IHByZScgKD0gJ3Byb3RvdHlwZSAobGFzdCBwcmUnKSkgYnV0bGFzdCkpKSxcclxuICAgICAgICA6cHJvcGVydHkgcHJvcH0pKSkpKVxyXG4gICh3aGVuXHJcbiAgIChqcy10YWc/IHRhZylcclxuICAgKGxldFxyXG4gICAgW3ByZSAoLT4gdGFnIG1ldGEgOnByZWZpeCldXHJcbiAgICAod2hlbi1ub3RcclxuICAgICAoaGFzLWV4dGVybj8gcHJlKVxyXG4gICAgIChzd2FwIVxyXG4gICAgICBlbnYvKmNvbXBpbGVyKlxyXG4gICAgICB1cGRhdGUtaW5cclxuICAgICAgKGludG9cclxuICAgICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzICgtPiBlbnYgOm5zIDpuYW1lKSA6ZXh0ZXJuc11cclxuICAgICAgIHByZSlcclxuICAgICAgbWVyZ2VcclxuICAgICAge30pKSkpXHJcbiAgKGNhc2VcclxuICAgZG90LWFjdGlvblxyXG4gICA6Y2xqcy5hbmFseXplci9hY2Nlc3NcclxuICAgKGxldFxyXG4gICAgW2NoaWxkcmVuIFs6dGFyZ2V0XV1cclxuICAgIHs6b3AgOmhvc3QtZmllbGQsXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6dGFyZ2V0IHRhcmdldGV4cHIsXHJcbiAgICAgOmZpZWxkIGZpZWxkLFxyXG4gICAgIDpjaGlsZHJlbiBjaGlsZHJlbixcclxuICAgICA6dGFnXHJcbiAgICAgKGlmXHJcbiAgICAgIChqcy10YWc/IHRhZylcclxuICAgICAgKG9yIChqcy10YWcgKC0+IHRhZyBtZXRhIDpwcmVmaXgpIDp0YWcpIHRhZylcclxuICAgICAgdGFnKX0pXHJcbiAgIDpjbGpzLmFuYWx5emVyL2NhbGxcclxuICAgKGxldFxyXG4gICAgW2FyZ2V4cHJzXHJcbiAgICAgKG1hcHYgKGZuKiBbcDFfXzQ4NjI5I10gKGFuYWx5emUgZW52ZSBwMV9fNDg2MjkjKSkgYXJncylcclxuICAgICBjaGlsZHJlblxyXG4gICAgIFs6dGFyZ2V0IDphcmdzXV1cclxuICAgIHs6b3AgOmhvc3QtY2FsbCxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDp0YXJnZXQgdGFyZ2V0ZXhwcixcclxuICAgICA6bWV0aG9kIG1ldGhvZCxcclxuICAgICA6YXJncyBhcmdleHBycyxcclxuICAgICA6Y2hpbGRyZW4gY2hpbGRyZW4sXHJcbiAgICAgOnRhZ1xyXG4gICAgIChpZlxyXG4gICAgICAoanMtdGFnPyB0YWcpXHJcbiAgICAgIChvciAoanMtdGFnICgtPiB0YWcgbWV0YSA6cHJlZml4KSA6cmV0LXRhZykgJ2pzKVxyXG4gICAgICB0YWcpfSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1kby1zdGF0ZW1lbnRzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBleHByc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZG8tc3RhdGVtZW50c1xyXG4gW2VudiBleHByc11cclxuIChkaXNhbGxvd2luZy1yZWN1ciAoYW5hbHl6ZS1kby1zdGF0ZW1lbnRzKiBlbnYgZXhwcnMpKSlcclxuIn0gezpzeW0gZ2V0LWxpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCBlbnZdKX0sIDpzb3VyY2UgIihkZWZuIGdldC1saW5lIFt4IGVudl0gKG9yICgtPiB4IG1ldGEgOmxpbmUpICg6bGluZSBlbnYpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1kby1zdGF0ZW1lbnRzKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZXhwcnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWRvLXN0YXRlbWVudHMqXHJcbiBbZW52IGV4cHJzXVxyXG4gKG1hcHZcclxuICAoZm4qXHJcbiAgIFtwMV9fNDg2MDcjXVxyXG4gICAoYW5hbHl6ZSAoYXNzb2MgZW52IDpjb250ZXh0IDpzdGF0ZW1lbnQpIHAxX180ODYwNyMpKVxyXG4gIChidXRsYXN0IGV4cHJzKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtc2VxLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2VudiBmb3JtIG5hbWVdIFtlbnYgZm9ybSBuYW1lIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXNlcVxyXG4gKFtlbnYgZm9ybSBuYW1lXVxyXG4gIChhbmFseXplLXNlcVxyXG4gICBlbnZcclxuICAgZm9ybVxyXG4gICBuYW1lXHJcbiAgICh3aGVuIGVudi8qY29tcGlsZXIqICg6b3B0aW9ucyBAZW52Lypjb21waWxlciopKSkpXHJcbiAoW2VudiBmb3JtIG5hbWUgb3B0c11cclxuICAoaWZcclxuICAgKDpxdW90ZWQ/IGVudilcclxuICAgKGFuYWx5emUtbGlzdCBlbnYgZm9ybSlcclxuICAgKGxldFxyXG4gICAgW2xpbmVcclxuICAgICAoLT4gZm9ybSBtZXRhIDpsaW5lKVxyXG4gICAgIGxpbmVcclxuICAgICAoaWYgKG5pbD8gbGluZSkgKDpsaW5lIGVudikgbGluZSlcclxuICAgICBjb2xcclxuICAgICAoLT4gZm9ybSBtZXRhIDpjb2x1bW4pXHJcbiAgICAgY29sXHJcbiAgICAgKGlmIChuaWw/IGNvbCkgKDpjb2x1bW4gZW52KSBjb2wpXHJcbiAgICAgZW52XHJcbiAgICAgKGFzc29jIGVudiA6bGluZSBsaW5lIDpjb2x1bW4gY29sKV1cclxuICAgIChsZXRcclxuICAgICBbb3AgKGZpcnN0IGZvcm0pXVxyXG4gICAgICh3aGVuIChuaWw/IG9wKSAodGhyb3cgKGVycm9yIGVudiBcIkNhbid0IGNhbGwgbmlsXCIpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFttZm9ybSAobWFjcm9leHBhbmQtMSBlbnYgZm9ybSldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGlkZW50aWNhbD8gZm9ybSBtZm9ybSlcclxuICAgICAgIChhbmFseXplLXNlcSotd3JhcCBvcCBlbnYgZm9ybSBuYW1lIG9wdHMpXHJcbiAgICAgICAoYW5hbHl6ZSBlbnYgbWZvcm0gbmFtZSBvcHRzKSkpKSkpKSlcclxuIn0gezpzeW0gZGVzdWdhci1kb3R0ZWQtZXhwciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt7OmtleXMgW29wXSwgOmFzIGV4cHJ9XSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVzdWdhci1kb3R0ZWQtZXhwclxyXG4gW3s6a2V5cyBbb3BdLCA6YXMgZXhwcn1dXHJcbiAoY2FzZVxyXG4gIG9wXHJcbiAgKDp2YXIgOmxvY2FsKVxyXG4gIChpZlxyXG4gICAoZG90dGVkLXN5bWJvbD8gKHN5bWJvbCAobmFtZSAoOm5hbWUgZXhwcikpKSlcclxuICAgKGxldFxyXG4gICAgW3NcclxuICAgICAobmFtZSAoOm5hbWUgZXhwcikpXHJcbiAgICAgaWR4XHJcbiAgICAgKC5sYXN0SW5kZXhPZiBzIFwiLlwiKVxyXG4gICAgIF9cclxuICAgICAoYXNzZXJ0IChub3Q9IChpbmMgaWR4KSAoY291bnQgcykpKVxyXG4gICAgIHByZWZpeFxyXG4gICAgICh3aXRoLW1ldGFcclxuICAgICAgKHN5bWJvbCAobmFtZXNwYWNlICg6bmFtZSBleHByKSkgKHN1YnMgcyAwIGlkeCkpXHJcbiAgICAgIChtZXRhICg6Zm9ybSBleHByKSkpXHJcbiAgICAgZmllbGRcclxuICAgICAoc3ltYm9sIChzdWJzIHMgKGluYyBpZHgpKSldXHJcbiAgICAoYXNzZXJ0IChub3QgKDpjb25zdC1leHByIGV4cHIpKSlcclxuICAgIHs6b3AgOmhvc3QtZmllbGQsXHJcbiAgICAgOmVudiAoOmVudiBleHByKSxcclxuICAgICA6Zm9ybSAobGlzdCAnLiBwcmVmaXggZmllbGQpLFxyXG4gICAgIDp0YXJnZXRcclxuICAgICAoZGVzdWdhci1kb3R0ZWQtZXhwclxyXG4gICAgICAoLT5cclxuICAgICAgIGV4cHJcclxuICAgICAgIChhc3NvYyA6bmFtZSBwcmVmaXggOmZvcm0gcHJlZml4KVxyXG4gICAgICAgKGRpc3NvYyA6dGFnKVxyXG4gICAgICAgKGFzc29jLWluIFs6aW5mbyA6bmFtZV0gcHJlZml4KVxyXG4gICAgICAgKGFzc29jLWluIFs6ZW52IDpjb250ZXh0XSA6ZXhwcikpKSxcclxuICAgICA6ZmllbGQgZmllbGQsXHJcbiAgICAgOnRhZyAoOnRhZyBleHByKSxcclxuICAgICA6Y2hpbGRyZW4gWzp0YXJnZXRdfSlcclxuICAgZXhwcilcclxuICBleHByKSlcclxuIn0gezpzeW0gZmluZC1kZWYtY2xhc2gsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IG5zIHNlZ21lbnRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZmluZC1kZWYtY2xhc2hcclxuIFtlbnYgbnMgc2VnbWVudHNdXHJcbiAobGV0XHJcbiAgW3RvLWNoZWNrXHJcbiAgIChtYXBcclxuICAgIChmblxyXG4gICAgIFt4c11cclxuICAgICBbKHN5bWJvbCAoc3RyaW5nL2pvaW4gXCIuXCIgKGJ1dGxhc3QgeHMpKSkgKHN5bWJvbCAobGFzdCB4cykpXSlcclxuICAgIChkcm9wIDIgKHJlZHVjdGlvbnMgY29uaiBbXSBzZWdtZW50cykpKV1cclxuICAoZG9zZXFcclxuICAgW1tjbGFzaC1ucyBuYW1lXSB0by1jaGVja11cclxuICAgKHdoZW5cclxuICAgIChnZXQtaW5cclxuICAgICBAZW52Lypjb21waWxlcipcclxuICAgICBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBjbGFzaC1ucyA6ZGVmcyBuYW1lXSlcclxuICAgICh3YXJuaW5nXHJcbiAgICAgOm5zLXZhci1jbGFzaFxyXG4gICAgIGVudlxyXG4gICAgIHs6bnMgbnMsIDp2YXIgKHN5bWJvbCAoc3RyIGNsYXNoLW5zKSAoc3RyIG5hbWUpKX0pKSkpKVxyXG4ifSB7OnN5bSBoYXMtZXJyb3ItZGF0YT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBoYXMtZXJyb3ItZGF0YT9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2V4XVxyXG4gKGNvbnRhaW5zPyAoZXgtZGF0YSBleCkgOmNsb2p1cmUuZXJyb3IvcGhhc2UpKVxyXG4ifSB7OnN5bSBmbi1uYW1lLXZhciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgbG9jYWxzIG5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmbi1uYW1lLXZhclxyXG4gW2VudiBsb2NhbHMgbmFtZV1cclxuICh3aGVuXHJcbiAgKHNvbWU/IG5hbWUpXHJcbiAgKGxldFxyXG4gICBbbnNcclxuICAgICgtPiBlbnYgOm5zIDpuYW1lKVxyXG4gICAgc2hhZG93XHJcbiAgICAoaGFuZGxlLXN5bWJvbC1sb2NhbCBuYW1lIChnZXQgbG9jYWxzIG5hbWUpKVxyXG4gICAgc2hhZG93XHJcbiAgICAod2hlbiAobmlsPyBzaGFkb3cpIChnZXQtaW4gZW52IFs6anMtZ2xvYmFscyBuYW1lXSkpXHJcbiAgICBmbi1zY29wZVxyXG4gICAgKDpmbi1zY29wZSBlbnYpXHJcbiAgICBuYW1lLXZhclxyXG4gICAgezpuYW1lIG5hbWUsXHJcbiAgICAgOm9wIDpiaW5kaW5nLFxyXG4gICAgIDpsb2NhbCA6Zm4sXHJcbiAgICAgOmluZm9cclxuICAgICB7OmZuLXNlbGYtbmFtZSB0cnVlLCA6Zm4tc2NvcGUgZm4tc2NvcGUsIDpucyBucywgOnNoYWRvdyBzaGFkb3d9fVxyXG4gICAgdGFnXHJcbiAgICAoLT4gbmFtZSBtZXRhIDp0YWcpXHJcbiAgICByZXQtdGFnXHJcbiAgICAod2hlbiAoc29tZT8gdGFnKSB7OnJldC10YWcgdGFnfSldXHJcbiAgIChtZXJnZSBuYW1lLXZhciByZXQtdGFnKSkpKVxyXG4ifSB7OnN5bSBtdW5nZS1ub2RlLWxpYiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbXVuZ2Utbm9kZS1saWJcclxuIFtuYW1lXVxyXG4gKHN0clxyXG4gIFwibm9kZSRtb2R1bGUkXCJcclxuICAobXVuZ2VcclxuICAgKHN0cmluZy9yZXBsYWNlIChzdHIgbmFtZSkgI1wiWy5cXC9dXCIgIz8oOmNsaiBcIlxcXFwkXCIgOmNsanMgXCIkJFwiKSkpKSlcclxuIn0gezpzeW0gKmxvYWQtbWFjcm9zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmxvYWQtbWFjcm9zKiB0cnVlKVxyXG4ifSB7OnN5bSBhZGQtdHlwZXMsIDptZXRhIHs6ZG9jICJQcm9kdWNlcyBhIHVuaW9uIG9mIHR5cGVzLiIsIDphcmdsaXN0cyBbW10gW3QxXSBbdDEgdDJdIFt0MSB0MiAmIHRzXV19LCA6c291cmNlICIoZGVmblxyXG4gYWRkLXR5cGVzXHJcbiBcIlByb2R1Y2VzIGEgdW5pb24gb2YgdHlwZXMuXCJcclxuIChbXSAnYW55KVxyXG4gKFt0MV0gdDEpXHJcbiAoW3QxIHQyXVxyXG4gIChpZlxyXG4gICAob3IgKG5pbD8gdDEpIChuaWw/IHQyKSlcclxuICAgJ2FueVxyXG4gICAoLT4gKHNldC91bmlvbiAoLT50eXBlLXNldCB0MSkgKC0+dHlwZS1zZXQgdDIpKSBjYW5vbmljYWxpemUtdHlwZSkpKVxyXG4gKFt0MSB0MiAmIHRzXSAoYXBwbHkgYWRkLXR5cGVzIChhZGQtdHlwZXMgdDEgdDIpIHRzKSkpXHJcbiJ9IHs6c3ltIGV4Y2x1ZGVkPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgc3ltXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhjbHVkZWQ/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgc3ltXVxyXG4gKG9yXHJcbiAgKHNvbWU/IChnZXRzIGVudiA6bnMgOmV4Y2x1ZGVzIHN5bSkpXHJcbiAgKHNvbWU/XHJcbiAgIChnZXRzXHJcbiAgICBAZW52Lypjb21waWxlcipcclxuICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgIChnZXRzIGVudiA6bnMgOm5hbWUpXHJcbiAgICA6ZXhjbHVkZXNcclxuICAgIHN5bSkpKSlcclxuIn0gezpzeW0gZW1wdHktZW52LCA6bWV0YSB7OmRvYyAiQ29uc3RydWN0IGFuIGVtcHR5IGFuYWx5c2lzIGVudmlyb25tZW50LiBSZXF1aXJlZCB0byBhbmFseXplIGZvcm1zLiIsIDphcmdsaXN0cyAoW10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVtcHR5LWVudlxyXG4gXCJDb25zdHJ1Y3QgYW4gZW1wdHkgYW5hbHlzaXMgZW52aXJvbm1lbnQuIFJlcXVpcmVkIHRvIGFuYWx5emUgZm9ybXMuXCJcclxuIFtdXHJcbiAoZW5zdXJlXHJcbiAgezpucyAoZ2V0LW5hbWVzcGFjZSAqY2xqcy1ucyopLFxyXG4gICA6Y29udGV4dCA6c3RhdGVtZW50LFxyXG4gICA6bG9jYWxzIHt9LFxyXG4gICA6Zm4tc2NvcGUgW10sXHJcbiAgIDpqcy1nbG9iYWxzXHJcbiAgIChpbnRvXHJcbiAgICB7fVxyXG4gICAgKG1hcFxyXG4gICAgIChmbipcclxuICAgICAgW3AxX180ODU5MiNdXHJcbiAgICAgICh2ZWN0b3IgcDFfXzQ4NTkyIyB7Om9wIDpqcy12YXIsIDpuYW1lIHAxX180ODU5MiMsIDpucyAnanN9KSlcclxuICAgICAnKGFsZXJ0XHJcbiAgICAgICB3aW5kb3dcclxuICAgICAgIGRvY3VtZW50XHJcbiAgICAgICBjb25zb2xlXHJcbiAgICAgICBlc2NhcGVcclxuICAgICAgIHVuZXNjYXBlXHJcbiAgICAgICBzY3JlZW5cclxuICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICBuYXZpZ2F0b3JcclxuICAgICAgIGhpc3RvcnlcclxuICAgICAgIGxvY2F0aW9uXHJcbiAgICAgICBnbG9iYWxcclxuICAgICAgIHByb2Nlc3NcclxuICAgICAgIHJlcXVpcmVcclxuICAgICAgIG1vZHVsZVxyXG4gICAgICAgZXhwb3J0cykpKX0pKVxyXG4ifSB7OnN5bSBwdWJsaWMtbmFtZT8sIDptZXRhIHs6ZG9jICJJcyBzeW0gcHVibGljPyIsIDphcmdsaXN0cyAoW25zIHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHB1YmxpYy1uYW1lP1xyXG4gXCJJcyBzeW0gcHVibGljP1wiXHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtucyBzeW1dXHJcbiAobGV0XHJcbiAgW3Zhci1hc3RcclxuICAgKG9yXHJcbiAgICAoZ2V0cyBAZW52Lypjb21waWxlciogOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBucyA6ZGVmcyBzeW0pXHJcbiAgICAjPyg6Y2xqIChnZXRzIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOm1hY3JvcyBzeW0pIDpjbGpzIChnZXRzIChjbG9qdXJlLmNvcmUvZGVyZWYgZW52Lypjb21waWxlciopIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgKHN5bWJvbCAoc3RyIChuYW1lIG5zKSBcIiRtYWNyb3NcIikpIDpkZWZzIHN5bSkpKV1cclxuICAoYW5kXHJcbiAgIChzb21lPyB2YXItYXN0KVxyXG4gICAobm90IChvciAoOnByaXZhdGUgdmFyLWFzdCkgKDphbm9ueW1vdXMgdmFyLWFzdCkpKSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LXdhcm5pbmctaGFuZGxlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt3YXJuaW5nLXR5cGUgZW52IGV4dHJhXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVmYXVsdC13YXJuaW5nLWhhbmRsZXJcclxuIFt3YXJuaW5nLXR5cGUgZW52IGV4dHJhXVxyXG4gKHdoZW5cclxuICAod2FybmluZy10eXBlICpjbGpzLXdhcm5pbmdzKilcclxuICAod2hlbi1sZXRcclxuICAgW3MgKGVycm9yLW1lc3NhZ2Ugd2FybmluZy10eXBlIGV4dHJhKV1cclxuICAgIz8oOmNsaiAoYmluZGluZyBbKm91dCogKmVycipdIChwcmludGxuIChtZXNzYWdlIGVudiAoc3RyIFwiV0FSTklORzogXCIgcykpKSkgOmNsanMgKGJpbmRpbmcgWypwcmludC1mbiogKnByaW50LWVyci1mbipdIChwcmludGxuIChtZXNzYWdlIGVudiAoc3RyIFwiV0FSTklORzogXCIgcykpKSkpKSkpXHJcbiJ9IHs6c3ltIHJlc29sdmUtbnMtYWxpYXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbZW52IG5hbWVdIFtlbnYgbmFtZSBub3QtZm91bmRdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXNvbHZlLW5zLWFsaWFzXHJcbiAoW2VudiBuYW1lXSAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbmFtZSAoc3ltYm9sIG5hbWUpKSlcclxuIChbZW52IG5hbWUgbm90LWZvdW5kXVxyXG4gIChsZXQgW3N5bSAoc3ltYm9sIG5hbWUpXSAoZ2V0ICg6cmVxdWlyZXMgKDpucyBlbnYpKSBzeW0gbm90LWZvdW5kKSkpKVxyXG4ifSB7OnN5bSBpbnRlcm4tbWFjcm9zLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBDbG9qdXJlIG5hbWVzcGFjZSBpbnRlcm4gYWxsIG1hY3JvcyBpbnRvIHRoZSBhbWJpZW50IENsb2p1cmVTY3JpcHRcbiAgIGFuYWx5c2lzIGVudmlyb25tZW50LiIsIDphcmdsaXN0cyBbW25zXSBbbnMgcmVsb2FkXV19LCA6c291cmNlICIoZGVmblxyXG4gaW50ZXJuLW1hY3Jvc1xyXG4gXCJHaXZlbiBhIENsb2p1cmUgbmFtZXNwYWNlIGludGVybiBhbGwgbWFjcm9zIGludG8gdGhlIGFtYmllbnQgQ2xvanVyZVNjcmlwdFxcbiAgIGFuYWx5c2lzIGVudmlyb25tZW50LlwiXHJcbiAoW25zXSAoaW50ZXJuLW1hY3JvcyBucyBmYWxzZSkpXHJcbiAoW25zIHJlbG9hZF1cclxuICAod2hlblxyXG4gICAob3JcclxuICAgIChuaWw/IChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDptYWNyb3MpKVxyXG4gICAgcmVsb2FkKVxyXG4gICAoc3dhcCFcclxuICAgIGVudi8qY29tcGlsZXIqXHJcbiAgICBhc3NvYy1pblxyXG4gICAgWzpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXMgbnMgOm1hY3Jvc11cclxuICAgICgtPj5cclxuICAgICAjPyg6Y2xqIChucy1pbnRlcm5zIG5zKSA6Y2xqcyAobnMtaW50ZXJucyogbnMpKVxyXG4gICAgIChmaWx0ZXIgKGZuIFtbXyB2XV0gKC5pc01hY3JvIHYpKSlcclxuICAgICAobWFwXHJcbiAgICAgIChmblxyXG4gICAgICAgW1trIHZdXVxyXG4gICAgICAgW2tcclxuICAgICAgICAoYXMtPlxyXG4gICAgICAgICAobWV0YSB2KVxyXG4gICAgICAgICB2bVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbbnMgKC5nZXROYW1lICg6bnMgdm0pKV1cclxuICAgICAgICAgIChhc3NvY1xyXG4gICAgICAgICAgIHZtXHJcbiAgICAgICAgICAgOm5zXHJcbiAgICAgICAgICAgbnNcclxuICAgICAgICAgICA6bmFtZVxyXG4gICAgICAgICAgIChzeW1ib2wgKHN0ciBucykgKHN0ciBrKSlcclxuICAgICAgICAgICA6bWFjcm9cclxuICAgICAgICAgICB0cnVlKSkpXSkpXHJcbiAgICAgKGludG8ge30pKSkpKSlcclxuIn0gezpzeW0gY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbezprZXlzIFtvcF0sIDphcyBlfV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbnN0LWV4cHItPmNvbnN0YW50LXZhbHVlXHJcbiBbezprZXlzIFtvcF0sIDphcyBlfV1cclxuIChjYXNlXHJcbiAgb3BcclxuICA6cXVvdGVcclxuICAoY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUgKDpleHByIGUpKVxyXG4gIDpjb25zdFxyXG4gICg6dmFsIGUpXHJcbiAgOm1hcFxyXG4gICh6aXBtYXBcclxuICAgKG1hcCBjb25zdC1leHByLT5jb25zdGFudC12YWx1ZSAoOmtleXMgZSkpXHJcbiAgIChtYXAgY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUgKDp2YWxzIGUpKSlcclxuICA6c2V0XHJcbiAgKGludG8gI3t9IChtYXAgY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUgKDppdGVtcyBlKSkpXHJcbiAgOnZlY3RvclxyXG4gIChpbnRvIFtdIChtYXAgY29uc3QtZXhwci0+Y29uc3RhbnQtdmFsdWUgKDppdGVtcyBlKSkpKSlcclxuIn0gezpzeW0gQk9PTEVBTl9PUl9TRVEsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEJPT0xFQU5fT1JfU0VRICcje3NlcSBib29sZWFufSlcclxuIn0gezpzeW0gKm1hY3JvLWluZmVyKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKm1hY3JvLWluZmVyKiB0cnVlKVxyXG4ifSB7OnN5bSBnZW4tY29uc3RhbnQtaWQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdmFsdWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZW4tY29uc3RhbnQtaWRcclxuIFt2YWx1ZV1cclxuIChsZXRcclxuICBbcHJlZml4XHJcbiAgIChjb25kXHJcbiAgICAoa2V5d29yZD8gdmFsdWUpXHJcbiAgICBcImNzdCRrdyRcIlxyXG4gICAgKHN5bWJvbD8gdmFsdWUpXHJcbiAgICBcImNzdCRzeW0kXCJcclxuICAgIDplbHNlXHJcbiAgICAodGhyb3dcclxuICAgICAjPyg6Y2xqIChFeGNlcHRpb24uIChzdHIgXCJjb25zdGFudCB0eXBlIFwiICh0eXBlIHZhbHVlKSBcIiBub3Qgc3VwcG9ydGVkXCIpKSA6Y2xqcyAoanMvRXJyb3IuIChzdHIgXCJjb25zdGFudCB0eXBlIFwiICh0eXBlIHZhbHVlKSBcIiBub3Qgc3VwcG9ydGVkXCIpKSkpKVxyXG4gICBuYW1lXHJcbiAgIChpZiAoa2V5d29yZD8gdmFsdWUpIChzdWJzIChzdHIgdmFsdWUpIDEpIChzdHIgdmFsdWUpKVxyXG4gICBuYW1lXHJcbiAgIChpZlxyXG4gICAgKD0gXCIuXCIgbmFtZSlcclxuICAgIFwiX0RPVF9cIlxyXG4gICAgKC0+XHJcbiAgICAgbmFtZVxyXG4gICAgIChzdHJpbmcvcmVwbGFjZSBcIi1cIiBcIl9EQVNIX1wiKVxyXG4gICAgIChtdW5nZSlcclxuICAgICAoc3RyaW5nL3JlcGxhY2UgXCIuXCIgXCIkXCIpXHJcbiAgICAgKHN0cmluZy9yZXBsYWNlXHJcbiAgICAgICNcIig/aSlbXmEtejAtOSRfXVwiXHJcbiAgICAgIChmbiogW3AxX180ODU5MSNdIChoZXgtZm9ybWF0IHAxX180ODU5MSMgNCkpKSkpXVxyXG4gIChzeW1ib2wgKHN0ciBwcmVmaXggbmFtZSkpKSlcclxuIn0gezpzeW0gQk9PTEVBTl9TWU0sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEJPT0xFQU5fU1lNICdib29sZWFuKVxyXG4ifSB7OnN5bSBtYWNyby1hdXRvbG9hZC1ucz8sIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgZm9ybSBjaGVjayB3aGV0aGVyIHRoZSBzcGVjIG5hbWVzcGFjZSByZXF1aXJlcyBhIG1hY3JvIGZpbGVcbiAgIG9mIHRoZSBzYW1lIG5hbWUuIElmIHNvIHJldHVybiB0cnVlLiIsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYWNyby1hdXRvbG9hZC1ucz9cclxuIFwiR2l2ZW4gYSBzcGVjIGZvcm0gY2hlY2sgd2hldGhlciB0aGUgc3BlYyBuYW1lc3BhY2UgcmVxdWlyZXMgYSBtYWNybyBmaWxlXFxuICAgb2YgdGhlIHNhbWUgbmFtZS4gSWYgc28gcmV0dXJuIHRydWUuXCJcclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW2Zvcm1dXHJcbiAod2hlblxyXG4gICptYWNyby1pbmZlcipcclxuICAobGV0XHJcbiAgIFtuc1xyXG4gICAgKGlmIChzZXF1ZW50aWFsPyBmb3JtKSAoZmlyc3QgZm9ybSkgZm9ybSlcclxuICAgIHs6a2V5cyBbdXNlLW1hY3JvcyByZXF1aXJlLW1hY3Jvc119XHJcbiAgICAob3JcclxuICAgICAoZ2V0LWluIEBlbnYvKmNvbXBpbGVyKiBbOmNsanMuYW5hbHl6ZXIvbmFtZXNwYWNlcyBuc10pXHJcbiAgICAgIz8oOmNsaiAod2hlbi1sZXQgW3JlcyAodXRpbC9ucy0+c291cmNlIG5zKV0gKDphc3QgKHBhcnNlLW5zIHJlcykpKSkpXVxyXG4gICAob3JcclxuICAgIChzb21lICN7bnN9ICh2YWxzIHVzZS1tYWNyb3MpKVxyXG4gICAgKHNvbWUgI3tuc30gKHZhbHMgcmVxdWlyZS1tYWNyb3MpKSkpKSlcclxuIn0gezpzeW0gZ2V0LXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlXSl9LCA6c291cmNlICIoZGVmblxyXG4gZ2V0LXRhZ1xyXG4gW2VdXHJcbiAoaWYtc29tZVxyXG4gIFt0YWcgKC0+IGUgOmZvcm0gbWV0YSA6dGFnKV1cclxuICB0YWdcclxuICAoaWYtc29tZSBbdGFnICgtPiBlIDp0YWcpXSB0YWcgKC0+IGUgOmluZm8gOnRhZykpKSlcclxuIn0gezpzeW0gaW1wbGljaXQtbnNlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGltcGxpY2l0LW5zZXNcclxuICcje1N0cmluZyBnb29nLnN0cmluZyBnb29nIGdvb2cub2JqZWN0IE1hdGggZ29vZy5hcnJheX0pXHJcbiJ9IHs6c3ltIHZhbGlkLXByb3RvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuIHZhbGlkLXByb3RvIFt4XSAod2hlbiAoc3ltYm9sPyB4KSB4KSlcclxuIn0gezpzeW0gbm9ybWFsaXplLWpzLXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbm9ybWFsaXplLWpzLXRhZ1xyXG4gW3hdXHJcbiAoaWYtbm90XHJcbiAgKD0gJ2pzIHgpXHJcbiAgKHdpdGgtbWV0YVxyXG4gICAnanNcclxuICAgezpwcmVmaXhcclxuICAgIChjb25qXHJcbiAgICAgKC0+PiAoc3RyaW5nL3NwbGl0IChuYW1lIHgpICNcIlxcLlwiKSAobWFwIHN5bWJvbCkgdmVjKVxyXG4gICAgICdwcm90b3R5cGUpfSlcclxuICB4KSlcclxuIn0gezpzeW0gYW5hbHl6ZS1saXN0LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VudiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1saXN0XHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW2V4cHItZW52XHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGl0ZW1zXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgKG1hcHYgKGZuKiBbcDFfXzQ4NjM3I10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjM3IykpIGZvcm0pKV1cclxuICAoYW5hbHl6ZS13cmFwLW1ldGFcclxuICAgezpvcCA6bGlzdCxcclxuICAgIDplbnYgZW52LFxyXG4gICAgOmZvcm0gZm9ybSxcclxuICAgIDppdGVtcyBpdGVtcyxcclxuICAgIDpjaGlsZHJlbiBbOml0ZW1zXSxcclxuICAgIDp0YWcgJ2NsanMuY29yZS9JTGlzdH0pKSlcclxuIn0gezpzeW0gd2FybmluZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt3YXJuaW5nLXR5cGUgZW52IGV4dHJhXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2FybmluZ1xyXG4gW3dhcm5pbmctdHlwZSBlbnYgZXh0cmFdXHJcbiAoZG9zZXFcclxuICBbaGFuZGxlciAqY2xqcy13YXJuaW5nLWhhbmRsZXJzKl1cclxuICAoaGFuZGxlciB3YXJuaW5nLXR5cGUgZW52IGV4dHJhKSkpXHJcbiJ9IHs6c3ltIGltcGxpY2l0LWltcG9ydD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHByZWZpeCBzdWZmaXhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbXBsaWNpdC1pbXBvcnQ/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFtlbnYgcHJlZml4IHN1ZmZpeF1cclxuIChjb250YWlucz8gaW1wbGljaXQtbnNlcyBwcmVmaXgpKVxyXG4ifSB7OnN5bSBtaXNzaW5nLXVzZS1tYWNyb3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdXNlLW1hY3JvcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtaXNzaW5nLXVzZS1tYWNyb3NcclxuIFt1c2UtbWFjcm9zIGVudl1cclxuIChsZXRcclxuICBbY2VudiBAZW52Lypjb21waWxlcipdXHJcbiAgKGludG9cclxuICAge31cclxuICAgKGZpbHRlciAoZm4gW1tzeW0gbGliXV0gKG1pc3NpbmctdXNlLW1hY3JvPyBsaWIgc3ltKSkgdXNlLW1hY3JvcykpKSlcclxuIn0gezpzeW0gYW5hbHl6ZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm0gbmFtZSBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZSpcclxuIFtlbnYgZm9ybSBuYW1lIG9wdHNdXHJcbiAobGV0XHJcbiAgW3Bhc3Nlc1xyXG4gICAqcGFzc2VzKlxyXG4gICBwYXNzZXNcclxuICAgKGlmIChuaWw/IHBhc3NlcykgZGVmYXVsdC1wYXNzZXMgcGFzc2VzKVxyXG4gICBmb3JtXHJcbiAgIChpZiAoaW5zdGFuY2U/IExhenlTZXEgZm9ybSkgKGlmIChzZXEgZm9ybSkgZm9ybSAoKSkgZm9ybSlcclxuICAgYXN0XHJcbiAgIChhbmFseXplLWZvcm0gZW52IGZvcm0gbmFtZSBvcHRzKV1cclxuICAocmVkdWNlIChmbiBbYXN0IHBhc3NdIChwYXNzIGVudiBhc3Qgb3B0cykpIGFzdCBwYXNzZXMpKSlcclxuIn0gezpzeW0gLWNsanMtbWFjcm9zLWxvYWRlZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgLWNsanMtbWFjcm9zLWxvYWRlZCAoYXRvbSBmYWxzZSkpXHJcbiJ9IHs6c3ltIGNoZWNrLXVzZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdXNlcyBlbnZdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay11c2VzXHJcbiBbdXNlcyBlbnZdXHJcbiAobGV0XHJcbiAgW2NlbnYgQGVudi8qY29tcGlsZXIqXVxyXG4gIChkb3NlcVxyXG4gICBbW3N5bSBsaWJdIHVzZXNdXHJcbiAgICh3aGVuXHJcbiAgICAobWlzc2luZy11c2U/IGxpYiBzeW0gY2VudilcclxuICAgICh0aHJvd1xyXG4gICAgIChlcnJvclxyXG4gICAgICBlbnZcclxuICAgICAgKGVycm9yLW1lc3NhZ2VcclxuICAgICAgIDp1bmRlY2xhcmVkLW5zLWZvcm1cclxuICAgICAgIHs6dHlwZSBcInZhclwiLCA6bGliIGxpYiwgOnN5bSBzeW19KSkpKSkpKVxyXG4ifSB7OnN5bSBmaW5kLW1hdGNoaW5nLW1ldGhvZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmIHBhcmFtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZpbmQtbWF0Y2hpbmctbWV0aG9kXHJcbiBbZiBwYXJhbXNdXHJcbiAobGV0XHJcbiAgW21ldGhvZHMgKG9yICg6bWV0aG9kcyBmKSAoLT4gZiA6aW5mbyA6bWV0aG9kcykpIGMgKGNvdW50IHBhcmFtcyldXHJcbiAgKHNvbWVcclxuICAgKGZuIFttXSAoYW5kIChvciAoPT0gKDpmaXhlZC1hcml0eSBtKSBjKSAoOnZhcmlhZGljPyBtKSkgbSkpXHJcbiAgIG1ldGhvZHMpKSlcclxuIn0gezpzeW0gKnByaXZhdGUtdmFyLWFjY2Vzcy1ub3dhcm4qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqcHJpdmF0ZS12YXItYWNjZXNzLW5vd2FybiogZmFsc2UpXHJcbiJ9IHs6c3ltIGludm9rZS1hcmctdHlwZS12YWxpZGF0b3JzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW52b2tlLWFyZy10eXBlLXZhbGlkYXRvcnNcclxuIChsZXRcclxuICBbYWdldC12YWxpZGF0b3JcclxuICAgezp2YWxpZD9cclxuICAgIChmbipcclxuICAgICBbcDFfXzQ4NjQ0I11cclxuICAgICAoYW5kXHJcbiAgICAgIChhcnJheS10eXBlPyAoZmlyc3QgcDFfXzQ4NjQ0IykpXHJcbiAgICAgIChldmVyeT8gbnVtZXJpYy10eXBlPyAocmVzdCBwMV9fNDg2NDQjKSkpKSxcclxuICAgIDp3YXJuaW5nLXR5cGUgOmludmFsaWQtYXJyYXktYWNjZXNzfVxyXG4gICBhc2V0LXZhbGlkYXRvclxyXG4gICB7OnZhbGlkP1xyXG4gICAgKGZuKlxyXG4gICAgIFtwMV9fNDg2NDUjXVxyXG4gICAgIChhbmRcclxuICAgICAgKGFycmF5LXR5cGU/IChmaXJzdCBwMV9fNDg2NDUjKSlcclxuICAgICAgKGV2ZXJ5PyBudW1lcmljLXR5cGU/IChidXRsYXN0IChyZXN0IHAxX180ODY0NSMpKSkpKSxcclxuICAgIDp3YXJuaW5nLXR5cGUgOmludmFsaWQtYXJyYXktYWNjZXNzfV1cclxuICB7J2NsanMuY29yZS9jaGVja2VkLWFnZXQgYWdldC12YWxpZGF0b3IsXHJcbiAgICdjbGpzLmNvcmUvY2hlY2tlZC1hc2V0IGFzZXQtdmFsaWRhdG9yLFxyXG4gICAnY2xqcy5jb3JlL2NoZWNrZWQtYWdldCcgYWdldC12YWxpZGF0b3IsXHJcbiAgICdjbGpzLmNvcmUvY2hlY2tlZC1hc2V0JyBhc2V0LXZhbGlkYXRvcn0pKVxyXG4ifSB7OnN5bSAqY2xqcy1maWxlKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmNsanMtZmlsZSogbmlsKVxyXG4ifSB7OnN5bSAqZmlsZS1kZWZzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmZpbGUtZGVmcyogbmlsKVxyXG4ifSB7OnN5bSBpbmZlci1pZiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZmVyLWlmXHJcbiBbZW52IGVdXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbb3AgZm9ybV19XHJcbiAgICh1bndyYXAtcXVvdGUgKDp0ZXN0IGUpKVxyXG4gICB0aGVuLXRhZ1xyXG4gICAoaW5mZXItdGFnIGVudiAoOnRoZW4gZSkpXVxyXG4gIChpZlxyXG4gICAoYW5kXHJcbiAgICAjPyg6Y2xqICg9IG9wIDpjb25zdCkgOmNsanMgKGtleXdvcmQtaWRlbnRpY2FsPyBvcCA6Y29uc3QpKVxyXG4gICAgKG5vdCAobmlsPyBmb3JtKSlcclxuICAgIChub3QgKGZhbHNlPyBmb3JtKSkpXHJcbiAgIHRoZW4tdGFnXHJcbiAgIChsZXRcclxuICAgIFtlbHNlLXRhZyAoaW5mZXItdGFnIGVudiAoOmVsc2UgZSkpXVxyXG4gICAgKGNvbmRcclxuICAgICAob3JcclxuICAgICAgIz8oOmNsaiAoPSB0aGVuLXRhZyBlbHNlLXRhZykgOmNsanMgKHN5bWJvbC1pZGVudGljYWw/IHRoZW4tdGFnIGVsc2UtdGFnKSlcclxuICAgICAgIz8oOmNsaiAoPSBlbHNlLXRhZyBJR05PUkVfU1lNKSA6Y2xqcyAoc3ltYm9sLWlkZW50aWNhbD8gZWxzZS10YWcgSUdOT1JFX1NZTSkpKVxyXG4gICAgIHRoZW4tdGFnXHJcbiAgICAgIz8oOmNsaiAoPSB0aGVuLXRhZyBJR05PUkVfU1lNKSA6Y2xqcyAoc3ltYm9sLWlkZW50aWNhbD8gdGhlbi10YWcgSUdOT1JFX1NZTSkpXHJcbiAgICAgZWxzZS10YWdcclxuICAgICAoYW5kXHJcbiAgICAgIChvciAoc29tZT8gKGdldCBOT1RfTkFUSVZFIHRoZW4tdGFnKSkgKHR5cGU/IGVudiB0aGVuLXRhZykpXHJcbiAgICAgIChvciAoc29tZT8gKGdldCBOT1RfTkFUSVZFIGVsc2UtdGFnKSkgKHR5cGU/IGVudiBlbHNlLXRhZykpKVxyXG4gICAgICdjbGpcclxuICAgICA6ZWxzZVxyXG4gICAgIChpZlxyXG4gICAgICAoYW5kXHJcbiAgICAgICAoc29tZT8gKGdldCBCT09MRUFOX09SX1NFUSB0aGVuLXRhZykpXHJcbiAgICAgICAoc29tZT8gKGdldCBCT09MRUFOX09SX1NFUSBlbHNlLXRhZykpKVxyXG4gICAgICAnc2VxXHJcbiAgICAgIChsZXRcclxuICAgICAgIFt0aGVuLXRhZ1xyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAjPyg6Y2xqIChzZXQ/IHRoZW4tdGFnKSA6Y2xqcyAoY2xqcy1zZXQ/IHRoZW4tdGFnKSlcclxuICAgICAgICAgdGhlbi10YWdcclxuICAgICAgICAgI3t0aGVuLXRhZ30pXHJcbiAgICAgICAgZWxzZS10YWdcclxuICAgICAgICAoaWZcclxuICAgICAgICAgIz8oOmNsaiAoc2V0PyBlbHNlLXRhZykgOmNsanMgKGNsanMtc2V0PyBlbHNlLXRhZykpXHJcbiAgICAgICAgIGVsc2UtdGFnXHJcbiAgICAgICAgICN7ZWxzZS10YWd9KV1cclxuICAgICAgIChpbnRvIHRoZW4tdGFnIGVsc2UtdGFnKSkpKSkpKSlcclxuIn0gezpzeW0gKnZlcmJvc2UqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqdmVyYm9zZSogZmFsc2UpXHJcbiJ9IHs6c3ltIGFuYWx5emUtanMtdmFsdWUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLWpzLXZhbHVlXHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW3ZhbCAoLi12YWwgZm9ybSkgZXhwci1lbnYgKGFzc29jIGVudiA6Y29udGV4dCA6ZXhwcildXHJcbiAgKGlmXHJcbiAgIChtYXA/IHZhbClcclxuICAgKGxldFxyXG4gICAgW2tleXNcclxuICAgICAodmVjIChrZXlzIHZhbCkpXHJcbiAgICAgdmFsc1xyXG4gICAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgICAobWFwdlxyXG4gICAgICAgKGZuKiBbcDFfXzQ4NjQwI10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjQwIykpXHJcbiAgICAgICAodmFscyB2YWwpKSldXHJcbiAgICB7Om9wIDpqcy1vYmplY3QsXHJcbiAgICAgOmVudiBlbnYsXHJcbiAgICAgOmZvcm0gZm9ybSxcclxuICAgICA6a2V5cyBrZXlzLFxyXG4gICAgIDp2YWxzIHZhbHMsXHJcbiAgICAgOmNoaWxkcmVuIFs6dmFsc10sXHJcbiAgICAgOnRhZyAnb2JqZWN0fSlcclxuICAgKGxldFxyXG4gICAgW2l0ZW1zXHJcbiAgICAgKGRpc2FsbG93aW5nLXJlY3VyXHJcbiAgICAgIChtYXB2IChmbiogW3AxX180ODY0MSNdIChhbmFseXplIGV4cHItZW52IHAxX180ODY0MSMpKSB2YWwpKV1cclxuICAgIHs6b3AgOmpzLWFycmF5LFxyXG4gICAgIDplbnYgZW52LFxyXG4gICAgIDpmb3JtIGZvcm0sXHJcbiAgICAgOml0ZW1zIGl0ZW1zLFxyXG4gICAgIDpjaGlsZHJlbiBbOml0ZW1zXSxcclxuICAgICA6dGFnICdhcnJheX0pKSkpXHJcbiJ9IHs6c3ltIG5zLT5tb2R1bGUtdHlwZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5zLT5tb2R1bGUtdHlwZVxyXG4gW25zXVxyXG4gKGNvbmRcclxuICAoanMtbW9kdWxlLWV4aXN0cz8gbnMpXHJcbiAgOmpzXHJcbiAgKG5vZGUtbW9kdWxlLWRlcD8gbnMpXHJcbiAgOm5vZGVcclxuICAoZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz8gbnMpXHJcbiAgOmdsb2JhbCkpXHJcbiJ9IHs6c3ltIHNvdXJjZS1pbmZvLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2Vudl0gW25hbWUgZW52XV19LCA6c291cmNlICIoZGVmblxyXG4gc291cmNlLWluZm9cclxuIChbZW52XSAod2hlbiAoOmxpbmUgZW52KSAoc291cmNlLWluZm8gbmlsIGVudikpKVxyXG4gKFtuYW1lIGVudl1cclxuICAoY29uZC0+XHJcbiAgIHs6ZmlsZVxyXG4gICAgKGlmXHJcbiAgICAgKD0gKC0+IGVudiA6bnMgOm5hbWUpICdjbGpzLmNvcmUpXHJcbiAgICAgXCJjbGpzL2NvcmUuY2xqc1wiXHJcbiAgICAgKmNsanMtZmlsZSopLFxyXG4gICAgOmxpbmUgKGdldC1saW5lIG5hbWUgZW52KSxcclxuICAgIDpjb2x1bW4gKGdldC1jb2wgbmFtZSBlbnYpfVxyXG4gICAoOnJvb3Qtc291cmNlLWluZm8gZW52KVxyXG4gICAobWVyZ2UgKHNlbGVjdC1rZXlzIGVudiBbOnJvb3Qtc291cmNlLWluZm9dKSkpKSlcclxuIn0gezpzeW0gYW5hbHl6ZS1mbi1tZXRob2QtcGFyYW0sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1mbi1tZXRob2QtcGFyYW1cclxuIFtlbnZdXHJcbiAoZm5cclxuICBbW2xvY2FscyBwYXJhbXNdIFthcmctaWQgbmFtZV1dXHJcbiAgKHdoZW5cclxuICAgKG5hbWVzcGFjZSBuYW1lKVxyXG4gICAodGhyb3dcclxuICAgIChlcnJvciBlbnYgKHN0ciBcIkNhbid0IHVzZSBxdWFsaWZpZWQgbmFtZSBhcyBwYXJhbWV0ZXI6IFwiIG5hbWUpKSkpXHJcbiAgKGxldFxyXG4gICBbbGluZVxyXG4gICAgKGdldC1saW5lIG5hbWUgZW52KVxyXG4gICAgY29sdW1uXHJcbiAgICAoZ2V0LWNvbCBuYW1lIGVudilcclxuICAgIG5tZXRhXHJcbiAgICAobWV0YSBuYW1lKVxyXG4gICAgdGFnXHJcbiAgICAoOnRhZyBubWV0YSlcclxuICAgIHNoYWRvd1xyXG4gICAgKHdoZW4gKHNvbWU/IGxvY2FscykgKGhhbmRsZS1zeW1ib2wtbG9jYWwgbmFtZSAobG9jYWxzIG5hbWUpKSlcclxuICAgIGVudlxyXG4gICAgKG1lcmdlIChzZWxlY3Qta2V5cyBlbnYgWzpjb250ZXh0XSkgezpsaW5lIGxpbmUsIDpjb2x1bW4gY29sdW1ufSlcclxuICAgIHBhcmFtXHJcbiAgICB7Om5hbWUgbmFtZSxcclxuICAgICA6YmluZGluZy1mb3JtPyB0cnVlLFxyXG4gICAgIDpvcCA6YmluZGluZyxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Y29sdW1uIGNvbHVtbixcclxuICAgICA6bGluZSBsaW5lLFxyXG4gICAgIDphcmctaWQgYXJnLWlkLFxyXG4gICAgIDppbmZvIHs6bmFtZSBuYW1lLCA6c2hhZG93IHNoYWRvd30sXHJcbiAgICAgOnRhZyB0YWcsXHJcbiAgICAgOnNoYWRvdyBzaGFkb3csXHJcbiAgICAgOmxvY2FsIDphcmd9XVxyXG4gICBbKGFzc29jIGxvY2FscyBuYW1lIHBhcmFtKSAoY29uaiBwYXJhbXMgcGFyYW0pXSkpKVxyXG4ifSB7OnN5bSBhbmFseXplLXNldCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtc2V0XHJcbiBbZW52IGZvcm1dXHJcbiAobGV0XHJcbiAgW2V4cHItZW52XHJcbiAgIChhc3NvYyBlbnYgOmNvbnRleHQgOmV4cHIpXHJcbiAgIGl0ZW1zXHJcbiAgIChkaXNhbGxvd2luZy1yZWN1clxyXG4gICAgKG1hcHYgKGZuKiBbcDFfXzQ4NjM5I10gKGFuYWx5emUgZXhwci1lbnYgcDFfXzQ4NjM5IykpIGZvcm0pKV1cclxuICAoYW5hbHl6ZS13cmFwLW1ldGFcclxuICAgezpvcCA6c2V0LFxyXG4gICAgOmVudiBlbnYsXHJcbiAgICA6Zm9ybSBmb3JtLFxyXG4gICAgOml0ZW1zIGl0ZW1zLFxyXG4gICAgOmNoaWxkcmVuIFs6aXRlbXNdLFxyXG4gICAgOnRhZyAnY2xqcy5jb3JlL0lTZXR9KSkpXHJcbiJ9IHs6c3ltIG51bWVyaWMtdHlwZT8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbdF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG51bWVyaWMtdHlwZT9cclxuICM/KDpjbGpzIHs6dGFnIGJvb2xlYW59KVxyXG4gW3RdXHJcbiAoY29uZFxyXG4gIChuaWw/IHQpXHJcbiAgdHJ1ZVxyXG4gICg9ICdjbGotbmlsIHQpXHJcbiAgdHJ1ZVxyXG4gIChqcy10YWc/IHQpXHJcbiAgdHJ1ZVxyXG4gIDplbHNlXHJcbiAgKGlmXHJcbiAgIChhbmQgKHN5bWJvbD8gdCkgKHNvbWU/IChnZXQgTlVNRVJJQ19TRVQgdCkpKVxyXG4gICB0cnVlXHJcbiAgICh3aGVuXHJcbiAgICAjPyg6Y2xqIChzZXQ/IHQpIDpjbGpzIChjbGpzLXNldD8gdCkpXHJcbiAgICAob3JcclxuICAgICAoY29udGFpbnM/IHQgJ251bWJlcilcclxuICAgICAoY29udGFpbnM/IHQgJ2xvbmcpXHJcbiAgICAgKGNvbnRhaW5zPyB0ICdkb3VibGUpXHJcbiAgICAgKGNvbnRhaW5zPyB0ICdhbnkpXHJcbiAgICAgKGNvbnRhaW5zPyB0ICdqcykpKSkpKVxyXG4ifSB7OnN5bSBhc3Q/LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3Q/XHJcbiAjPyg6Y2xqcyB7OnRhZyBib29sZWFufSlcclxuIFt4XVxyXG4gKGFuZCAobWFwPyB4KSAoY29udGFpbnM/IHggOm9wKSkpXHJcbiJ9IHs6c3ltIGNoZWNrZWQtYXJyYXlzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBmYWxzZS15LCA6d2Fybiwgb3IgOmVycm9yIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gYW5kIHRoZVxuICAgY3VycmVudCB2YWx1ZSBvZiAqdW5jaGVja2VkLWFycmF5cyouIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2tlZC1hcnJheXNcclxuIFwiUmV0dXJucyBmYWxzZS15LCA6d2Fybiwgb3IgOmVycm9yIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gYW5kIHRoZVxcbiAgIGN1cnJlbnQgdmFsdWUgb2YgKnVuY2hlY2tlZC1hcnJheXMqLlwiXHJcbiBbXVxyXG4gKHdoZW5cclxuICAoYW5kIChub3QgKDphZHZhbmNlZCAoY29tcGlsZXItb3B0aW9ucykpKSAobm90ICp1bmNoZWNrZWQtYXJyYXlzKikpXHJcbiAgKmNoZWNrZWQtYXJyYXlzKikpXHJcbiJ9IHs6c3ltIGVsaWRlLWVudiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgYXN0IG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuIGVsaWRlLWVudiBbZW52IGFzdCBvcHRzXSAoZGlzc29jIGFzdCA6ZW52KSlcclxuIn0gezpzeW0ganMtbW9kdWxlLWV4aXN0cz8qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBqcy1tb2R1bGUtZXhpc3RzPyogKG1lbW9pemUgaW50ZXJuYWwtanMtbW9kdWxlLWV4aXN0cz8pKVxyXG4ifSB7OnN5bSBwYXJzZS1yZXF1aXJlLXNwZWMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IG1hY3Jvcz8gZGVwcyBhbGlhc2VzIHNwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1yZXF1aXJlLXNwZWNcclxuIFtlbnYgbWFjcm9zPyBkZXBzIGFsaWFzZXMgc3BlY11cclxuIChpZlxyXG4gIChvciAoc3ltYm9sPyBzcGVjKSAoc3RyaW5nPyBzcGVjKSlcclxuICAocmVjdXIgZW52IG1hY3Jvcz8gZGVwcyBhbGlhc2VzIFtzcGVjXSlcclxuICAoZG9cclxuICAgKGJhc2ljLXZhbGlkYXRlLW5zLXNwZWMgZW52IG1hY3Jvcz8gc3BlYylcclxuICAgKGxldFxyXG4gICAgW1tsaWIgJiBvcHRzXVxyXG4gICAgIHNwZWNcclxuICAgICBbbGliIGpzLW1vZHVsZS1wcm92aWRlc11cclxuICAgICAoaWYtc29tZVxyXG4gICAgICBbanMtbW9kdWxlLW5hbWVcclxuICAgICAgIChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6anMtbW9kdWxlLWluZGV4IChzdHIgbGliKSA6bmFtZSldXHJcbiAgICAgIFsoc3ltYm9sIGpzLW1vZHVsZS1uYW1lKSBsaWJdXHJcbiAgICAgIFtsaWIgbmlsXSlcclxuICAgICB7YWxpYXMgOmFzLFxyXG4gICAgICByZWZlcnJlZCA6cmVmZXIsXHJcbiAgICAgIHJlbmFtZWQgOnJlbmFtZSxcclxuICAgICAgOm9yIHthbGlhcyAoaWYgKHN0cmluZz8gbGliKSAoc3ltYm9sIChtdW5nZSBsaWIpKSBsaWIpfX1cclxuICAgICAoYXBwbHkgaGFzaC1tYXAgb3B0cylcclxuICAgICByZWZlcnJlZC13aXRob3V0LXJlbmFtZWRcclxuICAgICAoc2VxIChyZW1vdmUgKHNldCAoa2V5cyByZW5hbWVkKSkgcmVmZXJyZWQpKVxyXG4gICAgIFtyayB1ayByZW5rXVxyXG4gICAgIChpZlxyXG4gICAgICBtYWNyb3M/XHJcbiAgICAgIFs6cmVxdWlyZS1tYWNyb3MgOnVzZS1tYWNyb3MgOnJlbmFtZS1tYWNyb3NdXHJcbiAgICAgIFs6cmVxdWlyZSA6dXNlIDpyZW5hbWVdKV1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChvciAoc3ltYm9sPyBhbGlhcykgKG5pbD8gYWxpYXMpKVxyXG4gICAgICh0aHJvd1xyXG4gICAgICAoZXJyb3JcclxuICAgICAgIGVudlxyXG4gICAgICAgKHBhcnNlLW5zLWVycm9yLW1zZ1xyXG4gICAgICAgIHNwZWNcclxuICAgICAgICBcIjphcyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc3ltYm9sIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpXHJcbiAgICAod2hlblxyXG4gICAgIChzb21lPyBhbGlhcylcclxuICAgICAobGV0XHJcbiAgICAgIFthbGlhcy10eXBlXHJcbiAgICAgICAoaWYgbWFjcm9zPyA6bWFjcm9zIDpmbnMpXHJcbiAgICAgICBsaWInXHJcbiAgICAgICAoKGFsaWFzLXR5cGUgQGFsaWFzZXMpIGFsaWFzKV1cclxuICAgICAgKHdoZW5cclxuICAgICAgIChhbmQgKHNvbWU/IGxpYicpIChub3Q9IGxpYiBsaWInKSlcclxuICAgICAgICh0aHJvd1xyXG4gICAgICAgIChlcnJvclxyXG4gICAgICAgICBlbnZcclxuICAgICAgICAgKHBhcnNlLW5zLWVycm9yLW1zZyBzcGVjIFwiOmFzIGFsaWFzIG11c3QgYmUgdW5pcXVlXCIpKSkpXHJcbiAgICAgIChzd2FwIVxyXG4gICAgICAgYWxpYXNlc1xyXG4gICAgICAgdXBkYXRlLWluXHJcbiAgICAgICBbYWxpYXMtdHlwZV1cclxuICAgICAgIGNvbmpcclxuICAgICAgIFthbGlhcyBsaWJdXHJcbiAgICAgICAod2hlbiBqcy1tb2R1bGUtcHJvdmlkZXMgW2pzLW1vZHVsZS1wcm92aWRlcyBsaWJdKSkpKVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKG9yXHJcbiAgICAgIChhbmQgKHNlcXVlbnRpYWw/IHJlZmVycmVkKSAoZXZlcnk/IHN5bWJvbD8gcmVmZXJyZWQpKVxyXG4gICAgICAobmlsPyByZWZlcnJlZCkpXHJcbiAgICAgKHRocm93XHJcbiAgICAgIChlcnJvclxyXG4gICAgICAgZW52XHJcbiAgICAgICAocGFyc2UtbnMtZXJyb3ItbXNnXHJcbiAgICAgICAgc3BlY1xyXG4gICAgICAgIFwiOnJlZmVyIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZiBzeW1ib2xzIGluIDpyZXF1aXJlIC8gOnJlcXVpcmUtbWFjcm9zXCIpKSkpXHJcbiAgICAod2hlbi1ub3QgbWFjcm9zPyAoc3dhcCEgZGVwcyBjb25qIGxpYikpXHJcbiAgICAobWVyZ2VcclxuICAgICAod2hlblxyXG4gICAgICAoc29tZT8gYWxpYXMpXHJcbiAgICAgIHtya1xyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAge2FsaWFzIGxpYn1cclxuICAgICAgICB7bGliIGxpYn1cclxuICAgICAgICAod2hlbiBqcy1tb2R1bGUtcHJvdmlkZXMge2pzLW1vZHVsZS1wcm92aWRlcyBsaWJ9KSl9KVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChzb21lPyByZWZlcnJlZC13aXRob3V0LXJlbmFtZWQpXHJcbiAgICAgIHt1a1xyXG4gICAgICAgKGFwcGx5XHJcbiAgICAgICAgaGFzaC1tYXBcclxuICAgICAgICAoaW50ZXJsZWF2ZSByZWZlcnJlZC13aXRob3V0LXJlbmFtZWQgKHJlcGVhdCBsaWIpKSl9KVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChzb21lPyByZW5hbWVkKVxyXG4gICAgICB7cmVua1xyXG4gICAgICAgKHJlZHVjZVxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbbSBbb3JpZ2luYWwgcmVuYW1lZF1dXHJcbiAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgKHNvbWUgI3tvcmlnaW5hbH0gcmVmZXJyZWQpXHJcbiAgICAgICAgICAodGhyb3dcclxuICAgICAgICAgICAoZXJyb3JcclxuICAgICAgICAgICAgZW52XHJcbiAgICAgICAgICAgIChzdHIgXCJSZW5hbWVkIHN5bWJvbCBcIiBvcmlnaW5hbCBcIiBub3QgcmVmZXJyZWRcIikpKSlcclxuICAgICAgICAgKGFzc29jIG0gcmVuYW1lZCAoc3ltYm9sIChzdHIgbGliKSAoc3RyIG9yaWdpbmFsKSkpKVxyXG4gICAgICAgIHt9XHJcbiAgICAgICAgcmVuYW1lZCl9KSkpKSkpXHJcbiJ9IHs6c3ltIGFuYWx5emUtd3JhcC1tZXRhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2V4cHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmFseXplLXdyYXAtbWV0YVxyXG4gW2V4cHJdXHJcbiAobGV0XHJcbiAgW2Zvcm0gKDpmb3JtIGV4cHIpIG0gKGVsaWRlLWlycmVsZXZhbnQtbWV0YSAobWV0YSBmb3JtKSldXHJcbiAgKGlmXHJcbiAgIChzb21lPyAoc2VxIG0pKVxyXG4gICAobGV0XHJcbiAgICBbZW52XHJcbiAgICAgKDplbnYgZXhwcilcclxuICAgICBleHByXHJcbiAgICAgKGFzc29jLWluIGV4cHIgWzplbnYgOmNvbnRleHRdIDpleHByKVxyXG4gICAgIG1ldGEtZXhwclxyXG4gICAgIChhbmFseXplLW1hcCAoOmVudiBleHByKSBtKV1cclxuICAgIHs6b3AgOndpdGgtbWV0YSxcclxuICAgICA6ZW52IGVudixcclxuICAgICA6Zm9ybSBmb3JtLFxyXG4gICAgIDptZXRhIG1ldGEtZXhwcixcclxuICAgICA6ZXhwciBleHByLFxyXG4gICAgIDpjaGlsZHJlbiBbOm1ldGEgOmV4cHJdfSlcclxuICAgZXhwcikpKVxyXG4ifSB7OnN5bSBBTllfU1lNLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBBTllfU1lNICdhbnkpXHJcbiJ9IHs6c3ltIGdldC1qcy10YWcsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1qcy10YWdcclxuIFtmb3JtXVxyXG4gKGxldFxyXG4gIFtmb3JtLW1ldGEgKG1ldGEgZm9ybSldXHJcbiAgKGlmLXNvbWVcclxuICAgW3RhZyAoOnRhZyBmb3JtLW1ldGEpXVxyXG4gICB0YWdcclxuICAgKHdoZW4gKHRydWU/ICg6bnVtZXJpYyBmb3JtLW1ldGEpKSAnbnVtYmVyKSkpKVxyXG4ifSB7OnN5bSAqYW5hbHl6ZS1kZXBzKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmFuYWx5emUtZGVwcyogdHJ1ZSlcclxuIn0gezpzeW0gYW5hbHl6ZS1sZXQtYmluZGluZ3MqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2VuY2wtZW52IGJpbmRpbmdzIG9wXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW5hbHl6ZS1sZXQtYmluZGluZ3MqXHJcbiBbZW5jbC1lbnYgYmluZGluZ3Mgb3BdXHJcbiAobG9vcFxyXG4gIFtiZXNcclxuICAgW11cclxuICAgZW52XHJcbiAgIChhc3NvYyBlbmNsLWVudiA6Y29udGV4dCA6ZXhwcilcclxuICAgYmluZGluZ3NcclxuICAgKHNlcSAocGFydGl0aW9uIDIgYmluZGluZ3MpKV1cclxuICAoaWYtc29tZVxyXG4gICBbW25hbWUgaW5pdF0gKGZpcnN0IGJpbmRpbmdzKV1cclxuICAgKGxldFxyXG4gICAgW11cclxuICAgICh3aGVuXHJcbiAgICAgKG9yXHJcbiAgICAgIChzb21lPyAobmFtZXNwYWNlIG5hbWUpKVxyXG4gICAgICAjPyg6Y2xqICguY29udGFpbnMgKHN0ciBuYW1lKSBcIi5cIikgOmNsanMgKGdvb2cuc3RyaW5nL2NvbnRhaW5zIChzdHIgbmFtZSkgXCIuXCIpKSlcclxuICAgICAodGhyb3cgKGVycm9yIGVuY2wtZW52IChzdHIgXCJJbnZhbGlkIGxvY2FsIG5hbWU6IFwiIG5hbWUpKSkpXHJcbiAgICAobGV0XHJcbiAgICAgW2luaXQtZXhwclxyXG4gICAgICAoYW5hbHl6ZS1sZXQtYmluZGluZy1pbml0XHJcbiAgICAgICBlbnZcclxuICAgICAgIGluaXRcclxuICAgICAgIChjb25zIHs6cGFyYW1zIGJlc30gKmxvb3AtbGV0cyopKVxyXG4gICAgICBsaW5lXHJcbiAgICAgIChnZXQtbGluZSBuYW1lIGVudilcclxuICAgICAgY29sXHJcbiAgICAgIChnZXQtY29sIG5hbWUgZW52KVxyXG4gICAgICBzaGFkb3dcclxuICAgICAgKGhhbmRsZS1zeW1ib2wtbG9jYWwgbmFtZSAoZ2V0LWluIGVudiBbOmxvY2FscyBuYW1lXSkpXHJcbiAgICAgIGJlXHJcbiAgICAgIHs6aW5pdCBpbml0LWV4cHIsXHJcbiAgICAgICA6bmFtZSBuYW1lLFxyXG4gICAgICAgOmJpbmRpbmctZm9ybT8gdHJ1ZSxcclxuICAgICAgIDpvcCA6YmluZGluZyxcclxuICAgICAgIDplbnYgezpsaW5lIGxpbmUsIDpjb2x1bW4gY29sfSxcclxuICAgICAgIDpjb2x1bW4gY29sLFxyXG4gICAgICAgOmxpbmUgbGluZSxcclxuICAgICAgIDppbmZvIHs6bmFtZSBuYW1lLCA6c2hhZG93IHNoYWRvd30sXHJcbiAgICAgICA6dGFnIChnZXQtbGV0LXRhZyBuYW1lIGluaXQtZXhwciksXHJcbiAgICAgICA6c2hhZG93IHNoYWRvdyxcclxuICAgICAgIDpsb2NhbCBvcH1cclxuICAgICAgYmVcclxuICAgICAgKGlmXHJcbiAgICAgICAoPSA6Zm4gKDpvcCBpbml0LWV4cHIpKVxyXG4gICAgICAgKG1lcmdlXHJcbiAgICAgICAgYmVcclxuICAgICAgICB7OmZuLXZhciB0cnVlLFxyXG4gICAgICAgICA6bWV0aG9kc1xyXG4gICAgICAgICAoaW50b1xyXG4gICAgICAgICAgW11cclxuICAgICAgICAgIChtYXBcclxuICAgICAgICAgICAoZm4qXHJcbiAgICAgICAgICAgIFtwMV9fNDg2MDgjXVxyXG4gICAgICAgICAgICAoc2VsZWN0LWtleXMgcDFfXzQ4NjA4IyBbOnRhZyA6Zml4ZWQtYXJpdHkgOnZhcmlhZGljP10pKVxyXG4gICAgICAgICAgICg6bWV0aG9kcyBpbml0LWV4cHIpKSksXHJcbiAgICAgICAgIDp2YXJpYWRpYz8gKDp2YXJpYWRpYz8gaW5pdC1leHByKSxcclxuICAgICAgICAgOm1heC1maXhlZC1hcml0eSAoOm1heC1maXhlZC1hcml0eSBpbml0LWV4cHIpLFxyXG4gICAgICAgICA6bWV0aG9kLXBhcmFtcyAobWFwIDpwYXJhbXMgKDptZXRob2RzIGluaXQtZXhwcikpfSlcclxuICAgICAgIGJlKV1cclxuICAgICAocmVjdXJcclxuICAgICAgKGNvbmogYmVzIGJlKVxyXG4gICAgICAoYXNzb2MtaW4gZW52IFs6bG9jYWxzIG5hbWVdIGJlKVxyXG4gICAgICAobmV4dCBiaW5kaW5ncykpKSlcclxuICAgW2JlcyBlbnZdKSkpXHJcbiJ9IHs6c3ltIGFuYWx5c2lzLWVycm9yPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5c2lzLWVycm9yP1xyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZXhdXHJcbiAoPSA6Y2xqcy9hbmFseXNpcy1lcnJvciAoOnRhZyAoZXgtZGF0YSBleCkpKSlcclxuIn0gezpzeW0gcmVwbGFjZS1lbnYtcGFzcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuZXctZW52XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwbGFjZS1lbnYtcGFzc1xyXG4gW25ldy1lbnZdXHJcbiAoZm4gW2VudiBhc3Qgb3B0c10gKGFzc29jIGFzdCA6ZW52IG5ldy1lbnYpKSlcclxuIn0gezpzeW0gcGFyc2UtbnMtZXhjbHVkZXMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1ucy1leGNsdWRlc1xyXG4gW2VudiBhcmdzXVxyXG4gKHJlZHVjZVxyXG4gIChmblxyXG4gICBbcyBbayAmIGZpbHRlcnNdXVxyXG4gICAoaWZcclxuICAgICg9IGsgOnJlZmVyLWNsb2p1cmUpXHJcbiAgICAoZG9cclxuICAgICAod2hlblxyXG4gICAgICAoc2VxICg6ZXhjbHVkZXMgcykpXHJcbiAgICAgICh0aHJvd1xyXG4gICAgICAgKGVycm9yXHJcbiAgICAgICAgZW52XHJcbiAgICAgICAgXCJPbmx5IG9uZSA6cmVmZXItY2xvanVyZSBmb3JtIGlzIGFsbG93ZWQgcGVyIG5hbWVzcGFjZSBkZWZpbml0aW9uXCIpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFt2YWxpZC1rd3NcclxuICAgICAgICN7OmV4Y2x1ZGUgOnJlbmFtZX1cclxuICAgICAgIHhzXHJcbiAgICAgICAobG9vcFxyXG4gICAgICAgIFtmc1xyXG4gICAgICAgICAoc2VxIGZpbHRlcnMpXHJcbiAgICAgICAgIHJldFxyXG4gICAgICAgICB7OmV4Y2x1ZGVzICN7fSwgOnJlbmFtZXMge319XHJcbiAgICAgICAgIGVyclxyXG4gICAgICAgICAobm90IChldmVuPyAoY291bnQgZmlsdGVycykpKV1cclxuICAgICAgICAoY29uZFxyXG4gICAgICAgICAodHJ1ZT8gZXJyKVxyXG4gICAgICAgICAodGhyb3dcclxuICAgICAgICAgIChlcnJvclxyXG4gICAgICAgICAgIGVudlxyXG4gICAgICAgICAgIFwiT25seSBbOnJlZmVyLWNsb2p1cmUgOmV4Y2x1ZGUgKG5hbWVzKV0gYW5kIG9wdGlvbmFsbHkgYDpyZW5hbWUge2Zyb20gdG99YCBzcGVjcyBzdXBwb3J0ZWRcIikpXHJcbiAgICAgICAgIChzb21lPyBmcylcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW2t3IChmaXJzdCBmcyldXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAodmFsaWQta3dzIGt3KVxyXG4gICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgW3JlZnMgKHNlY29uZCBmcyldXHJcbiAgICAgICAgICAgIChjb25kXHJcbiAgICAgICAgICAgICAobm90XHJcbiAgICAgICAgICAgICAgKG9yXHJcbiAgICAgICAgICAgICAgIChhbmRcclxuICAgICAgICAgICAgICAgICg9IGt3IDpleGNsdWRlKVxyXG4gICAgICAgICAgICAgICAgKHNlcXVlbnRpYWw/IHJlZnMpXHJcbiAgICAgICAgICAgICAgICAoZXZlcnk/IHN5bWJvbD8gcmVmcykpXHJcbiAgICAgICAgICAgICAgIChhbmRcclxuICAgICAgICAgICAgICAgICg9IGt3IDpyZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAobWFwPyByZWZzKVxyXG4gICAgICAgICAgICAgICAgKGV2ZXJ5P1xyXG4gICAgICAgICAgICAgICAgIChmbiogW3AxX180ODYxOCNdIChldmVyeT8gc3ltYm9sPyBwMV9fNDg2MTgjKSlcclxuICAgICAgICAgICAgICAgICByZWZzKSkpKVxyXG4gICAgICAgICAgICAgKHJlY3VyIGZzIHJldCB0cnVlKVxyXG4gICAgICAgICAgICAgKD0ga3cgOmV4Y2x1ZGUpXHJcbiAgICAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAgICAobm5leHQgZnMpXHJcbiAgICAgICAgICAgICAgKHVwZGF0ZS1pbiByZXQgWzpleGNsdWRlc10gaW50byByZWZzKVxyXG4gICAgICAgICAgICAgIGZhbHNlKVxyXG4gICAgICAgICAgICAgKD0ga3cgOnJlbmFtZSlcclxuICAgICAgICAgICAgIChyZWN1clxyXG4gICAgICAgICAgICAgIChubmV4dCBmcylcclxuICAgICAgICAgICAgICAodXBkYXRlLWluIHJldCBbOnJlbmFtZXNdIG1lcmdlIHJlZnMpXHJcbiAgICAgICAgICAgICAgZmFsc2UpKSlcclxuICAgICAgICAgICAocmVjdXIgZnMgcmV0IHRydWUpKSlcclxuICAgICAgICAgOmVsc2VcclxuICAgICAgICAgcmV0KSldXHJcbiAgICAgIChtZXJnZS13aXRoIGludG8gcyB4cykpKVxyXG4gICAgcykpXHJcbiAgezpleGNsdWRlcyAje30sIDpyZW5hbWVzIHt9fVxyXG4gIGFyZ3MpKVxyXG4ifSB7OnN5bSBhbmFseXplLWZuLW1ldGhvZHMtcGFzczIsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbWVudiBsb2NhbHMgdHlwZSBtZXRoc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFuYWx5emUtZm4tbWV0aG9kcy1wYXNzMlxyXG4gW21lbnYgbG9jYWxzIHR5cGUgbWV0aHNdXHJcbiAoYW5hbHl6ZS1mbi1tZXRob2RzLXBhc3MyKiBtZW52IGxvY2FscyB0eXBlIG1ldGhzKSlcclxuIn0gezpzeW0gY29yZS1uYW1lPywgOm1ldGEgezpkb2MgIklzIHN5bSB2aXNpYmxlIGZyb20gY29yZSBpbiB0aGUgY3VycmVudCBjb21waWxhdGlvbiBuYW1lc3BhY2U/IiwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvcmUtbmFtZT9cclxuIFwiSXMgc3ltIHZpc2libGUgZnJvbSBjb3JlIGluIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIG5hbWVzcGFjZT9cIlxyXG4gIz8oOmNsanMgezp0YWcgYm9vbGVhbn0pXHJcbiBbZW52IHN5bV1cclxuIChhbmRcclxuICAob3JcclxuICAgKHNvbWU/XHJcbiAgICAoZ2V0c1xyXG4gICAgIEBlbnYvKmNvbXBpbGVyKlxyXG4gICAgIDpjbGpzLmFuYWx5emVyL25hbWVzcGFjZXNcclxuICAgICAnY2xqcy5jb3JlXHJcbiAgICAgOmRlZnNcclxuICAgICBzeW0pKVxyXG4gICAoaWYtc29tZVxyXG4gICAgW21hYyAoZ2V0LWV4cGFuZGVyIHN5bSBlbnYpXVxyXG4gICAgKGxldFxyXG4gICAgIFtucyAoLT4gbWFjIG1ldGEgOm5zKV1cclxuICAgICAoPVxyXG4gICAgICAoLmdldE5hbWUgbnMpXHJcbiAgICAgICM/KDpjbGogKHF1b3RlIGNsanMuY29yZSkgOmNsanMgKHF1b3RlIGNsanMuY29yZSRtYWNyb3MpKSkpXHJcbiAgICBmYWxzZSkpXHJcbiAgKG5vdCAoY29udGFpbnM/ICgtPiBlbnYgOm5zIDpleGNsdWRlcykgc3ltKSkpKVxyXG4ifSB7OnN5bSBnZXQtbGV0LXRhZywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtuYW1lIGluaXQtZXhwcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1sZXQtdGFnXHJcbiBbbmFtZSBpbml0LWV4cHJdXHJcbiAoaWYtc29tZVxyXG4gIFt0YWcgKC0+IG5hbWUgbWV0YSA6dGFnKV1cclxuICB0YWdcclxuICAoaWYtc29tZSBbdGFnICgtPiBpbml0LWV4cHIgOnRhZyldIHRhZyAoLT4gaW5pdC1leHByIDppbmZvIDp0YWcpKSkpXHJcbiJ9IHs6c3ltIHNwZWNpYWxzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gc3BlY2lhbHNcclxuICcjeyYgY2FzZSogZGVmcmVjb3JkKiB0cnkgbnMqIGxvb3AqIGRvIGxldGZuKiBpZiBuZXcgbnMgZGVmdHlwZSogbGV0KlxyXG4gICAganMqIGZuKiByZWN1ciBzZXQhIC4gdmFyIHF1b3RlIHRocm93IGRlZn0pXHJcbiJ9IHs6c3ltIGVsaWRlLWlycmVsZXZhbnQtbWV0YSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4gZWxpZGUtaXJyZWxldmFudC1tZXRhXHJcbiBbbV1cclxuICgtPiBtIGVsaWRlLXJlYWRlci1tZXRhIGVsaWRlLWFuYWx5emVyLW1ldGEpKVxyXG4ifSB7OnN5bSByZXNvbHZlLW1hY3JvLW5zLWFsaWFzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2VudiBuYW1lXSBbZW52IG5hbWUgbm90LWZvdW5kXV19LCA6c291cmNlICIoZGVmblxyXG4gcmVzb2x2ZS1tYWNyby1ucy1hbGlhc1xyXG4gKFtlbnYgbmFtZV0gKHJlc29sdmUtbWFjcm8tbnMtYWxpYXMgZW52IG5hbWUgKHN5bWJvbCBuYW1lKSkpXHJcbiAoW2VudiBuYW1lIG5vdC1mb3VuZF1cclxuICAobGV0XHJcbiAgIFtzeW0gKHN5bWJvbCBuYW1lKV1cclxuICAgKGdldCAoOnJlcXVpcmUtbWFjcm9zICg6bnMgZW52KSkgc3ltIG5vdC1mb3VuZCkpKSlcclxuIn0gezpzeW0gY2hlY2staW52b2tlLWFyZy10eXBlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtlbnYgezprZXlzIFtvcF0sIDphcyBhc3R9IG9wdHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjaGVjay1pbnZva2UtYXJnLXR5cGVzXHJcbiBbZW52IHs6a2V5cyBbb3BdLCA6YXMgYXN0fSBvcHRzXVxyXG4gKHdoZW5cclxuICAoYW5kXHJcbiAgIChub3QgKGFuYWx5emVkPyBhc3QpKVxyXG4gICAjPyg6Y2xqICg9IDppbnZva2Ugb3ApIDpjbGpzIChrZXl3b3JkLWlkZW50aWNhbD8gOmludm9rZSBvcCkpKVxyXG4gICh3aGVuLXNvbWVcclxuICAgW1tuYW1lIHs6a2V5cyBbdmFsaWQ/IHdhcm5pbmctdHlwZV19XVxyXG4gICAgKGZpbmQgaW52b2tlLWFyZy10eXBlLXZhbGlkYXRvcnMgKC0+IGFzdCA6Zm4gOmluZm8gOm5hbWUpKV1cclxuICAgKGxldFxyXG4gICAgW3R5cGVzIChtYXB2IDp0YWcgKDphcmdzIGFzdCkpXVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKHZhbGlkPyB0eXBlcylcclxuICAgICAod2FybmluZyB3YXJuaW5nLXR5cGUgZW52IHs6bmFtZSBuYW1lLCA6dHlwZXMgdHlwZXN9KSkpKSlcclxuIChhbmFseXplZCBhc3QpKVxyXG4ifSB7OnN5bSBjb25maXJtLW5zLCA6bWV0YSB7OmRvYyAiR2l2ZW4gZW52LCBhbiBhbmFseXNpcyBlbnZpcm9ubWVudCwgYW5kIG5zLXN5bSwgYSBzeW1ib2wgaWRlbnRpZnlpbmcgYVxuICAgbmFtZXNwYWNlLCBjb25maXJtIHRoYXQgdGhlIG5hbWVzcGFjZSBleGlzdHMuIFdhcm4gaWYgbm90IGZvdW5kLiIsIDphcmdsaXN0cyAoW2VudiBucy1zeW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjb25maXJtLW5zXHJcbiBcIkdpdmVuIGVudiwgYW4gYW5hbHlzaXMgZW52aXJvbm1lbnQsIGFuZCBucy1zeW0sIGEgc3ltYm9sIGlkZW50aWZ5aW5nIGFcXG4gICBuYW1lc3BhY2UsIGNvbmZpcm0gdGhhdCB0aGUgbmFtZXNwYWNlIGV4aXN0cy4gV2FybiBpZiBub3QgZm91bmQuXCJcclxuIFtlbnYgbnMtc3ltXVxyXG4gKHdoZW5cclxuICAoYW5kXHJcbiAgIChub3Q9ICdjbGpzLmNvcmUgbnMtc3ltKVxyXG4gICAobmlsPyAoZ2V0IGltcGxpY2l0LW5zZXMgbnMtc3ltKSlcclxuICAgKG5pbD8gKGdldCAoLT4gZW52IDpucyA6cmVxdWlyZXMpIG5zLXN5bSkpXHJcbiAgIChuaWw/IChnZXRzIEBlbnYvKmNvbXBpbGVyKiA6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zLXN5bSkpXHJcbiAgICM/KDpjbGogKG5pbD8gKHV0aWwvbnMtPnNvdXJjZSBucy1zeW0pKSlcclxuICAgKG5vdCAoanMtbW9kdWxlLWV4aXN0cz8gbnMtc3ltKSkpXHJcbiAgKHdhcm5pbmcgOnVuZGVjbGFyZWQtbnMgZW52IHs6bnMtc3ltIG5zLXN5bSwgOmpzLXByb3ZpZGUgbnMtc3ltfSkpKVxyXG4ifSB7OnN5bSBkZWZhdWx0LW5hbWVzcGFjZXMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBkZWZhdWx0LW5hbWVzcGFjZXNcclxuICd7Y2xqcy5jb3JlIHs6bmFtZSBjbGpzLmNvcmV9LCBjbGpzLnVzZXIgezpuYW1lIGNsanMudXNlcn19KVxyXG4ifSB7OnN5bSBjYW5vbmljYWxpemUtc3BlY3MsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlY3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYW5vbmljYWxpemUtc3BlY3NcclxuIFtzcGVjc11cclxuIChsZXRmblxyXG4gIFsoY2Fub25pY2FsaXplXHJcbiAgICBbcXVvdGVkLXNwZWMtb3Ita3ddXHJcbiAgICAoaWZcclxuICAgICAoa2V5d29yZD8gcXVvdGVkLXNwZWMtb3Ita3cpXHJcbiAgICAgcXVvdGVkLXNwZWMtb3Ita3dcclxuICAgICAoYXMtPlxyXG4gICAgICAoc2Vjb25kIHF1b3RlZC1zcGVjLW9yLWt3KVxyXG4gICAgICBzcGVjXHJcbiAgICAgIChpZiAob3IgKHZlY3Rvcj8gc3BlYykgKG1hcD8gc3BlYykpIHNwZWMgW3NwZWNdKSkpKV1cclxuICAobWFwIGNhbm9uaWNhbGl6ZSBzcGVjcykpKVxyXG4ifSB7OnN5bSBjb25maXJtLXZhci1leGlzdHMtdGhyb3csIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uZmlybS12YXItZXhpc3RzLXRocm93XHJcbiBbXVxyXG4gKGZuXHJcbiAgW2VudiBwcmVmaXggc3VmZml4XVxyXG4gIChjb25maXJtLXZhci1leGlzdHNcclxuICAgZW52XHJcbiAgIHByZWZpeFxyXG4gICBzdWZmaXhcclxuICAgKGZuXHJcbiAgICBbZW52IHByZWZpeCBzdWZmaXhdXHJcbiAgICAodGhyb3dcclxuICAgICAoZXJyb3JcclxuICAgICAgZW52XHJcbiAgICAgIChzdHIgXCJVbmFibGUgdG8gcmVzb2x2ZSB2YXI6IFwiIHN1ZmZpeCBcIiBpbiB0aGlzIGNvbnRleHRcIikpKSkpKSlcclxuIn0gezpzeW0ganMtbW9kdWxlLWV4aXN0cz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbW9kdWxlXSl9LCA6c291cmNlICIoZGVmblxyXG4ganMtbW9kdWxlLWV4aXN0cz9cclxuIFttb2R1bGVdXHJcbiAoanMtbW9kdWxlLWV4aXN0cz8qXHJcbiAgKGdldC1pbiBAZW52Lypjb21waWxlciogWzpqcy1tb2R1bGUtaW5kZXhdKVxyXG4gIG1vZHVsZSkpXHJcbiJ9IHs6c3ltIHZhci1hc3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZW52IHN5bV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHZhci1hc3RcclxuIFtlbnYgc3ltXVxyXG4gKGJpbmRpbmdcclxuICBbKnByaXZhdGUtdmFyLWFjY2Vzcy1ub3dhcm4qIHRydWVdXHJcbiAgKGxldFxyXG4gICBbZW52XHJcbiAgICAoZGlzc29jIGVudiA6bG9jYWxzKVxyXG4gICAgdmFyXHJcbiAgICAocmVzb2x2ZS12YXIgZW52IHN5bSAoY29uZmlybS12YXItZXhpc3RzLXRocm93KSlcclxuICAgIGV4cHItZW52XHJcbiAgICAoYXNzb2MgZW52IDpjb250ZXh0IDpleHByKV1cclxuICAgKHdoZW4tc29tZVxyXG4gICAgW3Zhci1ucyAoOm5zIHZhcildXHJcbiAgICB7OnZhciAoYW5hbHl6ZSBleHByLWVudiBzeW0pLFxyXG4gICAgIDpzeW1cclxuICAgICAoYW5hbHl6ZVxyXG4gICAgICBleHByLWVudlxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAncXVvdGUpXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgKHN5bWJvbCAobmFtZSB2YXItbnMpIChuYW1lICg6bmFtZSB2YXIpKSkpKSkpKSxcclxuICAgICA6bWV0YSAodmFyLW1ldGEgdmFyIGV4cHItZW52KX0pKSkpXHJcbiJ9IHs6c3ltIGFkZC1jb25zdHMsIDptZXRhIHs6ZG9jICJHaXZlbiBhIGNvbXBpbGVyIHN0YXRlIGFuZCBhIG1hcCBmcm9tIGZ1bGx5IHF1YWxpZmllZCBzeW1ib2xzIHRvIGNvbnN0YW50XG4gIEVETiB2YWx1ZXMsIHVwZGF0ZSB0aGUgY29tcGlsZXIgc3RhdGUgbWFya2luZyB0aGVzZSB2YXJzIGFzIGNvbnN0IHRvIHN1cHBvcnRcbiAgZGlyZWN0IHN1YnN0aXR1dGlvbiBvZiB0aGVzZSB2YXJzIGluIHNvdXJjZS4iLCA6YXJnbGlzdHMgKFtjb21waWxlci1zdGF0ZSBjb25zdGFudHMtbWFwXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWNvbnN0c1xyXG4gXCJHaXZlbiBhIGNvbXBpbGVyIHN0YXRlIGFuZCBhIG1hcCBmcm9tIGZ1bGx5IHF1YWxpZmllZCBzeW1ib2xzIHRvIGNvbnN0YW50XFxuICBFRE4gdmFsdWVzLCB1cGRhdGUgdGhlIGNvbXBpbGVyIHN0YXRlIG1hcmtpbmcgdGhlc2UgdmFycyBhcyBjb25zdCB0byBzdXBwb3J0XFxuICBkaXJlY3Qgc3Vic3RpdHV0aW9uIG9mIHRoZXNlIHZhcnMgaW4gc291cmNlLlwiXHJcbiBbY29tcGlsZXItc3RhdGUgY29uc3RhbnRzLW1hcF1cclxuIChyZWR1Y2Uta3ZcclxuICAoZm5cclxuICAgW2NvbXBpbGVyLXN0YXRlIHN5bSB2YWx1ZV1cclxuICAgKGxldFxyXG4gICAgW25zIChzeW1ib2wgKG5hbWVzcGFjZSBzeW0pKV1cclxuICAgICh1cGRhdGUtaW5cclxuICAgICBjb21waWxlci1zdGF0ZVxyXG4gICAgIFs6Y2xqcy5hbmFseXplci9uYW1lc3BhY2VzIG5zIDpkZWZzIChzeW1ib2wgKG5hbWUgc3ltKSldXHJcbiAgICAgbWVyZ2VcclxuICAgICB7OmNvbnN0LWV4cHJcclxuICAgICAgKGJpbmRpbmdcclxuICAgICAgIFsqcGFzc2VzKiAoY29uaiAqcGFzc2VzKiAocmVwbGFjZS1lbnYtcGFzcyB7OmNvbnRleHQgOmV4cHJ9KSldXHJcbiAgICAgICAoYW5hbHl6ZSAoZW1wdHktZW52KSB2YWx1ZSkpfSkpKVxyXG4gIGNvbXBpbGVyLXN0YXRlXHJcbiAgY29uc3RhbnRzLW1hcCkpXHJcbiJ9IHs6c3ltIGVycm9yLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2VudiBtc2ddIFtlbnYgbXNnIGNhdXNlXV19LCA6c291cmNlICIoZGVmblxyXG4gZXJyb3JcclxuIChbZW52IG1zZ10gKGVycm9yIGVudiBtc2cgbmlsKSlcclxuIChbZW52IG1zZyBjYXVzZV1cclxuICAoZXgtaW5mb1xyXG4gICAobWVzc2FnZSBlbnYgbXNnKVxyXG4gICAoYXNzb2MgKHNvdXJjZS1pbmZvIGVudikgOnRhZyA6Y2xqcy9hbmFseXNpcy1lcnJvcilcclxuICAgY2F1c2UpKSlcclxuIn0gezpzeW0gaW52b2tlYWJsZS1ucz8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgbnMgaXMgYSByZXF1aXJlZCBuYW1lc3BhY2UgYW5kIGEgSmF2YVNjcmlwdCBtb2R1bGUgdGhhdFxuICAgbWlnaHQgYmUgaW52b2tlYWJsZSBhcyBhIGZ1bmN0aW9uLiIsIDphcmdsaXN0cyAoW25zIGVudl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGludm9rZWFibGUtbnM/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBucyBpcyBhIHJlcXVpcmVkIG5hbWVzcGFjZSBhbmQgYSBKYXZhU2NyaXB0IG1vZHVsZSB0aGF0XFxuICAgbWlnaHQgYmUgaW52b2tlYWJsZSBhcyBhIGZ1bmN0aW9uLlwiXHJcbiBbbnMgZW52XVxyXG4gKGxldFxyXG4gIFtucyAocmVzb2x2ZS1ucy1hbGlhcyBlbnYgbnMpXVxyXG4gIChhbmRcclxuICAgKHJlcXVpcmVkPyBucyBlbnYpXHJcbiAgIChvclxyXG4gICAgKGpzLW1vZHVsZS1leGlzdHM/IG5zKVxyXG4gICAgKG5vZGUtbW9kdWxlLWRlcD8gbnMpXHJcbiAgICAoZGVwLWhhcy1nbG9iYWwtZXhwb3J0cz8gbnMpKSkpKVxyXG4ifSB7OnN5bSAqY2xqcy1ucyosIDptZXRhIHt9LCA6c291cmNlICIoZGVmICpjbGpzLW5zKiAnY2xqcy51c2VyKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyLnJlYWRlci10eXBlcyAoezpzeW0gaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYW4gSW5kZXhpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyIiwgOmFyZ2xpc3RzIFtbcy1vci1yZHJdIFtzLW9yLXJkciBidWYtbGVuXSBbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYW4gSW5kZXhpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyXCJcclxuIChbcy1vci1yZHJdIChpbmRleGluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIDEpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuXSAoaW5kZXhpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuIG5pbCkpXHJcbiAoW3Mtb3ItcmRyIGJ1Zi1sZW4gZmlsZS1uYW1lXVxyXG4gIChJbmRleGluZ1B1c2hiYWNrUmVhZGVyLlxyXG4gICAoaWZcclxuICAgIChzdHJpbmc/IHMtb3ItcmRyKVxyXG4gICAgKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4pXHJcbiAgICBzLW9yLXJkcilcclxuICAgMVxyXG4gICAxXHJcbiAgIHRydWVcclxuICAgbmlsXHJcbiAgIDBcclxuICAgZmlsZS1uYW1lKSkpXHJcbiJ9IHs6c3ltIGxvZy1zb3VyY2UqLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3JlYWRlciBmXSl9LCA6c291cmNlICIoZGVmblxyXG4gbG9nLXNvdXJjZSpcclxuIFtyZWFkZXIgZl1cclxuIChsZXRcclxuICBbYnVmZmVyICg6YnVmZmVyIEAoLi1mcmFtZXMgcmVhZGVyKSldXHJcbiAgKHRyeVxyXG4gICAoc3dhcCFcclxuICAgICguLWZyYW1lcyByZWFkZXIpXHJcbiAgICB1cGRhdGUtaW5cclxuICAgIFs6b2Zmc2V0XVxyXG4gICAgY29ualxyXG4gICAgKC5nZXRMZW5ndGggYnVmZmVyKSlcclxuICAgKGxldFxyXG4gICAgW3JldCAoZildXHJcbiAgICAoaWZcclxuICAgICAoaW1wbGVtZW50cz8gSU1ldGEgcmV0KVxyXG4gICAgIChtZXJnZS1tZXRhIHJldCB7OnNvdXJjZSAocGVlay1zb3VyY2UtbG9nIEAoLi1mcmFtZXMgcmVhZGVyKSl9KVxyXG4gICAgIHJldCkpXHJcbiAgIChmaW5hbGx5IChzd2FwISAoLi1mcmFtZXMgcmVhZGVyKSB1cGRhdGUtaW4gWzpvZmZzZXRdIHJlc3QpKSkpKVxyXG4ifSB7OnN5bSBtZXJnZS1tZXRhLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUgYXMgYG9iamAsIHdpdGggaXRzXG5tZXRhZGF0YSBtZXJnZWQgb3ZlciBgbWAuIiwgOmFyZ2xpc3RzIChbb2JqIG1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS1tZXRhXHJcbiBcIlJldHVybnMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlIGFzIGBvYmpgLCB3aXRoIGl0c1xcbm1ldGFkYXRhIG1lcmdlZCBvdmVyIGBtYC5cIlxyXG4gW29iaiBtXVxyXG4gKGxldFxyXG4gIFtvcmlnLW1ldGEgKG1ldGEgb2JqKV1cclxuICAod2l0aC1tZXRhIG9iaiAobWVyZ2UgbSAoZGlzc29jIG9yaWctbWV0YSA6c291cmNlKSkpKSlcclxuIn0gezpzeW0gUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAocGVlay1jaGFyIHJlYWQtY2hhcil9IHs6c3ltIHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXIsIDptZXRhIHs6ZG9jICJDcmVhdGVzIGEgU291cmNlTG9nZ2luZ1B1c2hiYWNrUmVhZGVyIGZyb20gYSBnaXZlbiBzdHJpbmcgb3IgUHVzaGJhY2tSZWFkZXIiLCA6YXJnbGlzdHMgW1tzLW9yLXJkcl0gW3Mtb3ItcmRyIGJ1Zi1sZW5dIFtzLW9yLXJkciBidWYtbGVuIGZpbGUtbmFtZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNvdXJjZS1sb2dnaW5nLXB1c2gtYmFjay1yZWFkZXJcclxuIFwiQ3JlYXRlcyBhIFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIG9yIFB1c2hiYWNrUmVhZGVyXCJcclxuIChbcy1vci1yZHJdIChzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIDEpKVxyXG4gKFtzLW9yLXJkciBidWYtbGVuXVxyXG4gIChzb3VyY2UtbG9nZ2luZy1wdXNoLWJhY2stcmVhZGVyIHMtb3ItcmRyIGJ1Zi1sZW4gbmlsKSlcclxuIChbcy1vci1yZHIgYnVmLWxlbiBmaWxlLW5hbWVdXHJcbiAgKFNvdXJjZUxvZ2dpbmdQdXNoYmFja1JlYWRlci5cclxuICAgKGlmXHJcbiAgICAoc3RyaW5nPyBzLW9yLXJkcilcclxuICAgIChzdHJpbmctcHVzaC1iYWNrLXJlYWRlciBzLW9yLXJkciBidWYtbGVuKVxyXG4gICAgcy1vci1yZHIpXHJcbiAgIDFcclxuICAgMVxyXG4gICB0cnVlXHJcbiAgIG5pbFxyXG4gICAwXHJcbiAgIGZpbGUtbmFtZVxyXG4gICAoYXRvbSB7OmJ1ZmZlciAoU3RyaW5nQnVmZmVyLiksIDpvZmZzZXQgJygwKX0pKSkpXHJcbiJ9IHs6c3ltIHVucmVhZCwgOm1ldGEgezpkb2MgIlB1c2hlcyBiYWNrIGEgc2luZ2xlIGNoYXJhY3RlciBvbiB0byB0aGUgc3RyZWFtIiwgOmFyZ2xpc3RzIChbcmVhZGVyIGNoXSl9LCA6cHJvdG9jb2wgSVB1c2hiYWNrUmVhZGVyfSB7OnN5bSBwZWVrLWNoYXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBuZXh0IGNoYXIgZnJvbSB0aGUgUmVhZGVyIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgcmVhZGVyIHN0cmVhbSIsIDphcmdsaXN0cyAoW3JlYWRlcl0pfSwgOnByb3RvY29sIFJlYWRlcn0gezpzeW0gSVB1c2hiYWNrUmVhZGVyLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAodW5yZWFkKX0gezpzeW0gaW5kZXhpbmctcmVhZGVyPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB0aGUgcmVhZGVyIHNhdGlzZmllcyBJbmRleGluZ1JlYWRlciIsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4aW5nLXJlYWRlcj9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHRoZSByZWFkZXIgc2F0aXNmaWVzIEluZGV4aW5nUmVhZGVyXCJcclxuIFtyZHJdXHJcbiAoaW1wbGVtZW50cz8gSW5kZXhpbmdSZWFkZXIgcmRyKSlcclxuIn0gezpzeW0gc3RyaW5nLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBTdHJpbmdSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZyIsIDphcmdsaXN0cyBbW3NdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmctcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBTdHJpbmdSZWFkZXIgZnJvbSBhIGdpdmVuIHN0cmluZ1wiXHJcbiAoW3NdIChTdHJpbmdSZWFkZXIuIHMgKGNvdW50IHMpIDApKSlcclxuIn0gezpzeW0gcmVhZC1jaGFyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbmV4dCBjaGFyIGZyb20gdGhlIFJlYWRlciwgbmlsIGlmIHRoZSBlbmQgb2Ygc3RyZWFtIGhhcyBiZWVuIHJlYWNoZWQiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBSZWFkZXJ9IHs6c3ltIGdldC1jb2x1bW4tbnVtYmVyLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0gezpzeW0gZ2V0LWZpbGUtbmFtZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIGZpbGUgbmFtZSB0aGUgcmVhZGVyIGlzIHJlYWRpbmcgZnJvbSwgb3IgbmlsIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6cHJvdG9jb2wgSW5kZXhpbmdSZWFkZXJ9IHs6c3ltIHJlYWQtbGluZSwgOm1ldGEgezpkb2MgIlJlYWRzIGEgbGluZSBmcm9tIHRoZSByZWFkZXIgb3IgZnJvbSAqaW4qIGlmIG5vIHJlYWRlciBpcyBzcGVjaWZpZWQiLCA6YXJnbGlzdHMgW1tyZHJdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkLWxpbmVcclxuIFwiUmVhZHMgYSBsaW5lIGZyb20gdGhlIHJlYWRlciBvciBmcm9tICppbiogaWYgbm8gcmVhZGVyIGlzIHNwZWNpZmllZFwiXHJcbiAoW3Jkcl1cclxuICAobG9vcFxyXG4gICBbYyAocmVhZC1jaGFyIHJkcikgcyAoU3RyaW5nQnVmZmVyLildXHJcbiAgIChpZiAobmV3bGluZT8gYykgKHN0ciBzKSAocmVjdXIgKHJlYWQtY2hhciByZHIpICguYXBwZW5kIHMgYykpKSkpKVxyXG4ifSB7OnN5bSBzdHJpbmctcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgIkNyZWF0ZXMgYSBQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nIiwgOmFyZ2xpc3RzIFtbc10gW3MgYnVmLWxlbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHN0cmluZy1wdXNoLWJhY2stcmVhZGVyXHJcbiBcIkNyZWF0ZXMgYSBQdXNoYmFja1JlYWRlciBmcm9tIGEgZ2l2ZW4gc3RyaW5nXCJcclxuIChbc10gKHN0cmluZy1wdXNoLWJhY2stcmVhZGVyIHMgMSkpXHJcbiAoW3MgYnVmLWxlbl1cclxuICAoUHVzaGJhY2tSZWFkZXIuXHJcbiAgIChzdHJpbmctcmVhZGVyIHMpXHJcbiAgIChvYmplY3QtYXJyYXkgYnVmLWxlbilcclxuICAgYnVmLWxlblxyXG4gICBidWYtbGVuKSkpXHJcbiJ9IHs6c3ltIGxpbmUtc3RhcnQ/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0cnVlIGlmIHJkciBpcyBhbiBJbmRleGluZ1JlYWRlciBhbmQgdGhlIGN1cnJlbnQgY2hhciBzdGFydHMgYSBuZXcgbGluZSIsIDphcmdsaXN0cyAoW3Jkcl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxpbmUtc3RhcnQ/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiByZHIgaXMgYW4gSW5kZXhpbmdSZWFkZXIgYW5kIHRoZSBjdXJyZW50IGNoYXIgc3RhcnRzIGEgbmV3IGxpbmVcIlxyXG4gW3Jkcl1cclxuICh3aGVuIChpbmRleGluZy1yZWFkZXI/IHJkcikgKD09IDEgKGdldC1jb2x1bW4tbnVtYmVyIHJkcikpKSlcclxuIn0gezpzeW0gc291cmNlLWxvZ2dpbmctcmVhZGVyPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtbG9nZ2luZy1yZWFkZXI/XHJcbiBbcmRyXVxyXG4gKGluc3RhbmNlPyBTb3VyY2VMb2dnaW5nUHVzaGJhY2tSZWFkZXIgcmRyKSlcclxuIn0gezpzeW0gSW5kZXhpbmdSZWFkZXIsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChnZXQtY29sdW1uLW51bWJlciBnZXQtZmlsZS1uYW1lIGdldC1saW5lLW51bWJlcil9IHs6c3ltIG5vZGUtcmVhZGFibGUtcHVzaC1iYWNrLXJlYWRlciwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZWFkYWJsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vZGUtcmVhZGFibGUtcHVzaC1iYWNrLXJlYWRlclxyXG4gW3JlYWRhYmxlXVxyXG4gKFB1c2hiYWNrUmVhZGVyLlxyXG4gIChOb2RlUmVhZGFibGVSZWFkZXIuIHJlYWRhYmxlIG5pbClcclxuICAob2JqZWN0LWFycmF5IDEpXHJcbiAgMVxyXG4gIDEpKVxyXG4ifSB7OnN5bSBnZXQtbGluZS1udW1iZXIsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdHJlYW0iLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpwcm90b2NvbCBJbmRleGluZ1JlYWRlcn0pLCBzYWJsb25vLm5vcm1hbGl6ZSAoezpzeW0gbWFwLWxvb2t1cD8sIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRydWUgaWYgYHhgIGlzIGEgbWFwIGxvb2t1cCBmb3JtLCBvdGhlcndpc2UgZmFsc2UuIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1hcC1sb29rdXA/XHJcbiBcIlJldHVybnMgdHJ1ZSBpZiBgeGAgaXMgYSBtYXAgbG9va3VwIGZvcm0sIG90aGVyd2lzZSBmYWxzZS5cIlxyXG4gW3hdXHJcbiAoYW5kIChsaXN0PyB4KSAoa2V5d29yZD8gKGZpcnN0IHgpKSkpXHJcbiJ9IHs6c3ltIGF0dHJpYnV0ZXMsIDptZXRhIHs6ZG9jICJOb3JtYWxpemUgdGhlIGBhdHRyc2Agb2YgYW4gZWxlbWVudC4iLCA6YXJnbGlzdHMgKFthdHRyc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGF0dHJpYnV0ZXNcclxuIFwiTm9ybWFsaXplIHRoZSBgYXR0cnNgIG9mIGFuIGVsZW1lbnQuXCJcclxuIFthdHRyc11cclxuIChjb25kLT4gYXR0cnMgKDpjbGFzcyBhdHRycykgKHVwZGF0ZS1pbiBbOmNsYXNzXSBjbGFzcykpKVxyXG4ifSB7OnN5bSBjb21wYWN0LW1hcCwgOm1ldGEgezpkb2MgIlJlbW92ZXMgYWxsIG1hcCBlbnRyaWVzIHdoZXJlIHRoZSB2YWx1ZSBvZiB0aGUgZW50cnkgaXMgZW1wdHkuIiwgOmFyZ2xpc3RzIChbbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhY3QtbWFwXHJcbiBcIlJlbW92ZXMgYWxsIG1hcCBlbnRyaWVzIHdoZXJlIHRoZSB2YWx1ZSBvZiB0aGUgZW50cnkgaXMgZW1wdHkuXCJcclxuIFttXVxyXG4gKHdoZW4gbSAoaW50byB7fSAocmVtb3ZlIChmbiBbW18gdl1dIChlbXB0eT8gdikpKSBtKSkpXHJcbiJ9IHs6c3ltIGNoaWxkcmVuLCA6bWV0YSB7OmRvYyAiTm9ybWFsaXplIHRoZSBjaGlsZHJlbiBvZiBhIEhUTUwgZWxlbWVudC4iLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hpbGRyZW5cclxuIFwiTm9ybWFsaXplIHRoZSBjaGlsZHJlbiBvZiBhIEhUTUwgZWxlbWVudC5cIlxyXG4gW3hdXHJcbiAoLT4+XHJcbiAgKGNvbmRcclxuICAgKG5pbD8geClcclxuICAgJygpXHJcbiAgIChzdHJpbmc/IHgpXHJcbiAgIChsaXN0IHgpXHJcbiAgICh1dGlsL2VsZW1lbnQ/IHgpXHJcbiAgIChsaXN0IHgpXHJcbiAgIChhbmQgKGxpc3Q/IHgpIChzeW1ib2w/IChmaXJzdCB4KSkpXHJcbiAgIChsaXN0IHgpXHJcbiAgIChsaXN0PyB4KVxyXG4gICB4XHJcbiAgIChhbmRcclxuICAgIChzZXF1ZW50aWFsPyB4KVxyXG4gICAgKD0gKGNvdW50IHgpIDEpXHJcbiAgICAoc2VxdWVudGlhbD8gKGZpcnN0IHgpKVxyXG4gICAgKG5vdCAoc3RyaW5nPyAoZmlyc3QgeCkpKVxyXG4gICAgKG5vdCAodXRpbC9lbGVtZW50PyAoZmlyc3QgeCkpKSlcclxuICAgKGNoaWxkcmVuIChmaXJzdCB4KSlcclxuICAgKHNlcXVlbnRpYWw/IHgpXHJcbiAgIHhcclxuICAgOmVsc2VcclxuICAgKGxpc3QgeCkpXHJcbiAgKHJlbW92ZSBuaWw/KSkpXHJcbiJ9IHs6c3ltIGVsZW1lbnQsIDptZXRhIHs6ZG9jICJFbnN1cmUgYW4gZWxlbWVudCB2ZWN0b3IgaXMgb2YgdGhlIGZvcm0gW3RhZy1uYW1lIGF0dHJzIGNvbnRlbnRdLiIsIDphcmdsaXN0cyAoW1t0YWcgJiBjb250ZW50XV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVsZW1lbnRcclxuIFwiRW5zdXJlIGFuIGVsZW1lbnQgdmVjdG9yIGlzIG9mIHRoZSBmb3JtIFt0YWctbmFtZSBhdHRycyBjb250ZW50XS5cIlxyXG4gW1t0YWcgJiBjb250ZW50XV1cclxuICh3aGVuLW5vdFxyXG4gIChvciAoa2V5d29yZD8gdGFnKSAoc3ltYm9sPyB0YWcpIChzdHJpbmc/IHRhZykpXHJcbiAgKHRocm93XHJcbiAgIChleC1pbmZvXHJcbiAgICAoc3RyIHRhZyBcIiBpcyBub3QgYSB2YWxpZCBlbGVtZW50IG5hbWUuXCIpXHJcbiAgICB7OnRhZyB0YWcsIDpjb250ZW50IGNvbnRlbnR9KSkpXHJcbiAobGV0XHJcbiAgW1t0YWcgaWQgY2xhc3NdXHJcbiAgIChtYXRjaC10YWcgdGFnKVxyXG4gICB0YWctYXR0cnNcclxuICAgKGNvbXBhY3QtbWFwIHs6aWQgaWQsIDpjbGFzcyBjbGFzc30pXHJcbiAgIG1hcC1hdHRyc1xyXG4gICAoZmlyc3QgY29udGVudCldXHJcbiAgKGlmXHJcbiAgIChhdHRycz8gbWFwLWF0dHJzKVxyXG4gICBbdGFnXHJcbiAgICAobWVyZ2Utd2l0aC1jbGFzcyB0YWctYXR0cnMgbWFwLWF0dHJzKVxyXG4gICAgKGNoaWxkcmVuIChuZXh0IGNvbnRlbnQpKV1cclxuICAgW3RhZyAoYXR0cmlidXRlcyB0YWctYXR0cnMpIChjaGlsZHJlbiBjb250ZW50KV0pKSlcclxuIn0gezpzeW0gbWF0Y2gtdGFnLCA6bWV0YSB7OmRvYyAiTWF0Y2ggYHNgIGFzIGEgQ1NTIHRhZyBhbmQgcmV0dXJuIGEgdmVjdG9yIG9mIHRhZyBuYW1lLCBDU1MgaWQgYW5kXG4gIENTUyBjbGFzc2VzLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXRjaC10YWdcclxuIFwiTWF0Y2ggYHNgIGFzIGEgQ1NTIHRhZyBhbmQgcmV0dXJuIGEgdmVjdG9yIG9mIHRhZyBuYW1lLCBDU1MgaWQgYW5kXFxuICBDU1MgY2xhc3Nlcy5cIlxyXG4gW3NdXHJcbiAobGV0XHJcbiAgW21hdGNoZXNcclxuICAgKHJlLXNlcSAjXCJbIy5dP1teIy5dK1wiIChuYW1lIHMpKVxyXG4gICBbdGFnLW5hbWUgbmFtZXNdXHJcbiAgIChjb25kXHJcbiAgICAoZW1wdHk/IG1hdGNoZXMpXHJcbiAgICAodGhyb3cgKGV4LWluZm8gKHN0ciBcIkNhbid0IG1hdGNoIENTUyB0YWc6IFwiIHMpIHs6dGFnIHN9KSlcclxuICAgICgje1xcIyBcXC59IChmZmlyc3QgbWF0Y2hlcykpXHJcbiAgICBbXCJkaXZcIiBtYXRjaGVzXVxyXG4gICAgOmRlZmF1bHRcclxuICAgIFsoZmlyc3QgbWF0Y2hlcykgKHJlc3QgbWF0Y2hlcyldKV1cclxuICBbdGFnLW5hbWVcclxuICAgKHN0cmlwLWNzc1xyXG4gICAgKHNvbWVcclxuICAgICAoZm4qIFtwMV9fNDkwNTUjXSAod2hlbiAoPSBcXCMgKGZpcnN0IHAxX180OTA1NSMpKSBwMV9fNDkwNTUjKSlcclxuICAgICBuYW1lcykpXHJcbiAgIChpbnRvXHJcbiAgICBbXVxyXG4gICAgKGNvbXBcclxuICAgICAoZmlsdGVyIChmbiogW3AxX180OTA1NiNdICg9IFxcLiAoZmlyc3QgcDFfXzQ5MDU2IykpKSlcclxuICAgICAobWFwIHN0cmlwLWNzcykpXHJcbiAgICBuYW1lcyldKSlcclxuIn0gezpzeW0gc3RyaXAtY3NzLCA6bWV0YSB7OmRvYyAiU3RyaXAgdGhlICMgYW5kIC4gY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYHNgLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpcC1jc3NcclxuIFwiU3RyaXAgdGhlICMgYW5kIC4gY2hhcmFjdGVycyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYHNgLlwiXHJcbiBbc11cclxuICh3aGVuIHMgKHN0ci9yZXBsYWNlIHMgI1wiXlsuI11cIiBcIlwiKSkpXHJcbiJ9IHs6c3ltIGNsYXNzLCA6bWV0YSB7OmRvYyAiTm9ybWFsaXplIGBjbGFzc2AgaW50byBhIHZlY3RvciBvZiBjbGFzc2VzLiIsIDphcmdsaXN0cyAoW2NsYXNzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xhc3NcclxuIFwiTm9ybWFsaXplIGBjbGFzc2AgaW50byBhIHZlY3RvciBvZiBjbGFzc2VzLlwiXHJcbiBbY2xhc3NdXHJcbiAoY29uZFxyXG4gIChuaWw/IGNsYXNzKVxyXG4gIG5pbFxyXG4gIChtYXAtbG9va3VwPyBjbGFzcylcclxuICBbY2xhc3NdXHJcbiAgKGxpc3Q/IGNsYXNzKVxyXG4gIChpZiAoc3ltYm9sPyAoZmlyc3QgY2xhc3MpKSBbY2xhc3NdIChtYXAgY2xhc3MtbmFtZSBjbGFzcykpXHJcbiAgKHN5bWJvbD8gY2xhc3MpXHJcbiAgW2NsYXNzXVxyXG4gIChzdHJpbmc/IGNsYXNzKVxyXG4gIFtjbGFzc11cclxuICAoa2V5d29yZD8gY2xhc3MpXHJcbiAgWyhjbGFzcy1uYW1lIGNsYXNzKV1cclxuICAoYW5kXHJcbiAgIChvciAoc2V0PyBjbGFzcykgKHNlcXVlbnRpYWw/IGNsYXNzKSlcclxuICAgKGV2ZXJ5P1xyXG4gICAgKGZuKiBbcDFfXzQ5MDU0I10gKG9yIChrZXl3b3JkPyBwMV9fNDkwNTQjKSAoc3RyaW5nPyBwMV9fNDkwNTQjKSkpXHJcbiAgICBjbGFzcykpXHJcbiAgKG1hcHYgY2xhc3MtbmFtZSBjbGFzcylcclxuICAoYW5kIChvciAoc2V0PyBjbGFzcykgKHNlcXVlbnRpYWw/IGNsYXNzKSkpXHJcbiAgKG1hcHYgY2xhc3MtbmFtZSBjbGFzcylcclxuICA6ZWxzZVxyXG4gIGNsYXNzKSlcclxuIn0gezpzeW0gY2xhc3MtbmFtZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY2xhc3MtbmFtZVxyXG4gW3hdXHJcbiAoY29uZCAoc3RyaW5nPyB4KSB4IChrZXl3b3JkPyB4KSAobmFtZSB4KSA6ZWxzZSB4KSlcclxuIn0gezpzeW0gbWVyZ2Utd2l0aC1jbGFzcywgOm1ldGEgezpkb2MgIkxpa2UgY2xvanVyZS5jb3JlL21lcmdlIGJ1dCBjb25jYXRlbmF0ZSA6Y2xhc3MgZW50cmllcy4iLCA6YXJnbGlzdHMgKFsmIG1hcHNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS13aXRoLWNsYXNzXHJcbiBcIkxpa2UgY2xvanVyZS5jb3JlL21lcmdlIGJ1dCBjb25jYXRlbmF0ZSA6Y2xhc3MgZW50cmllcy5cIlxyXG4gWyYgbWFwc11cclxuIChsZXRcclxuICBbbWFwcyAobWFwIGF0dHJpYnV0ZXMgbWFwcykgY2xhc3NlcyAobWFwY2F0IDpjbGFzcyBtYXBzKV1cclxuICAod2hlblxyXG4gICAoc2VxIG1hcHMpXHJcbiAgIChjb25kLT5cclxuICAgIChyZWR1Y2UgaW50byB7fSBtYXBzKVxyXG4gICAgKG5vdCAoZW1wdHk/IGNsYXNzZXMpKVxyXG4gICAgKGFzc29jIDpjbGFzcyAodmVjIGNsYXNzZXMpKSkpKSlcclxuIn0pLCBlZG5hLmV4YW1wbGVzICh7OnN5bSBhZXJpdGhzLXRoZW1lLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYWVyaXRocy10aGVtZVxyXG4gKGVkbmEtPmRhdGEtdXJpXHJcbiAgWzpwaWFub1xyXG4gICB7Om9jdGF2ZSA0LCA6dGVtcG8gNzR9XHJcbiAgIFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgMS8yICN7OmYjIDorZH1dXHJcbiAgIFsxLzggI3s6LWUgOmUgOitjfSA6YSAxLzIgI3s6ZSA6Y31dXHJcbiAgIFsxLzggI3s6ZSA6ZiMgOi1hIDotZH0gOmEgOitkIDorYyMgOitlIDorZCA6YiA6K2MjXVxyXG4gICBbMS8yICN7Oi1lIDpjIDphfSAxLzIgI3s6ZSA6Y31dXSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIkEgdHVuZSBmcm9tIEZpbmFsIEZhbnRhc3kgVklJIiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vIHs6b2N0YXZlIDQsIDp0ZW1wbyA3NH0gWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSAxLzIgI3s6ZiMgOitkfV0gWzEvOCAjezotZSA6ZSA6K2N9IDphIDEvMiAjezplIDpjfV0gWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSA6K2QgOitjIyA6K2UgOitkIDpiIDorYyNdIFsxLzIgI3s6LWUgOmMgOmF9IDEvMiAjezplIDpjfV1dfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgYWVyaXRocy10aGVtZSksIDpib2R5LXN0ciAiWzpwaWFub1xyXG4gezpvY3RhdmUgNCwgOnRlbXBvIDc0fVxyXG4gWzEvOCAjezplIDpmIyA6LWEgOi1kfSA6YSAxLzIgI3s6ZiMgOitkfV1cclxuIFsxLzggI3s6LWUgOmUgOitjfSA6YSAxLzIgI3s6ZSA6Y31dXHJcbiBbMS84ICN7OmUgOmYjIDotYSA6LWR9IDphIDorZCA6K2MjIDorZSA6K2QgOmIgOitjI11cclxuIFsxLzIgI3s6LWUgOmMgOmF9IDEvMiAjezplIDpjfV1dXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9hZXJpdGhzLXRoZW1lLzAifV19IHs6c3ltIGR1ZWxpbmctYmFuam9zLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gZHVlbGluZy1iYW5qb3NcclxuIChlZG5hLT5kYXRhLXVyaVxyXG4gICN7WzpndWl0YXIgezpvY3RhdmUgM30gMS8xNiA6ciA6ciAxLzggOmcgOnIgOmQgOnIgOmcgOmcgOmRdXHJcbiAgICBbOmJhbmpvIHs6b2N0YXZlIDN9IDEvMTYgOmIgOitjIDEvOCA6K2QgOmIgOitjIDphIDpiIDpnIDphXX0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJQdXQgZGlmZmVyZW50IHBpZWNlcyBpbiBhIHNldCB0byBtYWtlIHRoZW0gcGxheSBzaW11bHRhbmVvdXNseSIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgI3tbOmd1aXRhciB7Om9jdGF2ZSAzfSAxLzE2IDpyIDpyIDEvOCA6ZyA6ciA6ZCA6ciA6ZyA6ZyA6ZF0gWzpiYW5qbyB7Om9jdGF2ZSAzfSAxLzE2IDpiIDorYyAxLzggOitkIDpiIDorYyA6YSA6YiA6ZyA6YV19fSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgZHVlbGluZy1iYW5qb3MpLCA6Ym9keS1zdHIgIiN7WzpndWl0YXIgezpvY3RhdmUgM30gMS8xNiA6ciA6ciAxLzggOmcgOnIgOmQgOnIgOmcgOmcgOmRdXHJcbiAgWzpiYW5qbyB7Om9jdGF2ZSAzfSAxLzE2IDpiIDorYyAxLzggOitkIDpiIDorYyA6YSA6YiA6ZyA6YV19XHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9kdWVsaW5nLWJhbmpvcy8wIn1dfSB7OnN5bSBpbnRyby0xLXNpbmdsZS1ub3RlcywgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuIGludHJvLTEtc2luZ2xlLW5vdGVzXHJcbiAoZWRuYS0+ZGF0YS11cmkgWzpwaWFubyA6YyA6YyMgOmQgOmQjIDplIDpmIDpmIyA6ZyA6ZyMgOmEgOmEjIDpiXSkpXHJcbiIsIDpleGFtcGxlcyBbezpkb2MgIkhlcmUgYXJlIGFsbCB0d2VsdmUgbm90ZXMiLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gOmMgOmMjIDpkIDpkIyA6ZSA6ZiA6ZiMgOmcgOmcjIDphIDphIyA6Yl19LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBpbnRyby0xLXNpbmdsZS1ub3RlcyksIDpib2R5LXN0ciAiWzpwaWFubyA6YyA6YyMgOmQgOmQjIDplIDpmIDpmIyA6ZyA6ZyMgOmEgOmEjIDpiXVxyXG4iLCA6aWQgImVkbmEuZXhhbXBsZXMvaW50cm8tMS1zaW5nbGUtbm90ZXMvMCJ9XX0gezpzeW0gaW50cm8tMi1hdHRyaWJ1dGVzLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW50cm8tMi1hdHRyaWJ1dGVzXHJcbiAoZWRuYS0+ZGF0YS11cmkgWzpwaWFubyA6YyA6ZCB7Om9jdGF2ZSAzfSA6YyA6ZF0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJIYXNoIG1hcHMgbGV0IHlvdSBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgb2YgZXZlcnl0aGluZyB0aGF0IGNvbWVzIGFmdGVyIHRoZW0uXG4gICBIZXJlIGFyZSBhbGwgdGhlIGF0dHJpYnV0ZXMgeW91IGNhbiBjaGFuZ2U6XG4gICBcbiAgIDpvY3RhdmUgICAgICAgIC0gVGhlIG9jdGF2ZSAoZGVmYXVsdCBpcyA0KVxuICAgOmxlbmd0aCAgICAgICAgLSBUaGUgbm90ZSBsZW5ndGggKGRlZmF1bHQgaXMgMS80KVxuICAgOnRlbXBvICAgICAgICAgLSBIb3cgZmFzdCBvciBzbG93IG5vdGVzIGFyZSBwbGF5ZWQgKGRlZmF1bHQgaXMgMTIwKVxuICAgOnBhbiAgICAgICAgICAgLSBIb3cgZmFyIGxlZnQvcmlnaHQgdGhlIG5vdGUgaXMgcGFubmVkIGluIHlvdXIgc3BlYWtlciAoZGVmYXVsdCBpcyA1MClcbiAgIDpxdWFudGl6ZSAgICAgIC0gVGhlIHBlcmNlbnRhZ2Ugb2YgYSBub3RlJ3MgZnVsbCBkdXJhdGlvbiB0aGF0IGlzIGhlYXJkIChkZWZhdWx0IGlzIDkwKVxuICAgOnRyYW5zcG9zZSAgICAgLSBNb3ZlcyBhbGwgbm90ZXMgdXAgb3IgZG93biBieSBhIGRlc2lyZWQgbnVtYmVyIG9mIHNlbWl0b25lcyAoZGVmYXVsdCBpcyAwKVxuICAgOnZvbHVtZSAgICAgICAgLSBUaGUgdm9sdW1lIChkZWZhdWx0IGlzIDEwMClcbiAgIDprZXktc2lnbmF0dXJlIC0gQSBzZXQgb2Ygbm90ZXMgd2l0aCBhY2NpZGVudGFscyAtLSBlaXRoZXIgYSBzaGFycCAoIyksIGZsYXQgKD0pLCBvciBuYXR1cmFsIChfKSAtLVxuICAgICAgICAgICAgICAgICAgICB3aG9zZSBwdXJwb3NlIGlzIHRvIHNldCB0aGUgZGVmYXVsdCBhY2NpZGVudGFsIGZvciB0aGF0IG5vdGUgd2hlblxuICAgICAgICAgICAgICAgICAgICBpdCBkb2Vzbid0IGluY2x1ZGUgb25lIChkZWZhdWx0IGlzICN7fSlcbiAgIDpwbGF5PyAgICAgICAgIC0gV2hldGhlciBvciBub3QgdG8gcGxheSAoZGVmYXVsdCBpcyB0cnVlKVxuICAgXG4gICBSZWFkIG1vcmUgYWJvdXQgYXR0cmlidXRlcyBoZXJlOlxuICAgaHR0cHM6Ly9naXRodWIuY29tL2FsZGEtbGFuZy9hbGRhL2Jsb2IvbWFzdGVyL2RvYy9hdHRyaWJ1dGVzLm1kIiwgOndpdGgtZm9jdXMgezpmb3JtIFs6bG9jYWwtc3ltYm9sIGZvY3VzXSwgOmluaXQtZXhwciBbOnBpYW5vIDpjIDpkIHs6b2N0YXZlIDN9IDpjIDpkXX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGludHJvLTItYXR0cmlidXRlcyksIDpib2R5LXN0ciAiWzpwaWFubyA6YyA6ZCB7Om9jdGF2ZSAzfSA6YyA6ZF1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTItYXR0cmlidXRlcy8wIn1dfSB7OnN5bSBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGludHJvLTMtb2N0YXZlLXNob3J0aGFuZCAoZWRuYS0+ZGF0YS11cmkgWzpwaWFubyA6YyA6LWMgOisyY10pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJZb3UgY2FuIGNoYW5nZSBhbiBpbmRpdmlkdWFsIG5vdGUncyByZWxhdGl2ZSBvY3RhdmUgd2l0aCBhICsgb3IgLSBpbnNpZGUgdGhlIGtleXdvcmQuXG4gICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgYnkgbW9yZSB0aGFuIG9uZSBvY3RhdmUsIGp1c3QgcHV0IGEgbnVtYmVyIGFmdGVyLiIsIDp3aXRoLWZvY3VzIHs6Zm9ybSBbOmxvY2FsLXN5bWJvbCBmb2N1c10sIDppbml0LWV4cHIgWzpwaWFubyA6YyA6LWMgOisyY119LCA6d2l0aC1jYXJkIGNhcmQsIDpib2R5IChpbml0LWNhcmQgY2FyZCBpbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQpLCA6Ym9keS1zdHIgIls6cGlhbm8gOmMgOi1jIDorMmNdXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9pbnRyby0zLW9jdGF2ZS1zaG9ydGhhbmQvMCJ9XX0gezpzeW0gaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW50cm8tNC1sZW5ndGgtc2hvcnRoYW5kXHJcbiAoZWRuYS0+ZGF0YS11cmkgWzpwaWFubyA6YyA6ZCAxLzIgOmUgOmZdKSlcclxuIiwgOmV4YW1wbGVzIFt7OmRvYyAiQSBzaG9ydGhhbmQgd2F5IG9mIGNoYW5naW5nIHRoZSBub3RlIGxlbmd0aCBpcyBzaW1wbHkgdG8gd3JpdGUgdGhlIG51bWJlci4iLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gOmMgOmQgMS8yIDplIDpmXX0sIDp3aXRoLWNhcmQgY2FyZCwgOmJvZHkgKGluaXQtY2FyZCBjYXJkIGludHJvLTQtbGVuZ3RoLXNob3J0aGFuZCksIDpib2R5LXN0ciAiWzpwaWFubyA6YyA6ZCAxLzIgOmUgOmZdXHJcbiIsIDppZCAiZWRuYS5leGFtcGxlcy9pbnRyby00LWxlbmd0aC1zaG9ydGhhbmQvMCJ9XX0gezpzeW0gaW50cm8tNS1jaG9yZCwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgaW50cm8tNS1jaG9yZCAoZWRuYS0+ZGF0YS11cmkgWzpwaWFubyAjezpjIDpkfV0pKVxyXG4iLCA6ZXhhbXBsZXMgW3s6ZG9jICJBIGNob3JkIGlzIGp1c3Qgbm90ZXMgaW4gYSBzZXQiLCA6d2l0aC1mb2N1cyB7OmZvcm0gWzpsb2NhbC1zeW1ib2wgZm9jdXNdLCA6aW5pdC1leHByIFs6cGlhbm8gI3s6YyA6ZH1dfSwgOndpdGgtY2FyZCBjYXJkLCA6Ym9keSAoaW5pdC1jYXJkIGNhcmQgaW50cm8tNS1jaG9yZCksIDpib2R5LXN0ciAiWzpwaWFubyAjezpjIDpkfV1cclxuIiwgOmlkICJlZG5hLmV4YW1wbGVzL2ludHJvLTUtY2hvcmQvMCJ9XX0pLCBleHBvdW5kLnV0aWwgKHs6c3ltIGFzc2VydC1tZXNzYWdlLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gYXNzZXJ0LW1lc3NhZ2VcclxuIFwiSW50ZXJuYWwgRXhwb3VuZCBhc3NlcnRpb24gZmFpbGVkLiBQbGVhc2UgcmVwb3J0IHRoaXMgYnVnIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9iaGIvZXhwb3VuZC9pc3N1ZXNcIilcclxuIn0gezpzeW0gbmFuPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmblxyXG4gbmFuP1xyXG4gW3hdXHJcbiAjPyg6Y2xqIChhbmQgKG51bWJlcj8geCkgKERvdWJsZS9pc05hTiB4KSkgOmNsanMgKGFuZCAobnVtYmVyPyB4KSAoanMvaXNOYU4geCkpKSlcclxuIn0pLCBjbGpzLnNvdXJjZS1tYXAgKHs6c3ltIHVwZGF0ZS1yZXN1bHQsIDptZXRhIHs6ZG9jICJIZWxwZXIgZm9yIGRlY29kZS4gVGFrZSBhIHNvdXJjZSBtYXAgYW5kIHVwZGF0ZSBpdCBiYXNlZCBvbiBhXG4gIHNlZ21lbnQgbWFwLiIsIDphcmdsaXN0cyAoW3Jlc3VsdCBzZWdtYXAgZ2xpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtcmVzdWx0XHJcbiBcIkhlbHBlciBmb3IgZGVjb2RlLiBUYWtlIGEgc291cmNlIG1hcCBhbmQgdXBkYXRlIGl0IGJhc2VkIG9uIGFcXG4gIHNlZ21lbnQgbWFwLlwiXHJcbiBbcmVzdWx0IHNlZ21hcCBnbGluZV1cclxuIChsZXRcclxuICBbezprZXlzIFtnY29sIHNvdXJjZSBsaW5lIGNvbCBuYW1lXX1cclxuICAgc2VnbWFwXHJcbiAgIGRcclxuICAgezpsaW5lIGxpbmUsIDpjb2wgY29sLCA6c291cmNlIHNvdXJjZX1cclxuICAgZFxyXG4gICAoaWYgbmFtZSAoYXNzb2MgZCA6bmFtZSBuYW1lKSBkKV1cclxuICAodXBkYXRlLWluXHJcbiAgIHJlc3VsdFxyXG4gICBbZ2xpbmVdXHJcbiAgIChmbmlsXHJcbiAgICAoZm5cclxuICAgICBbbV1cclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIG1cclxuICAgICAgW2djb2xdXHJcbiAgICAgIChmbmlsIChmbiogW3AxX180ODkzMSNdIChjb25qIHAxX180ODkzMSMgZCkpIFtdKSkpXHJcbiAgICAoc29ydGVkLW1hcCkpKSkpXHJcbiJ9IHs6c3ltIGVuY29kZSwgOm1ldGEgezpkb2MgIlRha2UgYW4gaW50ZXJuYWwgc291cmNlIG1hcCByZXByZXNlbnRhdGlvbiByZXByZXNlbnRlZCBhcyBuZXN0ZWRcbiAgIHNvcnRlZCBtYXBzIG9mIGZpbGUsIGxpbmUsIGNvbHVtbiBhbmQgcmV0dXJuIGEgc291cmNlIG1hcCB2MyBKU09OXG4gICBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbbSBvcHRzXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5jb2RlXHJcbiBcIlRha2UgYW4gaW50ZXJuYWwgc291cmNlIG1hcCByZXByZXNlbnRhdGlvbiByZXByZXNlbnRlZCBhcyBuZXN0ZWRcXG4gICBzb3J0ZWQgbWFwcyBvZiBmaWxlLCBsaW5lLCBjb2x1bW4gYW5kIHJldHVybiBhIHNvdXJjZSBtYXAgdjMgSlNPTlxcbiAgIHN0cmluZy5cIlxyXG4gW20gb3B0c11cclxuIChsZXRcclxuICBbbGluZXNcclxuICAgKGF0b20gW1tdXSlcclxuICAgbmFtZXMtPmlkeFxyXG4gICAoYXRvbSB7fSlcclxuICAgbmFtZS1pZHhcclxuICAgKGF0b20gMClcclxuICAgcHJlYW1ibGUtbGluZXNcclxuICAgKHRha2UgKG9yICg6cHJlYW1ibGUtbGluZS1jb3VudCBvcHRzKSAwKSAocmVwZWF0IFtdKSlcclxuICAgaW5mby0+c2VndlxyXG4gICAoZm5cclxuICAgIFtpbmZvIHNvdXJjZS1pZHggbGluZSBjb2xdXHJcbiAgICAobGV0XHJcbiAgICAgW3NlZ3YgWyg6Z2NvbCBpbmZvKSBzb3VyY2UtaWR4IGxpbmUgY29sXV1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtuYW1lICg6bmFtZSBpbmZvKV1cclxuICAgICAgKGxldFxyXG4gICAgICAgW2lkeFxyXG4gICAgICAgIChpZi1sZXRcclxuICAgICAgICAgW2lkeCAoZ2V0IEBuYW1lcy0+aWR4IG5hbWUpXVxyXG4gICAgICAgICBpZHhcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW2NpZHggQG5hbWUtaWR4XVxyXG4gICAgICAgICAgKHN3YXAhIG5hbWVzLT5pZHggYXNzb2MgbmFtZSBjaWR4KVxyXG4gICAgICAgICAgKHN3YXAhIG5hbWUtaWR4IGluYylcclxuICAgICAgICAgIGNpZHgpKV1cclxuICAgICAgIChjb25qIHNlZ3YgaWR4KSlcclxuICAgICAgc2VndikpKVxyXG4gICBlbmNvZGUtY29sc1xyXG4gICAoZm5cclxuICAgIFtpbmZvcyBzb3VyY2UtaWR4IGxpbmUgY29sXVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW2luZm8gaW5mb3NdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc2VndlxyXG4gICAgICAgKGluZm8tPnNlZ3YgaW5mbyBzb3VyY2UtaWR4IGxpbmUgY29sKVxyXG4gICAgICAgZ2xpbmVcclxuICAgICAgICg6Z2xpbmUgaW5mbylcclxuICAgICAgIGxjXHJcbiAgICAgICAoY291bnQgQGxpbmVzKV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoPiBnbGluZSAoZGVjIGxjKSlcclxuICAgICAgIChzd2FwIVxyXG4gICAgICAgIGxpbmVzXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtsaW5lc11cclxuICAgICAgICAgKGNvbmpcclxuICAgICAgICAgIChpbnRvIGxpbmVzIChyZXBlYXQgKGRlYyAoLSBnbGluZSAoZGVjIGxjKSkpIFtdKSlcclxuICAgICAgICAgIFtzZWd2XSkpKVxyXG4gICAgICAgKHN3YXAhXHJcbiAgICAgICAgbGluZXNcclxuICAgICAgICAoZm4gW2xpbmVzXSAodXBkYXRlLWluIGxpbmVzIFtnbGluZV0gY29uaiBzZWd2KSkpKSkpKV1cclxuICAoZG9zZXFcclxuICAgW1tzb3VyY2UtaWR4IFtfIGxpbmVzXV0gKG1hcC1pbmRleGVkIChmbiBbaSB2XSBbaSB2XSkgbSldXHJcbiAgIChkb3NlcVxyXG4gICAgW1tsaW5lIGNvbHNdIGxpbmVzXVxyXG4gICAgKGRvc2VxXHJcbiAgICAgW1tjb2wgaW5mb3NdIGNvbHNdXHJcbiAgICAgKGVuY29kZS1jb2xzIGluZm9zIHNvdXJjZS1pZHggbGluZSBjb2wpKSkpXHJcbiAgKGxldFxyXG4gICBbc291cmNlLW1hcC1maWxlLWNvbnRlbnRzXHJcbiAgICAoY29uZC0+XHJcbiAgICAgI2pzIHtcInZlcnNpb25cIiAzLCBcImZpbGVcIiAoOmZpbGUgb3B0cyksIFwic291cmNlc1wiIChsZXQgW3BhdGhzIChrZXlzIG0pIGYgKGNvbXAgKGlmICh0cnVlPyAoOnNvdXJjZS1tYXAtdGltZXN0YW1wIG9wdHMpKSAoZm4qIFtwMV9fNDg5MzIjXSAoc3RyIHAxX180ODkzMiMgXCI/cmVsPVwiICgudmFsdWVPZiAoanMvRGF0ZS4pKSkpIGlkZW50aXR5KSAoZm4qIFtwMV9fNDg5MzMjXSAobGFzdCAoc3RyaW5nL3NwbGl0IHAxX180ODkzMyMgI1wiL1wiKSkpKV0gKC0+PiBwYXRocyAobWFwIGYpIChpbnRvLWFycmF5KSkpLCBcImxpbmVDb3VudFwiICg6bGluZXMgb3B0cyksIFwibWFwcGluZ3NcIiAoLT4+IChsaW5lcy0+c2VncyAoY29uY2F0IHByZWFtYmxlLWxpbmVzIChjbG9qdXJlLmNvcmUvZGVyZWYgbGluZXMpKSkgKG1hcCAoZm4qIFtwMV9fNDg5MzQjXSAoc3RyaW5nL2pvaW4gXCIsXCIgcDFfXzQ4OTM0IykpKSAoc3RyaW5nL2pvaW4gXCI7XCIpKSwgXCJuYW1lc1wiIChpbnRvLWFycmF5IChtYXAgKHNldC9tYXAtaW52ZXJ0IChjbG9qdXJlLmNvcmUvZGVyZWYgbmFtZXMtPmlkeCkpIChyYW5nZSAoY291bnQgKGNsb2p1cmUuY29yZS9kZXJlZiBuYW1lcy0+aWR4KSkpKSl9XHJcbiAgICAgKDpzb3VyY2VzLWNvbnRlbnQgb3B0cylcclxuICAgICAoZG90b1xyXG4gICAgICAoZ29iai9zZXRcclxuICAgICAgIFwic291cmNlc0NvbnRlbnRcIlxyXG4gICAgICAgKGludG8tYXJyYXkgKDpzb3VyY2VzLWNvbnRlbnQgb3B0cykpKSkpXVxyXG4gICAoLnN0cmluZ2lmeSBqcy9KU09OIHNvdXJjZS1tYXAtZmlsZS1jb250ZW50cykpKSlcclxuIn0gezpzeW0gaW52ZXJ0LXJldmVyc2UtbWFwLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBDbG9qdXJlU2NyaXB0IHRvIEphdmFTY3JpcHQgc291cmNlIG1hcCwgaW52ZXJ0IGl0LiBVc2VmdWwgd2hlblxuICAgbWFwcGluZyBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcyB3aGVuIGVudmlyb25tZW50IHN1cHBvcnQgaXMgdW5hdmFpbGFibGUuIiwgOmFyZ2xpc3RzIChbcmV2ZXJzZS1tYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnZlcnQtcmV2ZXJzZS1tYXBcclxuIFwiR2l2ZW4gYSBDbG9qdXJlU2NyaXB0IHRvIEphdmFTY3JpcHQgc291cmNlIG1hcCwgaW52ZXJ0IGl0LiBVc2VmdWwgd2hlblxcbiAgIG1hcHBpbmcgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMgd2hlbiBlbnZpcm9ubWVudCBzdXBwb3J0IGlzIHVuYXZhaWxhYmxlLlwiXHJcbiBbcmV2ZXJzZS1tYXBdXHJcbiAobGV0XHJcbiAgW2ludmVydGVkIChhdG9tIChzb3J0ZWQtbWFwKSldXHJcbiAgKGRvc2VxXHJcbiAgIFtbbGluZSBjb2x1bW5zXSByZXZlcnNlLW1hcF1cclxuICAgKGRvc2VxXHJcbiAgICBbW2NvbHVtbiBjb2x1bW4taW5mb10gY29sdW1uc11cclxuICAgIChkb3NlcVxyXG4gICAgIFt7OmtleXMgW2dsaW5lIGdjb2wgbmFtZV19IGNvbHVtbi1pbmZvXVxyXG4gICAgIChzd2FwIVxyXG4gICAgICBpbnZlcnRlZFxyXG4gICAgICB1cGRhdGUtaW5cclxuICAgICAgW2dsaW5lXVxyXG4gICAgICAoZm5pbFxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW2NvbHVtbnNdXHJcbiAgICAgICAgKHVwZGF0ZS1pblxyXG4gICAgICAgICBjb2x1bW5zXHJcbiAgICAgICAgIFtnY29sXVxyXG4gICAgICAgICAoZm5pbCBjb25qIFtdKVxyXG4gICAgICAgICB7OmxpbmUgbGluZSwgOmNvbCBjb2x1bW4sIDpuYW1lIG5hbWV9KSlcclxuICAgICAgIChzb3J0ZWQtbWFwKSkpKSkpXHJcbiAgQGludmVydGVkKSlcclxuIn0gezpzeW0gZGVjb2RlLCA6bWV0YSB7OmRvYyAiQ29udmVydCBhIHYzIHNvdXJjZSBtYXAgSlNPTiBvYmplY3QgaW50byBhIHNvdXJjZSBtYXAgbWFwcGluZ1xuICBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgbG9jYXRpb25zIHRvIHRoZSBvcmlnaW5hbFxuICBDbG9qdXJlU2NyaXB0LiIsIDphcmdsaXN0cyBbW3NvdXJjZS1tYXBdIFttYXBwaW5ncyBzb3VyY2UtbWFwXV19LCA6c291cmNlICIoZGVmblxyXG4gZGVjb2RlXHJcbiBcIkNvbnZlcnQgYSB2MyBzb3VyY2UgbWFwIEpTT04gb2JqZWN0IGludG8gYSBzb3VyY2UgbWFwIG1hcHBpbmdcXG4gIGdlbmVyYXRlZCBKYXZhU2NyaXB0IHNvdXJjZSBsb2NhdGlvbnMgdG8gdGhlIG9yaWdpbmFsXFxuICBDbG9qdXJlU2NyaXB0LlwiXHJcbiAoW3NvdXJjZS1tYXBdIChkZWNvZGUgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJtYXBwaW5nc1wiKSBzb3VyY2UtbWFwKSlcclxuIChbbWFwcGluZ3Mgc291cmNlLW1hcF1cclxuICAobGV0XHJcbiAgIFtzb3VyY2VzXHJcbiAgICAoZ29iai9nZXQgc291cmNlLW1hcCBcInNvdXJjZXNcIilcclxuICAgIHJlbHNlZy1pbml0XHJcbiAgICBbMCAwIDAgMCAwXVxyXG4gICAgbGluZXNcclxuICAgIChzZXEgKHN0cmluZy9zcGxpdCBtYXBwaW5ncyAjXCI7XCIpKV1cclxuICAgKGxvb3BcclxuICAgIFtnbGluZSAwIGxpbmVzIGxpbmVzIHJlbHNlZyByZWxzZWctaW5pdCByZXN1bHQge31dXHJcbiAgICAoaWZcclxuICAgICBsaW5lc1xyXG4gICAgIChsZXRcclxuICAgICAgW2xpbmVcclxuICAgICAgIChmaXJzdCBsaW5lcylcclxuICAgICAgIFtyZXN1bHQgcmVsc2VnXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKHN0cmluZy9ibGFuaz8gbGluZSlcclxuICAgICAgICBbcmVzdWx0IHJlbHNlZ11cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtzZWdzIChzZXEgKHN0cmluZy9zcGxpdCBsaW5lICNcIixcIikpXVxyXG4gICAgICAgICAobG9vcFxyXG4gICAgICAgICAgW3NlZ3Mgc2VncyByZWxzZWcgcmVsc2VnIHJlc3VsdCByZXN1bHRdXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICBzZWdzXHJcbiAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICBbc2VnXHJcbiAgICAgICAgICAgICAoZmlyc3Qgc2VncylcclxuICAgICAgICAgICAgIG5yZWxzZWdcclxuICAgICAgICAgICAgIChzZWctY29tYmluZSAoYmFzZTY0LXZscS9kZWNvZGUgc2VnKSByZWxzZWcpXVxyXG4gICAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAgIChuZXh0IHNlZ3MpXHJcbiAgICAgICAgICAgICBucmVsc2VnXHJcbiAgICAgICAgICAgICAodXBkYXRlLXJlc3VsdFxyXG4gICAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAgIChzZWctPm1hcCBucmVsc2VnIHNvdXJjZS1tYXApXHJcbiAgICAgICAgICAgICAgZ2xpbmUpKSlcclxuICAgICAgICAgICBbcmVzdWx0IHJlbHNlZ10pKSkpXVxyXG4gICAgICAocmVjdXIgKGluYyBnbGluZSkgKG5leHQgbGluZXMpIChhc3NvYyByZWxzZWcgMCAwKSByZXN1bHQpKVxyXG4gICAgIHJlc3VsdCkpKSkpXHJcbiJ9IHs6c3ltIHNlZy0+bWFwLCA6bWV0YSB7OmRvYyAiVGFrZSBhIHNvdXJjZSBtYXAgc2VnbWVudCByZXByZXNlbnRlZCBhcyBhIHZlY3RvclxuICAgYW5kIHJldHVybiBhIG1hcC4iLCA6YXJnbGlzdHMgKFtzZWcgc291cmNlLW1hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlZy0+bWFwXHJcbiBcIlRha2UgYSBzb3VyY2UgbWFwIHNlZ21lbnQgcmVwcmVzZW50ZWQgYXMgYSB2ZWN0b3JcXG4gICBhbmQgcmV0dXJuIGEgbWFwLlwiXHJcbiBbc2VnIHNvdXJjZS1tYXBdXHJcbiAobGV0XHJcbiAgW1tnY29sIHNvdXJjZSBsaW5lIGNvbCBuYW1lXSBzZWddXHJcbiAgezpnY29sIGdjb2wsXHJcbiAgIDpzb3VyY2UgKGFnZXQgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJzb3VyY2VzXCIpIHNvdXJjZSksXHJcbiAgIDpsaW5lIGxpbmUsXHJcbiAgIDpjb2wgY29sLFxyXG4gICA6bmFtZVxyXG4gICAod2hlbi1sZXRcclxuICAgIFtuYW1lICgtPiBzZWcgbWV0YSA6bmFtZSldXHJcbiAgICAoYWdldCAoZ29iai9nZXQgc291cmNlLW1hcCBcIm5hbWVzXCIpIG5hbWUpKX0pKVxyXG4ifSB7OnN5bSBzb3VyY2UtY29tcGFyZSwgOm1ldGEgezpkb2MgIlRha2UgYSBzZXEgb2Ygc291cmNlIGZpbGUgbmFtZXMgYW5kIHJldHVybiBhIGNvbXBhcmF0b3JcbiAgIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEgc29ydGVkIG1hcC4gRm9yIHJldmVyc2VcbiAgIHNvdXJjZSBtYXBzLiIsIDphcmdsaXN0cyAoW3NvdXJjZXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzb3VyY2UtY29tcGFyZVxyXG4gXCJUYWtlIGEgc2VxIG9mIHNvdXJjZSBmaWxlIG5hbWVzIGFuZCByZXR1cm4gYSBjb21wYXJhdG9yXFxuICAgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYSBzb3J0ZWQgbWFwLiBGb3IgcmV2ZXJzZVxcbiAgIHNvdXJjZSBtYXBzLlwiXHJcbiBbc291cmNlc11cclxuIChsZXRcclxuICBbc291cmNlcyAoaW5kZXhlZC1zb3VyY2VzIHNvdXJjZXMpXVxyXG4gIChmbiBbYSBiXSAoY29tcGFyZSAoc291cmNlcyBhKSAoc291cmNlcyBiKSkpKSlcclxuIn0gezpzeW0gZGVjb2RlLXJldmVyc2UsIDptZXRhIHs6ZG9jICJDb252ZXJ0IGEgdjMgc291cmNlIG1hcCBKU09OIG9iamVjdCBpbnRvIGEgcmV2ZXJzZSBzb3VyY2UgbWFwXG4gIG1hcHBpbmcgb3JpZ2luYWwgQ2xvanVyZVNjcmlwdCBzb3VyY2UgbG9jYXRpb25zIHRvIHRoZSBnZW5lcmF0ZWRcbiAgSmF2YVNjcmlwdC4iLCA6YXJnbGlzdHMgW1tzb3VyY2UtbWFwXSBbbWFwcGluZ3Mgc291cmNlLW1hcF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGRlY29kZS1yZXZlcnNlXHJcbiBcIkNvbnZlcnQgYSB2MyBzb3VyY2UgbWFwIEpTT04gb2JqZWN0IGludG8gYSByZXZlcnNlIHNvdXJjZSBtYXBcXG4gIG1hcHBpbmcgb3JpZ2luYWwgQ2xvanVyZVNjcmlwdCBzb3VyY2UgbG9jYXRpb25zIHRvIHRoZSBnZW5lcmF0ZWRcXG4gIEphdmFTY3JpcHQuXCJcclxuIChbc291cmNlLW1hcF1cclxuICAoZGVjb2RlLXJldmVyc2UgKGdvYmovZ2V0IHNvdXJjZS1tYXAgXCJtYXBwaW5nc1wiKSBzb3VyY2UtbWFwKSlcclxuIChbbWFwcGluZ3Mgc291cmNlLW1hcF1cclxuICAobGV0XHJcbiAgIFtzb3VyY2VzXHJcbiAgICAoZ29iai9nZXQgc291cmNlLW1hcCBcInNvdXJjZXNcIilcclxuICAgIHJlbHNlZy1pbml0XHJcbiAgICBbMCAwIDAgMCAwXVxyXG4gICAgbGluZXNcclxuICAgIChzZXEgKHN0cmluZy9zcGxpdCBtYXBwaW5ncyAjXCI7XCIpKV1cclxuICAgKGxvb3BcclxuICAgIFtnbGluZVxyXG4gICAgIDBcclxuICAgICBsaW5lc1xyXG4gICAgIGxpbmVzXHJcbiAgICAgcmVsc2VnXHJcbiAgICAgcmVsc2VnLWluaXRcclxuICAgICByZXN1bHRcclxuICAgICAoc29ydGVkLW1hcC1ieSAoc291cmNlLWNvbXBhcmUgc291cmNlcykpXVxyXG4gICAgKGlmXHJcbiAgICAgbGluZXNcclxuICAgICAobGV0XHJcbiAgICAgIFtsaW5lXHJcbiAgICAgICAoZmlyc3QgbGluZXMpXHJcbiAgICAgICBbcmVzdWx0IHJlbHNlZ11cclxuICAgICAgIChpZlxyXG4gICAgICAgIChzdHJpbmcvYmxhbms/IGxpbmUpXHJcbiAgICAgICAgW3Jlc3VsdCByZWxzZWddXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbc2VncyAoc2VxIChzdHJpbmcvc3BsaXQgbGluZSAjXCIsXCIpKV1cclxuICAgICAgICAgKGxvb3BcclxuICAgICAgICAgIFtzZWdzIHNlZ3MgcmVsc2VnIHJlbHNlZyByZXN1bHQgcmVzdWx0XVxyXG4gICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgc2Vnc1xyXG4gICAgICAgICAgIChsZXRcclxuICAgICAgICAgICAgW3NlZ1xyXG4gICAgICAgICAgICAgKGZpcnN0IHNlZ3MpXHJcbiAgICAgICAgICAgICBucmVsc2VnXHJcbiAgICAgICAgICAgICAoc2VnLWNvbWJpbmUgKGJhc2U2NC12bHEvZGVjb2RlIHNlZykgcmVsc2VnKV1cclxuICAgICAgICAgICAgKHJlY3VyXHJcbiAgICAgICAgICAgICAobmV4dCBzZWdzKVxyXG4gICAgICAgICAgICAgbnJlbHNlZ1xyXG4gICAgICAgICAgICAgKHVwZGF0ZS1yZXZlcnNlLXJlc3VsdFxyXG4gICAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAgIChzZWctPm1hcCBucmVsc2VnIHNvdXJjZS1tYXApXHJcbiAgICAgICAgICAgICAgZ2xpbmUpKSlcclxuICAgICAgICAgICBbcmVzdWx0IHJlbHNlZ10pKSkpXVxyXG4gICAgICAocmVjdXIgKGluYyBnbGluZSkgKG5leHQgbGluZXMpIChhc3NvYyByZWxzZWcgMCAwKSByZXN1bHQpKVxyXG4gICAgIHJlc3VsdCkpKSkpXHJcbiJ9IHs6c3ltIGxpbmVzLT5zZWdzLCA6bWV0YSB7OmRvYyAiVGFrZSBhIG5lc3RlZCBzb3J0ZWQgbWFwIGVuY29kaW5nIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvblxuICAgZm9yIGEgZmlsZSBhbmQgcmV0dXJuIGEgdmVjdG9yIG9mIHZlY3RvcnMgb2YgZW5jb2RlZCBzZWdtZW50cy5cbiAgIEVhY2ggdmVjdG9yIHJlcHJlc2VudHMgYSBsaW5lLCBhbmQgdGhlIGludGVybmFsIHZlY3RvcnMgYXJlIHNlZ21lbnRzXG4gICByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaW5lLiIsIDphcmdsaXN0cyAoW2xpbmVzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbGluZXMtPnNlZ3NcclxuIFwiVGFrZSBhIG5lc3RlZCBzb3J0ZWQgbWFwIGVuY29kaW5nIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvblxcbiAgIGZvciBhIGZpbGUgYW5kIHJldHVybiBhIHZlY3RvciBvZiB2ZWN0b3JzIG9mIGVuY29kZWQgc2VnbWVudHMuXFxuICAgRWFjaCB2ZWN0b3IgcmVwcmVzZW50cyBhIGxpbmUsIGFuZCB0aGUgaW50ZXJuYWwgdmVjdG9ycyBhcmUgc2VnbWVudHNcXG4gICByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaW5lLlwiXHJcbiBbbGluZXNdXHJcbiAobGV0XHJcbiAgW3JlbHNlZyAoYXRvbSBbMCAwIDAgMCAwXSldXHJcbiAgKHJlZHVjZVxyXG4gICAoZm5cclxuICAgIFtzZWdzIGNvbHNdXHJcbiAgICAoc3dhcCFcclxuICAgICByZWxzZWdcclxuICAgICAoZm4gW1tfIHNvdXJjZSBsaW5lIGNvbCBuYW1lXV0gWzAgc291cmNlIGxpbmUgY29sIG5hbWVdKSlcclxuICAgIChjb25qXHJcbiAgICAgc2Vnc1xyXG4gICAgIChyZWR1Y2VcclxuICAgICAgKGZuXHJcbiAgICAgICBbY29scyBbZ2NvbCBzaWR4IGxpbmUgY29sIG5hbWUgOmFzIHNlZ11dXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW29mZnNldCAobWFwIC0gc2VnIEByZWxzZWcpXVxyXG4gICAgICAgIChzd2FwIVxyXG4gICAgICAgICByZWxzZWdcclxuICAgICAgICAgKGZuIFtbXyBfIF8gXyBsbmFtZV1dIFtnY29sIHNpZHggbGluZSBjb2wgKG9yIG5hbWUgbG5hbWUpXSkpXHJcbiAgICAgICAgKGNvbmogY29scyAoYmFzZTY0LXZscS9lbmNvZGUgb2Zmc2V0KSkpKVxyXG4gICAgICBbXVxyXG4gICAgICBjb2xzKSkpXHJcbiAgIFtdXHJcbiAgIGxpbmVzKSkpXHJcbiJ9IHs6c3ltIG1lcmdlLXNvdXJjZS1tYXBzLCA6bWV0YSB7OmRvYyAiTWVyZ2UgYW4gaW50ZXJuYWwgc291cmNlIG1hcCByZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZVxuICAgQ2xvanVyZVNjcmlwdCBmaWxlIG1hcHBpbmcgb3JpZ2luYWwgdG8gZ2VuZXJhdGVkIHdpdGggYVxuICAgc2Vjb25kIHNvdXJjZSBtYXAgbWFwcGluZyBvcmlnaW5hbCBKUyB0byBnZW5lcmF0ZWQgSlMuXG4gICBUaGUgaXMgdG8gc3VwcG9ydCBzb3VyY2UgbWFwcyB0aGF0IHdvcmsgdGhyb3VnaCBtdWx0aXBsZVxuICAgY29tcGlsYXRpb24gc3RlcHMgbGlrZSBHb29nbGUgQ2xvc3VyZSBvcHRpbWl6YXRpb24gcGFzc2VzLiIsIDphcmdsaXN0cyAoW2NsanMtbWFwIGpzLW1hcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG1lcmdlLXNvdXJjZS1tYXBzXHJcbiBcIk1lcmdlIGFuIGludGVybmFsIHNvdXJjZSBtYXAgcmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGVcXG4gICBDbG9qdXJlU2NyaXB0IGZpbGUgbWFwcGluZyBvcmlnaW5hbCB0byBnZW5lcmF0ZWQgd2l0aCBhXFxuICAgc2Vjb25kIHNvdXJjZSBtYXAgbWFwcGluZyBvcmlnaW5hbCBKUyB0byBnZW5lcmF0ZWQgSlMuXFxuICAgVGhlIGlzIHRvIHN1cHBvcnQgc291cmNlIG1hcHMgdGhhdCB3b3JrIHRocm91Z2ggbXVsdGlwbGVcXG4gICBjb21waWxhdGlvbiBzdGVwcyBsaWtlIEdvb2dsZSBDbG9zdXJlIG9wdGltaXphdGlvbiBwYXNzZXMuXCJcclxuIFtjbGpzLW1hcCBqcy1tYXBdXHJcbiAobG9vcFxyXG4gIFtsaW5lLW1hcC1zZXEgKHNlcSBjbGpzLW1hcCkgbmV3LWxpbmVzIChzb3J0ZWQtbWFwKV1cclxuICAoaWZcclxuICAgbGluZS1tYXAtc2VxXHJcbiAgIChsZXRcclxuICAgIFtbbGluZSBjb2wtbWFwXVxyXG4gICAgIChmaXJzdCBsaW5lLW1hcC1zZXEpXHJcbiAgICAgbmV3LWNvbHNcclxuICAgICAobG9vcFxyXG4gICAgICBbY29sLW1hcC1zZXEgKHNlcSBjb2wtbWFwKSBuZXctY29scyAoc29ydGVkLW1hcCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgY29sLW1hcC1zZXFcclxuICAgICAgIChsZXRcclxuICAgICAgICBbW2NvbCBpbmZvc10gKGZpcnN0IGNvbC1tYXAtc2VxKV1cclxuICAgICAgICAocmVjdXJcclxuICAgICAgICAgKG5leHQgY29sLW1hcC1zZXEpXHJcbiAgICAgICAgIChhc3NvY1xyXG4gICAgICAgICAgbmV3LWNvbHNcclxuICAgICAgICAgIGNvbFxyXG4gICAgICAgICAgKHJlZHVjZVxyXG4gICAgICAgICAgIChmblxyXG4gICAgICAgICAgICBbdiB7OmtleXMgW2dsaW5lIGdjb2xdfV1cclxuICAgICAgICAgICAgKGludG8gdiAoZ2V0LWluIGpzLW1hcCBbZ2xpbmUgZ2NvbF0pKSlcclxuICAgICAgICAgICBbXVxyXG4gICAgICAgICAgIGluZm9zKSkpKVxyXG4gICAgICAgbmV3LWNvbHMpKV1cclxuICAgIChyZWN1ciAobmV4dCBsaW5lLW1hcC1zZXEpIChhc3NvYyBuZXctbGluZXMgbGluZSBuZXctY29scykpKVxyXG4gICBuZXctbGluZXMpKSlcclxuIn0gezpzeW0gdXBkYXRlLXJldmVyc2UtcmVzdWx0LCA6bWV0YSB7OmRvYyAiSGVscGVyIGZvciBkZWNvZGUtcmV2ZXJzZS4gVGFrZSBhIHJldmVyc2Ugc291cmNlIG1hcCBhbmRcbiAgdXBkYXRlIGl0IHdpdGggYSBzZWdtZW50IG1hcC4iLCA6YXJnbGlzdHMgKFtyZXN1bHQgc2VnbWFwIGdsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gdXBkYXRlLXJldmVyc2UtcmVzdWx0XHJcbiBcIkhlbHBlciBmb3IgZGVjb2RlLXJldmVyc2UuIFRha2UgYSByZXZlcnNlIHNvdXJjZSBtYXAgYW5kXFxuICB1cGRhdGUgaXQgd2l0aCBhIHNlZ21lbnQgbWFwLlwiXHJcbiBbcmVzdWx0IHNlZ21hcCBnbGluZV1cclxuIChsZXRcclxuICBbezprZXlzIFtnY29sIHNvdXJjZSBsaW5lIGNvbCBuYW1lXX1cclxuICAgc2VnbWFwXHJcbiAgIGRcclxuICAgezpnbGluZSBnbGluZSwgOmdjb2wgZ2NvbH1cclxuICAgZFxyXG4gICAoaWYgbmFtZSAoYXNzb2MgZCA6bmFtZSBuYW1lKSBkKV1cclxuICAodXBkYXRlLWluXHJcbiAgIHJlc3VsdFxyXG4gICBbc291cmNlXVxyXG4gICAoZm5pbFxyXG4gICAgKGZuXHJcbiAgICAgW21dXHJcbiAgICAgKHVwZGF0ZS1pblxyXG4gICAgICBtXHJcbiAgICAgIFtsaW5lXVxyXG4gICAgICAoZm5pbFxyXG4gICAgICAgKGZuIFttXSAodXBkYXRlLWluIG0gW2NvbF0gKGZuaWwgKGZuIFt2XSAoY29uaiB2IGQpKSBbXSkpKVxyXG4gICAgICAgKHNvcnRlZC1tYXApKSkpXHJcbiAgICAoc29ydGVkLW1hcCkpKSkpXHJcbiJ9IHs6c3ltIGluZGV4ZWQtc291cmNlcywgOm1ldGEgezpkb2MgIlRha2UgYSBzZXEgb2Ygc291cmNlIGZpbGUgbmFtZXMgYW5kIHJldHVybiBhIG1hcCBmcm9tXG4gICBmaWxlIG51bWJlciB0byBpbnRlZ2VyIGluZGV4LiBGb3IgcmV2ZXJzZSBzb3VyY2UgbWFwcy4iLCA6YXJnbGlzdHMgKFtzb3VyY2VzXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZXhlZC1zb3VyY2VzXHJcbiBcIlRha2UgYSBzZXEgb2Ygc291cmNlIGZpbGUgbmFtZXMgYW5kIHJldHVybiBhIG1hcCBmcm9tXFxuICAgZmlsZSBudW1iZXIgdG8gaW50ZWdlciBpbmRleC4gRm9yIHJldmVyc2Ugc291cmNlIG1hcHMuXCJcclxuIFtzb3VyY2VzXVxyXG4gKC0+PlxyXG4gIHNvdXJjZXNcclxuICAobWFwLWluZGV4ZWQgKGZuIFthIGJdIFthIGJdKSlcclxuICAocmVkdWNlIChmbiBbbSBbaSB2XV0gKGFzc29jIG0gdiBpKSkge30pKSlcclxuIn0gezpzeW0gc2VnLWNvbWJpbmUsIDptZXRhIHs6ZG9jICJDb21iaW5lIGEgc291cmNlIG1hcCBzZWdtZW50IHZlY3RvciBhbmQgYSByZWxhdGl2ZVxuICAgc291cmNlIG1hcCBzZWdtZW50IHZlY3RvciBhbmQgY29tYmluZSB0aGVtIHRvIGdldFxuICAgYW4gYWJzb2x1dGUgc2VnbWVudCBwb3NpdGl0b24gaW5mb3JtYXRpb24gYXMgYSB2ZWN0b3IuIiwgOmFyZ2xpc3RzIChbc2VnIHJlbHNlZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNlZy1jb21iaW5lXHJcbiBcIkNvbWJpbmUgYSBzb3VyY2UgbWFwIHNlZ21lbnQgdmVjdG9yIGFuZCBhIHJlbGF0aXZlXFxuICAgc291cmNlIG1hcCBzZWdtZW50IHZlY3RvciBhbmQgY29tYmluZSB0aGVtIHRvIGdldFxcbiAgIGFuIGFic29sdXRlIHNlZ21lbnQgcG9zaXRpdG9uIGluZm9ybWF0aW9uIGFzIGEgdmVjdG9yLlwiXHJcbiBbc2VnIHJlbHNlZ11cclxuIChsZXRcclxuICBbW2djb2wgc291cmNlIGxpbmUgY29sIG5hbWVdXHJcbiAgIHNlZ1xyXG4gICBbcmdjb2wgcnNvdXJjZSBybGluZSByY29sIHJuYW1lXVxyXG4gICByZWxzZWdcclxuICAgbnNlZ1xyXG4gICBbKCsgZ2NvbCByZ2NvbClcclxuICAgICgrIChvciBzb3VyY2UgMCkgcnNvdXJjZSlcclxuICAgICgrIChvciBsaW5lIDApIHJsaW5lKVxyXG4gICAgKCsgKG9yIGNvbCAwKSByY29sKVxyXG4gICAgKCsgKG9yIG5hbWUgMCkgcm5hbWUpXV1cclxuICAoaWYgbmFtZSAod2l0aC1tZXRhIG5zZWcgezpuYW1lICgrIG5hbWUgcm5hbWUpfSkgbnNlZykpKVxyXG4ifSksIG9ha2NsanMudG9vbHMucmVhZGVyLmltcGwuY29tbW9ucyAoezpzeW0gbWF0Y2gtbnVtYmVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXRjaC1udW1iZXJcclxuIFtzXVxyXG4gKGlmXHJcbiAgKG1hdGNoZXM/IGludC1wYXR0ZXJuIHMpXHJcbiAgKG1hdGNoLWludCBzKVxyXG4gIChpZlxyXG4gICAobWF0Y2hlcz8gZmxvYXQtcGF0dGVybiBzKVxyXG4gICAobWF0Y2gtZmxvYXQgcylcclxuICAgKHdoZW4gKG1hdGNoZXM/IHJhdGlvLXBhdHRlcm4gcykgKG1hdGNoLXJhdGlvIHMpKSkpKVxyXG4ifSB7OnN5bSBza2lwLWxpbmUsIDptZXRhIHs6ZG9jICJBZHZhbmNlcyB0aGUgcmVhZGVyIHRvIHRoZSBlbmQgb2YgYSBsaW5lLiBSZXR1cm5zIHRoZSByZWFkZXIiLCA6YXJnbGlzdHMgKFtyZWFkZXJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBza2lwLWxpbmVcclxuIFwiQWR2YW5jZXMgdGhlIHJlYWRlciB0byB0aGUgZW5kIG9mIGEgbGluZS4gUmV0dXJucyB0aGUgcmVhZGVyXCJcclxuIFtyZWFkZXJdXHJcbiAobG9vcCBbXSAod2hlbi1ub3QgKG5ld2xpbmU/IChyZWFkLWNoYXIgcmVhZGVyKSkgKHJlY3VyKSkpXHJcbiByZWFkZXIpXHJcbiJ9IHs6c3ltIGludC1wYXR0ZXJuLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gaW50LXBhdHRlcm5cclxuICNcIl4oWy0rXT8pKD86KDApfChbMS05XVswLTldKil8MFt4WF0oWzAtOUEtRmEtZl0rKXwwKFswLTddKyl8KFsxLTldWzAtOV0/KVtyUl0oWzAtOUEtWmEtel0rKXwwWzAtOV0rKShOKT8kXCIpXHJcbiJ9IHs6c3ltIHJlYWQtY29tbWVudCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtyZHIgJiBfXSl9LCA6c291cmNlICIoZGVmbiByZWFkLWNvbW1lbnQgW3JkciAmIF9dIChza2lwLWxpbmUgcmRyKSlcclxuIn0gezpzeW0gcGFyc2Utc3ltYm9sLCA6bWV0YSB7OmRvYyAiUGFyc2VzIGEgc3RyaW5nIGludG8gYSB2ZWN0b3Igb2YgdGhlIG5hbWVzcGFjZSBhbmQgc3ltYm9sIiwgOmFyZ2xpc3RzIChbdG9rZW5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1zeW1ib2xcclxuIFwiUGFyc2VzIGEgc3RyaW5nIGludG8gYSB2ZWN0b3Igb2YgdGhlIG5hbWVzcGFjZSBhbmQgc3ltYm9sXCJcclxuIFt0b2tlbl1cclxuICh3aGVuLW5vdFxyXG4gIChvclxyXG4gICAoaWRlbnRpY2FsPyBcIlwiIHRva2VuKVxyXG4gICAodHJ1ZT8gKC50ZXN0ICNcIjokXCIgdG9rZW4pKVxyXG4gICAodHJ1ZT8gKC50ZXN0ICNcIl46OlwiIHRva2VuKSkpXHJcbiAgKGxldFxyXG4gICBbbnMtaWR4XHJcbiAgICAoLmluZGV4T2YgdG9rZW4gXCIvXCIpXHJcbiAgICBuc1xyXG4gICAgKHdoZW4gKHBvcz8gbnMtaWR4KSAoc3VicyB0b2tlbiAwIG5zLWlkeCkpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBucylcclxuICAgIChsZXRcclxuICAgICBbbnMtaWR4IChpbmMgbnMtaWR4KV1cclxuICAgICAod2hlbi1ub3RcclxuICAgICAgKD09IG5zLWlkeCAoY291bnQgdG9rZW4pKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbc3ltIChzdWJzIHRva2VuIG5zLWlkeCldXHJcbiAgICAgICAod2hlblxyXG4gICAgICAgIChhbmRcclxuICAgICAgICAgKG5vdCAobnVtZXJpYz8gKG50aCBzeW0gMCkpKVxyXG4gICAgICAgICAobm90IChpZGVudGljYWw/IFwiXCIgc3ltKSlcclxuICAgICAgICAgKGZhbHNlPyAoLnRlc3QgI1wiOiRcIiBucykpXHJcbiAgICAgICAgIChvciAoaWRlbnRpY2FsPyBzeW0gXCIvXCIpICg9PSAtMSAoLmluZGV4T2Ygc3ltIFwiL1wiKSkpKVxyXG4gICAgICAgIFtucyBzeW1dKSkpKVxyXG4gICAgKHdoZW5cclxuICAgICAob3IgKGlkZW50aWNhbD8gdG9rZW4gXCIvXCIpICg9PSAtMSAoLmluZGV4T2YgdG9rZW4gXCIvXCIpKSlcclxuICAgICBbbmlsIHRva2VuXSkpKSkpXHJcbiJ9IHs6c3ltIG51bWJlci1saXRlcmFsPywgOm1ldGEgezpkb2MgIkNoZWNrcyB3aGV0aGVyIHRoZSByZWFkZXIgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbnVtYmVyIGxpdGVyYWwiLCA6YXJnbGlzdHMgKFtyZWFkZXIgaW5pdGNoXSl9LCA6c291cmNlICIoZGVmblxyXG4gbnVtYmVyLWxpdGVyYWw/XHJcbiBcIkNoZWNrcyB3aGV0aGVyIHRoZSByZWFkZXIgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbnVtYmVyIGxpdGVyYWxcIlxyXG4gW3JlYWRlciBpbml0Y2hdXHJcbiAob3JcclxuICAobnVtZXJpYz8gaW5pdGNoKVxyXG4gIChhbmRcclxuICAgKG9yIChpZGVudGljYWw/IFxcKyBpbml0Y2gpIChpZGVudGljYWw/IFxcLSBpbml0Y2gpKVxyXG4gICAobnVtZXJpYz8gKHBlZWstY2hhciByZWFkZXIpKSkpKVxyXG4ifSB7OnN5bSByZWFkLXBhc3QsIDptZXRhIHs6ZG9jICJSZWFkIHVudGlsIGZpcnN0IGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgbWF0Y2ggcHJlZCwgcmV0dXJuaW5nXG4gICBjaGFyLiIsIDphcmdsaXN0cyAoW3ByZWQgcmRyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1wYXN0XHJcbiBcIlJlYWQgdW50aWwgZmlyc3QgY2hhcmFjdGVyIHRoYXQgZG9lc24ndCBtYXRjaCBwcmVkLCByZXR1cm5pbmdcXG4gICBjaGFyLlwiXHJcbiBbcHJlZCByZHJdXHJcbiAobG9vcCBbY2ggKHJlYWQtY2hhciByZHIpXSAoaWYgKHByZWQgY2gpIChyZWN1ciAocmVhZC1jaGFyIHJkcikpIGNoKSkpXHJcbiJ9IHs6c3ltIGZsb2F0LXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGZsb2F0LXBhdHRlcm4gI1wiKFstK10/WzAtOV0rKFxcLlswLTldKik/KFtlRV1bLStdP1swLTldKyk/KShNKT9cIilcclxuIn0gezpzeW0gbWF0Y2hlcz8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcGF0dGVybiBzXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF0Y2hlcz9cclxuIFtwYXR0ZXJuIHNdXHJcbiAobGV0IFtbbWF0Y2hdIChyZS1maW5kIHBhdHRlcm4gcyldIChpZGVudGljYWw/IG1hdGNoIHMpKSlcclxuIn0gezpzeW0gdGhyb3dpbmctcmVhZGVyLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW21zZ10pfSwgOnNvdXJjZSAiKGRlZm4gdGhyb3dpbmctcmVhZGVyIFttc2ddIChmbiBbcmRyICYgX10gKHJlYWRlci1lcnJvciByZHIgbXNnKSkpXHJcbiJ9IHs6c3ltIHJhdGlvLXBhdHRlcm4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIHJhdGlvLXBhdHRlcm4gI1wiKFstK10/WzAtOV0rKS8oWzAtOV0rKVwiKVxyXG4ifSksIGR5bmFkb2MudHJhbnNmb3JtICh7OnN5bSB3aXRoLWZvY3VzLT5iaW5kaW5nLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3dpdGgtZm9jdXNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB3aXRoLWZvY3VzLT5iaW5kaW5nXHJcbiBbd2l0aC1mb2N1c11cclxuIChsZXRcclxuICBbZm9ybVxyXG4gICAob3IgKDpmb3JtIHdpdGgtZm9jdXMpICg6YmluZGluZyB3aXRoLWZvY3VzKSlcclxuICAgW2JpbmRpbmctdHlwZSBiaW5kaW5nLXZhbF1cclxuICAgZm9ybV1cclxuICAod2hlbiAoI3s6bG9jYWwtc3ltYm9sIDpzeW19IGJpbmRpbmctdHlwZSkgYmluZGluZy12YWwpKSlcclxuIn0gezpzeW0gYWRkLWZvY3VzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gd2l0aC1mb2N1cyBib2R5XSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWZvY3VzXHJcbiBbZm9ybSB3aXRoLWZvY3VzIGJvZHldXHJcbiAoaWYtbGV0XHJcbiAgW2JpbmQgKHdpdGgtZm9jdXMtPmJpbmRpbmcgd2l0aC1mb2N1cyldXHJcbiAgKHBvc3R3YWxrIChmbiBbeF0gKGlmICg9IHggYmluZCkgZm9ybSB4KSkgYm9keSlcclxuICBmb3JtKSlcclxuIn0gezpzeW0gYWRkLWNhcmQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB3aXRoLWNhcmQgaWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtY2FyZFxyXG4gW2Zvcm0gd2l0aC1jYXJkIGlkXVxyXG4gKGxpc3RcclxuICAnbGV0XHJcbiAgW3dpdGgtY2FyZFxyXG4gICAjPyg6Y2xqcyAobGlzdCAocXVvdGUgLmdldEVsZW1lbnRCeUlkKSAocXVvdGUganMvZG9jdW1lbnQpIGlkKSA6Y2xqIGlkKV1cclxuICBmb3JtKSlcclxuIn0gezpzeW0gYWRkLWNhbGxiYWNrLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gd2l0aC1jYWxsYmFja10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1jYWxsYmFja1xyXG4gW2Zvcm0gd2l0aC1jYWxsYmFja11cclxuIChsaXN0XHJcbiAgJ2xldFxyXG4gIFsnZXMtY2hhbm5lbFxyXG4gICAnKGR5bmFkb2MuYWxpYXNlcy9jaGFuKVxyXG4gICB3aXRoLWNhbGxiYWNrXHJcbiAgICcoZm4gW2RhdGFdIChkeW5hZG9jLmFsaWFzZXMvcHV0ISBlcy1jaGFubmVsIGRhdGEpKV1cclxuICBmb3JtXHJcbiAgJyhkeW5hZG9jLmFsaWFzZXMvPCEhIGVzLWNoYW5uZWwpKSlcclxuIn0gezpzeW0gdHJhbnNmb3JtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2V4YW1wbGVdIFt7OmtleXMgW2JvZHkgaWQgd2l0aC1mb2N1cyB3aXRoLWNhcmQgd2l0aC1jYWxsYmFja119IGZvcm1dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmFuc2Zvcm1cclxuIChbZXhhbXBsZV1cclxuICAodHJhbnNmb3JtXHJcbiAgIGV4YW1wbGVcclxuICAgKG9yIChzb21lLT4gZXhhbXBsZSA6d2l0aC1mb2N1cyA6aW5pdC1leHByKSAoOmJvZHkgZXhhbXBsZSkpKSlcclxuIChbezprZXlzIFtib2R5IGlkIHdpdGgtZm9jdXMgd2l0aC1jYXJkIHdpdGgtY2FsbGJhY2tdfSBmb3JtXVxyXG4gIChjb25kLT5cclxuICAgZm9ybVxyXG4gICAoc29tZT8gd2l0aC1mb2N1cylcclxuICAgKGFkZC1mb2N1cyB3aXRoLWZvY3VzIGJvZHkpXHJcbiAgIChzb21lPyB3aXRoLWNhcmQpXHJcbiAgIChhZGQtY2FyZCB3aXRoLWNhcmQgaWQpXHJcbiAgIChzb21lPyB3aXRoLWNhbGxiYWNrKVxyXG4gICAoYWRkLWNhbGxiYWNrIHdpdGgtY2FsbGJhY2spKSkpXHJcbiJ9KSwgb2RveWxlLnJ1bGVzICh7OnN5bSAtPnJ1bGUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbW3J1bGUtbmFtZSBydWxlXV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIC0+cnVsZVxyXG4gW1tydWxlLW5hbWUgcnVsZV1dXHJcbiAobGV0XHJcbiAgW3s6a2V5cyBbd2hhdC1ibG9jayB3aGVuLWJsb2NrIHRoZW4tYmxvY2tdfVxyXG4gICBydWxlXHJcbiAgIGNvbmRpdGlvbnNcclxuICAgKG1hcHYgLT5jb25kaXRpb24gKDpib2R5IHdoYXQtYmxvY2spKVxyXG4gICB3aGVuLWJvZHlcclxuICAgKDpib2R5IHdoZW4tYmxvY2spXHJcbiAgIHdoZW4tYm9keVxyXG4gICAoaWYgKD4gKGNvdW50IHdoZW4tYm9keSkgMSkgKGNvbnMgJ2FuZCB3aGVuLWJvZHkpIChmaXJzdCB3aGVuLWJvZHkpKVxyXG4gICB0aGVuLWJvZHlcclxuICAgKDpib2R5IHRoZW4tYmxvY2spXHJcbiAgIHN5bXNcclxuICAgKC0+PiBjb25kaXRpb25zIChtYXBjYXQgOmJpbmRpbmdzKSAobWFwIDpzeW0pIHNldCB2ZWMpXVxyXG4gIHs6cnVsZS1uYW1lIHJ1bGUtbmFtZSxcclxuICAgOmZuLW5hbWVcclxuICAgKC0+XHJcbiAgICAoc3RyIChuYW1lc3BhY2UgcnVsZS1uYW1lKSBcIi1cIiAobmFtZSBydWxlLW5hbWUpKVxyXG4gICAgKHN0ci9yZXBsYWNlIFwiLlwiIFwiLVwiKVxyXG4gICAgc3ltYm9sKSxcclxuICAgOmNvbmRpdGlvbnMgY29uZGl0aW9ucyxcclxuICAgOmFyZyB7OmtleXMgc3ltc30sXHJcbiAgIDp3aGVuLWJvZHkgd2hlbi1ib2R5LFxyXG4gICA6dGhlbi1ib2R5IHRoZW4tYm9keX0pKVxyXG4ifSB7OnN5bSBmaXJlLXJ1bGVzLCA6bWV0YSB7OmRvYyAiRmlyZXMgOnRoZW4gYmxvY2tzIGZvciBhbnkgcnVsZXMgd2l0aCBhIGNvbXBsZXRlIHNldCBvZiBtYXRjaGVzLiIsIDphcmdsaXN0cyAoW3Nlc3Npb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaXJlLXJ1bGVzXHJcbiBcIkZpcmVzIDp0aGVuIGJsb2NrcyBmb3IgYW55IHJ1bGVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgbWF0Y2hlcy5cIlxyXG4gW3Nlc3Npb25dXHJcbiAobGV0XHJcbiAgW3RoZW4tcXVldWUgKDp0aGVuLXF1ZXVlIHNlc3Npb24pXVxyXG4gIChpZlxyXG4gICAoYW5kIChzZXEgdGhlbi1xdWV1ZSkgKG5pbD8gKnNlc3Npb24qKSlcclxuICAgKGxldFxyXG4gICAgWyp0cmlnZ2VyLXF1ZXVlXHJcbiAgICAgKHZvbGF0aWxlISBbXSlcclxuICAgICBzZXNzaW9uXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAoZm5cclxuICAgICAgIFtzZXNzaW9uIFtub2RlLWlkIGlkK2F0dHJzXV1cclxuICAgICAgIChsZXRcclxuICAgICAgICBbbm9kZS1wYXRoXHJcbiAgICAgICAgIFs6YmV0YS1ub2RlcyBub2RlLWlkXVxyXG4gICAgICAgICBub2RlXHJcbiAgICAgICAgIChnZXQtaW4gc2Vzc2lvbiBub2RlLXBhdGgpXHJcbiAgICAgICAgIHs6a2V5cyBbbWF0Y2hlcyBydWxlLW5hbWVdfVxyXG4gICAgICAgICBub2RlXHJcbiAgICAgICAgIHJ1bGUtZm5cclxuICAgICAgICAgKG9yXHJcbiAgICAgICAgICAoZ2V0LWluIHNlc3Npb24gWzpydWxlLWZucyBydWxlLW5hbWVdKVxyXG4gICAgICAgICAgKHRocm93IChleC1pbmZvIChzdHIgcnVsZS1uYW1lIFwiIG5vdCBmb3VuZFwiKSB7fSkpKV1cclxuICAgICAgICAod2hlbi1sZXRcclxuICAgICAgICAgW3s6a2V5cyBbdmFycyBlbmFibGVkXX0gKGdldCBtYXRjaGVzIGlkK2F0dHJzKV1cclxuICAgICAgICAgKHdoZW4gZW5hYmxlZCAodnN3YXAhICp0cmlnZ2VyLXF1ZXVlIGNvbmogW3J1bGUtZm4gdmFyc10pKSlcclxuICAgICAgICAodXBkYXRlLWluIHNlc3Npb24gbm9kZS1wYXRoIGFzc29jIDp0cmlnZ2VyIGZhbHNlKSkpXHJcbiAgICAgIHNlc3Npb25cclxuICAgICAgdGhlbi1xdWV1ZSlcclxuICAgICBzZXNzaW9uXHJcbiAgICAgKGFzc29jIHNlc3Npb24gOnRoZW4tcXVldWUgI3t9KV1cclxuICAgICgtPj5cclxuICAgICBAKnRyaWdnZXItcXVldWVcclxuICAgICAocmVkdWNlXHJcbiAgICAgIChmblxyXG4gICAgICAgW3Nlc3Npb24gW3J1bGUtZm4gbWF0Y2hdXVxyXG4gICAgICAgKGJpbmRpbmdcclxuICAgICAgICBbKnNlc3Npb24qXHJcbiAgICAgICAgIHNlc3Npb25cclxuICAgICAgICAgKm11dGFibGUtc2Vzc2lvbipcclxuICAgICAgICAgKHZvbGF0aWxlISBzZXNzaW9uKVxyXG4gICAgICAgICAqbWF0Y2gqXHJcbiAgICAgICAgIG1hdGNoXVxyXG4gICAgICAgIChydWxlLWZuIG1hdGNoKVxyXG4gICAgICAgIEAqbXV0YWJsZS1zZXNzaW9uKikpXHJcbiAgICAgIHNlc3Npb24pXHJcbiAgICAgZmlyZS1ydWxlcykpXHJcbiAgIHNlc3Npb24pKSlcclxuIn0gezpzeW0gaW5zZXJ0LCA6bWV0YSB7OmRvYyAiSW5zZXJ0cyBhIGZhY3QgaW50byB0aGUgc2Vzc2lvbi4gQ2FuIG9wdGlvbmFsbHkgaW5zZXJ0IG11bHRpcGxlIGZhY3RzIHdpdGggdGhlIHNhbWUgaWQuIiwgOmFyZ2xpc3RzIFtbc2Vzc2lvbiBpZCBhdHRyLT52YWx1ZV0gW3Nlc3Npb24gaWQgYXR0ciB2YWx1ZV1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluc2VydFxyXG4gXCJJbnNlcnRzIGEgZmFjdCBpbnRvIHRoZSBzZXNzaW9uLiBDYW4gb3B0aW9uYWxseSBpbnNlcnQgbXVsdGlwbGUgZmFjdHMgd2l0aCB0aGUgc2FtZSBpZC5cIlxyXG4gKFtzZXNzaW9uIGlkIGF0dHItPnZhbHVlXVxyXG4gIChyZWR1Y2Uta3ZcclxuICAgKGZuIFtzZXNzaW9uIGF0dHIgdmFsdWVdIChpbnNlcnQgc2Vzc2lvbiBpZCBhdHRyIHZhbHVlKSlcclxuICAgc2Vzc2lvblxyXG4gICBhdHRyLT52YWx1ZSkpXHJcbiAoW3Nlc3Npb24gaWQgYXR0ciB2YWx1ZV1cclxuICAoLT4+XHJcbiAgIChnZXQtYWxwaGEtbm9kZXMtZm9yLWZhY3RcclxuICAgIHNlc3Npb25cclxuICAgICg6YWxwaGEtbm9kZSBzZXNzaW9uKVxyXG4gICAgaWRcclxuICAgIGF0dHJcclxuICAgIHZhbHVlXHJcbiAgICB0cnVlKVxyXG4gICAodXBzZXJ0LWZhY3Qgc2Vzc2lvbiBpZCBhdHRyIHZhbHVlKSkpKVxyXG4ifSB7OnN5bSAqbWF0Y2gqLCA6bWV0YSB7OmRvYyAiUHJvdmlkZXMgYSBtYXAgb2YgYWxsIHRoZSBtYXRjaGVkIHZhbHVlcyBmcm9tIGluc2lkZSBhIDp0aGVuIGJsb2NrLiJ9LCA6c291cmNlICIoZGVmICptYXRjaCogbmlsKVxyXG4ifSB7OnN5bSBhZGQtcnVsZSwgOm1ldGEgezpkb2MgIkFkZHMgYSBydWxlIHRvIHRoZSBnaXZlbiBzZXNzaW9uLiIsIDphcmdsaXN0cyAoW3Nlc3Npb24gcnVsZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1ydWxlXHJcbiBcIkFkZHMgYSBydWxlIHRvIHRoZSBnaXZlbiBzZXNzaW9uLlwiXHJcbiBbc2Vzc2lvbiBydWxlXVxyXG4gKHdoZW5cclxuICAoZ2V0LWluIHNlc3Npb24gWzpydWxlLWZucyAoOm5hbWUgcnVsZSldKVxyXG4gICh0aHJvdyAoZXgtaW5mbyAoc3RyICg6bmFtZSBydWxlKSBcIiBhbHJlYWR5IGV4aXN0cyBpbiBzZXNzaW9uXCIpIHt9KSkpXHJcbiAobGV0XHJcbiAgW2NvbmRpdGlvbnNcclxuICAgKDpjb25kaXRpb25zIHJ1bGUpXHJcbiAgIHNlc3Npb25cclxuICAgKHJlZHVjZSBhZGQtY29uZGl0aW9uIHNlc3Npb24gY29uZGl0aW9ucylcclxuICAgbGVhZi1ub2RlLWlkXHJcbiAgICgtPiBzZXNzaW9uIDptZW0tbm9kZS1pZHMgbGFzdClcclxuICAgYmluZGluZ3NcclxuICAgKDpiaW5kaW5ncyBzZXNzaW9uKVxyXG4gICBzZXNzaW9uXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFtzZXNzaW9uIG1lbS1ub2RlLWlkXVxyXG4gICAgICh1cGRhdGUtaW5cclxuICAgICAgc2Vzc2lvblxyXG4gICAgICBbOmJldGEtbm9kZXMgbWVtLW5vZGUtaWRdXHJcbiAgICAgIChmblxyXG4gICAgICAgW21lbS1ub2RlXVxyXG4gICAgICAgKGFzc29jXHJcbiAgICAgICAgbWVtLW5vZGVcclxuICAgICAgICA6cnVsZS1uYW1lXHJcbiAgICAgICAgKDpuYW1lIHJ1bGUpXHJcbiAgICAgICAgOmxlYWYtbm9kZS1pZFxyXG4gICAgICAgIGxlYWYtbm9kZS1pZCkpKSlcclxuICAgIHNlc3Npb25cclxuICAgICg6bWVtLW5vZGUtaWRzIHNlc3Npb24pKVxyXG4gICBzZXNzaW9uXHJcbiAgIChyZWR1Y2VcclxuICAgIChmblxyXG4gICAgIFtzZXNzaW9uIGpvaW4tbm9kZS1pZF1cclxuICAgICAodXBkYXRlLWluXHJcbiAgICAgIHNlc3Npb25cclxuICAgICAgWzpiZXRhLW5vZGVzIGpvaW4tbm9kZS1pZF1cclxuICAgICAgKGZuXHJcbiAgICAgICBbam9pbi1ub2RlXVxyXG4gICAgICAgKGFzc29jXHJcbiAgICAgICAgam9pbi1ub2RlXHJcbiAgICAgICAgOmlkLWtleVxyXG4gICAgICAgIChzb21lXHJcbiAgICAgICAgIChmblxyXG4gICAgICAgICAgW3s6a2V5cyBbZmllbGQga2V5XX1dXHJcbiAgICAgICAgICAod2hlblxyXG4gICAgICAgICAgIChhbmQgKD0gOmlkIGZpZWxkKSAoY29udGFpbnM/ICg6am9pbnMgYmluZGluZ3MpIGtleSkpXHJcbiAgICAgICAgICAga2V5KSlcclxuICAgICAgICAgKC0+IGpvaW4tbm9kZSA6Y29uZGl0aW9uIDpiaW5kaW5ncykpXHJcbiAgICAgICAgOmRpc2FibGUtZmFzdC11cGRhdGVzXHJcbiAgICAgICAgKGNvbnRhaW5zP1xyXG4gICAgICAgICAoOmpvaW5zIGJpbmRpbmdzKVxyXG4gICAgICAgICAoc29tZVxyXG4gICAgICAgICAgKGZuIFt7OmtleXMgW2ZpZWxkIGtleV19XSAod2hlbiAoPSA6dmFsdWUgZmllbGQpIGtleSkpXHJcbiAgICAgICAgICAoLT4gam9pbi1ub2RlIDpjb25kaXRpb24gOmJpbmRpbmdzKSkpKSkpKVxyXG4gICAgc2Vzc2lvblxyXG4gICAgKDpqb2luLW5vZGUtaWRzIHNlc3Npb24pKV1cclxuICAoLT5cclxuICAgc2Vzc2lvblxyXG4gICAoYXNzb2MtaW4gWzpiZXRhLW5vZGVzIGxlYWYtbm9kZS1pZCA6ZmlsdGVyLWZuXSAoOmZpbHRlci1mbiBydWxlKSlcclxuICAgKGFzc29jLWluIFs6cnVsZS1pZHMgKDpuYW1lIHJ1bGUpXSBsZWFmLW5vZGUtaWQpXHJcbiAgIChhc3NvYy1pbiBbOnJ1bGUtZm5zICg6bmFtZSBydWxlKV0gKDpydWxlLWZuIHJ1bGUpKVxyXG4gICAoZGlzc29jIDptZW0tbm9kZS1pZHMgOmpvaW4tbm9kZS1pZHMgOmJpbmRpbmdzKSkpKVxyXG4ifSB7OnN5bSAtPnNlc3Npb24sIDptZXRhIHs6ZG9jICJSZXR1cm5zIGFuIGVtcHR5IHNlc3Npb24uIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gLT5zZXNzaW9uXHJcbiBcIlJldHVybnMgYW4gZW1wdHkgc2Vzc2lvbi5cIlxyXG4gW11cclxuIChtYXAtPlNlc3Npb25cclxuICB7OmFscGhhLW5vZGVcclxuICAgKG1hcC0+QWxwaGFOb2RlXHJcbiAgICB7OnBhdGggbmlsLFxyXG4gICAgIDp0ZXN0LWZpZWxkIG5pbCxcclxuICAgICA6dGVzdC12YWx1ZSBuaWwsXHJcbiAgICAgOmNoaWxkcmVuIFtdLFxyXG4gICAgIDpzdWNjZXNzb3JzIFtdLFxyXG4gICAgIDpmYWN0cyB7fX0pLFxyXG4gICA6YmV0YS1ub2RlcyB7fSxcclxuICAgOmxhc3QtaWQgLTEsXHJcbiAgIDpydWxlLWZucyB7fSxcclxuICAgOnJ1bGUtaWRzIHt9LFxyXG4gICA6aWQtYXR0ci1ub2RlcyB7fSxcclxuICAgOnRoZW4tcXVldWUgI3t9fSkpXHJcbiJ9IHs6c3ltIHJlc2V0ISwgOm1ldGEgezpkb2MgIk11dGF0ZXMgdGhlIHNlc3Npb24gZnJvbSBhIDp0aGVuIGJsb2NrLiIsIDphcmdsaXN0cyAoW25ldy1zZXNzaW9uXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVzZXQhXHJcbiBcIk11dGF0ZXMgdGhlIHNlc3Npb24gZnJvbSBhIDp0aGVuIGJsb2NrLlwiXHJcbiBbbmV3LXNlc3Npb25dXHJcbiAoaWZcclxuICAqbXV0YWJsZS1zZXNzaW9uKlxyXG4gIChpZlxyXG4gICAoPSAqc2Vzc2lvbiogQCptdXRhYmxlLXNlc3Npb24qKVxyXG4gICAodnJlc2V0ISAqbXV0YWJsZS1zZXNzaW9uKiBuZXctc2Vzc2lvbilcclxuICAgKHRocm93XHJcbiAgICAoZXgtaW5mbyBcIllvdSBtYXkgb25seSBjYWxsIGByZXNldCFgIG9uY2UgaW4gYSA6dGhlbiBibG9ja1wiIHt9KSkpXHJcbiAgKHRocm93IChleC1pbmZvIFwiWW91IG1heSBvbmx5IGNhbGwgYHJlc2V0IWAgaW4gYSA6dGhlbiBibG9ja1wiIHt9KSkpKVxyXG4ifSB7OnN5bSByZXRyYWN0ISwgOm1ldGEgezpkb2MgIlNhbWUgYXMgYHJldHJhY3RgIGJ1dCBjYW4gYmUgdXNlZCBpbnNpZGUgb2YgYSA6dGhlbiBibG9jay5cbiAgXG4gIFRoZSBmdW5jdGlvbiBpcyBERVBSRUNBVEVELiBJdCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQsIGJ1dCBwcmVmZXIgdGhpcyBpbnN0ZWFkOlxuICBcbiAgKG8vcmVzZXQhIChvL3JldHJhY3Qgby8qc2Vzc2lvbiogaWQgYXR0cikpIiwgOmFyZ2xpc3RzIChbaWQgYXR0cl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldHJhY3QhXHJcbiBcIlNhbWUgYXMgYHJldHJhY3RgIGJ1dCBjYW4gYmUgdXNlZCBpbnNpZGUgb2YgYSA6dGhlbiBibG9jay5cXG4gIFxcbiAgVGhlIGZ1bmN0aW9uIGlzIERFUFJFQ0FURUQuIEl0IHdpbGwgbmV2ZXIgYmUgcmVtb3ZlZCwgYnV0IHByZWZlciB0aGlzIGluc3RlYWQ6XFxuICBcXG4gIChvL3Jlc2V0ISAoby9yZXRyYWN0IG8vKnNlc3Npb24qIGlkIGF0dHIpKVwiXHJcbiBbaWQgYXR0cl1cclxuIChpZlxyXG4gICptdXRhYmxlLXNlc3Npb24qXHJcbiAgKHZzd2FwISAqbXV0YWJsZS1zZXNzaW9uKiByZXRyYWN0IGlkIGF0dHIpXHJcbiAgKHRocm93XHJcbiAgIChleC1pbmZvIFwiVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIDp0aGVuIGJsb2NrXCIge30pKSkpXHJcbiJ9IHs6c3ltIGluc2VydCEsIDptZXRhIHs6ZG9jICJTYW1lIGFzIGBpbnNlcnRgIGJ1dCBjYW4gYmUgdXNlZCBpbnNpZGUgb2YgYSA6dGhlbiBibG9jay5cbiAgXG4gIFRoZSBmdW5jdGlvbiBpcyBERVBSRUNBVEVELiBJdCB3aWxsIG5ldmVyIGJlIHJlbW92ZWQsIGJ1dCBwcmVmZXIgdGhpcyBpbnN0ZWFkOlxuICBcbiAgKG8vcmVzZXQhIChvL2luc2VydCBvLypzZXNzaW9uKiBpZCBhdHRyKSkiLCA6YXJnbGlzdHMgW1tpZCBhdHRyLT52YWx1ZV0gW2lkIGF0dHIgdmFsdWVdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnNlcnQhXHJcbiBcIlNhbWUgYXMgYGluc2VydGAgYnV0IGNhbiBiZSB1c2VkIGluc2lkZSBvZiBhIDp0aGVuIGJsb2NrLlxcbiAgXFxuICBUaGUgZnVuY3Rpb24gaXMgREVQUkVDQVRFRC4gSXQgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBidXQgcHJlZmVyIHRoaXMgaW5zdGVhZDpcXG4gIFxcbiAgKG8vcmVzZXQhIChvL2luc2VydCBvLypzZXNzaW9uKiBpZCBhdHRyKSlcIlxyXG4gKFtpZCBhdHRyLT52YWx1ZV1cclxuICAocnVuISAoZm4gW1thdHRyIHZhbHVlXV0gKGluc2VydCEgaWQgYXR0ciB2YWx1ZSkpIGF0dHItPnZhbHVlKSlcclxuIChbaWQgYXR0ciB2YWx1ZV1cclxuICAoaWZcclxuICAgKm11dGFibGUtc2Vzc2lvbipcclxuICAgKHZzd2FwISAqbXV0YWJsZS1zZXNzaW9uKiBpbnNlcnQgaWQgYXR0ciB2YWx1ZSlcclxuICAgKHRocm93XHJcbiAgICAoZXgtaW5mbyBcIlRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW4gYSA6dGhlbiBibG9ja1wiIHt9KSkpKSlcclxuIn0gezpzeW0gKnNlc3Npb24qLCA6bWV0YSB7OmRvYyAiUHJvdmlkZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlc3Npb24gZnJvbSBpbnNpZGUgYSA6dGhlbiBibG9jay5cbiAgTm9ybWFsbHkgdXNlZCB0byBhbGxvdyBxdWVyeWluZyB0aGUgc2Vzc2lvbiBmcm9tIGluc2lkZSBhIHJ1bGUuIn0sIDpzb3VyY2UgIihkZWYgKnNlc3Npb24qIG5pbClcclxuIn0gezpzeW0gcmV0cmFjdCwgOm1ldGEgezpkb2MgIlJldHJhY3RzIHRoZSBmYWN0IHdpdGggdGhlIGdpdmVuIGlkICsgYXR0ciBjb21iby4iLCA6YXJnbGlzdHMgKFtzZXNzaW9uIGlkIGF0dHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZXRyYWN0XHJcbiBcIlJldHJhY3RzIHRoZSBmYWN0IHdpdGggdGhlIGdpdmVuIGlkICsgYXR0ciBjb21iby5cIlxyXG4gW3Nlc3Npb24gaWQgYXR0cl1cclxuIChsZXRcclxuICBbaWQrYXR0clxyXG4gICBbaWQgYXR0cl1cclxuICAgbm9kZS1wYXRoc1xyXG4gICAoZ2V0LWluIHNlc3Npb24gWzppZC1hdHRyLW5vZGVzIGlkK2F0dHJdKV1cclxuICAod2hlbi1ub3RcclxuICAgbm9kZS1wYXRoc1xyXG4gICAodGhyb3cgKGV4LWluZm8gKHN0ciBpZCthdHRyIFwiIG5vdCBpbiBzZXNzaW9uXCIpIHt9KSkpXHJcbiAgKHJlZHVjZVxyXG4gICAoZm5cclxuICAgIFtzZXNzaW9uIG5vZGUtcGF0aF1cclxuICAgIChsZXRcclxuICAgICBbbm9kZVxyXG4gICAgICAoZ2V0LWluIHNlc3Npb24gbm9kZS1wYXRoKVxyXG4gICAgICBmYWN0XHJcbiAgICAgIChnZXQtaW4gbm9kZSBbOmZhY3RzIGlkIGF0dHJdKV1cclxuICAgICAocmlnaHQtYWN0aXZhdGUtYWxwaGEtbm9kZVxyXG4gICAgICBzZXNzaW9uXHJcbiAgICAgIG5vZGUtcGF0aFxyXG4gICAgICAoLT5Ub2tlbiBmYWN0IDpyZXRyYWN0IG5pbCkpKSlcclxuICAgc2Vzc2lvblxyXG4gICBub2RlLXBhdGhzKSkpXHJcbiJ9IHs6c3ltIHF1ZXJ5LWFsbCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSB2ZWN0b3Igb2YgbWFwcyBjb250YWluaW5nIGFsbCB0aGUgbWF0Y2hlcyBmb3IgdGhlIGdpdmVuIHJ1bGUuIiwgOmFyZ2xpc3RzIChbc2Vzc2lvbiBydWxlLW5hbWVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBxdWVyeS1hbGxcclxuIFwiUmV0dXJucyBhIHZlY3RvciBvZiBtYXBzIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGVzIGZvciB0aGUgZ2l2ZW4gcnVsZS5cIlxyXG4gW3Nlc3Npb24gcnVsZS1uYW1lXVxyXG4gKGxldFxyXG4gIFtydWxlLWlkXHJcbiAgIChvclxyXG4gICAgKGdldC1pbiBzZXNzaW9uIFs6cnVsZS1pZHMgcnVsZS1uYW1lXSlcclxuICAgICh0aHJvdyAoZXgtaW5mbyAoc3RyIHJ1bGUtbmFtZSBcIiBub3QgaW4gc2Vzc2lvblwiKSB7fSkpKVxyXG4gICBydWxlXHJcbiAgIChnZXQtaW4gc2Vzc2lvbiBbOmJldGEtbm9kZXMgcnVsZS1pZF0pXVxyXG4gIChyZWR1Y2Uta3ZcclxuICAgKGZuIFt2IF8gezprZXlzIFt2YXJzIGVuYWJsZWRdfV0gKGlmIGVuYWJsZWQgKGNvbmogdiB2YXJzKSB2KSlcclxuICAgW11cclxuICAgKDptYXRjaGVzIHJ1bGUpKSkpXHJcbiJ9IHs6c3ltIHBhcnNlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgY29udGVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlXHJcbiBbc3BlYyBjb250ZW50XVxyXG4gKGxldFxyXG4gIFtyZXMgKHMvY29uZm9ybSBzcGVjIGNvbnRlbnQpXVxyXG4gIChpZlxyXG4gICAoPSA6Y2xvanVyZS5zcGVjLmFscGhhL2ludmFsaWQgcmVzKVxyXG4gICAodGhyb3cgKGV4LWluZm8gKGV4cG91bmQvZXhwb3VuZC1zdHIgc3BlYyBjb250ZW50KSB7fSkpXHJcbiAgIHJlcykpKVxyXG4ifSksIGNyb3NzLXBhcmluZmVyLmNvcmUgKHs6c3ltIHBhcmVuLW1vZGUsIDptZXRhIHs6ZG9jICJSdW5zIHBhcmVuIG1vZGUgb24gdGhlIGdpdmVuIHRleHQuIiwgOmFyZ2xpc3RzIChbdGV4dCB4IGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJlbi1tb2RlXHJcbiBcIlJ1bnMgcGFyZW4gbW9kZSBvbiB0aGUgZ2l2ZW4gdGV4dC5cIlxyXG4gW3RleHQgeCBsaW5lXVxyXG4gIz8oOmNsaiAobGV0IFtyZXMgKHRyeSAoUGFyaW5mZXIvcGFyZW5Nb2RlIHRleHQgKGludCB4KSAoaW50IGxpbmUpIG5pbCBmYWxzZSkgKGNhdGNoIEV4Y2VwdGlvbiBfIChQYXJpbmZlci9wYXJlbk1vZGUgdGV4dCAoaW50IDApIChpbnQgMCkgbmlsIGZhbHNlKSkpXSB7OnggKC4tY3Vyc29yWCByZXMpLCA6dGV4dCAoLi10ZXh0IHJlcyl9KSA6Y2xqcyAobGV0IFtyZXMgKC5wYXJlbk1vZGUganMvcGFyaW5mZXIgdGV4dCAjanMgezpjdXJzb3JMaW5lIGxpbmUsIDpjdXJzb3JYIHh9KV0gezp4IChhZ2V0IHJlcyBcImN1cnNvclhcIiksIDp0ZXh0IChhZ2V0IHJlcyBcInRleHRcIil9KSkpXHJcbiJ9IHs6c3ltIGFkZC1pbmRlbnQsIDptZXRhIHs6ZG9jICJBZGRzIGluZGVudCB0byB0aGUgc3RhdGUuIiwgOmFyZ2xpc3RzIChbc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhZGQtaW5kZW50XHJcbiBcIkFkZHMgaW5kZW50IHRvIHRoZSBzdGF0ZS5cIlxyXG4gW3N0YXRlXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgW3RleHQgY3Vyc29yLXBvc2l0aW9uIGluZGVudC10eXBlXX1cclxuICAgc3RhdGVcclxuICAgW3N0YXJ0LXBvcyBlbmQtcG9zXVxyXG4gICBjdXJzb3ItcG9zaXRpb25cclxuICAgW3N0YXJ0LWxpbmUgc3RhcnQteF1cclxuICAgKHBvc2l0aW9uLT5yb3ctY29sIHRleHQgc3RhcnQtcG9zKVxyXG4gICBbZW5kLWxpbmUgX11cclxuICAgKHBvc2l0aW9uLT5yb3ctY29sIHRleHQgZW5kLXBvcylcclxuICAgbGluZXNcclxuICAgKHNwbGl0LWxpbmVzIHRleHQpXHJcbiAgIHRhZ3NcclxuICAgKHRzL2NvZGUtPnRhZ3MgdGV4dClcclxuICAgbmV3LWluZGVudC1sZXZlbFxyXG4gICAoY2FzZVxyXG4gICAgaW5kZW50LXR5cGVcclxuICAgIDpyZXR1cm5cclxuICAgICh0cy9pbmRlbnQtZm9yLWxpbmUgdGFncyAoaW5jIHN0YXJ0LWxpbmUpKVxyXG4gICAgOmJhY2tcclxuICAgICh0cy9iYWNrLWluZGVudC1mb3ItbGluZVxyXG4gICAgIHRhZ3NcclxuICAgICAoaW5jIHN0YXJ0LWxpbmUpXHJcbiAgICAgKGluZGVudC1jb3VudCAoZ2V0IGxpbmVzIHN0YXJ0LWxpbmUpKSlcclxuICAgIDpmb3J3YXJkXHJcbiAgICAodHMvZm9yd2FyZC1pbmRlbnQtZm9yLWxpbmVcclxuICAgICB0YWdzXHJcbiAgICAgKGluYyBzdGFydC1saW5lKVxyXG4gICAgIChpbmRlbnQtY291bnQgKGdldCBsaW5lcyBzdGFydC1saW5lKSkpXHJcbiAgICA6bm9ybWFsXHJcbiAgICBzdGFydC14KVxyXG4gICBsaW5lc1xyXG4gICAoaWZcclxuICAgICg9IGluZGVudC10eXBlIDpub3JtYWwpXHJcbiAgICAobG9vcFxyXG4gICAgIFtsaW5lcyBsaW5lcyB0YWdzIHRhZ3MgbGluZS1udW0gKGluYyBzdGFydC1saW5lKV1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtsaW5lIChnZXQgbGluZXMgbGluZS1udW0pXVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbaW5kZW50XHJcbiAgICAgICAgKHRzL2luZGVudC1mb3ItbGluZSB0YWdzIChpbmMgbGluZS1udW0pKVxyXG4gICAgICAgIGN1cnJlbnQtaW5kZW50XHJcbiAgICAgICAgKGluZGVudC1jb3VudCBsaW5lKV1cclxuICAgICAgIChpZlxyXG4gICAgICAgIChhbmQgKD4gaW5kZW50IDApICg+IGluZGVudCBzdGFydC14KSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtsaW5lc1xyXG4gICAgICAgICAgKHVwZGF0ZS1pbmRlbnQgKC0gaW5kZW50IGN1cnJlbnQtaW5kZW50KSBsaW5lcyBsaW5lLW51bSlcclxuICAgICAgICAgIHRleHRcclxuICAgICAgICAgIChzdHIvam9pbiBcXG5ld2xpbmUgbGluZXMpXHJcbiAgICAgICAgICB0YWdzXHJcbiAgICAgICAgICAodHMvY29kZS0+dGFncyB0ZXh0KV1cclxuICAgICAgICAgKHJlY3VyIGxpbmVzIHRhZ3MgKGluYyBsaW5lLW51bSkpKVxyXG4gICAgICAgIGxpbmVzKSlcclxuICAgICAgbGluZXMpKVxyXG4gICAgKGxldFxyXG4gICAgIFtvbGQtaW5kZW50LWxldmVsXHJcbiAgICAgIChpbmRlbnQtY291bnQgKGdldCBsaW5lcyBzdGFydC1saW5lKSlcclxuICAgICAgZGlmZlxyXG4gICAgICAoLSBuZXctaW5kZW50LWxldmVsIG9sZC1pbmRlbnQtbGV2ZWwpXHJcbiAgICAgIGRpZmZcclxuICAgICAgKGlmXHJcbiAgICAgICAobmVnPyBkaWZmKVxyXG4gICAgICAgKC0+PlxyXG4gICAgICAgIChzZXEgKGdldCBsaW5lcyBzdGFydC1saW5lKSlcclxuICAgICAgICAoc3BsaXQtd2l0aCAoZm4qIFtwMV9fNDg5OTAjXSAoPSBwMV9fNDg5OTAjIFxcc3BhY2UpKSlcclxuICAgICAgICBmaXJzdFxyXG4gICAgICAgICh0YWtlICgqIC0xIGRpZmYpKVxyXG4gICAgICAgIGNvdW50XHJcbiAgICAgICAgKCogLTEpKVxyXG4gICAgICAgZGlmZildXHJcbiAgICAgKHJlZHVjZVxyXG4gICAgICAocGFydGlhbCB1cGRhdGUtaW5kZW50IGRpZmYpXHJcbiAgICAgIGxpbmVzXHJcbiAgICAgIChyYW5nZSBzdGFydC1saW5lIChpbmMgZW5kLWxpbmUpKSkpKVxyXG4gICB0ZXh0XHJcbiAgIChzdHIvam9pbiBcXG5ld2xpbmUgbGluZXMpXHJcbiAgIHRleHRcclxuICAgKDp0ZXh0IChpbmRlbnQtbW9kZSB0ZXh0IG5ldy1pbmRlbnQtbGV2ZWwgc3RhcnQtbGluZSB0cnVlKSlcclxuICAgbGluZXNcclxuICAgKHNwbGl0LWxpbmVzIHRleHQpXVxyXG4gIHs6Y3Vyc29yLXBvc2l0aW9uXHJcbiAgIChpZlxyXG4gICAgKD0gc3RhcnQtcG9zIGVuZC1wb3MpXHJcbiAgICAobGV0XHJcbiAgICAgW3BvcyAocm93LWNvbC0+cG9zaXRpb24gdGV4dCBzdGFydC1saW5lIG5ldy1pbmRlbnQtbGV2ZWwpXVxyXG4gICAgIFtwb3MgcG9zXSlcclxuICAgIFsocm93LWNvbC0+cG9zaXRpb24gdGV4dCBzdGFydC1saW5lIDApXHJcbiAgICAgKHJvdy1jb2wtPnBvc2l0aW9uIHRleHQgZW5kLWxpbmUgKGNvdW50IChnZXQgbGluZXMgZW5kLWxpbmUpKSldKSxcclxuICAgOnRleHQgdGV4dH0pKVxyXG4ifSB7OnN5bSBpbmRlbnQtY291bnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbbGluZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGVudC1jb3VudFxyXG4gW2xpbmVdXHJcbiAoLT4+XHJcbiAgbGluZVxyXG4gIHNlcVxyXG4gICh0YWtlLXdoaWxlIChmbiogW3AxX180ODk4OCNdICg9IHAxX180ODk4OCMgXFxzcGFjZSkpKVxyXG4gIGNvdW50KSlcclxuIn0gezpzeW0gcm93LWNvbC0+cG9zaXRpb24sIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBhIHJvdyBhbmQgY29sdW1uIG51bWJlciB0byBhIHBvc2l0aW9uLiIsIDphcmdsaXN0cyAoW3RleHQgcm93IGNvbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJvdy1jb2wtPnBvc2l0aW9uXHJcbiBcIkNvbnZlcnRzIGEgcm93IGFuZCBjb2x1bW4gbnVtYmVyIHRvIGEgcG9zaXRpb24uXCJcclxuIFt0ZXh0IHJvdyBjb2xdXHJcbiAobGV0XHJcbiAgW2FsbC1saW5lc1xyXG4gICAodmVjIChzcGxpdC1saW5lcyB0ZXh0KSlcclxuICAgbGluZXNcclxuICAgKHZlYyAodGFrZSByb3cgYWxsLWxpbmVzKSlcclxuICAgbGFzdC1saW5lXHJcbiAgIChnZXQgYWxsLWxpbmVzIHJvdylcclxuICAgbGluZXNcclxuICAgKGlmXHJcbiAgICAoYW5kIGxhc3QtbGluZSAoPj0gKGNvdW50IGxhc3QtbGluZSkgY29sKSlcclxuICAgIChjb25qIGxpbmVzIChzdWJzIGxhc3QtbGluZSAwIGNvbCkpXHJcbiAgICBsaW5lcylcclxuICAgdGV4dFxyXG4gICAoc3RyL2pvaW4gXCJcXG5cIiBsaW5lcyldXHJcbiAgKGNvdW50IHRleHQpKSlcclxuIn0gezpzeW0gcG9zaXRpb24tPnJvdy1jb2wsIDptZXRhIHs6ZG9jICJDb252ZXJ0cyBhIHBvc2l0aW9uIHRvIGEgcm93IGFuZCBjb2x1bW4gbnVtYmVyLiIsIDphcmdsaXN0cyAoW3RleHQgcG9zaXRpb25dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3NpdGlvbi0+cm93LWNvbFxyXG4gXCJDb252ZXJ0cyBhIHBvc2l0aW9uIHRvIGEgcm93IGFuZCBjb2x1bW4gbnVtYmVyLlwiXHJcbiBbdGV4dCBwb3NpdGlvbl1cclxuIChsZXRcclxuICBbdGV4dFxyXG4gICAoc3VicyB0ZXh0IDAgcG9zaXRpb24pXHJcbiAgIGxhc3QtbmV3bGluZVxyXG4gICAoLmxhc3RJbmRleE9mIHRleHQgXCJcXG5cIilcclxuICAgcm93XHJcbiAgIChjb3VudCAocmUtc2VxICNcIlxcblwiIHRleHQpKVxyXG4gICBjb2xcclxuICAgKGlmICg+PSBsYXN0LW5ld2xpbmUgMCkgKC0gcG9zaXRpb24gbGFzdC1uZXdsaW5lIDEpIHBvc2l0aW9uKV1cclxuICBbcm93IGNvbF0pKVxyXG4ifSB7OnN5bSBzcGxpdC1saW5lcywgOm1ldGEgezpkb2MgIlNwbGl0cyB0aGUgc3RyaW5nIGludG8gbGluZXMuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwbGl0LWxpbmVzXHJcbiBcIlNwbGl0cyB0aGUgc3RyaW5nIGludG8gbGluZXMuXCJcclxuIFtzXVxyXG4gKHZlYyAoLnNwbGl0IHMgXCJcXG5cIiAtMSkpKVxyXG4ifSB7OnN5bSB1cGRhdGUtaW5kZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2RpZmYgbGluZXMgbGluZS1udW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cGRhdGUtaW5kZW50XHJcbiBbZGlmZiBsaW5lcyBsaW5lLW51bV1cclxuICh1cGRhdGVcclxuICBsaW5lc1xyXG4gIGxpbmUtbnVtXHJcbiAgKGZuXHJcbiAgIFtsaW5lXVxyXG4gICAobGV0XHJcbiAgICBbW3NwYWNlcyBjb2RlXVxyXG4gICAgIChzcGxpdC13aXRoIChmbiogW3AxX180ODk4OSNdICg9IHAxX180ODk4OSMgXFxzcGFjZSkpIChzZXEgbGluZSkpXHJcbiAgICAgc3BhY2VzXHJcbiAgICAgKGlmXHJcbiAgICAgIChwb3M/IGRpZmYpXHJcbiAgICAgIChjb25jYXQgc3BhY2VzIChyZXBlYXQgZGlmZiBcXHNwYWNlKSlcclxuICAgICAgKGRyb3AgKCogLTEgZGlmZikgc3BhY2VzKSldXHJcbiAgICAoc3RyIChzdHIvam9pbiBzcGFjZXMpIChzdHIvam9pbiBjb2RlKSkpKSkpXHJcbiJ9IHs6c3ltIG1vZGUsIDptZXRhIHs6ZG9jICJSdW5zIHRoZSBzcGVjaWZpZWQgbW9kZSwgd2hpY2ggY2FuIGJlIDpwYXJlbiwgOmluZGVudCwgb3IgOmJvdGguIiwgOmFyZ2xpc3RzIChbbW9kZS10eXBlIHRleHQgeCBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gbW9kZVxyXG4gXCJSdW5zIHRoZSBzcGVjaWZpZWQgbW9kZSwgd2hpY2ggY2FuIGJlIDpwYXJlbiwgOmluZGVudCwgb3IgOmJvdGguXCJcclxuIFttb2RlLXR5cGUgdGV4dCB4IGxpbmVdXHJcbiAoY2FzZVxyXG4gIG1vZGUtdHlwZVxyXG4gIDpwYXJlblxyXG4gIChwYXJlbi1tb2RlIHRleHQgeCBsaW5lKVxyXG4gIDppbmRlbnRcclxuICAoaW5kZW50LW1vZGUgdGV4dCB4IGxpbmUpXHJcbiAgOmJvdGhcclxuICAoLT4gdGV4dCAocGFyZW4tbW9kZSB4IGxpbmUpIDp0ZXh0IChpbmRlbnQtbW9kZSB4IGxpbmUpKSkpXHJcbiJ9IHs6c3ltIGluZGVudC1tb2RlLCA6bWV0YSB7OmRvYyAiUnVucyBpbmRlbnQgbW9kZSBvbiB0aGUgZ2l2ZW4gdGV4dC4iLCA6YXJnbGlzdHMgW1t0ZXh0IHggbGluZV0gW3RleHQgeCBsaW5lIHByZXZpZXctY3Vyc29yLXNjb3BlP11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGVudC1tb2RlXHJcbiBcIlJ1bnMgaW5kZW50IG1vZGUgb24gdGhlIGdpdmVuIHRleHQuXCJcclxuIChbdGV4dCB4IGxpbmVdIChpbmRlbnQtbW9kZSB0ZXh0IHggbGluZSBmYWxzZSkpXHJcbiAoW3RleHQgeCBsaW5lIHByZXZpZXctY3Vyc29yLXNjb3BlP11cclxuICAjPyg6Y2xqIChsZXQgW3JlcyAodHJ5IChQYXJpbmZlci9pbmRlbnRNb2RlIHRleHQgKGludCB4KSAoaW50IGxpbmUpIG5pbCBwcmV2aWV3LWN1cnNvci1zY29wZT8pIChjYXRjaCBFeGNlcHRpb24gXyAoUGFyaW5mZXIvaW5kZW50TW9kZSB0ZXh0IChpbnQgMCkgKGludCAwKSBuaWwgcHJldmlldy1jdXJzb3Itc2NvcGU/KSkpXSB7OnggKC4tY3Vyc29yWCByZXMpLCA6dGV4dCAoLi10ZXh0IHJlcyl9KSA6Y2xqcyAobGV0IFtyZXMgKC5pbmRlbnRNb2RlIGpzL3BhcmluZmVyIHRleHQgI2pzIHs6Y3Vyc29yTGluZSBsaW5lLCA6Y3Vyc29yWCB4LCA6cHJldmlld0N1cnNvclNjb3BlIHByZXZpZXctY3Vyc29yLXNjb3BlP30pXSB7OnggKGFnZXQgcmVzIFwiY3Vyc29yWFwiKSwgOnRleHQgKGFnZXQgcmVzIFwidGV4dFwiKX0pKSkpXHJcbiJ9IHs6c3ltIGFkZC1wYXJpbmZlciwgOm1ldGEgezpkb2MgIkFkZHMgcGFyaW5mZXIgdG8gdGhlIHN0YXRlLiIsIDphcmdsaXN0cyAoW21vZGUtdHlwZSBzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkZC1wYXJpbmZlclxyXG4gXCJBZGRzIHBhcmluZmVyIHRvIHRoZSBzdGF0ZS5cIlxyXG4gW21vZGUtdHlwZSBzdGF0ZV1cclxuIChsZXRcclxuICBbezprZXlzIFtjdXJzb3ItcG9zaXRpb24gdGV4dF19XHJcbiAgIHN0YXRlXHJcbiAgIFtzdGFydC1wb3MgZW5kLXBvc11cclxuICAgY3Vyc29yLXBvc2l0aW9uXHJcbiAgIFtyb3cgY29sXVxyXG4gICAocG9zaXRpb24tPnJvdy1jb2wgdGV4dCBzdGFydC1wb3MpXHJcbiAgIHJlc3VsdFxyXG4gICAobW9kZSBtb2RlLXR5cGUgdGV4dCBjb2wgcm93KV1cclxuICAoaWZcclxuICAgKG5vdD0gc3RhcnQtcG9zIGVuZC1wb3MpXHJcbiAgIChhc3NvYyBzdGF0ZSA6dGV4dCAoOnRleHQgcmVzdWx0KSlcclxuICAgKGxldFxyXG4gICAgW3BvcyAocm93LWNvbC0+cG9zaXRpb24gKDp0ZXh0IHJlc3VsdCkgcm93ICg6eCByZXN1bHQpKV1cclxuICAgIChhc3NvYyBzdGF0ZSA6dGV4dCAoOnRleHQgcmVzdWx0KSA6Y3Vyc29yLXBvc2l0aW9uIFtwb3MgcG9zXSkpKSkpXHJcbiJ9KSwgY2xqcy5jb3JlLmFzeW5jLmltcGwuaW9jLWhlbHBlcnMgKHs6c3ltIEVYQ0VQVElPTi1GUkFNRVMsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEVYQ0VQVElPTi1GUkFNRVMgNClcclxuIn0gezpzeW0gcHJvY2Vzcy1leGNlcHRpb24sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcm9jZXNzLWV4Y2VwdGlvblxyXG4gW3N0YXRlXVxyXG4gKGxldFxyXG4gIFtleGNlcHRpb24tZnJhbWVcclxuICAgKGFnZXQtb2JqZWN0IHN0YXRlIEVYQ0VQVElPTi1GUkFNRVMpXHJcbiAgIGNhdGNoLWJsb2NrXHJcbiAgICg6Y2F0Y2gtYmxvY2sgZXhjZXB0aW9uLWZyYW1lKVxyXG4gICBjYXRjaC1leGNlcHRpb25cclxuICAgKDpjYXRjaC1leGNlcHRpb24gZXhjZXB0aW9uLWZyYW1lKVxyXG4gICBleGNlcHRpb25cclxuICAgKGFnZXQtb2JqZWN0IHN0YXRlIENVUlJFTlQtRVhDRVBUSU9OKV1cclxuICAoY29uZFxyXG4gICAoYW5kIGV4Y2VwdGlvbiAobm90IGV4Y2VwdGlvbi1mcmFtZSkpXHJcbiAgICh0aHJvdyBleGNlcHRpb24pXHJcbiAgIChhbmRcclxuICAgIGV4Y2VwdGlvblxyXG4gICAgY2F0Y2gtYmxvY2tcclxuICAgIChvclxyXG4gICAgICg9IDpkZWZhdWx0IGNhdGNoLWV4Y2VwdGlvbilcclxuICAgICAoaW5zdGFuY2U/IGNhdGNoLWV4Y2VwdGlvbiBleGNlcHRpb24pKSlcclxuICAgKGlvYy9hc2V0LWFsbCFcclxuICAgIHN0YXRlXHJcbiAgICBTVEFURS1JRFhcclxuICAgIGNhdGNoLWJsb2NrXHJcbiAgICBWQUxVRS1JRFhcclxuICAgIGV4Y2VwdGlvblxyXG4gICAgQ1VSUkVOVC1FWENFUFRJT05cclxuICAgIG5pbFxyXG4gICAgRVhDRVBUSU9OLUZSQU1FU1xyXG4gICAgKGFzc29jIGV4Y2VwdGlvbi1mcmFtZSA6Y2F0Y2gtYmxvY2sgbmlsIDpjYXRjaC1leGNlcHRpb24gbmlsKSlcclxuICAgKGFuZFxyXG4gICAgZXhjZXB0aW9uXHJcbiAgICAobm90IGNhdGNoLWJsb2NrKVxyXG4gICAgKG5vdCAoOmZpbmFsbHktYmxvY2sgZXhjZXB0aW9uLWZyYW1lKSkpXHJcbiAgIChkb1xyXG4gICAgKGlvYy9hc2V0LWFsbCEgc3RhdGUgRVhDRVBUSU9OLUZSQU1FUyAoOnByZXYgZXhjZXB0aW9uLWZyYW1lKSlcclxuICAgIChyZWN1ciBzdGF0ZSkpXHJcbiAgIChhbmQgZXhjZXB0aW9uIChub3QgY2F0Y2gtYmxvY2spICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpKVxyXG4gICAoaW9jL2FzZXQtYWxsIVxyXG4gICAgc3RhdGVcclxuICAgIFNUQVRFLUlEWFxyXG4gICAgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSlcclxuICAgIEVYQ0VQVElPTi1GUkFNRVNcclxuICAgIChhc3NvYyBleGNlcHRpb24tZnJhbWUgOmZpbmFsbHktYmxvY2sgbmlsKSlcclxuICAgKGFuZCAobm90IGV4Y2VwdGlvbikgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSkpXHJcbiAgIChkb1xyXG4gICAgKGlvYy9hc2V0LWFsbCFcclxuICAgICBzdGF0ZVxyXG4gICAgIFNUQVRFLUlEWFxyXG4gICAgICg6ZmluYWxseS1ibG9jayBleGNlcHRpb24tZnJhbWUpXHJcbiAgICAgRVhDRVBUSU9OLUZSQU1FU1xyXG4gICAgIChhc3NvYyBleGNlcHRpb24tZnJhbWUgOmZpbmFsbHktYmxvY2sgbmlsKSkpXHJcbiAgIChhbmQgKG5vdCBleGNlcHRpb24pIChub3QgKDpmaW5hbGx5LWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSkpKVxyXG4gICAoZG9cclxuICAgIChpb2MvYXNldC1hbGwhXHJcbiAgICAgc3RhdGVcclxuICAgICBTVEFURS1JRFhcclxuICAgICAoOmNvbnRpbnVlLWJsb2NrIGV4Y2VwdGlvbi1mcmFtZSlcclxuICAgICBFWENFUFRJT04tRlJBTUVTXHJcbiAgICAgKDpwcmV2IGV4Y2VwdGlvbi1mcmFtZSkpKVxyXG4gICA6ZWxzZVxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiBcIk5vIG1hdGNoaW5nIGNsYXVzZVwiKSkpKSlcclxuIn0gezpzeW0gU1RBVEUtSURYLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBTVEFURS1JRFggMSlcclxuIn0gezpzeW0gYXNldC1vYmplY3QsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbYXJyIGlkeCBvXSl9LCA6c291cmNlICIoZGVmbiBhc2V0LW9iamVjdCBbYXJyIGlkeCBvXSAoYWdldCBhcnIgaWR4IG8pKVxyXG4ifSB7OnN5bSBhZGQtZXhjZXB0aW9uLWZyYW1lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIGNhdGNoLWJsb2NrIGNhdGNoLWV4Y2VwdGlvbiBmaW5hbGx5LWJsb2NrIGNvbnRpbnVlLWJsb2NrXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWRkLWV4Y2VwdGlvbi1mcmFtZVxyXG4gW3N0YXRlIGNhdGNoLWJsb2NrIGNhdGNoLWV4Y2VwdGlvbiBmaW5hbGx5LWJsb2NrIGNvbnRpbnVlLWJsb2NrXVxyXG4gKGlvYy9hc2V0LWFsbCFcclxuICBzdGF0ZVxyXG4gIEVYQ0VQVElPTi1GUkFNRVNcclxuICAoLT5FeGNlcHRpb25GcmFtZVxyXG4gICBjYXRjaC1ibG9ja1xyXG4gICBjYXRjaC1leGNlcHRpb25cclxuICAgZmluYWxseS1ibG9ja1xyXG4gICBjb250aW51ZS1ibG9ja1xyXG4gICAoYWdldC1vYmplY3Qgc3RhdGUgRVhDRVBUSU9OLUZSQU1FUykpKSlcclxuIn0gezpzeW0gcnVuLXN0YXRlLW1hY2hpbmUtd3JhcHBlZCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzdGF0ZV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJ1bi1zdGF0ZS1tYWNoaW5lLXdyYXBwZWRcclxuIFtzdGF0ZV1cclxuICh0cnlcclxuICAocnVuLXN0YXRlLW1hY2hpbmUgc3RhdGUpXHJcbiAgKGNhdGNoXHJcbiAgIGpzL09iamVjdFxyXG4gICBleFxyXG4gICAoaW1wbC9jbG9zZSEgKGFnZXQtb2JqZWN0IHN0YXRlIFVTRVItU1RBUlQtSURYKSlcclxuICAgKHRocm93IGV4KSkpKVxyXG4ifSB7OnN5bSBGTi1JRFgsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIEZOLUlEWCAwKVxyXG4ifSB7OnN5bSBhZ2V0LW9iamVjdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFthcnIgaWR4XSl9LCA6c291cmNlICIoZGVmbiBhZ2V0LW9iamVjdCBbYXJyIGlkeF0gKGFnZXQgYXJyIGlkeCkpXHJcbiJ9IHs6c3ltIHJldHVybi1jaGFuLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIHZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmV0dXJuLWNoYW5cclxuIFtzdGF0ZSB2YWx1ZV1cclxuIChsZXRcclxuICBbYyAoYWdldCBzdGF0ZSBVU0VSLVNUQVJULUlEWCldXHJcbiAgKHdoZW4tbm90IChuaWw/IHZhbHVlKSAoaW1wbC9wdXQhIGMgdmFsdWUgKGZuLWhhbmRsZXIgKGZuIFtdIG5pbCkpKSlcclxuICAoaW1wbC9jbG9zZSEgYylcclxuICBjKSlcclxuIn0gezpzeW0gQklORElOR1MtSURYLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBCSU5ESU5HUy1JRFggMylcclxuIn0gezpzeW0gQ1VSUkVOVC1FWENFUFRJT04sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIENVUlJFTlQtRVhDRVBUSU9OIDUpXHJcbiJ9IHs6c3ltIHJ1bi1zdGF0ZS1tYWNoaW5lLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlXSl9LCA6c291cmNlICIoZGVmbiBydW4tc3RhdGUtbWFjaGluZSBbc3RhdGVdICgoYWdldC1vYmplY3Qgc3RhdGUgRk4tSURYKSBzdGF0ZSkpXHJcbiJ9IHs6c3ltIGZpbmlzaGVkPywgOm1ldGEgezpkb2MgIlJldHVybnMgdHJ1ZSBpZiB0aGUgbWFjaGluZSBpcyBpbiBhIGZpbmlzaGVkIHN0YXRlIiwgOmFyZ2xpc3RzIChbc3RhdGUtYXJyYXldKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaW5pc2hlZD9cclxuIFwiUmV0dXJucyB0cnVlIGlmIHRoZSBtYWNoaW5lIGlzIGluIGEgZmluaXNoZWQgc3RhdGVcIlxyXG4gW3N0YXRlLWFycmF5XVxyXG4gKGtleXdvcmQtaWRlbnRpY2FsPyAoYWdldCBzdGF0ZS1hcnJheSBTVEFURS1JRFgpIDpmaW5pc2hlZCkpXHJcbiJ9IHs6c3ltIFVTRVItU1RBUlQtSURYLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBVU0VSLVNUQVJULUlEWCA2KVxyXG4ifSB7OnN5bSBwdXQhLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3N0YXRlIGJsayBjIHZhbF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHB1dCFcclxuIFtzdGF0ZSBibGsgYyB2YWxdXHJcbiAoaWYtbGV0XHJcbiAgW2NiXHJcbiAgIChpbXBsL3B1dCFcclxuICAgIGNcclxuICAgIHZhbFxyXG4gICAgKGZuLWhhbmRsZXJcclxuICAgICAoZm5cclxuICAgICAgW3JldC12YWxdXHJcbiAgICAgIChpb2MvYXNldC1hbGwhIHN0YXRlIFZBTFVFLUlEWCByZXQtdmFsIFNUQVRFLUlEWCBibGspXHJcbiAgICAgIChydW4tc3RhdGUtbWFjaGluZS13cmFwcGVkIHN0YXRlKSkpKV1cclxuICAoZG8gKGlvYy9hc2V0LWFsbCEgc3RhdGUgVkFMVUUtSURYIEBjYiBTVEFURS1JRFggYmxrKSA6cmVjdXIpXHJcbiAgbmlsKSlcclxuIn0gezpzeW0gdGFrZSEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3RhdGUgYmxrIGNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWtlIVxyXG4gW3N0YXRlIGJsayBjXVxyXG4gKGlmLWxldFxyXG4gIFtjYlxyXG4gICAoaW1wbC90YWtlIVxyXG4gICAgY1xyXG4gICAgKGZuLWhhbmRsZXJcclxuICAgICAoZm5cclxuICAgICAgW3hdXHJcbiAgICAgIChpb2MvYXNldC1hbGwhIHN0YXRlIFZBTFVFLUlEWCB4IFNUQVRFLUlEWCBibGspXHJcbiAgICAgIChydW4tc3RhdGUtbWFjaGluZS13cmFwcGVkIHN0YXRlKSkpKV1cclxuICAoZG8gKGlvYy9hc2V0LWFsbCEgc3RhdGUgVkFMVUUtSURYIEBjYiBTVEFURS1JRFggYmxrKSA6cmVjdXIpXHJcbiAgbmlsKSlcclxuIn0gezpzeW0gVkFMVUUtSURYLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBWQUxVRS1JRFggMilcclxuIn0pLCBkeW5hZG9jLmFsaWFzZXMgKHs6c3ltIGNoYW4sIDptZXRhIHt9LCA6c291cmNlICIoZGVmIGNoYW4gYXN5bmMvcHJvbWlzZS1jaGFuKVxyXG4ifSB7OnN5bSBwdXQhLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBwdXQhIGFzeW5jL3B1dCEpXHJcbiJ9IHs6c3ltIDwhISwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgPCEhICM/KDpjbGogYXN5bmMvPCEhIDpjbGpzIGlkZW50aXR5KSlcclxuIn0pLCBjbG9qdXJlLnN0cmluZyAoezpzeW0gZW5kcy13aXRoPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcyBlbmRzIHdpdGggc3Vic3RyLiIsIDphcmdsaXN0cyAoW3Mgc3Vic3RyXSl9LCA6c291cmNlICIoZGVmblxyXG4gZW5kcy13aXRoP1xyXG4gXCJUcnVlIGlmIHMgZW5kcyB3aXRoIHN1YnN0ci5cIlxyXG4gW3Mgc3Vic3RyXVxyXG4gKGdzdHJpbmcvZW5kc1dpdGggcyBzdWJzdHIpKVxyXG4ifSB7OnN5bSBjYXBpdGFsaXplLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgdG8gdXBwZXItY2FzZSwgYWxsIG90aGVyXG4gIGNoYXJhY3RlcnMgdG8gbG93ZXItY2FzZS4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2FwaXRhbGl6ZVxyXG4gXCJDb252ZXJ0cyBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZyB0byB1cHBlci1jYXNlLCBhbGwgb3RoZXJcXG4gIGNoYXJhY3RlcnMgdG8gbG93ZXItY2FzZS5cIlxyXG4gW3NdXHJcbiAoZ3N0cmluZy9jYXBpdGFsaXplIHMpKVxyXG4ifSB7OnN5bSByZXZlcnNlLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBzIHdpdGggaXRzIGNoYXJhY3RlcnMgcmV2ZXJzZWQuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJldmVyc2VcclxuIFwiUmV0dXJucyBzIHdpdGggaXRzIGNoYXJhY3RlcnMgcmV2ZXJzZWQuXCJcclxuIFtzXVxyXG4gKC0+XHJcbiAgKC5yZXBsYWNlIHMgcmUtc3Vycm9nYXRlLXBhaXIgXCIkMiQxXCIpXHJcbiAgKC4uIChzcGxpdCBcIlwiKSAocmV2ZXJzZSkgKGpvaW4gXCJcIikpKSlcclxuIn0gezpzeW0gam9pbiwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBzdHJpbmcgb2YgYWxsIGVsZW1lbnRzIGluIGNvbGwsIGFzIHJldHVybmVkIGJ5IChzZXEgY29sbCksXG4gIHNlcGFyYXRlZCBieSBhbiBvcHRpb25hbCBzZXBhcmF0b3IuIiwgOmFyZ2xpc3RzIFtbY29sbF0gW3NlcGFyYXRvciBjb2xsXV19LCA6c291cmNlICIoZGVmblxyXG4gam9pblxyXG4gXCJSZXR1cm5zIGEgc3RyaW5nIG9mIGFsbCBlbGVtZW50cyBpbiBjb2xsLCBhcyByZXR1cm5lZCBieSAoc2VxIGNvbGwpLFxcbiAgc2VwYXJhdGVkIGJ5IGFuIG9wdGlvbmFsIHNlcGFyYXRvci5cIlxyXG4gKFtjb2xsXVxyXG4gIChsb29wXHJcbiAgIFtzYiAoU3RyaW5nQnVmZmVyLikgY29sbCAoc2VxIGNvbGwpXVxyXG4gICAoaWYtbm90XHJcbiAgICAobmlsPyBjb2xsKVxyXG4gICAgKHJlY3VyICguIHNiIChhcHBlbmQgKHN0ciAoZmlyc3QgY29sbCkpKSkgKG5leHQgY29sbCkpXHJcbiAgICAoLnRvU3RyaW5nIHNiKSkpKVxyXG4gKFtzZXBhcmF0b3IgY29sbF1cclxuICAobG9vcFxyXG4gICBbc2IgKFN0cmluZ0J1ZmZlci4pIGNvbGwgKHNlcSBjb2xsKV1cclxuICAgKGlmLW5vdFxyXG4gICAgKG5pbD8gY29sbClcclxuICAgIChkb1xyXG4gICAgICguIHNiIChhcHBlbmQgKHN0ciAoZmlyc3QgY29sbCkpKSlcclxuICAgICAobGV0XHJcbiAgICAgIFtjb2xsIChuZXh0IGNvbGwpXVxyXG4gICAgICAod2hlbi1ub3QgKG5pbD8gY29sbCkgKC4gc2IgKGFwcGVuZCBzZXBhcmF0b3IpKSlcclxuICAgICAgKHJlY3VyIHNiIGNvbGwpKSlcclxuICAgICgudG9TdHJpbmcgc2IpKSkpKVxyXG4ifSB7OnN5bSByZXBsYWNlLWZpcnN0LCA6bWV0YSB7OmRvYyAiUmVwbGFjZXMgdGhlIGZpcnN0IGluc3RhbmNlIG9mIG1hdGNoIHdpdGggcmVwbGFjZW1lbnQgaW4gcy5cblxuICAgbWF0Y2gvcmVwbGFjZW1lbnQgY2FuIGJlOlxuXG4gICBzdHJpbmcgLyBzdHJpbmdcbiAgIHBhdHRlcm4gLyAoc3RyaW5nIG9yIGZ1bmN0aW9uIG9mIG1hdGNoKS5cblxuICAgU2VlIGFsc28gcmVwbGFjZS5cblxuICAgVGhlIHJlcGxhY2VtZW50IGlzIGxpdGVyYWwgKGkuZS4gbm9uZSBvZiBpdHMgY2hhcmFjdGVycyBhcmUgdHJlYXRlZFxuICAgc3BlY2lhbGx5KSBmb3IgYWxsIGNhc2VzIGFib3ZlIGV4Y2VwdCBwYXR0ZXJuIC8gc3RyaW5nLlxuXG4gICBGb3IgcGF0dGVybiAvIHN0cmluZywgJDEsICQyLCBldGMuIGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXJlXG4gICBzdWJzdGl0dXRlZCB3aXRoIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nXG4gICBwYXJlbnRoZXNpemVkIGdyb3VwIGluIHRoZSBwYXR0ZXJuLlxuXG4gICBFeGFtcGxlOlxuICAgKGNsb2p1cmUuc3RyaW5nL3JlcGxhY2UtZmlyc3QgXCJzd2FwIGZpcnN0IHR3byB3b3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCIoXFx3KykoXFxzKykoXFx3KylcIiBcIiQzJDIkMVwiKVxuICAgLT4gXCJmaXJzdCBzd2FwIHR3byB3b3Jkc1wiIiwgOmFyZ2xpc3RzIChbcyBtYXRjaCByZXBsYWNlbWVudF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcGxhY2UtZmlyc3RcclxuIFwiUmVwbGFjZXMgdGhlIGZpcnN0IGluc3RhbmNlIG9mIG1hdGNoIHdpdGggcmVwbGFjZW1lbnQgaW4gcy5cXG5cXG4gICBtYXRjaC9yZXBsYWNlbWVudCBjYW4gYmU6XFxuXFxuICAgc3RyaW5nIC8gc3RyaW5nXFxuICAgcGF0dGVybiAvIChzdHJpbmcgb3IgZnVuY3Rpb24gb2YgbWF0Y2gpLlxcblxcbiAgIFNlZSBhbHNvIHJlcGxhY2UuXFxuXFxuICAgVGhlIHJlcGxhY2VtZW50IGlzIGxpdGVyYWwgKGkuZS4gbm9uZSBvZiBpdHMgY2hhcmFjdGVycyBhcmUgdHJlYXRlZFxcbiAgIHNwZWNpYWxseSkgZm9yIGFsbCBjYXNlcyBhYm92ZSBleGNlcHQgcGF0dGVybiAvIHN0cmluZy5cXG5cXG4gICBGb3IgcGF0dGVybiAvIHN0cmluZywgJDEsICQyLCBldGMuIGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXJlXFxuICAgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZ1xcbiAgIHBhcmVudGhlc2l6ZWQgZ3JvdXAgaW4gdGhlIHBhdHRlcm4uXFxuXFxuICAgRXhhbXBsZTpcXG4gICAoY2xvanVyZS5zdHJpbmcvcmVwbGFjZS1maXJzdCBcXFwic3dhcCBmaXJzdCB0d28gd29yZHNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1xcXCIoXFxcXHcrKShcXFxccyspKFxcXFx3KylcXFwiIFxcXCIkMyQyJDFcXFwiKVxcbiAgIC0+IFxcXCJmaXJzdCBzd2FwIHR3byB3b3Jkc1xcXCJcIlxyXG4gW3MgbWF0Y2ggcmVwbGFjZW1lbnRdXHJcbiAoLnJlcGxhY2UgcyBtYXRjaCByZXBsYWNlbWVudCkpXHJcbiJ9IHs6c3ltIHN0YXJ0cy13aXRoPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcyBzdGFydHMgd2l0aCBzdWJzdHIuIiwgOmFyZ2xpc3RzIChbcyBzdWJzdHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdGFydHMtd2l0aD9cclxuIFwiVHJ1ZSBpZiBzIHN0YXJ0cyB3aXRoIHN1YnN0ci5cIlxyXG4gW3Mgc3Vic3RyXVxyXG4gKGdzdHJpbmcvc3RhcnRzV2l0aCBzIHN1YnN0cikpXHJcbiJ9IHs6c3ltIGVzY2FwZSwgOm1ldGEgezpkb2MgIlJldHVybiBhIG5ldyBzdHJpbmcsIHVzaW5nIGNtYXAgdG8gZXNjYXBlIGVhY2ggY2hhcmFjdGVyIGNoXG4gICBmcm9tIHMgYXMgZm9sbG93czpcblxuICAgSWYgKGNtYXAgY2gpIGlzIG5pbCwgYXBwZW5kIGNoIHRvIHRoZSBuZXcgc3RyaW5nLlxuICAgSWYgKGNtYXAgY2gpIGlzIG5vbi1uaWwsIGFwcGVuZCAoc3RyIChjbWFwIGNoKSkgaW5zdGVhZC4iLCA6YXJnbGlzdHMgKFtzIGNtYXBdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBlc2NhcGVcclxuIFwiUmV0dXJuIGEgbmV3IHN0cmluZywgdXNpbmcgY21hcCB0byBlc2NhcGUgZWFjaCBjaGFyYWN0ZXIgY2hcXG4gICBmcm9tIHMgYXMgZm9sbG93czpcXG5cXG4gICBJZiAoY21hcCBjaCkgaXMgbmlsLCBhcHBlbmQgY2ggdG8gdGhlIG5ldyBzdHJpbmcuXFxuICAgSWYgKGNtYXAgY2gpIGlzIG5vbi1uaWwsIGFwcGVuZCAoc3RyIChjbWFwIGNoKSkgaW5zdGVhZC5cIlxyXG4gW3MgY21hcF1cclxuIChsZXRcclxuICBbYnVmZmVyIChTdHJpbmdCdWZmZXIuKSBsZW5ndGggKC4tbGVuZ3RoIHMpXVxyXG4gIChsb29wXHJcbiAgIFtpbmRleCAwXVxyXG4gICAoaWZcclxuICAgICg9PSBsZW5ndGggaW5kZXgpXHJcbiAgICAoLiBidWZmZXIgKHRvU3RyaW5nKSlcclxuICAgIChsZXRcclxuICAgICBbY2ggKC5jaGFyQXQgcyBpbmRleCkgcmVwbGFjZW1lbnQgKGdldCBjbWFwIGNoKV1cclxuICAgICAoaWYtbm90XHJcbiAgICAgIChuaWw/IHJlcGxhY2VtZW50KVxyXG4gICAgICAoLmFwcGVuZCBidWZmZXIgKHN0ciByZXBsYWNlbWVudCkpXHJcbiAgICAgICguYXBwZW5kIGJ1ZmZlciBjaCkpXHJcbiAgICAgKHJlY3VyIChpbmMgaW5kZXgpKSkpKSkpXHJcbiJ9IHs6c3ltIGxhc3QtaW5kZXgtb2YsIDptZXRhIHs6ZG9jICJSZXR1cm4gbGFzdCBpbmRleCBvZiB2YWx1ZSAoc3RyaW5nIG9yIGNoYXIpIGluIHMsIG9wdGlvbmFsbHlcbiAgc2VhcmNoaW5nIGJhY2t3YXJkIGZyb20gZnJvbS1pbmRleCBvciBuaWwgaWYgbm90IGZvdW5kLiIsIDphcmdsaXN0cyBbW3MgdmFsdWVdIFtzIHZhbHVlIGZyb20taW5kZXhdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsYXN0LWluZGV4LW9mXHJcbiBcIlJldHVybiBsYXN0IGluZGV4IG9mIHZhbHVlIChzdHJpbmcgb3IgY2hhcikgaW4gcywgb3B0aW9uYWxseVxcbiAgc2VhcmNoaW5nIGJhY2t3YXJkIGZyb20gZnJvbS1pbmRleCBvciBuaWwgaWYgbm90IGZvdW5kLlwiXHJcbiAoW3MgdmFsdWVdXHJcbiAgKGxldCBbcmVzdWx0ICgubGFzdEluZGV4T2YgcyB2YWx1ZSldIChpZiAobmVnPyByZXN1bHQpIG5pbCByZXN1bHQpKSlcclxuIChbcyB2YWx1ZSBmcm9tLWluZGV4XVxyXG4gIChsZXRcclxuICAgW3Jlc3VsdCAoLmxhc3RJbmRleE9mIHMgdmFsdWUgZnJvbS1pbmRleCldXHJcbiAgIChpZiAobmVnPyByZXN1bHQpIG5pbCByZXN1bHQpKSkpXHJcbiJ9IHs6c3ltIGluY2x1ZGVzPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcyBpbmNsdWRlcyBzdWJzdHIuIiwgOmFyZ2xpc3RzIChbcyBzdWJzdHJdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbmNsdWRlcz9cclxuIFwiVHJ1ZSBpZiBzIGluY2x1ZGVzIHN1YnN0ci5cIlxyXG4gW3Mgc3Vic3RyXVxyXG4gKGdzdHJpbmcvY29udGFpbnMgcyBzdWJzdHIpKVxyXG4ifSB7OnN5bSByZXBsYWNlLCA6bWV0YSB7OmRvYyAiUmVwbGFjZXMgYWxsIGluc3RhbmNlIG9mIG1hdGNoIHdpdGggcmVwbGFjZW1lbnQgaW4gcy5cblxuICAgbWF0Y2gvcmVwbGFjZW1lbnQgY2FuIGJlOlxuXG4gICBzdHJpbmcgLyBzdHJpbmdcbiAgIHBhdHRlcm4gLyAoc3RyaW5nIG9yIGZ1bmN0aW9uIG9mIG1hdGNoKS5cblxuICAgU2VlIGFsc28gcmVwbGFjZS1maXJzdC5cblxuICAgVGhlIHJlcGxhY2VtZW50IGlzIGxpdGVyYWwgKGkuZS4gbm9uZSBvZiBpdHMgY2hhcmFjdGVycyBhcmUgdHJlYXRlZFxuICAgc3BlY2lhbGx5KSBmb3IgYWxsIGNhc2VzIGFib3ZlIGV4Y2VwdCBwYXR0ZXJuIC8gc3RyaW5nLlxuXG4gICBGb3IgcGF0dGVybiAvIHN0cmluZywgJDEsICQyLCBldGMuIGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXJlXG4gICBzdWJzdGl0dXRlZCB3aXRoIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nXG4gICBwYXJlbnRoZXNpemVkIGdyb3VwIGluIHRoZSBwYXR0ZXJuLlxuXG4gICBFeGFtcGxlOlxuICAgKGNsb2p1cmUuc3RyaW5nL3JlcGxhY2UgXCJBbG1vc3QgUGlnIExhdGluXCIgI1wiXFxiKFxcdykoXFx3KylcXGJcIiBcIiQyJDFheVwiKVxuICAgLT4gXCJsbW9zdEFheSBpZ1BheSBhdGluTGF5XCIiLCA6YXJnbGlzdHMgKFtzIG1hdGNoIHJlcGxhY2VtZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwbGFjZVxyXG4gXCJSZXBsYWNlcyBhbGwgaW5zdGFuY2Ugb2YgbWF0Y2ggd2l0aCByZXBsYWNlbWVudCBpbiBzLlxcblxcbiAgIG1hdGNoL3JlcGxhY2VtZW50IGNhbiBiZTpcXG5cXG4gICBzdHJpbmcgLyBzdHJpbmdcXG4gICBwYXR0ZXJuIC8gKHN0cmluZyBvciBmdW5jdGlvbiBvZiBtYXRjaCkuXFxuXFxuICAgU2VlIGFsc28gcmVwbGFjZS1maXJzdC5cXG5cXG4gICBUaGUgcmVwbGFjZW1lbnQgaXMgbGl0ZXJhbCAoaS5lLiBub25lIG9mIGl0cyBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkXFxuICAgc3BlY2lhbGx5KSBmb3IgYWxsIGNhc2VzIGFib3ZlIGV4Y2VwdCBwYXR0ZXJuIC8gc3RyaW5nLlxcblxcbiAgIEZvciBwYXR0ZXJuIC8gc3RyaW5nLCAkMSwgJDIsIGV0Yy4gaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZyBhcmVcXG4gICBzdWJzdGl0dXRlZCB3aXRoIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nXFxuICAgcGFyZW50aGVzaXplZCBncm91cCBpbiB0aGUgcGF0dGVybi5cXG5cXG4gICBFeGFtcGxlOlxcbiAgIChjbG9qdXJlLnN0cmluZy9yZXBsYWNlIFxcXCJBbG1vc3QgUGlnIExhdGluXFxcIiAjXFxcIlxcXFxiKFxcXFx3KShcXFxcdyspXFxcXGJcXFwiIFxcXCIkMiQxYXlcXFwiKVxcbiAgIC0+IFxcXCJsbW9zdEFheSBpZ1BheSBhdGluTGF5XFxcIlwiXHJcbiBbcyBtYXRjaCByZXBsYWNlbWVudF1cclxuIChjb25kXHJcbiAgKHN0cmluZz8gbWF0Y2gpXHJcbiAgKC5yZXBsYWNlXHJcbiAgIHNcclxuICAgKGpzL1JlZ0V4cC4gKGdzdHJpbmcvcmVnRXhwRXNjYXBlIG1hdGNoKSBcImdcIilcclxuICAgcmVwbGFjZW1lbnQpXHJcbiAgKGluc3RhbmNlPyBqcy9SZWdFeHAgbWF0Y2gpXHJcbiAgKGlmXHJcbiAgIChzdHJpbmc/IHJlcGxhY2VtZW50KVxyXG4gICAocmVwbGFjZS1hbGwgcyBtYXRjaCByZXBsYWNlbWVudClcclxuICAgKHJlcGxhY2UtYWxsIHMgbWF0Y2ggKHJlcGxhY2Utd2l0aCByZXBsYWNlbWVudCkpKVxyXG4gIDplbHNlXHJcbiAgKHRocm93IChzdHIgXCJJbnZhbGlkIG1hdGNoIGFyZzogXCIgbWF0Y2gpKSkpXHJcbiJ9IHs6c3ltIHNwbGl0LWxpbmVzLCA6bWV0YSB7OmRvYyAiU3BsaXRzIHMgb24gXFxuIG9yIFxcclxcbi4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXQtbGluZXNcclxuIFwiU3BsaXRzIHMgb24gXFxcXG4gb3IgXFxcXHJcXFxcbi5cIlxyXG4gW3NdXHJcbiAoc3BsaXQgcyAjXCJcXG58XFxyXFxuXCIpKVxyXG4ifSB7OnN5bSBsb3dlci1jYXNlLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgc3RyaW5nIHRvIGFsbCBsb3dlci1jYXNlLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBsb3dlci1jYXNlXHJcbiBcIkNvbnZlcnRzIHN0cmluZyB0byBhbGwgbG93ZXItY2FzZS5cIlxyXG4gW3NdXHJcbiAoLnRvTG93ZXJDYXNlIHMpKVxyXG4ifSB7OnN5bSB0cmltLW5ld2xpbmUsIDptZXRhIHs6ZG9jICJSZW1vdmVzIGFsbCB0cmFpbGluZyBuZXdsaW5lIFxcbiBvciByZXR1cm4gXFxyIGNoYXJhY3RlcnMgZnJvbVxuICBzdHJpbmcuICBTaW1pbGFyIHRvIFBlcmwncyBjaG9tcC4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJpbS1uZXdsaW5lXHJcbiBcIlJlbW92ZXMgYWxsIHRyYWlsaW5nIG5ld2xpbmUgXFxcXG4gb3IgcmV0dXJuIFxcXFxyIGNoYXJhY3RlcnMgZnJvbVxcbiAgc3RyaW5nLiAgU2ltaWxhciB0byBQZXJsJ3MgY2hvbXAuXCJcclxuIFtzXVxyXG4gKGxvb3BcclxuICBbaW5kZXggKC4tbGVuZ3RoIHMpXVxyXG4gIChpZlxyXG4gICAoemVybz8gaW5kZXgpXHJcbiAgIFwiXCJcclxuICAgKGxldFxyXG4gICAgW2NoIChnZXQgcyAoZGVjIGluZGV4KSldXHJcbiAgICAoaWZcclxuICAgICAob3IgKGlkZW50aWNhbD8gXFxuZXdsaW5lIGNoKSAoaWRlbnRpY2FsPyBcXHJldHVybiBjaCkpXHJcbiAgICAgKHJlY3VyIChkZWMgaW5kZXgpKVxyXG4gICAgICguc3Vic3RyaW5nIHMgMCBpbmRleCkpKSkpKVxyXG4ifSB7OnN5bSB1cHBlci1jYXNlLCA6bWV0YSB7OmRvYyAiQ29udmVydHMgc3RyaW5nIHRvIGFsbCB1cHBlci1jYXNlLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB1cHBlci1jYXNlXHJcbiBcIkNvbnZlcnRzIHN0cmluZyB0byBhbGwgdXBwZXItY2FzZS5cIlxyXG4gW3NdXHJcbiAoLnRvVXBwZXJDYXNlIHMpKVxyXG4ifSB7OnN5bSBzcGxpdCwgOm1ldGEgezpkb2MgIlNwbGl0cyBzdHJpbmcgb24gYSByZWd1bGFyIGV4cHJlc3Npb24uIE9wdGlvbmFsIGFyZ3VtZW50IGxpbWl0IGlzXG4gIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzcGxpdHMuIE5vdCBsYXp5LiBSZXR1cm5zIHZlY3RvciBvZiB0aGUgc3BsaXRzLiIsIDphcmdsaXN0cyBbW3MgcmVdIFtzIHJlIGxpbWl0XV19LCA6c291cmNlICIoZGVmblxyXG4gc3BsaXRcclxuIFwiU3BsaXRzIHN0cmluZyBvbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gT3B0aW9uYWwgYXJndW1lbnQgbGltaXQgaXNcXG4gIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzcGxpdHMuIE5vdCBsYXp5LiBSZXR1cm5zIHZlY3RvciBvZiB0aGUgc3BsaXRzLlwiXHJcbiAoW3MgcmVdIChzcGxpdCBzIHJlIDApKVxyXG4gKFtzIHJlIGxpbWl0XVxyXG4gIChkaXNjYXJkLXRyYWlsaW5nLWlmLW5lZWRlZFxyXG4gICBsaW1pdFxyXG4gICAoaWZcclxuICAgIChpZGVudGljYWw/IFwiLyg/OikvXCIgKHN0ciByZSkpXHJcbiAgICAoc3BsaXQtd2l0aC1lbXB0eS1yZWdleCBzIGxpbWl0KVxyXG4gICAgKGlmXHJcbiAgICAgKDwgbGltaXQgMSlcclxuICAgICAodmVjICguc3BsaXQgKHN0ciBzKSByZSkpXHJcbiAgICAgKGxvb3BcclxuICAgICAgW3MgcyBsaW1pdCBsaW1pdCBwYXJ0cyBbXV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoPT0gMSBsaW1pdClcclxuICAgICAgIChjb25qIHBhcnRzIHMpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW20gKHJlLWZpbmQgcmUgcyldXHJcbiAgICAgICAgKGlmLW5vdFxyXG4gICAgICAgICAobmlsPyBtKVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbaW5kZXggKC5pbmRleE9mIHMgbSldXHJcbiAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAoLnN1YnN0cmluZyBzICgrIGluZGV4IChjb3VudCBtKSkpXHJcbiAgICAgICAgICAgKGRlYyBsaW1pdClcclxuICAgICAgICAgICAoY29uaiBwYXJ0cyAoLnN1YnN0cmluZyBzIDAgaW5kZXgpKSkpXHJcbiAgICAgICAgIChjb25qIHBhcnRzIHMpKSkpKSkpKSkpXHJcbiJ9IHs6c3ltIHRyaW1yLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0cmltclxyXG4gXCJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzdHJpbmcuXCJcclxuIFtzXVxyXG4gKGdzdHJpbmcvdHJpbVJpZ2h0IHMpKVxyXG4ifSB7OnN5bSBpbmRleC1vZiwgOm1ldGEgezpkb2MgIlJldHVybiBpbmRleCBvZiB2YWx1ZSAoc3RyaW5nIG9yIGNoYXIpIGluIHMsIG9wdGlvbmFsbHkgc2VhcmNoaW5nXG4gIGZvcndhcmQgZnJvbSBmcm9tLWluZGV4IG9yIG5pbCBpZiBub3QgZm91bmQuIiwgOmFyZ2xpc3RzIFtbcyB2YWx1ZV0gW3MgdmFsdWUgZnJvbS1pbmRleF1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluZGV4LW9mXHJcbiBcIlJldHVybiBpbmRleCBvZiB2YWx1ZSAoc3RyaW5nIG9yIGNoYXIpIGluIHMsIG9wdGlvbmFsbHkgc2VhcmNoaW5nXFxuICBmb3J3YXJkIGZyb20gZnJvbS1pbmRleCBvciBuaWwgaWYgbm90IGZvdW5kLlwiXHJcbiAoW3MgdmFsdWVdXHJcbiAgKGxldCBbcmVzdWx0ICguaW5kZXhPZiBzIHZhbHVlKV0gKGlmIChuZWc/IHJlc3VsdCkgbmlsIHJlc3VsdCkpKVxyXG4gKFtzIHZhbHVlIGZyb20taW5kZXhdXHJcbiAgKGxldFxyXG4gICBbcmVzdWx0ICguaW5kZXhPZiBzIHZhbHVlIGZyb20taW5kZXgpXVxyXG4gICAoaWYgKG5lZz8gcmVzdWx0KSBuaWwgcmVzdWx0KSkpKVxyXG4ifSB7OnN5bSB0cmltLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gYm90aCBlbmRzIG9mIHN0cmluZy4iLCA6YXJnbGlzdHMgKFtzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdHJpbVxyXG4gXCJSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSBib3RoIGVuZHMgb2Ygc3RyaW5nLlwiXHJcbiBbc11cclxuIChnc3RyaW5nL3RyaW0gcykpXHJcbiJ9IHs6c3ltIHRyaW1sLCA6bWV0YSB7OmRvYyAiUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGxlZnQgc2lkZSBvZiBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHRyaW1sXHJcbiBcIlJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIHRoZSBsZWZ0IHNpZGUgb2Ygc3RyaW5nLlwiXHJcbiBbc11cclxuIChnc3RyaW5nL3RyaW1MZWZ0IHMpKVxyXG4ifSB7OnN5bSBibGFuaz8sIDptZXRhIHs6ZG9jICJUcnVlIGlzIHMgaXMgbmlsLCBlbXB0eSwgb3IgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlLiIsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBibGFuaz9cclxuIFwiVHJ1ZSBpcyBzIGlzIG5pbCwgZW1wdHksIG9yIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZS5cIlxyXG4gW3NdXHJcbiAoZ3N0cmluZy9pc0VtcHR5T3JXaGl0ZXNwYWNlIChnc3RyaW5nL21ha2VTYWZlIHMpKSlcclxuIn0pLCBjbGpzLnNwZWMuYWxwaGEgKHs6c3ltIGZvcm0sIDptZXRhIHs6ZG9jICJyZXR1cm5zIHRoZSBzcGVjIGFzIGRhdGEiLCA6YXJnbGlzdHMgKFtzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9ybVxyXG4gXCJyZXR1cm5zIHRoZSBzcGVjIGFzIGRhdGFcIlxyXG4gW3NwZWNdXHJcbiAoZGVzY3JpYmUqIChzcGVjaXplIHNwZWMpKSlcclxuIn0gezpzeW0gbmlsYWJsZS1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICduaWxhYmxlJyIsIDphcmdsaXN0cyAoW2Zvcm0gcHJlZCBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBuaWxhYmxlLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICduaWxhYmxlJ1wiXHJcbiBbZm9ybSBwcmVkIGdmbl1cclxuIChsZXRcclxuICBbc3BlYyAoZGVsYXkgKHNwZWNpemUgcHJlZCBmb3JtKSldXHJcbiAgKHJlaWZ5XHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSogW18geF0gKGlmIChuaWw/IHgpIG5pbCAoY29uZm9ybSogQHNwZWMgeCkpKVxyXG4gICAodW5mb3JtKiBbXyB4XSAoaWYgKG5pbD8geCkgbmlsICh1bmZvcm0qIEBzcGVjIHgpKSlcclxuICAgKGV4cGxhaW4qXHJcbiAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgKHdoZW4tbm90XHJcbiAgICAgKGMvb3IgKHB2YWxpZD8gQHNwZWMgeCkgKG5pbD8geCkpXHJcbiAgICAgKGNvbmpcclxuICAgICAgKGV4cGxhaW4tMSBmb3JtIHByZWQgKGNvbmogcGF0aCA6Y2xqcy5zcGVjLmFscGhhL3ByZWQpIHZpYSBpbiB4KVxyXG4gICAgICB7OnBhdGggKGNvbmogcGF0aCA6Y2xqcy5zcGVjLmFscGhhL25pbCksXHJcbiAgICAgICA6cHJlZCAnbmlsPyxcclxuICAgICAgIDp2YWwgeCxcclxuICAgICAgIDp2aWEgdmlhLFxyXG4gICAgICAgOmluIGlufSkpKVxyXG4gICAoZ2VuKlxyXG4gICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgIChpZlxyXG4gICAgIGdmblxyXG4gICAgIChnZm4pXHJcbiAgICAgKGdlbi9mcmVxdWVuY3lcclxuICAgICAgW1sxIChnZW4vZGVsYXkgKGdlbi9yZXR1cm4gbmlsKSldXHJcbiAgICAgICBbOVxyXG4gICAgICAgIChnZW4vZGVsYXlcclxuICAgICAgICAgKGdlbnN1YlxyXG4gICAgICAgICAgcHJlZFxyXG4gICAgICAgICAgb3ZlcnJpZGVzXHJcbiAgICAgICAgICAoY29uaiBwYXRoIDpjbGpzLnNwZWMuYWxwaGEvcHJlZClcclxuICAgICAgICAgIHJtYXBcclxuICAgICAgICAgIGZvcm0pKV1dKSkpXHJcbiAgICh3aXRoLWdlbiogW18gZ2ZuXSAobmlsYWJsZS1pbXBsIGZvcm0gcHJlZCBnZm4pKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvbmlsYWJsZSlcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAocy9tcmVzIGZvcm0pKSkpKSkpKSlcclxuIn0gezpzeW0gKnJlY3Vyc2lvbi1saW1pdCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqcmVjdXJzaW9uLWxpbWl0KlxyXG4gXCJBIHNvZnQgbGltaXQgb24gaG93IG1hbnkgdGltZXMgYSBicmFuY2hpbmcgc3BlYyAob3IvYWx0Lyovb3B0LWtleXMvbXVsdGktc3BlYylcXG4gIGNhbiBiZSByZWN1cnNlZCB0aHJvdWdoIGR1cmluZyBnZW5lcmF0aW9uLiBBZnRlciB0aGlzIGFcXG4gIG5vbi1yZWN1cnNpdmUgYnJhbmNoIHdpbGwgYmUgY2hvc2VuLlwiXHJcbiA0KVxyXG4ifSB7OnN5bSAqY29sbC1lcnJvci1saW1pdCosIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiAqY29sbC1lcnJvci1saW1pdCpcclxuIFwiVGhlIG51bWJlciBvZiBlcnJvcnMgcmVwb3J0ZWQgYnkgZXhwbGFpbiBpbiBhIGNvbGxlY3Rpb24gc3BlYydlZCB3aXRoICdldmVyeSdcIlxyXG4gMjApXHJcbiJ9IHs6c3ltIGV4cGxhaW4tcHJpbnRlciwgOm1ldGEgezpkb2MgIkRlZmF1bHQgcHJpbnRlciBmb3IgZXhwbGFpbi1kYXRhLiBuaWwgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uLiIsIDphcmdsaXN0cyAoW2VkXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1wcmludGVyXHJcbiBcIkRlZmF1bHQgcHJpbnRlciBmb3IgZXhwbGFpbi1kYXRhLiBuaWwgaW5kaWNhdGVzIGEgc3VjY2Vzc2Z1bCB2YWxpZGF0aW9uLlwiXHJcbiBbZWRdXHJcbiAoaWZcclxuICBlZFxyXG4gIChsZXRcclxuICAgW3Byb2JsZW1zXHJcbiAgICAoLT4+XHJcbiAgICAgKDpjbGpzLnNwZWMuYWxwaGEvcHJvYmxlbXMgZWQpXHJcbiAgICAgKHNvcnQtYnkgKGZuKiBbcDFfXzQ4OTM2I10gKC0gKGNvdW50ICg6aW4gcDFfXzQ4OTM2IykpKSkpXHJcbiAgICAgKHNvcnQtYnkgKGZuKiBbcDFfXzQ4OTM3I10gKC0gKGNvdW50ICg6cGF0aCBwMV9fNDg5MzcjKSkpKSkpXVxyXG4gICAocHJpbnRcclxuICAgICh3aXRoLW91dC1zdHJcclxuICAgICAoZG9zZXFcclxuICAgICAgW3s6a2V5cyBbcGF0aCBwcmVkIHZhbCByZWFzb24gdmlhIGluXSwgOmFzIHByb2J9IHByb2JsZW1zXVxyXG4gICAgICAocHIgdmFsKVxyXG4gICAgICAocHJpbnQgXCIgLSBmYWlsZWQ6IFwiKVxyXG4gICAgICAoaWYgcmVhc29uIChwcmludCByZWFzb24pIChwciAoYWJicmV2IHByZWQpKSlcclxuICAgICAgKHdoZW4tbm90IChlbXB0eT8gaW4pIChwcmludCAoc3RyIFwiIGluOiBcIiAocHItc3RyIGluKSkpKVxyXG4gICAgICAod2hlbi1ub3QgKGVtcHR5PyBwYXRoKSAocHJpbnQgKHN0ciBcIiBhdDogXCIgKHByLXN0ciBwYXRoKSkpKVxyXG4gICAgICAod2hlbi1ub3RcclxuICAgICAgIChlbXB0eT8gdmlhKVxyXG4gICAgICAgKHByaW50IChzdHIgXCIgc3BlYzogXCIgKHByLXN0ciAobGFzdCB2aWEpKSkpKVxyXG4gICAgICAoZG9zZXFcclxuICAgICAgIFtbayB2XSBwcm9iXVxyXG4gICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgKCN7OnBhdGggOnByZWQgOnZpYSA6dmFsIDpyZWFzb24gOmlufSBrKVxyXG4gICAgICAgIChwcmludCBcIlxcblxcdFwiIChwci1zdHIgaykgXCIgXCIpXHJcbiAgICAgICAgKHByIHYpKSlcclxuICAgICAgKG5ld2xpbmUpKSkpKVxyXG4gIChwcmludGxuIFwiU3VjY2VzcyFcIikpKVxyXG4ifSB7OnN5bSBTcGVjaXplLCA6bWV0YSB7OmRvYyBuaWx9LCA6bWV0aG9kcyAoc3BlY2l6ZSopfSB7OnN5bSBhbHQtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYWx0JyIsIDphcmdsaXN0cyAoW2tzIHBzIGZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gYWx0LWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdhbHQnXCJcclxuIFtrcyBwcyBmb3Jtc11cclxuIChhc3NvYyAoYWx0KiBwcyBrcyBmb3JtcykgOmlkIChyYW5kb20tdXVpZCkpKVxyXG4ifSB7OnN5bSBkZWYtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZGVmJyIsIDphcmdsaXN0cyAoW2sgZm9ybSBzcGVjXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVmLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdkZWYnXCJcclxuIFtrIGZvcm0gc3BlY11cclxuIChhc3NlcnRcclxuICAoYy9hbmQgKGlkZW50PyBrKSAobmFtZXNwYWNlIGspKVxyXG4gIFwiayBtdXN0IGJlIG5hbWVzcGFjZWQga2V5d29yZCBvciByZXNvbHZlYWJsZSBzeW1ib2xcIilcclxuIChpZlxyXG4gIChuaWw/IHNwZWMpXHJcbiAgKHN3YXAhIHJlZ2lzdHJ5LXJlZiBkaXNzb2MgaylcclxuICAobGV0XHJcbiAgIFtzcGVjXHJcbiAgICAoaWZcclxuICAgICAoYy9vciAoc3BlYz8gc3BlYykgKHJlZ2V4PyBzcGVjKSAoZ2V0IEByZWdpc3RyeS1yZWYgc3BlYykpXHJcbiAgICAgc3BlY1xyXG4gICAgIChzcGVjLWltcGwgZm9ybSBzcGVjIG5pbCBuaWwpKV1cclxuICAgKHN3YXAhIHJlZ2lzdHJ5LXJlZiBhc3NvYyBrICh3aXRoLW5hbWUgc3BlYyBrKSkpKVxyXG4gaylcclxuIn0gezpzeW0gKmV4cGxhaW4tb3V0KiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWYgKmV4cGxhaW4tb3V0KiBleHBsYWluLXByaW50ZXIpXHJcbiJ9IHs6c3ltIHJlZ2V4LXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYycgd2l0aCBhIHJlZ2V4IG9wIGFyZ3VtZW50IiwgOmFyZ2xpc3RzIChbcmUgZ2ZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnZXgtc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYycgd2l0aCBhIHJlZ2V4IG9wIGFyZ3VtZW50XCJcclxuIFtyZSBnZm5dXHJcbiAocmVpZnlcclxuICBTcGVjaXplXHJcbiAgKHNwZWNpemUqIFtzXSBzKVxyXG4gIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gIFNwZWNcclxuICAoY29uZm9ybSpcclxuICAgW18geF1cclxuICAgKGlmXHJcbiAgICAoYy9vciAobmlsPyB4KSAoc2VxdWVudGlhbD8geCkpXHJcbiAgICAocmUtY29uZm9ybSByZSAoc2VxIHgpKVxyXG4gICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKSlcclxuICAodW5mb3JtKiBbXyB4XSAob3AtdW5mb3JtIHJlIHgpKVxyXG4gIChleHBsYWluKlxyXG4gICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAoaWZcclxuICAgIChjL29yIChuaWw/IHgpIChzZXF1ZW50aWFsPyB4KSlcclxuICAgIChyZS1leHBsYWluIHBhdGggdmlhIGluIHJlIChzZXEgeCkpXHJcbiAgICBbezpwYXRoIHBhdGgsXHJcbiAgICAgIDpwcmVkXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvZm4pXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdFxyXG4gICAgICAgICAgKGNsb2p1cmUuY29yZS92ZWNcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdCAoY2xvanVyZS5jb3JlL2xpc3QgJyUpKSkpKSlcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5jb3JlL29yKVxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0XHJcbiAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS9uaWw/KVxyXG4gICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnJSkpKSkpXHJcbiAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xvanVyZS5jb3JlL3NlcXVlbnRpYWw/KVxyXG4gICAgICAgICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnJSkpKSkpKSkpKSkpKSxcclxuICAgICAgOnZhbCB4LFxyXG4gICAgICA6dmlhIHZpYSxcclxuICAgICAgOmluIGlufV0pKVxyXG4gIChnZW4qXHJcbiAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgIChpZiBnZm4gKGdmbikgKHJlLWdlbiByZSBvdmVycmlkZXMgcGF0aCBybWFwIChvcC1kZXNjcmliZSByZSkpKSlcclxuICAod2l0aC1nZW4qIFtfIGdmbl0gKHJlZ2V4LXNwZWMtaW1wbCByZSBnZm4pKVxyXG4gIChkZXNjcmliZSogW19dIChvcC1kZXNjcmliZSByZSkpKSlcclxuIn0gezpzeW0gbWVyZ2Utc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdtZXJnZSciLCA6YXJnbGlzdHMgKFtmb3JtcyBwcmVkcyBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtZXJnZS1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdtZXJnZSdcIlxyXG4gW2Zvcm1zIHByZWRzIGdmbl1cclxuIChyZWlmeVxyXG4gIFNwZWNpemVcclxuICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgU3BlY1xyXG4gIChjb25mb3JtKlxyXG4gICBbXyB4XVxyXG4gICAobGV0XHJcbiAgICBbbXNcclxuICAgICAobWFwXHJcbiAgICAgIChmbiogW3AxX180ODk0OSMgcDJfXzQ4OTUwI10gKGR0IHAxX180ODk0OSMgeCBwMl9fNDg5NTAjKSlcclxuICAgICAgcHJlZHNcclxuICAgICAgZm9ybXMpXVxyXG4gICAgKGlmXHJcbiAgICAgKHNvbWUgaW52YWxpZD8gbXMpXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgKGFwcGx5IGMvbWVyZ2UgbXMpKSkpXHJcbiAgKHVuZm9ybSpcclxuICAgW18geF1cclxuICAgKGFwcGx5XHJcbiAgICBjL21lcmdlXHJcbiAgICAobWFwIChmbiogW3AxX180ODk1MSNdICh1bmZvcm0gcDFfXzQ4OTUxIyB4KSkgKHJldmVyc2UgcHJlZHMpKSkpXHJcbiAgKGV4cGxhaW4qXHJcbiAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgIChhcHBseVxyXG4gICAgY29uY2F0XHJcbiAgICAobWFwXHJcbiAgICAgKGZuKlxyXG4gICAgICBbcDFfXzQ4OTUyIyBwMl9fNDg5NTMjXVxyXG4gICAgICAoZXhwbGFpbi0xIHAxX180ODk1MiMgcDJfXzQ4OTUzIyBwYXRoIHZpYSBpbiB4KSlcclxuICAgICBmb3Jtc1xyXG4gICAgIHByZWRzKSkpXHJcbiAgKGdlbipcclxuICAgW18gb3ZlcnJpZGVzIHBhdGggcm1hcF1cclxuICAgKGlmXHJcbiAgICBnZm5cclxuICAgIChnZm4pXHJcbiAgICAoZ2VuL2ZtYXBcclxuICAgICAoZm4qIFtwMV9fNDg5NTQjXSAoYXBwbHkgYy9tZXJnZSBwMV9fNDg5NTQjKSlcclxuICAgICAoYXBwbHlcclxuICAgICAgZ2VuL3R1cGxlXHJcbiAgICAgIChtYXBcclxuICAgICAgIChmbipcclxuICAgICAgICBbcDFfXzQ4OTU1IyBwMl9fNDg5NTYjXVxyXG4gICAgICAgIChnZW5zdWIgcDFfXzQ4OTU1IyBvdmVycmlkZXMgcGF0aCBybWFwIHAyX180ODk1NiMpKVxyXG4gICAgICAgcHJlZHNcclxuICAgICAgIGZvcm1zKSkpKSlcclxuICAod2l0aC1nZW4qIFtfIGdmbl0gKG1lcmdlLXNwZWMtaW1wbCBmb3JtcyBwcmVkcyBnZm4pKVxyXG4gIChkZXNjcmliZSpcclxuICAgW19dXHJcbiAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvbWVyZ2UpXHJcbiAgICAgIGZvcm1zKSkpKSkpXHJcbiJ9IHs6c3ltIGV4cGxhaW4tZGF0YSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBwYXRoIHZpYSBpbiB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1kYXRhKlxyXG4gW3NwZWMgcGF0aCB2aWEgaW4geF1cclxuICh3aGVuLWxldFxyXG4gIFtwcm9icyAoZXhwbGFpbiogKHNwZWNpemUgc3BlYykgcGF0aCB2aWEgaW4geCldXHJcbiAgKHdoZW4tbm90XHJcbiAgIChlbXB0eT8gcHJvYnMpXHJcbiAgIHs6Y2xqcy5zcGVjLmFscGhhL3Byb2JsZW1zIHByb2JzLFxyXG4gICAgOmNsanMuc3BlYy5hbHBoYS9zcGVjIHNwZWMsXHJcbiAgICA6Y2xqcy5zcGVjLmFscGhhL3ZhbHVlIHh9KSkpXHJcbiJ9IHs6c3ltIE1BWF9JTlQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIE1BWF9JTlQgOTAwNzE5OTI1NDc0MDk5MSlcclxuIn0gezpzeW0gY2hlY2stYXNzZXJ0cywgOm1ldGEgezpkb2MgIkVuYWJsZSBvciBkaXNhYmxlIHNwZWMgYXNzZXJ0cyB0aGF0IGhhdmUgYmVlbiBjb21waWxlZFxud2l0aCAnKmNvbXBpbGUtYXNzZXJ0cyonIHRydWUuICBTZWUgJ2Fzc2VydCcuXG5Jbml0aWFsbHkgc2V0IHRvIGJvb2xlYW4gdmFsdWUgb2YgY2xqcy5zcGVjLmFscGhhLypydW50aW1lLWFzc2VydHMqLlxuRGVmYXVsdHMgdG8gZmFsc2UuIiwgOmFyZ2xpc3RzIChbZmxhZ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNoZWNrLWFzc2VydHNcclxuIFwiRW5hYmxlIG9yIGRpc2FibGUgc3BlYyBhc3NlcnRzIHRoYXQgaGF2ZSBiZWVuIGNvbXBpbGVkXFxud2l0aCAnKmNvbXBpbGUtYXNzZXJ0cyonIHRydWUuICBTZWUgJ2Fzc2VydCcuXFxuSW5pdGlhbGx5IHNldCB0byBib29sZWFuIHZhbHVlIG9mIGNsanMuc3BlYy5hbHBoYS8qcnVudGltZS1hc3NlcnRzKi5cXG5EZWZhdWx0cyB0byBmYWxzZS5cIlxyXG4gW2ZsYWddXHJcbiAoc2V0ISAqcnVudGltZS1hc3NlcnRzKiBmbGFnKSlcclxuIn0gezpzeW0gYXNzZXJ0KiwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYXNzZXJ0Jy4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhc3NlcnQqXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYXNzZXJ0Jy5cIlxyXG4gW3NwZWMgeF1cclxuIChpZlxyXG4gICh2YWxpZD8gc3BlYyB4KVxyXG4gIHhcclxuICAobGV0XHJcbiAgIFtlZFxyXG4gICAgKGMvbWVyZ2VcclxuICAgICAoYXNzb2NcclxuICAgICAgKGV4cGxhaW4tZGF0YSogc3BlYyBbXSBbXSBbXSB4KVxyXG4gICAgICA6Y2xqcy5zcGVjLmFscGhhL2ZhaWx1cmVcclxuICAgICAgOmFzc2VydGlvbi1mYWlsZWQpKV1cclxuICAgKHRocm93XHJcbiAgICAoanMvRXJyb3IuXHJcbiAgICAgKHN0clxyXG4gICAgICBcIlNwZWMgYXNzZXJ0aW9uIGZhaWxlZFxcblwiXHJcbiAgICAgICh3aXRoLW91dC1zdHIgKGV4cGxhaW4tb3V0IGVkKSkpKSkpKSlcclxuIn0gezpzeW0gaW5zdC1pbi1yYW5nZT8sIDptZXRhIHs6ZG9jICJSZXR1cm4gdHJ1ZSBpZiBpbnN0IGF0IG9yIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgZW5kIiwgOmFyZ2xpc3RzIChbc3RhcnQgZW5kIGluc3RdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnN0LWluLXJhbmdlP1xyXG4gXCJSZXR1cm4gdHJ1ZSBpZiBpbnN0IGF0IG9yIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgZW5kXCJcclxuIFtzdGFydCBlbmQgaW5zdF1cclxuIChjL2FuZFxyXG4gIChpbnN0PyBpbnN0KVxyXG4gIChsZXRcclxuICAgW3QgKGluc3QtbXMgaW5zdCldXHJcbiAgIChjL2FuZCAoPD0gKGluc3QtbXMgc3RhcnQpIHQpICg8IHQgKGluc3QtbXMgZW5kKSkpKSkpXHJcbiJ9IHs6c3ltIGFuZC1zcGVjLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2FuZCciLCA6YXJnbGlzdHMgKFtmb3JtcyBwcmVkcyBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbmQtc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnYW5kJ1wiXHJcbiBbZm9ybXMgcHJlZHMgZ2ZuXVxyXG4gKGxldFxyXG4gIFtzcGVjc1xyXG4gICAoZGVsYXkgKG1hcHYgc3BlY2l6ZSBwcmVkcyBmb3JtcykpXHJcbiAgIGNmb3JtXHJcbiAgIChjYXNlXHJcbiAgICAoY291bnQgcHJlZHMpXHJcbiAgICAyXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3MgcmV0IChjb25mb3JtKiAoc3BlY3MgMCkgeCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgKGNvbmZvcm0qIChzcGVjcyAxKSByZXQpKSkpXHJcbiAgICAzXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjcyBAc3BlY3MgcmV0IChjb25mb3JtKiAoc3BlY3MgMCkgeCldXHJcbiAgICAgIChpZlxyXG4gICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtyZXQgKGNvbmZvcm0qIChzcGVjcyAxKSByZXQpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgKGNvbmZvcm0qIChzcGVjcyAyKSByZXQpKSkpKSlcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjc11cclxuICAgICAgKGxvb3BcclxuICAgICAgIFtyZXQgeCBpIDBdXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoPCBpIChjb3VudCBzcGVjcykpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbbnJldCAoY29uZm9ybSogKHNwZWNzIGkpIHJldCldXHJcbiAgICAgICAgIChpZlxyXG4gICAgICAgICAgKGludmFsaWQ/IG5yZXQpXHJcbiAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgIChyZWN1ciBucmV0IChpbmMgaSkpKSlcclxuICAgICAgICByZXQpKSkpKV1cclxuICAocmVpZnlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKiBbXyB4XSAoY2Zvcm0geCkpXHJcbiAgICh1bmZvcm0qXHJcbiAgICBbXyB4XVxyXG4gICAgKHJlZHVjZVxyXG4gICAgIChmbiogW3AxX180ODk0OCMgcDJfXzQ4OTQ3I10gKHVuZm9ybSBwMl9fNDg5NDcjIHAxX180ODk0OCMpKVxyXG4gICAgIHhcclxuICAgICAocmV2ZXJzZSBwcmVkcykpKVxyXG4gICAoZXhwbGFpbipcclxuICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAoZXhwbGFpbi1wcmVkLWxpc3QgZm9ybXMgcHJlZHMgcGF0aCB2aWEgaW4geCkpXHJcbiAgIChnZW4qXHJcbiAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgKGlmXHJcbiAgICAgZ2ZuXHJcbiAgICAgKGdmbilcclxuICAgICAoZ2Vuc3ViIChmaXJzdCBwcmVkcykgb3ZlcnJpZGVzIHBhdGggcm1hcCAoZmlyc3QgZm9ybXMpKSkpXHJcbiAgICh3aXRoLWdlbiogW18gZ2ZuXSAoYW5kLXNwZWMtaW1wbCBmb3JtcyBwcmVkcyBnZm4pKVxyXG4gICAoZGVzY3JpYmUqXHJcbiAgICBbX11cclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvYW5kKVxyXG4gICAgICAgZm9ybXMpKSkpKSkpXHJcbiJ9IHs6c3ltIGRlc2NyaWJlKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjXSl9LCA6cHJvdG9jb2wgU3BlY30gezpzeW0gbWFwLXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYycgd2l0aCBhIG1hcCBhcmd1bWVudCIsIDphcmdsaXN0cyAoW3s6a2V5cyBbcmVxLXVuIG9wdC11biBrZXlzLXByZWQgcHJlZC1leHBycyBvcHQta2V5cyByZXEtc3BlY3MgcmVxIHJlcS1rZXlzIG9wdC1zcGVjcyBwcmVkLWZvcm1zIG9wdCBnZm5dLCA6YXMgYXJnbX1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtYXAtc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYycgd2l0aCBhIG1hcCBhcmd1bWVudFwiXHJcbiBbezprZXlzXHJcbiAgIFtyZXEtdW5cclxuICAgIG9wdC11blxyXG4gICAga2V5cy1wcmVkXHJcbiAgICBwcmVkLWV4cHJzXHJcbiAgICBvcHQta2V5c1xyXG4gICAgcmVxLXNwZWNzXHJcbiAgICByZXFcclxuICAgIHJlcS1rZXlzXHJcbiAgICBvcHQtc3BlY3NcclxuICAgIHByZWQtZm9ybXNcclxuICAgIG9wdFxyXG4gICAgZ2ZuXSxcclxuICAgOmFzIGFyZ219XVxyXG4gKGxldFxyXG4gIFtrLT5zXHJcbiAgICh6aXBtYXAgKGNvbmNhdCByZXEta2V5cyBvcHQta2V5cykgKGNvbmNhdCByZXEtc3BlY3Mgb3B0LXNwZWNzKSlcclxuICAga2V5cy0+c3BlY25hbWVzXHJcbiAgIChmbiogW3AxX180ODkzOSNdIChjL29yIChrLT5zIHAxX180ODkzOSMpIHAxX180ODkzOSMpKVxyXG4gICBpZFxyXG4gICAocmFuZG9tLXV1aWQpXVxyXG4gIChyZWlmeVxyXG4gICBTcGVjaXplXHJcbiAgIChzcGVjaXplKiBbc10gcylcclxuICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgIFNwZWNcclxuICAgKGNvbmZvcm0qXHJcbiAgICBbXyBtXVxyXG4gICAgKGlmXHJcbiAgICAgKGtleXMtcHJlZCBtKVxyXG4gICAgIChsZXRcclxuICAgICAgW3JlZyAocmVnaXN0cnkpXVxyXG4gICAgICAobG9vcFxyXG4gICAgICAgW3JldCBtIFtbayB2XSAmIGtzIDphcyBrZXlzXSBtXVxyXG4gICAgICAgKGlmXHJcbiAgICAgICAga2V5c1xyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3NuYW1lIChrZXlzLT5zcGVjbmFtZXMgayldXHJcbiAgICAgICAgIChpZi1sZXRcclxuICAgICAgICAgIFtzIChnZXQgcmVnIHNuYW1lKV1cclxuICAgICAgICAgIChsZXRcclxuICAgICAgICAgICBbY3YgKGNvbmZvcm0gcyB2KV1cclxuICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgKGludmFsaWQ/IGN2KVxyXG4gICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgICAgKHJlY3VyIChpZiAoaWRlbnRpY2FsPyBjdiB2KSByZXQgKGFzc29jIHJldCBrIGN2KSkga3MpKSlcclxuICAgICAgICAgIChyZWN1ciByZXQga3MpKSlcclxuICAgICAgICByZXQpKSlcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKVxyXG4gICAodW5mb3JtKlxyXG4gICAgW18gbV1cclxuICAgIChsZXRcclxuICAgICBbcmVnIChyZWdpc3RyeSldXHJcbiAgICAgKGxvb3BcclxuICAgICAgW3JldCBtIFtrICYga3MgOmFzIGtleXNdIChjL2tleXMgbSldXHJcbiAgICAgIChpZlxyXG4gICAgICAga2V5c1xyXG4gICAgICAgKGlmXHJcbiAgICAgICAgKGNvbnRhaW5zPyByZWcgKGtleXMtPnNwZWNuYW1lcyBrKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtjdiAoZ2V0IG0gaykgdiAodW5mb3JtIChrZXlzLT5zcGVjbmFtZXMgaykgY3YpXVxyXG4gICAgICAgICAocmVjdXIgKGlmIChpZGVudGljYWw/IGN2IHYpIHJldCAoYXNzb2MgcmV0IGsgdikpIGtzKSlcclxuICAgICAgICAocmVjdXIgcmV0IGtzKSlcclxuICAgICAgIHJldCkpKSlcclxuICAgKGV4cGxhaW4qXHJcbiAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgKGlmLW5vdFxyXG4gICAgIChtYXA/IHgpXHJcbiAgICAgW3s6cGF0aCBwYXRoLCA6cHJlZCAnY2xvanVyZS5jb3JlL21hcD8sIDp2YWwgeCwgOnZpYSB2aWEsIDppbiBpbn1dXHJcbiAgICAgKGxldFxyXG4gICAgICBbcmVnIChyZWdpc3RyeSldXHJcbiAgICAgIChhcHBseVxyXG4gICAgICAgY29uY2F0XHJcbiAgICAgICAod2hlbi1sZXRcclxuICAgICAgICBbcHJvYnNcclxuICAgICAgICAgKC0+PlxyXG4gICAgICAgICAgKG1hcFxyXG4gICAgICAgICAgIChmbiBbcHJlZCBmb3JtXSAod2hlbi1ub3QgKHByZWQgeCkgZm9ybSkpXHJcbiAgICAgICAgICAgcHJlZC1leHByc1xyXG4gICAgICAgICAgIHByZWQtZm9ybXMpXHJcbiAgICAgICAgICAoa2VlcCBpZGVudGl0eSlcclxuICAgICAgICAgIHNlcSldXHJcbiAgICAgICAgKG1hcFxyXG4gICAgICAgICAoZm4qXHJcbiAgICAgICAgICBbcDFfXzQ4OTQwI11cclxuICAgICAgICAgIChpZGVudGl0eVxyXG4gICAgICAgICAgIHs6cGF0aCBwYXRoLCA6cHJlZCBwMV9fNDg5NDAjLCA6dmFsIHgsIDp2aWEgdmlhLCA6aW4gaW59KSlcclxuICAgICAgICAgcHJvYnMpKVxyXG4gICAgICAgKG1hcFxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbW2sgdl1dXHJcbiAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgKGMvb3JcclxuICAgICAgICAgICAobm90IChjb250YWlucz8gcmVnIChrZXlzLT5zcGVjbmFtZXMgaykpKVxyXG4gICAgICAgICAgIChwdmFsaWQ/IChrZXlzLT5zcGVjbmFtZXMgaykgdiBrKSlcclxuICAgICAgICAgIChleHBsYWluLTFcclxuICAgICAgICAgICAoa2V5cy0+c3BlY25hbWVzIGspXHJcbiAgICAgICAgICAgKGtleXMtPnNwZWNuYW1lcyBrKVxyXG4gICAgICAgICAgIChjb25qIHBhdGggaylcclxuICAgICAgICAgICB2aWFcclxuICAgICAgICAgICAoY29uaiBpbiBrKVxyXG4gICAgICAgICAgIHYpKSlcclxuICAgICAgICAoc2VxIHgpKSkpKSlcclxuICAgKGdlbipcclxuICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAoaWZcclxuICAgICBnZm5cclxuICAgICAoZ2ZuKVxyXG4gICAgIChsZXRcclxuICAgICAgW3JtYXBcclxuICAgICAgIChpbmNrIHJtYXAgaWQpXHJcbiAgICAgICByZ2VuXHJcbiAgICAgICAoZm4gW2sgc10gW2sgKGdlbnN1YiBzIG92ZXJyaWRlcyAoY29uaiBwYXRoIGspIHJtYXAgayldKVxyXG4gICAgICAgb2dlblxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW2sgc11cclxuICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgKHJlY3VyLWxpbWl0PyBybWFwIGlkIHBhdGggaylcclxuICAgICAgICAgW2sgKGdlbi9kZWxheSAoZ2Vuc3ViIHMgb3ZlcnJpZGVzIChjb25qIHBhdGggaykgcm1hcCBrKSldKSlcclxuICAgICAgIHJlcXNcclxuICAgICAgIChtYXAgcmdlbiByZXEta2V5cyByZXEtc3BlY3MpXHJcbiAgICAgICBvcHRzXHJcbiAgICAgICAocmVtb3ZlIG5pbD8gKG1hcCBvZ2VuIG9wdC1rZXlzIG9wdC1zcGVjcykpXVxyXG4gICAgICAod2hlblxyXG4gICAgICAgKGV2ZXJ5PyBpZGVudGl0eSAoY29uY2F0IChtYXAgc2Vjb25kIHJlcXMpIChtYXAgc2Vjb25kIG9wdHMpKSlcclxuICAgICAgIChnZW4vYmluZFxyXG4gICAgICAgIChnZW4vdHVwbGVcclxuICAgICAgICAgKGFuZC1rLWdlbiByZXEpXHJcbiAgICAgICAgIChvci1rLWdlbiBvcHQpXHJcbiAgICAgICAgIChhbmQtay1nZW4gcmVxLXVuKVxyXG4gICAgICAgICAob3Itay1nZW4gb3B0LXVuKSlcclxuICAgICAgICAoZm5cclxuICAgICAgICAgW1tyZXEta3Mgb3B0LWtzIHJlcS11bi1rcyBvcHQtdW4ta3NdXVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbcWtzXHJcbiAgICAgICAgICAgKGZsYXR0ZW4gKGNvbmNhdCByZXEta3Mgb3B0LWtzKSlcclxuICAgICAgICAgICB1bnFrc1xyXG4gICAgICAgICAgIChtYXBcclxuICAgICAgICAgICAgKGNvbXAga2V5d29yZCBuYW1lKVxyXG4gICAgICAgICAgICAoZmxhdHRlbiAoY29uY2F0IHJlcS11bi1rcyBvcHQtdW4ta3MpKSldXHJcbiAgICAgICAgICAoLT4+XHJcbiAgICAgICAgICAgKGludG8gcmVxcyBvcHRzKVxyXG4gICAgICAgICAgIChmaWx0ZXJcclxuICAgICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgICAgW3AxX180ODk0MSNdXHJcbiAgICAgICAgICAgICAoKHNldCAoY29uY2F0IHFrcyB1bnFrcykpIChmaXJzdCBwMV9fNDg5NDEjKSkpKVxyXG4gICAgICAgICAgIChhcHBseSBjb25jYXQpXHJcbiAgICAgICAgICAgKGFwcGx5IGdlbi9oYXNoLW1hcCkpKSkpKSkpKVxyXG4gICAod2l0aC1nZW4qIFtfIGdmbl0gKG1hcC1zcGVjLWltcGwgKGFzc29jIGFyZ20gOmdmbiBnZm4pKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY29uc1xyXG4gICAgICdjbGpzLnNwZWMuYWxwaGEva2V5c1xyXG4gICAgIChjb25kLT5cclxuICAgICAgW11cclxuICAgICAgcmVxXHJcbiAgICAgIChjb25qIDpyZXEgcmVxKVxyXG4gICAgICBvcHRcclxuICAgICAgKGNvbmogOm9wdCBvcHQpXHJcbiAgICAgIHJlcS11blxyXG4gICAgICAoY29uaiA6cmVxLXVuIHJlcS11bilcclxuICAgICAgb3B0LXVuXHJcbiAgICAgIChjb25qIDpvcHQtdW4gb3B0LXVuKSkpKSkpKVxyXG4ifSB7OnN5bSBleHBsYWluLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHRoYXQgZmFpbHMgdG8gY29uZm9ybSwgcHJpbnRzIGFuIGV4cGxhbmF0aW9uIHRvICpvdXQqLiIsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGV4cGxhaW5cclxuIFwiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHRoYXQgZmFpbHMgdG8gY29uZm9ybSwgcHJpbnRzIGFuIGV4cGxhbmF0aW9uIHRvICpvdXQqLlwiXHJcbiBbc3BlYyB4XVxyXG4gKGV4cGxhaW4tb3V0IChleHBsYWluLWRhdGEgc3BlYyB4KSkpXHJcbiJ9IHs6c3ltIHdpdGgtZ2VuKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIGdmbl0pfSwgOnByb3RvY29sIFNwZWN9IHs6c3ltIG9yLXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnb3InIiwgOmFyZ2xpc3RzIChba2V5cyBmb3JtcyBwcmVkcyBnZm5dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBvci1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdvcidcIlxyXG4gW2tleXMgZm9ybXMgcHJlZHMgZ2ZuXVxyXG4gKGxldFxyXG4gIFtpZFxyXG4gICAocmFuZG9tLXV1aWQpXHJcbiAgIGtwc1xyXG4gICAoemlwbWFwIGtleXMgcHJlZHMpXHJcbiAgIHNwZWNzXHJcbiAgIChkZWxheSAobWFwdiBzcGVjaXplIHByZWRzIGZvcm1zKSlcclxuICAgY2Zvcm1cclxuICAgKGNhc2VcclxuICAgIChjb3VudCBwcmVkcylcclxuICAgIDJcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjcyByZXQgKGNvbmZvcm0qIChzcGVjcyAwKSB4KV1cclxuICAgICAgKGlmXHJcbiAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtyZXQgKGNvbmZvcm0qIChzcGVjcyAxKSB4KV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKGludmFsaWQ/IHJldClcclxuICAgICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAgICh0YWdnZWQtcmV0IChrZXlzIDEpIHJldCkpKVxyXG4gICAgICAgKHRhZ2dlZC1yZXQgKGtleXMgMCkgcmV0KSkpKVxyXG4gICAgM1xyXG4gICAgKGZuXHJcbiAgICAgW3hdXHJcbiAgICAgKGxldFxyXG4gICAgICBbc3BlY3MgQHNwZWNzIHJldCAoY29uZm9ybSogKHNwZWNzIDApIHgpXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpbnZhbGlkPyByZXQpXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW3JldCAoY29uZm9ybSogKHNwZWNzIDEpIHgpXVxyXG4gICAgICAgIChpZlxyXG4gICAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgICAobGV0XHJcbiAgICAgICAgICBbcmV0IChjb25mb3JtKiAoc3BlY3MgMikgeCldXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAgICh0YWdnZWQtcmV0IChrZXlzIDIpIHJldCkpKVxyXG4gICAgICAgICAodGFnZ2VkLXJldCAoa2V5cyAxKSByZXQpKSlcclxuICAgICAgICh0YWdnZWQtcmV0IChrZXlzIDApIHJldCkpKSlcclxuICAgIChmblxyXG4gICAgIFt4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjc11cclxuICAgICAgKGxvb3BcclxuICAgICAgIFtpIDBdXHJcbiAgICAgICAoaWZcclxuICAgICAgICAoPCBpIChjb3VudCBzcGVjcykpXHJcbiAgICAgICAgKGxldFxyXG4gICAgICAgICBbc3BlYyAoc3BlY3MgaSldXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtyZXQgKGNvbmZvcm0qIHNwZWMgeCldXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoaW52YWxpZD8gcmV0KVxyXG4gICAgICAgICAgIChyZWN1ciAoaW5jIGkpKVxyXG4gICAgICAgICAgICh0YWdnZWQtcmV0IChrZXlzIGkpIHJldCkpKSlcclxuICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKSkpKV1cclxuICAocmVpZnlcclxuICAgU3BlY2l6ZVxyXG4gICAoc3BlY2l6ZSogW3NdIHMpXHJcbiAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICBTcGVjXHJcbiAgIChjb25mb3JtKiBbXyB4XSAoY2Zvcm0geCkpXHJcbiAgICh1bmZvcm0qIFtfIFtrIHhdXSAodW5mb3JtIChrcHMgaykgeCkpXHJcbiAgIChleHBsYWluKlxyXG4gICAgW3RoaXMgcGF0aCB2aWEgaW4geF1cclxuICAgICh3aGVuLW5vdFxyXG4gICAgIChwdmFsaWQ/IHRoaXMgeClcclxuICAgICAoYXBwbHlcclxuICAgICAgY29uY2F0XHJcbiAgICAgIChtYXBcclxuICAgICAgIChmblxyXG4gICAgICAgIFtrIGZvcm0gcHJlZF1cclxuICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgKHB2YWxpZD8gcHJlZCB4KVxyXG4gICAgICAgICAoZXhwbGFpbi0xIGZvcm0gcHJlZCAoY29uaiBwYXRoIGspIHZpYSBpbiB4KSkpXHJcbiAgICAgICBrZXlzXHJcbiAgICAgICBmb3Jtc1xyXG4gICAgICAgcHJlZHMpKSkpXHJcbiAgIChnZW4qXHJcbiAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgKGlmXHJcbiAgICAgZ2ZuXHJcbiAgICAgKGdmbilcclxuICAgICAobGV0XHJcbiAgICAgIFtnZW5cclxuICAgICAgIChmblxyXG4gICAgICAgIFtrIHAgZl1cclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtybWFwIChpbmNrIHJtYXAgaWQpXVxyXG4gICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgIChyZWN1ci1saW1pdD8gcm1hcCBpZCBwYXRoIGspXHJcbiAgICAgICAgICAoZ2VuL2RlbGF5IChnZW5zdWIgcCBvdmVycmlkZXMgKGNvbmogcGF0aCBrKSBybWFwIGYpKSkpKVxyXG4gICAgICAgZ3NcclxuICAgICAgIChyZW1vdmUgbmlsPyAobWFwIGdlbiBrZXlzIHByZWRzIGZvcm1zKSldXHJcbiAgICAgICh3aGVuLW5vdCAoZW1wdHk/IGdzKSAoZ2VuL29uZS1vZiBncykpKSkpXHJcbiAgICh3aXRoLWdlbiogW18gZ2ZuXSAob3Itc3BlYy1pbXBsIGtleXMgZm9ybXMgcHJlZHMgZ2ZuKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL29yKVxyXG4gICAgICAgKG1hcGNhdCB2ZWN0b3Iga2V5cyBmb3JtcykpKSkpKSkpXHJcbiJ9IHs6c3ltICpmc3BlYy1pdGVyYXRpb25zKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICpmc3BlYy1pdGVyYXRpb25zKlxyXG4gXCJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIGFub255bW91cyBmbiBzcGVjaWZpZWQgYnkgZnNwZWMgd2lsbCBiZSAoZ2VuZXJhdGl2ZWx5KSB0ZXN0ZWQgZHVyaW5nIGNvbmZvcm1cIlxyXG4gMjEpXHJcbiJ9IHs6c3ltIFNwZWMsIDptZXRhIHs6ZG9jIG5pbH0sIDptZXRob2RzIChjb25mb3JtKiBkZXNjcmliZSogZXhwbGFpbiogZ2VuKiB1bmZvcm0qIHdpdGgtZ2VuKil9IHs6c3ltIHVuZm9ybSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSBjcmVhdGVkIGJ5IG9yIGNvbXBsaWFudCB3aXRoIGEgY2FsbCB0b1xuICAnY29uZm9ybScgd2l0aCB0aGUgc2FtZSBzcGVjLCByZXR1cm5zIGEgdmFsdWUgd2l0aCBhbGwgY29uZm9ybVxuICAgZGVzdHJ1Y3R1cmluZyB1bmRvbmUuIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gdW5mb3JtXHJcbiBcIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSBjcmVhdGVkIGJ5IG9yIGNvbXBsaWFudCB3aXRoIGEgY2FsbCB0b1xcbiAgJ2NvbmZvcm0nIHdpdGggdGhlIHNhbWUgc3BlYywgcmV0dXJucyBhIHZhbHVlIHdpdGggYWxsIGNvbmZvcm1cXG4gICBkZXN0cnVjdHVyaW5nIHVuZG9uZS5cIlxyXG4gW3NwZWMgeF1cclxuICh1bmZvcm0qIChzcGVjaXplIHNwZWMpIHgpKVxyXG4ifSB7OnN5bSB2YWxpZD8sIDptZXRhIHs6ZG9jICJIZWxwZXIgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHZhbGlkIGZvciBzcGVjLiIsIDphcmdsaXN0cyBbW3NwZWMgeF0gW3NwZWMgeCBmb3JtXV19LCA6c291cmNlICIoZGVmblxyXG4gdmFsaWQ/XHJcbiBcIkhlbHBlciBmdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgdmFsaWQgZm9yIHNwZWMuXCJcclxuIChbc3BlYyB4XVxyXG4gIChsZXQgW3NwZWMgKHNwZWNpemUgc3BlYyldIChub3QgKGludmFsaWQ/IChjb25mb3JtKiBzcGVjIHgpKSkpKVxyXG4gKFtzcGVjIHggZm9ybV1cclxuICAobGV0IFtzcGVjIChzcGVjaXplIHNwZWMgZm9ybSldIChub3QgKGludmFsaWQ/IChjb25mb3JtKiBzcGVjIHgpKSkpKSlcclxuIn0gezpzeW0gZ2VuLCA6bWV0YSB7OmRvYyAiR2l2ZW4gYSBzcGVjLCByZXR1cm5zIHRoZSBnZW5lcmF0b3IgZm9yIGl0LCBvciB0aHJvd3MgaWYgbm9uZSBjYW5cbiAgYmUgY29uc3RydWN0ZWQuIE9wdGlvbmFsbHkgYW4gb3ZlcnJpZGVzIG1hcCBjYW4gYmUgcHJvdmlkZWQgd2hpY2hcbiAgc2hvdWxkIG1hcCBzcGVjIG5hbWVzIG9yIHBhdGhzICh2ZWN0b3JzIG9mIGtleXdvcmRzKSB0byBuby1hcmdcbiAgZ2VuZXJhdG9yLWNyZWF0aW5nIGZucy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGdlbmVyYXRvcnMgYXQgdGhvc2VcbiAgbmFtZXMvcGF0aHMuIE5vdGUgdGhhdCBwYXJlbnQgZ2VuZXJhdG9yIChpbiB0aGUgc3BlYyBvciBvdmVycmlkZXNcbiAgbWFwKSB3aWxsIHN1cGVyc2VkZSB0aG9zZSBvZiBhbnkgc3VidHJlZXMuIEEgZ2VuZXJhdG9yIGZvciBhIHJlZ2V4XG4gIG9wIG11c3QgYWx3YXlzIHJldHVybiBhIHNlcXVlbnRpYWwgY29sbGVjdGlvbiAoaS5lLiBhIGdlbmVyYXRvciBmb3JcbiAgcy8/IHNob3VsZCByZXR1cm4gZWl0aGVyIGFuIGVtcHR5IHNlcXVlbmNlL3ZlY3RvciBvciBhXG4gIHNlcXVlbmNlL3ZlY3RvciB3aXRoIG9uZSBpdGVtIGluIGl0KSIsIDphcmdsaXN0cyBbW3NwZWNdIFtzcGVjIG92ZXJyaWRlc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdlblxyXG4gXCJHaXZlbiBhIHNwZWMsIHJldHVybnMgdGhlIGdlbmVyYXRvciBmb3IgaXQsIG9yIHRocm93cyBpZiBub25lIGNhblxcbiAgYmUgY29uc3RydWN0ZWQuIE9wdGlvbmFsbHkgYW4gb3ZlcnJpZGVzIG1hcCBjYW4gYmUgcHJvdmlkZWQgd2hpY2hcXG4gIHNob3VsZCBtYXAgc3BlYyBuYW1lcyBvciBwYXRocyAodmVjdG9ycyBvZiBrZXl3b3JkcykgdG8gbm8tYXJnXFxuICBnZW5lcmF0b3ItY3JlYXRpbmcgZm5zLiBUaGVzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2VuZXJhdG9ycyBhdCB0aG9zZVxcbiAgbmFtZXMvcGF0aHMuIE5vdGUgdGhhdCBwYXJlbnQgZ2VuZXJhdG9yIChpbiB0aGUgc3BlYyBvciBvdmVycmlkZXNcXG4gIG1hcCkgd2lsbCBzdXBlcnNlZGUgdGhvc2Ugb2YgYW55IHN1YnRyZWVzLiBBIGdlbmVyYXRvciBmb3IgYSByZWdleFxcbiAgb3AgbXVzdCBhbHdheXMgcmV0dXJuIGEgc2VxdWVudGlhbCBjb2xsZWN0aW9uIChpLmUuIGEgZ2VuZXJhdG9yIGZvclxcbiAgcy8/IHNob3VsZCByZXR1cm4gZWl0aGVyIGFuIGVtcHR5IHNlcXVlbmNlL3ZlY3RvciBvciBhXFxuICBzZXF1ZW5jZS92ZWN0b3Igd2l0aCBvbmUgaXRlbSBpbiBpdClcIlxyXG4gKFtzcGVjXSAoZ2VuIHNwZWMgbmlsKSlcclxuIChbc3BlYyBvdmVycmlkZXNdXHJcbiAgKGdlbnN1YlxyXG4gICBzcGVjXHJcbiAgIG92ZXJyaWRlc1xyXG4gICBbXVxyXG4gICB7OmNsanMuc3BlYy5hbHBoYS9yZWN1cnNpb24tbGltaXQgKnJlY3Vyc2lvbi1saW1pdCp9XHJcbiAgIHNwZWMpKSlcclxuIn0gezpzeW0gbm9uY29uZm9ybWluZywgOm1ldGEgezpkb2MgInRha2VzIGEgc3BlYyBhbmQgcmV0dXJucyBhIHNwZWMgdGhhdCBoYXMgdGhlIHNhbWUgcHJvcGVydGllcyBleGNlcHRcbiAgJ2NvbmZvcm0nIHJldHVybnMgdGhlIG9yaWdpbmFsIChub3QgdGhlIGNvbmZvcm1lZCkgdmFsdWUuIE5vdGUsIHdpbGwgc3BlY2l6ZSByZWdleCBvcHMuIiwgOmFyZ2xpc3RzIChbc3BlY10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIG5vbmNvbmZvcm1pbmdcclxuIFwidGFrZXMgYSBzcGVjIGFuZCByZXR1cm5zIGEgc3BlYyB0aGF0IGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGV4Y2VwdFxcbiAgJ2NvbmZvcm0nIHJldHVybnMgdGhlIG9yaWdpbmFsIChub3QgdGhlIGNvbmZvcm1lZCkgdmFsdWUuIE5vdGUsIHdpbGwgc3BlY2l6ZSByZWdleCBvcHMuXCJcclxuIFtzcGVjXVxyXG4gKGxldFxyXG4gIFtzcGVjIChkZWxheSAoc3BlY2l6ZSBzcGVjKSldXHJcbiAgKHJlaWZ5XHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSpcclxuICAgIFtfIHhdXHJcbiAgICAobGV0XHJcbiAgICAgW3JldCAoY29uZm9ybSogQHNwZWMgeCldXHJcbiAgICAgKGlmIChpbnZhbGlkPyByZXQpIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCB4KSkpXHJcbiAgICh1bmZvcm0qIFtfIHhdICh1bmZvcm0qIEBzcGVjIHgpKVxyXG4gICAoZXhwbGFpbiogW18gcGF0aCB2aWEgaW4geF0gKGV4cGxhaW4qIEBzcGVjIHBhdGggdmlhIGluIHgpKVxyXG4gICAoZ2VuKiBbXyBvdmVycmlkZXMgcGF0aCBybWFwXSAoZ2VuKiBAc3BlYyBvdmVycmlkZXMgcGF0aCBybWFwKSlcclxuICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChub25jb25mb3JtaW5nICh3aXRoLWdlbiogQHNwZWMgZ2ZuKSkpXHJcbiAgIChkZXNjcmliZSpcclxuICAgIFtfXVxyXG4gICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9ub25jb25mb3JtaW5nKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChkZXNjcmliZSogQHNwZWMpKSkpKSkpKSlcclxuIn0gezpzeW0gdW5mb3JtKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIHldKX0sIDpwcm90b2NvbCBTcGVjfSB7OnN5bSBhYmJyZXYsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFiYnJldlxyXG4gW2Zvcm1dXHJcbiAoY29uZFxyXG4gIChzZXE/IGZvcm0pXHJcbiAgKHdhbGsvcG9zdHdhbGtcclxuICAgKGZuXHJcbiAgICBbZm9ybV1cclxuICAgIChjb25kXHJcbiAgICAgKGMvYW5kIChzeW1ib2w/IGZvcm0pIChuYW1lc3BhY2UgZm9ybSkpXHJcbiAgICAgKC0+IGZvcm0gbmFtZSBzeW1ib2wpXHJcbiAgICAgKGMvYW5kIChzZXE/IGZvcm0pICg9ICdmbiAoZmlyc3QgZm9ybSkpICg9ICdbJV0gKHNlY29uZCBmb3JtKSkpXHJcbiAgICAgKGxhc3QgZm9ybSlcclxuICAgICA6ZWxzZVxyXG4gICAgIGZvcm0pKVxyXG4gICBmb3JtKVxyXG4gIChjL2FuZCAoc3ltYm9sPyBmb3JtKSAobmFtZXNwYWNlIGZvcm0pKVxyXG4gICgtPiBmb3JtIG5hbWUgc3ltYm9sKVxyXG4gIDplbHNlXHJcbiAgZm9ybSkpXHJcbiJ9IHs6c3ltIHJlZ2V4PywgOm1ldGEgezpkb2MgInJldHVybnMgeCBpZiB4IGlzIGEgKGNsanMuc3BlYy5hbHBoYSkgcmVnZXggb3AsIGVsc2UgbG9naWNhbCBmYWxzZSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWdleD9cclxuIFwicmV0dXJucyB4IGlmIHggaXMgYSAoY2xqcy5zcGVjLmFscGhhKSByZWdleCBvcCwgZWxzZSBsb2dpY2FsIGZhbHNlXCJcclxuIFt4XVxyXG4gKGMvYW5kICg6Y2xqcy5zcGVjLmFscGhhL29wIHgpIHgpKVxyXG4ifSB7OnN5bSBpbnQtaW4tcmFuZ2U/LCA6bWV0YSB7OmRvYyAiUmV0dXJuIHRydWUgaWYgc3RhcnQgPD0gdmFsLCB2YWwgPCBlbmQgYW5kIHZhbCBpcyBhIGZpeGVkXG4gIHByZWNpc2lvbiBpbnRlZ2VyLiIsIDphcmdsaXN0cyAoW3N0YXJ0IGVuZCB2YWxdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnQtaW4tcmFuZ2U/XHJcbiBcIlJldHVybiB0cnVlIGlmIHN0YXJ0IDw9IHZhbCwgdmFsIDwgZW5kIGFuZCB2YWwgaXMgYSBmaXhlZFxcbiAgcHJlY2lzaW9uIGludGVnZXIuXCJcclxuIFtzdGFydCBlbmQgdmFsXVxyXG4gKGNvbmRcclxuICAoaW50ZWdlcj8gdmFsKVxyXG4gIChjL2FuZCAoPD0gc3RhcnQgdmFsKSAoPCB2YWwgZW5kKSlcclxuICAoaW5zdGFuY2U/IGdvb2cubWF0aC5Mb25nIHZhbClcclxuICAoYy9hbmQgKC5sZXNzVGhhbk9yRXF1YWwgc3RhcnQgdmFsKSAoLmxlc3NUaGFuIHZhbCBlbmQpKVxyXG4gIChpbnN0YW5jZT8gZ29vZy5tYXRoLkludGVnZXIgdmFsKVxyXG4gIChjL2FuZCAoLmxlc3NUaGFuT3JFcXVhbCBzdGFydCB2YWwpICgubGVzc1RoYW4gdmFsIGVuZCkpXHJcbiAgOmVsc2VcclxuICBmYWxzZSkpXHJcbiJ9IHs6c3ltIHNwZWM/LCA6bWV0YSB7OmRvYyAicmV0dXJucyB4IGlmIHggaXMgYSBzcGVjIG9iamVjdCwgZWxzZSBsb2dpY2FsIGZhbHNlIiwgOmFyZ2xpc3RzIChbeF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHNwZWM/XHJcbiBcInJldHVybnMgeCBpZiB4IGlzIGEgc3BlYyBvYmplY3QsIGVsc2UgbG9naWNhbCBmYWxzZVwiXHJcbiBbeF1cclxuICh3aGVuIChpbXBsZW1lbnRzPyBTcGVjIHgpIHgpKVxyXG4ifSB7OnN5bSByZWdpc3RyeSwgOm1ldGEgezpkb2MgInJldHVybnMgdGhlIHJlZ2lzdHJ5IG1hcCwgcHJlZmVyICdnZXQtc3BlYycgdG8gbG9va3VwIGEgc3BlYyBieSBuYW1lIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVnaXN0cnlcclxuIFwicmV0dXJucyB0aGUgcmVnaXN0cnkgbWFwLCBwcmVmZXIgJ2dldC1zcGVjJyB0byBsb29rdXAgYSBzcGVjIGJ5IG5hbWVcIlxyXG4gW11cclxuIEByZWdpc3RyeS1yZWYpXHJcbiJ9IHs6c3ltIHJlcCtpbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcrJyIsIDphcmdsaXN0cyAoW2Zvcm0gcF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlcCtpbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnKydcIlxyXG4gW2Zvcm0gcF1cclxuIChwY2F0KlxyXG4gIHs6cHMgW3AgKHJlcCogcCBwIFtdIHRydWUgZm9ybSldLFxyXG4gICA6Zm9ybXNcclxuICAgKGNsb2p1cmUuY29yZS92ZWNcclxuICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IGZvcm0pXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgICAgIChjbG9qdXJlLmNvcmUvc2VxXHJcbiAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhLyopXHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IGZvcm0pKSkpKSkpKSksXHJcbiAgIDpyZXQgW10sXHJcbiAgIDpyZXArIGZvcm19KSlcclxuIn0gezpzeW0gZXhlcmNpc2UsIDptZXRhIHs6ZG9jICJnZW5lcmF0ZXMgYSBudW1iZXIgKGRlZmF1bHQgMTApIG9mIHZhbHVlcyBjb21wYXRpYmxlIHdpdGggc3BlYyBhbmQgbWFwcyBjb25mb3JtIG92ZXIgdGhlbSxcbiAgcmV0dXJuaW5nIGEgc2VxdWVuY2Ugb2YgW3ZhbCBjb25mb3JtZWQtdmFsXSB0dXBsZXMuIE9wdGlvbmFsbHkgdGFrZXNcbiAgYSBnZW5lcmF0b3Igb3ZlcnJpZGVzIG1hcCBhcyBwZXIgZ2VuIiwgOmFyZ2xpc3RzIFtbc3BlY10gW3NwZWMgbl0gW3NwZWMgbiBvdmVycmlkZXNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleGVyY2lzZVxyXG4gXCJnZW5lcmF0ZXMgYSBudW1iZXIgKGRlZmF1bHQgMTApIG9mIHZhbHVlcyBjb21wYXRpYmxlIHdpdGggc3BlYyBhbmQgbWFwcyBjb25mb3JtIG92ZXIgdGhlbSxcXG4gIHJldHVybmluZyBhIHNlcXVlbmNlIG9mIFt2YWwgY29uZm9ybWVkLXZhbF0gdHVwbGVzLiBPcHRpb25hbGx5IHRha2VzXFxuICBhIGdlbmVyYXRvciBvdmVycmlkZXMgbWFwIGFzIHBlciBnZW5cIlxyXG4gKFtzcGVjXSAoZXhlcmNpc2Ugc3BlYyAxMCkpXHJcbiAoW3NwZWMgbl0gKGV4ZXJjaXNlIHNwZWMgbiBuaWwpKVxyXG4gKFtzcGVjIG4gb3ZlcnJpZGVzXVxyXG4gIChtYXBcclxuICAgKGZuKiBbcDFfXzQ4OTcyI10gKHZlY3RvciBwMV9fNDg5NzIjIChjb25mb3JtIHNwZWMgcDFfXzQ4OTcyIykpKVxyXG4gICAoZ2VuL3NhbXBsZSAoZ2VuIHNwZWMgb3ZlcnJpZGVzKSBuKSkpKVxyXG4ifSB7OnN5bSBleHBsYWluLWRhdGEsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUgeCB3aGljaCBvdWdodCB0byBjb25mb3JtLCByZXR1cm5zIG5pbCBpZiB4XG4gIGNvbmZvcm1zLCBlbHNlIGEgbWFwIHdpdGggYXQgbGVhc3QgdGhlIGtleSA6OnByb2JsZW1zIHdob3NlIHZhbHVlIGlzXG4gIGEgY29sbGVjdGlvbiBvZiBwcm9ibGVtLW1hcHMsIHdoZXJlIHByb2JsZW0tbWFwIGhhcyBhdCBsZWFzdCA6cGF0aCA6cHJlZCBhbmQgOnZhbFxuICBrZXlzIGRlc2NyaWJpbmcgdGhlIHByZWRpY2F0ZSBhbmQgdGhlIHZhbHVlIHRoYXQgZmFpbGVkIGF0IHRoYXRcbiAgcGF0aC4iLCA6YXJnbGlzdHMgKFtzcGVjIHhdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBleHBsYWluLWRhdGFcclxuIFwiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHggd2hpY2ggb3VnaHQgdG8gY29uZm9ybSwgcmV0dXJucyBuaWwgaWYgeFxcbiAgY29uZm9ybXMsIGVsc2UgYSBtYXAgd2l0aCBhdCBsZWFzdCB0aGUga2V5IDo6cHJvYmxlbXMgd2hvc2UgdmFsdWUgaXNcXG4gIGEgY29sbGVjdGlvbiBvZiBwcm9ibGVtLW1hcHMsIHdoZXJlIHByb2JsZW0tbWFwIGhhcyBhdCBsZWFzdCA6cGF0aCA6cHJlZCBhbmQgOnZhbFxcbiAga2V5cyBkZXNjcmliaW5nIHRoZSBwcmVkaWNhdGUgYW5kIHRoZSB2YWx1ZSB0aGF0IGZhaWxlZCBhdCB0aGF0XFxuICBwYXRoLlwiXHJcbiBbc3BlYyB4XVxyXG4gKGV4cGxhaW4tZGF0YSpcclxuICBzcGVjXHJcbiAgW11cclxuICAoaWYtbGV0IFtuYW1lIChzcGVjLW5hbWUgc3BlYyldIFtuYW1lXSBbXSlcclxuICBbXVxyXG4gIHgpKVxyXG4ifSB7OnN5bSB0dXBsZS1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICd0dXBsZSciLCA6YXJnbGlzdHMgW1tmb3JtcyBwcmVkc10gW2Zvcm1zIHByZWRzIGdmbl1dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHR1cGxlLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICd0dXBsZSdcIlxyXG4gKFtmb3JtcyBwcmVkc10gKHR1cGxlLWltcGwgZm9ybXMgcHJlZHMgbmlsKSlcclxuIChbZm9ybXMgcHJlZHMgZ2ZuXVxyXG4gIChsZXRcclxuICAgW3NwZWNzIChkZWxheSAobWFwdiBzcGVjaXplIHByZWRzIGZvcm1zKSkgY250IChjb3VudCBwcmVkcyldXHJcbiAgIChyZWlmeVxyXG4gICAgU3BlY2l6ZVxyXG4gICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgICBTcGVjXHJcbiAgICAoY29uZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3NwZWNzIEBzcGVjc11cclxuICAgICAgKGlmLW5vdFxyXG4gICAgICAgKGMvYW5kICh2ZWN0b3I/IHgpICg9IChjb3VudCB4KSBjbnQpKVxyXG4gICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkXHJcbiAgICAgICAobG9vcFxyXG4gICAgICAgIFtyZXQgeCBpIDBdXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgICg9IGkgY250KVxyXG4gICAgICAgICByZXRcclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3YgKHggaSkgY3YgKGNvbmZvcm0qIChzcGVjcyBpKSB2KV1cclxuICAgICAgICAgIChpZlxyXG4gICAgICAgICAgIChpbnZhbGlkPyBjdilcclxuICAgICAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgICAgICAocmVjdXJcclxuICAgICAgICAgICAgKGlmIChpZGVudGljYWw/IGN2IHYpIHJldCAoYXNzb2MgcmV0IGkgY3YpKVxyXG4gICAgICAgICAgICAoaW5jIGkpKSkpKSkpKSlcclxuICAgICh1bmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAoYXNzZXJ0IChjL2FuZCAodmVjdG9yPyB4KSAoPSAoY291bnQgeCkgKGNvdW50IHByZWRzKSkpKVxyXG4gICAgIChsb29wXHJcbiAgICAgIFtyZXQgeCBpIDBdXHJcbiAgICAgIChpZlxyXG4gICAgICAgKD0gaSAoY291bnQgeCkpXHJcbiAgICAgICByZXRcclxuICAgICAgIChsZXRcclxuICAgICAgICBbY3YgKHggaSkgdiAodW5mb3JtIChwcmVkcyBpKSBjdildXHJcbiAgICAgICAgKHJlY3VyIChpZiAoaWRlbnRpY2FsPyBjdiB2KSByZXQgKGFzc29jIHJldCBpIHYpKSAoaW5jIGkpKSkpKSlcclxuICAgIChleHBsYWluKlxyXG4gICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAgKGNvbmRcclxuICAgICAgKG5vdCAodmVjdG9yPyB4KSlcclxuICAgICAgW3s6cGF0aCBwYXRoLFxyXG4gICAgICAgIDpwcmVkICdjbG9qdXJlLmNvcmUvdmVjdG9yPyxcclxuICAgICAgICA6dmFsIHgsXHJcbiAgICAgICAgOnZpYSB2aWEsXHJcbiAgICAgICAgOmluIGlufV1cclxuICAgICAgKG5vdD0gKGNvdW50IHgpIChjb3VudCBwcmVkcykpXHJcbiAgICAgIFt7OnBhdGggcGF0aCxcclxuICAgICAgICA6cHJlZFxyXG4gICAgICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbG9qdXJlLmNvcmUvPSlcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3RcclxuICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2Nsb2p1cmUuY29yZS9jb3VudClcclxuICAgICAgICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICclKSkpKSlcclxuICAgICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgKGNvdW50IHByZWRzKSkpKSksXHJcbiAgICAgICAgOnZhbCB4LFxyXG4gICAgICAgIDp2aWEgdmlhLFxyXG4gICAgICAgIDppbiBpbn1dXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIChhcHBseVxyXG4gICAgICAgY29uY2F0XHJcbiAgICAgICAobWFwXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtpIGZvcm0gcHJlZF1cclxuICAgICAgICAgKGxldFxyXG4gICAgICAgICAgW3YgKHggaSldXHJcbiAgICAgICAgICAod2hlbi1ub3RcclxuICAgICAgICAgICAocHZhbGlkPyBwcmVkIHYpXHJcbiAgICAgICAgICAgKGV4cGxhaW4tMSBmb3JtIHByZWQgKGNvbmogcGF0aCBpKSB2aWEgKGNvbmogaW4gaSkgdikpKSlcclxuICAgICAgICAocmFuZ2UgKGNvdW50IHByZWRzKSlcclxuICAgICAgICBmb3Jtc1xyXG4gICAgICAgIHByZWRzKSkpKVxyXG4gICAgKGdlbipcclxuICAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgIChpZlxyXG4gICAgICBnZm5cclxuICAgICAgKGdmbilcclxuICAgICAgKGxldFxyXG4gICAgICAgW2dlblxyXG4gICAgICAgIChmbiBbaSBwIGZdIChnZW5zdWIgcCBvdmVycmlkZXMgKGNvbmogcGF0aCBpKSBybWFwIGYpKVxyXG4gICAgICAgIGdzXHJcbiAgICAgICAgKG1hcCBnZW4gKHJhbmdlIChjb3VudCBwcmVkcykpIHByZWRzIGZvcm1zKV1cclxuICAgICAgICh3aGVuIChldmVyeT8gaWRlbnRpdHkgZ3MpIChhcHBseSBnZW4vdHVwbGUgZ3MpKSkpKVxyXG4gICAgKHdpdGgtZ2VuKiBbXyBnZm5dICh0dXBsZS1pbXBsIGZvcm1zIHByZWRzIGdmbikpXHJcbiAgICAoZGVzY3JpYmUqXHJcbiAgICAgW19dXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAoY2xvanVyZS5jb3JlL3NlcVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS90dXBsZSlcclxuICAgICAgICBmb3JtcykpKSkpKSkpXHJcbiJ9IHs6c3ltIG11bHRpLXNwZWMtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnbXVsdGktc3BlYyciLCA6YXJnbGlzdHMgW1tmb3JtIG1tdmFyIHJldGFnXSBbZm9ybSBtbXZhciByZXRhZyBnZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBtdWx0aS1zcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdtdWx0aS1zcGVjJ1wiXHJcbiAoW2Zvcm0gbW12YXIgcmV0YWddIChtdWx0aS1zcGVjLWltcGwgZm9ybSBtbXZhciByZXRhZyBuaWwpKVxyXG4gKFtmb3JtIG1tdmFyIHJldGFnIGdmbl1cclxuICAobGV0XHJcbiAgIFtpZFxyXG4gICAgKHJhbmRvbS11dWlkKVxyXG4gICAgcHJlZHhcclxuICAgIChmbipcclxuICAgICBbcDFfXzQ4OTQyI11cclxuICAgICAobGV0XHJcbiAgICAgIFttbSBAbW12YXJdXHJcbiAgICAgIChjL2FuZFxyXG4gICAgICAgKC1nZXQtbWV0aG9kIG1tICgoLWRpc3BhdGNoLWZuIG1tKSBwMV9fNDg5NDIjKSlcclxuICAgICAgIChtbSBwMV9fNDg5NDIjKSkpKVxyXG4gICAgZHZhbFxyXG4gICAgKGZuKiBbcDFfXzQ4OTQzI10gKCgtZGlzcGF0Y2gtZm4gQG1tdmFyKSBwMV9fNDg5NDMjKSlcclxuICAgIHRhZ1xyXG4gICAgKGlmXHJcbiAgICAgKGtleXdvcmQ/IHJldGFnKVxyXG4gICAgIChmbiogW3AxX180ODk0NCMgcDJfXzQ4OTQ1I10gKGFzc29jIHAxX180ODk0NCMgcmV0YWcgcDJfXzQ4OTQ1IykpXHJcbiAgICAgcmV0YWcpXVxyXG4gICAocmVpZnlcclxuICAgIFNwZWNpemVcclxuICAgIChzcGVjaXplKiBbc10gcylcclxuICAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICAgU3BlY1xyXG4gICAgKGNvbmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAoaWYtbGV0XHJcbiAgICAgIFtwcmVkIChwcmVkeCB4KV1cclxuICAgICAgKGR0IHByZWQgeCBmb3JtKVxyXG4gICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQpKVxyXG4gICAgKHVuZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChpZi1sZXRcclxuICAgICAgW3ByZWQgKHByZWR4IHgpXVxyXG4gICAgICAodW5mb3JtIHByZWQgeClcclxuICAgICAgKHRocm93XHJcbiAgICAgICAoanMvRXJyb3IuXHJcbiAgICAgICAgKHN0clxyXG4gICAgICAgICBcIk5vIG1ldGhvZCBvZjogXCJcclxuICAgICAgICAgZm9ybVxyXG4gICAgICAgICBcIiBmb3IgZGlzcGF0Y2ggdmFsdWU6IFwiXHJcbiAgICAgICAgIChkdmFsIHgpKSkpKSlcclxuICAgIChleHBsYWluKlxyXG4gICAgIFtfIHBhdGggdmlhIGluIHhdXHJcbiAgICAgKGxldFxyXG4gICAgICBbZHYgKGR2YWwgeCkgcGF0aCAoY29uaiBwYXRoIGR2KV1cclxuICAgICAgKGlmLWxldFxyXG4gICAgICAgW3ByZWQgKHByZWR4IHgpXVxyXG4gICAgICAgKGV4cGxhaW4tMSBmb3JtIHByZWQgcGF0aCB2aWEgaW4geClcclxuICAgICAgIFt7OnBhdGggcGF0aCxcclxuICAgICAgICAgOnByZWQgZm9ybSxcclxuICAgICAgICAgOnZhbCB4LFxyXG4gICAgICAgICA6cmVhc29uIFwibm8gbWV0aG9kXCIsXHJcbiAgICAgICAgIDp2aWEgdmlhLFxyXG4gICAgICAgICA6aW4gaW59XSkpKVxyXG4gICAgKGdlbipcclxuICAgICBbXyBvdmVycmlkZXMgcGF0aCBybWFwXVxyXG4gICAgIChpZlxyXG4gICAgICBnZm5cclxuICAgICAgKGdmbilcclxuICAgICAgKGxldFxyXG4gICAgICAgW2dlblxyXG4gICAgICAgIChmblxyXG4gICAgICAgICBbW2sgZl1dXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtwIChmIG5pbCldXHJcbiAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgW3JtYXAgKGluY2sgcm1hcCBpZCldXHJcbiAgICAgICAgICAgKHdoZW4tbm90XHJcbiAgICAgICAgICAgIChyZWN1ci1saW1pdD8gcm1hcCBpZCBwYXRoIGspXHJcbiAgICAgICAgICAgIChnZW4vZGVsYXlcclxuICAgICAgICAgICAgIChnZW4vZm1hcFxyXG4gICAgICAgICAgICAgIChmbiogW3AxX180ODk0NiNdICh0YWcgcDFfXzQ4OTQ2IyBrKSlcclxuICAgICAgICAgICAgICAoZ2Vuc3ViXHJcbiAgICAgICAgICAgICAgIHBcclxuICAgICAgICAgICAgICAgb3ZlcnJpZGVzXHJcbiAgICAgICAgICAgICAgIChjb25qIHBhdGggaylcclxuICAgICAgICAgICAgICAgcm1hcFxyXG4gICAgICAgICAgICAgICAobGlzdCAnbWV0aG9kIGZvcm0gaykpKSkpKSkpXHJcbiAgICAgICAgZ3NcclxuICAgICAgICAoLT4+XHJcbiAgICAgICAgIChtZXRob2RzIEBtbXZhcilcclxuICAgICAgICAgKHJlbW92ZSAoZm4gW1trXV0gKGludmFsaWQ/IGspKSlcclxuICAgICAgICAgKG1hcCBnZW4pXHJcbiAgICAgICAgIChyZW1vdmUgbmlsPykpXVxyXG4gICAgICAgKHdoZW4gKGV2ZXJ5PyBpZGVudGl0eSBncykgKGdlbi9vbmUtb2YgZ3MpKSkpKVxyXG4gICAgKHdpdGgtZ2VuKiBbXyBnZm5dIChtdWx0aS1zcGVjLWltcGwgZm9ybSBtbXZhciByZXRhZyBnZm4pKVxyXG4gICAgKGRlc2NyaWJlKlxyXG4gICAgIFtfXVxyXG4gICAgIChjbG9qdXJlLmNvcmUvc2VxdWVuY2VcclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgIChjbG9qdXJlLmNvcmUvY29uY2F0XHJcbiAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0ICdjbGpzLnNwZWMuYWxwaGEvbXVsdGktc3BlYylcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgZm9ybSlcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgcmV0YWcpKSkpKSkpKSlcclxuIn0gezpzeW0gY29uZm9ybSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSwgcmV0dXJucyA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQgaWYgdmFsdWUgZG9lc1xuICBub3QgbWF0Y2ggc3BlYywgZWxzZSB0aGUgKHBvc3NpYmx5IGRlc3RydWN0dXJlZCkgdmFsdWUuIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29uZm9ybVxyXG4gXCJHaXZlbiBhIHNwZWMgYW5kIGEgdmFsdWUsIHJldHVybnMgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkIGlmIHZhbHVlIGRvZXNcXG4gIG5vdCBtYXRjaCBzcGVjLCBlbHNlIHRoZSAocG9zc2libHkgZGVzdHJ1Y3R1cmVkKSB2YWx1ZS5cIlxyXG4gW3NwZWMgeF1cclxuIChjb25mb3JtKiAoc3BlY2l6ZSBzcGVjKSB4KSlcclxuIn0gezpzeW0gZ2VuKiwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIG92ZXJyaWRlcyBwYXRoIHJtYXBdKX0sIDpwcm90b2NvbCBTcGVjfSB7OnN5bSBmc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdmc3BlYyciLCA6YXJnbGlzdHMgKFthcmdzcGVjIGFmb3JtIHJldHNwZWMgcmZvcm0gZm5zcGVjIGZmb3JtIGdmbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGZzcGVjLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdmc3BlYydcIlxyXG4gW2FyZ3NwZWMgYWZvcm0gcmV0c3BlYyByZm9ybSBmbnNwZWMgZmZvcm0gZ2ZuXVxyXG4gKGxldFxyXG4gIFtzcGVjcyB7OmFyZ3MgYXJnc3BlYywgOnJldCByZXRzcGVjLCA6Zm4gZm5zcGVjfV1cclxuICAocmVpZnlcclxuICAgSUxvb2t1cFxyXG4gICAoLWxvb2t1cCBbdGhpcyBrXSAoZ2V0IHNwZWNzIGspKVxyXG4gICAoLWxvb2t1cCBbXyBrIG5vdC1mb3VuZF0gKGdldCBzcGVjcyBrIG5vdC1mb3VuZCkpXHJcbiAgIFNwZWNpemVcclxuICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAoc3BlY2l6ZSogW3MgX10gcylcclxuICAgU3BlY1xyXG4gICAoY29uZm9ybSpcclxuICAgIFtfIGZdXHJcbiAgICAoaWZcclxuICAgICAoaWZuPyBmKVxyXG4gICAgIChpZlxyXG4gICAgICAoaWRlbnRpY2FsPyBmICh2YWxpZGF0ZS1mbiBmIHNwZWNzICpmc3BlYy1pdGVyYXRpb25zKikpXHJcbiAgICAgIGZcclxuICAgICAgOmNsanMuc3BlYy5hbHBoYS9pbnZhbGlkKVxyXG4gICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpXHJcbiAgICh1bmZvcm0qIFtfIGZdIGYpXHJcbiAgIChleHBsYWluKlxyXG4gICAgW18gcGF0aCB2aWEgaW4gZl1cclxuICAgIChpZlxyXG4gICAgIChpZm4/IGYpXHJcbiAgICAgKGxldFxyXG4gICAgICBbYXJncyAodmFsaWRhdGUtZm4gZiBzcGVjcyAxMDApXVxyXG4gICAgICAoaWZcclxuICAgICAgIChpZGVudGljYWw/IGYgYXJncylcclxuICAgICAgIG5pbFxyXG4gICAgICAgKGxldFxyXG4gICAgICAgIFtyZXQgKHRyeSAoYXBwbHkgZiBhcmdzKSAoY2F0Y2gganMvRXJyb3IgdCB0KSldXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChpbnN0YW5jZT8ganMvRXJyb3IgcmV0KVxyXG4gICAgICAgICBbezpwYXRoIHBhdGgsXHJcbiAgICAgICAgICAgOnByZWQgJyhhcHBseSBmbiksXHJcbiAgICAgICAgICAgOnZhbCBhcmdzLFxyXG4gICAgICAgICAgIDpyZWFzb24gKC4tbWVzc2FnZSByZXQpLFxyXG4gICAgICAgICAgIDp2aWEgdmlhLFxyXG4gICAgICAgICAgIDppbiBpbn1dXHJcbiAgICAgICAgIChsZXRcclxuICAgICAgICAgIFtjcmV0IChkdCByZXRzcGVjIHJldCByZm9ybSldXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoaW52YWxpZD8gY3JldClcclxuICAgICAgICAgICAoZXhwbGFpbi0xIHJmb3JtIHJldHNwZWMgKGNvbmogcGF0aCA6cmV0KSB2aWEgaW4gcmV0KVxyXG4gICAgICAgICAgICh3aGVuXHJcbiAgICAgICAgICAgIGZuc3BlY1xyXG4gICAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgICBbY2FyZ3MgKGNvbmZvcm0gYXJnc3BlYyBhcmdzKV1cclxuICAgICAgICAgICAgIChleHBsYWluLTFcclxuICAgICAgICAgICAgICBmZm9ybVxyXG4gICAgICAgICAgICAgIGZuc3BlY1xyXG4gICAgICAgICAgICAgIChjb25qIHBhdGggOmZuKVxyXG4gICAgICAgICAgICAgIHZpYVxyXG4gICAgICAgICAgICAgIGluXHJcbiAgICAgICAgICAgICAgezphcmdzIGNhcmdzLCA6cmV0IGNyZXR9KSkpKSkpKSkpXHJcbiAgICAgW3s6cGF0aCBwYXRoLCA6cHJlZCAnaWZuPywgOnZhbCBmLCA6dmlhIHZpYSwgOmluIGlufV0pKVxyXG4gICAoZ2VuKlxyXG4gICAgW18gb3ZlcnJpZGVzIF8gX11cclxuICAgIChpZlxyXG4gICAgIGdmblxyXG4gICAgIChnZm4pXHJcbiAgICAgKGdlbi9yZXR1cm5cclxuICAgICAgKGZuXHJcbiAgICAgICBbJiBhcmdzXVxyXG4gICAgICAgKGFzc2VydFxyXG4gICAgICAgIChwdmFsaWQ/IGFyZ3NwZWMgYXJncylcclxuICAgICAgICAod2l0aC1vdXQtc3RyIChleHBsYWluIGFyZ3NwZWMgYXJncykpKVxyXG4gICAgICAgKGdlbi9nZW5lcmF0ZSAoZ2VuIHJldHNwZWMgb3ZlcnJpZGVzKSkpKSkpXHJcbiAgICh3aXRoLWdlbipcclxuICAgIFtfIGdmbl1cclxuICAgIChmc3BlYy1pbXBsIGFyZ3NwZWMgYWZvcm0gcmV0c3BlYyByZm9ybSBmbnNwZWMgZmZvcm0gZ2ZuKSlcclxuICAgKGRlc2NyaWJlKlxyXG4gICAgW19dXHJcbiAgICAoY2xvanVyZS5jb3JlL3NlcXVlbmNlXHJcbiAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgKGNsb2p1cmUuY29yZS9jb25jYXRcclxuICAgICAgIChjbG9qdXJlLmNvcmUvbGlzdCAnY2xqcy5zcGVjLmFscGhhL2ZzcGVjKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IDphcmdzKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IGFmb3JtKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IDpyZXQpXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgcmZvcm0pXHJcbiAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgOmZuKVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9saXN0IGZmb3JtKSkpKSkpKSlcclxuIn0gezpzeW0gKmNvbGwtY2hlY2stbGltaXQqLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZlxyXG4gKmNvbGwtY2hlY2stbGltaXQqXHJcbiBcIlRoZSBudW1iZXIgb2YgaXRlbXMgdmFsaWRhdGVkIGluIGEgY29sbGVjdGlvbiBzcGVjJ2VkIHdpdGggJ2V2ZXJ5J1wiXHJcbiAxMDEpXHJcbiJ9IHs6c3ltIGdldC1zcGVjLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBzcGVjIHJlZ2lzdGVyZWQgZm9yIGtleXdvcmQvc3ltYm9sL3ZhciBrLCBvciBuaWwuIiwgOmFyZ2xpc3RzIChba10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGdldC1zcGVjXHJcbiBcIlJldHVybnMgc3BlYyByZWdpc3RlcmVkIGZvciBrZXl3b3JkL3N5bWJvbC92YXIgaywgb3IgbmlsLlwiXHJcbiBba11cclxuIChnZXQgKHJlZ2lzdHJ5KSAoaWYgKGtleXdvcmQ/IGspIGsgKC0+c3ltIGspKSkpXHJcbiJ9IHs6c3ltIGV2ZXJ5LWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJ2V2ZXJ5JywgJ2V2ZXJ5LWt2JywgJ2NvbGwtb2YnIG9yICdtYXAtb2YnIiwgOmFyZ2xpc3RzIFtbZm9ybSBwcmVkIG9wdHNdIFtmb3JtIHByZWQge2NvbmZvcm0taW50byA6aW50bywgZGVzY3JpYmUtZm9ybSA6Y2xqcy5zcGVjLmFscGhhL2Rlc2NyaWJlLCA6a2V5cyBba2luZCA6Y2xqcy5zcGVjLmFscGhhL2tpbmQtZm9ybSBjb3VudCBtYXgtY291bnQgbWluLWNvdW50IGRpc3RpbmN0IGdlbi1tYXggOmNsanMuc3BlYy5hbHBoYS9rZm4gOmNsanMuc3BlYy5hbHBoYS9jcHJlZCBjb25mb3JtLWtleXMgOmNsanMuc3BlYy5hbHBoYS9jb25mb3JtLWFsbF0sIDpvciB7Z2VuLW1heCAyMH0sIDphcyBvcHRzfSBnZm5dXX0sIDpzb3VyY2UgIihkZWZuXHJcbiBldmVyeS1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnZXZlcnknLCAnZXZlcnkta3YnLCAnY29sbC1vZicgb3IgJ21hcC1vZidcIlxyXG4gKFtmb3JtIHByZWQgb3B0c10gKGV2ZXJ5LWltcGwgZm9ybSBwcmVkIG9wdHMgbmlsKSlcclxuIChbZm9ybVxyXG4gICBwcmVkXHJcbiAgIHtjb25mb3JtLWludG8gOmludG8sXHJcbiAgICBkZXNjcmliZS1mb3JtIDpjbGpzLnNwZWMuYWxwaGEvZGVzY3JpYmUsXHJcbiAgICA6a2V5c1xyXG4gICAgW2tpbmRcclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2tpbmQtZm9ybVxyXG4gICAgIGNvdW50XHJcbiAgICAgbWF4LWNvdW50XHJcbiAgICAgbWluLWNvdW50XHJcbiAgICAgZGlzdGluY3RcclxuICAgICBnZW4tbWF4XHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9rZm5cclxuICAgICA6Y2xqcy5zcGVjLmFscGhhL2NwcmVkXHJcbiAgICAgY29uZm9ybS1rZXlzXHJcbiAgICAgOmNsanMuc3BlYy5hbHBoYS9jb25mb3JtLWFsbF0sXHJcbiAgICA6b3Ige2dlbi1tYXggMjB9LFxyXG4gICAgOmFzIG9wdHN9XHJcbiAgIGdmbl1cclxuICAobGV0XHJcbiAgIFtnZW4taW50b1xyXG4gICAgKGlmIGNvbmZvcm0taW50byAoZW1wdHkgY29uZm9ybS1pbnRvKSAoZ2V0IGVtcHR5LWNvbGwga2luZC1mb3JtKSlcclxuICAgIHNwZWNcclxuICAgIChkZWxheSAoc3BlY2l6ZSBwcmVkKSlcclxuICAgIGNoZWNrP1xyXG4gICAgKGZuKiBbcDFfXzQ4OTU3I10gKHZhbGlkPyBAc3BlYyBwMV9fNDg5NTcjKSlcclxuICAgIGtmblxyXG4gICAgKGMvb3Iga2ZuIChmbiBbaSB2XSBpKSlcclxuICAgIGFkZGN2XHJcbiAgICAoZm4gW3JldCBpIHYgY3ZdIChjb25qIHJldCBjdikpXHJcbiAgICBjZm5zXHJcbiAgICAoZm5cclxuICAgICBbeF1cclxuICAgICAoY29uZFxyXG4gICAgICAoYy9hbmRcclxuICAgICAgICh2ZWN0b3I/IHgpXHJcbiAgICAgICAoYy9vciAobm90IGNvbmZvcm0taW50bykgKHZlY3Rvcj8gY29uZm9ybS1pbnRvKSkpXHJcbiAgICAgIFtpZGVudGl0eVxyXG4gICAgICAgKGZuIFtyZXQgaSB2IGN2XSAoaWYgKGlkZW50aWNhbD8gdiBjdikgcmV0IChhc3NvYyByZXQgaSBjdikpKVxyXG4gICAgICAgaWRlbnRpdHldXHJcbiAgICAgIChjL2FuZFxyXG4gICAgICAgKG1hcD8geClcclxuICAgICAgIChjL29yIChjL2FuZCBraW5kIChub3QgY29uZm9ybS1pbnRvKSkgKG1hcD8gY29uZm9ybS1pbnRvKSkpXHJcbiAgICAgIFsoaWYgY29uZm9ybS1rZXlzIGVtcHR5IGlkZW50aXR5KVxyXG4gICAgICAgKGZuXHJcbiAgICAgICAgW3JldCBpIHYgY3ZdXHJcbiAgICAgICAgKGlmXHJcbiAgICAgICAgIChjL2FuZCAoaWRlbnRpY2FsPyB2IGN2KSAobm90IGNvbmZvcm0ta2V5cykpXHJcbiAgICAgICAgIHJldFxyXG4gICAgICAgICAoYXNzb2MgcmV0IChudGggKGlmIGNvbmZvcm0ta2V5cyBjdiB2KSAwKSAobnRoIGN2IDEpKSkpXHJcbiAgICAgICBpZGVudGl0eV1cclxuICAgICAgKGMvb3JcclxuICAgICAgIChsaXN0PyBjb25mb3JtLWludG8pXHJcbiAgICAgICAoc2VxPyBjb25mb3JtLWludG8pXHJcbiAgICAgICAoYy9hbmQgKG5vdCBjb25mb3JtLWludG8pIChjL29yIChsaXN0PyB4KSAoc2VxPyB4KSkpKVxyXG4gICAgICBbZW1wdHkgYWRkY3YgcmV2ZXJzZV1cclxuICAgICAgOmVsc2VcclxuICAgICAgWyhmbiogW3AxX180ODk1OCNdIChlbXB0eSAoYy9vciBjb25mb3JtLWludG8gcDFfXzQ4OTU4IykpKVxyXG4gICAgICAgYWRkY3ZcclxuICAgICAgIGlkZW50aXR5XSkpXVxyXG4gICAocmVpZnlcclxuICAgIFNwZWNpemVcclxuICAgIChzcGVjaXplKiBbc10gcylcclxuICAgIChzcGVjaXplKiBbcyBfXSBzKVxyXG4gICAgU3BlY1xyXG4gICAgKGNvbmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAobGV0XHJcbiAgICAgIFtzcGVjIEBzcGVjXVxyXG4gICAgICAoY29uZFxyXG4gICAgICAgKG5vdCAoY3ByZWQgeCkpXHJcbiAgICAgICA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWRcclxuICAgICAgIGNvbmZvcm0tYWxsXHJcbiAgICAgICAobGV0XHJcbiAgICAgICAgW1tpbml0IGFkZCBjb21wbGV0ZV0gKGNmbnMgeCldXHJcbiAgICAgICAgKGxvb3BcclxuICAgICAgICAgW3JldCAoaW5pdCB4KSBpIDAgW3YgJiB2cyA6YXMgdnNlcV0gKHNlcSB4KV1cclxuICAgICAgICAgKGlmXHJcbiAgICAgICAgICB2c2VxXHJcbiAgICAgICAgICAobGV0XHJcbiAgICAgICAgICAgW2N2IChjb25mb3JtKiBzcGVjIHYpXVxyXG4gICAgICAgICAgIChpZlxyXG4gICAgICAgICAgICAoaW52YWxpZD8gY3YpXHJcbiAgICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZFxyXG4gICAgICAgICAgICAocmVjdXIgKGFkZCByZXQgaSB2IGN2KSAoaW5jIGkpIHZzKSkpXHJcbiAgICAgICAgICAoY29tcGxldGUgcmV0KSkpKVxyXG4gICAgICAgOmVsc2VcclxuICAgICAgIChpZlxyXG4gICAgICAgIChpbmRleGVkPyB4KVxyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW3N0ZXAgKG1heCAxIChsb25nICgvIChjL2NvdW50IHgpICpjb2xsLWNoZWNrLWxpbWl0KikpKV1cclxuICAgICAgICAgKGxvb3BcclxuICAgICAgICAgIFtpIDBdXHJcbiAgICAgICAgICAoaWZcclxuICAgICAgICAgICAoPj0gaSAoYy9jb3VudCB4KSlcclxuICAgICAgICAgICB4XHJcbiAgICAgICAgICAgKGlmXHJcbiAgICAgICAgICAgICh2YWxpZD8gc3BlYyAobnRoIHggaSkpXHJcbiAgICAgICAgICAgIChyZWN1ciAoYy8rIGkgc3RlcCkpXHJcbiAgICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpKSlcclxuICAgICAgICAobGV0XHJcbiAgICAgICAgIFtsaW1pdCAqY29sbC1jaGVjay1saW1pdCpdXHJcbiAgICAgICAgIChsb29wXHJcbiAgICAgICAgICBbaSAwIFt2ICYgdnMgOmFzIHZzZXFdIChzZXEgeCldXHJcbiAgICAgICAgICAoY29uZFxyXG4gICAgICAgICAgIChjL29yIChuaWw/IHZzZXEpICg9IGkgbGltaXQpKVxyXG4gICAgICAgICAgIHhcclxuICAgICAgICAgICAodmFsaWQ/IHNwZWMgdilcclxuICAgICAgICAgICAocmVjdXIgKGluYyBpKSB2cylcclxuICAgICAgICAgICA6ZWxzZVxyXG4gICAgICAgICAgIDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpKSkpKSlcclxuICAgICh1bmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAoaWZcclxuICAgICAgY29uZm9ybS1hbGxcclxuICAgICAgKGxldFxyXG4gICAgICAgW3NwZWMgQHNwZWMgW2luaXQgYWRkIGNvbXBsZXRlXSAoY2ZucyB4KV1cclxuICAgICAgIChsb29wXHJcbiAgICAgICAgW3JldCAoaW5pdCB4KSBpIDAgW3YgJiB2cyA6YXMgdnNlcV0gKHNlcSB4KV1cclxuICAgICAgICAoaWZcclxuICAgICAgICAgKD49IGkgKGMvY291bnQgeCkpXHJcbiAgICAgICAgIChjb21wbGV0ZSByZXQpXHJcbiAgICAgICAgIChyZWN1ciAoYWRkIHJldCBpIHYgKHVuZm9ybSogc3BlYyB2KSkgKGluYyBpKSB2cykpKSlcclxuICAgICAgeCkpXHJcbiAgICAoZXhwbGFpbipcclxuICAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgIChjL29yXHJcbiAgICAgIChjb2xsLXByb2JcclxuICAgICAgIHhcclxuICAgICAgIGtpbmRcclxuICAgICAgIGtpbmQtZm9ybVxyXG4gICAgICAgZGlzdGluY3RcclxuICAgICAgIGNvdW50XHJcbiAgICAgICBtaW4tY291bnRcclxuICAgICAgIG1heC1jb3VudFxyXG4gICAgICAgcGF0aFxyXG4gICAgICAgdmlhXHJcbiAgICAgICBpbilcclxuICAgICAgKGFwcGx5XHJcbiAgICAgICBjb25jYXRcclxuICAgICAgICgoaWYgY29uZm9ybS1hbGwgaWRlbnRpdHkgKHBhcnRpYWwgdGFrZSAqY29sbC1lcnJvci1saW1pdCopKVxyXG4gICAgICAgIChrZWVwXHJcbiAgICAgICAgIGlkZW50aXR5XHJcbiAgICAgICAgIChtYXBcclxuICAgICAgICAgIChmblxyXG4gICAgICAgICAgIFtpIHZdXHJcbiAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICBbayAoa2ZuIGkgdildXHJcbiAgICAgICAgICAgICh3aGVuLW5vdFxyXG4gICAgICAgICAgICAgKGNoZWNrPyB2KVxyXG4gICAgICAgICAgICAgKGxldFxyXG4gICAgICAgICAgICAgIFtwcm9iIChleHBsYWluLTEgZm9ybSBwcmVkIHBhdGggdmlhIChjb25qIGluIGspIHYpXVxyXG4gICAgICAgICAgICAgIHByb2IpKSkpXHJcbiAgICAgICAgICAocmFuZ2UpXHJcbiAgICAgICAgICB4KSkpKSkpXHJcbiAgICAoZ2VuKlxyXG4gICAgIFtfIG92ZXJyaWRlcyBwYXRoIHJtYXBdXHJcbiAgICAgKGlmXHJcbiAgICAgIGdmblxyXG4gICAgICAoZ2ZuKVxyXG4gICAgICAobGV0XHJcbiAgICAgICBbcGdlbiAoZ2Vuc3ViIHByZWQgb3ZlcnJpZGVzIHBhdGggcm1hcCBmb3JtKV1cclxuICAgICAgIChnZW4vYmluZFxyXG4gICAgICAgIChjb25kXHJcbiAgICAgICAgIGdlbi1pbnRvXHJcbiAgICAgICAgIChnZW4vcmV0dXJuIGdlbi1pbnRvKVxyXG4gICAgICAgICBraW5kXHJcbiAgICAgICAgIChnZW4vZm1hcFxyXG4gICAgICAgICAgKGZuKlxyXG4gICAgICAgICAgIFtwMV9fNDg5NTkjXVxyXG4gICAgICAgICAgIChpZiAoZW1wdHk/IHAxX180ODk1OSMpIHAxX180ODk1OSMgKGVtcHR5IHAxX180ODk1OSMpKSlcclxuICAgICAgICAgIChnZW5zdWIga2luZCBvdmVycmlkZXMgcGF0aCBybWFwIGZvcm0pKVxyXG4gICAgICAgICA6ZWxzZVxyXG4gICAgICAgICAoZ2VuL3JldHVybiBbXSkpXHJcbiAgICAgICAgKGZuXHJcbiAgICAgICAgIFtpbml0XVxyXG4gICAgICAgICAoZ2VuL2ZtYXBcclxuICAgICAgICAgIChmbipcclxuICAgICAgICAgICBbcDFfXzQ4OTYwI11cclxuICAgICAgICAgICAoaWYgKHZlY3Rvcj8gaW5pdCkgcDFfXzQ4OTYwIyAoaW50byBpbml0IHAxX180ODk2MCMpKSlcclxuICAgICAgICAgIChjb25kXHJcbiAgICAgICAgICAgZGlzdGluY3RcclxuICAgICAgICAgICAoaWZcclxuICAgICAgICAgICAgY291bnRcclxuICAgICAgICAgICAgKGdlbi92ZWN0b3ItZGlzdGluY3RcclxuICAgICAgICAgICAgIHBnZW5cclxuICAgICAgICAgICAgIHs6bnVtLWVsZW1lbnRzIGNvdW50LCA6bWF4LXRyaWVzIDEwMH0pXHJcbiAgICAgICAgICAgIChnZW4vdmVjdG9yLWRpc3RpbmN0XHJcbiAgICAgICAgICAgICBwZ2VuXHJcbiAgICAgICAgICAgICB7Om1pbi1lbGVtZW50cyAoYy9vciBtaW4tY291bnQgMCksXHJcbiAgICAgICAgICAgICAgOm1heC1lbGVtZW50c1xyXG4gICAgICAgICAgICAgIChjL29yXHJcbiAgICAgICAgICAgICAgIG1heC1jb3VudFxyXG4gICAgICAgICAgICAgICAobWF4IGdlbi1tYXggKGMvKiAyIChjL29yIG1pbi1jb3VudCAwKSkpKSxcclxuICAgICAgICAgICAgICA6bWF4LXRyaWVzIDEwMH0pKVxyXG4gICAgICAgICAgIGNvdW50XHJcbiAgICAgICAgICAgKGdlbi92ZWN0b3IgcGdlbiBjb3VudClcclxuICAgICAgICAgICAoYy9vciBtaW4tY291bnQgbWF4LWNvdW50KVxyXG4gICAgICAgICAgIChnZW4vdmVjdG9yXHJcbiAgICAgICAgICAgIHBnZW5cclxuICAgICAgICAgICAgKGMvb3IgbWluLWNvdW50IDApXHJcbiAgICAgICAgICAgIChjL29yIG1heC1jb3VudCAobWF4IGdlbi1tYXggKGMvKiAyIChjL29yIG1pbi1jb3VudCAwKSkpKSlcclxuICAgICAgICAgICA6ZWxzZVxyXG4gICAgICAgICAgIChnZW4vdmVjdG9yIHBnZW4gMCBnZW4tbWF4KSkpKSkpKSlcclxuICAgICh3aXRoLWdlbiogW18gZ2ZuXSAoZXZlcnktaW1wbCBmb3JtIHByZWQgb3B0cyBnZm4pKVxyXG4gICAgKGRlc2NyaWJlKlxyXG4gICAgIFtfXVxyXG4gICAgIChjL29yXHJcbiAgICAgIGRlc2NyaWJlLWZvcm1cclxuICAgICAgKGNsb2p1cmUuY29yZS9zZXF1ZW5jZVxyXG4gICAgICAgKGNsb2p1cmUuY29yZS9zZXFcclxuICAgICAgICAoY2xvanVyZS5jb3JlL2NvbmNhdFxyXG4gICAgICAgICAoY2xvanVyZS5jb3JlL2xpc3QgJ2NsanMuc3BlYy5hbHBoYS9ldmVyeSlcclxuICAgICAgICAgKGNsb2p1cmUuY29yZS9saXN0IChzL21yZXMgZm9ybSkpXHJcbiAgICAgICAgIChtYXBjYXQgaWRlbnRpdHkgb3B0cykpKSkpKSkpKSlcclxuIn0gezpzeW0gc3BlYy1pbXBsLCA6bWV0YSB7OmRvYyAiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdzcGVjJyIsIDphcmdsaXN0cyBbW2Zvcm0gcHJlZCBnZm4gY3ByZWQ/XSBbZm9ybSBwcmVkIGdmbiBjcHJlZD8gdW5jXV19LCA6c291cmNlICIoZGVmblxyXG4gc3BlYy1pbXBsXHJcbiBcIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnc3BlYydcIlxyXG4gKFtmb3JtIHByZWQgZ2ZuIGNwcmVkP10gKHNwZWMtaW1wbCBmb3JtIHByZWQgZ2ZuIGNwcmVkPyBuaWwpKVxyXG4gKFtmb3JtIHByZWQgZ2ZuIGNwcmVkPyB1bmNdXHJcbiAgKGNvbmRcclxuICAgKHNwZWM/IHByZWQpXHJcbiAgIChjb25kLT4gcHJlZCBnZm4gKHdpdGgtZ2VuIGdmbikpXHJcbiAgIChyZWdleD8gcHJlZClcclxuICAgKHJlZ2V4LXNwZWMtaW1wbCBwcmVkIGdmbilcclxuICAgKGlkZW50PyBwcmVkKVxyXG4gICAoY29uZC0+ICh0aGUtc3BlYyBwcmVkKSBnZm4gKHdpdGgtZ2VuIGdmbikpXHJcbiAgIDplbHNlXHJcbiAgIChyZWlmeVxyXG4gICAgU3BlY2l6ZVxyXG4gICAgKHNwZWNpemUqIFtzXSBzKVxyXG4gICAgKHNwZWNpemUqIFtzIF9dIHMpXHJcbiAgICBTcGVjXHJcbiAgICAoY29uZm9ybSpcclxuICAgICBbXyB4XVxyXG4gICAgIChsZXRcclxuICAgICAgW3JldCAocHJlZCB4KV1cclxuICAgICAgKGlmIGNwcmVkPyByZXQgKGlmIHJldCB4IDpjbGpzLnNwZWMuYWxwaGEvaW52YWxpZCkpKSlcclxuICAgICh1bmZvcm0qXHJcbiAgICAgW18geF1cclxuICAgICAoaWZcclxuICAgICAgY3ByZWQ/XHJcbiAgICAgIChpZiB1bmMgKHVuYyB4KSAodGhyb3cgKGpzL0Vycm9yLiBcIm5vIHVuZm9ybSBmbiBmb3IgY29uZm9ybWVyXCIpKSlcclxuICAgICAgeCkpXHJcbiAgICAoZXhwbGFpbipcclxuICAgICBbXyBwYXRoIHZpYSBpbiB4XVxyXG4gICAgICh3aGVuXHJcbiAgICAgIChpbnZhbGlkPyAoZHQgcHJlZCB4IGZvcm0gY3ByZWQ/KSlcclxuICAgICAgW3s6cGF0aCBwYXRoLCA6cHJlZCBmb3JtLCA6dmFsIHgsIDp2aWEgdmlhLCA6aW4gaW59XSkpXHJcbiAgICAoZ2VuKiBbXyBfIF8gX10gKGlmIGdmbiAoZ2ZuKSAoZ2VuL2dlbi1mb3ItcHJlZCBwcmVkKSkpXHJcbiAgICAod2l0aC1nZW4qIFtfIGdmbl0gKHNwZWMtaW1wbCBmb3JtIHByZWQgZ2ZuIGNwcmVkPyB1bmMpKVxyXG4gICAgKGRlc2NyaWJlKiBbX10gZm9ybSkpKSkpXHJcbiJ9IHs6c3ltIGludmFsaWQ/LCA6bWV0YSB7OmRvYyAidGVzdHMgdGhlIHZhbGlkaXR5IG9mIGEgY29uZm9ybSByZXR1cm4gdmFsdWUiLCA6YXJnbGlzdHMgKFtyZXRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbnZhbGlkP1xyXG4gXCJ0ZXN0cyB0aGUgdmFsaWRpdHkgb2YgYSBjb25mb3JtIHJldHVybiB2YWx1ZVwiXHJcbiBbcmV0XVxyXG4gKGtleXdvcmQtaWRlbnRpY2FsPyA6Y2xqcy5zcGVjLmFscGhhL2ludmFsaWQgcmV0KSlcclxuIn0gezpzeW0gYW1wLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJyYnIiwgOmFyZ2xpc3RzIChbcmUgcmUtZm9ybSBwcmVkcyBwcmVkLWZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gYW1wLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcmJ1wiXHJcbiBbcmUgcmUtZm9ybSBwcmVkcyBwcmVkLWZvcm1zXVxyXG4gezpjbGpzLnNwZWMuYWxwaGEvb3AgOmNsanMuc3BlYy5hbHBoYS9hbXAsXHJcbiAgOnAxIHJlLFxyXG4gIDphbXAgcmUtZm9ybSxcclxuICA6cHMgcHJlZHMsXHJcbiAgOmZvcm1zIHByZWQtZm9ybXN9KVxyXG4ifSB7OnN5bSBjYXQtaW1wbCwgOm1ldGEgezpkb2MgIkRvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHksIHVzZSAnY2F0JyIsIDphcmdsaXN0cyAoW2tzIHBzIGZvcm1zXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2F0LWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICdjYXQnXCJcclxuIFtrcyBwcyBmb3Jtc11cclxuIChwY2F0KiB7OmtzIGtzLCA6cHMgcHMsIDpmb3JtcyBmb3JtcywgOnJldCB7fX0pKVxyXG4ifSB7OnN5bSBleHBsYWluLXN0ciwgOm1ldGEgezpkb2MgIkdpdmVuIGEgc3BlYyBhbmQgYSB2YWx1ZSB0aGF0IGZhaWxzIHRvIGNvbmZvcm0sIHJldHVybnMgYW4gZXhwbGFuYXRpb24gYXMgYSBzdHJpbmcuIiwgOmFyZ2xpc3RzIChbc3BlYyB4XSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1zdHJcclxuIFwiR2l2ZW4gYSBzcGVjIGFuZCBhIHZhbHVlIHRoYXQgZmFpbHMgdG8gY29uZm9ybSwgcmV0dXJucyBhbiBleHBsYW5hdGlvbiBhcyBhIHN0cmluZy5cIlxyXG4gW3NwZWMgeF1cclxuICh3aXRoLW91dC1zdHIgKGV4cGxhaW4gc3BlYyB4KSkpXHJcbiJ9IHs6c3ltICpjb21waWxlLWFzc2VydHMqLCA6bWV0YSB7OmRvYyAiSWYgdHJ1ZSwgY29tcGlsZXIgd2lsbCBlbmFibGUgc3BlYyBhc3NlcnRzLCB3aGljaCBhcmUgdGhlblxuc3ViamVjdCB0byBydW50aW1lIGNvbnRyb2wgdmlhIGNoZWNrLWFzc2VydHM/IElmIGZhbHNlLCBjb21waWxlclxud2lsbCBlbGltaW5hdGUgYWxsIHNwZWMgYXNzZXJ0IG92ZXJoZWFkLiBTZWUgJ2Fzc2VydCcuXG5Jbml0aWFsbHkgc2V0IHRvIHRoZSBuZWdhdGlvbiBvZiB0aGUgJzplbGlkZS1hc3NlcnRzJyBjb21waWxlciBvcHRpb24uXG5EZWZhdWx0cyB0byB0cnVlLiJ9LCA6c291cmNlICIoZGVmb25jZSAqY29tcGlsZS1hc3NlcnRzKiAocy9pbml0LWNvbXBpbGUtYXNzZXJ0cykpXHJcbiJ9IHs6c3ltIHdpdGgtZ2VuLCA6bWV0YSB7OmRvYyAiVGFrZXMgYSBzcGVjIGFuZCBhIG5vLWFyZywgZ2VuZXJhdG9yLXJldHVybmluZyBmbiBhbmQgcmV0dXJucyBhIHZlcnNpb24gb2YgdGhhdCBzcGVjIHRoYXQgdXNlcyB0aGF0IGdlbmVyYXRvciIsIDphcmdsaXN0cyAoW3NwZWMgZ2VuLWZuXSl9LCA6c291cmNlICIoZGVmblxyXG4gd2l0aC1nZW5cclxuIFwiVGFrZXMgYSBzcGVjIGFuZCBhIG5vLWFyZywgZ2VuZXJhdG9yLXJldHVybmluZyBmbiBhbmQgcmV0dXJucyBhIHZlcnNpb24gb2YgdGhhdCBzcGVjIHRoYXQgdXNlcyB0aGF0IGdlbmVyYXRvclwiXHJcbiBbc3BlYyBnZW4tZm5dXHJcbiAobGV0XHJcbiAgW3NwZWMgKHJlZy1yZXNvbHZlIHNwZWMpXVxyXG4gIChpZlxyXG4gICAocmVnZXg/IHNwZWMpXHJcbiAgIChhc3NvYyBzcGVjIDpjbGpzLnNwZWMuYWxwaGEvZ2ZuIGdlbi1mbilcclxuICAgKHdpdGgtZ2VuKiAoc3BlY2l6ZSBzcGVjKSBnZW4tZm4pKSkpXHJcbiJ9IHs6c3ltIGNvbmZvcm0qLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NwZWMgeF0pfSwgOnByb3RvY29sIFNwZWN9IHs6c3ltIGNoZWNrLWFzc2VydHM/LCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdmFsdWUgc2V0IGJ5IGNoZWNrLWFzc2VydHMuIiwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gY2hlY2stYXNzZXJ0cz9cclxuIFwiUmV0dXJucyB0aGUgdmFsdWUgc2V0IGJ5IGNoZWNrLWFzc2VydHMuXCJcclxuIFtdXHJcbiAqcnVudGltZS1hc3NlcnRzKilcclxuIn0gezpzeW0gcmVwLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJyonIiwgOmFyZ2xpc3RzIChbZm9ybSBwXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVwLWltcGxcclxuIFwiRG8gbm90IGNhbGwgdGhpcyBkaXJlY3RseSwgdXNlICcqJ1wiXHJcbiBbZm9ybSBwXVxyXG4gKHJlcCogcCBwIFtdIGZhbHNlIGZvcm0pKVxyXG4ifSB7OnN5bSBkZXNjcmliZSwgOm1ldGEgezpkb2MgInJldHVybnMgYW4gYWJicmV2aWF0ZWQgZGVzY3JpcHRpb24gb2YgdGhlIHNwZWMgYXMgZGF0YSIsIDphcmdsaXN0cyAoW3NwZWNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXNjcmliZVxyXG4gXCJyZXR1cm5zIGFuIGFiYnJldmlhdGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzcGVjIGFzIGRhdGFcIlxyXG4gW3NwZWNdXHJcbiAoYWJicmV2IChmb3JtIHNwZWMpKSlcclxuIn0gezpzeW0gZXhwbGFpbi1vdXQsIDptZXRhIHs6ZG9jICJQcmludHMgZXhwbGFuYXRpb24gZGF0YSAocGVyICdleHBsYWluLWRhdGEnKSB0byAqb3V0KiB1c2luZyB0aGUgcHJpbnRlciBpbiAqZXhwbGFpbi1vdXQqLFxuICAgIGJ5IGRlZmF1bHQgZXhwbGFpbi1wcmludGVyLiIsIDphcmdsaXN0cyAoW2VkXSl9LCA6c291cmNlICIoZGVmblxyXG4gZXhwbGFpbi1vdXRcclxuIFwiUHJpbnRzIGV4cGxhbmF0aW9uIGRhdGEgKHBlciAnZXhwbGFpbi1kYXRhJykgdG8gKm91dCogdXNpbmcgdGhlIHByaW50ZXIgaW4gKmV4cGxhaW4tb3V0KixcXG4gICAgYnkgZGVmYXVsdCBleHBsYWluLXByaW50ZXIuXCJcclxuIFtlZF1cclxuICgqZXhwbGFpbi1vdXQqIGVkKSlcclxuIn0gezpzeW0gc3BlY2l6ZSosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbX10gW18gZm9ybV0pfSwgOnByb3RvY29sIFNwZWNpemV9IHs6c3ltIG1heWJlLWltcGwsIDptZXRhIHs6ZG9jICJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJz8nIiwgOmFyZ2xpc3RzIChbcCBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gbWF5YmUtaW1wbFxyXG4gXCJEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LCB1c2UgJz8nXCJcclxuIFtwIGZvcm1dXHJcbiAoYXNzb2NcclxuICAoYWx0KlxyXG4gICBbcCAoYWNjZXB0IDpjbGpzLnNwZWMuYWxwaGEvbmlsKV1cclxuICAgbmlsXHJcbiAgIFtmb3JtIDpjbGpzLnNwZWMuYWxwaGEvbmlsXSlcclxuICA6bWF5YmVcclxuICBmb3JtKSlcclxuIn0gezpzeW0gZXhwbGFpbiosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbc3BlYyBwYXRoIHZpYSBpbiB4XSl9LCA6cHJvdG9jb2wgU3BlY30pLCBjbGpzLnJlYWRlciAoezpzeW0gKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbiogKGF0b20gbmlsKSlcclxuIn0gezpzeW0gcmVhZCwgOm1ldGEgezpkb2MgIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBjbGpzLnRvb2xzLnJlYWRlci5yZWFkZXItdHlwZXMvSVB1c2hiYWNrUmVhZGVyLlxuICAgUmV0dXJucyB0aGUgb2JqZWN0IHJlYWQuIElmIEVPRiwgdGhyb3dzIGlmIGVvZi1lcnJvcj8gaXMgdHJ1ZSBvdGhlcndpc2UgcmV0dXJucyBlb2YuXG4gICBJZiBubyByZWFkZXIgaXMgcHJvdmlkZWQsICppbiogd2lsbCBiZSB1c2VkLlxuXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcbiAgIGh0dHA6Ly9lZG4tZm9ybWF0Lm9yZ1xuXG4gICBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZCBkb2Vzbid0IGRlcGVuZCBvbiBkeW5hbWljIFZhcnMsIGFsbCBjb25maWd1cmF0aW9uXG4gICBpcyBkb25lIGJ5IHBhc3NpbmcgYW4gb3B0IG1hcC5cblxuICAgb3B0cyBpcyBhIG1hcCB0aGF0IGNhbiBpbmNsdWRlIHRoZSBmb2xsb3dpbmcga2V5czpcbiAgIDplb2YgLSB2YWx1ZSB0byByZXR1cm4gb24gZW5kLW9mLWZpbGUuIFdoZW4gbm90IHN1cHBsaWVkLCBlb2YgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgIDpyZWFkZXJzICAtIGEgbWFwIG9mIHRhZyBzeW1ib2xzIHRvIGRhdGEtcmVhZGVyIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBkZWZhdWx0LWRhdGEtcmVhZGVycy5cbiAgICAgICAgICAgICAgV2hlbiBub3Qgc3VwcGxpZWQsIG9ubHkgdGhlIGRlZmF1bHQtZGF0YS1yZWFkZXJzIHdpbGwgYmUgdXNlZC5cbiAgIDpkZWZhdWx0IC0gQSBmdW5jdGlvbiBvZiB0d28gYXJncywgdGhhdCB3aWxsLCBpZiBwcmVzZW50IGFuZCBubyByZWFkZXIgaXMgZm91bmQgZm9yIGEgdGFnLFxuICAgICAgICAgICAgICBiZSBjYWxsZWQgd2l0aCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuIiwgOmFyZ2xpc3RzIFtbcmVhZGVyXSBbezprZXlzIFtlb2ZdLCA6YXMgb3B0c30gcmVhZGVyXSBbcmVhZGVyIGVvZi1lcnJvcj8gZW9mIG9wdHNdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByZWFkXHJcbiBcIlJlYWRzIHRoZSBmaXJzdCBvYmplY3QgZnJvbSBhbiBjbGpzLnRvb2xzLnJlYWRlci5yZWFkZXItdHlwZXMvSVB1c2hiYWNrUmVhZGVyLlxcbiAgIFJldHVybnMgdGhlIG9iamVjdCByZWFkLiBJZiBFT0YsIHRocm93cyBpZiBlb2YtZXJyb3I/IGlzIHRydWUgb3RoZXJ3aXNlIHJldHVybnMgZW9mLlxcbiAgIElmIG5vIHJlYWRlciBpcyBwcm92aWRlZCwgKmluKiB3aWxsIGJlIHVzZWQuXFxuXFxuICAgUmVhZHMgZGF0YSBpbiB0aGUgZWRuIGZvcm1hdCAoc3Vic2V0IG9mIENsb2p1cmUgZGF0YSk6XFxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXFxuXFxuICAgY2xqcy50b29scy5yZWFkZXIuZWRuL3JlYWQgZG9lc24ndCBkZXBlbmQgb24gZHluYW1pYyBWYXJzLCBhbGwgY29uZmlndXJhdGlvblxcbiAgIGlzIGRvbmUgYnkgcGFzc2luZyBhbiBvcHQgbWFwLlxcblxcbiAgIG9wdHMgaXMgYSBtYXAgdGhhdCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleXM6XFxuICAgOmVvZiAtIHZhbHVlIHRvIHJldHVybiBvbiBlbmQtb2YtZmlsZS4gV2hlbiBub3Qgc3VwcGxpZWQsIGVvZiB0aHJvd3MgYW4gZXhjZXB0aW9uLlxcbiAgIDpyZWFkZXJzICAtIGEgbWFwIG9mIHRhZyBzeW1ib2xzIHRvIGRhdGEtcmVhZGVyIGZ1bmN0aW9ucyB0byBiZSBjb25zaWRlcmVkIGJlZm9yZSBkZWZhdWx0LWRhdGEtcmVhZGVycy5cXG4gICAgICAgICAgICAgIFdoZW4gbm90IHN1cHBsaWVkLCBvbmx5IHRoZSBkZWZhdWx0LWRhdGEtcmVhZGVycyB3aWxsIGJlIHVzZWQuXFxuICAgOmRlZmF1bHQgLSBBIGZ1bmN0aW9uIG9mIHR3byBhcmdzLCB0aGF0IHdpbGwsIGlmIHByZXNlbnQgYW5kIG5vIHJlYWRlciBpcyBmb3VuZCBmb3IgYSB0YWcsXFxuICAgICAgICAgICAgICBiZSBjYWxsZWQgd2l0aCB0aGUgdGFnIGFuZCB0aGUgdmFsdWUuXCJcclxuIChbcmVhZGVyXVxyXG4gIChlZG4vcmVhZFxyXG4gICB7OnJlYWRlcnMgQCp0YWctdGFibGUqLFxyXG4gICAgOmRlZmF1bHQgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKixcclxuICAgIDplb2YgbmlsfVxyXG4gICByZWFkZXIpKVxyXG4gKFt7OmtleXMgW2VvZl0sIDphcyBvcHRzfSByZWFkZXJdXHJcbiAgKGVkbi9yZWFkXHJcbiAgICh1cGRhdGVcclxuICAgIChtZXJnZSBvcHRzIHs6ZGVmYXVsdCBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qfSlcclxuICAgIDpyZWFkZXJzXHJcbiAgICAoZm4gW21dIChtZXJnZSBAKnRhZy10YWJsZSogbSkpKVxyXG4gICByZWFkZXIpKVxyXG4gKFtyZWFkZXIgZW9mLWVycm9yPyBlb2Ygb3B0c11cclxuICAoZWRuL3JlYWRcclxuICAgcmVhZGVyXHJcbiAgIGVvZi1lcnJvcj9cclxuICAgZW9mXHJcbiAgICh1cGRhdGVcclxuICAgIChtZXJnZSBvcHRzIHs6ZGVmYXVsdCBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qfSlcclxuICAgIDpyZWFkZXJzXHJcbiAgICAoZm4gW21dIChtZXJnZSBAKnRhZy10YWJsZSogbSkpKSkpKVxyXG4ifSB7OnN5bSAqdGFnLXRhYmxlKiwgOm1ldGEge30sIDpzb3VyY2UgIihkZWZcclxuICp0YWctdGFibGUqXHJcbiAoYXRvbVxyXG4gIChhZGQtZGF0YS1yZWFkZXJzXHJcbiAgIHsnaW5zdCByZWFkLWRhdGUsXHJcbiAgICAndXVpZCByZWFkLXV1aWQsXHJcbiAgICAncXVldWUgcmVhZC1xdWV1ZSxcclxuICAgICdqcyByZWFkLWpzfSkpKVxyXG4ifSB7OnN5bSBwYXJzZS1hbmQtdmFsaWRhdGUtdGltZXN0YW1wLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwYXJzZS1hbmQtdmFsaWRhdGUtdGltZXN0YW1wXHJcbiBbc11cclxuIChsZXRcclxuICBbW19cclxuICAgIHllYXJzXHJcbiAgICBtb250aHNcclxuICAgIGRheXNcclxuICAgIGhvdXJzXHJcbiAgICBtaW51dGVzXHJcbiAgICBzZWNvbmRzXHJcbiAgICBmcmFjdGlvblxyXG4gICAgb2Zmc2V0LXNpZ25cclxuICAgIG9mZnNldC1ob3Vyc1xyXG4gICAgb2Zmc2V0LW1pbnV0ZXNcclxuICAgIDphc1xyXG4gICAgdl1cclxuICAgKHJlLW1hdGNoZXMgdGltZXN0YW1wLXJlZ2V4IHMpXVxyXG4gIChpZi1ub3RcclxuICAgdlxyXG4gICAodGhyb3cgKGpzL0Vycm9yLiAoc3RyIFwiVW5yZWNvZ25pemVkIGRhdGUvdGltZSBzeW50YXg6IFwiIHMpKSlcclxuICAgKGxldFxyXG4gICAgW3llYXJzXHJcbiAgICAgKHBhcnNlLWludCB5ZWFycylcclxuICAgICBtb250aHNcclxuICAgICAob3IgKHBhcnNlLWludCBtb250aHMpIDEpXHJcbiAgICAgZGF5c1xyXG4gICAgIChvciAocGFyc2UtaW50IGRheXMpIDEpXHJcbiAgICAgaG91cnNcclxuICAgICAob3IgKHBhcnNlLWludCBob3VycykgMClcclxuICAgICBtaW51dGVzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgbWludXRlcykgMClcclxuICAgICBzZWNvbmRzXHJcbiAgICAgKG9yIChwYXJzZS1pbnQgc2Vjb25kcykgMClcclxuICAgICBmcmFjdGlvblxyXG4gICAgIChvciAocGFyc2UtaW50ICh6ZXJvLWZpbGwtcmlnaHQtYW5kLXRydW5jYXRlIGZyYWN0aW9uIDMpKSAwKVxyXG4gICAgIG9mZnNldC1zaWduXHJcbiAgICAgKGlmICg9IG9mZnNldC1zaWduIFwiLVwiKSAtMSAxKVxyXG4gICAgIG9mZnNldC1ob3Vyc1xyXG4gICAgIChvciAocGFyc2UtaW50IG9mZnNldC1ob3VycykgMClcclxuICAgICBvZmZzZXQtbWludXRlc1xyXG4gICAgIChvciAocGFyc2UtaW50IG9mZnNldC1taW51dGVzKSAwKVxyXG4gICAgIG9mZnNldFxyXG4gICAgICgqIG9mZnNldC1zaWduICgrICgqIG9mZnNldC1ob3VycyA2MCkgb2Zmc2V0LW1pbnV0ZXMpKV1cclxuICAgIFt5ZWFyc1xyXG4gICAgIChjaGVjayAxIG1vbnRocyAxMiBcInRpbWVzdGFtcCBtb250aCBmaWVsZCBtdXN0IGJlIGluIHJhbmdlIDEuLjEyXCIpXHJcbiAgICAgKGNoZWNrXHJcbiAgICAgIDFcclxuICAgICAgZGF5c1xyXG4gICAgICAoZGF5cy1pbi1tb250aCBtb250aHMgKGxlYXAteWVhcj8geWVhcnMpKVxyXG4gICAgICBcInRpbWVzdGFtcCBkYXkgZmllbGQgbXVzdCBiZSBpbiByYW5nZSAxLi5sYXN0IGRheSBpbiBtb250aFwiKVxyXG4gICAgIChjaGVjayAwIGhvdXJzIDIzIFwidGltZXN0YW1wIGhvdXIgZmllbGQgbXVzdCBiZSBpbiByYW5nZSAwLi4yM1wiKVxyXG4gICAgIChjaGVja1xyXG4gICAgICAwXHJcbiAgICAgIG1pbnV0ZXNcclxuICAgICAgNTlcclxuICAgICAgXCJ0aW1lc3RhbXAgbWludXRlIGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMC4uNTlcIilcclxuICAgICAoY2hlY2tcclxuICAgICAgMFxyXG4gICAgICBzZWNvbmRzXHJcbiAgICAgIChpZiAoPSBtaW51dGVzIDU5KSA2MCA1OSlcclxuICAgICAgXCJ0aW1lc3RhbXAgc2Vjb25kIGZpZWxkIG11c3QgYmUgaW4gcmFuZ2UgMC4uNjBcIilcclxuICAgICAoY2hlY2tcclxuICAgICAgMFxyXG4gICAgICBmcmFjdGlvblxyXG4gICAgICA5OTlcclxuICAgICAgXCJ0aW1lc3RhbXAgbWlsbGlzZWNvbmQgZmllbGQgbXVzdCBiZSBpbiByYW5nZSAwLi45OTlcIilcclxuICAgICBvZmZzZXRdKSkpKVxyXG4ifSB7OnN5bSByZWdpc3Rlci10YWctcGFyc2VyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0YWcgZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2lzdGVyLXRhZy1wYXJzZXIhXHJcbiBbdGFnIGZdXHJcbiAobGV0XHJcbiAgW29sZC1wYXJzZXIgKGdldCBAKnRhZy10YWJsZSogdGFnKV1cclxuICAoc3dhcCEgKnRhZy10YWJsZSogYXNzb2MgdGFnIGYpXHJcbiAgb2xkLXBhcnNlcikpXHJcbiJ9IHs6c3ltIHJlZ2lzdGVyLWRlZmF1bHQtdGFnLXBhcnNlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlZ2lzdGVyLWRlZmF1bHQtdGFnLXBhcnNlciFcclxuIFtmXVxyXG4gKGxldFxyXG4gIFtvbGQtcGFyc2VyIEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipdXHJcbiAgKHN3YXAhICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiAoZm4gW19dIGYpKVxyXG4gIG9sZC1wYXJzZXIpKVxyXG4ifSB7OnN5bSBkZXJlZ2lzdGVyLWRlZmF1bHQtdGFnLXBhcnNlciEsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVyZWdpc3Rlci1kZWZhdWx0LXRhZy1wYXJzZXIhXHJcbiBbXVxyXG4gKGxldFxyXG4gIFtvbGQtcGFyc2VyIEAqZGVmYXVsdC1kYXRhLXJlYWRlci1mbipdXHJcbiAgKHN3YXAhICpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKiAoZm4gW19dIG5pbCkpXHJcbiAgb2xkLXBhcnNlcikpXHJcbiJ9IHs6c3ltIHJlYWQtc3RyaW5nLCA6bWV0YSB7OmRvYyAiUmVhZHMgb25lIG9iamVjdCBmcm9tIHRoZSBzdHJpbmcgcy5cbiAgIFJldHVybnMgbmlsIHdoZW4gcyBpcyBuaWwgb3IgZW1wdHkuXG5cbiAgIFJlYWRzIGRhdGEgaW4gdGhlIGVkbiBmb3JtYXQgKHN1YnNldCBvZiBDbG9qdXJlIGRhdGEpOlxuICAgaHR0cDovL2Vkbi1mb3JtYXQub3JnXG5cbiAgIG9wdHMgaXMgYSBtYXAgYXMgcGVyIGNsanMudG9vbHMucmVhZGVyLmVkbi9yZWFkIiwgOmFyZ2xpc3RzIFtbc10gW29wdHMgc11dfSwgOnNvdXJjZSAiKGRlZm5cclxuIHJlYWQtc3RyaW5nXHJcbiBcIlJlYWRzIG9uZSBvYmplY3QgZnJvbSB0aGUgc3RyaW5nIHMuXFxuICAgUmV0dXJucyBuaWwgd2hlbiBzIGlzIG5pbCBvciBlbXB0eS5cXG5cXG4gICBSZWFkcyBkYXRhIGluIHRoZSBlZG4gZm9ybWF0IChzdWJzZXQgb2YgQ2xvanVyZSBkYXRhKTpcXG4gICBodHRwOi8vZWRuLWZvcm1hdC5vcmdcXG5cXG4gICBvcHRzIGlzIGEgbWFwIGFzIHBlciBjbGpzLnRvb2xzLnJlYWRlci5lZG4vcmVhZFwiXHJcbiAoW3NdXHJcbiAgKGVkbi9yZWFkLXN0cmluZ1xyXG4gICB7OnJlYWRlcnMgQCp0YWctdGFibGUqLFxyXG4gICAgOmRlZmF1bHQgQCpkZWZhdWx0LWRhdGEtcmVhZGVyLWZuKixcclxuICAgIDplb2YgbmlsfVxyXG4gICBzKSlcclxuIChbb3B0cyBzXVxyXG4gIChlZG4vcmVhZC1zdHJpbmdcclxuICAgKHVwZGF0ZVxyXG4gICAgKG1lcmdlIHs6ZGVmYXVsdCBAKmRlZmF1bHQtZGF0YS1yZWFkZXItZm4qfSBvcHRzKVxyXG4gICAgOnJlYWRlcnNcclxuICAgIChmbiBbbV0gKG1lcmdlIEAqdGFnLXRhYmxlKiBtKSkpXHJcbiAgIHMpKSlcclxuIn0gezpzeW0gZGVyZWdpc3Rlci10YWctcGFyc2VyISwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0YWddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBkZXJlZ2lzdGVyLXRhZy1wYXJzZXIhXHJcbiBbdGFnXVxyXG4gKGxldFxyXG4gIFtvbGQtcGFyc2VyIChnZXQgQCp0YWctdGFibGUqIHRhZyldXHJcbiAgKHN3YXAhICp0YWctdGFibGUqIGRpc3NvYyB0YWcpXHJcbiAgb2xkLXBhcnNlcikpXHJcbiJ9IHs6c3ltIHBhcnNlLXRpbWVzdGFtcCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt0c10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHBhcnNlLXRpbWVzdGFtcFxyXG4gW3RzXVxyXG4gKGlmLWxldFxyXG4gIFtbeWVhcnMgbW9udGhzIGRheXMgaG91cnMgbWludXRlcyBzZWNvbmRzIG1zIG9mZnNldF1cclxuICAgKHBhcnNlLWFuZC12YWxpZGF0ZS10aW1lc3RhbXAgdHMpXVxyXG4gIChqcy9EYXRlLlxyXG4gICAoLVxyXG4gICAgKC5VVEMganMvRGF0ZSB5ZWFycyAoZGVjIG1vbnRocykgZGF5cyBob3VycyBtaW51dGVzIHNlY29uZHMgbXMpXHJcbiAgICAoKiBvZmZzZXQgNjAgMTAwMCkpKVxyXG4gICh0aHJvdyAoanMvRXJyb3IuIChzdHIgXCJVbnJlY29nbml6ZWQgZGF0ZS90aW1lIHN5bnRheDogXCIgdHMpKSkpKVxyXG4ifSksIGNsb2p1cmUud2FsayAoezpzeW0gd2FsaywgOm1ldGEgezpkb2MgIlRyYXZlcnNlcyBmb3JtLCBhbiBhcmJpdHJhcnkgZGF0YSBzdHJ1Y3R1cmUuICBpbm5lciBhbmQgb3V0ZXIgYXJlXG4gIGZ1bmN0aW9ucy4gIEFwcGxpZXMgaW5uZXIgdG8gZWFjaCBlbGVtZW50IG9mIGZvcm0sIGJ1aWxkaW5nIHVwIGFcbiAgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlIHNhbWUgdHlwZSwgdGhlbiBhcHBsaWVzIG91dGVyIHRvIHRoZSByZXN1bHQuXG4gIFJlY29nbml6ZXMgYWxsIENsb2p1cmUgZGF0YSBzdHJ1Y3R1cmVzLiBDb25zdW1lcyBzZXFzIGFzIHdpdGggZG9hbGwuIiwgOmFyZ2xpc3RzIChbaW5uZXIgb3V0ZXIgZm9ybV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIHdhbGtcclxuIFwiVHJhdmVyc2VzIGZvcm0sIGFuIGFyYml0cmFyeSBkYXRhIHN0cnVjdHVyZS4gIGlubmVyIGFuZCBvdXRlciBhcmVcXG4gIGZ1bmN0aW9ucy4gIEFwcGxpZXMgaW5uZXIgdG8gZWFjaCBlbGVtZW50IG9mIGZvcm0sIGJ1aWxkaW5nIHVwIGFcXG4gIGRhdGEgc3RydWN0dXJlIG9mIHRoZSBzYW1lIHR5cGUsIHRoZW4gYXBwbGllcyBvdXRlciB0byB0aGUgcmVzdWx0LlxcbiAgUmVjb2duaXplcyBhbGwgQ2xvanVyZSBkYXRhIHN0cnVjdHVyZXMuIENvbnN1bWVzIHNlcXMgYXMgd2l0aCBkb2FsbC5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW2lubmVyIG91dGVyIGZvcm1dXHJcbiAoY29uZFxyXG4gIChsaXN0PyBmb3JtKVxyXG4gIChvdXRlciAoYXBwbHkgbGlzdCAobWFwIGlubmVyIGZvcm0pKSlcclxuICAobWFwLWVudHJ5PyBmb3JtKVxyXG4gIChvdXRlciAoTWFwRW50cnkuIChpbm5lciAoa2V5IGZvcm0pKSAoaW5uZXIgKHZhbCBmb3JtKSkgbmlsKSlcclxuICAoc2VxPyBmb3JtKVxyXG4gIChvdXRlciAoZG9hbGwgKG1hcCBpbm5lciBmb3JtKSkpXHJcbiAgKHJlY29yZD8gZm9ybSlcclxuICAob3V0ZXIgKHJlZHVjZSAoZm4gW3IgeF0gKGNvbmogciAoaW5uZXIgeCkpKSBmb3JtIGZvcm0pKVxyXG4gIChjb2xsPyBmb3JtKVxyXG4gIChvdXRlciAoaW50byAoZW1wdHkgZm9ybSkgKG1hcCBpbm5lciBmb3JtKSkpXHJcbiAgOmVsc2VcclxuICAob3V0ZXIgZm9ybSkpKVxyXG4ifSB7OnN5bSBwb3N0d2FsaywgOm1ldGEgezpkb2MgIlBlcmZvcm1zIGEgZGVwdGgtZmlyc3QsIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIG9mIGZvcm0uICBDYWxscyBmIG9uXG4gIGVhY2ggc3ViLWZvcm0sIHVzZXMgZidzIHJldHVybiB2YWx1ZSBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwuXG4gIFJlY29nbml6ZXMgYWxsIENsb2p1cmUgZGF0YSBzdHJ1Y3R1cmVzLiBDb25zdW1lcyBzZXFzIGFzIHdpdGggZG9hbGwuIiwgOmFyZ2xpc3RzIChbZiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcG9zdHdhbGtcclxuIFwiUGVyZm9ybXMgYSBkZXB0aC1maXJzdCwgcG9zdC1vcmRlciB0cmF2ZXJzYWwgb2YgZm9ybS4gIENhbGxzIGYgb25cXG4gIGVhY2ggc3ViLWZvcm0sIHVzZXMgZidzIHJldHVybiB2YWx1ZSBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwuXFxuICBSZWNvZ25pemVzIGFsbCBDbG9qdXJlIGRhdGEgc3RydWN0dXJlcy4gQ29uc3VtZXMgc2VxcyBhcyB3aXRoIGRvYWxsLlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbZiBmb3JtXVxyXG4gKHdhbGsgKHBhcnRpYWwgcG9zdHdhbGsgZikgZiBmb3JtKSlcclxuIn0gezpzeW0gcHJld2FsaywgOm1ldGEgezpkb2MgIkxpa2UgcG9zdHdhbGssIGJ1dCBkb2VzIHByZS1vcmRlciB0cmF2ZXJzYWwuIiwgOmFyZ2xpc3RzIChbZiBmb3JtXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJld2Fsa1xyXG4gXCJMaWtlIHBvc3R3YWxrLCBidXQgZG9lcyBwcmUtb3JkZXIgdHJhdmVyc2FsLlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbZiBmb3JtXVxyXG4gKHdhbGsgKHBhcnRpYWwgcHJld2FsayBmKSBpZGVudGl0eSAoZiBmb3JtKSkpXHJcbiJ9IHs6c3ltIGtleXdvcmRpemUta2V5cywgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGZyb20gc3RyaW5ncyB0byBrZXl3b3Jkcy4iLCA6YXJnbGlzdHMgKFttXSl9LCA6c291cmNlICIoZGVmblxyXG4ga2V5d29yZGl6ZS1rZXlzXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG1hcCBrZXlzIGZyb20gc3RyaW5ncyB0byBrZXl3b3Jkcy5cIlxyXG4gezphZGRlZCBcIjEuMVwifVxyXG4gW21dXHJcbiAobGV0XHJcbiAgW2YgKGZuIFtbayB2XV0gKGlmIChzdHJpbmc/IGspIFsoa2V5d29yZCBrKSB2XSBbayB2XSkpXVxyXG4gIChwb3N0d2FsayAoZm4gW3hdIChpZiAobWFwPyB4KSAoaW50byB7fSAobWFwIGYgeCkpIHgpKSBtKSkpXHJcbiJ9IHs6c3ltIHN0cmluZ2lmeS1rZXlzLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbGwgbWFwIGtleXMgZnJvbSBrZXl3b3JkcyB0byBzdHJpbmdzLiIsIDphcmdsaXN0cyAoW21dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBzdHJpbmdpZnkta2V5c1xyXG4gXCJSZWN1cnNpdmVseSB0cmFuc2Zvcm1zIGFsbCBtYXAga2V5cyBmcm9tIGtleXdvcmRzIHRvIHN0cmluZ3MuXCJcclxuIHs6YWRkZWQgXCIxLjFcIn1cclxuIFttXVxyXG4gKGxldFxyXG4gIFtmIChmbiBbW2sgdl1dIChpZiAoa2V5d29yZD8gaykgWyhuYW1lIGspIHZdIFtrIHZdKSldXHJcbiAgKHBvc3R3YWxrIChmbiBbeF0gKGlmIChtYXA/IHgpIChpbnRvIHt9IChtYXAgZiB4KSkgeCkpIG0pKSlcclxuIn0gezpzeW0gcHJld2Fsay1yZXBsYWNlLCA6bWV0YSB7OmRvYyAiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBmb3JtIGJ5IHJlcGxhY2luZyBrZXlzIGluIHNtYXAgd2l0aCB0aGVpclxuICB2YWx1ZXMuICBMaWtlIGNsb2p1cmUvcmVwbGFjZSBidXQgd29ya3Mgb24gYW55IGRhdGEgc3RydWN0dXJlLiAgRG9lc1xuICByZXBsYWNlbWVudCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZSBmaXJzdC4iLCA6YXJnbGlzdHMgKFtzbWFwIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwcmV3YWxrLXJlcGxhY2VcclxuIFwiUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBmb3JtIGJ5IHJlcGxhY2luZyBrZXlzIGluIHNtYXAgd2l0aCB0aGVpclxcbiAgdmFsdWVzLiAgTGlrZSBjbG9qdXJlL3JlcGxhY2UgYnV0IHdvcmtzIG9uIGFueSBkYXRhIHN0cnVjdHVyZS4gIERvZXNcXG4gIHJlcGxhY2VtZW50IGF0IHRoZSByb290IG9mIHRoZSB0cmVlIGZpcnN0LlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbc21hcCBmb3JtXVxyXG4gKHByZXdhbGsgKGZuIFt4XSAoaWYgKGNvbnRhaW5zPyBzbWFwIHgpIChzbWFwIHgpIHgpKSBmb3JtKSlcclxuIn0gezpzeW0gcG9zdHdhbGstcmVwbGFjZSwgOm1ldGEgezpkb2MgIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgZm9ybSBieSByZXBsYWNpbmcga2V5cyBpbiBzbWFwIHdpdGggdGhlaXJcbiAgdmFsdWVzLiAgTGlrZSBjbG9qdXJlL3JlcGxhY2UgYnV0IHdvcmtzIG9uIGFueSBkYXRhIHN0cnVjdHVyZS4gIERvZXNcbiAgcmVwbGFjZW1lbnQgYXQgdGhlIGxlYXZlcyBvZiB0aGUgdHJlZSBmaXJzdC4iLCA6YXJnbGlzdHMgKFtzbWFwIGZvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBwb3N0d2Fsay1yZXBsYWNlXHJcbiBcIlJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgZm9ybSBieSByZXBsYWNpbmcga2V5cyBpbiBzbWFwIHdpdGggdGhlaXJcXG4gIHZhbHVlcy4gIExpa2UgY2xvanVyZS9yZXBsYWNlIGJ1dCB3b3JrcyBvbiBhbnkgZGF0YSBzdHJ1Y3R1cmUuICBEb2VzXFxuICByZXBsYWNlbWVudCBhdCB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIGZpcnN0LlwiXHJcbiB7OmFkZGVkIFwiMS4xXCJ9XHJcbiBbc21hcCBmb3JtXVxyXG4gKHBvc3R3YWxrIChmbiBbeF0gKGlmIChjb250YWlucz8gc21hcCB4KSAoc21hcCB4KSB4KSkgZm9ybSkpXHJcbiJ9KSwgdGFnLXNvdXAuY29yZSAoezpzeW0gc3BlY2lhbC1pbmRlbnQsIDptZXRhIHt9LCA6c291cmNlICIoZGVmXHJcbiBzcGVjaWFsLWluZGVudFxyXG4gI3snYW5kICc+PSAnPiAnLyAnLT4+ICc8PSAnPSAnY29uZC0+PiAnKyAnPT0gJyogJ3NvbWUtPj4gJ3NvbWUtPiAnbm90PVxyXG4gICAnY29uZC0+ICc8ICctICctPiAnYXMtPiAnb3J9KVxyXG4ifSB7OnN5bSBjb2RlLT50YWdzLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgdGFncyBmb3IgdGhlIGdpdmVuIHN0cmluZyBjb250YWluaW5nIGNvZGUuIiwgOmFyZ2xpc3RzIChbdGV4dF0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvZGUtPnRhZ3NcclxuIFwiUmV0dXJucyB0aGUgdGFncyBmb3IgdGhlIGdpdmVuIHN0cmluZyBjb250YWluaW5nIGNvZGUuXCJcclxuIFt0ZXh0XVxyXG4gKGxldFxyXG4gIFtyZWFkZXIgKGluZGV4aW5nLXB1c2gtYmFjay1yZWFkZXIgdGV4dCldXHJcbiAgKGxvb3BcclxuICAgW20gKHRyYW5zaWVudCB7fSldXHJcbiAgIChpZi1sZXRcclxuICAgIFt0b2tlbiAocmVhZC1zYWZlIHJlYWRlcildXHJcbiAgICAocmVjdXIgKHRhZy1tYXAgdG9rZW4gbSAwKSlcclxuICAgIChwZXJzaXN0ZW50ISBtKSkpKSlcclxuIn0gezpzeW0gaW5kZW50LWZvci1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQuIiwgOmFyZ2xpc3RzIChbdGFncyBsaW5lXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW5kZW50LWZvci1saW5lXHJcbiBcIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkLlwiXHJcbiBbdGFncyBsaW5lXVxyXG4gKG9yXHJcbiAgKC0+PlxyXG4gICAoZ2V0LXRhZ3MtYmVmb3JlLWxpbmUgdGFncyBsaW5lKVxyXG4gICByZXZlcnNlXHJcbiAgIChzb21lIDpuZXh0LWxpbmUtaW5kZW50KSlcclxuICAwKSlcclxuIn0gezpzeW0gYWRqdXN0LWluZGVudCwgOm1ldGEgezpkb2MgIlJldHVybnMgaG93IG11Y2ggdGhlIGluZGVudCBzaG91bGQgYmUgYWRqdXN0ZWQgZm9yIHRoZSBnaXZlbiB0b2tlbi4iLCA6YXJnbGlzdHMgKFt0b2tlbl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGFkanVzdC1pbmRlbnRcclxuIFwiUmV0dXJucyBob3cgbXVjaCB0aGUgaW5kZW50IHNob3VsZCBiZSBhZGp1c3RlZCBmb3IgdGhlIGdpdmVuIHRva2VuLlwiXHJcbiBbdG9rZW5dXHJcbiAoaWZcclxuICAobGlzdD8gdG9rZW4pXHJcbiAgKGxldFxyXG4gICBbZmlyc3QtdmFsICgtPiB0b2tlbiBmaXJzdCB1bndyYXAtdmFsdWUpXVxyXG4gICAoY29uZFxyXG4gICAgKG9yICh2ZWN0b3I/IGZpcnN0LXZhbCkgKGxpc3Q/IGZpcnN0LXZhbCkpXHJcbiAgICAwXHJcbiAgICAoI3s6dXNlIDpyZXF1aXJlIDppbXBvcnR9IGZpcnN0LXZhbClcclxuICAgIChpbmMgKGNvdW50IChzdHIgZmlyc3QtdmFsKSkpXHJcbiAgICAoI3s6Y2xqciA6Y2xqIDpjbGpzfSBmaXJzdC12YWwpXHJcbiAgICAwXHJcbiAgICAoY29udGFpbnM/IHNwZWNpYWwtaW5kZW50IGZpcnN0LXZhbClcclxuICAgIChpbmMgKGNvdW50IChzdHIgZmlyc3QtdmFsKSkpXHJcbiAgICA6ZWxzZVxyXG4gICAgMSkpXHJcbiAgMCkpXHJcbiJ9IHs6c3ltIHJlYWQtc2FmZSwgOm1ldGEgezpkb2MgIlJldHVybnMgZWl0aGVyIGEgZm9ybSBvciBhbiBleGNlcHRpb24gb2JqZWN0LCBvciBuaWwgaWYgRU9GIGlzIHJlYWNoZWQuIiwgOmFyZ2xpc3RzIChbcmVhZGVyXSl9LCA6c291cmNlICIoZGVmblxyXG4gcmVhZC1zYWZlXHJcbiBcIlJldHVybnMgZWl0aGVyIGEgZm9ybSBvciBhbiBleGNlcHRpb24gb2JqZWN0LCBvciBuaWwgaWYgRU9GIGlzIHJlYWNoZWQuXCJcclxuIFtyZWFkZXJdXHJcbiAodHJ5XHJcbiAgKGJpbmRpbmdcclxuICAgWyp3cmFwLXZhbHVlLWFuZC1hZGQtbWV0YWRhdGE/KiB0cnVlIHIvKnN1cHByZXNzLXJlYWQqIHRydWVdXHJcbiAgIChyL3JlYWQgezpyZWFkLWNvbmQgOnByZXNlcnZlLCA6ZW9mIG5pbH0gcmVhZGVyKSlcclxuICAoY2F0Y2ggRXhjZXB0aW9uSW5mbyBlIGUpKSlcclxuIn0gezpzeW0gdW53cmFwLXZhbHVlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3ZhbHVlXSl9LCA6c291cmNlICIoZGVmblxyXG4gdW53cmFwLXZhbHVlXHJcbiBbdmFsdWVdXHJcbiAoaWYgKC0+IHZhbHVlIG1ldGEgOndyYXBwZWQ/KSAoZmlyc3QgdmFsdWUpIHZhbHVlKSlcclxuIn0gezpzeW0gZ2V0LXRhZ3MtYmVmb3JlLWxpbmUsIDptZXRhIHs6ZG9jICJSZXR1cm5zIHRoZSB0YWdzIGJlZm9yZSB0aGUgZ2l2ZW4gbGluZS4iLCA6YXJnbGlzdHMgKFt0YWdzIGxpbmVdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZXQtdGFncy1iZWZvcmUtbGluZVxyXG4gXCJSZXR1cm5zIHRoZSB0YWdzIGJlZm9yZSB0aGUgZ2l2ZW4gbGluZS5cIlxyXG4gW3RhZ3MgbGluZV1cclxuICgtPj5cclxuICB0YWdzXHJcbiAgKGZpbHRlciAoZm4qIFtwMV9fNDkwNTgjXSAoPCAoZmlyc3QgcDFfXzQ5MDU4IykgbGluZSkpKVxyXG4gIChzb3J0LWJ5IGZpcnN0KVxyXG4gIChtYXAgc2Vjb25kKVxyXG4gIChtYXAgKGZuKiBbcDFfXzQ5MDU5I10gKHNvcnQtYnkgOmNvbHVtbiBwMV9fNDkwNTkjKSkpXHJcbiAgKGFwcGx5IGNvbmNhdCkpKVxyXG4ifSB7OnN5bSBmb3J3YXJkLWluZGVudC1mb3ItbGluZSwgOm1ldGEgezpkb2MgIlJldHVybnMgdGhlIG51bWJlciBvZiBzcGFjZXMgdGhlIGdpdmVuIGxpbmUgc2hvdWxkIGJlIGluZGVudGVkIGZvcndhcmQuIiwgOmFyZ2xpc3RzIChbdGFncyBsaW5lIGN1cnJlbnQtaW5kZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gZm9yd2FyZC1pbmRlbnQtZm9yLWxpbmVcclxuIFwiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQgZm9yd2FyZC5cIlxyXG4gW3RhZ3MgbGluZSBjdXJyZW50LWluZGVudF1cclxuIChsZXRcclxuICBbdGFncy1iZWZvcmUgKGdldC10YWdzLWJlZm9yZS1saW5lIHRhZ3MgbGluZSldXHJcbiAgKGxvb3BcclxuICAgW3RhZ3MgKHJldmVyc2UgdGFncy1iZWZvcmUpIG1heC10YWItc3RvcCAtMSB0YWItc3RvcCAtMV1cclxuICAgKGlmLWxldFxyXG4gICAgW3RhZyAoZmlyc3QgdGFncyldXHJcbiAgICAoaWYtbGV0XHJcbiAgICAgW2luZGVudCAoOmluZGVudCB0YWcpXVxyXG4gICAgIChjb25kXHJcbiAgICAgICg8PSBpbmRlbnQgY3VycmVudC1pbmRlbnQpXHJcbiAgICAgIChyZWN1ciBbXSBtYXgtdGFiLXN0b3AgdGFiLXN0b3ApXHJcbiAgICAgIChvciAobmVnPyBtYXgtdGFiLXN0b3ApICg8IGN1cnJlbnQtaW5kZW50IGluZGVudCBtYXgtdGFiLXN0b3ApKVxyXG4gICAgICAocmVjdXJcclxuICAgICAgIChyZXN0IHRhZ3MpXHJcbiAgICAgICAoaW5jIGluZGVudClcclxuICAgICAgIChpZiAoOnNraXAtaW5kZW50PyB0YWcpIHRhYi1zdG9wIGluZGVudCkpXHJcbiAgICAgIDplbHNlXHJcbiAgICAgIChyZWN1ciAocmVzdCB0YWdzKSBtYXgtdGFiLXN0b3AgdGFiLXN0b3ApKVxyXG4gICAgIChyZWN1ciAocmVzdCB0YWdzKSBtYXgtdGFiLXN0b3AgdGFiLXN0b3ApKVxyXG4gICAgKGlmICg8PSB0YWItc3RvcCBjdXJyZW50LWluZGVudCkgKCsgY3VycmVudC1pbmRlbnQgMikgdGFiLXN0b3ApKSkpKVxyXG4ifSB7OnN5bSB0YWctbWFwLCA6bWV0YSB7OmRvYyAiUmV0dXJucyBhIHRyYW5zaWVudCBtYXAgY29udGFpbmluZyB0aGUgdGFncywgb3JnYW5pemVkIGJ5IGxpbmUgbnVtYmVyLiIsIDphcmdsaXN0cyAoW3Rva2VuIHJlc3VsdHMtbWFwIHBhcmVudC1pbmRlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiB0YWctbWFwXHJcbiBcIlJldHVybnMgYSB0cmFuc2llbnQgbWFwIGNvbnRhaW5pbmcgdGhlIHRhZ3MsIG9yZ2FuaXplZCBieSBsaW5lIG51bWJlci5cIlxyXG4gW3Rva2VuIHJlc3VsdHMtbWFwIHBhcmVudC1pbmRlbnRdXHJcbiAoY29uZFxyXG4gIChpbnN0YW5jZT8gRXhjZXB0aW9uSW5mbyB0b2tlbilcclxuICAobGV0XHJcbiAgIFt7OmtleXMgW2xpbmUgY29sXX0gKGV4LWRhdGEgdG9rZW4pXVxyXG4gICAoYXNzb2MhXHJcbiAgICByZXN1bHRzLW1hcFxyXG4gICAgbGluZVxyXG4gICAgKGNvbmpcclxuICAgICAoZ2V0IHJlc3VsdHMtbWFwIGxpbmUgW10pXHJcbiAgICAgezplcnJvcj8gdHJ1ZSxcclxuICAgICAgOm1lc3NhZ2UgIz8oOmNsaiAoLmdldE1lc3NhZ2UgdG9rZW4pIDpjbGpzICguLW1lc3NhZ2UgdG9rZW4pKSxcclxuICAgICAgOmNvbHVtbiBjb2x9KSkpXHJcbiAgKGFuZCAoY29sbD8gdG9rZW4pIChuaWw/IChtZXRhIHRva2VuKSkpXHJcbiAgKHJlZHVjZVxyXG4gICAoZm4gW3Jlc3VsdHMtbWFwIHRva2VuXSAodGFnLW1hcCB0b2tlbiByZXN1bHRzLW1hcCBwYXJlbnQtaW5kZW50KSlcclxuICAgcmVzdWx0cy1tYXBcclxuICAgdG9rZW4pXHJcbiAgOmVsc2VcclxuICAobGV0XHJcbiAgIFt7OmtleXMgW2xpbmUgY29sdW1uIGVuZC1saW5lIGVuZC1jb2x1bW5dfSAobWV0YSB0b2tlbildXHJcbiAgIChpZi1ub3RcclxuICAgIChhbmQgbGluZSBjb2x1bW4gZW5kLWxpbmUgZW5kLWNvbHVtbilcclxuICAgIHJlc3VsdHMtbWFwXHJcbiAgICAobGV0XHJcbiAgICAgW3ZhbHVlXHJcbiAgICAgICh1bndyYXAtdmFsdWUgdG9rZW4pXHJcbiAgICAgIGluZGVudFxyXG4gICAgICAobWF4IHBhcmVudC1pbmRlbnQgKGRlYyBjb2x1bW4pKVxyXG4gICAgICB0b3AtbGV2ZWw/XHJcbiAgICAgICg9IHBhcmVudC1pbmRlbnQgMCldXHJcbiAgICAgKGlmXHJcbiAgICAgIChjb2xsPyB2YWx1ZSlcclxuICAgICAgKGxldFxyXG4gICAgICAgW2RlbGltaXRlci1zaXplXHJcbiAgICAgICAgKGlmIChzZXQ/IHZhbHVlKSAyIDEpXHJcbiAgICAgICAgbmV3LWVuZC1jb2x1bW5cclxuICAgICAgICAoKyBjb2x1bW4gZGVsaW1pdGVyLXNpemUpXHJcbiAgICAgICAgYWRqdXN0bWVudFxyXG4gICAgICAgIChhZGp1c3QtaW5kZW50IHZhbHVlKVxyXG4gICAgICAgIG5leHQtbGluZS1pbmRlbnRcclxuICAgICAgICAoKyAoZGVjIGNvbHVtbikgZGVsaW1pdGVyLXNpemUgYWRqdXN0bWVudCldXHJcbiAgICAgICAoYXMtPlxyXG4gICAgICAgIHJlc3VsdHMtbWFwXHJcbiAgICAgICAgJFxyXG4gICAgICAgIChhc3NvYyFcclxuICAgICAgICAgJFxyXG4gICAgICAgICBsaW5lXHJcbiAgICAgICAgICgtPlxyXG4gICAgICAgICAgKGdldCAkIGxpbmUgW10pXHJcbiAgICAgICAgICAoY29ualxyXG4gICAgICAgICAgIHs6YmVnaW4/IHRydWUsXHJcbiAgICAgICAgICAgIDpjb2x1bW4gY29sdW1uLFxyXG4gICAgICAgICAgICA6dmFsdWUgdmFsdWUsXHJcbiAgICAgICAgICAgIDppbmRlbnQgaW5kZW50LFxyXG4gICAgICAgICAgICA6dG9wLWxldmVsPyB0b3AtbGV2ZWw/LFxyXG4gICAgICAgICAgICA6c2tpcC1pbmRlbnQ/IHRydWV9KVxyXG4gICAgICAgICAgKGNvbmogezpkZWxpbWl0ZXI/IHRydWUsIDpjb2x1bW4gY29sdW1ufSlcclxuICAgICAgICAgIChjb25qXHJcbiAgICAgICAgICAgezplbmQ/IHRydWUsXHJcbiAgICAgICAgICAgIDpjb2x1bW4gbmV3LWVuZC1jb2x1bW4sXHJcbiAgICAgICAgICAgIDpuZXh0LWxpbmUtaW5kZW50IG5leHQtbGluZS1pbmRlbnQsXHJcbiAgICAgICAgICAgIDppbmRlbnQgbmV4dC1saW5lLWluZGVudH0pKSlcclxuICAgICAgICAocmVkdWNlXHJcbiAgICAgICAgIChmblxyXG4gICAgICAgICAgW3Jlc3VsdHMtbWFwIHRva2VuXVxyXG4gICAgICAgICAgKHRhZy1tYXAgdG9rZW4gcmVzdWx0cy1tYXAgbmV4dC1saW5lLWluZGVudCkpXHJcbiAgICAgICAgICRcclxuICAgICAgICAgdmFsdWUpXHJcbiAgICAgICAgKGFzc29jIVxyXG4gICAgICAgICAkXHJcbiAgICAgICAgIGVuZC1saW5lXHJcbiAgICAgICAgICgtPlxyXG4gICAgICAgICAgKGdldCAkIGVuZC1saW5lIFtdKVxyXG4gICAgICAgICAgKGNvbmogezpkZWxpbWl0ZXI/IHRydWUsIDpjb2x1bW4gKGRlYyBlbmQtY29sdW1uKX0pXHJcbiAgICAgICAgICAoY29ualxyXG4gICAgICAgICAgIHs6ZW5kPyB0cnVlLFxyXG4gICAgICAgICAgICA6Y29sdW1uIGVuZC1jb2x1bW4sXHJcbiAgICAgICAgICAgIDpuZXh0LWxpbmUtaW5kZW50IHBhcmVudC1pbmRlbnR9KVxyXG4gICAgICAgICAgKGNvbmogezplbmQ/IHRydWUsIDpjb2x1bW4gZW5kLWNvbHVtbn0pKSkpKVxyXG4gICAgICAoYXMtPlxyXG4gICAgICAgcmVzdWx0cy1tYXBcclxuICAgICAgICRcclxuICAgICAgIChhc3NvYyFcclxuICAgICAgICAkXHJcbiAgICAgICAgbGluZVxyXG4gICAgICAgIChjb25qXHJcbiAgICAgICAgIChnZXQgJCBsaW5lIFtdKVxyXG4gICAgICAgICB7OmJlZ2luPyB0cnVlLFxyXG4gICAgICAgICAgOmNvbHVtbiBjb2x1bW4sXHJcbiAgICAgICAgICA6dmFsdWUgdmFsdWUsXHJcbiAgICAgICAgICA6aW5kZW50IGluZGVudCxcclxuICAgICAgICAgIDp0b3AtbGV2ZWw/IHRvcC1sZXZlbD99KSlcclxuICAgICAgIChhc3NvYyFcclxuICAgICAgICAkXHJcbiAgICAgICAgZW5kLWxpbmVcclxuICAgICAgICAoY29ualxyXG4gICAgICAgICAoZ2V0ICQgZW5kLWxpbmUgW10pXHJcbiAgICAgICAgIHs6ZW5kPyB0cnVlLCA6Y29sdW1uIGVuZC1jb2x1bW59KSkpKSkpKSkpXHJcbiJ9IHs6c3ltIGJhY2staW5kZW50LWZvci1saW5lLCA6bWV0YSB7OmRvYyAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0aGUgZ2l2ZW4gbGluZSBzaG91bGQgYmUgaW5kZW50ZWQgYmFjay4iLCA6YXJnbGlzdHMgKFt0YWdzIGxpbmUgY3VycmVudC1pbmRlbnRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBiYWNrLWluZGVudC1mb3ItbGluZVxyXG4gXCJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRoZSBnaXZlbiBsaW5lIHNob3VsZCBiZSBpbmRlbnRlZCBiYWNrLlwiXHJcbiBbdGFncyBsaW5lIGN1cnJlbnQtaW5kZW50XVxyXG4gKGxldFxyXG4gIFt0YWdzLWJlZm9yZSAoZ2V0LXRhZ3MtYmVmb3JlLWxpbmUgdGFncyBsaW5lKV1cclxuICAobG9vcFxyXG4gICBbdGFncyAocmV2ZXJzZSB0YWdzLWJlZm9yZSkgbWF4LXRhYi1zdG9wIGN1cnJlbnQtaW5kZW50XVxyXG4gICAoaWYtbGV0XHJcbiAgICBbdGFnIChmaXJzdCB0YWdzKV1cclxuICAgIChpZi1sZXRcclxuICAgICBbaW5kZW50ICg6aW5kZW50IHRhZyldXHJcbiAgICAgKGlmXHJcbiAgICAgICg8IGluZGVudCBtYXgtdGFiLXN0b3ApXHJcbiAgICAgIChpZiAoOnNraXAtaW5kZW50PyB0YWcpIChyZWN1ciAocmVzdCB0YWdzKSAoaW5jIGluZGVudCkpIGluZGVudClcclxuICAgICAgKHJlY3VyIChyZXN0IHRhZ3MpIG1heC10YWItc3RvcCkpXHJcbiAgICAgKHJlY3VyIChyZXN0IHRhZ3MpIG1heC10YWItc3RvcCkpXHJcbiAgICAoLSBjdXJyZW50LWluZGVudCAyKSkpKSlcclxuIn0pLCBleHBvdW5kLnBhdGhzICh7OnN5bSBlcXVhbGlzaD8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmbiBlcXVhbGlzaD8gW3ggeV0gKG9yICg9IHggeSkgKGZuLWVxdWFsIHggeSkgKGJvdGgtbmFuPyB4IHkpKSlcclxuIn0gezpzeW0gaW4td2l0aC1rcHMsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHNcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAobGV0XHJcbiAgW3JlcyAoaW4td2l0aC1rcHMqIGZvcm0gdmFsIGluIGluJyldXHJcbiAgKGlmXHJcbiAgICg9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCByZXMpXHJcbiAgICh0aHJvd1xyXG4gICAgKGV4LWluZm9cclxuICAgICBcIkNhbm5vdCBjb252ZXJ0IHBhdGguIFRoaXMgY2FuIGJlIGNhdXNlZCBieSB1c2luZyBjb25mb3JtZXJzIHRvIHRyYW5zZm9ybSB2YWx1ZXMsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRXhwb3VuZFwiXHJcbiAgICAgezpmb3JtIGZvcm0sIDp2YWwgdmFsLCA6aW4gaW4sIDppbicgaW4nfSkpXHJcbiAgIHJlcykpKVxyXG4ifSB7OnN5bSBrdnBzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBrdnBzPyBbeF0gKGluc3RhbmNlPyBLZXlWYWx1ZVBhdGhTZWdtZW50IHgpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXlzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzLWludHMtYXJlLWtleXNcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAoaWZcclxuICAoPSBmb3JtIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICBmb3JtXHJcbiAgKGxldFxyXG4gICBbW2sgJiByc3RdIGluXVxyXG4gICAoY29uZFxyXG4gICAgKGFuZCAoZW1wdHk/IGluKSAoZXF1YWxpc2g/IGZvcm0gdmFsKSlcclxuICAgIGluJ1xyXG4gICAgKGFzc29jaWF0aXZlPyBmb3JtKVxyXG4gICAgKGluLXdpdGgta3BzKlxyXG4gICAgIChnZXQgZm9ybSBrIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICAgICB2YWxcclxuICAgICByc3RcclxuICAgICAoY29uaiBpbicgaykpXHJcbiAgICAoYW5kIChpbnQ/IGspIChzZXFhYmxlPyBmb3JtKSlcclxuICAgIChpbi13aXRoLWtwcypcclxuICAgICAobnRoIChzZXEgZm9ybSkgayA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgICAgdmFsXHJcbiAgICAgcnN0XHJcbiAgICAgKGNvbmogaW4nIGspKVxyXG4gICAgOmVsc2VcclxuICAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCkpKSlcclxuIn0gezpzeW0gY29tcGFyZS1wYXRoLXNlZ21lbnQsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmblxyXG4gY29tcGFyZS1wYXRoLXNlZ21lbnRcclxuIFt4IHldXHJcbiAoY29uZFxyXG4gIChhbmQgKGludD8geCkgKGt2cHM/IHkpKVxyXG4gIChjb21wYXJlIHggKDppZHggeSkpXHJcbiAgKGFuZCAoa3Zwcz8geCkgKGludD8geSkpXHJcbiAgKGNvbXBhcmUgKDppZHggeCkgeSlcclxuICAoYW5kIChrcHM/IHgpIChub3QgKGtwcz8geSkpKVxyXG4gIC0xXHJcbiAgKGFuZCAobm90IChrcHM/IHgpKSAoa3BzPyB5KSlcclxuICAxXHJcbiAgKGFuZCAodmVjdG9yPyB4KSAodmVjdG9yPyB5KSlcclxuICAoY29tcGFyZS1wYXRocyB4IHkpXHJcbiAgOmVsc2VcclxuICAoY29tcGFyZSB4IHkpKSlcclxuIn0gezpzeW0ga3Zwcy1wYXRoPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcGF0aCBwb2ludHMgdG8gYSBrZXkvdmFsdWUgcGFpciIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrdnBzLXBhdGg/XHJcbiBcIlRydWUgaWYgcGF0aCBwb2ludHMgdG8gYSBrZXkvdmFsdWUgcGFpclwiXHJcbiBbeF1cclxuIChib29sZWFuIChhbmQgKHZlY3Rvcj8geCkgKHNvbWUga3Zwcz8geCkpKSlcclxuIn0gezpzeW0gY29tcGFyZS1wYXRocywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtwYXRoMSBwYXRoMl0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGNvbXBhcmUtcGF0aHNcclxuIFtwYXRoMSBwYXRoMl1cclxuICgtPj4gKG1hcCBjb21wYXJlLXBhdGgtc2VnbWVudCBwYXRoMSBwYXRoMikgKHJlbW92ZSAjezB9KSBmaXJzdCkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzLWZ1enp5LW1hdGNoLWZvci1yZWdleC1mYWlsdXJlcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwcy1mdXp6eS1tYXRjaC1mb3ItcmVnZXgtZmFpbHVyZXNcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAoaWZcclxuICAoPSBmb3JtIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICBmb3JtXHJcbiAgKGxldFxyXG4gICBbW2sgJiByc3RdIGluXVxyXG4gICAoY29uZFxyXG4gICAgKGFuZCAoZW1wdHk/IGluKSAoc2VxYWJsZT8gZm9ybSkgKD0gdmFsICcoKSkpXHJcbiAgICBpbidcclxuICAgIChhbmQgKGVtcHR5PyBpbikgKGFuZCAoc2VxPyB2YWwpICg9IGZvcm0gKGZpcnN0IHZhbCkpKSlcclxuICAgIGluJ1xyXG4gICAgKGFuZCAobmF0LWludD8gaykgKHNlcWFibGU/IGZvcm0pKVxyXG4gICAgKGluLXdpdGgta3BzKlxyXG4gICAgIChudGggKHNlcSBmb3JtKSBrIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICAgICB2YWxcclxuICAgICByc3RcclxuICAgICAoY29uaiBpbicgaykpXHJcbiAgICA6ZWxzZVxyXG4gICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKSkpKVxyXG4ifSB7OnN5bSBpbi13aXRoLWtwcyosIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbZm9ybSB2YWwgaW4gaW4nXSl9LCA6c291cmNlICIoZGVmblxyXG4gaW4td2l0aC1rcHMqXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGlmXHJcbiAgKGZuPyBmb3JtKVxyXG4gIGluJ1xyXG4gIChsZXRcclxuICAgW2JyMSAoaW4td2l0aC1rcHMtaW50cy1hcmUta2V5LXZhbHVlLWluZGljYXRvcnMgZm9ybSB2YWwgaW4gaW4nKV1cclxuICAgKGlmXHJcbiAgICAobm90PSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgYnIxKVxyXG4gICAgYnIxXHJcbiAgICAobGV0XHJcbiAgICAgW2JyMiAoaW4td2l0aC1rcHMtbWFwcy1hcy1zZXFzIGZvcm0gdmFsIGluIGluJyldXHJcbiAgICAgKGlmXHJcbiAgICAgIChub3Q9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCBicjIpXHJcbiAgICAgIGJyMlxyXG4gICAgICAobGV0XHJcbiAgICAgICBbYnIzIChpbi13aXRoLWtwcy1pbnRzLWFyZS1rZXlzIGZvcm0gdmFsIGluIGluJyldXHJcbiAgICAgICAoaWZcclxuICAgICAgICAobm90PSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQgYnIzKVxyXG4gICAgICAgIGJyM1xyXG4gICAgICAgIChsZXRcclxuICAgICAgICAgW2JyNFxyXG4gICAgICAgICAgKGluLXdpdGgta3BzLWZ1enp5LW1hdGNoLWZvci1yZWdleC1mYWlsdXJlcyBmb3JtIHZhbCBpbiBpbicpXVxyXG4gICAgICAgICAoaWZcclxuICAgICAgICAgIChub3Q9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCBicjQpXHJcbiAgICAgICAgICBicjRcclxuICAgICAgICAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCkpKSkpKSkpKSlcclxuIn0gezpzeW0ga3BzLXBhdGg/LCA6bWV0YSB7OmRvYyAiVHJ1ZSBpZiBwYXRoIHBvaW50cyB0byBhIGtleSIsIDphcmdsaXN0cyAoW3hdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBrcHMtcGF0aD9cclxuIFwiVHJ1ZSBpZiBwYXRoIHBvaW50cyB0byBhIGtleVwiXHJcbiBbeF1cclxuIChib29sZWFuIChhbmQgKHZlY3Rvcj8geCkgKGtwcz8gKGxhc3QgeCkpKSkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzLW1hcHMtYXMtc2VxcywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtmb3JtIHZhbCBpbiBpbiddKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBpbi13aXRoLWtwcy1tYXBzLWFzLXNlcXNcclxuIFtmb3JtIHZhbCBpbiBpbiddXHJcbiAobGV0XHJcbiAgW1trICYgcnN0XSBpbiBbaWR4ICYgcnN0Ml0gcnN0XVxyXG4gIChjb25kXHJcbiAgICg9IDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCBmb3JtKVxyXG4gICA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmRcclxuICAgKGFuZCAoZW1wdHk/IGluKSAoZXF1YWxpc2g/IGZvcm0gdmFsKSlcclxuICAgaW4nXHJcbiAgIChhbmQgKG1hcD8gZm9ybSkgKG5hdC1pbnQ/IGspICg8IGsgKGNvdW50IChzZXEgZm9ybSkpKSlcclxuICAgKGluLXdpdGgta3BzKlxyXG4gICAgKG50aCAoc2VxIGZvcm0pIGspXHJcbiAgICB2YWxcclxuICAgIHJzdFxyXG4gICAgKGNvbmogaW4nICgtPktleVZhbHVlUGF0aFNlZ21lbnQgaykpKVxyXG4gICAoYW5kXHJcbiAgICAobWFwPyBmb3JtKVxyXG4gICAgKG5hdC1pbnQ/IGspXHJcbiAgICAoaW50PyBpZHgpXHJcbiAgICAoPCBrIChjb3VudCAoc2VxIGZvcm0pKSlcclxuICAgICg8IGlkeCAoY291bnQgKG50aCAoc2VxIGZvcm0pIGspKSkpXHJcbiAgIChpbi13aXRoLWtwcypcclxuICAgIChudGggKG50aCAoc2VxIGZvcm0pIGspIGlkeClcclxuICAgIHZhbFxyXG4gICAgcnN0MlxyXG4gICAgKGNvbmogaW4nICgtPktleVZhbHVlUGF0aFNlZ21lbnQgaykgaWR4KSlcclxuICAgOmVsc2VcclxuICAgOmV4cG91bmQucGF0aHMvbm90LWZvdW5kKSkpXHJcbiJ9IHs6c3ltIHByZWZpeC1wYXRoPywgOm1ldGEgezpkb2MgIlRydWUgaWYgcGFydGlhbC1wYXRoIGlzIGEgcHJlZml4IG9mIGZ1bGwtcGF0aC4iLCA6YXJnbGlzdHMgKFtwYXJ0aWFsLXBhdGggZnVsbC1wYXRoXSl9LCA6c291cmNlICIoZGVmblxyXG4gcHJlZml4LXBhdGg/XHJcbiBcIlRydWUgaWYgcGFydGlhbC1wYXRoIGlzIGEgcHJlZml4IG9mIGZ1bGwtcGF0aC5cIlxyXG4gW3BhcnRpYWwtcGF0aCBmdWxsLXBhdGhdXHJcbiAoYW5kXHJcbiAgKDwgKGNvdW50IHBhcnRpYWwtcGF0aCkgKGNvdW50IGZ1bGwtcGF0aCkpXHJcbiAgKD0gcGFydGlhbC1wYXRoIChzdWJ2ZWMgZnVsbC1wYXRoIDAgKGNvdW50IHBhcnRpYWwtcGF0aCkpKSkpXHJcbiJ9IHs6c3ltIGluLXdpdGgta3BzLWludHMtYXJlLWtleS12YWx1ZS1pbmRpY2F0b3JzLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm0gdmFsIGluIGluJ10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGluLXdpdGgta3BzLWludHMtYXJlLWtleS12YWx1ZS1pbmRpY2F0b3JzXHJcbiBbZm9ybSB2YWwgaW4gaW4nXVxyXG4gKGlmXHJcbiAgKD0gZm9ybSA6ZXhwb3VuZC5wYXRocy9ub3QtZm91bmQpXHJcbiAgZm9ybVxyXG4gIChsZXRcclxuICAgW1trICYgcnN0XSBpbiBbaWR4ICYgcnN0Ml0gcnN0XVxyXG4gICAoY29uZFxyXG4gICAgKGFuZCAoZW1wdHk/IGluKSAoZXF1YWxpc2g/IGZvcm0gdmFsKSlcclxuICAgIGluJ1xyXG4gICAgKGFuZCAobWFwPyBmb3JtKSAoPSAwIGlkeCkpXHJcbiAgICAoaW4td2l0aC1rcHMqIGsgdmFsIHJzdDIgKGNvbmogaW4nICgtPktleVBhdGhTZWdtZW50IGspKSlcclxuICAgIChhbmQgKG1hcD8gZm9ybSkgKD0gMSBpZHgpKVxyXG4gICAgKGluLXdpdGgta3BzKlxyXG4gICAgIChnZXQgZm9ybSBrIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZClcclxuICAgICB2YWxcclxuICAgICByc3QyXHJcbiAgICAgKGNvbmogaW4nIGspKVxyXG4gICAgOmVsc2VcclxuICAgIDpleHBvdW5kLnBhdGhzL25vdC1mb3VuZCkpKSlcclxuIn0gezpzeW0gZm4tZXF1YWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmbiBmbi1lcXVhbCBbeCB5XSAoYW5kIChmbj8geCkgKGZuPyB5KSAoPSAocHItc3RyIHgpIChwci1zdHIgeSkpKSlcclxuIn0gezpzeW0ga3BzPywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFt4XSl9LCA6c291cmNlICIoZGVmbiBrcHM/IFt4XSAoaW5zdGFuY2U/IEtleVBhdGhTZWdtZW50IHgpKVxyXG4ifSB7OnN5bSBib3RoLW5hbj8sIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbeCB5XSl9LCA6c291cmNlICIoZGVmbiBib3RoLW5hbj8gW3ggeV0gKGFuZCAodXRpbC9uYW4/IHgpICh1dGlsL25hbj8geSkpKVxyXG4ifSksIGNsanMuY29yZS5hc3luYy5pbXBsLnRpbWVycyAoezpzeW0gdGltZW91dCwgOm1ldGEgezpkb2MgInJldHVybnMgYSBjaGFubmVsIHRoYXQgd2lsbCBjbG9zZSBhZnRlciBtc2VjcyIsIDphcmdsaXN0cyAoW21zZWNzXSl9LCA6c291cmNlICIoZGVmblxyXG4gdGltZW91dFxyXG4gXCJyZXR1cm5zIGEgY2hhbm5lbCB0aGF0IHdpbGwgY2xvc2UgYWZ0ZXIgbXNlY3NcIlxyXG4gW21zZWNzXVxyXG4gKGxldFxyXG4gIFt0aW1lb3V0XHJcbiAgICgrICgudmFsdWVPZiAoanMvRGF0ZS4pKSBtc2VjcylcclxuICAgbWVcclxuICAgKC5jZWlsaW5nRW50cnkgdGltZW91dHMtbWFwIHRpbWVvdXQpXVxyXG4gIChvclxyXG4gICAod2hlblxyXG4gICAgKGFuZCBtZSAoPCAoLi1rZXkgbWUpICgrIHRpbWVvdXQgVElNRU9VVF9SRVNPTFVUSU9OX01TKSkpXHJcbiAgICAoLi12YWwgbWUpKVxyXG4gICAobGV0XHJcbiAgICBbdGltZW91dC1jaGFubmVsIChjaGFubmVscy9jaGFuIG5pbCldXHJcbiAgICAoLnB1dCB0aW1lb3V0cy1tYXAgdGltZW91dCB0aW1lb3V0LWNoYW5uZWwpXHJcbiAgICAoZGlzcGF0Y2gvcXVldWUtZGVsYXlcclxuICAgICAoZm5cclxuICAgICAgW11cclxuICAgICAgKC5yZW1vdmUgdGltZW91dHMtbWFwIHRpbWVvdXQpXHJcbiAgICAgIChpbXBsL2Nsb3NlISB0aW1lb3V0LWNoYW5uZWwpKVxyXG4gICAgIG1zZWNzKVxyXG4gICAgdGltZW91dC1jaGFubmVsKSkpKVxyXG4ifSB7OnN5bSByYW5kb20tbGV2ZWwsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIFtbXSBbbGV2ZWxdXX0sIDpzb3VyY2UgIihkZWZuXHJcbiByYW5kb20tbGV2ZWxcclxuIChbXSAocmFuZG9tLWxldmVsIDApKVxyXG4gKFtsZXZlbF1cclxuICAoaWZcclxuICAgKGFuZCAoPCAoLnJhbmRvbSBqcy9NYXRoKSBQKSAoPCBsZXZlbCBNQVhfTEVWRUwpKVxyXG4gICAocmVjdXIgKGluYyBsZXZlbCkpXHJcbiAgIGxldmVsKSkpXHJcbiJ9IHs6c3ltIHNraXAtbGlzdCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtdKX0sIDpzb3VyY2UgIihkZWZuIHNraXAtbGlzdCBbXSAoU2tpcExpc3QuIChza2lwLWxpc3Qtbm9kZSAwKSAwKSlcclxuIn0gezpzeW0gTUFYX0xFVkVMLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBNQVhfTEVWRUwgMTUpXHJcbiJ9IHs6c3ltIFAsIDptZXRhIHt9LCA6c291cmNlICIoZGVmIFAgKC8gMSAyKSlcclxuIn0gezpzeW0gdGltZW91dHMtbWFwLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiB0aW1lb3V0cy1tYXAgKHNraXAtbGlzdCkpXHJcbiJ9IHs6c3ltIHNraXAtbGlzdC1ub2RlLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyBbW2xldmVsXSBbayB2IGxldmVsXV19LCA6c291cmNlICIoZGVmblxyXG4gc2tpcC1saXN0LW5vZGVcclxuIChbbGV2ZWxdIChza2lwLWxpc3Qtbm9kZSBuaWwgbmlsIGxldmVsKSlcclxuIChbayB2IGxldmVsXVxyXG4gIChsZXRcclxuICAgW2FyciAobWFrZS1hcnJheSAoaW5jIGxldmVsKSldXHJcbiAgIChsb29wXHJcbiAgICBbaSAwXVxyXG4gICAgKHdoZW4gKDwgaSAoYWxlbmd0aCBhcnIpKSAoYXNldCBhcnIgaSBuaWwpIChyZWN1ciAoaW5jIGkpKSkpXHJcbiAgIChTa2lwTGlzdE5vZGUuIGsgdiBhcnIpKSkpXHJcbiJ9IHs6c3ltIGxlYXN0LWdyZWF0ZXItbm9kZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgW1t4IGsgbGV2ZWxdIFt4IGsgbGV2ZWwgdXBkYXRlXV19LCA6c291cmNlICIoZGVmblxyXG4gbGVhc3QtZ3JlYXRlci1ub2RlXHJcbiAoW3ggayBsZXZlbF0gKGxlYXN0LWdyZWF0ZXItbm9kZSB4IGsgbGV2ZWwgbmlsKSlcclxuIChbeCBrIGxldmVsIHVwZGF0ZV1cclxuICAoaWYtbm90XHJcbiAgIChuZWc/IGxldmVsKVxyXG4gICAobGV0XHJcbiAgICBbeFxyXG4gICAgIChsb29wXHJcbiAgICAgIFt4IHhdXHJcbiAgICAgIChpZi1sZXRcclxuICAgICAgIFt4J1xyXG4gICAgICAgICh3aGVuXHJcbiAgICAgICAgICg8IGxldmVsIChhbGVuZ3RoICguLWZvcndhcmQgeCkpKVxyXG4gICAgICAgICAoYWdldCAoLi1mb3J3YXJkIHgpIGxldmVsKSldXHJcbiAgICAgICAoaWYgKDwgKC4ta2V5IHgnKSBrKSAocmVjdXIgeCcpIHgpXHJcbiAgICAgICB4KSldXHJcbiAgICAod2hlbi1ub3QgKG5pbD8gdXBkYXRlKSAoYXNldCB1cGRhdGUgbGV2ZWwgeCkpXHJcbiAgICAocmVjdXIgeCBrIChkZWMgbGV2ZWwpIHVwZGF0ZSkpXHJcbiAgIHgpKSlcclxuIn0gezpzeW0gVElNRU9VVF9SRVNPTFVUSU9OX01TLCA6bWV0YSB7fSwgOnNvdXJjZSAiKGRlZiBUSU1FT1VUX1JFU09MVVRJT05fTVMgMTApXHJcbiJ9KSwgZXhwb3VuZC5wcm9ibGVtcyAoezpzeW0gaGlnaGxpZ2h0LWxpbmUsIDptZXRhIHs6ZG9jIG5pbCwgOmFyZ2xpc3RzIChbcHJlZml4IHJlcGxhY2VtZW50XSl9LCA6c291cmNlICIoZGVmblxyXG4gaGlnaGxpZ2h0LWxpbmVcclxuIFtwcmVmaXggcmVwbGFjZW1lbnRdXHJcbiAobGV0XHJcbiAgW21heC13aWR0aFxyXG4gICAoYXBwbHlcclxuICAgIG1heFxyXG4gICAgKG1hcFxyXG4gICAgIChmbiogW3AxX180OTAxMSNdIChjb3VudCAoc3RyIHAxX180OTAxMSMpKSlcclxuICAgICAoc3RyaW5nL3NwbGl0LWxpbmVzIHJlcGxhY2VtZW50KSkpXVxyXG4gIChwcmludGVyL2luZGVudFxyXG4gICAoY291bnQgKHN0ciBwcmVmaXgpKVxyXG4gICAoYXBwbHkgc3RyIChyZXBlYXQgbWF4LXdpZHRoIFwiXlwiKSkpKSlcclxuIn0gezpzeW0gdmFsdWUtaW4sIDptZXRhIHs6ZG9jICJTaW1pbGFyIHRvIGdldC1pbiwgYnV0IHdvcmtzIHdpdGggcGF0aHMgdGhhdCByZWZlcmVuY2UgbWFwIGtleXMiLCA6YXJnbGlzdHMgKFtmb3JtIGluXSl9LCA6c291cmNlICIoZGVmblxyXG4gdmFsdWUtaW5cclxuIFwiU2ltaWxhciB0byBnZXQtaW4sIGJ1dCB3b3JrcyB3aXRoIHBhdGhzIHRoYXQgcmVmZXJlbmNlIG1hcCBrZXlzXCJcclxuIFtmb3JtIGluXVxyXG4gKGxldFxyXG4gIFtbayAmIHJzdF0gaW5dXHJcbiAgKGNvbmRcclxuICAgKGVtcHR5PyBpbilcclxuICAgZm9ybVxyXG4gICAoYW5kIChtYXA/IGZvcm0pIChwYXRocy9rcHM/IGspKVxyXG4gICAoOmtleSBrKVxyXG4gICAoYW5kIChtYXA/IGZvcm0pIChwYXRocy9rdnBzPyBrKSlcclxuICAgKHJlY3VyIChudGggKHNlcSBmb3JtKSAoOmlkeCBrKSkgcnN0KVxyXG4gICAoYXNzb2NpYXRpdmU/IGZvcm0pXHJcbiAgIChyZWN1ciAoZ2V0IGZvcm0gaykgcnN0KVxyXG4gICAoYW5kIChpbnQ/IGspIChzZXFhYmxlPyBmb3JtKSlcclxuICAgKHJlY3VyIChudGggKHNlcSBmb3JtKSBrKSByc3QpKSkpXHJcbiJ9IHs6c3ltIGxlYWYtb25seSwgOm1ldGEgezpkb2MgIkdpdmVuIGEgY29sbGVjdGlvbiBvZiBwcm9ibGVtcywgcmV0dXJucyBvbmx5IHRob3NlIHByb2JsZW1zIHdpdGggZGF0YSBvbiB0aGUgJ2xlYXZlcycgb2YgdGhlIGRhdGEiLCA6YXJnbGlzdHMgKFtwcm9ibGVtc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGxlYWYtb25seVxyXG4gXCJHaXZlbiBhIGNvbGxlY3Rpb24gb2YgcHJvYmxlbXMsIHJldHVybnMgb25seSB0aG9zZSBwcm9ibGVtcyB3aXRoIGRhdGEgb24gdGhlICdsZWF2ZXMnIG9mIHRoZSBkYXRhXCJcclxuIFtwcm9ibGVtc11cclxuIChsZXRcclxuICBbcGF0aHMtdG8tZGF0YSAoaW50byAje30gKG1hcCA6ZXhwb3VuZC9pbiBwcm9ibGVtcykpXVxyXG4gIChyZW1vdmVcclxuICAgKGZuXHJcbiAgICBbcHJvYmxlbV1cclxuICAgIChzb21lXHJcbiAgICAgKGZuIFtwYXRoXSAocGF0aHMvcHJlZml4LXBhdGg/ICg6ZXhwb3VuZC9pbiBwcm9ibGVtKSBwYXRoKSlcclxuICAgICBwYXRocy10by1kYXRhKSlcclxuICAgcHJvYmxlbXMpKSlcclxuIn0gezpzeW0gZml4LXZpYSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtzcGVjIHByb2JsZW1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmaXgtdmlhXHJcbiBbc3BlYyBwcm9ibGVtXVxyXG4gKGlmXHJcbiAgKD0gc3BlYyAoZmlyc3QgKDp2aWEgcHJvYmxlbSkpKVxyXG4gIChhc3NvYyBwcm9ibGVtIDpleHBvdW5kL3ZpYSAoOnZpYSBwcm9ibGVtKSlcclxuICAoYXNzb2MgcHJvYmxlbSA6ZXhwb3VuZC92aWEgKGludG8gW3NwZWNdICg6dmlhIHByb2JsZW0pKSkpKVxyXG4ifSB7OnN5bSBhbm5vdGF0ZSwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtleHBsYWluLWRhdGFdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBhbm5vdGF0ZVxyXG4gW2V4cGxhaW4tZGF0YV1cclxuIChsZXRcclxuICBbezprZXlzXHJcbiAgICBbOmNsb2p1cmUuc3BlYy5hbHBoYS9wcm9ibGVtc1xyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvdmFsdWVcclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL2FyZ3NcclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL3JldFxyXG4gICAgIDpjbG9qdXJlLnNwZWMuYWxwaGEvZm5cclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL2ZhaWx1cmVcclxuICAgICA6Y2xvanVyZS5zcGVjLmFscGhhL3NwZWNdfVxyXG4gICBleHBsYWluLWRhdGFcclxuICAgY2FsbGVyXHJcbiAgIChvclxyXG4gICAgKDpjbG9qdXJlLnNwZWMudGVzdC5hbHBoYS9jYWxsZXIgZXhwbGFpbi1kYXRhKVxyXG4gICAgKDpvcmNoZXN0cmEuc3BlYy50ZXN0L2NhbGxlciBleHBsYWluLWRhdGEpKVxyXG4gICBmb3JtXHJcbiAgIChpZlxyXG4gICAgKG5vdD0gOmluc3RydW1lbnQgZmFpbHVyZSlcclxuICAgIHZhbHVlXHJcbiAgICAoY29uZFxyXG4gICAgIChjb250YWlucz8gZXhwbGFpbi1kYXRhIDpjbG9qdXJlLnNwZWMuYWxwaGEvcmV0KVxyXG4gICAgIHJldFxyXG4gICAgIChjb250YWlucz8gZXhwbGFpbi1kYXRhIDpjbG9qdXJlLnNwZWMuYWxwaGEvZm4pXHJcbiAgICAgZm5cclxuICAgICAoY29udGFpbnM/IGV4cGxhaW4tZGF0YSA6Y2xvanVyZS5zcGVjLmFscGhhL2FyZ3MpXHJcbiAgICAgYXJncykpXHJcbiAgIHByb2JsZW1zJ1xyXG4gICAobWFwXHJcbiAgICAoY29tcFxyXG4gICAgIChwYXJ0aWFsIGFkanVzdC1pbiBmb3JtKVxyXG4gICAgIChwYXJ0aWFsIGFkanVzdC1wYXRoIGZhaWx1cmUpXHJcbiAgICAgKHBhcnRpYWwgYWRkLXNwZWMgc3BlYylcclxuICAgICAocGFydGlhbCBmaXgtdmlhIHNwZWMpXHJcbiAgICAgKGZuKiBbcDFfXzQ5MDEyI10gKGFzc29jIHAxX180OTAxMiMgOmV4cG91bmQvZm9ybSBmb3JtKSkpXHJcbiAgICBwcm9ibGVtcyldXHJcbiAgKGFzc29jXHJcbiAgIGV4cGxhaW4tZGF0YVxyXG4gICA6ZXhwb3VuZC9mb3JtXHJcbiAgIGZvcm1cclxuICAgOmV4cG91bmQvY2FsbGVyXHJcbiAgIGNhbGxlclxyXG4gICA6ZXhwb3VuZC9wcm9ibGVtc1xyXG4gICBwcm9ibGVtcycpKSlcclxuIn0gezpzeW0gZXNjYXBlLXJlcGxhY2VtZW50LCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3BhdHRlcm4gc10pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGVzY2FwZS1yZXBsYWNlbWVudFxyXG4gW3BhdHRlcm4gc11cclxuICM/KDpjbGogKGlmIChzdHJpbmc/IHBhdHRlcm4pIHMgKHN0cmluZy9yZS1xdW90ZS1yZXBsYWNlbWVudCBzKSkgOmNsanMgKHN0cmluZy9yZXBsYWNlIHMgI1wiXFwkXCIgXCIkJCQkXCIpKSlcclxuIn0gezpzeW0gaGlnaGxpZ2h0ZWQtdmFsdWUsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHByb2JsZW0sIHJldHVybnMgYSBwcmV0dHkgcHJpbnRlZFxuICAgc3RyaW5nIHRoYXQgaGlnaGxpZ2h0cyB0aGUgcHJvYmxlbSB2YWx1ZSIsIDphcmdsaXN0cyAoW29wdHMgcHJvYmxlbV0pfSwgOnNvdXJjZSAiKGRlZm5cclxuIGhpZ2hsaWdodGVkLXZhbHVlXHJcbiBcIkdpdmVuIGEgcHJvYmxlbSwgcmV0dXJucyBhIHByZXR0eSBwcmludGVkXFxuICAgc3RyaW5nIHRoYXQgaGlnaGxpZ2h0cyB0aGUgcHJvYmxlbSB2YWx1ZVwiXHJcbiBbb3B0cyBwcm9ibGVtXVxyXG4gKGxldFxyXG4gIFt7OmtleXMgWzpleHBvdW5kL2Zvcm0gOmV4cG91bmQvaW5dfVxyXG4gICBwcm9ibGVtXHJcbiAgIHs6a2V5cyBbc2hvdy12YWxpZC12YWx1ZXM/XSwgOm9yIHtzaG93LXZhbGlkLXZhbHVlcz8gZmFsc2V9fVxyXG4gICBvcHRzXHJcbiAgIHZhbHVlLWF0LXBhdGhcclxuICAgKHZhbHVlLWluIGZvcm0gaW4pXHJcbiAgIHJlbGV2YW50XHJcbiAgIChzdHJcclxuICAgIFwiKFwiXHJcbiAgICA6ZXhwb3VuZC5wcm9ibGVtcy9yZWxldmFudFxyXG4gICAgXCJ8KFwiXHJcbiAgICA6ZXhwb3VuZC5wcm9ibGVtcy9rdi1yZWxldmFudFxyXG4gICAgXCJcXFxccytcIlxyXG4gICAgOmV4cG91bmQucHJvYmxlbXMva3YtcmVsZXZhbnRcclxuICAgIFwiKSlcIilcclxuICAgcmVnZXhcclxuICAgKHJlLXBhdHRlcm4gKHN0ciBcIiguKilcIiByZWxldmFudCBcIi4qXCIpKVxyXG4gICBzXHJcbiAgIChiaW5kaW5nXHJcbiAgICBbKnByaW50LW5hbWVzcGFjZS1tYXBzKiBmYWxzZV1cclxuICAgIChwcmludGVyL3BwcmludC1zdHJcclxuICAgICAod2Fsay9wcmV3YWxrLXJlcGxhY2VcclxuICAgICAgezpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQgJy4uLn1cclxuICAgICAgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gZm9ybSBpbikpKSlcclxuICAgW2xpbmUgcHJlZml4ICYgX21vcmVdXHJcbiAgIChyZS1maW5kIHJlZ2V4IHMpXHJcbiAgIGhpZ2hsaWdodGVkLWxpbmVcclxuICAgKC0+XHJcbiAgICBsaW5lXHJcbiAgICAoc3RyaW5nL3JlcGxhY2VcclxuICAgICAocmUtcGF0dGVybiByZWxldmFudClcclxuICAgICAoZXNjYXBlLXJlcGxhY2VtZW50XHJcbiAgICAgIChyZS1wYXR0ZXJuIHJlbGV2YW50KVxyXG4gICAgICAocHJpbnRlci9pbmRlbnRcclxuICAgICAgIDBcclxuICAgICAgIChjb3VudCBwcmVmaXgpXHJcbiAgICAgICAoYW5zaS9jb2xvciAocHJpbnRlci9wcHJpbnQtc3RyIHZhbHVlLWF0LXBhdGgpIDpiYWQtdmFsdWUpKSkpXHJcbiAgICAoc3RyXHJcbiAgICAgXCJcXG5cIlxyXG4gICAgIChhbnNpL2NvbG9yXHJcbiAgICAgIChoaWdobGlnaHQtbGluZSBwcmVmaXggKHByaW50ZXIvcHByaW50LXN0ciB2YWx1ZS1hdC1wYXRoKSlcclxuICAgICAgOnBvaW50ZXIpKSldXHJcbiAgKHByaW50ZXIvbm8tdHJhaWxpbmctd2hpdGVzcGFjZVxyXG4gICAoc3RyaW5nL3JlcGxhY2VcclxuICAgIHNcclxuICAgIGxpbmVcclxuICAgIChlc2NhcGUtcmVwbGFjZW1lbnQgbGluZSBoaWdobGlnaHRlZC1saW5lKSkpKSlcclxuIn0gezpzeW0gc3VtbWFyeS1mb3JtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW3Nob3ctdmFsaWQtdmFsdWVzPyBmb3JtIGluXSl9LCA6c291cmNlICIoZGVmblxyXG4gc3VtbWFyeS1mb3JtXHJcbiBbc2hvdy12YWxpZC12YWx1ZXM/IGZvcm0gaW5dXHJcbiAobGV0XHJcbiAgW1trICYgcnN0XVxyXG4gICBpblxyXG4gICByc3RcclxuICAgKG9yIHJzdCBbXSlcclxuICAgZGlzcGxheWVkLWZvcm1cclxuICAgKGlmIHNob3ctdmFsaWQtdmFsdWVzPyBmb3JtIChibGFuay1mb3JtIGZvcm0pKV1cclxuICAoY29uZFxyXG4gICAoZW1wdHk/IGluKVxyXG4gICA6ZXhwb3VuZC5wcm9ibGVtcy9yZWxldmFudFxyXG4gICAoYW5kIChtYXA/IGZvcm0pIChwYXRocy9rcHM/IGspKVxyXG4gICAoLT5cclxuICAgIGRpc3BsYXllZC1mb3JtXHJcbiAgICAoZGlzc29jICg6a2V5IGspKVxyXG4gICAgKGFzc29jXHJcbiAgICAgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gKDprZXkgaykgcnN0KVxyXG4gICAgIDpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQpKVxyXG4gICAoYW5kIChtYXA/IGZvcm0pIChwYXRocy9rdnBzPyBrKSlcclxuICAgKHJlY3VyIHNob3ctdmFsaWQtdmFsdWVzPyAobnRoIChzZXEgZm9ybSkgKDppZHggaykpIHJzdClcclxuICAgKGFzc29jaWF0aXZlPyBmb3JtKVxyXG4gICAoYXNzb2NcclxuICAgIGRpc3BsYXllZC1mb3JtXHJcbiAgICBrXHJcbiAgICAoc3VtbWFyeS1mb3JtIHNob3ctdmFsaWQtdmFsdWVzPyAoZ2V0IGZvcm0gaykgcnN0KSlcclxuICAgKGFuZCAoaW50PyBrKSAoc2VxPyBmb3JtKSlcclxuICAgKGFwcGx5XHJcbiAgICBsaXN0XHJcbiAgICAoLT5cclxuICAgICBkaXNwbGF5ZWQtZm9ybVxyXG4gICAgIHZlY1xyXG4gICAgIChhc3NvYyBrIChzdW1tYXJ5LWZvcm0gc2hvdy12YWxpZC12YWx1ZXM/IChudGggZm9ybSBrKSByc3QpKSkpXHJcbiAgIChhbmQgKGludD8gaykgKHNldD8gZm9ybSkpXHJcbiAgIChpbnRvXHJcbiAgICAje31cclxuICAgICgtPlxyXG4gICAgIGRpc3BsYXllZC1mb3JtXHJcbiAgICAgdmVjXHJcbiAgICAgKGFzc29jXHJcbiAgICAgIGtcclxuICAgICAgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gKG50aCAoc2VxIGZvcm0pIGspIHJzdCkpKSlcclxuICAgKGFuZCAoaW50PyBrKSAobGlzdD8gZm9ybSkpXHJcbiAgIChpbnRvXHJcbiAgICAnKClcclxuICAgICgtPlxyXG4gICAgIGRpc3BsYXllZC1mb3JtXHJcbiAgICAgdmVjXHJcbiAgICAgKGFzc29jXHJcbiAgICAgIGtcclxuICAgICAgKHN1bW1hcnktZm9ybSBzaG93LXZhbGlkLXZhbHVlcz8gKG50aCAoc2VxIGZvcm0pIGspIHJzdCkpKSlcclxuICAgOmVsc2VcclxuICAgKHRocm93XHJcbiAgICAoZXgtaW5mb1xyXG4gICAgIFwiQ2Fubm90IGZpbmQgcGF0aCBzZWdtZW50IGluIGZvcm0uIFRoaXMgY2FuIGJlIGNhdXNlZCBieSB1c2luZyBjb25mb3JtZXJzIHRvIHRyYW5zZm9ybSB2YWx1ZXMsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRXhwb3VuZFwiXHJcbiAgICAgezpmb3JtIGZvcm0sIDppbiBpbn0pKSkpKVxyXG4ifSB7OnN5bSBibGFuay1mb3JtLCA6bWV0YSB7OmRvYyBuaWwsIDphcmdsaXN0cyAoW2Zvcm1dKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBibGFuay1mb3JtXHJcbiBbZm9ybV1cclxuIChjb25kXHJcbiAgKG1hcD8gZm9ybSlcclxuICAoemlwbWFwIChrZXlzIGZvcm0pIChyZXBlYXQgOmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCkpXHJcbiAgKHZlY3Rvcj8gZm9ybSlcclxuICAodmVjIChyZXBlYXQgKGNvdW50IGZvcm0pIDpleHBvdW5kLnByb2JsZW1zL2lycmVsZXZhbnQpKVxyXG4gIChzZXQ/IGZvcm0pXHJcbiAgZm9ybVxyXG4gIChvciAobGlzdD8gZm9ybSkgKHNlcT8gZm9ybSkpXHJcbiAgKGFwcGx5IGxpc3QgKHJlcGVhdCAoY291bnQgZm9ybSkgOmV4cG91bmQucHJvYmxlbXMvaXJyZWxldmFudCkpXHJcbiAgOmVsc2VcclxuICA6ZXhwb3VuZC5wcm9ibGVtcy9pcnJlbGV2YW50KSlcclxuIn0pLCBjbGpzLnNwZWMuZ2VuLmFscGhhICh7OnN5bSBxdWljay1jaGVjaywgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFsmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuIHF1aWNrLWNoZWNrIFsmIGFyZ3NdIChhcHBseSBAcXVpY2stY2hlY2stcmVmIGFyZ3MpKVxyXG4ifSB7OnN5bSBmb3ItYWxsKiwgOm1ldGEgezpkb2MgIkR5bmFtaWNhbGx5IGxvYWRlZCBjbG9qdXJlLnRlc3QuY2hlY2sucHJvcGVydGllcy9mb3ItYWxsKi4iLCA6YXJnbGlzdHMgKFsmIGFyZ3NdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBmb3ItYWxsKlxyXG4gXCJEeW5hbWljYWxseSBsb2FkZWQgY2xvanVyZS50ZXN0LmNoZWNrLnByb3BlcnRpZXMvZm9yLWFsbCouXCJcclxuIFsmIGFyZ3NdXHJcbiAoYXBwbHkgQGZvci1hbGwqLXJlZiBhcmdzKSlcclxuIn0gezpzeW0gZGVsYXktaW1wbCwgOm1ldGEgezpkb2MgbmlsLCA6YXJnbGlzdHMgKFtnZm5kXSl9LCA6c291cmNlICIoZGVmblxyXG4gZGVsYXktaW1wbFxyXG4gW2dmbmRdXHJcbiAoZ2VuZXJhdG9yIChmbiBbcm5kIHNpemVdICgoOmdlbiBAZ2ZuZCkgcm5kIHNpemUpKSkpXHJcbiJ9IHs6c3ltIGNhdCwgOm1ldGEgezpkb2MgIlJldHVybnMgYSBnZW5lcmF0b3Igb2YgYSBzZXF1ZW5jZSBjYXRlbmF0ZWQgZnJvbSByZXN1bHRzIG9mXG5nZW5zLCBlYWNoIG9mIHdoaWNoIHNob3VsZCBnZW5lcmF0ZSBzb21ldGhpbmcgc2VxdWVudGlhbC4iLCA6YXJnbGlzdHMgKFsmIGdlbnNdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBjYXRcclxuIFwiUmV0dXJucyBhIGdlbmVyYXRvciBvZiBhIHNlcXVlbmNlIGNhdGVuYXRlZCBmcm9tIHJlc3VsdHMgb2ZcXG5nZW5zLCBlYWNoIG9mIHdoaWNoIHNob3VsZCBnZW5lcmF0ZSBzb21ldGhpbmcgc2VxdWVudGlhbC5cIlxyXG4gWyYgZ2Vuc11cclxuIChmbWFwXHJcbiAgKGZuKiBbcDFfXzQ4OTczI10gKGFwcGx5IGNvbmNhdCBwMV9fNDg5NzMjKSlcclxuICAoYXBwbHkgdHVwbGUgZ2VucykpKVxyXG4ifSB7OnN5bSBnZW4tZm9yLXByZWQsIDptZXRhIHs6ZG9jICJHaXZlbiBhIHByZWRpY2F0ZSwgcmV0dXJucyBhIGJ1aWx0LWluIGdlbmVyYXRvciBpZiBvbmUgZXhpc3RzLiIsIDphcmdsaXN0cyAoW3ByZWRdKX0sIDpzb3VyY2UgIihkZWZuXHJcbiBnZW4tZm9yLXByZWRcclxuIFwiR2l2ZW4gYSBwcmVkaWNhdGUsIHJldHVybnMgYSBidWlsdC1pbiBnZW5lcmF0b3IgaWYgb25lIGV4aXN0cy5cIlxyXG4gW3ByZWRdXHJcbiAoaWYgKHNldD8gcHJlZCkgKGVsZW1lbnRzIHByZWQpIChnZXQgQGdlbi1idWlsdGlucyBwcmVkKSkpXHJcbiJ9KX0sIDpkeW5hZG9jLmNvbW1vbi92YXItc3ltIGRpZ2l0c30=