IyBjb25maWd1cmUgb3B0aW9ucwojCiMgU29tZSBjYW4gYmUgb3ZlcnJpZGVuIG9uIHJwbWJ1aWxkIGNvbW1hbmRsaW5lIHdpdGg6CiMgcnBtYnVpbGQgLS1kZWZpbmUgJ3ZhcmlhYmxlIHZhbHVlJwojCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBRdWFnZ2EgY29uZmlndXJlIG9wdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHdpdGgtZmVhdHVyZSBvcHRpb25zCiV7IT93aXRoX3NubXA6CQklZGVmaW5lIHdpdGhfc25tcAkxIH0KJXshP3dpdGhfdnR5c2g6CQklZGVmaW5lCXdpdGhfdnR5c2gJMSB9CiV7IT93aXRoX29zcGZfdGU6CSVkZWZpbmUJd2l0aF9vc3BmX3RlCTEgfQoleyE/d2l0aF9uc3NhOgkJJWRlZmluZQl3aXRoX25zc2EJMSB9CiV7IT93aXRoX29wYXF1ZV9sc2E6CSVkZWZpbmUJd2l0aF9vcGFxdWVfbHNhIDEgfQoleyE/d2l0aF90Y3BfemVicmE6CSVkZWZpbmUJd2l0aF90Y3BfemVicmEJMCB9CiV7IT93aXRoX3Z0eXNoOgkJJWRlZmluZQl3aXRoX3Z0eXNoCTEgfQoleyE/d2l0aF9wYW06CQklZGVmaW5lCXdpdGhfcGFtCTEgfQoleyE/d2l0aF9pcHY2OgkJJWRlZmluZQl3aXRoX2lwdjYJMSB9CiV7IT93aXRoX29zcGZjbGllbnQ6CSVkZWZpbmUJd2l0aF9vc3BmY2xpZW50IDEgfQoleyE/d2l0aF9vc3BmYXBpOgklZGVmaW5lCXdpdGhfb3NwZmFwaQkxIH0KJXshP3dpdGhfaXJkcDoJCSVkZWZpbmUJd2l0aF9pcmRwCTEgfQoleyE/d2l0aF9ydGFkdjoJCSVkZWZpbmUJd2l0aF9ydGFkdgkxIH0KJXshP3dpdGhfaXNpc2Q6CQklZGVmaW5lCXdpdGhfaXNpc2QJMSB9CiV7IT93aXRoX3NoYXJlZDoJJWRlZmluZQl3aXRoX3NoYXJlZAkxIH0KJXshP3dpdGhfbXVsdGlwYXRoOgklZGVmaW5lCXdpdGhfbXVsdGlwYXRoCTY0IH0KJXshP3F1YWdnYV91c2VyOgklZGVmaW5lCXF1YWdnYV91c2VyCXF1YWdnYSB9CiV7IT92dHlfZ3JvdXA6CQklZGVmaW5lCXZ0eV9ncm91cAlxdWFnZ2F2dHkgfQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgZGlzdHJvIHNwZWNpZmljIHR3ZWFrcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGRlZmF1bHQgZGlzdHJvLiBPdmVycmlkZSB3aXRoIHJwbWJ1aWxkIC1EICJkaXN0IFhYWCIgCiV7ZXhwYW5kOiAlJWRlZmluZSBkZWZhdWx0X2Rpc3QgJShycG0gLXEgLS1xZiAnZmMlJXtWRVJTSU9OfScgZmVkb3JhLXJlbGVhc2UgfCBncmVwIC12ICdub3QgaW5zdGFsbGVkJyl9CiV7IT9kaXN0OgkJJWRlZmluZQkJZGlzdAkle2RlZmF1bHRfZGlzdH19CgojIGFzIGRpc3Ryb3MgY2hhbmdlIHBhY2thZ2VzIHdlIGRlcGVuZCBvbiwgb3VyIFJlcXVpcmVzIGhhdmUgdG8gY2hhbmdlLCBzYWRseS4KJWRlZmluZSBxdWFnZ2FfYnVpbGRyZXFzIHRleGkyaHRtbCB0ZXhpbmZvIHRldGV4IGF1dG9jb25mIHBhbS1kZXZlbAolZGVmaW5lIHF1YWdnYV9idWlsZHJlcXMgJXtxdWFnZ2FfYnVpbGRyZXFzfSBwYXRjaCBsaWJjYXAtZGV2ZWwKCiMgRkM0IGFuZCA1IHNwbGl0IHRleGkyaHRtbCBvdXQgb2YgdGV0ZXggcGFja2FnZS4KJWlmICIlZGlzdCIgPT0gImZjNCIgfHwgIiVkaXN0IiA9PSAiZmM1IgolZGVmaW5lICBxdWFnZ2FfYnVpbGRyZXFzICV7cXVhZ2dhX2J1aWxkcmVxc30gdGV4aTJodG1sCiVlbmRpZgoKIyBwYW1fc3RhY2sgaXMgZGVwcmVjYXRlZCBpbiBGQzUKIyBkZWZhdWx0IHRvIHBhbV9zdGFjaywgZGVmYXVsdCBzaG91bGQgYmUgY2hhbmdlZCBsYXRlci4KJWlmICIlZGlzdCIgPT0gImZjNSIKJWRlZmluZQlxdWFnZ2FfcGFtX3NvdXJjZSBxdWFnZ2EucGFtCiVlbHNlCiVkZWZpbmUJcXVhZ2dhX3BhbV9zb3VyY2UgcXVhZ2dhLnBhbS5zdGFjawolZW5kaWYKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiV7IT9xdWFnZ2FfdWlkOgkJJWRlZmluZSAgICAgICAgIHF1YWdnYV91aWQgICAgICA5MiB9CiV7IT9xdWFnZ2FfZ2lkOgkJJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MiB9CiVkZWZpbmUJCWRhZW1vbl9saXN0CXplYnJhIHJpcGQgb3NwZmQgYmdwZAoKJWlmICV7d2l0aF9pcHY2fQolZGVmaW5lCQlkYWVtb252Nl9saXN0CXJpcG5nZCBiYWJlbGQgb3NwZjZkCiVlbHNlCiVkZWZpbmUJCWRhZW1vbnY2X2xpc3QJIiIKJWVuZGlmCgolaWYgJXt3aXRoX2lzaXNkfQolZGVmaW5lCQlkYWVtb25fb3RoZXIJaXNpc2QKJWVsc2UKJWRlZmluZQkJZGFlbW9uX290aGVyCSIiCiVlbmRpZgoKJWRlZmluZQkJYWxsX2RhZW1vbnMJJXtkYWVtb25fbGlzdH0gJXtkYWVtb252Nl9saXN0fSAle2RhZW1vbl9vdGhlcn0gd2F0Y2hxdWFnZ2EKCiMgYWxsb3cgYnVpbGQgZGlyIHRvIGJlIGtlcHQKJXshP2tlZXBfYnVpbGQ6CQklZGVmaW5lCQlrZWVwX2J1aWxkCTAgfQoKI3JlbGVhc2Ugc3ViLXJldmlzaW9uICh0aGUgdHdvIGRpZ2l0cyBhZnRlciB0aGUgQ09ORkRBVEUpCiV7IT9yZWxlYXNlX3JldjoJJWRlZmluZQkJcmVsZWFzZV9yZXYJMDEgfQoKU3VtbWFyeTogUm91dGluZyBkYWVtb24KTmFtZToJCXF1YWdnYQpWZXJzaW9uOglAVkVSU0lPTkAKUmVsZWFzZToJQENPTkZEQVRFQCV7cmVsZWFzZV9yZXZ9CkxpY2Vuc2U6CUdQTApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKU291cmNlMDoJaHR0cDovL3d3dy5xdWFnZ2EubmV0L3NuYXBzaG90cy9jdnMvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negpVUkw6CQlodHRwOi8vd3d3LnF1YWdnYS5uZXQKJWlmICV7d2l0aF9zbm1wfQpCdWlsZFJlcXVpcmVzOgluZXQtc25tcC1kZXZlbApSZXF1aXJlcyhwcmUpOgkJbmV0LXNubXAKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CkJ1aWxkUmVxdWlyZXM6CXJlYWRsaW5lIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMgbmN1cnNlcy1kZXZlbApSZXF1aXJlcyhwcmUpOgkJbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBwYW0tZGV2ZWwgcGF0Y2ggbGliY2FwLWRldmVsIHRldGV4CiMgSW5pdHNjcmlwdHMgPiA1LjYwIGlzIHJlcXVpcmVkIGZvciBJUHY2IHN1cHBvcnQKUmVxdWlyZXMocHJlKToJCWluaXRzY3JpcHRzID49IDUuNjAKUmVxdWlyZXMocHJlKToJCW5jdXJzZXMgcGFtClJlcXVpcmVzKHByZSk6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0IHplYnJhCgolZGVzY3JpcHRpb24KUXVhZ2dhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpRdWFnZ2Egc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KClF1YWdnYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlIFJlZmxlY3Rvci4gSXQgaXMKbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyIGEgbmV3IGFyY2hpdGVjdHVyZS4KUXVhZ2dhIGJ5IGRlc2lnbiBoYXMgYSBwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKUXVhZ2dhIGlzIGEgZm9yayBvZiBHTlUgWmVicmEuCgolcGFja2FnZSBjb250cmliClN1bW1hcnk6IGNvbnRyaWIgdG9vbHMgZm9yIHF1YWdnYQpHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBjb250cmliCkNvbnRyaWJ1dGVkLzNyZCBwYXJ0eSB0b29scyB3aGljaCBtYXkgYmUgb2YgdXNlIHdpdGggcXVhZ2dhLgoKJXBhY2thZ2UgZGV2ZWwKU3VtbWFyeTogSGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgZm9yIHF1YWdnYSBkZXZlbG9wbWVudApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBkZXZlbApUaGUgcXVhZ2dhLWRldmVsIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIG5lY2Nlc3NhcnkgZm9yCmRldmVsb3BpbmcgT1NQRi1BUEkgYW5kIHF1YWdnYSBhcHBsaWNhdGlvbnMuCgolcHJlcAolc2V0dXAgIC1xCgolYnVpbGQKCiMgRm9yIHN0YW5kYXJkIGdjYyB2ZXJib3NpdHksIHVuY29tbWVudCB0aGVzZSBsaW5lczoKI0NGTEFHUz0iJXtvcHRmbGFnc30gLVdhbGwgLVdzaWduLWNvbXBhcmUgLVdwb2ludGVyLWFyaXRoIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdiYWQtZnVuY3Rpb24tY2FzdCAtV3dyaXRlLXN0cmluZ3MiCgojIEZvciB1bHRyYSBnY2MgdmVyYm9zaXR5LCB1bmNvbW1lbnQgdGhlc2UgbGluZXMgYWxzbzoKI0NGTEFHUz0iJHtDRkxBR1N9IC1XIC1XY2FzdC1xdWFsIC1Xc3RyaWN0LXByb3RvdHlwZXMiCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV21pc3NpbmctZGVjbGFyYXRpb25zIC1XbWlzc2luZy1ub3JldHVybiIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XdW5yZWFjaGFibGUtY29kZSIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XcGFja2VkIC1XcGFkZGVkIgoKJWNvbmZpZ3VyZSBcCiVpZiAhJXt3aXRoX3NoYXJlZH0KCS0tZGlzYWJsZS1zaGFyZWQgXAolZW5kaWYKJWlmICV7d2l0aF9pcHY2fQoJLS1lbmFibGUtaXB2NiBcCiVlbmRpZgolaWYgJXt3aXRoX3NubXB9CgktLWVuYWJsZS1zbm1wIFwKJWVuZGlmCiVpZiAle3dpdGhfbXVsdGlwYXRofQoJLS1lbmFibGUtbXVsdGlwYXRoPSV7d2l0aF9tdWx0aXBhdGh9IFwKJWVuZGlmCiVpZiAle3dpdGhfdGNwX3plYnJhfQoJLS1lbmFibGUtdGNwLXplYnJhIFwKJWVuZGlmCiVpZiAle3dpdGhfbnNzYX0KCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vcGFxdWVfbHNhfQoJLS1lbmFibGUtb3BhcXVlLWxzYSBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZfdGV9CgktLWVuYWJsZS1vc3BmLXRlIFwKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZjbGllbnR9CgktLWVuYWJsZS1vc3BmY2xpZW50PXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmY2xpZW50PW5vXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lyZHB9CgktLWVuYWJsZS1pcmRwPXllcyBcCiVlbHNlCgktLWVuYWJsZS1pcmRwPW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfcnRhZHZ9CgktLWVuYWJsZS1ydGFkdj15ZXMgXAolZWxzZQoJLS1lbmFibGUtcnRhZHY9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KCS0tZW5hYmxlLWlzaXNkIFwKJWVsc2UKCS0tZGlzYWJsZS1pc2lzZCBcCiVlbmRpZgolaWYgJXt3aXRoX3BhbX0KCS0td2l0aC1saWJwYW0gXAolZW5kaWYKJWlmICVxdWFnZ2FfdXNlcgoJLS1lbmFibGUtdXNlcj0lcXVhZ2dhX3VzZXIgXAoJLS1lbmFibGUtZ3JvdXA9JXF1YWdnYV91c2VyIFwKJWVuZGlmCiVpZiAldnR5X2dyb3VwCgktLWVuYWJsZS12dHktZ3JvdXA9JXZ0eV9ncm91cCBcCiVlbmRpZgotLWVuYWJsZS1uZXRsaW5rIC0tZW5hYmxlLWdjYy1yZHluYW1pYwoKbWFrZSAlez9fc21wX21mbGFnc30gTUFLRUlORk89Im1ha2VpbmZvIC0tbm8tc3BsaXQiCgpwdXNoZCBkb2MKdGV4aTJodG1sIC1udW1iZXIgcXVhZ2dhLnRleGkKcG9wZAoKJWluc3RhbGwKcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKaW5zdGFsbCAtZCAkUlBNX0JVSUxEX1JPT1QvZXRjL3tyYy5kL2luaXQuZCxzeXNjb25maWcsbG9ncm90YXRlLmQscGFtLmR9IFwKCSRSUE1fQlVJTERfUk9PVC92YXIvbG9nL3F1YWdnYSAkUlBNX0JVSUxEX1JPT1Qle19pbmZvZGlyfQoKbWFrZSBpbnN0YWxsIFwKCURFU1RESVI9JFJQTV9CVUlMRF9ST09UCgojIFJlbW92ZSB0aGlzIGZpbGUsIGFzIGl0IGlzIHVuaW5zdGFsbGVkIGFuZCBjYXVzZXMgZXJyb3JzIHdoZW4gYnVpbGRpbmcgb24gUkg5CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvdXNyL3NoYXJlL2luZm8vZGlyCgojIGluc3RhbGwgZXRjIHNvdXJjZXMKZm9yIGRhZW1vbiBpbiAle2FsbF9kYWVtb25zfSA7IGRvCglpZiBbIHgiJHtkYWVtb259IiAhPSB4IiIgXSA7IHRoZW4KCQlpbnN0YWxsICV7emViX3JoX3NyY30vJHtkYWVtb259LmluaXQgXAoJCQkkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufQoJZmkKZG9uZQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vJXtxdWFnZ2FfcGFtX3NvdXJjZX0gXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9wYW0uZC9xdWFnZ2EKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3F1YWdnYS5sb2dyb3RhdGUgXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9sb2dyb3RhdGUuZC9xdWFnZ2EKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3F1YWdnYS5zeXNjb25maWcgXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9zeXNjb25maWcvcXVhZ2dhCmluc3RhbGwgLWQgLW03NTAgICRSUE1fQlVJTERfUk9PVC92YXIvcnVuL3F1YWdnYQoKJXByZQojIGFkZCB2dHlfZ3JvdXAKJWlmICV2dHlfZ3JvdXAKaWYgZ2V0ZW50IGdyb3VwICV2dHlfZ3JvdXAgPiAvZGV2L251bGwgOyB0aGVuIDogOyBlbHNlIFwKIC91c3Ivc2Jpbi9ncm91cGFkZCAtciAldnR5X2dyb3VwID4gL2Rldi9udWxsIHx8IDogOyBmaQolZW5kaWYKCiMgYWRkIHF1YWdnYSB1c2VyIGFuZCBncm91cAolaWYgJXF1YWdnYV91c2VyCiMgRW5zdXJlIHRoYXQgcXVhZ2dhX2dpZCBnZXRzIGNvcnJlY3RseSBhbGxvY2F0ZWQKaWYgZ2V0ZW50IGdyb3VwICVxdWFnZ2FfdXNlciA+L2Rldi9udWxsOyB0aGVuIDogOyBlbHNlIFwKIC91c3Ivc2Jpbi9ncm91cGFkZCAtZyAlcXVhZ2dhX2dpZCAlcXVhZ2dhX3VzZXIgPiAvZGV2L251bGwgfHwgOiA7IFwKZmkKaWYgZ2V0ZW50IHBhc3N3ZCAlcXVhZ2dhX3VzZXIgPi9kZXYvbnVsbCA7IHRoZW4gOiA7IGVsc2UgXAogL3Vzci9zYmluL3VzZXJhZGQgIC11ICVxdWFnZ2FfdWlkIC1nICVxdWFnZ2FfZ2lkIFwKICAtTSAtciAtcyAvc2Jpbi9ub2xvZ2luIC1jICJRdWFnZ2Egcm91dGluZyBzdWl0ZSIgXAogIC1kICVfbG9jYWxzdGF0ZWRpciAlcXVhZ2dhX3VzZXIgMj4gL2Rldi9udWxsIHx8IDogOyBcCmZpCiVlbmRpZgoKJXBvc3QKIyB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIDxzZXJ2aWNlIG5hbWU+IDxwb3J0L3Byb3RvPiA8Y29tbWVudD4KIyBlLmcuIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlICgpCnsKICAjIEFkZCBwb3J0IC9ldGMvc2VydmljZXMgZW50cnkgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZSAKICBpZiBbIC1mIC9ldGMvc2VydmljZXMgXSAmJiBcCiAgICAgICEgJV9fc2VkIC1lICdzLyMuKiQvLycgL2V0Yy9zZXJ2aWNlcyB8ICVfX2dyZXAgLXdxICQxIDsgdGhlbgogICAgZWNobyAiJDEJCSQyCQkJIyAkMyIgID4+IC9ldGMvc2VydmljZXMKICBmaQp9Cgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhICAgIDI2MDEvdGNwICJ6ZWJyYSB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwZCAgICAgMjYwMi90Y3AgIlJJUGQgdnR5IgolaWYgJXt3aXRoX2lwdjZ9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwbmdkICAgMjYwMy90Y3AgIlJJUG5nZCB2dHkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZkICAgIDI2MDQvdGNwICJPU1BGZCB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgYmdwZCAgICAgMjYwNS90Y3AgIkJHUGQgdnR5IgolaWYgJXt3aXRoX2lwdjZ9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZjZkICAgMjYwNi90Y3AgIk9TUEY2ZCB2dHkiCiVlbmRpZgolaWYgJXt3aXRoX29zcGZhcGl9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmFwaSAgMjYwNy90Y3AgIk9TUEYtQVBJIgolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KemVicmFfc3BlY19hZGRfc2VydmljZSBpc2lzZCAgICAyNjA4L3RjcCAiSVNJU2QgdnR5IgolZW5kaWYKJWlmICV7d2l0aF9waW1kfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHBpbWQgICAgIDI2MTEvdGNwICJQSU1kIHZ0eSIKJWVuZGlmCgpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkvc2Jpbi9jaGtjb25maWcgLS1hZGQgJHtkYWVtb259CmRvbmUKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiMgQ3JlYXRlIGR1bW15IGZpbGVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgc28gYmFzaWMgZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZiBdOyB0aGVuCgllY2hvICJob3N0bmFtZSBgaG9zdG5hbWVgIiA+ICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKJWlmICV7cXVhZ2dhX3VzZXJ9CgljaG93biAlcXVhZ2dhX3VzZXI6JXF1YWdnYV91c2VyICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKJWVuZGlmCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgpmaQppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZiBdOyB0aGVuCgl0b3VjaCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgpmaQoKJXBvc3R1bgppZiBbICIkMSIgLWdlIDEgXTsgdGhlbgoJIyBGaW5kIG91dCB3aGljaCBkYWVtb25zIG5lZWQgdG8gYmUgcmVzdGFydGVkLgoJZm9yIGRhZW1vbiBpbiAlYWxsX2RhZW1vbnMgOyBkbwoJCWlmIFsgLWYgL3Zhci9sb2NrL3N1YnN5cy8kZGFlbW9uIF07IHRoZW4KCQkJZXZhbCByZXN0YXJ0XyRkYWVtb249eWVzCgkJZWxzZQoJCQlldmFsIHJlc3RhcnRfJGRhZW1vbj1ubwoJCWZpCglkb25lCgkjIFJlbmFtZSByZXN0YXJ0IGZsYWdzIGZvciBkYWVtb25zIGhhbmRsZWQgc3BlY2lhbGx5LgoJcnVubmluZ196ZWJyYT0iJHJlc3RhcnRfemVicmEiCglyZXN0YXJ0X3plYnJhPW5vCglydW5uaW5nX3dhdGNocXVhZ2dhPSIkcmVzdGFydF93YXRjaHF1YWdnYSIKCXJlc3RhcnRfd2F0Y2hxdWFnZ2E9bm8KCSMgU3RvcCB3YXRjaHF1YWdnYSBmaXJzdC4KCVsgIiRydW5uaW5nX3dhdGNocXVhZ2dhIiA9IHllcyBdICYmIFwKCQkvZXRjL3JjLmQvaW5pdC5kL3dhdGNocXVhZ2dhIHN0b3AgPi9kZXYvbnVsbCAyPiYxCgkjIFN0b3AgYWxsIGRhZW1vbnMgb3RoZXIgdGhhbiB6ZWJyYSBhbmQgd2F0Y2hxdWFnZ2EuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJZXZhbCByZXN0YXJ0PVwkcmVzdGFydF8ke2RhZW1vbn0KCQlbICIkcmVzdGFydCIgPSB5ZXMgXSAmJiBcCgkJCS9ldGMvcmMuZC9pbml0LmQvJGRhZW1vbiBzdG9wID4vZGV2L251bGwgMj4mMQoJZG9uZQoJIyBSZXN0YXJ0IHplYnJhLgoJWyAiJHJ1bm5pbmdfemVicmEiID0geWVzIF0gJiYgXAoJCS9ldGMvcmMuZC9pbml0LmQvemVicmEgcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKCSMgU3RhcnQgYWxsIGRhZW1vbnMgb3RoZXIgdGhhbiB6ZWJyYSBhbmQgd2F0Y2hxdWFnZ2EuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJZXZhbCByZXN0YXJ0PVwkcmVzdGFydF8ke2RhZW1vbn0KCQlbICIkcmVzdGFydCIgPSB5ZXMgXSAmJiBcCgkJCS9ldGMvcmMuZC9pbml0LmQvJGRhZW1vbiBzdGFydCA+L2Rldi9udWxsIDI+JjEKCWRvbmUKCSMgU3RhcnQgd2F0Y2hxdWFnZ2EgbGFzdC4KCSMgQXZvaWQgcG9zdHVuIHNjcmlwdGxldCBlcnJvciBpZiB3YXRjaHF1YWdnYSBpcyBub3QgcnVubmluZy4gCglbICIkcnVubmluZ193YXRjaHF1YWdnYSIgPSB5ZXMgXSAmJiBcCgkJL2V0Yy9yYy5kL2luaXQuZC93YXRjaHF1YWdnYSBzdGFydCA+L2Rldi9udWxsIDI+JjEgfHwgOgpmaQovc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgolcHJldW4KaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBzdG9wICA+L2Rldi9udWxsIDI+JjEKCQkvc2Jpbi9jaGtjb25maWcgLS1kZWwgJHtkYWVtb259Cglkb25lCgkvc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCmZpCgolY2xlYW4KJWlmICEle2tlZXBfYnVpbGR9CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKJWVuZGlmCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3F1YWdnYS5odG1sCiVkb2MgZG9jL21wbHMKJWRvYyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBSRVBPUlRJTkctQlVHUyBTRVJWSUNFUyBUT0RPCiVpZiAle3F1YWdnYV91c2VyfQolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL2xvZy9xdWFnZ2EgCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvcnVuL3F1YWdnYQolZWxzZQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9sb2cvcXVhZ2dhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9ydW4vcXVhZ2dhCiVlbmRpZgolaWYgJXt2dHlfZ3JvdXB9CiVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS96ZWJyYQole19zYmluZGlyfS9vc3BmZAole19zYmluZGlyfS9yaXBkCiV7X3NiaW5kaXJ9L2JncGQKJXtfc2JpbmRpcn0vd2F0Y2hxdWFnZ2EKJWlmICV7d2l0aF9pcHY2fQole19zYmluZGlyfS9yaXBuZ2QKJXtfc2JpbmRpcn0vb3NwZjZkCiV7X3NiaW5kaXJ9L2JhYmVsZAolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KJXtfc2JpbmRpcn0vaXNpc2QKJWVuZGlmCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfbGliZGlyfQolaWYgJXt3aXRoX3NoYXJlZH0KJWRpciAle19saWJkaXJ9CiV7X2xpYmRpcn0vbGliKi5zbwole19saWJkaXJ9L2xpYiouc28uKgolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KJXtfYmluZGlyfS8qCiVlbmRpZgolY29uZmlnIC9ldGMvcXVhZ2dhL1shdl0qCiVjb25maWcgL2V0Yy9yYy5kL2luaXQuZC8qCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvcGFtLmQvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAlYXR0cig2NDAscm9vdCxyb290KSAvZXRjL2xvZ3JvdGF0ZS5kLyoKCiVmaWxlcyBjb250cmliCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jIHRvb2xzCgolZmlsZXMgZGV2ZWwKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVpZiAle3dpdGhfb3NwZmNsaWVudH0KJXtfc2JpbmRpcn0vb3NwZmNsaWVudAolZW5kaWYKJXtfbGliZGlyfS8qLmEKJXtfbGliZGlyfS8qLmxhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfQole19pbmNsdWRlZGlyfS8lbmFtZS8qLmgKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS8le25hbWV9L29zcGZkCiV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZkLyouaAolaWYgJXt3aXRoX29zcGZhcGl9CiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfS9vc3BmYXBpCiV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZhcGkvKi5oCiVlbmRpZgoKJWNoYW5nZWxvZwoqIFRodSBTZXAgMTIgMjAwNSBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gU3RlYWwgc29tZSBjaGFuZ2VzIGZyb20gRmVkb3JhIHNwZWMgZmlsZToKLSBBZGQgd2l0aF9ydGFkdiB2YXJpYWJsZQotIFRlc3QgZm9yIGdyb3Vwcy91c2VycyB3aXRoIGdldGVudCBiZWZvcmUgZ3JvdXAvdXNlciBhZGRpbmcKLSBSZWFkbGluZSBuZWVkIG5vdCBiZSBhbiBleHBsaWNpdCBwcmVyZXF1aXNpdGUKLSBpbnN0YWxsLWluZm8gZGVsZXRlIHNob3VsZCBiZSBwb3N0dW4sIG5vdCBwcmV1bgoKKiBXZWQgSmFuIDEyIDIwMDUgQW5kcmV3IEouIFNjaG9yciA8YWpzY2hvcnJAYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0gb24gcGFja2FnZSB1cGdyYWRlLCBpbXBsZW1lbnQgY2FyZWZ1bCwgcGhhc2VkIHJlc3RhcnQgbG9naWMKLSB1c2UgZ2NjIC1yZHluYW1pYyBmbGFnIHdoZW4gbGlua2luZyBmb3IgYmV0dGVyIGJhY2t0cmFjZXMKCiogV2VkIERlYyAyMiAyMDA0IEFuZHJldyBKLiBTY2hvcnIgPGFqc2Nob3JyQGFsdW1uaS5wcmluY2V0b24uZWR1PgotIGRhZW1vbnY2X2xpc3Qgc2hvdWxkIGNvbnRhaW4gb25seSBJUHY2IGRhZW1vbnMKCiogV2VkIERlYyAyMiAyMDA0IEFuZHJldyBKLiBTY2hvcnIgPGFqc2Nob3JyQGFsdW1uaS5wcmluY2V0b24uZWR1PgotIHdhdGNocXVhZ2dhIGFkZGVkCi0gb24gdXBncmFkZSwgYWxsIGRhZW1vbnMgc2hvdWxkIGJlIGNvbmRyZXN0YXJ0J2VkCi0gb24gcmVtb3ZhbCwgYWxsIGRhZW1vbnMgc2hvdWxkIGJlIHN0b3BwZWQKCiogTW9uIE5vdiAwOCAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBVc2UgbWFrZWluZm8gLS1odG1sIHRvIGdlbmVyYXRlIHF1YWdnYS5odG1sCgoqIFN1biBOb3YgMDcgMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IHdpdGhfaXB2NiBzZXQgdG8gMCBidWlsZAoKKiBTYXQgT2N0IDIzIDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVwZGF0ZSB0byAwLjk3LjIKCiogU2F0IE9jdCAyMyAyMDA0IEFuZHJldyBKLiBTY2hvcnIgPGFzY2hvcnJAdGVsZW1ldHJ5LWludmVzdG1lbnRzLmNvbT4KLSBNYWtlIGRpcmVjdG9yaWVzIGJlIG93bmVkIGJ5IHRoZSBwYWNrYWdlcyBjb25jZXJuZWQKLSBVcGRhdGUgbG9ncm90YXRlIHNjcmlwdHMgdG8gdXNlIGNvcnJlY3QgcGF0aCB0byBraWxsYWxsIGFuZCB1c2UgcGlkIGZpbGVzCgoqIEZyaSBPY3QgMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gVXBkYXRlIHRvIDAuOTcuMAoKKiBXZWQgU2VwIDE1IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIGJ1aWxkIHNubXAgc3VwcG9ydCBieSBkZWZhdWx0Ci0gYnVpbGQgaXJkcCBzdXBwb3J0Ci0gYnVpbGQgd2l0aCBzaGFyZWQgbGlicwotIGRldmVsIHN1YnBhY2thZ2UgZm9yIGFyY2hpdmVzIGFuZCBoZWFkZXJzCgoqIFRodSBKYW4gMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gdXBkYXRlZCBzeXNjb25maWcgZmlsZXMgdG8gc3BlY2lmeSBsb2NhbCBkaXIKLSBhZGRlZCBvc3BmX2R1bXAuYyBjcmFzaCBxdWljayBmaXggcGF0Y2gKLSBhZGRlZCBvc3BmZCBwZXJzaXN0ZW50IGludGVyZmFjZSBjb25maWd1cmF0aW9uIHBhdGNoCgoqIFR1ZSBEZWMgMzAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gc3luYyB0byBDVlMKLSBpbnRlZ3JhdGUgUkggc3lzY29uZmlnIHBhdGNoIHRvIHNwZWNpZnkgZGFlbW9uIG9wdGlvbnMgKFJIKQotIGRlZmF1bHQgdG8gaGF2ZSB2dHkgbGlzdGVuIG9ubHkgdG8gMTI3LjEgKFJIKQotIGFkZCB1c2VyIHdpdGggZml4ZWQgVUlEL0dJRCAoUkgpCi0gY3JlYXRlIHVzZXIgd2l0aCBzaGVsbCAvc2Jpbi9ub2xvZ2luIHJhdGhlciB0aGFuIC9iaW4vZmFsc2UgKFJIKQotIHN0b3AgZGFlbW9ucyBvbiB1bmluc3RhbGwgKFJIKQotIGRlbGV0ZSBpbmZvIGZpbGUgb24gJXByZXVuLCBub3QgJXBvc3R1biB0byBhdm9pZCBkZWxldGlvbiBvbiB1cGdyYWRlLiAoUkgpCi0gaXNpc2QgYWRkZWQKLSBjbGVhbnVwIHRhc2tzIGNhcnJpZWQgb3V0IGZvciBldmVyeSBkYWVtb24KCiogU3VuIE5vdiAyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCAtZGV2ZWwgcGFja2FnZSB0byBpbmNsdWRlIGFsbCBmaWxlcwotIFN5bmMgdG8gMC45Ni40CgoqIFR1ZSBBdWcgMTIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gUmVuYW1lZCB0byBRdWFnZ2EKLSBTeW5jIHRvIFF1YWdnYSByZWxlYXNlIDAuOTYKCiogVHVlIE1hciAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB6ZWJyYSBwcml2aWxlZ2VzIHN1cHBvcnQKCiogTW9uIE1hciAxOCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggbWVtIGxlYWsgaW4gJ3Nob3cgdGhyZWFkIGNwdScKLSBSYWxwaCBLZWxsZXIncyBPU1BGLUFQSQotIEFtaXI6IEZpeCBjb25maWd1cmUuYWMgZm9yIG5ldC1zbm1wCgoqIFNhdCBNYXIgMSAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBvc3BmZCBJT1MgcHJlZml4IHRvIGludGVyZmFjZSBtYXRjaGluZyBmb3IgJ25ldHdvcmsnIHN0YXRlbWVudAotIHRlbXBvcmFyeSBmaXggZm9yIFB0UCBhbmQgSVB2NgotIHN5bmMgdG8gemVicmEub3JnIENWUwoKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K