IyBjb25maWd1cmUgb3B0aW9ucwojCiMgU29tZSBjYW4gYmUgb3ZlcnJpZGVuIG9uIHJwbWJ1aWxkIGNvbW1hbmRsaW5lIHdpdGg6CiMgcnBtYnVpbGQgLS1kZWZpbmUgJ3ZhcmlhYmxlIHZhbHVlJwojCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBRdWFnZ2EgY29uZmlndXJlIG9wdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHdpdGgtZmVhdHVyZSBvcHRpb25zCiV7IT93aXRoX3NubXA6CQklZGVmaW5lIHdpdGhfc25tcAkxIH0KJXshP3dpdGhfdnR5c2g6CQklZGVmaW5lCXdpdGhfdnR5c2gJMSB9CiV7IT93aXRoX29zcGZfdGU6CSVkZWZpbmUJd2l0aF9vc3BmX3RlCTEgfQoleyE/d2l0aF9uc3NhOgkJJWRlZmluZQl3aXRoX25zc2EJMSB9CiV7IT93aXRoX29wYXF1ZV9sc2E6CSVkZWZpbmUJd2l0aF9vcGFxdWVfbHNhIDEgfQoleyE/d2l0aF90Y3BfemVicmE6CSVkZWZpbmUJd2l0aF90Y3BfemVicmEJMCB9CiV7IT93aXRoX3Z0eXNoOgkJJWRlZmluZQl3aXRoX3Z0eXNoCTEgfQoleyE/d2l0aF9wYW06CQklZGVmaW5lCXdpdGhfcGFtCTEgfQoleyE/d2l0aF9pcHY2OgkJJWRlZmluZQl3aXRoX2lwdjYJMSB9CiV7IT93aXRoX29zcGZjbGllbnQ6CSVkZWZpbmUJd2l0aF9vc3BmY2xpZW50IDEgfQoleyE/d2l0aF9vc3BmYXBpOgklZGVmaW5lCXdpdGhfb3NwZmFwaQkxIH0KJXshP3dpdGhfaXJkcDoJCSVkZWZpbmUJd2l0aF9pcmRwCTEgfQoleyE/d2l0aF9ydGFkdjoJCSVkZWZpbmUJd2l0aF9ydGFkdgkxIH0KJXshP3dpdGhfaXNpc2Q6CQklZGVmaW5lCXdpdGhfaXNpc2QJMSB9CiV7IT93aXRoX3BpbWQ6CQklZGVmaW5lCXdpdGhfcGltZAkxIH0KJXshP3dpdGhfc2hhcmVkOgklZGVmaW5lCXdpdGhfc2hhcmVkCTEgfQoleyE/d2l0aF9tdWx0aXBhdGg6CSVkZWZpbmUJd2l0aF9tdWx0aXBhdGgJNjQgfQoleyE/cXVhZ2dhX3VzZXI6CSVkZWZpbmUJcXVhZ2dhX3VzZXIJcXVhZ2dhIH0KJXshP3Z0eV9ncm91cDoJCSVkZWZpbmUJdnR5X2dyb3VwCXF1YWdnYXZ0eSB9CgojIHBhdGggZGVmaW5lcwolZGVmaW5lCQlfc3lzY29uZmRpcgkvZXRjL3F1YWdnYQolZGVmaW5lCQl6ZWJfc3JjCQkle19idWlsZGRpcn0vJXtuYW1lfS0le3ZlcnNpb259CiVkZWZpbmUJCXplYl9yaF9zcmMJJXt6ZWJfc3JjfS9yZWRoYXQKJWRlZmluZQkJemViX2RvY3MJJXt6ZWJfc3JjfS9kb2MKCiMgZGVmaW5lcyBmb3IgY29uZmlndXJlCiVkZWZpbmUJCV9saWJleGVjZGlyCSV7X2V4ZWNfcHJlZml4fS9saWJleGVjL3F1YWdnYQolZGVmaW5lCQlfbGliZGlyCQkle19leGVjX3ByZWZpeH0vJXtfbGlifS9xdWFnZ2EKJWRlZmluZQkJX2luY2x1ZGVkaXIJJXtfcHJlZml4fS9pbmNsdWRlCiVkZWZpbmUJCV9sb2NhbHN0YXRlZGlyCS92YXIvcnVuL3F1YWdnYQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBkaXN0cm8gc3BlY2lmaWMgdHdlYWtzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgZGVmYXVsdCBkaXN0cm8uIE92ZXJyaWRlIHdpdGggcnBtYnVpbGQgLUQgImRpc3QgWFhYIiAKJXtleHBhbmQ6ICUlZGVmaW5lIGRlZmF1bHRfZGlzdCAlKHJwbSAtcSAtLXFmICdmYyUle1ZFUlNJT059JyBmZWRvcmEtcmVsZWFzZSB8IGdyZXAgLXYgJ25vdCBpbnN0YWxsZWQnKX0KJXshP2Rpc3Q6CQklZGVmaW5lCQlkaXN0CSV7ZGVmYXVsdF9kaXN0fX0KCiMgYXMgZGlzdHJvcyBjaGFuZ2UgcGFja2FnZXMgd2UgZGVwZW5kIG9uLCBvdXIgUmVxdWlyZXMgaGF2ZSB0byBjaGFuZ2UsIHNhZGx5LgolZGVmaW5lIHF1YWdnYV9idWlsZHJlcXMgdGV4aTJodG1sIHRleGluZm8gYXV0b2NvbmYgcGFtLWRldmVsCiVkZWZpbmUgcXVhZ2dhX2J1aWxkcmVxcyAle2V4cGFuZDole3F1YWdnYV9idWlsZHJlcXN9fSBwYXRjaCBsaWJjYXAtZGV2ZWwKCiMgRkM0IGFuZCA1IHNwbGl0IHRleGkyaHRtbCBvdXQgb2YgdGV0ZXggcGFja2FnZS4KJWRlZmluZSBxdWFnZ2FfYnVpbGRyZXFzICV7ZXhwYW5kOiV7cXVhZ2dhX2J1aWxkcmVxc319IHRleGkyaHRtbAoKIyBwYW1fc3RhY2sgd2FzIGRlcHJlY2F0ZWQgaW4gRkM1CiMgZGVmYXVsdCB0byBwYW1fc3RhY2ssIGRlZmF1bHQgc2hvdWxkIGJlIGNoYW5nZWQgbGF0ZXIuCiVpZiAiJWRpc3QiID09ICJmYzQiIHx8ICIlZGlzdCIgPT0gImZjMyIKJWRlZmluZQlxdWFnZ2FfcGFtX3NvdXJjZSBxdWFnZ2EucGFtLnN0YWNrCiVlbHNlCiVkZWZpbmUJcXVhZ2dhX3BhbV9zb3VyY2UgcXVhZ2dhLnBhbQolZW5kaWYKCiMgbWFuIHBhZ2UgcHJvYmFibHkgbmVlZHMgZ3JvZmYgZm9yIGdyb2ZmX21zIG1hY3JvcwolZGVmaW5lICBxdWFnZ2FfYnVpbGRyZXFzICV7ZXhwYW5kOiV7cXVhZ2dhX2J1aWxkcmVxc319IGdyb2ZmCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIG1pc2MgaW50ZXJuYWwgZGVmaW5lcwoleyE/cXVhZ2dhX3VpZDoJCSVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIgfQoleyE/cXVhZ2dhX2dpZDoJCSVkZWZpbmUgICAgICAgICBxdWFnZ2FfZ2lkICAgICAgOTIgfQolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIG9zcGZkIGJncGQKCiVpZiAle3dpdGhfaXB2Nn0KJWRlZmluZQkJZGFlbW9udjZfbGlzdAlyaXBuZ2Qgb3NwZjZkCiVlbHNlCiVkZWZpbmUJCWRhZW1vbnY2X2xpc3QJIiIKJWVuZGlmCgolaWYgJXt3aXRoX2lzaXNkfQolZGVmaW5lCQlkYWVtb25fb3RoZXIJaXNpc2QKJWVsc2UKJWRlZmluZQkJZGFlbW9uX290aGVyCSIiCiVlbmRpZgoKJWRlZmluZQkJYWxsX2RhZW1vbnMJJXtkYWVtb25fbGlzdH0gJXtkYWVtb252Nl9saXN0fSAle2RhZW1vbl9vdGhlcn0gd2F0Y2hxdWFnZ2EKCiMgYWxsb3cgYnVpbGQgZGlyIHRvIGJlIGtlcHQKJXshP2tlZXBfYnVpbGQ6CQklZGVmaW5lCQlrZWVwX2J1aWxkCTAgfQoKI3JlbGVhc2Ugc3ViLXJldmlzaW9uICh0aGUgdHdvIGRpZ2l0cyBhZnRlciB0aGUgQ09ORkRBVEUpCiV7IT9yZWxlYXNlX3JldjoJJWRlZmluZQkJcmVsZWFzZV9yZXYJMDEgfQoKU3VtbWFyeTogUm91dGluZyBkYWVtb24KTmFtZToJCXF1YWdnYQpWZXJzaW9uOglAVkVSU0lPTkAKUmVsZWFzZToJQENPTkZEQVRFQCV7cmVsZWFzZV9yZXZ9CkxpY2Vuc2U6CUdQTApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKU291cmNlMDoJaHR0cDovL3d3dy5xdWFnZ2EubmV0L3NuYXBzaG90cy9jdnMvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negpVUkw6CQlodHRwOi8vd3d3LnF1YWdnYS5uZXQKJWlmICV7d2l0aF9zbm1wfQpCdWlsZFJlcXVpcmVzOgluZXQtc25tcC1kZXZlbApSZXF1aXJlcyhwcmUpOgkJbmV0LXNubXAKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CkJ1aWxkUmVxdWlyZXM6CXJlYWRsaW5lIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMgbmN1cnNlcy1kZXZlbApSZXF1aXJlcyhwcmUpOgkJbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJJXtxdWFnZ2FfYnVpbGRyZXFzfQojIEluaXRzY3JpcHRzID4gNS42MCBpcyByZXF1aXJlZCBmb3IgSVB2NiBzdXBwb3J0ClJlcXVpcmVzKHByZSk6CQlpbml0c2NyaXB0cyA+PSA1LjYwClJlcXVpcmVzKHByZSk6CQluY3Vyc2VzIHBhbQpSZXF1aXJlcyhwcmUpOgkJL3NiaW4vaW5zdGFsbC1pbmZvClByb3ZpZGVzOglyb3V0aW5nZGFlbW9uCkJ1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LXJvb3QKT2Jzb2xldGVzOgliaXJkIGdhdGVkIG1ydCB6ZWJyYQoKJWRlc2NyaXB0aW9uClF1YWdnYSBpcyBhIGZyZWUgc29mdHdhcmUgdGhhdCBtYW5hZ2VzIFRDUC9JUCBiYXNlZCByb3V0aW5nCnByb3RvY29sLiBJdCB0YWtlcyBtdWx0aS1zZXJ2ZXIgYW5kIG11bHRpLXRocmVhZCBhcHByb2FjaCB0byByZXNvbHZlCnRoZSBjdXJyZW50IGNvbXBsZXhpdHkgb2YgdGhlIEludGVybmV0LgoKUXVhZ2dhIHN1cHBvcnRzIEJHUDQsIEJHUDQrLCBPU1BGdjIsIE9TUEZ2MywgUklQdjEsIFJJUHYyLCBhbmQgUklQbmcuCgpRdWFnZ2EgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIFJvdXRlIFNlcnZlciBhbmQgYSBSb3V0ZSBSZWZsZWN0b3IuIEl0IGlzCm5vdCBhIHRvb2xraXQsIGl0IHByb3ZpZGVzIGZ1bGwgcm91dGluZyBwb3dlciB1bmRlciBhIG5ldyBhcmNoaXRlY3R1cmUuClF1YWdnYSBieSBkZXNpZ24gaGFzIGEgcHJvY2VzcyBmb3IgZWFjaCBwcm90b2NvbC4KClF1YWdnYSBpcyBhIGZvcmsgb2YgR05VIFplYnJhLgoKJXBhY2thZ2UgY29udHJpYgpTdW1tYXJ5OiBjb250cmliIHRvb2xzIGZvciBxdWFnZ2EKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gY29udHJpYgpDb250cmlidXRlZC8zcmQgcGFydHkgdG9vbHMgd2hpY2ggbWF5IGJlIG9mIHVzZSB3aXRoIHF1YWdnYS4KCiVwYWNrYWdlIGRldmVsClN1bW1hcnk6IEhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIGZvciBxdWFnZ2EgZGV2ZWxvcG1lbnQKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gZGV2ZWwKVGhlIHF1YWdnYS1kZXZlbCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBuZWNjZXNzYXJ5IGZvcgpkZXZlbG9waW5nIE9TUEYtQVBJIGFuZCBxdWFnZ2EgYXBwbGljYXRpb25zLgoKJXByZXAKJXNldHVwICAtcQoKJWJ1aWxkCgojIEZvciBzdGFuZGFyZCBnY2MgdmVyYm9zaXR5LCB1bmNvbW1lbnQgdGhlc2UgbGluZXM6CiNDRkxBR1M9IiV7b3B0ZmxhZ3N9IC1XYWxsIC1Xc2lnbi1jb21wYXJlIC1XcG9pbnRlci1hcml0aCIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVd3cml0ZS1zdHJpbmdzIgoKIyBGb3IgdWx0cmEgZ2NjIHZlcmJvc2l0eSwgdW5jb21tZW50IHRoZXNlIGxpbmVzIGFsc286CiNDRkxBR1M9IiR7Q0ZMQUdTfSAtVyAtV2Nhc3QtcXVhbCAtV3N0cmljdC1wcm90b3R5cGVzIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV21pc3Npbmctbm9yZXR1cm4iCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV21pc3NpbmctZm9ybWF0LWF0dHJpYnV0ZSAtV3VucmVhY2hhYmxlLWNvZGUiCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV3BhY2tlZCAtV3BhZGRlZCIKCiVjb25maWd1cmUgXAolaWYgISV7d2l0aF9zaGFyZWR9CgktLWRpc2FibGUtc2hhcmVkIFwKJWVuZGlmCiVpZiAle3dpdGhfaXB2Nn0KCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV7d2l0aF9zbm1wfQoJLS1lbmFibGUtc25tcCBcCiVlbmRpZgolaWYgJXt3aXRoX211bHRpcGF0aH0KCS0tZW5hYmxlLW11bHRpcGF0aD0le3dpdGhfbXVsdGlwYXRofSBcCiVlbmRpZgolaWYgJXt3aXRoX3RjcF96ZWJyYX0KCS0tZW5hYmxlLXRjcC16ZWJyYSBcCiVlbmRpZgolaWYgJXt3aXRoX25zc2F9CgktLWVuYWJsZS1uc3NhIFwKJWVuZGlmCiVpZiAle3dpdGhfb3BhcXVlX2xzYX0KCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmX3RlfQoJLS1lbmFibGUtb3NwZi10ZSBcCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQoJLS1lbmFibGUtdnR5c2ggXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmY2xpZW50fQoJLS1lbmFibGUtb3NwZmNsaWVudD15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmNsaWVudD1ub1wKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmFwaX0KCS0tZW5hYmxlLW9zcGZhcGk9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZhcGk9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9pcmRwfQoJLS1lbmFibGUtaXJkcD15ZXMgXAolZWxzZQoJLS1lbmFibGUtaXJkcD1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX3J0YWR2fQoJLS1lbmFibGUtcnRhZHY9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLXJ0YWR2PW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CgktLWVuYWJsZS1pc2lzZCBcCiVlbHNlCgktLWRpc2FibGUtaXNpc2QgXAolZW5kaWYKJWlmICV7d2l0aF9wYW19CgktLXdpdGgtbGlicGFtIFwKJWVuZGlmCiVpZiAlcXVhZ2dhX3VzZXIKCS0tZW5hYmxlLXVzZXI9JXF1YWdnYV91c2VyIFwKCS0tZW5hYmxlLWdyb3VwPSVxdWFnZ2FfdXNlciBcCiVlbmRpZgolaWYgJXZ0eV9ncm91cAoJLS1lbmFibGUtdnR5LWdyb3VwPSV2dHlfZ3JvdXAgXAolZW5kaWYKLS1lbmFibGUtbmV0bGluayAtLWVuYWJsZS1nY2MtcmR5bmFtaWMKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCAtLW51bWJlci1mb290bm90ZXMgIC0tbnVtYmVyLXNlY3Rpb25zIHF1YWdnYS50ZXhpCnBvcGQKCiVpbnN0YWxsCnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKCmluc3RhbGwgLWQgJFJQTV9CVUlMRF9ST09UL2V0Yy97cmMuZC9pbml0LmQsc3lzY29uZmlnLGxvZ3JvdGF0ZS5kLHBhbS5kfSBcCgkkUlBNX0JVSUxEX1JPT1QvdmFyL2xvZy9xdWFnZ2EgJFJQTV9CVUlMRF9ST09UJXtfaW5mb2Rpcn0KCm1ha2UgaW5zdGFsbCBcCglERVNURElSPSRSUE1fQlVJTERfUk9PVAoKIyBSZW1vdmUgdGhpcyBmaWxlLCBhcyBpdCBpcyB1bmluc3RhbGxlZCBhbmQgY2F1c2VzIGVycm9ycyB3aGVuIGJ1aWxkaW5nIG9uIFJIOQpybSAtcmYgJFJQTV9CVUlMRF9ST09UL3Vzci9zaGFyZS9pbmZvL2RpcgoKIyBpbnN0YWxsIGV0YyBzb3VyY2VzCmZvciBkYWVtb24gaW4gJXthbGxfZGFlbW9uc30gOyBkbwoJaWYgWyB4IiR7ZGFlbW9ufSIgIT0geCIiIF0gOyB0aGVuCgkJaW5zdGFsbCAle3plYl9yaF9zcmN9LyR7ZGFlbW9ufS5pbml0IFwKCQkJJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0KCWZpCmRvbmUKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9LyV7cXVhZ2dhX3BhbV9zb3VyY2V9IFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvcGFtLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2EubG9ncm90YXRlIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvbG9ncm90YXRlLmQvcXVhZ2dhCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS9xdWFnZ2Euc3lzY29uZmlnIFwKCSRSUE1fQlVJTERfUk9PVC9ldGMvc3lzY29uZmlnL3F1YWdnYQppbnN0YWxsIC1kIC1tNzUwICAkUlBNX0JVSUxEX1JPT1QvdmFyL3J1bi9xdWFnZ2EKCiVwcmUKIyBhZGQgdnR5X2dyb3VwCiVpZiAldnR5X2dyb3VwCmlmIGdldGVudCBncm91cCAldnR5X2dyb3VwID4gL2Rldi9udWxsIDsgdGhlbiA6IDsgZWxzZSBcCiAvdXNyL3NiaW4vZ3JvdXBhZGQgLXIgJXZ0eV9ncm91cCA+IC9kZXYvbnVsbCB8fCA6IDsgZmkKJWVuZGlmCgojIGFkZCBxdWFnZ2EgdXNlciBhbmQgZ3JvdXAKJWlmICVxdWFnZ2FfdXNlcgojIEVuc3VyZSB0aGF0IHF1YWdnYV9naWQgZ2V0cyBjb3JyZWN0bHkgYWxsb2NhdGVkCmlmIGdldGVudCBncm91cCAlcXVhZ2dhX3VzZXIgPi9kZXYvbnVsbDsgdGhlbiA6IDsgZWxzZSBcCiAvdXNyL3NiaW4vZ3JvdXBhZGQgLWcgJXF1YWdnYV9naWQgJXF1YWdnYV91c2VyID4gL2Rldi9udWxsIHx8IDogOyBcCmZpCmlmIGdldGVudCBwYXNzd2QgJXF1YWdnYV91c2VyID4vZGV2L251bGwgOyB0aGVuIDogOyBlbHNlIFwKIC91c3Ivc2Jpbi91c2VyYWRkICAtdSAlcXVhZ2dhX3VpZCAtZyAlcXVhZ2dhX2dpZCBcCiAgLU0gLXIgLXMgL3NiaW4vbm9sb2dpbiAtYyAiUXVhZ2dhIHJvdXRpbmcgc3VpdGUiIFwKICAtZCAlX2xvY2Fsc3RhdGVkaXIgJXF1YWdnYV91c2VyIDI+IC9kZXYvbnVsbCB8fCA6IDsgXApmaQolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgXAogICAgICAhICVfX3NlZCAtZSAncy8jLiokLy8nIC9ldGMvc2VydmljZXMgfCAlX19ncmVwIC13cSAkMSA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcG5nZCAgIDI2MDMvdGNwICJSSVBuZ2QgdnR5IgolZW5kaWYKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmZCAgICAyNjA0L3RjcCAiT1NQRmQgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGJncGQgICAgIDI2MDUvdGNwICJCR1BkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgaXNpc2QgICAgMjYwOC90Y3AgIklTSVNkIHZ0eSIKJWVuZGlmCiVpZiAle3dpdGhfcGltZH0KemVicmFfc3BlY19hZGRfc2VydmljZSBwaW1kICAgICAyNjExL3RjcCAiUElNZCB2dHkiCiVlbmRpZgoKZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJL3NiaW4vY2hrY29uZmlnIC0tYWRkICR7ZGFlbW9ufQpkb25lCgovc2Jpbi9pbnN0YWxsLWluZm8gJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgojIENyZWF0ZSBkdW1teSBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0IHNvIGJhc2ljIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYgXTsgdGhlbgoJZWNobyAiaG9zdG5hbWUgYGhvc3RuYW1lYCIgPiAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCiVpZiAle3F1YWdnYV91c2VyfQoJY2hvd24gJXF1YWdnYV91c2VyOiVxdWFnZ2FfdXNlciAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCiVlbmRpZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKZmkKaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYgXTsgdGhlbgoJdG91Y2ggJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKZmkKCiVwb3N0dW4KaWYgWyAiJDEiIC1nZSAxIF07IHRoZW4KCSMgRmluZCBvdXQgd2hpY2ggZGFlbW9ucyBuZWVkIHRvIGJlIHJlc3RhcnRlZC4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQlpZiBbIC1mIC92YXIvbG9jay9zdWJzeXMvJGRhZW1vbiBdOyB0aGVuCgkJCWV2YWwgcmVzdGFydF8kZGFlbW9uPXllcwoJCWVsc2UKCQkJZXZhbCByZXN0YXJ0XyRkYWVtb249bm8KCQlmaQoJZG9uZQoJIyBSZW5hbWUgcmVzdGFydCBmbGFncyBmb3IgZGFlbW9ucyBoYW5kbGVkIHNwZWNpYWxseS4KCXJ1bm5pbmdfemVicmE9IiRyZXN0YXJ0X3plYnJhIgoJcmVzdGFydF96ZWJyYT1ubwoJcnVubmluZ193YXRjaHF1YWdnYT0iJHJlc3RhcnRfd2F0Y2hxdWFnZ2EiCglyZXN0YXJ0X3dhdGNocXVhZ2dhPW5vCgkjIFN0b3Agd2F0Y2hxdWFnZ2EgZmlyc3QuCglbICIkcnVubmluZ193YXRjaHF1YWdnYSIgPSB5ZXMgXSAmJiBcCgkJL2V0Yy9yYy5kL2luaXQuZC93YXRjaHF1YWdnYSBzdG9wID4vZGV2L251bGwgMj4mMQoJIyBTdG9wIGFsbCBkYWVtb25zIG90aGVyIHRoYW4gemVicmEgYW5kIHdhdGNocXVhZ2dhLgoJZm9yIGRhZW1vbiBpbiAlYWxsX2RhZW1vbnMgOyBkbwoJCWV2YWwgcmVzdGFydD1cJHJlc3RhcnRfJHtkYWVtb259CgkJWyAiJHJlc3RhcnQiID0geWVzIF0gJiYgXAoJCQkvZXRjL3JjLmQvaW5pdC5kLyRkYWVtb24gc3RvcCA+L2Rldi9udWxsIDI+JjEKCWRvbmUKCSMgUmVzdGFydCB6ZWJyYS4KCVsgIiRydW5uaW5nX3plYnJhIiA9IHllcyBdICYmIFwKCQkvZXRjL3JjLmQvaW5pdC5kL3plYnJhIHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCgkjIFN0YXJ0IGFsbCBkYWVtb25zIG90aGVyIHRoYW4gemVicmEgYW5kIHdhdGNocXVhZ2dhLgoJZm9yIGRhZW1vbiBpbiAlYWxsX2RhZW1vbnMgOyBkbwoJCWV2YWwgcmVzdGFydD1cJHJlc3RhcnRfJHtkYWVtb259CgkJWyAiJHJlc3RhcnQiID0geWVzIF0gJiYgXAoJCQkvZXRjL3JjLmQvaW5pdC5kLyRkYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCglkb25lCgkjIFN0YXJ0IHdhdGNocXVhZ2dhIGxhc3QuCgkjIEF2b2lkIHBvc3R1biBzY3JpcHRsZXQgZXJyb3IgaWYgd2F0Y2hxdWFnZ2EgaXMgbm90IHJ1bm5pbmcuIAoJWyAiJHJ1bm5pbmdfd2F0Y2hxdWFnZ2EiID0geWVzIF0gJiYgXAoJCS9ldGMvcmMuZC9pbml0LmQvd2F0Y2hxdWFnZ2Egc3RhcnQgPi9kZXYvbnVsbCAyPiYxIHx8IDoKZmkKL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKJXByZXVuCmlmIFsgIiQxIiA9ICIwIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gc3RvcCAgPi9kZXYvbnVsbCAyPiYxCgkJL3NiaW4vY2hrY29uZmlnIC0tZGVsICR7ZGFlbW9ufQoJZG9uZQoJL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgpmaQoKJWNsZWFuCiVpZiAhJXtrZWVwX2J1aWxkfQpybSAtcmYgJFJQTV9CVUlMRF9ST09UCiVlbmRpZgoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jICovKi5zYW1wbGUqIEFVVEhPUlMgQ09QWUlORwolZG9jIGRvYy9xdWFnZ2EuaHRtbAolZG9jIGRvYy9tcGxzCiVkb2MgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgUkVQT1JUSU5HLUJVR1MgU0VSVklDRVMgVE9ETwolaWYgJXtxdWFnZ2FfdXNlcn0KJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9sb2cvcXVhZ2dhIAolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL3J1bi9xdWFnZ2EKJWVsc2UKJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvbG9nL3F1YWdnYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpIC91c3Ivc2hhcmUvaW5mbwolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvcnVuL3F1YWdnYQolZW5kaWYKJWlmICV7dnR5X2dyb3VwfQolYXR0cig3NTAsJXF1YWdnYV91c2VyLCV2dHlfZ3JvdXApICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYuc2FtcGxlCiVlbmRpZgole19pbmZvZGlyfS8qaW5mbyoKJXtfbWFuZGlyfS9tYW4qLyoKJXtfc2JpbmRpcn0vemVicmEKJXtfc2JpbmRpcn0vb3NwZmQKJXtfc2JpbmRpcn0vcmlwZAole19zYmluZGlyfS9iZ3BkCiV7X3NiaW5kaXJ9L3dhdGNocXVhZ2dhCiVpZiAle3dpdGhfaXB2Nn0KJXtfc2JpbmRpcn0vcmlwbmdkCiV7X3NiaW5kaXJ9L29zcGY2ZAolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KJXtfc2JpbmRpcn0vaXNpc2QKJWVuZGlmCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfbGliZGlyfQolaWYgJXt3aXRoX3NoYXJlZH0KJWRpciAle19saWJkaXJ9CiV7X2xpYmRpcn0vbGliKi5zbwole19saWJkaXJ9L2xpYiouc28uKgolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KJXtfYmluZGlyfS8qCiVlbmRpZgolY29uZmlnIC9ldGMvcXVhZ2dhL1shdl0qCiVjb25maWcgL2V0Yy9yYy5kL2luaXQuZC8qCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvcGFtLmQvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAlYXR0cig2NDAscm9vdCxyb290KSAvZXRjL2xvZ3JvdGF0ZS5kLyoKCiVmaWxlcyBjb250cmliCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jIHRvb2xzCgolZmlsZXMgZGV2ZWwKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVpZiAle3dpdGhfb3NwZmNsaWVudH0KJXtfc2JpbmRpcn0vb3NwZmNsaWVudAolZW5kaWYKJXtfbGliZGlyfS8qLmEKJXtfbGliZGlyfS8qLmxhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfQole19pbmNsdWRlZGlyfS8lbmFtZS8qLmgKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS8le25hbWV9L29zcGZkCiV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZkLyouaAolaWYgJXt3aXRoX29zcGZhcGl9CiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfS9vc3BmYXBpCiV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZhcGkvKi5oCiVlbmRpZgoKJWNoYW5nZWxvZwoqIEZyaSBTZXAgNCAyMDE1IFBhdWwgSmFrbWEgPHBhdWxAamFrbWEub3JnPiAtICV7dmVyc2lvbn0KLSBidWlsZHJlcSB1cGRhdGVzCi0gYWRkIGEgZGVmYXVsdCBkZWZpbmUgZm9yIHdpdGhfcGltZAoKKiBUaHUgU2VwIDEyIDIwMDUgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFN0ZWFsIHNvbWUgY2hhbmdlcyBmcm9tIEZlZG9yYSBzcGVjIGZpbGU6Ci0gQWRkIHdpdGhfcnRhZHYgdmFyaWFibGUKLSBUZXN0IGZvciBncm91cHMvdXNlcnMgd2l0aCBnZXRlbnQgYmVmb3JlIGdyb3VwL3VzZXIgYWRkaW5nCi0gUmVhZGxpbmUgbmVlZCBub3QgYmUgYW4gZXhwbGljaXQgcHJlcmVxdWlzaXRlCi0gaW5zdGFsbC1pbmZvIGRlbGV0ZSBzaG91bGQgYmUgcG9zdHVuLCBub3QgcHJldW4KCiogV2VkIEphbiAxMiAyMDA1IEFuZHJldyBKLiBTY2hvcnIgPGFqc2Nob3JyQGFsdW1uaS5wcmluY2V0b24uZWR1PgotIG9uIHBhY2thZ2UgdXBncmFkZSwgaW1wbGVtZW50IGNhcmVmdWwsIHBoYXNlZCByZXN0YXJ0IGxvZ2ljCi0gdXNlIGdjYyAtcmR5bmFtaWMgZmxhZyB3aGVuIGxpbmtpbmcgZm9yIGJldHRlciBiYWNrdHJhY2VzCgoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSBkYWVtb252Nl9saXN0IHNob3VsZCBjb250YWluIG9ubHkgSVB2NiBkYWVtb25zCgoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSB3YXRjaHF1YWdnYSBhZGRlZAotIG9uIHVwZ3JhZGUsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBjb25kcmVzdGFydCdlZAotIG9uIHJlbW92YWwsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBzdG9wcGVkCgoqIE1vbiBOb3YgMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gVXNlIG1ha2VpbmZvIC0taHRtbCB0byBnZW5lcmF0ZSBxdWFnZ2EuaHRtbAoKKiBTdW4gTm92IDA3IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCB3aXRoX2lwdjYgc2V0IHRvIDAgYnVpbGQKCiogU2F0IE9jdCAyMyAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBVcGRhdGUgdG8gMC45Ny4yCgoqIFNhdCBPY3QgMjMgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhc2Nob3JyQHRlbGVtZXRyeS1pbnZlc3RtZW50cy5jb20+Ci0gTWFrZSBkaXJlY3RvcmllcyBiZSBvd25lZCBieSB0aGUgcGFja2FnZXMgY29uY2VybmVkCi0gVXBkYXRlIGxvZ3JvdGF0ZSBzY3JpcHRzIHRvIHVzZSBjb3JyZWN0IHBhdGggdG8ga2lsbGFsbCBhbmQgdXNlIHBpZCBmaWxlcwoKKiBGcmkgT2N0IDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVwZGF0ZSB0byAwLjk3LjAKCiogV2VkIFNlcCAxNSAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBidWlsZCBzbm1wIHN1cHBvcnQgYnkgZGVmYXVsdAotIGJ1aWxkIGlyZHAgc3VwcG9ydAotIGJ1aWxkIHdpdGggc2hhcmVkIGxpYnMKLSBkZXZlbCBzdWJwYWNrYWdlIGZvciBhcmNoaXZlcyBhbmQgaGVhZGVycwoKKiBUaHUgSmFuIDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZWQgc3lzY29uZmlnIGZpbGVzIHRvIHNwZWNpZnkgbG9jYWwgZGlyCi0gYWRkZWQgb3NwZl9kdW1wLmMgY3Jhc2ggcXVpY2sgZml4IHBhdGNoCi0gYWRkZWQgb3NwZmQgcGVyc2lzdGVudCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwYXRjaAoKKiBUdWUgRGVjIDMwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHN5bmMgdG8gQ1ZTCi0gaW50ZWdyYXRlIFJIIHN5c2NvbmZpZyBwYXRjaCB0byBzcGVjaWZ5IGRhZW1vbiBvcHRpb25zIChSSCkKLSBkZWZhdWx0IHRvIGhhdmUgdnR5IGxpc3RlbiBvbmx5IHRvIDEyNy4xIChSSCkKLSBhZGQgdXNlciB3aXRoIGZpeGVkIFVJRC9HSUQgKFJIKQotIGNyZWF0ZSB1c2VyIHdpdGggc2hlbGwgL3NiaW4vbm9sb2dpbiByYXRoZXIgdGhhbiAvYmluL2ZhbHNlIChSSCkKLSBzdG9wIGRhZW1vbnMgb24gdW5pbnN0YWxsIChSSCkKLSBkZWxldGUgaW5mbyBmaWxlIG9uICVwcmV1biwgbm90ICVwb3N0dW4gdG8gYXZvaWQgZGVsZXRpb24gb24gdXBncmFkZS4gKFJIKQotIGlzaXNkIGFkZGVkCi0gY2xlYW51cCB0YXNrcyBjYXJyaWVkIG91dCBmb3IgZXZlcnkgZGFlbW9uCgoqIFN1biBOb3YgMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggLWRldmVsIHBhY2thZ2UgdG8gaW5jbHVkZSBhbGwgZmlsZXMKLSBTeW5jIHRvIDAuOTYuNAoKKiBUdWUgQXVnIDEyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFJlbmFtZWQgdG8gUXVhZ2dhCi0gU3luYyB0byBRdWFnZ2EgcmVsZWFzZSAwLjk2CgoqIFR1ZSBNYXIgMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gemVicmEgcHJpdmlsZWdlcyBzdXBwb3J0CgoqIE1vbiBNYXIgMTggMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IG1lbSBsZWFrIGluICdzaG93IHRocmVhZCBjcHUnCi0gUmFscGggS2VsbGVyJ3MgT1NQRi1BUEkKLSBBbWlyOiBGaXggY29uZmlndXJlLmFjIGZvciBuZXQtc25tcAoKKiBTYXQgTWFyIDEgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gb3NwZmQgSU9TIHByZWZpeCB0byBpbnRlcmZhY2UgbWF0Y2hpbmcgZm9yICduZXR3b3JrJyBzdGF0ZW1lbnQKLSB0ZW1wb3JhcnkgZml4IGZvciBQdFAgYW5kIElQdjYKLSBzeW5jIHRvIHplYnJhLm9yZyBDVlMKCiogTW9uIEphbiAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGUgdG8gbGF0ZXN0IGN2cwotIFlvbidzICJzaG93IHRocmVhZCBjcHUiIHBhdGNoIC0gMTcyMTcKLSB3YWxrIHVwIHRyZWUgLSAxNzIxOAotIG9zcGZkIE5TU0EgZml4ZXMgLSAxNjY4MQotIG9zcGZkIG5zbSBmaXhlcyAtIDE2ODI0Ci0gb3NwZmQgT0xTQSBmaXhlcyBhbmQgbmV3IGZlYXR1cmUgLSAxNjgyMyAKLSBLQU1FIGFuZCBpZmluZGV4IGZpeGVzIC0gMTY1MjUKLSBzcGVjIGZpbGUgY2hhbmdlcyB0byBhbGxvdyByZWRoYXQgZmlsZXMgdG8gYmUgaW4gdHJlZQoKKiBTYXQgRGVjIDI4IDIwMDIgQWxleGFuZGVyIEhvb2dlcmh1aXMgPGFsZXhoQGloYXRlbnQuY29tPgotIEFkZGVkIGNvbmRpdGlvbmFscyBmb3IgYnVpbGRpbmcgd2l0aChvdXQpIElQdjYsIHZ0eXNoLCBSSVAsIEJHUAotIEZpeGVkIHVwIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIChwYXRjaCkKLSBBZGRlZCBjb25kaXRpb25hbCBidWlsZCByZXF1aXJlbWVudHMgZm9yIHZ0eXNoIC8gc25tcAotIEFkZGVkIGNvbmRpdGlvbmFsIHRvICVmaWxlcyBmb3IgJV9iaW5kaXIgZGVwZW5kaW5nIG9uIHZ0eXNoCgoqIE1vbiBOb3YgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIEdyZWcgVHJveGVsJ3MgbWQ1IGJ1ZmZlciBjb3B5L2R1cCBmaXgKLSBhZGQgUklQdjEgZml4Ci0gYWRkIEZyYW5rJ3MgbXVsdGljYXN0IGZsYWcgZml4CgoqIFdlZCBPY3QgMDkgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gdGltZXN0YW1wZWQgY3J5cHRfc2VxbnVtIHBhdGNoCi0gb2ktPm9uX3dyaXRlX3EgZml4CgoqIE1vbiBTZXAgMzAgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIHZ0eXNoICd3cml0ZS1jb25maWcgKGludGVncmF0ZWR8ZGFlbW9uKScgcGF0Y2gKLSBhbHdheXMgJ21ha2UgcmVidWlsZCcgaW4gdnR5c2gvIHRvIGNhdGNoIG5ldyBjb21tYW5kcwoKKiBGcmkgU2VwIDEzIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45M2IKCiogV2VkIFNlcCAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgIi9zYmluL2lwIHJvdXRlIGZsdXNoIHByb3RvIHplYnJhIiB0byB6ZWJyYSBSSCBpbml0IG9uIHN0YXJ0dXAKCiogU2F0IEF1ZyAyNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGN1cnJlbnQgQ1ZTCi0gYWRkIE9TUEYgcG9pbnQgdG8gbXVsdGlwb2ludCBwYXRjaAotIGFkZCBPU1BGIGJ1Z2ZpeGVzCi0gYWRkIEJHUCBoYXNoIG9wdGltaXNhdGlvbiBwYXRjaAoKKiBGcmkgSnVuIDE0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45My1wcmUxIC8gQ1ZTCi0gYWRkIGxpbmsgc3RhdGUgZGV0ZWN0aW9uIHN1cHBvcnQKLSBhZGQgZ2VuZXJpYyBQdFAgYW5kIFJGQzMwMjEgc3VwcG9ydAotIHZhcmlvdXMgYnVnIGZpeGVzCgoqIFRodSBBdWcgMDkgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTYKLSBGaXggYnVnICM1MTMzNgoKKiBXZWQgQXVnICAxIDIwMDEgVHJvbmQgRWl2aW5kIEdsb21zcvhkIDx0ZWdAcmVkaGF0LmNvbT4gMC45MWEtNQotIFVzZSBnZW5lcmljIGluaXRzY3JpcHQgc3RyaW5ncyBpbnN0ZWFkIG9mIGluaXRzY3JpcHQgc3BlY2lmaWMKICAoICJTdGFydGluZyBmb286ICIgLT4gIlN0YXJ0aW5nICRwcm9nOiIgKQoKKiBGcmkgSnVsIDI3IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS00Ci0gQnVtcCB0aGUgcmVsZWFzZSB3aGVuIHJlYnVpbGRpbmcgaW50byB0aGUgZGlzdC4KCiogVHVlIEZlYiAgNiAyMDAxIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KLSBidWlsdCBmb3IgUG93ZXJ0b29scwoKKiBTdW4gRmViICA0IDIwMDEgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4gCi0gSGFja2VkIHVwIGZyb20gUExEIExpbnV4IDAuOTAtMSwgTWFuZHJha2UgMC45MC0xbWRrIGFuZCBvbmUgZnJvbSB6ZWJyYS5vcmcuCi0gVXBkYXRlIHRvIDAuOTFhCi0gVmVyeSBoZWF2eSBtb2RpZmljYXRpb25zIHRvIGluaXQuZC8qLCAuc3BlYywgcGFtLCBpMThuLCBsb2dyb3RhdGUsIGV0Yy4KLSBTaG91bGQgYmUgcXVpdGUgUmVkIEhhdCdpc3F1ZSBub3cuCg==