IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMQolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX2lyZHAJMQolZGVmaW5lCQl3aXRoX2lzaXNkCTAKJWRlZmluZQkJd2l0aF9zaGFyZWQJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIG9zcGZkIGJncGQKJWlmICV7d2l0aF9pcHY2fQolZGVmaW5lCQlkYWVtb25fbGlzdAkle2RhZW1vbl9saXN0fSByaXBuZ2Qgb3NwZjZkCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQolZGVmaW5lCQlkYWVtb25fbGlzdAkle2RhZW1vbl9saXN0fSBpc2lzZAolZW5kaWYKCiMgYWxsb3cgYnVpbGQgZGlyIHRvIGJlIGtlcHQKJWRlZmluZQkJa2VlcF9idWlsZAkwCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cucXVhZ2dhLm5ldAolaWYgJXt3aXRoX3NubXB9CkJ1aWxkUmVxdWlyZXM6CW5ldC1zbm1wLWRldmVsClByZXJlcToJCW5ldC1zbm1wCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQpCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBwYW0tZGV2ZWwgcGF0Y2ggbGliY2FwLWRldmVsCiMgSW5pdHNjcmlwdHMgPiA1LjYwIGlzIHJlcXVpcmVkIGZvciBJUHY2IHN1cHBvcnQKUHJlcmVxOgkJaW5pdHNjcmlwdHMgPj0gNS42MApQcmVyZXE6CQluY3Vyc2VzIHJlYWRsaW5lIHBhbQpQcmVyZXE6CQkvc2Jpbi9pbnN0YWxsLWluZm8KUHJvdmlkZXM6CXJvdXRpbmdkYWVtb24KQnVpbGRSb290Ogkle190bXBwYXRofS8le25hbWV9LSV7dmVyc2lvbn0tcm9vdApPYnNvbGV0ZXM6CWJpcmQgZ2F0ZWQgbXJ0IHplYnJhCgolZGVzY3JpcHRpb24KUXVhZ2dhIGlzIGEgZnJlZSBzb2Z0d2FyZSB0aGF0IG1hbmFnZXMgVENQL0lQIGJhc2VkIHJvdXRpbmcKcHJvdG9jb2wuIEl0IHRha2VzIG11bHRpLXNlcnZlciBhbmQgbXVsdGktdGhyZWFkIGFwcHJvYWNoIHRvIHJlc29sdmUKdGhlIGN1cnJlbnQgY29tcGxleGl0eSBvZiB0aGUgSW50ZXJuZXQuCgpRdWFnZ2Egc3VwcG9ydHMgQkdQNCwgQkdQNCssIE9TUEZ2MiwgT1NQRnYzLCBSSVB2MSwgUklQdjIsIGFuZCBSSVBuZy4KClF1YWdnYSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgUm91dGUgU2VydmVyIGFuZCBhIFJvdXRlIFJlZmxlY3Rvci4gSXQgaXMKbm90IGEgdG9vbGtpdCwgaXQgcHJvdmlkZXMgZnVsbCByb3V0aW5nIHBvd2VyIHVuZGVyIGEgbmV3IGFyY2hpdGVjdHVyZS4KUXVhZ2dhIGJ5IGRlc2lnbiBoYXMgYSBwcm9jZXNzIGZvciBlYWNoIHByb3RvY29sLgoKUXVhZ2dhIGlzIGEgZm9yayBvZiBHTlUgWmVicmEuCgolcGFja2FnZSBjb250cmliClN1bW1hcnk6IGNvbnRyaWIgdG9vbHMgZm9yIHF1YWdnYQpHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBjb250cmliCkNvbnRyaWJ1dGVkLzNyZCBwYXJ0eSB0b29scyB3aGljaCBtYXkgYmUgb2YgdXNlIHdpdGggcXVhZ2dhLgoKJXBhY2thZ2UgZGV2ZWwKU3VtbWFyeTogSGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgZm9yIHF1YWdnYSBkZXZlbG9wbWVudApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKCiVkZXNjcmlwdGlvbiBkZXZlbApUaGUgcXVhZ2dhLWRldmVsIHBhY2thZ2UgY29udGFpbnMgdGhlIGhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIG5lY2Nlc3NhcnkgZm9yCmRldmVsb3BpbmcgT1NQRi1BUEkgYW5kIHF1YWdnYSBhcHBsaWNhdGlvbnMuCgolcHJlcAolc2V0dXAgIC1xCgolYnVpbGQKJWNvbmZpZ3VyZSBcCiVpZiAhJXt3aXRoX3NoYXJlZH0KCS0tZGlzYWJsZS1zaGFyZWQgXAolZW5kaWYKJWlmICV7d2l0aF9pcHY2fQoJLS1lbmFibGUtaXB2NiBcCiVlbmRpZgolaWYgJXt3aXRoX3NubXB9CgktLWVuYWJsZS1zbm1wIFwKJWVuZGlmCiVpZiAle3dpdGhfbXVsdGlwYXRofQoJLS1lbmFibGUtbXVsdGlwYXRoPSV7d2l0aF9tdWx0aXBhdGh9IFwKJWVuZGlmCiVpZiAle3dpdGhfdGNwX3plYnJhfQoJLS1lbmFibGUtdGNwLXplYnJhIFwKJWVuZGlmCiVpZiAle3dpdGhfbnNzYX0KCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vcGFxdWVfbHNhfQoJLS1lbmFibGUtb3BhcXVlLWxzYSBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZfdGV9CgktLWVuYWJsZS1vc3BmLXRlIFwKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXt3aXRoX29zcGZjbGllbnR9CgktLWVuYWJsZS1vc3BmY2xpZW50PXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmY2xpZW50PW5vXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lyZHB9CgktLWVuYWJsZS1pcmRwPXllcyBcCiVlbHNlCgktLWVuYWJsZS1pcmRwPW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CgktLWVuYWJsZS1pc2lzZCBcCiVlbHNlCgktLWRpc2FibGUtaXNpc2QKJWVuZGlmCiVpZiAle3dpdGhfcGFtfQoJLS13aXRoLWxpYnBhbSBcCiVlbmRpZgolaWYgJXF1YWdnYV91c2VyCgktLWVuYWJsZS11c2VyPSVxdWFnZ2FfdXNlciBcCgktLWVuYWJsZS1ncm91cD0lcXVhZ2dhX3VzZXIgXAolZW5kaWYKJWlmICV2dHlfZ3JvdXAKCS0tZW5hYmxlLXZ0eS1ncm91cD0ldnR5X2dyb3VwIFwKJWVuZGlmCi0tZW5hYmxlLW5ldGxpbmsKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCBxdWFnZ2EudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvcXVhZ2dhICRSUE1fQlVJTERfUk9PVCV7X2luZm9kaXJ9CgptYWtlIGluc3RhbGwgXAoJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKCiMgUmVtb3ZlIHRoaXMgZmlsZSwgYXMgaXQgaXMgdW5pbnN0YWxsZWQgYW5kIGNhdXNlcyBlcnJvcnMgd2hlbiBidWlsZGluZyBvbiBSSDkKcm0gLXJmICRSUE1fQlVJTERfUk9PVC91c3Ivc2hhcmUvaW5mby9kaXIKCiMgaW5zdGFsbCBldGMgc291cmNlcwpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCglpbnN0YWxsICV7emViX3JoX3NyY30vJHtkYWVtb259LmluaXQgXAoJCSRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259CmRvbmUKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3F1YWdnYS5wYW0gXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9wYW0uZC9xdWFnZ2EKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3F1YWdnYS5sb2dyb3RhdGUgXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9sb2dyb3RhdGUuZC9xdWFnZ2EKaW5zdGFsbCAtbTY0NCAle3plYl9yaF9zcmN9L3F1YWdnYS5zeXNjb25maWcgXAoJJFJQTV9CVUlMRF9ST09UL2V0Yy9zeXNjb25maWcvcXVhZ2dhCmluc3RhbGwgLWQgLW03NTAgICRSUE1fQlVJTERfUk9PVC92YXIvcnVuL3F1YWdnYQoKJXByZQojIGFkZCB2dHlfZ3JvdXAKJWlmICV2dHlfZ3JvdXAKZ3JvdXBhZGQgLXIgJXZ0eV9ncm91cCAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKIyBhZGQgcXVhZ2dhIHVzZXIgYW5kIGdyb3VwCiVpZiAlcXVhZ2dhX3VzZXIKL3Vzci9zYmluL2dyb3VwYWRkIC1nICVxdWFnZ2FfZ2lkIHF1YWdnYSAyPiAvZGV2L251bGwgfHwgOgovdXNyL3NiaW4vdXNlcmFkZCAgLXUgJXF1YWdnYV91aWQgLWcgJXF1YWdnYV9naWQgXAogLU0gLXIgLXMgL3NiaW4vbm9sb2dpbiAtYyAiUXVhZ2dhIHJvdXRpbmcgc3VpdGUiIFwKIC1kICVfbG9jYWxzdGF0ZWRpciAlcXVhZ2dhX3VzZXIgMj4gL2Rldi9udWxsIHx8IDoKJWVuZGlmCgolcG9zdAojIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgPHNlcnZpY2UgbmFtZT4gPHBvcnQvcHJvdG8+IDxjb21tZW50PgojIGUuZy4gemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgKCkKewogICMgQWRkIHBvcnQgL2V0Yy9zZXJ2aWNlcyBlbnRyeSBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlIAogIGlmIFsgLWYgL2V0Yy9zZXJ2aWNlcyBdICYmICEgZ3JlcCAtcSAiXiQxW15hLXpBLVowLTldIiAvZXRjL3NlcnZpY2VzIDsgdGhlbgogICAgZWNobyAiJDEJCSQyCQkJIyAkMyIgID4+IC9ldGMvc2VydmljZXMKICBmaQp9Cgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhICAgIDI2MDEvdGNwICJ6ZWJyYSB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwZCAgICAgMjYwMi90Y3AgIlJJUGQgdnR5IgolaWYgJXt3aXRoX2lwdjZ9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgcmlwbmdkICAgMjYwMy90Y3AgIlJJUG5nZCB2dHkiCiVlbmRpZgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZkICAgIDI2MDQvdGNwICJPU1BGZCB2dHkiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgYmdwZCAgICAgMjYwNS90Y3AgIkJHUGQgdnR5IgolaWYgJXt3aXRoX2lwdjZ9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZjZkICAgMjYwNi90Y3AgIk9TUEY2ZCB2dHkiCiVlbmRpZgolaWYgJXt3aXRoX29zcGZhcGl9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmFwaSAgMjYwNy90Y3AgIk9TUEYtQVBJIgolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KemVicmFfc3BlY19hZGRfc2VydmljZSBpc2lzZCAgICAyNjA4L3RjcCAiSVNJU2QgdnR5IgolZW5kaWYKCmZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCS9zYmluL2Noa2NvbmZpZyAtLWFkZCAke2RhZW1vbn0KZG9uZQoKL3NiaW4vaW5zdGFsbC1pbmZvICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKIyBDcmVhdGUgZHVtbXkgZmlsZXMgaWYgdGhleSBkb24ndCBleGlzdCBzbyBiYXNpYyBmdW5jdGlvbnMgY2FuIGJlIHVzZWQuCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mIF07IHRoZW4KCWVjaG8gImhvc3RuYW1lIGBob3N0bmFtZWAiID4gJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKZmkKaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYgXTsgdGhlbgoJdG91Y2ggJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKZmkKCiVwb3N0dW4KaWYgWyAiJDEiIC1nZSAgIjEiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWRhZW1vbl9saXN0IDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKCWRvbmUKZmkKCiVwcmV1bgppZiBbICIkMSIgPSAiMCIgXTsgdGhlbgoJZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJCS9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259IHN0b3AgID4vZGV2L251bGwgMj4mMQoJCS9zYmluL2Noa2NvbmZpZyAtLWRlbCAke2RhZW1vbn0KCWRvbmUKCS9zYmluL2luc3RhbGwtaW5mbyAtLWRlbGV0ZSAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKZmkKCiVjbGVhbgolaWYgISV7a2VlcF9idWlsZH0Kcm0gLXJmICRSUE1fQlVJTERfUk9PVAolZW5kaWYKCiVmaWxlcwolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyAqLyouc2FtcGxlKiBBVVRIT1JTIENPUFlJTkcKJWRvYyBkb2MvcXVhZ2dhLmh0bWwKJWRvYyBkb2MvbXBscwolZG9jIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgUkVBRE1FIFJFUE9SVElORy1CVUdTIFNFUlZJQ0VTIFRPRE8KJWlmICV7cXVhZ2dhX3VzZXJ9CiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvbG9nL3F1YWdnYSAKJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9ydW4vcXVhZ2dhCiVlbHNlCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAvdmFyL2xvZy9xdWFnZ2EKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAvdXNyL3NoYXJlL2luZm8KJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAvdmFyL3J1bi9xdWFnZ2EKJWVuZGlmCiVpZiAle3Z0eV9ncm91cH0KJWF0dHIoNzUwLCVxdWFnZ2FfdXNlciwldnR5X2dyb3VwKSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mLnNhbXBsZQolZW5kaWYKJXtfaW5mb2Rpcn0vKmluZm8qCiV7X21hbmRpcn0vbWFuKi8qCiV7X3NiaW5kaXJ9L3plYnJhCiV7X3NiaW5kaXJ9L29zcGZkCiV7X3NiaW5kaXJ9L3JpcGQKJXtfc2JpbmRpcn0vYmdwZAolaWYgJXt3aXRoX2lwdjZ9CiV7X3NiaW5kaXJ9L3JpcG5nZAole19zYmluZGlyfS9vc3BmNmQKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CiV7X3NiaW5kaXJ9L2lzaXNkCiVlbmRpZgolaWYgJXt3aXRoX3NoYXJlZH0KJXtfbGliZGlyfS9saWIqLnNvCiV7X2xpYmRpcn0vbGliKi5zby4qCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQole19iaW5kaXJ9LyoKJWVuZGlmCiVjb25maWcgL2V0Yy9xdWFnZ2EvWyF2XSoKJWNvbmZpZyAvZXRjL3JjLmQvaW5pdC5kLyoKJWNvbmZpZyhub3JlcGxhY2UpIC9ldGMvc3lzY29uZmlnL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9wYW0uZC9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpICVhdHRyKDY0MCxyb290LHJvb3QpIC9ldGMvbG9ncm90YXRlLmQvKgoKJWZpbGVzIGNvbnRyaWIKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgdG9vbHMKCiVmaWxlcyBkZXZlbAolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRpciAle19saWJkaXJ9LyouYQolZGlyICV7X2xpYmRpcn0vKi5sYQolZGlyICV7X2luY2x1ZGVkaXJ9LyVuYW1lLyouaAolZGlyICV7X2luY2x1ZGVkaXJ9LyVuYW1lL29zcGZkLyouaAolaWYgJXt3aXRoX29zcGZhcGl9CiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvb3NwZmFwaS8qLmgKJWVuZGlmCgolY2hhbmdlbG9nCiVjaGFuZ2Vsb2cKKiBXZWQgU2VwIDE1IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIGJ1aWxkIHNubXAgc3VwcG9ydCBieSBkZWZhdWx0Ci0gYnVpbGQgaXJkcCBzdXBwb3J0Ci0gYnVpbGQgd2l0aCBzaGFyZWQgbGlicwotIGRldmVsIHN1YnBhY2thZ2UgZm9yIGFyY2hpdmVzIGFuZCBoZWFkZXJzCgoqIFRodSBKYW4gMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gdXBkYXRlZCBzeXNjb25maWcgZmlsZXMgdG8gc3BlY2lmeSBsb2NhbCBkaXIKLSBhZGRlZCBvc3BmX2R1bXAuYyBjcmFzaCBxdWljayBmaXggcGF0Y2gKLSBhZGRlZCBvc3BmZCBwZXJzaXN0ZW50IGludGVyZmFjZSBjb25maWd1cmF0aW9uIHBhdGNoCgoqIFR1ZSBEZWMgMzAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gc3luYyB0byBDVlMKLSBpbnRlZ3JhdGUgUkggc3lzY29uZmlnIHBhdGNoIHRvIHNwZWNpZnkgZGFlbW9uIG9wdGlvbnMgKFJIKQotIGRlZmF1bHQgdG8gaGF2ZSB2dHkgbGlzdGVuIG9ubHkgdG8gMTI3LjEgKFJIKQotIGFkZCB1c2VyIHdpdGggZml4ZWQgVUlEL0dJRCAoUkgpCi0gY3JlYXRlIHVzZXIgd2l0aCBzaGVsbCAvc2Jpbi9ub2xvZ2luIHJhdGhlciB0aGFuIC9iaW4vZmFsc2UgKFJIKQotIHN0b3AgZGFlbW9ucyBvbiB1bmluc3RhbGwgKFJIKQotIGRlbGV0ZSBpbmZvIGZpbGUgb24gJXByZXVuLCBub3QgJXBvc3R1biB0byBhdm9pZCBkZWxldGlvbiBvbiB1cGdyYWRlLiAoUkgpCi0gaXNpc2QgYWRkZWQKLSBjbGVhbnVwIHRhc2tzIGNhcnJpZWQgb3V0IGZvciBldmVyeSBkYWVtb24KCiogU3VuIE5vdiAyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCAtZGV2ZWwgcGFja2FnZSB0byBpbmNsdWRlIGFsbCBmaWxlcwotIFN5bmMgdG8gMC45Ni40CgoqIFR1ZSBBdWcgMTIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gUmVuYW1lZCB0byBRdWFnZ2EKLSBTeW5jIHRvIFF1YWdnYSByZWxlYXNlIDAuOTYKCiogVHVlIE1hciAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB6ZWJyYSBwcml2aWxlZ2VzIHN1cHBvcnQKCiogTW9uIE1hciAxOCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggbWVtIGxlYWsgaW4gJ3Nob3cgdGhyZWFkIGNwdScKLSBSYWxwaCBLZWxsZXIncyBPU1BGLUFQSQotIEFtaXI6IEZpeCBjb25maWd1cmUuYWMgZm9yIG5ldC1zbm1wCgoqIFNhdCBNYXIgMSAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBvc3BmZCBJT1MgcHJlZml4IHRvIGludGVyZmFjZSBtYXRjaGluZyBmb3IgJ25ldHdvcmsnIHN0YXRlbWVudAotIHRlbXBvcmFyeSBmaXggZm9yIFB0UCBhbmQgSVB2NgotIHN5bmMgdG8gemVicmEub3JnIENWUwoKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K