ZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvRmlsZWxpc3QgYi9ydW50aW1lL3R1dG9yL0ZpbGVsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNDIzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL0ZpbGVsaXN0CkBAIC0wLDAgKzEsNzE2IEBACisjIExpc3Qgb2YgZGlzdHJpYnV0ZWQgVmltIGZpbGVzLgorIyBVc2VkIGJ5IE1ha2VmaWxlIGFuZCB1cGxvYWQuYWFwLgorCisjIHNvdXJjZSBmaWxlcyBmb3IgYWxsIHNvdXJjZSBhcmNoaXZlcworU1JDX0FMTCA9CVwKKwkJc3JjL1JFQURNRS50eHQgXAorCQlzcmMvYXJhYmljLmMgXAorCQlzcmMvYXJhYmljLmggXAorCQlzcmMvYXNjaWkuaCBcCisJCXNyYy9idWZmZXIuYyBcCisJCXNyYy9jaGFyc2V0LmMgXAorCQlzcmMvZGlmZi5jIFwKKwkJc3JjL2RpZ3JhcGguYyBcCisJCXNyYy9lZGl0LmMgXAorCQlzcmMvZXZhbC5jIFwKKwkJc3JjL2V4X2NtZHMuYyBcCisJCXNyYy9leF9jbWRzLmggXAorCQlzcmMvZXhfY21kczIuYyBcCisJCXNyYy9leF9kb2NtZC5jIFwKKwkJc3JjL2V4X2V2YWwuYyBcCisJCXNyYy9leF9nZXRsbi5jIFwKKwkJc3JjL2ZhcnNpLmMgXAorCQlzcmMvZmFyc2kuaCBcCisJCXNyYy9mZWF0dXJlLmggXAorCQlzcmMvZmlsZWlvLmMgXAorCQlzcmMvZm9sZC5jIFwKKwkJc3JjL2dldGNoYXIuYyBcCisJCXNyYy9nbG9iYWxzLmggXAorCQlzcmMvZ3VpLmMgXAorCQlzcmMvZ3VpLmggXAorCQlzcmMvZ3VpX2JldmFsLmMgXAorCQlzcmMvZ3VpX2JldmFsLmggXAorCQlzcmMvaGFyZGNvcHkuYyBcCisJCXNyYy9oYXNodGFiLmMgXAorCQlzcmMva2V5bWFwLmggXAorCQlzcmMvbWFjcm9zLmggXAorCQlzcmMvbWFpbi5jIFwKKwkJc3JjL21hcmsuYyBcCisJCXNyYy9tYnl0ZS5jIFwKKwkJc3JjL21lbWZpbGUuYyBcCisJCXNyYy9tZW1saW5lLmMgXAorCQlzcmMvbWVudS5jIFwKKwkJc3JjL21lc3NhZ2UuYyBcCisJCXNyYy9taXNjMS5jIFwKKwkJc3JjL21pc2MyLmMgXAorCQlzcmMvbW92ZS5jIFwKKwkJc3JjL215c2lnbiBcCisJCXNyYy9uYmRlYnVnLmMgXAorCQlzcmMvbmJkZWJ1Zy5oIFwKKwkJc3JjL25ldGJlYW5zLmMgXAorCQlzcmMvbm9ybWFsLmMgXAorCQlzcmMvb3BzLmMgXAorCQlzcmMvb3B0aW9uLmMgXAorCQlzcmMvb3B0aW9uLmggXAorCQlzcmMvcG9wdXBtbnUuYyBcCisJCXNyYy9xdWlja2ZpeC5jIFwKKwkJc3JjL3JlZ2V4cC5jIFwKKwkJc3JjL3JlZ2V4cC5oIFwKKwkJc3JjL3NjcmVlbi5jIFwKKwkJc3JjL3NlYXJjaC5jIFwKKwkJc3JjL3N0cnVjdHMuaCBcCisJCXNyYy9zcGVsbC5jIFwKKwkJc3JjL3N5bnRheC5jIFwKKwkJc3JjL3RhZy5jIFwKKwkJc3JjL3Rlcm0uYyBcCisJCXNyYy90ZXJtLmggXAorCQlzcmMvdGVybWxpYi5jIFwKKwkJc3JjL3VpLmMgXAorCQlzcmMvdW5kby5jIFwKKwkJc3JjL3ZlcnNpb24uYyBcCisJCXNyYy92ZXJzaW9uLmggXAorCQlzcmMvdmltLmggXAorCQlzcmMvd2luZG93LmMgXAorCQlzcmMveHhkL3h4ZC5jIFwKKwkJc3JjL21haW4uYWFwIFwKKwkJc3JjL3Rlc3RkaXIvbWFpbi5hYXAgXAorCQlzcmMvdGVzdGRpci8qLmluIFwKKwkJc3JjL3Rlc3RkaXIvdGVzdFswLTldKi5vayBcCisJCXNyYy90ZXN0ZGlyL3Rlc3Q0OS52aW0gXAorCQlzcmMvdGVzdGRpci90ZXN0NjAudmltIFwKKwkJc3JjL3Byb3RvLmggXAorCQlzcmMvcHJvdG8vYnVmZmVyLnBybyBcCisJCXNyYy9wcm90by9jaGFyc2V0LnBybyBcCisJCXNyYy9wcm90by9kaWZmLnBybyBcCisJCXNyYy9wcm90by9kaWdyYXBoLnBybyBcCisJCXNyYy9wcm90by9lZGl0LnBybyBcCisJCXNyYy9wcm90by9ldmFsLnBybyBcCisJCXNyYy9wcm90by9leF9jbWRzLnBybyBcCisJCXNyYy9wcm90by9leF9jbWRzMi5wcm8gXAorCQlzcmMvcHJvdG8vZXhfZG9jbWQucHJvIFwKKwkJc3JjL3Byb3RvL2V4X2V2YWwucHJvIFwKKwkJc3JjL3Byb3RvL2V4X2dldGxuLnBybyBcCisJCXNyYy9wcm90by9maWxlaW8ucHJvIFwKKwkJc3JjL3Byb3RvL2ZvbGQucHJvIFwKKwkJc3JjL3Byb3RvL2dldGNoYXIucHJvIFwKKwkJc3JjL3Byb3RvL2d1aS5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX2JldmFsLnBybyBcCisJCXNyYy9wcm90by9oYXJkY29weS5wcm8gXAorCQlzcmMvcHJvdG8vaGFzaHRhYi5wcm8gXAorCQlzcmMvcHJvdG8vbWFpbi5wcm8gXAorCQlzcmMvcHJvdG8vbWFyay5wcm8gXAorCQlzcmMvcHJvdG8vbWJ5dGUucHJvIFwKKwkJc3JjL3Byb3RvL21lbWZpbGUucHJvIFwKKwkJc3JjL3Byb3RvL21lbWxpbmUucHJvIFwKKwkJc3JjL3Byb3RvL21lbnUucHJvIFwKKwkJc3JjL3Byb3RvL21lc3NhZ2UucHJvIFwKKwkJc3JjL3Byb3RvL21pc2MxLnBybyBcCisJCXNyYy9wcm90by9taXNjMi5wcm8gXAorCQlzcmMvcHJvdG8vbW92ZS5wcm8gXAorCQlzcmMvcHJvdG8vbmV0YmVhbnMucHJvIFwKKwkJc3JjL3Byb3RvL25vcm1hbC5wcm8gXAorCQlzcmMvcHJvdG8vb3BzLnBybyBcCisJCXNyYy9wcm90by9vcHRpb24ucHJvIFwKKwkJc3JjL3Byb3RvL3BvcHVwbW51LnBybyBcCisJCXNyYy9wcm90by9xdWlja2ZpeC5wcm8gXAorCQlzcmMvcHJvdG8vcmVnZXhwLnBybyBcCisJCXNyYy9wcm90by9zY3JlZW4ucHJvIFwKKwkJc3JjL3Byb3RvL3NlYXJjaC5wcm8gXAorCQlzcmMvcHJvdG8vc3BlbGwucHJvIFwKKwkJc3JjL3Byb3RvL3N5bnRheC5wcm8gXAorCQlzcmMvcHJvdG8vdGFnLnBybyBcCisJCXNyYy9wcm90by90ZXJtLnBybyBcCisJCXNyYy9wcm90by90ZXJtbGliLnBybyBcCisJCXNyYy9wcm90by91aS5wcm8gXAorCQlzcmMvcHJvdG8vdW5kby5wcm8gXAorCQlzcmMvcHJvdG8vdmVyc2lvbi5wcm8gXAorCQlzcmMvcHJvdG8vd2luZG93LnBybyBcCisKKworIyBzb3VyY2UgZmlsZXMgZm9yIFVuaXggb25seQorU1JDX1VOSVggPQlcCisJCU1ha2VmaWxlIFwKKwkJRmlsZWxpc3QgXAorCQlSRUFETUVfc3JjLnR4dCBcCisJCWNvbmZpZ3VyZSBcCisJCXBpeG1hcHMvKi54cG0gXAorCQlwaXhtYXBzL2dlbi1pbmxpbmUtcGl4YnVmcy5zaCBcCisJCXBpeG1hcHMvc3RvY2tfaWNvbnMuaCBcCisJCXNyYy9JTlNUQUxMIFwKKwkJc3JjL0lOU1RBTEx4LnR4dCBcCisJCXNyYy9NYWtlZmlsZSBcCisJCXNyYy9hdXRvL2NvbmZpZ3VyZSBcCisJCXNyYy9jb25maWcuYWFwLmluIFwKKwkJc3JjL2NvbmZpZy5oLmluIFwKKwkJc3JjL2NvbmZpZy5tay5kaXN0IFwKKwkJc3JjL2NvbmZpZy5tay5pbiBcCisJCXNyYy9jb25maWd1cmUgXAorCQlzcmMvY29uZmlndXJlLmluIFwKKwkJc3JjL2d1aV9hdF9mcy5jIFwKKwkJc3JjL2d1aV9hdF9zYi5jIFwKKwkJc3JjL2d1aV9hdF9zYi5oIFwKKwkJc3JjL2d1aV9hdGhlbmEuYyBcCisJCXNyYy9ndWlfZ3RrLmMgXAorCQlzcmMvZ3VpX2d0a19mLmMgXAorCQlzcmMvZ3VpX2d0a19mLmggXAorCQlzcmMvZ3VpX2d0a194MTEuYyBcCisJCXNyYy9ndWlfbW90aWYuYyBcCisJCXNyYy9ndWlfeG1kbGcuYyBcCisJCXNyYy9ndWlfeG1lYncuYyBcCisJCXNyYy9ndWlfeG1lYncuaCBcCisJCXNyYy9ndWlfeG1lYndwLmggXAorCQlzcmMvZ3VpX3gxMS5jIFwKKwkJc3JjL2d1aV94MTFfcG0uaCBcCisJCXNyYy9oYW5ndWxpbi5jIFwKKwkJc3JjL2lmX3hjbWRzcnYuYyBcCisJCXNyYy9pbnRlZ3JhdGlvbi5jIFwKKwkJc3JjL2ludGVncmF0aW9uLmggXAorCQlzcmMvbGluay5zaCBcCisJCXNyYy9pbnN0YWxsbWFuLnNoIFwKKwkJc3JjL2luc3RhbGxtbC5zaCBcCisJCXNyYy9ta2luc3RhbGxkaXJzIFwKKwkJc3JjL29zX3VuaXguYyBcCisJCXNyYy9vc191bml4LmggXAorCQlzcmMvb3NfdW5peHguaCBcCisJCXNyYy9vc2RlZi5zaCBcCisJCXNyYy9vc2RlZjEuaC5pbiBcCisJCXNyYy9vc2RlZjIuaC5pbiBcCisJCXNyYy9wYXRoZGVmLnNoIFwKKwkJc3JjL3Byb3RvL2d1aV9hdGhlbmEucHJvIFwKKwkJc3JjL3Byb3RvL2d1aV9ndGsucHJvIFwKKwkJc3JjL3Byb3RvL2d1aV9ndGtfeDExLnBybyBcCisJCXNyYy9wcm90by9ndWlfbW90aWYucHJvIFwKKwkJc3JjL3Byb3RvL2d1aV94bWRsZy5wcm8gXAorCQlzcmMvcHJvdG8vZ3VpX3gxMS5wcm8gXAorCQlzcmMvcHJvdG8vaGFuZ3VsaW4ucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3hjbWRzcnYucHJvIFwKKwkJc3JjL3Byb3RvL29zX3VuaXgucHJvIFwKKwkJc3JjL3Byb3RvL3B0eS5wcm8gXAorCQlzcmMvcHJvdG8vd29ya3Nob3AucHJvIFwKKwkJc3JjL3B0eS5jIFwKKwkJc3JjL3Rlc3RkaXIvTWFrZWZpbGUgXAorCQlzcmMvdGVzdGRpci91bml4LnZpbSBcCisJCXNyYy90b29sY2hlY2sgXAorCQlzcmMvdmltX2ljb24ueGJtIFwKKwkJc3JjL3ZpbV9tYXNrLnhibSBcCisJCXNyYy92aW10dXRvciBcCisJCXNyYy9ndmltdHV0b3IgXAorCQlzcmMvd2hpY2guc2ggXAorCQlzcmMvd29ya3Nob3AuYyBcCisJCXNyYy93b3Jrc2hvcC5oIFwKKwkJc3JjL3dzZGVidWcuYyBcCisJCXNyYy93c2RlYnVnLmggXAorCQlzcmMveHhkL01ha2VmaWxlIFwKKworIyBzb3VyY2UgZmlsZXMgZm9yIGJvdGggRE9TIGFuZCBVbml4CitTUkNfRE9TX1VOSVggPQlcCisJCXNyYy9pZl9jc2NvcGUuYyBcCisJCXNyYy9pZl9jc2NvcGUuaCBcCisJCXNyYy9pZl9tenNjaC5jIFwKKwkJc3JjL2lmX216c2NoLmggXAorCQlzcmMvaWZfcGVybC54cyBcCisJCXNyYy9pZl9wZXJsc2Zpby5jIFwKKwkJc3JjL2lmX3B5dGhvbi5jIFwKKwkJc3JjL2lmX3J1YnkuYyBcCisJCXNyYy9pZl9zbmlmZi5oIFwKKwkJc3JjL2lmX3RjbC5jIFwKKwkJc3JjL3Byb3RvL2lmX2NzY29wZS5wcm8gXAorCQlzcmMvcHJvdG8vaWZfbXpzY2gucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3BlcmwucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3BlcmxzZmlvLnBybyBcCisJCXNyYy9wcm90by9pZl9weXRob24ucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3J1YnkucHJvIFwKKwkJc3JjL3Byb3RvL2lmX3RjbC5wcm8gXAorCQlzcmMvdHlwZW1hcCBcCisKKyMgc291cmNlIGZpbGVzIGZvciBET1MgKGFsc28gaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitTUkNfRE9TID0JXAorCQlzcmMvR3ZpbUV4dC8qLm1hayBcCisJCXNyYy9HdmltRXh0L0d2aW1FeHQucmVnIFwKKwkJc3JjL0d2aW1FeHQvTWFrZWZpbGUgXAorCQlzcmMvR3ZpbUV4dC9SRUFETUUudHh0IFwKKwkJc3JjL0d2aW1FeHQvZ3ZpbWV4dC5jcHAgXAorCQlzcmMvR3ZpbUV4dC9ndmltZXh0LmRlZiBcCisJCXNyYy9HdmltRXh0L2d2aW1leHQuaCBcCisJCXNyYy9HdmltRXh0L2d2aW1leHQuaW5mIFwKKwkJc3JjL0d2aW1FeHQvZ3ZpbWV4dC5yYyBcCisJCXNyYy9HdmltRXh0L2d2aW1leHRfbWluZy5kZWYgXAorCQlzcmMvR3ZpbUV4dC9ndmltZXh0X21pbmcucmMgXAorCQlzcmMvR3ZpbUV4dC9yZXNvdXJjZS5oIFwKKwkJc3JjL0d2aW1FeHQvdW5pbnN0LmJhdCBcCisJCVJFQURNRV9zcmNkb3MudHh0IFwKKwkJc3JjL0lOU1RBTExwYy50eHQgXAorCQlzcmMvTWFrZV9iYzMubWFrIFwKKwkJc3JjL01ha2VfYmM1Lm1hayBcCisJCXNyYy9NYWtlX2N5Zy5tYWsgXAorCQlzcmMvTWFrZV9kamcubWFrIFwKKwkJc3JjL01ha2VfaXZjLm1hayBcCisJCXNyYy9NYWtlX2R2Yy5tYWsgXAorCQlzcmMvTWFrZV9taW5nLm1hayBcCisJCXNyYy9NYWtlX212Yy5tYWsgXAorCQlzcmMvTWFrZV93MTYubWFrIFwKKwkJc3JjL2JpZ3ZpbS5iYXQgXAorCQlzcmMvbXN2Y3NldHVwLmJhdCBcCisJCXNyYy9tc3ZjMjAwOC5iYXQgXAorCQlzcmMvZGltbS5pZGwgXAorCQlzcmMvZGxsZGF0YS5jIFwKKwkJc3JjL2Rvc2luc3QuYyBcCisJCXNyYy9kb3NpbnN0LmggXAorCQlzcmMvZ2xibF9pbWUuY3BwIFwKKwkJc3JjL2dsYmxfaW1lLmggXAorCQlzcmMvZ3VpX3cxNi5jIFwKKwkJc3JjL2d1aV93MzIuYyBcCisJCXNyYy9ndWlfdzQ4LmMgXAorCQlzcmMvZ3VpdzE2cmMuaCBcCisJCXNyYy9ndWlfdzMyX3JjLmggXAorCQlzcmMvaWZfb2xlLmNwcCBcCisJCXNyYy9pZl9vbGUuaCBcCisJCXNyYy9pZl9vbGUuaWRsIFwKKwkJc3JjL2lpZF9vbGUuYyBcCisJCXNyYy9vc19kb3MuaCBcCisJCXNyYy9vc19tc2Rvcy5jIFwKKwkJc3JjL29zX21zZG9zLmggXAorCQlzcmMvb3NfdzMyZGxsLmMgXAorCQlzcmMvb3NfdzMyZXhlLmMgXAorCQlzcmMvb3Nfd2luMTYuYyBcCisJCXNyYy9vc193aW4zMi5jIFwKKwkJc3JjL29zX21zd2luLmMgXAorCQlzcmMvb3Nfd2luMTYuaCBcCisJCXNyYy9vc193aW4zMi5oIFwKKwkJc3JjL3Byb3RvL2d1aV93MTYucHJvIFwKKwkJc3JjL3Byb3RvL2d1aV93MzIucHJvIFwKKwkJc3JjL3Byb3RvL2lmX29sZS5wcm8gXAorCQlzcmMvcHJvdG8vb3NfbXNkb3MucHJvIFwKKwkJc3JjL3Byb3RvL29zX3dpbjE2LnBybyBcCisJCXNyYy9wcm90by9vc193aW4zMi5wcm8gXAorCQlzcmMvcHJvdG8vb3NfbXN3aW4ucHJvIFwKKwkJc3JjL3Rlc3RkaXIvTWFrZV9kb3MubWFrIFwKKwkJc3JjL3Rlc3RkaXIvZG9zLnZpbSBcCisJCXNyYy91bmluc3RhbC5jIFwKKwkJc3JjL3ZpbS5kZWYgXAorCQlzcmMvdmltLnJjIFwKKwkJc3JjL3ZpbWlvLmggXAorCQlzcmMvZ3ZpbS5leGUubW5mIFwKKwkJc3JjL3ZpbTE2LmRlZiBcCisJCXNyYy92aW0xNi5yYyBcCisJCXNyYy92aW1ydW4uYyBcCisJCXNyYy92aW10YmFyLmggXAorCQlzcmMveHBtX3czMi5jIFwKKwkJc3JjL3hwbV93MzIuaCBcCisJCXNyYy94eGQvTWFrZV9iYzMubWFrIFwKKwkJc3JjL3h4ZC9NYWtlX2JjNS5tYWsgXAorCQlzcmMveHhkL01ha2VfY3lnLm1hayBcCisJCXNyYy94eGQvTWFrZV9kamcubWFrIFwKKwkJc3JjL3h4ZC9NYWtlX212Yy5tYWsgXAorCQluc2lzL2d2aW0ubnNpIFwKKwkJbnNpcy9SRUFETUUudHh0IFwKKwkJdW5pbnN0YWwudHh0IFwKKwkJc3JjL1Zpc1ZpbS9Db21tYW5kcy5jcHAgXAorCQlzcmMvVmlzVmltL0NvbW1hbmRzLmggXAorCQlzcmMvVmlzVmltL0RTQWRkSW4uY3BwIFwKKwkJc3JjL1Zpc1ZpbS9EU0FkZEluLmggXAorCQlzcmMvVmlzVmltL09sZUF1dC5jcHAgXAorCQlzcmMvVmlzVmltL09sZUF1dC5oIFwKKwkJc3JjL1Zpc1ZpbS9SRUFETUVfVmlzVmltLnR4dCBcCisJCXNyYy9WaXNWaW0vUmVnLmNwcCBcCisJCXNyYy9WaXNWaW0vUmVnaXN0ZXIuYmF0IFwKKwkJc3JjL1Zpc1ZpbS9SZXNvdXJjZS5oIFwKKwkJc3JjL1Zpc1ZpbS9TdGRBZnguY3BwIFwKKwkJc3JjL1Zpc1ZpbS9TdGRBZnguaCBcCisJCXNyYy9WaXNWaW0vVW5SZWdpc3QuYmF0IFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0uY3BwIFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0uZGVmIFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0ubWFrIFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0uaCBcCisJCXNyYy9WaXNWaW0vVmlzVmltLm9kbCBcCisJCXNyYy9WaXNWaW0vVmlzVmltLnJjIFwKKwkJc3JjL1Zpc1ZpbS9Wc1JlYWRNZS50eHQgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgRE9TIHdpdGhvdXQgQ1IvTEYgdHJhbnNsYXRpb24gKGFsc28gaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitTUkNfRE9TX0JJTiA9CVwKKwkJc3JjL1Zpc1ZpbS9SZXMvKi5ibXAgXAorCQlzcmMvdGVhcm9mZi5ibXAgXAorCQlzcmMvdG9vbHMuYm1wIFwKKwkJc3JjL3Rvb2xzMTYuYm1wIFwKKwkJc3JjL3ZpbSouaWNvIFwKKwkJc3JjL3ZpbS50bGIgXAorCQlzcmMvdmltdGJhci5saWIgXAorCQlzcmMvdmltdGJhci5kbGwgXAorCQluc2lzL2ljb25zLyouYm1wIFwKKwkJbnNpcy9pY29ucy8qLmljbyBcCisKKyMgc291cmNlIGZpbGVzIGZvciBBbWlnYSwgRE9TLCBldGMuIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorU1JDX0FNSV9ET1MgPQlcCisKKyMgc291cmNlIGZpbGVzIGZvciBBbWlnYSAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19BTUkgPQlcCisJCVJFQURNRV9hbWlzcmMudHh0IFwKKwkJUkVBRE1FX2FtaXNyYy50eHQuaW5mbyBcCisJCXNyYy5pbmZvIFwKKwkJc3JjL0lOU1RBTExhbWkudHh0IFwKKwkJc3JjL01ha2VfZGljZS5tYWsgXAorCQlzcmMvTWFrZV9tYW54Lm1hayBcCisJCXNyYy9NYWtlX21vcnBoLm1hayBcCisJCXNyYy9NYWtlX3Nhcy5tYWsgXAorCQlzcmMvb3NfYW1pZ2EuYyBcCisJCXNyYy9vc19hbWlnYS5oIFwKKwkJc3JjL3Byb3RvL29zX2FtaWdhLnBybyBcCisJCXNyYy90ZXN0ZGlyL01ha2VfYW1pZ2EubWFrIFwKKwkJc3JjL3Rlc3RkaXIvYW1pZ2EudmltIFwKKwkJc3JjL3h4ZC9NYWtlX2FtaWdhLm1hayBcCisKKyMgc291cmNlIGZpbGVzIGZvciB0aGUgTWFjIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorU1JDX01BQyA9CVwKKwkJc3JjL0lOU1RBTExtYWMudHh0IFwKKwkJc3JjL2RlaHF4LnB5IFwKKwkJc3JjL2d1aV9tYWMuYyBcCisJCXNyYy9vc19tYWNfcnNyYy8qLmljbnMgXAorCQlzcmMvb3NfbWFjLmggXAorCQlzcmMvb3NfbWFjLnJzci5ocXggXAorCQlzcmMvb3NfbWFjX2NvbnYuYyBcCisJCXNyYy9vc19tYWNvc3guYyBcCisJCXNyYy9wcm90by9ndWlfbWFjLnBybyBcCisJCXNyYy9wcm90by9vc19tYWNfY29udi5wcm8gXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgVk1TIChpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19WTVMgPQlcCisJCXNyYy9JTlNUQUxMdm1zLnR4dCBcCisJCXNyYy9NYWtlX3Ztcy5tbXMgXAorCQlzcmMvZ3VpX2d0a192bXMuaCBcCisJCXNyYy9vc192bXMuYyBcCisJCXNyYy9vc192bXNfY29uZi5oIFwKKwkJc3JjL29zX3Ztc19tbXMuYyBcCisJCXNyYy9wcm90by9vc192bXMucHJvIFwKKwkJc3JjL3Rlc3RkaXIvTWFrZV92bXMubW1zIFwKKwkJc3JjL3Rlc3RkaXIvdm1zLnZpbSBcCisJCXNyYy94eGQvTWFrZV92bXMubW1zIFwKKwkJdmltdHV0b3IuY29tIFwKKworIyBzb3VyY2UgZmlsZXMgZm9yIE9TLzIgKGluIHRoZSBleHRyYSBhcmNoaXZlKQorU1JDX09TMiA9CVwKKwkJc3JjL01ha2Vfb3MyLm1hayBcCisJCXNyYy9vc19vczJfY2ZnLmggXAorCQlzcmMvdGVzdGRpci9NYWtlX29zMi5tYWsgXAorCQlzcmMvdGVzdGRpci90b2Rvcy52aW0gXAorCQlzcmMvdGVzdGRpci9vczIudmltIFwKKwkJc3JjL3h4ZC9NYWtlX29zMi5tYWsgXAorCisjIHNvdXJjZSBmaWxlcyBmb3IgUU5YIChpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1NSQ19RTlggPQlcCisJCXNyYy9vc19xbnguYyBcCisJCXNyYy9vc19xbnguaCBcCisJCXNyYy9ndWlfcGhvdG9uLmMgXAorCQlzcmMvcHJvdG8vZ3VpX3Bob3Rvbi5wcm8gXAorCQlzcmMvcHJvdG8vb3NfcW54LnBybyBcCisKKworIyBzb3VyY2UgZmlsZXMgZm9yIHRoZSBleHRyYSBhcmNoaXZlIChhbGwgc291cmNlcyB0aGF0IGFyZSBub3QgZm9yIFVuaXgpCitTUkNfRVhUUkEgPQlcCisJCSQoU1JDX0FNSSkgXAorCQkkKFNSQ19BTUlfRE9TKSBcCisJCSQoU1JDX0RPUykgXAorCQkkKFNSQ19ET1NfQklOKSBcCisJCSQoU1JDX01BQykgXAorCQkkKFNSQ19PUzIpIFwKKwkJJChTUkNfUU5YKSBcCisJCSQoU1JDX1ZNUykgXAorCQlSRUFETUVfb3MzOTAudHh0IFwKKwkJc3JjL01ha2VfbWludC5tYWsgXAorCQlzcmMvTWFrZV9yby5tYWsgXAorCQlzcmMvZ3VpX3Jpc2Nvcy5jIFwKKwkJc3JjL2d1aV9yaXNjb3MuaCBcCisJCXNyYy9pZl9zbmlmZi5jIFwKKwkJc3JjL2luZnBsaXN0LnhtbCBcCisJCXNyYy9saW5rLjM5MCBcCisJCXNyYy9vc19iZW9zLmMgXAorCQlzcmMvb3NfYmVvcy5oIFwKKwkJc3JjL29zX2Jlb3MucnNyYyBcCisJCXNyYy9vc19taW50LmggXAorCQlzcmMvb3NfcmlzY29zLmMgXAorCQlzcmMvb3NfcmlzY29zLmggXAorCQlzcmMvcHJvdG8vZ3VpX3Jpc2Nvcy5wcm8gXAorCQlzcmMvcHJvdG8vb3NfcmlzY29zLnBybyBcCisJCXNyYy9vc192bXNfZml4LmNvbSBcCisJCXNyYy90b29sYmFyLnBoaSBcCisKKyMgcnVudGltZSBmaWxlcyBmb3IgYWxsIGRpc3RyaWJ1dGlvbnMKK1JUX0FMTCA9CVwKKwkJUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvYnVncmVwb3J0LnZpbSBcCisJCXJ1bnRpbWUvZG9jLyouYXdrIFwKKwkJcnVudGltZS9kb2MvKi5wbCBcCisJCXJ1bnRpbWUvZG9jLyoudHh0IFwKKwkJcnVudGltZS9kb2MvTWFrZWZpbGUgXAorCQlydW50aW1lL2RvYy9kb2N0YWdzLmMgXAorCQlydW50aW1lL2RvYy92aW0uMSBcCisJCXJ1bnRpbWUvZG9jL2V2aW0uMSBcCisJCXJ1bnRpbWUvZG9jL3ZpbWRpZmYuMSBcCisJCXJ1bnRpbWUvZG9jL3ZpbXR1dG9yLjEgXAorCQlydW50aW1lL2RvYy94eGQuMSBcCisJCXJ1bnRpbWUvZnRvZmYudmltIFwKKwkJcnVudGltZS9ndmltcmNfZXhhbXBsZS52aW0gXAorCQlydW50aW1lL21hY3Jvcy9SRUFETUUudHh0IFwKKwkJcnVudGltZS9tYWNyb3MvZHZvcmFrIFwKKwkJcnVudGltZS9tYWNyb3MvZWRpdGV4aXN0aW5nLnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL2hhbm9pL2NsaWNrLm1lIFwKKwkJcnVudGltZS9tYWNyb3MvaGFub2kvaGFub2kudmltIFwKKwkJcnVudGltZS9tYWNyb3MvaGFub2kvcG9zdGVyIFwKKwkJcnVudGltZS9tYWNyb3MvanVzdGlmeS52aW0gXAorCQlydW50aW1lL21hY3Jvcy9sZXNzLnNoIFwKKwkJcnVudGltZS9tYWNyb3MvbGVzcy52aW0gXAorCQlydW50aW1lL21hY3Jvcy9saWZlL2NsaWNrLm1lIFwKKwkJcnVudGltZS9tYWNyb3MvbGlmZS9saWZlLnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL21hdGNoaXQudmltIFwKKwkJcnVudGltZS9tYWNyb3MvbWF0Y2hpdC50eHQgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL1JFQURNRS50eHQgXAorCQlydW50aW1lL21hY3Jvcy9tYXplL1ttTV1ha2VmaWxlIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9tYWluLmFhcCBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvbWF6ZS5jIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplXzUuNzggXAorCQlydW50aW1lL21hY3Jvcy9tYXplL21hemVfbWFjIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplYW5zaS5jIFwKKwkJcnVudGltZS9tYWNyb3MvbWF6ZS9tYXplY2xlYW4uYyBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvcG9zdGVyIFwKKwkJcnVudGltZS9tYWNyb3Mvc2hlbGxtZW51LnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL3N3YXBtb3VzLnZpbSBcCisJCXJ1bnRpbWUvbWFjcm9zL3VybS9SRUFETUUudHh0IFwKKwkJcnVudGltZS9tYWNyb3MvdXJtL2V4YW1wbGVzIFwKKwkJcnVudGltZS9tYWNyb3MvdXJtL3VybSBcCisJCXJ1bnRpbWUvbWFjcm9zL3VybS91cm0udmltIFwKKwkJcnVudGltZS9tc3dpbi52aW0gXAorCQlydW50aW1lL2V2aW0udmltIFwKKwkJcnVudGltZS9vcHR3aW4udmltIFwKKwkJcnVudGltZS9mdHBsdWdpbi52aW0gXAorCQlydW50aW1lL2Z0cGx1Z29mLnZpbSBcCisJCXJ1bnRpbWUvaW5kZW50LnZpbSBcCisJCXJ1bnRpbWUvaW5kb2ZmLnZpbSBcCisJCXJ1bnRpbWUvdGVybWNhcCBcCisJCXJ1bnRpbWUvdG9vbHMvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvdG9vbHMvW2Etel0qW2EtejAtOV0gXAorCQlydW50aW1lL3R1dG9yL1JFQURNRS50eHQgXAorCQlydW50aW1lL3R1dG9yL3R1dG9yIFwKKwkJcnVudGltZS90dXRvci90dXRvci52aW0gXAorCQlydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltIFwKKworIyBydW50aW1lIGZpbGVzIGZvciBhbGwgZGlzdHJpYnV0aW9ucyB3aXRob3V0IENSLU5MIHRyYW5zbGF0aW9uCitSVF9BTExfQklOID0JXAorCQlydW50aW1lL2RvYy90YWdzIFwKKwkJcnVudGltZS9wcmludC8qLnBzIFwKKworIyBydW50aW1lIHNjcmlwdCBmaWxlcworUlRfU0NSSVBUUyA9CVwKKwkJcnVudGltZS9maWxldHlwZS52aW0gXAorCQlydW50aW1lL3NjcmlwdHMudmltIFwKKwkJcnVudGltZS9tZW51LnZpbSBcCisJCXJ1bnRpbWUvbWFjbWFwLnZpbSBcCisJCXJ1bnRpbWUvZGVsbWVudS52aW0gXAorCQlydW50aW1lL3N5bm1lbnUudmltIFwKKwkJcnVudGltZS9tYWtlbWVudS52aW0gXAorCQlydW50aW1lL2F1dG9sb2FkLyoudmltIFwKKwkJcnVudGltZS9hdXRvbG9hZC9SRUFETUUudHh0IFwKKwkJcnVudGltZS9hdXRvbG9hZC94bWwvKi52aW0gXAorCQlydW50aW1lL2NvbG9ycy8qLnZpbSBcCisJCXJ1bnRpbWUvY29sb3JzL1JFQURNRS50eHQgXAorCQlydW50aW1lL2NvbXBpbGVyLyoudmltIFwKKwkJcnVudGltZS9jb21waWxlci9SRUFETUUudHh0IFwKKwkJcnVudGltZS9pbmRlbnQvKi52aW0gXAorCQlydW50aW1lL2luZGVudC9SRUFETUUudHh0IFwKKwkJcnVudGltZS9mdHBsdWdpbi8qLnZpbSBcCisJCXJ1bnRpbWUvZnRwbHVnaW4vUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvcGx1Z2luLyoudmltIFwKKwkJcnVudGltZS9wbHVnaW4vUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvc3ludGF4LyoudmltIFwKKwkJcnVudGltZS9zeW50YXgvUkVBRE1FLnR4dCBcCisKKyMgVW5peCBydW50aW1lCitSVF9VTklYID0JXAorCQlSRUFETUVfdW5peC50eHQgXAorCQlydW50aW1lL2hpMTYtYWN0aW9uLW1ha2UucG5nIFwKKwkJcnVudGltZS9oaTIyLWFjdGlvbi1tYWtlLnBuZyBcCisJCXJ1bnRpbWUvdmltMTZ4MTYucG5nIFwKKwkJcnVudGltZS92aW0xNngxNi54cG0gXAorCQlydW50aW1lL3ZpbTMyeDMyLnBuZyBcCisJCXJ1bnRpbWUvdmltMzJ4MzIueHBtIFwKKwkJcnVudGltZS92aW00OHg0OC5wbmcgXAorCQlydW50aW1lL3ZpbTQ4eDQ4LnhwbSBcCisKKyMgVW5peCBhbmQgRE9TIHJ1bnRpbWUgd2l0aG91dCBDUi1MRiB0cmFuc2xhdGlvbgorUlRfVU5JWF9ET1NfQklOID0JXAorCQlydW50aW1lL3ZpbTE2eDE2LmdpZiBcCisJCXJ1bnRpbWUvdmltMzJ4MzIuZ2lmIFwKKwkJcnVudGltZS92aW00OHg0OC5naWYgXAorCisjIHJ1bnRpbWUgbm90IGZvciB1bml4IG9yIGV4dHJhCitSVF9OT19VTklYID0JXAorCisjIHJ1bnRpbWUgZm9yIEFtaWdhIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorUlRfQU1JX0RPUyA9CVwKKwkJcnVudGltZS9kb2MvdmltLm1hbiBcCisJCXJ1bnRpbWUvZG9jL3ZpbWRpZmYubWFuIFwKKwkJcnVudGltZS9kb2MvdmltdHV0b3IubWFuIFwKKwkJcnVudGltZS9kb2MveHhkLm1hbiBcCisKKyMgRE9TIHJ1bnRpbWUgKGFsc28gaW4gdGhlIGV4dHJhIGFyY2hpdmUpCitSVF9ET1MgPQlcCisJCVJFQURNRV9kb3MudHh0IFwKKwkJcnVudGltZS9yZ2IudHh0IFwKKwkJdmltdHV0b3IuYmF0IFwKKworIyBET1MgcnVudGltZSB3aXRob3V0IENSLUxGIHRyYW5zbGF0aW9uIChhbHNvIGluIHRoZSBleHRyYSBhcmNoaXZlKQorUlRfRE9TX0JJTiA9CVwKKwkJcnVudGltZS92aW1sb2dvLmNkciBcCisJCXJ1bnRpbWUvdmltbG9nby5lcHMgXAorCQlydW50aW1lL3ZpbWxvZ28uZ2lmIFwKKwkJcnVudGltZS92aW1sb2dvLnBkZiBcCisKKyMgQW1pZ2EgcnVudGltZSAoYWxzbyBpbiB0aGUgZXh0cmEgYXJjaGl2ZSkKK1JUX0FNSSA9CVwKKwkJUkVBRE1FLnR4dC5pbmZvIFwKKwkJUkVBRE1FX2FtaS50eHQgXAorCQlSRUFETUVfYW1pLnR4dC5pbmZvIFwKKwkJbGlicy9hcnAubGlicmFyeSBcCisJCXJ1bnRpbWUvZG9jLmluZm8gXAorCQlydW50aW1lL2RvYy8qLmluZm8gXAorCQlydW50aW1lL2ljb25zL1JFQURNRS50eHQgXAorCQlydW50aW1lL2ljb25zLyouaW5mbyBcCisJCXJ1bnRpbWUvaWNvbnMuaW5mbyBcCisJCXJ1bnRpbWUvbWFjcm9zLmluZm8gXAorCQlydW50aW1lL21hY3Jvcy8qLmluZm8gXAorCQlydW50aW1lL21hY3Jvcy9oYW5vaS8qLmluZm8gXAorCQlydW50aW1lL21hY3Jvcy9saWZlLyouaW5mbyBcCisJCXJ1bnRpbWUvbWFjcm9zL21hemUvKi5pbmZvIFwKKwkJcnVudGltZS9tYWNyb3MvdXJtLyouaW5mbyBcCisJCXJ1bnRpbWUvdG9vbHMuaW5mbyBcCisJCXJ1bnRpbWUvdHV0b3IuaW5mbyBcCisJCXJ1bnRpbWUvdHV0b3IvKi5pbmZvIFwKKworIyBydW50aW1lIGZpbGVzIGluIGV4dHJhIGFyY2hpdmUKK1JUX0VYVFJBID0JXAorCQkkKFJUX0FNSSkgXAorCQkkKFJUX0FNSV9ET1MpIFwKKwkJJChSVF9ET1MpIFwKKwkJJChSVF9ET1NfQklOKSBcCisJCVJFQURNRV9tYWMudHh0IFwKKworIyBpbmNsdWRlZCBpbiBhbGwgQW1pZ2EgYXJjaGl2ZXMKK1JPT1RfQU1JID0JXAorCQlDb250ZW50cyBcCisJCUNvbnRlbnRzLmluZm8gXAorCQlydW50aW1lLmluZm8gXAorCQl2aW1kaXIuaW5mbyBcCisKKyMgcm9vdCBmaWxlcyBmb3IgdGhlIGV4dHJhIGFyY2hpdmUKK1JPT1RfRVhUUkEgPQlcCisJCSQoUk9PVF9BTUkpIFwKKworIyBmaWxlcyBmb3IgQW1pZ2Egc21hbGwgYmluYXJ5IChhbHNvIGluIGV4dHJhIGFyY2hpdmUpCitCSU5fQU1JID0JXAorCQlSRUFETUVfYW1pYmluLnR4dCBcCisJCVJFQURNRV9hbWliaW4udHh0LmluZm8gXAorCQlWaW0uaW5mbyBcCisJCVh4ZC5pbmZvIFwKKworIyBmaWxlcyBmb3IgRE9TIGJpbmFyeSAoYWxzbyBpbiBleHRyYSBhcmNoaXZlKQorQklOX0RPUyA9CVwKKwkJUkVBRE1FX2JpbmRvcy50eHQgXAorCQl1bmluc3RhbC50eHQgXAorCisjIGZpbGVzIGZvciBXaW4zMiBPTEUgYmluYXJ5IChhbHNvIGluIGV4dHJhIGFyY2hpdmUpCitCSU5fT0xFID0JXAorCQlSRUFETUVfb2xlLnR4dCBcCisKKyMgZmlsZXMgZm9yIFdpbjMycyBiaW5hcnkgKGFsc28gaW4gZXh0cmEgYXJjaGl2ZSkKK0JJTl9XMzJTID0JXAorCQlSRUFETUVfdzMycy50eHQgXAorCisjIGZpbGVzIGZvciBWTVMgYmluYXJ5IChhbHNvIGluIGV4dHJhIGFyY2hpdmUpCitCSU5fVk1TID0JXAorCQlSRUFETUVfdm1zLnR4dCBcCisKKyMgZmlsZXMgZm9yIE9TLzIgYmluYXJ5IChhbHNvIGluIGV4dHJhIGFyY2hpdmUpCitCSU5fT1MyID0JXAorCQlSRUFETUVfb3MyLnR4dCBcCisKKyMgYmluYXJ5IGZpbGVzIGZvciBleHRyYSBhcmNoaXZlCitCSU5fRVhUUkEgPQlcCisJCSQoQklOX0FNSSkgXAorCQkkKEJJTl9ET1MpIFwKKwkJJChCSU5fT0xFKSBcCisJCSQoQklOX1czMlMpIFwKKwkJJChCSU5fVk1TKSBcCisJCSQoQklOX09TMikgXAorCisjIGFsbCBmaWxlcyBmb3IgZXh0cmEgYXJjaGl2ZQorRVhUUkEgPQkJXAorCQkkKEJJTl9FWFRSQSkgXAorCQkkKFJPT1RfRVhUUkEpIFwKKwkJJChSVF9FWFRSQSkgXAorCQkkKFNSQ19FWFRSQSkgXAorCQlSRUFETUVfZXh0cmEudHh0IFwKKwkJc3JjL1Zpc1ZpbS9WaXNWaW0uZGxsIFwKKwkJZmFyc2kvUkVBRE1FLnR4dCBcCisJCWZhcnNpL2ZvbnRzLyovZmFyLSogXAorCQlydW50aW1lL3ZpbWxvZ28ueHBtIFwKKwkJc3JjL3N3aXMucyBcCisJCXNyYy90ZWUvTWFrZWZpbGUqIFwKKwkJc3JjL3RlZS90ZWUuYyBcCisJCWNzZHBtaTRiLnppcCBcCisKKyMgZ2VuZXJpYyBsYW5ndWFnZSBmaWxlcworTEFOR19HRU4gPSBcCisJCVJFQURNRV9sYW5nLnR4dCBcCisJCXJ1bnRpbWUvZG9jLyotZnIuMSBcCisJCXJ1bnRpbWUvZG9jLyotZnIuVVRGLTguMSBcCisJCXJ1bnRpbWUvZG9jLyotaXQuMSBcCisJCXJ1bnRpbWUvZG9jLyotaXQuVVRGLTguMSBcCisJCXJ1bnRpbWUvZG9jLyotcGwuMSBcCisJCXJ1bnRpbWUvZG9jLyotcGwuVVRGLTguMSBcCisJCXJ1bnRpbWUvZG9jLyotcnUuMSBcCisJCXJ1bnRpbWUvZG9jLyotcnUuVVRGLTguMSBcCisJCXJ1bnRpbWUvbGFuZy9SRUFETUUudHh0IFwKKwkJcnVudGltZS9sYW5nL21lbnVfKi52aW0gXAorCQlydW50aW1lL2tleW1hcC9SRUFETUUudHh0IFwKKwkJcnVudGltZS9rZXltYXAvKi52aW0gXAorCQlydW50aW1lL3R1dG9yL1JFQURNRS4qLnR4dCBcCisJCXJ1bnRpbWUvdHV0b3IvTWFrZWZpbGUgXAorCQlydW50aW1lL3R1dG9yL3R1dG9yLnV0Zi04IFwKKwkJcnVudGltZS90dXRvci90dXRvci4/PyBcCisJCXJ1bnRpbWUvdHV0b3IvdHV0b3IuPz8uKiBcCisJCXJ1bnRpbWUvc3BlbGwvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvc3BlbGwvPz8vKi5kaWZmIFwKKwkJcnVudGltZS9zcGVsbC8/Py9tYWluLmFhcCBcCisJCXJ1bnRpbWUvc3BlbGwveWkvUkVBRE1FLnR4dCBcCisJCXJ1bnRpbWUvc3BlbGwvbWFpbi5hYXAgXAorCQlydW50aW1lL3NwZWxsL2NsZWFuYWRkLnZpbSBcCisJCXJ1bnRpbWUvc3BlbGwvKi52aW0gXAorCQlydW50aW1lL3NwZWxsL2ZpeGR1cCBcCisKKyMgZ2VuZXJpYyBsYW5ndWFnZSBmaWxlcywgYmluYXJ5CitMQU5HX0dFTl9CSU4gPSBcCisJCXJ1bnRpbWUvc3BlbGwvUkVBRE1FX2VuLnR4dCBcCisJCXJ1bnRpbWUvc3BlbGwvZW4uYXNjaWkuc3BsIFwKKwkJcnVudGltZS9zcGVsbC9lbi5sYXRpbjEuc3BsIFwKKwkJcnVudGltZS9zcGVsbC9lbi51dGYtOC5zcGwgXAorCQlydW50aW1lL3NwZWxsL2VuLmFzY2lpLnN1ZyBcCisJCXJ1bnRpbWUvc3BlbGwvZW4ubGF0aW4xLnN1ZyBcCisJCXJ1bnRpbWUvc3BlbGwvZW4udXRmLTguc3VnIFwKKworIyBhbGwgZmlsZXMgZm9yIGxhbmcgYXJjaGl2ZQorTEFOR19TUkMgPSBcCisJCXNyYy9wby9SRUFETUUudHh0IFwKKwkJc3JjL3BvL1JFQURNRV9taW5ndy50eHQgXAorCQlzcmMvcG8vUkVBRE1FX212Yy50eHQgXAorCQlzcmMvcG8vY2hlY2sudmltIFwKKwkJc3JjL3BvL2NsZWFudXAudmltIFwKKwkJc3JjL3BvL01ha2VmaWxlIFwKKwkJc3JjL3BvL01ha2VfY3lnLm1hayBcCisJCXNyYy9wby9NYWtlX21pbmcubWFrIFwKKwkJc3JjL3BvL01ha2VfbXZjLm1hayBcCisJCXNyYy9wby9zamlzY29yci5jIFwKKwkJc3JjL3BvLyoucG8gXAorCisjIHRoZSBsYW5ndWFnZSBmaWxlcyBmb3IgdGhlIFdpbjMyIGxhbmcgYXJjaGl2ZQorTEFOR19ET1MgPSBcCisJCXNyYy9wby8qLm1vIFwKKworIyB2aW06IHNldCBmdD1tYWtlOgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9SRUFETUVfYmluZG9zLnR4dCBiL3J1bnRpbWUvdHV0b3IvUkVBRE1FX2JpbmRvcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzYTkyNQotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvUkVBRE1FX2JpbmRvcy50eHQKQEAgLTAsMCArMSwxOSBAQAorUkVBRE1FX2JpbmRvcy50eHQgZm9yIHZlcnNpb24gNy4yYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitTZWUgIlJFQURNRS50eHQiIGZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IFZpbS4KK1NlZSAiUkVBRE1FX2Rvcy50eHQiIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciBNUy1ET1MgYW5kIE1TLVdpbmRvd3MuCitUaGVzZSBmaWxlcyBhcmUgaW4gdGhlIHJ1bnRpbWUgYXJjaGl2ZSAodmltNzBydC56aXApLgorCisKK1RoZXJlIGFyZSBzZXZlcmFsIGJpbmFyeSBkaXN0cmlidXRpb25zIG9mIFZpbSBmb3IgdGhlIFBDLiAgWW91IHdvdWxkIG5vcm1hbGx5CitwaWNrIG9ubHkgb25lIG9mIHRoZW0sIGJ1dCBpdCdzIGFsc28gcG9zc2libGUgdG8gaW5zdGFsbCBzZXZlcmFsLgorVGhlc2Ugb25lcyBhcmUgYXZhaWxhYmxlICh0aGUgdmVyc2lvbiBudW1iZXIgbWF5IGRpZmZlcik6CisJdmltNzBkMTYuemlwCTE2IGJpdCBET1MgdmVyc2lvbgorCXZpbTcwZDMyLnppcAkzMiBiaXQgRE9TIHZlcnNpb24KKwl2aW03MHczMi56aXAJV2luZG93cyA5NS85OC9OVC9ldGMuIGNvbnNvbGUgdmVyc2lvbgorCWd2aW03MC56aXAJV2luZG93cyA5NS85OC9OVC9ldGMuIEdVSSB2ZXJzaW9uCisJZ3ZpbTcwb2xlLnppcAlXaW5kb3dzIDk1Lzk4L05UL2V0Yy4gR1VJIHZlcnNpb24gd2l0aCBPTEUKKwlndmltNzBfcy56aXAJV2luZG93cyAzLjEgR1VJIHZlcnNpb24KKworWW91IE1VU1QgYWxzbyBnZXQgdGhlIHJ1bnRpbWUgYXJjaGl2ZSAodmltNzBydC56aXApLgorVGhlIHNvdXJjZXMgYXJlIGFsc28gYXZhaWxhYmxlICh2aW03MHNyYy56aXApLgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9SRUFETUVfbGFuZy50eHQgYi9ydW50aW1lL3R1dG9yL1JFQURNRV9sYW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY5Zjc2Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci9SRUFETUVfbGFuZy50eHQKQEAgLTAsMCArMSw1IEBACitSRUFETUVfbGFuZy50eHQgZm9yIHZlcnNpb24gNy4yYSBvZiBWaW06IFZpIElNcHJvdmVkLgorCitUaGlzIGZpbGUgY29udGFpbnMgZmlsZXMgZm9yIG5vbi1FbmdsaXNoIGxhbmd1YWdlczoKKy0gVHJhbnNsYXRlZCBtZXNzYWdlcy4KKy0gVHJhbnNsYXRlZCBtZW51cy4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvUkVBRE1FX3NyY2Rvcy50eHQgYi9ydW50aW1lL3R1dG9yL1JFQURNRV9zcmNkb3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzgwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL1JFQURNRV9zcmNkb3MudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1JFQURNRV9zcmNkb3MudHh0IGZvciB2ZXJzaW9uIDcuMmEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworU2VlICJSRUFETUUudHh0IiBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBWaW0uCitTZWUgIlJFQURNRV9kb3MudHh0IiBmb3IgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBmb3IgTVMtRE9TIGFuZCBNUy1XaW5kb3dzLgorVGhlc2UgZmlsZXMgYXJlIGluIHRoZSBydW50aW1lIGFyY2hpdmUgKHZpbTcwcnQuemlwKS4KKworCitUaGUgRE9TIHNvdXJjZSBhcmNoaXZlIGNvbnRhaW5zIHRoZSBmaWxlcyBuZWVkZWQgdG8gY29tcGlsZSBWaW0gb24gTVMtRE9TIG9yCitNUy1XaW5kb3dzLiAgSXQgaXMgcGFja2VkIGZvciBET1Mgc3lzdGVtcywgd2l0aCBDUi1MRi4gIEl0IGFsc28gaW5jbHVkZXMgdGhlCitWaXNWaW0gc291cmNlcy4KKworU2VlICJzcmMvSU5TVEFMTHBjLnR4dCIgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29tcGlsZSBWaW0gb24gdGhlIFBDLgpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9SRUFETUVfdW5peC50eHQgYi9ydW50aW1lL3R1dG9yL1JFQURNRV91bml4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM4Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci9SRUFETUVfdW5peC50eHQKQEAgLTAsMCArMSwxMCBAQAorUkVBRE1FX3VuaXgudHh0IGZvciB2ZXJzaW9uIDcuMmEgb2YgVmltOiBWaSBJTXByb3ZlZC4KKworVGhpcyBmaWxlIGV4cGxhaW5zIHRoZSBpbnN0YWxsYXRpb24gb2YgVmltIG9uIFVuaXggc3lzdGVtcy4KK1NlZSAiUkVBRE1FLnR4dCIgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgVmltLgorCisKK1doZW4geW91IHVzZSB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiwgIm1ha2UgaW5zdGFsbCIgaXMgdXNlZCB0byBpbnN0YWxsIFZpbS4KK1NlZSB0aGUgIklOU1RBTEwiIGZpbGUgaW4gdGhlICJzcmMiIGRpcmVjdG9yeS4KKworSWYgeW91IHVzZSBhIGNvbXBpbGVkIHBhY2thZ2UsIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgcGFja2FnZS4KZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvcnVudGltZS9maWxldHlwZS52aW0gYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvZmlsZXR5cGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWYwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvZmlsZXR5cGUudmltCkBAIC0wLDAgKzEsMjQxMiBAQAorIiBWaW0gc3VwcG9ydCBmaWxlIHRvIGRldGVjdCBmaWxlIHR5cGVzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgQ2hhbmdlOgkyMDA4IEp1biAyMAorCisiIExpc3RlbiB2ZXJ5IGNhcmVmdWxseSwgSSB3aWxsIHNheSB0aGlzIG9ubHkgb25jZQoraWYgZXhpc3RzKCJkaWRfbG9hZF9maWxldHlwZXMiKQorICBmaW5pc2gKK2VuZGlmCitsZXQgZGlkX2xvYWRfZmlsZXR5cGVzID0gMQorCisiIExpbmUgY29udGludWF0aW9uIGlzIHVzZWQgaGVyZSwgcmVtb3ZlICdDJyBmcm9tICdjcG9wdGlvbnMnCitsZXQgczpjcG9fc2F2ZSA9ICZjcG8KK3NldCBjcG8mdmltCisKK2F1Z3JvdXAgZmlsZXR5cGVkZXRlY3QKKworIiBJZ25vcmVkIGV4dGVuc2lvbnMKK2lmIGV4aXN0cygiKmZuYW1lZXNjYXBlIikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCA/XCsub3JpZyw/XCsuYmFrLD9cKy5vbGQsP1wrLm5ldyw/XCsucnBtc2F2ZSw/XCsucnBtbmV3CisJXCBleGUgImRvYXUgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZCAiIC4gZm5hbWVlc2NhcGUoZXhwYW5kKCI8YWZpbGU+OnIiKSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqfgorCVwgbGV0IHM6bmFtZSA9IGV4cGFuZCgiPGFmaWxlPiIpIHwKKwlcIGxldCBzOnNob3J0ID0gc3Vic3RpdHV0ZShzOm5hbWUsICdcfiQnLCAnJywgJycpIHwKKwlcIGlmIHM6bmFtZSAhPSBzOnNob3J0ICYmIHM6c2hvcnQgIT0gIiIgfAorCVwgICBleGUgImRvYXUgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZCAiIC4gZm5hbWVlc2NhcGUoczpzaG9ydCkgfAorCVwgZW5kaWYgfAorCVwgdW5sZXQgczpuYW1lIHM6c2hvcnQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCA/XCsuaW4KKwlcIGlmIGV4cGFuZCgiPGFmaWxlPjp0IikgIT0gImNvbmZpZ3VyZS5pbiIgfAorCVwgICBleGUgImRvYXUgZmlsZXR5cGVkZXRlY3QgQnVmUmVhZCAiIC4gZm5hbWVlc2NhcGUoZXhwYW5kKCI8YWZpbGU+OnIiKSkgfAorCVwgZW5kaWYKK2Vsc2VpZiAmdmVyYm9zZSA+IDAKKyAgZWNob21zZyAiV2FybmluZzogc29tZSBmaWxldHlwZXMgd2lsbCBub3QgYmUgcmVjb2duaXplZCBiZWNhdXNlIHRoaXMgdmVyc2lvbiBvZiBWaW0gZG9lcyBub3QgaGF2ZSBmbmFtZWVzY2FwZSgpIgorZW5kaWYKKworIiBQYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggZmlsZSBuYW1lcyB3aGljaCBzaG91bGQgbm90IGJlIGluc3BlY3RlZC4KKyIgQ3VycmVudGx5IGZpbmRzIGNvbXByZXNzZWQgZmlsZXMuCitpZiAhZXhpc3RzKCJnOmZ0X2lnbm9yZV9wYXQiKQorICBsZXQgZzpmdF9pZ25vcmVfcGF0ID0gJ1wuXChaXHxnelx8YnoyXHx6aXBcfHRnelwpJCcKK2VuZGlmCisKKyIgRnVuY3Rpb24gdXNlZCBmb3IgcGF0dGVybnMgdGhhdCBlbmQgaW4gYSBzdGFyOiBkb24ndCBzZXQgdGhlIGZpbGV0eXBlIGlmIHRoZQorIiBmaWxlIG5hbWUgbWF0Y2hlcyBmdF9pZ25vcmVfcGF0LgorZnVuYyEgczpTdGFyU2V0ZihmdCkKKyAgaWYgZXhwYW5kKCI8YW1hdGNoPiIpICF+IGc6ZnRfaWdub3JlX3BhdAorICAgIGV4ZSAnc2V0ZiAnIC4gYTpmdAorICBlbmRpZgorZW5kZnVuYworCisiIEFiYXF1cyBvciBUcmFzeXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlucAkJCWNhbGwgczpDaGVja19pbnAoKQorCitmdW5jISBzOkNoZWNrX2lucCgpCisgIGlmIGdldGxpbmUoMSkgPX4gJ15cKicKKyAgICBzZXRmIGFiYXF1cworICBlbHNlCisgICAgbGV0IG4gPSAxCisgICAgaWYgbGluZSgiJCIpID4gNTAwCisgICAgICBsZXQgbm1heCA9IDUwMAorICAgIGVsc2UKKyAgICAgIGxldCBubWF4ID0gbGluZSgiJCIpCisgICAgZW5kaWYKKyAgICB3aGlsZSBuIDw9IG5tYXgKKyAgICAgIGlmIGdldGxpbmUobikgPX4/ICJeaGVhZGVyIHN1cmZhY2UgZGF0YSIKKwlzZXRmIHRyYXN5cworCWJyZWFrCisgICAgICBlbmRpZgorICAgICAgbGV0IG4gPSBuICsgMQorICAgIGVuZHdoaWxlCisgIGVuZGlmCitlbmRmdW5jCisKKyIgQS1BLVAgcmVjaXBlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hYXAJCQlzZXRmIGFhcAorCisiIEEycHMgcHJpbnRpbmcgdXRpbGl0eQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGV0Yy9hMnBzLmNmZyxldGMvYTJwcy8qLmNmZyxhMnBzcmMsLmEycHNyYyBzZXRmIGEycHMKKworIiBBQkFCLzQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFiYXAJCQlzZXRmIGFiYXAKKworIiBBQkMgbXVzaWMgbm90YXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFiYwkJCXNldGYgYWJjCisKKyIgQUJFTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYWJsCQkJc2V0ZiBhYmVsCisKKyIgQWNlREIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndybQkJCXNldGYgYWNlZGIKKworIiBBZGEgKDgzLCA5WCwgOTUpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hZGIsKi5hZHMsKi5hZGEJCXNldGYgYWRhCitpZiBoYXMoInZtcyIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdwciwqLmFkYV9tLCouYWRjIAlzZXRmIGFkYQorZWxzZQorICBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ncHIgCQkJc2V0ZiBhZGEKK2VuZGlmCisKKyIgQUhETAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGRmCQkJc2V0ZiBhaGRsCisKKyIgQU1QTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucnVuCQkJc2V0ZiBhbXBsCisKKyIgQW50CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgYnVpbGQueG1sCQkJc2V0ZiBhbnQKKworIiBBcGFjaGUgc3R5bGUgY29uZmlnIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBwcm9mdHBkLmNvbmYqCQljYWxsIHM6U3RhclNldGYoJ2FwYWNoZXN0eWxlJykKKworIiBBcGFjaGUgY29uZmlnIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuaHRhY2Nlc3MJCQkgc2V0ZiBhcGFjaGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBodHRwZC5jb25mKixzcm0uY29uZiosYWNjZXNzLmNvbmYqLGFwYWNoZS5jb25mKixhcGFjaGUyLmNvbmYqLC9ldGMvYXBhY2hlMi8qLmNvbmYqIGNhbGwgczpTdGFyU2V0ZignYXBhY2hlJykKKworIiBYQTY1IE1PUzY1MTAgY3Jvc3MgYXNzZW1ibGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hNjUJCQlzZXRmIGE2NQorCisiIEFwcGxpeCBFTEYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFtCisJXCBpZiBleHBhbmQoIjxhZmlsZT4iKSAhfj8gJ01ha2VmaWxlLmFtXD4nIHwgc2V0ZiBlbGYgfCBlbmRpZgorCisiIEFMU0EgY29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIH4vLmFzb3VuZHJjLC91c3Ivc2hhcmUvYWxzYS9hbHNhLmNvbmYsL2V0Yy9hc291bmQuY29uZglzZXRmIGFsc2Fjb25mCisKKyIgQXJjIE1hY3JvIExhbmd1YWdlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hbWwJCQlzZXRmIGFtbAorCisiIEFyY2ggSW52ZW50b3J5IGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuYXJjaC1pbnZlbnRvcnksPXRhZ2dpbmctbWV0aG9kCXNldGYgYXJjaAorCisiIEFSVCpFbnRlcnByaXNlIChmb3JtZXJseSBBUlQtSU0pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hcnQJCQlzZXRmIGFydAorCisiIEFTTi4xCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hc24sKi5hc24xCQlzZXRmIGFzbgorCisiIEFjdGl2ZSBTZXJ2ZXIgUGFnZXMgKHdpdGggVmlzdWFsIEJhc2ljIFNjcmlwdCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFzYQorCVwgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2FzYSIpIHwKKwlcICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX2FzYSB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBhc3B2YnMgfAorCVwgZW5kaWYKKworIiBBY3RpdmUgU2VydmVyIFBhZ2VzICh3aXRoIFBlcmwgb3IgVmlzdWFsIEJhc2ljIFNjcmlwdCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFzcAorCVwgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX2FzcCIpIHwKKwlcICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX2FzcCB8CisJXCBlbHNlaWYgZ2V0bGluZSgxKSAuIGdldGxpbmUoMikgLiBnZXRsaW5lKDMpID1+PyAicGVybHNjcmlwdCIgfAorCVwgICBzZXRmIGFzcHBlcmwgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgYXNwdmJzIHwKKwlcIGVuZGlmCisKKyIgR3J1YiAobXVzdCBiZSBiZWZvcmUgY2F0Y2ggKi5sc3QpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2Jvb3QvZ3J1Yi9tZW51LmxzdCwvYm9vdC9ncnViL2dydWIuY29uZiwvZXRjL2dydWIuY29uZglzZXRmIGdydWIKKworIiBBc3NlbWJseSAoYWxsIGtpbmRzKQorIiAqLmxzdCBpcyBub3QgcHVyZSBhc3NlbWJseSwgaXQgaGFzIHR3byBleHRyYSBjb2x1bW5zIChhZGRyZXNzLCBieXRlIGNvZGVzKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYXNtLCouW3NTXSwqLlthQV0sKi5tYWMsKi5sc3QJY2FsbCBzOkZUYXNtKCkKKworIiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIGtpbmQgb2YgYXNzZW1ibHkgdGhhdCBpcyB3YW50ZWQgYnkgdGhlIHVzZXIsIG9yCisiIGNhbiBiZSBkZXRlY3RlZCBmcm9tIHRoZSBmaXJzdCBmaXZlIGxpbmVzIG9mIHRoZSBmaWxlLgorZnVuYyEgczpGVGFzbSgpCisgICIgbWFrZSBzdXJlIGI6YXNtc3ludGF4IGV4aXN0cworICBpZiAhZXhpc3RzKCJiOmFzbXN5bnRheCIpCisgICAgbGV0IGI6YXNtc3ludGF4ID0gIiIKKyAgZW5kaWYKKworICBpZiBiOmFzbXN5bnRheCA9PSAiIgorICAgIGNhbGwgczpGVGFzbXN5bnRheCgpCisgIGVuZGlmCisKKyAgIiBpZiBiOmFzbXN5bnRheCBzdGlsbCBpc24ndCBzZXQsIGRlZmF1bHQgdG8gYXNtc3ludGF4IG9yIEdOVQorICBpZiBiOmFzbXN5bnRheCA9PSAiIgorICAgIGlmIGV4aXN0cygiZzphc21zeW50YXgiKQorICAgICAgbGV0IGI6YXNtc3ludGF4ID0gZzphc21zeW50YXgKKyAgICBlbHNlCisgICAgICBsZXQgYjphc21zeW50YXggPSAiYXNtIgorICAgIGVuZGlmCisgIGVuZGlmCisKKyAgZXhlICJzZXRmICIgLiBiOmFzbXN5bnRheAorZW5kZnVuYworCitmdW5jISBzOkZUYXNtc3ludGF4KCkKKyAgIiBzZWUgaWYgZmlsZSBjb250YWlucyBhbnkgYXNtc3ludGF4PWZvbyBvdmVycmlkZXMuIElmIHNvLCBjaGFuZ2UKKyAgIiBiOmFzbXN5bnRheCBhcHByb3ByaWF0ZWx5CisgIGxldCBoZWFkID0gIiAiLmdldGxpbmUoMSkuIiAiLmdldGxpbmUoMikuIiAiLmdldGxpbmUoMykuIiAiLmdldGxpbmUoNCkuCisJXCIgIi5nZXRsaW5lKDUpLiIgIgorICBpZiBoZWFkID1+ICdcc2FzbXN5bnRheD1cU1wrXHMnCisgICAgbGV0IGI6YXNtc3ludGF4ID0gc3Vic3RpdHV0ZShoZWFkLCAnLipcc2FzbXN5bnRheD1cKFthLXpBLVowLTldXCtcKVxzLionLCdcMScsICIiKQorICBlbHNlaWYgKChoZWFkID1+PyAnXC50aXRsZScpIHx8IChoZWFkID1+PyAnXC5pZGVudCcpIHx8IChoZWFkID1+PyAnXC5tYWNybycpIHx8IChoZWFkID1+PyAnXC5zdWJ0aXRsZScpIHx8IChoZWFkID1+PyAnXC5saWJyYXJ5JykpCisgICAgbGV0IGI6YXNtc3ludGF4ID0gInZtYXNtIgorICBlbmRpZgorZW5kZnVuYworCisiIE1hY3JvIChWQVgpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tYXIJCQlzZXRmIHZtYXNtCisKKyIgQXRsYXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmF0bCwqLmFzCQlzZXRmIGF0bGFzCisKKyIgQXV0b2l0IHYzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hdTMJCQlzZXRmIGF1dG9pdAorCisiIEF1dG9ob3RrZXkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFoawkJCXNldGYgYXV0b2hvdGtleQorCisiIEF1dG9tYWtlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW21NXWFrZWZpbGUuYW0sR05VbWFrZWZpbGUuYW0Jc2V0ZiBhdXRvbWFrZQorCisiIEF1dG90ZXN0IC5hdCBmaWxlcyBhcmUgYWN0dWFsbHkgbTQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmF0CQkJc2V0ZiBtNAorCisiIEF2ZW51ZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYXZlCQkJc2V0ZiBhdmUKKworIiBBd2sKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmF3awkJCXNldGYgYXdrCisKKyIgQgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWNoLCoucmVmLCouaW1wCQlzZXRmIGIKKworIiBCQVNJQyBvciBWaXN1YWwgQmFzaWMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJhcwkJCWNhbGwgczpGVFZCKCJiYXNpYyIpCisKKyIgQ2hlY2sgaWYgb25lIG9mIHRoZSBmaXJzdCBmaXZlIGxpbmVzIGNvbnRhaW5zICJWQl9OYW1lIi4gIEluIHRoYXQgY2FzZSBpdCBpcworIiBwcm9iYWJseSBhIFZpc3VhbCBCYXNpYyBmaWxlLiAgT3RoZXJ3aXNlIGl0J3MgYXNzdW1lZCB0byBiZSAiYWx0IiBmaWxldHlwZS4KK2Z1bmMhIHM6RlRWQihhbHQpCisgIGlmIGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpLmdldGxpbmUoNCkuZ2V0bGluZSg1KSA9fj8gJ1ZCX05hbWVcfEJlZ2luIFZCXC5cKEZvcm1cfE1ESUZvcm1cfFVzZXJDb250cm9sXCknCisgICAgc2V0ZiB2YgorICBlbHNlCisgICAgZXhlICJzZXRmICIgLiBhOmFsdAorICBlbmRpZgorZW5kZnVuYworCisiIFZpc3VhbCBCYXNpYyBTY3JpcHQgKGNsb3NlIHRvIFZpc3VhbCBCYXNpYykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnZicywqLmRzbSwqLmN0bAkJc2V0ZiB2YgorCisiIElCYXNpYyBmaWxlIChzaW1pbGFyIHRvIFFCYXNpYykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmliYSwqLmliaQkJc2V0ZiBpYmFzaWMKKworIiBGcmVlQmFzaWMgZmlsZSAoc2ltaWxhciB0byBRQmFzaWMpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5mYiwqLmJpCQkJc2V0ZiBmcmVlYmFzaWMKKworIiBCYXRjaCBmaWxlIGZvciBNU0RPUy4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJhdCwqLnN5cwkJc2V0ZiBkb3NiYXRjaAorIiAqLmNtZCBpcyBjbG9zZSB0byBhIEJhdGNoIGZpbGUsIGJ1dCBvbiBPUy8yIFJleHggZmlsZXMgYWxzbyB1c2UgKi5jbWQuCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jbWQKKwlcIGlmIGdldGxpbmUoMSkgPX4gJ14vXConIHwgc2V0ZiByZXh4IHwgZWxzZSB8IHNldGYgZG9zYmF0Y2ggfCBlbmRpZgorCisiIEJhdGNoIGZpbGUgZm9yIDRET1MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJ0bQkJCWNhbGwgczpGVGJ0bSgpCitmdW5jISBzOkZUYnRtKCkKKyAgaWYgZXhpc3RzKCJnOmRvc2JhdGNoX3N5bnRheF9mb3JfYnRtIikgJiYgZzpkb3NiYXRjaF9zeW50YXhfZm9yX2J0bQorICAgIHNldGYgZG9zYmF0Y2gKKyAgZWxzZQorICAgIHNldGYgYnRtCisgIGVuZGlmCitlbmRmdW5jCisKKyIgQkMgY2FsY3VsYXRvcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYmMJCQlzZXRmIGJjCisKKyIgQkRGIGZvbnQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJkZgkJCXNldGYgYmRmCisKKyIgQmliVGVYIGJpYmxpb2dyYXBoeSBkYXRhYmFzZSBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5iaWIJCQlzZXRmIGJpYgorCisiIEJpYlRlWCBCaWJsaW9ncmFwaHkgU3R5bGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJzdAkJCXNldGYgYnN0CisKKyIgQklORCBjb25maWd1cmF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbmFtZWQuY29uZixybmRjLmNvbmYJc2V0ZiBuYW1lZAorCisiIEJJTkQgem9uZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIG5hbWVkLnJvb3QJCXNldGYgYmluZHpvbmUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRiCQkJY2FsbCBzOkJpbmR6b25lQ2hlY2soJycpCisKK2Z1bmMhIHM6QmluZHpvbmVDaGVjayhkZWZhdWx0KQorICBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpID1+ICdeOyA8PD4+IERpRyBbMC05Ll1cKyA8PD4+XHxCSU5ELipuYW1lZFx8JE9SSUdJTlx8JFRUTFx8SU5cc1wrU09BJworICAgIHNldGYgYmluZHpvbmUKKyAgZWxzZWlmIGE6ZGVmYXVsdCAhPSAnJworICAgIGV4ZSAnc2V0ZiAnIC4gYTpkZWZhdWx0CisgIGVuZGlmCitlbmRmdW5jCisKKyIgQmxhbmsKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJsCQkJc2V0ZiBibGFuaworCisiIEMgb3IgbHBjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jCQkJY2FsbCBzOkZUbHBjKCkKKworZnVuYyEgczpGVGxwYygpCisgIGlmIGV4aXN0cygiZzpscGNfc3ludGF4X2Zvcl9jIikKKyAgICBsZXQgbG51bSA9IDEKKyAgICB3aGlsZSBsbnVtIDw9IDEyCisgICAgICBpZiBnZXRsaW5lKGxudW0pID1+IyAnXlwoLy9cfGluaGVyaXRcfHByaXZhdGVcfHByb3RlY3RlZFx8bm9zYXZlXHxzdHJpbmdcfG9iamVjdFx8bWFwcGluZ1x8bWl4ZWRcKScKKwlzZXRmIGxwYworCXJldHVybgorICAgICAgZW5kaWYKKyAgICAgIGxldCBsbnVtID0gbG51bSArIDEKKyAgICBlbmR3aGlsZQorICBlbmRpZgorICBzZXRmIGMKK2VuZGZ1bmMKKworIiBDYWxlbmRhcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGNhbGVuZGFyCQkJc2V0ZiBjYWxlbmRhcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovLmNhbGVuZGFyLyosCisJXCovc2hhcmUvY2FsZW5kYXIvKi9jYWxlbmRhci4qLCovc2hhcmUvY2FsZW5kYXIvY2FsZW5kYXIuKgorCVwJCQkJCWNhbGwgczpTdGFyU2V0ZignY2FsZW5kYXInKQorCisiIEMjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jcwkJCXNldGYgY3MKKworIiBDZHJkYW8gVE9DCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50b2MJCQlzZXRmIGNkcnRvYworCisiIENkcmRhbyBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBldGMvY2RyZGFvLmNvbmYsZXRjL2RlZmF1bHRzL2NkcmRhbyxldGMvZGVmYXVsdC9jZHJkYW8sfi8uY2RyZGFvCQkJCQkJc2V0ZiBjZHJkYW9jb25mCisKKyIgQ2ZlbmdpbmUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjZmVuZ2luZS5jb25mCQlzZXRmIGNmZW5naW5lCisKKyIgQ29tc2hhcmUgRGltZW5zaW9uIERlZmluaXRpb24gTGFuZ3VhZ2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNkbAkJCXNldGYgY2RsCisKKyIgQ29uYXJ5IFJlY2lwZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmVjaXBlCQkJc2V0ZiBjb25hcnlyZWNpcGUKKworIiBDb250cm9sbGFibGUgUmVnZXggTXV0aWxhdG9yCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jcm0JCQlzZXRmIGNybQorCisiIEN5bisrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jeW4JCQlzZXRmIGN5bnBwCisKKyIgQ3lubGliCisiIC5jYyBhbmQgLmNwcCBmaWxlcyBjYW4gYmUgQysrIG9yIEN5bmxpYi4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNjCisJXCBpZiBleGlzdHMoImN5bmxpYl9zeW50YXhfZm9yX2NjIil8c2V0ZiBjeW5saWJ8ZWxzZXxzZXRmIGNwcHxlbmRpZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3BwCisJXCBpZiBleGlzdHMoImN5bmxpYl9zeW50YXhfZm9yX2NwcCIpfHNldGYgY3lubGlifGVsc2V8c2V0ZiBjcHB8ZW5kaWYKKworIiBDKysKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmN4eCwqLmMrKywqLkMsKi5ILCouaGgsKi5oeHgsKi5ocHAsKi5tb2MsKi50Y2MsKi5pbmwgc2V0ZiBjcHAKK2Vsc2UKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY3h4LCouYysrLCouaGgsKi5oeHgsKi5ocHAsKi5tb2MsKi50Y2MsKi5pbmwgc2V0ZiBjcHAKK2VuZGlmCisKKyIgLmggZmlsZXMgY2FuIGJlIEMsIENoIEMrKywgT2JqQyBvciBPYmpDKysuCisiIFNldCBjX3N5bnRheF9mb3JfaCBpZiB5b3Ugd2FudCBDLCBjaF9zeW50YXhfZm9yX2ggaWYgeW91IHdhbnQgQ2guIE9iakMgaXMKKyIgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmgJCQljYWxsIHM6RlRoZWFkZXIoKQorCitmdW5jISBzOkZUaGVhZGVyKCkKKyAgaWYgbWF0Y2goZ2V0bGluZSgxLCBtaW4oW2xpbmUoIiQiKSwgMjAwXSkpLCAnXkBcKGludGVyZmFjZVx8ZW5kXHxjbGFzc1wpJykgPiAtMQorICAgIHNldGYgb2JqYworICBlbHNlaWYgZXhpc3RzKCJjX3N5bnRheF9mb3JfaCIpCisgICAgc2V0ZiBjCisgIGVsc2VpZiBleGlzdHMoImNoX3N5bnRheF9mb3JfaCIpCisgICAgc2V0ZiBjaAorICBlbHNlCisgICAgc2V0ZiBjcHAKKyAgZW5kaWYKK2VuZGZ1bmMKKworIiBDaCAoQ0hzY3JpcHQpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jaGYJCQlzZXRmIGNoCisKKyIgVExIIGZpbGVzIGFyZSBDKysgaGVhZGVycyBnZW5lcmF0ZWQgYnkgVmlzdWFsIEMrKydzICNpbXBvcnQgZnJvbSB0eXBlbGlicworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGxoCQkJc2V0ZiBjcHAKKworIiBDYXNjYWRpbmcgU3R5bGUgU2hlZXRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jc3MJCQlzZXRmIGNzcworCisiIENlbnR1cnkgVGVybSBDb21tYW5kIFNjcmlwdHMgKCouY21kIHRvbykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNvbgkJCXNldGYgY3Rlcm0KKworIiBDaGFuZ2Vsb2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjaGFuZ2Vsb2cuRGViaWFuLGNoYW5nZWxvZy5kY2gsTkVXUy5EZWJpYW4sTkVXUy5kY2gKKwkJCQkJXAlzZXRmIGRlYmNoYW5nZWxvZworCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW2NDXWhhbmdlW2xMXW9nCisJXCAgaWYgZ2V0bGluZSgxKSA9fiAnOyB1cmdlbmN5PScKKwlcfCAgIHNldGYgZGViY2hhbmdlbG9nCisJXHwgZWxzZQorCVx8ICAgc2V0ZiBjaGFuZ2Vsb2cKKwlcfCBlbmRpZgorCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgTkVXUworCVwgIGlmIGdldGxpbmUoMSkgPX4gJzsgdXJnZW5jeT0nCisJXHwgICBzZXRmIGRlYmNoYW5nZWxvZworCVx8IGVuZGlmCisKKyIgQ0hJTEwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLi5jaAkJCXNldGYgY2hpbGwKKworIiBDaGFuZ2VzIGZvciBXRUIgYW5kIENXRUIgb3IgQ0hJTEwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNoCQkJY2FsbCBzOkZUY2hhbmdlKCkKKworIiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBvbmUgb2YgdGhlIGZpcnN0IHRlbiBsaW5lcyBzdGFydCB3aXRoIGEgJ0AnLiAgSW4KKyIgdGhhdCBjYXNlIGl0IGlzIHByb2JhYmx5IGEgY2hhbmdlIGZpbGUuCisiIElmIHRoZSBmaXJzdCBsaW5lIHN0YXJ0cyB3aXRoICMgb3IgISBpdCdzIHByb2JhYmx5IGEgY2ggZmlsZS4KKyIgSWYgYSBsaW5lIGhhcyAibWFpbiIsICJpbmNsdWRlIiwgIi8vIiBpciAiLyoiIGl0J3MgcHJvYmFibHkgY2guCisiIE90aGVyd2lzZSBDSElMTCBpcyBhc3N1bWVkLgorZnVuYyEgczpGVGNoYW5nZSgpCisgIGxldCBsbnVtID0gMQorICB3aGlsZSBsbnVtIDw9IDEwCisgICAgaWYgZ2V0bGluZShsbnVtKVswXSA9PSAnQCcKKyAgICAgIHNldGYgY2hhbmdlCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGxudW0gPT0gMSAmJiAoZ2V0bGluZSgxKVswXSA9PSAnIycgfHwgZ2V0bGluZSgxKVswXSA9PSAnIScpCisgICAgICBzZXRmIGNoCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGdldGxpbmUobG51bSkgPX4gIk1PRFVMRSIKKyAgICAgIHNldGYgY2hpbGwKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgaWYgZ2V0bGluZShsbnVtKSA9fiAnbWFpblxzKihcfCNccyppbmNsdWRlXHwvLycKKyAgICAgIHNldGYgY2gKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICBlbmR3aGlsZQorICBzZXRmIGNoaWxsCitlbmRmdW5jCisKKyIgQ2hvcmRQcm8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNob3BybywqLmNyZCwqLmNobywqLmNyZHBybywqLmNob3JkcHJvCXNldGYgY2hvcmRwcm8KKworIiBDbGVhbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGNsLCouaWNsCQlzZXRmIGNsZWFuCisKKyIgQ2xldmVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5lbmkJCQlzZXRmIGNsCisKKyIgQ2xldmVyIG9yIGR0ZAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZW50CQkJY2FsbCBzOkZUZW50KCkKKworZnVuYyEgczpGVGVudCgpCisgICIgVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHZhbGlkIGNsIHN5bnRheCBpbiB0aGUgZmlyc3QgZml2ZSBsaW5lcy4KKyAgIiBMb29rIGZvciBlaXRoZXIgYW4gb3BlbmluZyBjb21tZW50LCAnIycsIG9yIGEgYmxvY2sgc3RhcnQsICd7Ii4KKyAgIiBJZiBub3QgZm91bmQsIGFzc3VtZSBTR01MLgorICBsZXQgbG51bSA9IDEKKyAgd2hpbGUgbG51bSA8IDYKKyAgICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgICBpZiBsaW5lID1+ICdeXHMqWyN7XScKKyAgICAgIHNldGYgY2wKKyAgICAgIHJldHVybgorICAgIGVsc2VpZiBsaW5lICF+ICdeXHMqJCcKKyAgICAgICIgTm90IGEgYmxhbmsgbGluZSwgbm90IGEgY29tbWVudCwgYW5kIG5vdCBhIGJsb2NrIHN0YXJ0LAorICAgICAgIiBzbyBkb2Vzbid0IGxvb2sgbGlrZSB2YWxpZCBjbCBjb2RlLgorICAgICAgYnJlYWsKKyAgICBlbmRpZgorICAgIGxldCBsbnVtID0gbG51bSArIDEKKyAgZW5kdworICBzZXRmIGR0ZAorZW5kZnVuYworCisiIENsaXBwZXIgKG9yIEZveFBybzsgY291bGQgYWxzbyBiZSBldmlld3MpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wcmcKKwlcIGlmIGV4aXN0cygiZzpmaWxldHlwZV9wcmciKSB8CisJXCAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9wcmcgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgY2xpcHBlciB8CisJXCBlbmRpZgorCisiIENtYWtlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgQ01ha2VMaXN0cy50eHQsKi5jbWFrZSwqLmNtYWtlLmluCQlzZXRmIGNtYWtlCisKKyIgQ211c3JjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgfi8uY211cy97YXV0b3NhdmUscmMsY29tbWFuZC1oaXN0b3J5LCoudGhlbWV9IHNldGYgY211c3JjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9jbXVzL3tyYywqLnRoZW1lfQkJCXNldGYgY211c3JjCisKKyIgQ29ib2wKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNibCwqLmNvYiwqLmxpYglzZXRmIGNvYm9sCisiICAgY29ib2wgb3Igem9wZSBmb3JtIGNvbnRyb2xsZXIgcHl0aG9uIHNjcmlwdD8gKGhldXJpc3RpYykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmNweQorCVwgaWYgZ2V0bGluZSgxKSA9fiAnXiMjJyB8CisJXCAgIHNldGYgcHl0aG9uIHwKKwlcIGVsc2UgfAorCVwgICBzZXRmIGNvYm9sIHwKKwlcIGVuZGlmCisKKyIgQ29jby9SCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hdGcJCQlzZXRmIGNvY28KKworIiBDb2xkIEZ1c2lvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY2ZtLCouY2ZpLCouY2ZjCQlzZXRmIGNmCisKKyIgQ29uZmlndXJlIHNjcmlwdHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBjb25maWd1cmUuaW4sY29uZmlndXJlLmFjIHNldGYgY29uZmlnCisKKyIgQ1VEQSAgQ3VtcHV0ZSBVbmlmaWVkIERldmljZSBBcmNoaXRlY3R1cmUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmN1CQkJc2V0ZiBjdWRhCisKKyIgV2lsZFBhY2tldHMgRXRoZXJQZWVrIERlY29kZXIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRjZAkJCXNldGYgZGNkCisKKyIgRW5saWdodGVubWVudCBjb25maWd1cmF0aW9uIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmVubGlnaHRlbm1lbnQvKi5jZmcJc2V0ZiBjCisKKyIgRXRlcm0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqRXRlcm0vKi5jZmcJCXNldGYgZXRlcm0KKworIiBMeW54IGNvbmZpZyBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGx5bnguY2ZnCQkJc2V0ZiBseW54CisKKyIgUXVha2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqYmFzZXFbMi0zXS8qLmNmZywqaWQxLyouY2ZnCXNldGYgcXVha2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqcXVha2VbMS0zXS8qLmNmZwkJCXNldGYgcXVha2UKKworIiBRdWFrZSBDCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5xYwkJCXNldGYgYworCisiIENvbmZpZ3VyZSBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY2ZnCQkJc2V0ZiBjZmcKKworIiBDb21tdW5pY2F0aW5nIFNlcXVlbnRpYWwgUHJvY2Vzc2VzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jc3AsKi5mZHIJCXNldGYgY3NwCisKKyIgQ1VQTCBsb2dpYyBkZXNjcmlwdGlvbiBhbmQgc2ltdWxhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGxkCQkJc2V0ZiBjdXBsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zaQkJCXNldGYgY3VwbHNpbQorCisiIERlYmlhbiBDb250cm9sCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9kZWJpYW4vY29udHJvbAkJc2V0ZiBkZWJjb250cm9sCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgY29udHJvbAorCVwgIGlmIGdldGxpbmUoMSkgPX4gJ15Tb3VyY2U6JworCVx8ICAgc2V0ZiBkZWJjb250cm9sCisJXHwgZW5kaWYKKworIiBEZWJpYW4gU291cmNlcy5saXN0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9hcHQvc291cmNlcy5saXN0CXNldGYgZGVic291cmNlcworCisiIERlbnkgaG9zdHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBkZW55aG9zdHMuY29uZgkJc2V0ZiBkZW55aG9zdHMKKworIiBST0NLTGludXggcGFja2FnZSBkZXNjcmlwdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGVzYwkJCXNldGYgZGVzYworCisiIHRoZSBEIGxhbmd1YWdlIG9yIGR0cmFjZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZAkJCWNhbGwgczpEdHJhY2VDaGVjaygpCisKK2Z1bmMhIHM6RHRyYWNlQ2hlY2soKQorICBsZXQgbGluZXMgPSBnZXRsaW5lKDEsIG1pbihbbGluZSgiJCIpLCAxMDBdKSkKKyAgaWYgbWF0Y2gobGluZXMsICdeIyFcU1wrZHRyYWNlXHwjcHJhZ21hXHNcK0Rcc1wrb3B0aW9uXHw6XFNcey19OlxTXHstfTonKSA+IC0xCisgICAgc2V0ZiBkdHJhY2UKKyAgZWxzZQorICAgIHNldGYgZAorICBlbmRpZgorZW5kZnVuYworCisiIERlc2t0b3AgZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRlc2t0b3AsLmRpcmVjdG9yeQlzZXRmIGRlc2t0b3AKKworIiBEaWN0IGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGRpY3QuY29uZiwuZGljdHJjCQlzZXRmIGRpY3Rjb25mCisKKyIgRGljdGQgY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgZGljdGQuY29uZgkJc2V0ZiBkaWN0ZGNvbmYKKworIiBEaWZmIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kaWZmLCoucmVqLCoucGF0Y2gJc2V0ZiBkaWZmCisKKyIgRGlyY29sb3JzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmRpcl9jb2xvcnMsL2V0Yy9ESVJfQ09MT1JTCXNldGYgZGlyY29sb3JzCisKKyIgRGl2YSAod2l0aCBTa2lsbCkgb3IgSW5zdGFsbFNoaWVsZAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucnVsCisJXCBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpLmdldGxpbmUoNSkuZ2V0bGluZSg2KSA9fj8gJ0luc3RhbGxTaGllbGQnIHwKKwlcICAgc2V0ZiBpc2hkIHwKKwlcIGVsc2UgfAorCVwgICBzZXRmIGRpdmEgfAorCVwgZW5kaWYKKworIiBEQ0wgKERpZ2l0YWwgQ29tbWFuZCBMYW5ndWFnZSAtIHZtcykgb3IgRE5TIHpvbmUgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY29tCQkJY2FsbCBzOkJpbmR6b25lQ2hlY2soJ2RjbCcpCisKKyIgRE9UCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kb3QJCQlzZXRmIGRvdAorCisiIER5bGFuIC0gbGlkIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5saWQJCQlzZXRmIGR5bGFubGlkCisKKyIgRHlsYW4gLSBpbnRyIGZpbGVzIChtZWxhbmdlKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaW50cgkJCXNldGYgZHlsYW5pbnRyCisKKyIgRHlsYW4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmR5bGFuCQkJc2V0ZiBkeWxhbgorCisiIE1pY3Jvc29mdCBNb2R1bGUgRGVmaW5pdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZGVmCQkJc2V0ZiBkZWYKKworIiBEcmFjdWxhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kcmFjLCouZHJjLCpsdnMsKmxwZQlzZXRmIGRyYWN1bGEKKworIiBkc2wKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRzbAkJCXNldGYgZHNsCisKKyIgRFREIChEb2N1bWVudCBUeXBlIERlZmluaXRpb24gZm9yIFhNTCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmR0ZAkJCXNldGYgZHRkCisKKyIgRURJRiAoKi5lZGYsKi5lZGlmLCouZWRuLCouZWRvKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZWRcKGZcfGlmXHxuXHxvXCkJc2V0ZiBlZGlmCisKKyIgRW1iZWRpeCBDb21wb25lbnQgRGVzY3JpcHRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmVjZAkJCXNldGYgZWNkCisKKyIgRWlmZmVsIG9yIFNwZWNtYW4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmUsKi5FCQkJY2FsbCBzOkZUZSgpCisKKyIgRWxpbmtzIGNvbmZpZ3VyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9lbGlua3MuY29uZiwqLy5lbGlua3MvZWxpbmtzLmNvbmYJc2V0ZiBlbGlua3MKKworZnVuYyEgczpGVGUoKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwMCAmJiBuIDwgbGluZSgiJCIpCisgICAgaWYgZ2V0bGluZShuKSA9fiAiXlxccypcXCg8J1xcfCc+XFwpXFxzKiQiCisgICAgICBzZXRmIHNwZWNtYW4KKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBzZXRmIGVpZmZlbAorZW5kZnVuYworCisiIEVSaWNzc29uIExBTkd1YWdlOyBZYXdzIGlzIGVybGFuZyB0b28KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmVybCwqLnlhd3MJCXNldGYgZXJsYW5nCisKKyIgRWxtIEZpbHRlciBSdWxlcyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgZmlsdGVyLXJ1bGVzCQlzZXRmIGVsbWZpbHQKKworIiBFU01UUCByYyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmVzbXRwcmMJCQlzZXRmIGVzbXRwcmMKKworIiBFU1FMLUMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmVjLCouRUMJCQlzZXRmIGVzcWxjCisKKyIgRXN0ZXJlbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3RybAkJCXNldGYgZXN0ZXJlbAorCisiIEVzc2Jhc2Ugc2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jc2MJCQlzZXRmIGNzYworCisiIEV4aW0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBleGltLmNvbmYJCQlzZXRmIGV4aW0KKworIiBFeHBlY3QKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmV4cAkJCXNldGYgZXhwZWN0CisKKyIgRXhwb3J0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGV4cG9ydHMJCQlzZXRmIGV4cG9ydHMKKworIiBGYWN0b3IKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmZhY3RvcgkJCXNldGYgZmFjdG9yCisKKyIgRmV0Y2htYWlsIFJDIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuZmV0Y2htYWlscmMJCXNldGYgZmV0Y2htYWlsCisKKyIgRmxleFdpa2kKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndpa2kJCQlzZXRmIGZsZXh3aWtpCisKKyIgRm9jdXMgRXhlY3V0YWJsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZmV4LCouZm9jZXhlYwkJc2V0ZiBmb2NleGVjCisKKyIgRm9jdXMgTWFzdGVyIGZpbGUgKGJ1dCBub3QgZm9yIGF1dG8ubWFzdGVyKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGF1dG8ubWFzdGVyCQlzZXRmIGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1hcywqLm1hc3RlcgkJc2V0ZiBtYXN0ZXIKKworIiBGb3J0aAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZnMsKi5mdAkJCXNldGYgZm9ydGgKKworIiBSZXZhIEZvcnRoCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5mcnQJCQlzZXRmIHJldmEKKworIiBGb3J0cmFuCitpZiBoYXMoImZuYW1lX2Nhc2UiKQorICBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5GLCouRk9SLCouRlBQLCouRlROLCouRjc3LCouRjkwLCouRjk1CSBzZXRmIGZvcnRyYW4KK2VuZGlmCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgICAqLmYsKi5mb3IsKi5mb3J0cmFuLCouZnBwLCouZnRuLCouZjc3LCouZjkwLCouZjk1ICBzZXRmIGZvcnRyYW4KKworIiBGU3RhYgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGZzdGFiLG10YWIJCXNldGYgZnN0YWIKKworIiBHREIgY29tbWFuZCBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5nZGJpbml0CQkJc2V0ZiBnZGIKKworIiBHRE1PCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tbywqLmdkbW8JCXNldGYgZ2RtbworCisiIEdlZGNvbQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ2VkCQkJc2V0ZiBnZWRjb20KKworIiBHaXQKK2F1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkICouZ2l0L0NPTU1JVF9FRElUTVNHICAgIHNldGYgZ2l0Y29tbWl0CithdXRvY21kIEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdpdC9jb25maWcsLmdpdGNvbmZpZyBzZXRmIGdpdGNvbmZpZworYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWQgZ2l0LXJlYmFzZS10b2RvICAgICAgICAgc2V0ZiBnaXRyZWJhc2UKK2F1dG9jbWQgQnVmTmV3RmlsZSxCdWZSZWFkIC5tc2cuWzAtOV0qCisgICAgICBcIGlmIGdldGxpbmUoMSkgPX4gJ15Gcm9tLiojIFRoaXMgbGluZSBpcyBpZ25vcmVkLiQnIHwKKyAgICAgIFwgICBzZXRmIGdpdHNlbmRlbWFpbCB8CisgICAgICBcIGVuZGlmCithdXRvY21kIEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdpdC8qKgorICAgICAgXCBpZiBnZXRsaW5lKDEpID1+ICdeXHhcezQwXH1cPlx8XnJlZjogJyB8CisgICAgICBcICAgc2V0ZiBnaXQgfAorICAgICAgXCBlbmRpZgorCisiIEdrcmVsbG1yYworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGdrcmVsbG1yYyxna3JlbGxtcmNfPwlzZXRmIGdrcmVsbG1yYworCisiIEdQIHNjcmlwdHMgKDIuMCBhbmQgb253YXJkKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ3AsLmdwcmMJCXNldGYgZ3AKKworIiBHUEcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLy5nbnVwZy9vcHRpb25zCQlzZXRmIGdwZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICovLmdudXBnL2dwZy5jb25mCQlzZXRmIGdwZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC91c3IvKiovZ251cGcvb3B0aW9ucy5za2VsIHNldGYgZ3BnCisKKyIgR251cGxvdCBzY3JpcHRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ncGkJCQlzZXRmIGdudXBsb3QKKworIiBHckFEUyBzY3JpcHRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ncwkJCXNldGYgZ3JhZHMKKworIiBHcmV0bAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZ3JldGwJCQlzZXRmIGdyZXRsCisKKyIgR3Jvb3Z5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ncm9vdnkJCQlzZXRmIGdyb292eQorCisiIEdOVSBTZXJ2ZXIgUGFnZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmdzcAkJCXNldGYgZ3NwCisKKyIgR3JvdXAgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvZ3JvdXAJCXNldGYgZ3JvdXAKKworIiBHVEsgUkMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuZ3RrcmMsZ3RrcmMJCXNldGYgZ3RrcmMKKworIiBIYW1zdGVyIENsYXNzaWMgfCBQbGF5Z3JvdW5kIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5oc2MsKi5oc20JCXNldGYgaGFtc3RlcgorCisiIEhhc2tlbGwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmhzCQkJc2V0ZiBoYXNrZWxsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5saHMJCQlzZXRmIGxoYXNrZWxsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jaHMJCQlzZXRmIGNoYXNrZWxsCisKKyIgSGFzdGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmh0CQkJc2V0ZiBoYXN0ZQorCisiIEhlcmN1bGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi52YywqLmV2LCoucnMsKi5zdW0sKi5lcnJzdW0Jc2V0ZiBoZXJjdWxlcworCisiIEhFWCAoSW50ZWwpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5oZXgsKi5oMzIJCXNldGYgaGV4CisKKyIgVGlsZGUgKG11c3QgYmUgYmVmb3JlIEhUTUwpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50Lmh0bWwJCQlzZXRmIHRpbGRlCisKKyIgSFRNTCAoLnNodG1sIGFuZCAuc3RtIGZvciBzZXJ2ZXIgc2lkZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmh0bWwsKi5odG0sKi5zaHRtbCwqLnN0bSAgY2FsbCBzOkZUaHRtbCgpCisKKyIgRGlzdGluZ3Vpc2ggYmV0d2VlbiBIVE1MLCBYSFRNTCBhbmQgRGphbmdvCitmdW5jISBzOkZUaHRtbCgpCisgIGxldCBuID0gMQorICB3aGlsZSBuIDwgMTAgJiYgbiA8IGxpbmUoIiQiKQorICAgIGlmIGdldGxpbmUobikgPX4gJ1w8RFREXHNcK1hIVE1MXHMnCisgICAgICBzZXRmIHhodG1sCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGdldGxpbmUobikgPX4gJ3slXHMqXChleHRlbmRzXHxibG9ja1wpXD4nCisgICAgICBzZXRmIGh0bWxkamFuZ28KKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBzZXRmIGh0bWwKK2VuZGZ1bmMKKworIiBIVE1MIHdpdGggUnVieSAtIGVSdWJ5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5lcmIsKi5yaHRtbAkJc2V0ZiBlcnVieQorCisiIEhUTUwgd2l0aCBNNAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaHRtbC5tNAkJCXNldGYgaHRtbG00CisKKyIgSFRNTCBDaGVldGFoIHRlbXBsYXRlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50bXBsCQkJc2V0ZiBodG1sY2hlZXRhaAorCisiIEhvc3QgY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9ob3N0LmNvbmYJCXNldGYgaG9zdGNvbmYKKworIiBIeXBlciBCdWlsZGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5oYgkJCXNldGYgaGIKKworIiBJY29uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pY24JCQlzZXRmIGljb24KKworIiBJREwgKEludGVyZmFjZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlkbAkJCWNhbGwgczpGVGlkbCgpCisKKyIgRGlzdGluZ3Vpc2ggYmV0d2VlbiBzdGFuZGFyZCBJREwgYW5kIE1TLUlETAorZnVuYyEgczpGVGlkbCgpCisgIGxldCBuID0gMQorICB3aGlsZSBuIDwgNTAgJiYgbiA8IGxpbmUoIiQiKQorICAgIGlmIGdldGxpbmUobikgPX4gJ15ccyppbXBvcnRcc1wrIlwodW5rbnduXHxvYmppZGxcKVwuaWRsIicKKyAgICAgIHNldGYgbXNpZGwKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBzZXRmIGlkbAorZW5kZnVuYworCisiIE1pY3Jvc29mdCBJREwgKEludGVyZmFjZSBEZXNjcmlwdGlvbiBMYW5ndWFnZSkgIEFsc28gKi5pZGwKKyIgTU9GID0gV01JIChXaW5kb3dzIE1hbmFnZW1lbnQgSW5zdHJ1bWVudGF0aW9uKSBNYW5hZ2VkIE9iamVjdCBGb3JtYXQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm9kbCwqLm1vZgkJc2V0ZiBtc2lkbAorCisiIEljZXdtIG1lbnUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLy5pY2V3bS9tZW51CQlzZXRmIGljZW1lbnUKKworIiBJbmRlbnQgcHJvZmlsZSAobXVzdCBjb21lIGJlZm9yZSBJREwgKi5wcm8hKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5pbmRlbnQucHJvCQlzZXRmIGluZGVudAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGluZGVudC5wcm8JCWNhbGwgczpQcm90b0NoZWNrKCdpbmRlbnQnKQorCisiIElETCAoSW50ZXJhY3RpdmUgRGF0YSBMYW5ndWFnZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBybwkJCWNhbGwgczpQcm90b0NoZWNrKCdpZGxhbmcnKQorCisiIERpc3Rpbmd1aXNoIGJldHdlZW4gImRlZmF1bHQiIGFuZCBDcHJvdG8gcHJvdG90eXBlIGZpbGUuICovCitmdW5jISBzOlByb3RvQ2hlY2soZGVmYXVsdCkKKyAgIiBDcHJvdG8gZmlsZXMgaGF2ZSBhIGNvbW1lbnQgaW4gdGhlIGZpcnN0IGxpbmUgYW5kIGEgZnVuY3Rpb24gcHJvdG90eXBlIGluCisgICIgdGhlIHNlY29uZCBsaW5lLCBpdCBhbHdheXMgZW5kcyBpbiAiOyIuICBJbmRlbnQgZmlsZXMgbWF5IGFsc28gaGF2ZQorICAiIGNvbW1lbnRzLCB0aHVzIHdlIGNhbid0IG1hdGNoIGNvbW1lbnRzIHRvIHNlZSB0aGUgZGlmZmVyZW5jZS4KKyAgaWYgZ2V0bGluZSgyKSA9fiAnOyQnCisgICAgc2V0ZiBjcHAKKyAgZWxzZQorICAgIGV4ZSAnc2V0ZiAnIC4gYTpkZWZhdWx0CisgIGVuZGlmCitlbmRmdW5jCisKKworIiBJbmRlbnQgUkMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBpbmRlbnRyYwkJCXNldGYgaW5kZW50cmMKKworIiBJbmZvcm0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmluZiwqLklORgkJc2V0ZiBpbmZvcm0KKworIiBJbml0bmcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2luaXRuZy8qKi8qLmksKi5paQlzZXRmIGluaXRuZworCisiIElwZmlsdGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgaXBmLmNvbmYsaXBmNi5jb25mLGlwZi5ydWxlcwlzZXRmIGlwZmlsdGVyCisKKyIgSW5mb3JtaXggNEdMIChzb3VyY2UgLSBjYW5vbmljYWwsIGluY2x1ZGUgZmlsZSwgSTRHTCtNNCBwcmVwcm9jLikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLjRnbCwqLjRnaCwqLm00Z2wJc2V0ZiBmZ2wKKworIiAuSU5JIGZpbGUgZm9yIE1TRE9TCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pbmkJCQlzZXRmIGRvc2luaQorCisiIFN5c1YgSW5pdHRhYgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGluaXR0YWIJCQlzZXRmIGluaXR0YWIKKworIiBJbm5vIFNldHVwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pc3MJCQlzZXRmIGlzcworCisiIEpBTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouamFsLCouSkFMCQlzZXRmIGphbAorCisiIEphbQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouanBsLCouanByCQlzZXRmIGphbQorCisiIEphdmEKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmphdmEsKi5qYXYJCXNldGYgamF2YQorCisiIEphdmFDQworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouamosKi5qanQJCXNldGYgamF2YWNjCisKKyIgSmF2YVNjcmlwdCwgRUNNQVNjcmlwdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouanMsKi5qYXZhc2NyaXB0LCouZXMJc2V0ZiBqYXZhc2NyaXB0CisKKyIgSmF2YSBTZXJ2ZXIgUGFnZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmpzcAkJCXNldGYganNwCisKKyIgSmF2YSBQcm9wZXJ0aWVzIHJlc291cmNlIGZpbGUgKG5vdGU6IGRvZXNuJ3QgY2F0Y2ggZm9udC5wcm9wZXJ0aWVzLnBsKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucHJvcGVydGllcywqLnByb3BlcnRpZXNfPz8sKi5wcm9wZXJ0aWVzXz8/Xz8/CXNldGYganByb3BlcnRpZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnByb3BlcnRpZXNfPz9fPz9fKgljYWxsIHM6U3RhclNldGYoJ2pwcm9wZXJ0aWVzJykKKworIiBKZXNzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jbHAJCQlzZXRmIGplc3MKKworIiBKZ3JhcGgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmpncgkJCXNldGYgamdyYXBoCisKKyIgS2l4dGFydAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoua2l4CQkJc2V0ZiBraXgKKworIiBLaW13aXR1WysrXQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouawkJCXNldGYga3d0CisKKyIgS0RFIHNjcmlwdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoua3MJCQlzZXRmIGtzY3JpcHQKKworIiBLY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgS2NvbmZpZyxLY29uZmlnLmRlYnVnCXNldGYga2NvbmZpZworCisiIExhY2UgKElTRSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmFjZSwqLkFDRQkJc2V0ZiBsYWNlCisKKyIgTGF0dGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxhdHRlLCoubHRlCQlzZXRmIGxhdHRlCisKKyIgTGltaXRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9saW1pdHMJCXNldGYgbGltaXRzCisKKyIgTGFtYmRhUHJvbG9nICgqLm1vZCB0b28sIHNlZSBNb2RzaW0pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zaWcJCQlzZXRmIGxwcm9sb2cKKworIiBMREFQIExESUYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxkaWYJCQlzZXRmIGxkaWYKKworIiBMZCBsb2FkZXIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxkCQkJc2V0ZiBsZAorCisiIExleAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGV4LCoubAkJCXNldGYgbGV4CisKKyIgTGliYW8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL2xpYmFvLmNvbmYsKi8ubGliYW8Jc2V0ZiBsaWJhbworCisiIExpYnNlbnNvcnMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3NlbnNvcnMuY29uZgkJc2V0ZiBzZW5zb3JzCisKKyIgTEZUUAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGxmdHAuY29uZiwubGZ0cHJjLCpsZnRwL3JjCXNldGYgbGZ0cAorCisiIExpZmVsaW5lcyAob3IgTGV4IGZvciBDKyshKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubGwJCQlzZXRmIGxpZmVsaW5lcworCisiIExpbG86IExpbnV4IGxvYWRlcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGxpbG8uY29uZioJCWNhbGwgczpTdGFyU2V0ZignbGlsbycpCisKKyIgTGlzcCAoKi5lbCA9IEVMaXNwLCAqLmNsID0gQ29tbW9uIExpc3AsICouamwgPSBsaWJyZXAgTGlzcCkKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxzcCwqLmxpc3AsKi5lbCwqLmNsLCouamwsKi5MLC5lbWFjcywuc2F3ZmlzaHJjIHNldGYgbGlzcAorZWxzZQorICBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5sc3AsKi5saXNwLCouZWwsKi5jbCwqLmpsLC5lbWFjcywuc2F3ZmlzaHJjIHNldGYgbGlzcAorZW5kaWYKKworIiBTQkNMIGltcGxlbWVudGF0aW9uIG9mIENvbW1vbiBMaXNwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc2JjbHJjLC5zYmNscmMJCXNldGYgbGlzcAorCisiIExpdGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxpdGUsKi5sdAkJc2V0ZiBsaXRlCisKKyIgTGl0ZVN0ZXAgUkMgZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL0xpdGVTdGVwLyovKi5yYwkJc2V0ZiBsaXRlc3RlcAorCisiIExvZ2luIGFjY2VzcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbG9naW4uYWNjZXNzCQlzZXRmIGxvZ2luYWNjZXNzCisKKyIgTG9naW4gZGVmcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbG9naW4uZGVmcwkJc2V0ZiBsb2dpbmRlZnMKKworIiBMb2d0YWxrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5sZ3QJCQlzZXRmIGxvZ3RhbGsKKworIiBMT1RPUworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubG90LCoubG90b3MJCXNldGYgbG90b3MKKworIiBMb3V0IChhbHNvOiAqLmx0KQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubG91LCoubG91dAkJc2V0ZiBsb3V0CisKKyIgTHVhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5sdWEJCQlzZXRmIGx1YQorCisiIExpbmRlbiBTY3JpcHRpbmcgTGFuZ3VhZ2UgKFNlY29uZCBMaWZlKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubHNsCQkJc2V0ZiBsc2wKKworIiBMeW54IHN0eWxlIGZpbGUgKG9yIExvdHVzU2NyaXB0ISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxzcwkJCXNldGYgbHNzCisKKyIgTTQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm00CisJXCBpZiBleHBhbmQoIjxhZmlsZT4iKSAhfj8gJ2h0bWwubTQkXHxmdndtMnJjJyB8IHNldGYgbTQgfCBlbmRpZgorCisiIE1hR2ljIFBvaW50CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tZ3AJCQlzZXRmIG1ncAorCisiIE1haWwgKGZvciBFbG0sIHRybiwgbXV0dCwgbXV0dG5nLCBybiwgc2xybikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBzbmQuXGRcKywubGV0dGVyLC5sZXR0ZXIuXGRcKywuZm9sbG93dXAsLmFydGljbGUsLmFydGljbGUuXGRcKyxwaWNvLlxkXCssbXV0dHtuZyx9LSotXHdcKyxtdXR0W1s6YWxudW06XV8tXVx7Nlx9LGFlXGRcKy50eHQsL3RtcC9TTFJOWzAtOUEtWi5dXCssKi5lbWwgc2V0ZiBtYWlsCisKKyIgTWFpbCBhbGlhc2VzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9tYWlsL2FsaWFzZXMsL2V0Yy9hbGlhc2VzCXNldGYgbWFpbGFsaWFzZXMKKworIiBNYWlsY2FwIGNvbmZpZ3VyYXRpb24gZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5tYWlsY2FwLG1haWxjYXAJCXNldGYgbWFpbGNhcAorCisiIE1ha2VmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKlttTV1ha2VmaWxlLCoubWssKi5tYWssKi5kc3Agc2V0ZiBtYWtlCisKKyIgTWFrZUluZGV4CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pc3QsKi5tc3QJCXNldGYgaXN0CisKKyIgTWFucGFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWFuCQkJc2V0ZiBtYW4KKworIiBNYW4gY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9tYW4uY29uZixtYW4uY29uZmlnCXNldGYgbWFuY29uZgorCisiIE1hcGxlIFYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm12LCoubXBsLCoubXdzCQlzZXRmIG1hcGxlCisKKyIgTWFzb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1hc29uLCoubWh0bWwJCXNldGYgbWFzb24KKworIiBNYXRsYWIgb3IgT2JqZWN0aXZlIEMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm0JCQljYWxsIHM6RlRtKCkKKworZnVuYyEgczpGVG0oKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKG4pCisgICAgaWYgbGluZSA9fiAnXlxzKlwoI1xzKlwoaW5jbHVkZVx8aW1wb3J0XClcPlx8L1wqXCknCisgICAgICBzZXRmIG9iamMKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgaWYgbGluZSA9fiAnXlxzKiUnCisgICAgICBzZXRmIG1hdGxhYgorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBpZiBsaW5lID1+ICdeXHMqKFwqJworICAgICAgc2V0ZiBtbWEKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBpZiBleGlzdHMoImc6ZmlsZXR5cGVfbSIpCisgICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX20KKyAgZWxzZQorICAgIHNldGYgbWF0bGFiCisgIGVuZGlmCitlbmRmdW5jCisKKyIgTWF0aGVtYXRpY2Egbm90ZWJvb2sKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm5iCQkJc2V0ZiBtbWEKKworIiBNYXlhIEV4dGVuc2lvbiBMYW5ndWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWVsCQkJc2V0ZiBtZWwKKworIiBNZXNzYWdlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC92YXIvbG9nL21lc3NhZ2VzLC92YXIvbG9nL21lc3NhZ2VzLipbMC05XSAgc2V0ZiBtZXNzYWdlcworCisiIE1ldGFmb250CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tZgkJCXNldGYgbWYKKworIiBNZXRhUG9zdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXAJCQlzZXRmIG1wCisKKyIgTUdMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tZ2wJCQlzZXRmIG1nbAorCisiIE1NSVggb3IgVk1TIG1ha2VmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tbXMJCQljYWxsIHM6RlRtbXMoKQorCisiIFN5bWJpYW4gbWV0YS1tYWtlZmlsZSBkZWZpbml0aW9uIChNTVApCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tbXAJCQlzZXRmIG1tcAorCitmdW5jISBzOkZUbW1zKCkKKyAgbGV0IG4gPSAxCisgIHdoaWxlIG4gPCAxMAorICAgIGxldCBsaW5lID0gZ2V0bGluZShuKQorICAgIGlmIGxpbmUgPX4gJ15ccypcKCVcfC8vXCknIHx8IGxpbmUgPX4gJ15cKicKKyAgICAgIHNldGYgbW1peAorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBpZiBsaW5lID1+ICdeXHMqIycKKyAgICAgIHNldGYgbWFrZQorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICBsZXQgbiA9IG4gKyAxCisgIGVuZHdoaWxlCisgIHNldGYgbW1peAorZW5kZnVuYworCisKKyIgTW9kc2ltIElJSSAob3IgTGFtYmRhUHJvbG9nKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubW9kCisJXCBpZiBnZXRsaW5lKDEpID1+ICdcPG1vZHVsZVw+JyB8CisJXCAgIHNldGYgbHByb2xvZyB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiBtb2RzaW0zIHwKKwlcIGVuZGlmCisKKyIgTW9kdWxhIDIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm0yLCouREVGLCouTU9ELCoubWQsKi5taSBzZXRmIG1vZHVsYTIKKworIiBNb2R1bGEgMyAoLm0zLCAuaTMsIC5tZywgLmlnKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouW21pXVszZ10JCXNldGYgbW9kdWxhMworCisiIE1vbmsKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlzYywqLm1vbmssKi5zc2MsKi50c2MJc2V0ZiBtb25rCisKKyIgTU9PCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tb28JCQlzZXRmIG1vbworCisiIE1vZGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL21vZHVsZXMuY29uZiwvZXRjL2NvbmYubW9kdWxlcwlzZXRmIG1vZGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL21vZHV0aWxzLyoKKwlcIGlmIGV4ZWN1dGFibGUoZXhwYW5kKCI8YWZpbGU+IikpICE9IDEKKwlcfCAgY2FsbCBzOlN0YXJTZXRmKCdtb2Rjb25mJykKKwlcfGVuZGlmCisKKyIgTXBsYXllciBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBtcGxheWVyLmNvbmYsKi8ubXBsYXllci9jb25maWcJc2V0ZiBtcGxheWVyY29uZgorCisiIE1vdGVyb2xhIFMgcmVjb3JkCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zMTksKi5zMjgsKi5zMzcJCXNldGYgc3JlYworCisiIE1yeHZ0cmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBtcnh2dHJjLC5tcnh2dHJjCQlzZXRmIG1yeHZ0cmMKKworIiBNc3FsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tc3FsCQkJc2V0ZiBtc3FsCisKKyIgTXlzcWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm15c3FsCQkJc2V0ZiBteXNxbAorCisiIE0kIFJlc291cmNlIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5yYwkJCXNldGYgcmMKKworIiBNdVBBRCBzb3VyY2UKK2F1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLm11CQkJc2V0ZiBtdXBhZAorCisiIE11c2gKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm11c2gJCQlzZXRmIG11c2gKKworIiBNdXR0IHNldHVwIGZpbGUgKGFsc28gZm9yIE11dHRuZykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBNdXR0e25nLH1yYwkJc2V0ZiBtdXR0cmMKKworIiBOYW5vCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9uYW5vcmMsLm5hbm9yYwlzZXRmIG5hbm9yYworCisiIE5hc3RyYW4gaW5wdXQvRE1BUAorImF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRhdAkJCXNldGYgbmFzdHJhbgorCisiIE5hdHVyYWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLk5TW0FDR0xNTlBTXQkJc2V0ZiBuYXR1cmFsCisKKyIgTmV0cmMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAubmV0cmMJCQlzZXRmIG5ldHJjCisKKyIgTm92ZWxsIG5ldHdhcmUgYmF0Y2ggZmlsZXMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm5jZgkJCXNldGYgbmNmCisKKyIgTnJvZmYvVHJvZmYgKCoubXMgYW5kICoudCBhcmUgY2hlY2tlZCBiZWxvdykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1lCisJXCBpZiBleHBhbmQoIjxhZmlsZT4iKSAhPSAicmVhZC5tZSIgJiYgZXhwYW5kKCI8YWZpbGU+IikgIT0gImNsaWNrLm1lIiB8CisJXCAgIHNldGYgbnJvZmYgfAorCVwgZW5kaWYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRyLCoubnIsKi5yb2ZmLCoudG1hYywqLm1vbQlzZXRmIG5yb2ZmCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5bMS05XQkJCWNhbGwgczpGVG5yb2ZmKCkKKworIiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBvbmUgb2YgdGhlIGZpcnN0IGZpdmUgbGluZXMgc3RhcnQgd2l0aCBhIGRvdC4gIEluCisiIHRoYXQgY2FzZSBpdCBpcyBwcm9iYWJseSBhbiBucm9mZiBmaWxlOiAnZmlsZXR5cGUnIGlzIHNldCBhbmQgMSBpcyByZXR1cm5lZC4KK2Z1bmMhIHM6RlRucm9mZigpCisgIGlmIGdldGxpbmUoMSlbMF0gLiBnZXRsaW5lKDIpWzBdIC4gZ2V0bGluZSgzKVswXSAuIGdldGxpbmUoNClbMF0gLiBnZXRsaW5lKDUpWzBdID1+ICdcLicKKyAgICBzZXRmIG5yb2ZmCisgICAgcmV0dXJuIDEKKyAgZW5kaWYKKyAgcmV0dXJuIDAKK2VuZGZ1bmMKKworIiBOcm9mZiBvciBPYmplY3RpdmUgQysrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5tbQkJCWNhbGwgczpGVG1tKCkKKworZnVuYyEgczpGVG1tKCkKKyAgbGV0IG4gPSAxCisgIHdoaWxlIG4gPCAxMAorICAgIGxldCBsaW5lID0gZ2V0bGluZShuKQorICAgIGlmIGxpbmUgPX4gJ15ccypcKCNccypcKGluY2x1ZGVcfGltcG9ydFwpXD5cfC9cKlwpJworICAgICAgc2V0ZiBvYmpjcHAKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gPSBuICsgMQorICBlbmR3aGlsZQorICBzZXRmIG5yb2ZmCitlbmRmdW5jCisKKyIgTm90IFF1aXRlIEMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm5xYwkJCXNldGYgbnFjCisKKyIgTlNJUworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubnNpCQkJc2V0ZiBuc2lzCisKKyIgT0NBTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1sLCoubWxpLCoubWxsLCoubWx5CXNldGYgb2NhbWwKKworIiBPY2NhbQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoub2NjCQkJc2V0ZiBvY2NhbQorCisiIE9tbmltYXJrCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54b20sKi54aW4JCXNldGYgb21uaW1hcmsKKworIiBPcGVuUk9BRAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoub3IJCQlzZXRmIG9wZW5yb2FkCisKKyIgT1BMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5bT29dW1BwXVtMbF0JCXNldGYgb3BsCisKKyIgT3JhY2xlIGNvbmZpZyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5vcmEJCQlzZXRmIG9yYQorCisiIFBhY2tldCBmaWx0ZXIgY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHBmLmNvbmYJCQlzZXRmIHBmCisKKyIgUGFtIGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3BhbS5jb25mCQlzZXRmIHBhbWNvbmYKKworIiBQQXBwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wYXBwLCoucHhtbCwqLnB4c2wJc2V0ZiBwYXBwCisKKyIgUGFzc3dvcmQgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvcGFzc3dkLC9ldGMvc2hhZG93LC9ldGMvc2hhZG93LSBzZXRmIHBhc3N3ZAorCisiIFBhc2NhbCAoYWxzbyAqLnApCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wYXMJCQlzZXRmIHBhc2NhbAorCisiIERlbHBoaSBwcm9qZWN0IGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmRwcgkJCXNldGYgcGFzY2FsCisKKyIgUERGCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wZGYJCQlzZXRmIHBkZgorCisiIFBlcmwKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBsLCouUEwJCWNhbGwgczpGVHBsKCkKK2Vsc2UKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGwJCQljYWxsIHM6RlRwbCgpCitlbmRpZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGx4CQkJc2V0ZiBwZXJsCisKK2Z1bmMhIHM6RlRwbCgpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV9wbCIpCisgICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX3BsCisgIGVsc2UKKyAgICAiIHJlY29nbml6ZSBQcm9sb2cgYnkgc3BlY2lmaWMgdGV4dCBpbiB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpbmUKKyAgICAiIHJlcXVpcmUgYSBibGFuayBhZnRlciB0aGUgJyUnIGJlY2F1c2UgUGVybCB1c2VzICIlbGlzdCIgYW5kICIldHJhbnNsYXRlIgorICAgIGxldCBsID0gZ2V0bGluZShuZXh0bm9uYmxhbmsoMSkpCisgICAgaWYgbCA9fiAnXDxwcm9sb2dcPicgfHwgbCA9fiAnXlxzKlwoJVwrXChcc1x8JFwpXHwvXCpcKScgfHwgbCA9fiAnOi0nCisgICAgICBzZXRmIHByb2xvZworICAgIGVsc2UKKyAgICAgIHNldGYgcGVybAorICAgIGVuZGlmCisgIGVuZGlmCitlbmRmdW5jCisKKyIgUGVybCwgWFBNIG9yIFhQTTIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBtCisJXCBpZiBnZXRsaW5lKDEpID1+ICJYUE0yIiB8CisJXCAgIHNldGYgeHBtMiB8CisJXCBlbHNlaWYgZ2V0bGluZSgxKSA9fiAiWFBNIiB8CisJXCAgIHNldGYgeHBtIHwKKwlcIGVsc2UgfAorCVwgICBzZXRmIHBlcmwgfAorCVwgZW5kaWYKKworIiBQZXJsIFBPRAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucG9kCQkJc2V0ZiBwb2QKKworIiBQaHAsIHBocDMsIHBocDQsIGV0Yy4KKyIgQWxzbyBQaHRtbCAod2FzIHVzZWQgZm9yIFBIUCAyIGluIHRoZSBwYXN0KQorIiBBbHNvIC5jdHAgZm9yIENha2UgdGVtcGxhdGUgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGhwLCoucGhwXGQsKi5waHRtbCwqLmN0cAlzZXRmIHBocAorCisiIFBpa2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBpa2UsKi5scGMsKi51bHBjLCoucG1vZCBzZXRmIHBpa2UKKworIiBQaW5mbyBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqL2V0Yy9waW5mb3JjLCovLnBpbmZvcmMJc2V0ZiBwaW5mbworCisiIFBhbG0gUmVzb3VyY2UgY29tcGlsZXIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJjcAkJCXNldGYgcGlscmMKKworIiBQaW5lIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5waW5lcmMscGluZXJjLC5waW5lcmNleCxwaW5lcmNleAkJc2V0ZiBwaW5lCisKKyIgUEwvTSAoYWxzbzogKi5pbnApCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbG0sKi5wMzYsKi5wYWMJCXNldGYgcGxtCisKKyIgUEwvU1FMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbHMsKi5wbHNxbAkJc2V0ZiBwbHNxbAorCisiIFBMUAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGxwCQkJc2V0ZiBwbHAKKworIiBQTyBhbmQgUE8gdGVtcGxhdGUgKEdOVSBnZXR0ZXh0KQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucG8sKi5wb3QJCXNldGYgcG8KKworIiBQb3N0Zml4IG1haW4gY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbWFpbi5jZgkJCXNldGYgcGZtYWluCisKKyIgUG9zdFNjcmlwdCAoKyBmb250IGZpbGVzLCBlbmNhcHN1bGF0ZWQgUG9zdFNjcmlwdCwgQWRvYmUgSWxsdXN0cmF0b3IpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wcywqLnBmYSwqLmFmbSwqLmVwcywqLmVwc2YsKi5lcHNpLCouYWkJICBzZXRmIHBvc3RzY3IKKworIiBQb3N0U2NyaXB0IFByaW50ZXIgRGVzY3JpcHRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBwZAkJCXNldGYgcHBkCisKKyIgUG92cmF5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wb3YJCQlzZXRmIHBvdgorCisiIFBvdnJheSBjb25maWd1cmF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnBvdnJheXJjCQkJc2V0ZiBwb3ZpbmkKKworIiBQb3ZyYXksIFBIUCBvciBhc3NlbWJseQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaW5jCQkJY2FsbCBzOkZUaW5jKCkKKworZnVuYyEgczpGVGluYygpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV9pbmMiKQorICAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9pbmMKKyAgZWxzZQorICAgIGxldCBsaW5lcyA9IGdldGxpbmUoMSkuZ2V0bGluZSgyKS5nZXRsaW5lKDMpCisgICAgaWYgbGluZXMgPX4/ICJwZXJsc2NyaXB0IgorICAgICAgc2V0ZiBhc3BwZXJsCisgICAgZWxzZWlmIGxpbmVzID1+ICI8JSIKKyAgICAgIHNldGYgYXNwdmJzCisgICAgZWxzZWlmIGxpbmVzID1+ICI8PyIKKyAgICAgIHNldGYgcGhwCisgICAgZWxzZQorICAgICAgY2FsbCBzOkZUYXNtc3ludGF4KCkKKyAgICAgIGlmIGV4aXN0cygiYjphc21zeW50YXgiKQorCWV4ZSAic2V0ZiAiIC4gYjphc21zeW50YXgKKyAgICAgIGVsc2UKKwlzZXRmIHBvdgorICAgICAgZW5kaWYKKyAgICBlbmRpZgorICBlbmRpZgorZW5kZnVuYworCisiIFByaW50Y2FwIGFuZCBUZXJtY2FwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnByaW50Y2FwCisJXCBsZXQgYjpwdGNhcF90eXBlID0gInByaW50IiB8IHNldGYgcHRjYXAKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqdGVybWNhcAorCVwgbGV0IGI6cHRjYXBfdHlwZSA9ICJ0ZXJtIiB8IHNldGYgcHRjYXAKKworIiBQQ0NUUyAvIEFOVFJMCisiYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZwkJCXNldGYgYW50cmwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmcJCQlzZXRmIHBjY3RzCisKKyIgUFBXaXphcmQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLml0LCouaWgJCQlzZXRmIHBwd2l6CisKKyIgT3JhY2xlIFBybypDL0MrKworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGMJCQlzZXRmIHByb2MKKworIiBQcml2b3h5IGFjdGlvbnMgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouYWN0aW9uCQkJc2V0ZiBwcml2b3h5CisKKyIgUHJvY21haWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAucHJvY21haWwsLnByb2NtYWlscmMJc2V0ZiBwcm9jbWFpbAorCisiIFByb2dyZXNzIG9yIENXRUIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLncJCQljYWxsIHM6RlRwcm9ncmVzc19jd2ViKCkKKworZnVuYyEgczpGVHByb2dyZXNzX2N3ZWIoKQorICBpZiBleGlzdHMoImc6ZmlsZXR5cGVfdyIpCisgICAgZXhlICJzZXRmICIgLiBnOmZpbGV0eXBlX3cKKyAgICByZXR1cm4KKyAgZW5kaWYKKyAgaWYgZ2V0bGluZSgxKSA9fiAnJkFOQUxZWkUnIHx8IGdldGxpbmUoMykgPX4gJyZHTE9CQUwtREVGSU5FJworICAgIHNldGYgcHJvZ3Jlc3MKKyAgZWxzZQorICAgIHNldGYgY3dlYgorICBlbmRpZgorZW5kZnVuYworCisiIFByb2dyZXNzIG9yIGFzc2VtYmx5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5pCQkJY2FsbCBzOkZUcHJvZ3Jlc3NfYXNtKCkKKworZnVuYyEgczpGVHByb2dyZXNzX2FzbSgpCisgIGlmIGV4aXN0cygiZzpmaWxldHlwZV9pIikKKyAgICBleGUgInNldGYgIiAuIGc6ZmlsZXR5cGVfaQorICAgIHJldHVybgorICBlbmRpZgorICAiIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBhbiBhc3NlbWJseSBjb21tZW50IHRoZSBmaXJzdCB0ZW4gbGluZXMuCisgICIgSWYgbm90IGZvdW5kLCBhc3N1bWUgUHJvZ3Jlc3MuCisgIGxldCBsbnVtID0gMQorICB3aGlsZSBsbnVtIDw9IDEwICYmIGxudW0gPCBsaW5lKCckJykKKyAgICBsZXQgbGluZSA9IGdldGxpbmUobG51bSkKKyAgICBpZiBsaW5lID1+ICdeXHMqOycgfHwgbGluZSA9fiAnXlwqJworICAgICAgY2FsbCBzOkZUYXNtKCkKKyAgICAgIHJldHVybgorICAgIGVsc2VpZiBsaW5lICF+ICdeXHMqJCcgfHwgbGluZSA9fiAnXi9cKicKKyAgICAgICIgTm90IGFuIGVtcHR5IGxpbmU6IERvZXNuJ3QgbG9vayBsaWtlIHZhbGlkIGFzc2VtYmx5IGNvZGUuCisgICAgICAiIE9yIGl0IGxvb2tzIGxpa2UgYSBQcm9ncmVzcyAvKiBjb21tZW50CisgICAgICBicmVhaworICAgIGVuZGlmCisgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICBlbmR3CisgIHNldGYgcHJvZ3Jlc3MKK2VuZGZ1bmMKKworIiBQcm9ncmVzcyBvciBQYXNjYWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnAJCQljYWxsIHM6RlRwcm9ncmVzc19wYXNjYWwoKQorCitmdW5jISBzOkZUcHJvZ3Jlc3NfcGFzY2FsKCkKKyAgaWYgZXhpc3RzKCJnOmZpbGV0eXBlX3AiKQorICAgIGV4ZSAic2V0ZiAiIC4gZzpmaWxldHlwZV9wCisgICAgcmV0dXJuCisgIGVuZGlmCisgICIgVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHZhbGlkIFBhc2NhbCBzeW50YXggaW4gdGhlIGZpcnN0IHRlbiBsaW5lcy4KKyAgIiBMb29rIGZvciBlaXRoZXIgYW4gb3BlbmluZyBjb21tZW50IG9yIGEgcHJvZ3JhbSBzdGFydC4KKyAgIiBJZiBub3QgZm91bmQsIGFzc3VtZSBQcm9ncmVzcy4KKyAgbGV0IGxudW0gPSAxCisgIHdoaWxlIGxudW0gPD0gMTAgJiYgbG51bSA8IGxpbmUoJyQnKQorICAgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICAgIGlmIGxpbmUgPX4gJ15ccypcKHByb2dyYW1cfHVuaXRcfHByb2NlZHVyZVx8ZnVuY3Rpb25cfGNvbnN0XHx0eXBlXHx2YXJcKVw+JworCVwgfHwgbGluZSA9fiAnXlxzKnsnIHx8IGxpbmUgPX4gJ15ccyooXConCisgICAgICBzZXRmIHBhc2NhbAorICAgICAgcmV0dXJuCisgICAgZWxzZWlmIGxpbmUgIX4gJ15ccyokJyB8fCBsaW5lID1+ICdeL1wqJworICAgICAgIiBOb3QgYW4gZW1wdHkgbGluZTogRG9lc24ndCBsb29rIGxpa2UgdmFsaWQgUGFzY2FsIGNvZGUuCisgICAgICAiIE9yIGl0IGxvb2tzIGxpa2UgYSBQcm9ncmVzcyAvKiBjb21tZW50CisgICAgICBicmVhaworICAgIGVuZGlmCisgICAgbGV0IGxudW0gPSBsbnVtICsgMQorICBlbmR3CisgIHNldGYgcHJvZ3Jlc3MKK2VuZGZ1bmMKKworCisiIFNvZnR3YXJlIERpc3RyaWJ1dG9yIFByb2R1Y3QgU3BlY2lmaWNhdGlvbiBGaWxlIChQT1NJWCAxMzg3LjItMTk5NSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnBzZgkJCXNldGYgcHNmCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgSU5ERVgsSU5GTworCVwgaWYgZ2V0bGluZSgxKSA9fiAnXlxzKlwoZGlzdHJpYnV0aW9uXHxpbnN0YWxsZWRfc29mdHdhcmVcfHJvb3RcfGJ1bmRsZVx8cHJvZHVjdFwpXHMqJCcgfAorCVwgICBzZXRmIHBzZiB8CisJXCBlbmRpZgorCisiIFByb2xvZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucGRiCQkJc2V0ZiBwcm9sb2cKKworIiBQcm9tZWxhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5wbWwJCQlzZXRmIHByb21lbGEKKworIiBQcm90b2NvbHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3Byb3RvY29scwkJc2V0ZiBwcm90b2NvbHMKKworIiBQeXJleAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucHl4LCoucHhkCQlzZXRmIHB5cmV4CisKKyIgUHl0aG9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5weSwqLnB5dwkJc2V0ZiBweXRob24KKworIiBSYWRpYW5jZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmFkLCoubWF0CQlzZXRmIHJhZGlhbmNlCisKKyIgUmF0cG9pc29uIGNvbmZpZy9jb21tYW5kIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnJhdHBvaXNvbnJjLHJhdHBvaXNvbnJjCXNldGYgcmF0cG9pc29uCisKKyIgUkNTIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqXCx2CQkJc2V0ZiByY3MKKworIiBSZWFkbGluZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5pbnB1dHJjLGlucHV0cmMJCXNldGYgcmVhZGxpbmUKKworIiBSZWdpc3RyeSBmb3IgTVMtV2luZG93cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmVnCisJXCBpZiBnZXRsaW5lKDEpID1+PyAnXlJFR0VESVRbMC05XSpccyokXHxeV2luZG93cyBSZWdpc3RyeSBFZGl0b3IgVmVyc2lvbiBcZCpcLlxkKlxzKiQnIHwgc2V0ZiByZWdpc3RyeSB8IGVuZGlmCisKKyIgUmVuZGVybWFuIEludGVyZmFjZSBCeXRlc3RyZWFtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5yaWIJCQlzZXRmIHJpYgorCisiIFJleHgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJleHgsKi5yZXgsKi5qcmV4eCwqLnJ4aiwqLm9yeAlzZXRmIHJleHgKKworIiBSIChTcGx1cykKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnMsKi5TCQkJc2V0ZiByCitlbHNlCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnMJCQlzZXRmIHIKK2VuZGlmCisKKyIgUiBIZWxwIGZpbGUKK2lmIGhhcygiZm5hbWVfY2FzZSIpCisgIGF1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJkLCouUmQJCXNldGYgcmhlbHAKK2Vsc2UKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmQJCQlzZXRmIHJoZWxwCitlbmRpZgorCisiIFIgbm93ZWIgZmlsZQoraWYgaGFzKCJmbmFtZV9jYXNlIikKKyAgYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouUm53LCoucm53LCouU253LCouc253CQlzZXRmIHJub3dlYgorZWxzZQorICBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ybncsKi5zbncJCQlzZXRmIHJub3dlYgorZW5kaWYKKworIiBSZXh4LCBSZWJvbCBvciBSCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5yLCouUgkJCWNhbGwgczpGVHIoKQorCitmdW5jISBzOkZUcigpCisgIGxldCBtYXggPSBsaW5lKCIkIikgPiA1MCA/IDUwIDogbGluZSgiJCIpCisKKyAgZm9yIG4gaW4gcmFuZ2UoMSwgbWF4KQorICAgICIgUmVib2wgaXMgZWFzeSB0byByZWNvZ25pemUsIGNoZWNrIGZvciB0aGF0IGZpcnN0CisgICAgaWYgZ2V0bGluZShuKSA9fj8gJ1w8UkVCT0xcPicKKyAgICAgIHNldGYgcmVib2wKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgIGVuZGZvcgorCisgIGZvciBuIGluIHJhbmdlKDEsIG1heCkKKyAgICAiIFIgaGFzICMgY29tbWVudHMKKyAgICBpZiBnZXRsaW5lKG4pID1+ICdeXHMqIycKKyAgICAgIHNldGYgcgorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgICAiIFJleHggaGFzIC8qIGNvbW1lbnRzICovCisgICAgaWYgZ2V0bGluZShuKSA9fiAnXlxzKi9cKicKKyAgICAgIHNldGYgcmV4eAorICAgICAgcmV0dXJuCisgICAgZW5kaWYKKyAgZW5kZm9yCisKKyAgIiBOb3RoaW5nIHJlY29nbml6ZWQsIGFzc3VtZSBSZXh4CisgIHNldGYgcmV4eAorZW5kZnVuYworCisiIFJlbWluZAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5yZW1pbmRlcnMqCQljYWxsIHM6U3RhclNldGYoJ3JlbWluZCcpCisKKyIgUmVzb2x2LmNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCByZXNvbHYuY29uZgkJc2V0ZiByZXNvbHYKKworIiBSZWxheCBORyBDb21wYWN0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ybmMJCQlzZXRmIHJuYworCisiIFJQTC8yCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5ycGwJCQlzZXRmIHJwbAorCisiIFJvYm90cy50eHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCByb2JvdHMudHh0CQlzZXRmIHJvYm90cworCisiIFJwY2dlbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueAkJCXNldGYgcnBjZ2VuCisKKyIgcmVTdHJ1Y3R1cmVkVGV4dCBEb2N1bWVudGF0aW9uIEZvcm1hdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucnN0CQkJc2V0ZiByc3QKKworIiBSVEYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJ0ZgkJCXNldGYgcnRmCisKKyIgUnVieQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoucmIsKi5yYncsKi5nZW0sKi5nZW1zcGVjCXNldGYgcnVieQorCisiIFJ1Ynkgb24gUmFpbHMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmJ1aWxkZXIsKi5yeG1sLCoucmpzCXNldGYgcnVieQorCisiIFJhbnRmaWxlIGFuZCBSYWtlZmlsZSBpcyBsaWtlIFJ1YnkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBbclJdYW50ZmlsZSwqLnJhbnQsW3JSXWFrZWZpbGUsKi5yYWtlCXNldGYgcnVieQorCisiIFMtbGFuZyAob3Igc2hhZGVyIGxhbmd1YWdlISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNsCQkJc2V0ZiBzbGFuZworCisiIFNhbWJhIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHNtYi5jb25mCQkJc2V0ZiBzYW1iYQorCisiIFNBUyBzY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNhcwkJCXNldGYgc2FzCisKKyIgU2F0aGVyCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zYQkJCXNldGYgc2F0aGVyCisKKyIgU2NpbGFiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zY2ksKi5zY2UJCXNldGYgc2NpbGFiCisKKyIgU0Q6IFN0cmVhbWluZyBEZXNjcmlwdG9ycworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2QJCQlzZXRmIHNkCisKKyIgU0RMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zZGwsKi5wcgkJc2V0ZiBzZGwKKworIiBzZWQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNlZAkJCXNldGYgc2VkCisKKyIgU2lldmUgKFJGQyAzMDI4KQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2l2CQkJc2V0ZiBzaWV2ZQorCisiIFNlbmRtYWlsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc2VuZG1haWwuY2YJCXNldGYgc20KKworIiBTZW5kbWFpbCAubWMgZmlsZXMgYXJlIGFjdHVhbGx5IG00LiAgQ291bGQgYWxzbyBiZSBNUyBNZXNzYWdlIHRleHQgZmlsZS4KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1jCQkJY2FsbCBzOk1jU2V0ZigpCisKK2Z1bmMhIHM6TWNTZXRmKCkKKyAgIiBSZWx5IG9uIHRoZSBmaWxlIHRvIHN0YXJ0IHdpdGggYSBjb21tZW50LgorICAiIE1TIG1lc3NhZ2UgdGV4dCBmaWxlcyB1c2UgJzsnLCBTZW5kbWFpbCBmaWxlcyB1c2UgJyMnIG9yICdkbmwnCisgIGZvciBsbnVtIGluIHJhbmdlKDEsIG1pbihbbGluZSgiJCIpLCAyMF0pKQorICAgIGxldCBsaW5lID0gZ2V0bGluZShsbnVtKQorICAgIGlmIGxpbmUgPX4gJ15ccypcKCNcfGRubFwpJworICAgICAgc2V0ZiBtNCAgIiBTZW5kbWFpbCAubWMgZmlsZQorICAgICAgcmV0dXJuCisgICAgZWxzZWlmIGxpbmUgPX4gJ15ccyo7JworICAgICAgc2V0ZiBtc21lc3NhZ2VzICAiIE1TIE1lc3NhZ2UgdGV4dCBmaWxlCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICBlbmRmb3IKKyAgc2V0ZiBtNCAgIiBEZWZhdWx0OiBTZW5kbWFpbCAubWMgZmlsZQorZW5kZnVuYworCisiIFNlcnZpY2VzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zZXJ2aWNlcwkJc2V0ZiBzZXJ2aWNlcworCisiIFNlcnZpY2UgTG9jYXRpb24gY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zbHAuY29uZgkJc2V0ZiBzbHBjb25mCisKKyIgU2VydmljZSBMb2NhdGlvbiByZWdpc3RyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3NscC5yZWcJCXNldGYgc2xwcmVnCisKKyIgU2VydmljZSBMb2NhdGlvbiBTUEkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3NscC5zcGkJCXNldGYgc2xwc3BpCisKKyIgU2V0c2VyaWFsIGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvc2VyaWFsLmNvbmYJCXNldGYgc2V0c2VyaWFsCisKKyIgU0dNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2dtLCouc2dtbAorCVwgaWYgZ2V0bGluZSgxKS5nZXRsaW5lKDIpLmdldGxpbmUoMykuZ2V0bGluZSg0KS5nZXRsaW5lKDUpID1+PyAnbGludXhkb2MnIHwKKwlcICAgc2V0ZiBzZ21sbG54IHwKKwlcIGVsc2VpZiBnZXRsaW5lKDEpID1+ICc8IURPQ1RZUEUuKkRvY0Jvb2snIHx8IGdldGxpbmUoMikgPX4gJzwhRE9DVFlQRS4qRG9jQm9vaycgfAorCVwgICBsZXQgYjpkb2Nia190eXBlPSJzZ21sIiB8CisJXCAgIHNldGYgZG9jYmsgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgc2dtbCB8CisJXCBlbmRpZgorCisiIFNHTUxERUNMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5kZWNsLCouZGNsLCouZGVjCisJXCBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKSA9fj8gJ148IVNHTUwnIHwKKwlcICAgIHNldGYgc2dtbGRlY2wgfAorCVwgZW5kaWYKKworIiBTR01MIGNhdGFsb2cgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGNhdGFsb2cJCQlzZXRmIGNhdGFsb2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBzZ21sLmNhdGFsb2cqCQljYWxsIHM6U3RhclNldGYoJ2NhdGFsb2cnKQorCisiIFNoZWxsIHNjcmlwdHMgKHNoLCBrc2gsIGJhc2gsIGJhc2gyLCBjc2gpOyBBbGxvdyAucHJvZmlsZV9mb28gZXRjLgorIiBHZW50b28gZWJ1aWxkcyBhcmUgYWN0dWFsbHkgYmFzaCBzY3JpcHRzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmJhc2hyYyosYmFzaHJjLGJhc2guYmFzaHJjLC5iYXNoX3Byb2ZpbGUqLC5iYXNoX2xvZ291dCosKi5iYXNoLCouZWJ1aWxkIGNhbGwgU2V0RmlsZVR5cGVTSCgiYmFzaCIpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmtzaHJjKiwqLmtzaCBjYWxsIFNldEZpbGVUeXBlU0goImtzaCIpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9wcm9maWxlLC5wcm9maWxlKiwqLnNoLCouZW52IGNhbGwgU2V0RmlsZVR5cGVTSChnZXRsaW5lKDEpKQorCisiIEFsc28gY2FsbGVkIGZyb20gc2NyaXB0cy52aW0uCitmdW5jISBTZXRGaWxlVHlwZVNIKG5hbWUpCisgIGlmIGV4cGFuZCgiPGFtYXRjaD4iKSA9fiBnOmZ0X2lnbm9yZV9wYXQKKyAgICByZXR1cm4KKyAgZW5kaWYKKyAgaWYgYTpuYW1lID1+ICdcPGtzaFw+JworICAgIGxldCBiOmlzX2tvcm5zaGVsbCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgICAgICB1bmxldCBiOmlzX2Jhc2gKKyAgICBlbmRpZgorICAgIGlmIGV4aXN0cygiYjppc19zaCIpCisgICAgICB1bmxldCBiOmlzX3NoCisgICAgZW5kaWYKKyAgZWxzZWlmIGV4aXN0cygiZzpiYXNoX2lzX3NoIikgfHwgYTpuYW1lID1+ICdcPGJhc2hcPicgfHwgYTpuYW1lID1+ICdcPGJhc2gyXD4nCisgICAgbGV0IGI6aXNfYmFzaCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyAgICAgIHVubGV0IGI6aXNfa29ybnNoZWxsCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoImI6aXNfc2giKQorICAgICAgdW5sZXQgYjppc19zaAorICAgIGVuZGlmCisgIGVsc2VpZiBhOm5hbWUgPX4gJ1w8c2hcPicKKyAgICBsZXQgYjppc19zaCA9IDEKKyAgICBpZiBleGlzdHMoImI6aXNfa29ybnNoZWxsIikKKyAgICAgIHVubGV0IGI6aXNfa29ybnNoZWxsCisgICAgZW5kaWYKKyAgICBpZiBleGlzdHMoImI6aXNfYmFzaCIpCisgICAgICB1bmxldCBiOmlzX2Jhc2gKKyAgICBlbmRpZgorICBlbmRpZgorICBjYWxsIFNldEZpbGVUeXBlU2hlbGwoInNoIikKK2VuZGZ1bmMKKworIiBGb3Igc2hlbGwtbGlrZSBmaWxlIHR5cGVzLCBjaGVjayBmb3IgYW4gImV4ZWMiIGNvbW1hbmQgaGlkZGVuIGluIGEgY29tbWVudCwKKyIgYXMgdXNlZCBmb3IgVGNsLgorIiBBbHNvIGNhbGxlZCBmcm9tIHNjcmlwdHMudmltLCB0aHVzIGNhbid0IGJlIGxvY2FsIHRvIHRoaXMgc2NyaXB0LgorZnVuYyEgU2V0RmlsZVR5cGVTaGVsbChuYW1lKQorICBpZiBleHBhbmQoIjxhbWF0Y2g+IikgPX4gZzpmdF9pZ25vcmVfcGF0CisgICAgcmV0dXJuCisgIGVuZGlmCisgIGxldCBsID0gMgorICB3aGlsZSBsIDwgMjAgJiYgbCA8IGxpbmUoIiQiKSAmJiBnZXRsaW5lKGwpID1+ICdeXHMqXCgjXHwkXCknCisgICAgIiBTa2lwIGVtcHR5IGFuZCBjb21tZW50IGxpbmVzLgorICAgIGxldCBsID0gbCArIDEKKyAgZW5kd2hpbGUKKyAgaWYgbCA8IGxpbmUoIiQiKSAmJiBnZXRsaW5lKGwpID1+ICdccypleGVjXHMnICYmIGdldGxpbmUobCAtIDEpID1+ICdeXHMqIy4qXFwkJworICAgICIgRm91bmQgYW4gImV4ZWMiIGxpbmUgYWZ0ZXIgYSBjb21tZW50IHdpdGggY29udGludWF0aW9uCisgICAgbGV0IG4gPSBzdWJzdGl0dXRlKGdldGxpbmUobCksJ1xzKmV4ZWNcc1wrXChbXiBdKi9cKVw9JywgJycsICcnKQorICAgIGlmIG4gPX4gJ1w8dGNsc2hcfFw8d2lzaCcKKyAgICAgIHNldGYgdGNsCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICBlbmRpZgorICBleGUgInNldGYgIiAuIGE6bmFtZQorZW5kZnVuYworCisiIHRjc2ggc2NyaXB0cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC50Y3NocmMqLCoudGNzaCx0Y3NoLnRjc2hyYyx0Y3NoLmxvZ2luCWNhbGwgU2V0RmlsZVR5cGVTaGVsbCgidGNzaCIpCisKKyIgY3NoIHNjcmlwdHMsIGJ1dCBtaWdodCBhbHNvIGJlIHRjc2ggc2NyaXB0cyAob24gc29tZSBzeXN0ZW1zIGNzaCBpcyB0Y3NoKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5sb2dpbiosLmNzaHJjKixjc2guY3NocmMsY3NoLmxvZ2luLGNzaC5sb2dvdXQsKi5jc2gsLmFsaWFzICBjYWxsIHM6Q1NIKCkKKworZnVuYyEgczpDU0goKQorICBpZiBleGlzdHMoImc6ZmlsZXR5cGVfY3NoIikKKyAgICBjYWxsIFNldEZpbGVUeXBlU2hlbGwoZzpmaWxldHlwZV9jc2gpCisgIGVsc2VpZiAmc2hlbGwgPX4gInRjc2giCisgICAgY2FsbCBTZXRGaWxlVHlwZVNoZWxsKCJ0Y3NoIikKKyAgZWxzZQorICAgIGNhbGwgU2V0RmlsZVR5cGVTaGVsbCgiY3NoIikKKyAgZW5kaWYKK2VuZGZ1bmMKKworIiBaLVNoZWxsIHNjcmlwdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC56cHJvZmlsZSwvZXRjL3pwcm9maWxlLC56ZmJmbWFya3MgIHNldGYgenNoCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLnpzaCosLnpsb2cqLC56Y29tcGR1bXAqICBjYWxsIHM6U3RhclNldGYoJ3pzaCcpCisKKyIgU2NoZW1lCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zY20sKi5zcwkJc2V0ZiBzY2hlbWUKKworIiBTY3JlZW4gUkMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuc2NyZWVucmMsc2NyZWVucmMJc2V0ZiBzY3JlZW4KKworIiBTaW11bGEKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpbQkJCXNldGYgc2ltdWxhCisKKyIgU0lOREEKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNpbiwqLnM4NQkJc2V0ZiBzaW5kYQorCisiIFNpU1UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNzdCwqLnNzbSwqLnNzaSwqLi1zc3QsKi5fc3N0IHNldGYgc2lzdQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3N0Lm1ldGEsKi4tc3N0Lm1ldGEsKi5fc3N0Lm1ldGEgc2V0ZiBzaXN1CisKKyIgU0tJTEwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmlsLCouaWxzLCouY2RmCQlzZXRmIHNraWxsCisKKyIgU0xSTgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5zbHJucmMJCQlzZXRmIHNscm5yYworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2NvcmUJCQlzZXRmIHNscm5zYworCisiIFNtYWxsdGFsayAoYW5kIFRlWCkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnN0CQkJc2V0ZiBzdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY2xzCisJXCBpZiBnZXRsaW5lKDEpID1+ICdeJScgfAorCVwgIHNldGYgdGV4IHwKKwlcIGVsc2UgfAorCVwgIHNldGYgc3QgfAorCVwgZW5kaWYKKworIiBTbWFydHkgdGVtcGxhdGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50cGwJCQlzZXRmIHNtYXJ0eQorCisiIFNNSUwgb3IgWE1MCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zbWlsCisJXCBpZiBnZXRsaW5lKDEpID1+ICc8P1xzKnhtbC4qPz4nIHwKKwlcICAgc2V0ZiB4bWwgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgc21pbCB8CisJXCBlbmRpZgorCisiIFNNSUwgb3IgU05NUCBNSUIgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc21pCisJXCBpZiBnZXRsaW5lKDEpID1+ICdcPHNtaWxcPicgfAorCVwgICBzZXRmIHNtaWwgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgbWliIHwKKwlcIGVuZGlmCisKKyIgU01JVEgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNtdCwqLnNtaXRoCQlzZXRmIHNtaXRoCisKKyIgU25vYm9sNCBhbmQgc3BpdGJvbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc25vLCouc3B0CQlzZXRmIHNub2JvbDQKKworIiBTTk1QIE1JQiBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubWliLCoubXkJCXNldGYgbWliCisKKyIgU25vcnQgQ29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaG9nLHNub3J0LmNvbmYsdmlzaW9uLmNvbmYJc2V0ZiBob2cKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnJ1bGVzCQkJY2FsbCBzOkZUUnVsZXMoKQorCitsZXQgczpmdF9ydWxlc191ZGV2X3J1bGVzX3BhdHRlcm4gPSAnXlxzKlxjdWRldl9ydWxlc1xzKj1ccyoiXChbXiJdXHstMSx9XCkvKiIuKicKK2Z1bmMhIHM6RlRSdWxlcygpCisgIGlmIGV4cGFuZCgnPGFtYXRjaD46cCcpID1+ICdeL2V0Yy91ZGV2L3J1bGVzXC5kLy4qXC5ydWxlcyQnCisgICAgc2V0ZiB1ZGV2cnVsZXMKKyAgICByZXR1cm4KKyAgZW5kaWYKKyAgdHJ5CisgICAgbGV0IGNvbmZpZ19saW5lcyA9IHJlYWRmaWxlKCcvZXRjL3VkZXYvdWRldi5jb25mJykKKyAgY2F0Y2ggL15WaW1cJSgoXGFcKylcKVw9OkU0ODQvCisgICAgc2V0ZiBob2cKKyAgICByZXR1cm4KKyAgZW5kdHJ5CisgIGxldCBkaXIgPSBleHBhbmQoJzxhbWF0Y2g+OnA6aCcpCisgIGZvciBsaW5lIGluIGNvbmZpZ19saW5lcworICAgIGlmIGxpbmUgPX4gczpmdF9ydWxlc191ZGV2X3J1bGVzX3BhdHRlcm4KKyAgICAgIGxldCB1ZGV2X3J1bGVzID0gc3Vic3RpdHV0ZShsaW5lLCBzOmZ0X3J1bGVzX3VkZXZfcnVsZXNfcGF0dGVybiwgJ1wxJywgIiIpCisgICAgICBpZiBkaXIgPT0gdWRldl9ydWxlcworICAgICAgICBzZXRmIHVkZXZydWxlcworICAgICAgZW5kaWYKKyAgICAgIGJyZWFrCisgICAgZW5kaWYKKyAgZW5kZm9yCisgIHNldGYgaG9nCitlbmRmdW5jCisKKworIiBTcGVjIChMaW51eCBSUE0pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcGVjCQkJc2V0ZiBzcGVjCisKKyIgU3BlZWR1cCAoQXNwZW5UZWNoIHBsYW50IHNpbXVsYXRvcikKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNwZWVkdXAsKi5zcGRhdGEsKi5zcGQJc2V0ZiBzcHVwCisKKyIgU2xpY2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmljZQkJCXNldGYgc2xpY2UKKworIiBTcGljZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc3AsKi5zcGljZQkJc2V0ZiBzcGljZQorCisiIFNweWNlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcHksKi5zcGkJCXNldGYgc3B5Y2UKKworIiBTcXVpZAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIHNxdWlkLmNvbmYJCXNldGYgc3F1aWQKKworIiBTUUwgZm9yIE9yYWNsZSBEZXNpZ25lcgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudHliLCoudHlwLCoudHljLCoucGtiLCoucGtzCXNldGYgc3FsCisKKyIgU1FMCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zcWwJCQljYWxsIHM6U1FMKCkKKworZnVuYyEgczpTUUwoKQorICBpZiBleGlzdHMoImc6ZmlsZXR5cGVfc3FsIikKKyAgICBleGUgInNldGYgIiAuIGc6ZmlsZXR5cGVfc3FsCisgIGVsc2UKKyAgICBzZXRmIHNxbAorICBlbmRpZgorZW5kZnVuYworCisiIFNRTEoKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNxbGoJCQlzZXRmIHNxbGoKKworIiBTUVIKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnNxciwqLnNxaQkJc2V0ZiBzcXIKKworIiBPcGVuU1NIIGNvbmZpZ3VyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBzc2hfY29uZmlnLCovLnNzaC9jb25maWcJc2V0ZiBzc2hjb25maWcKKworIiBPcGVuU1NIIHNlcnZlciBjb25maWd1cmF0aW9uCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgc3NoZF9jb25maWcJCXNldGYgc3NoZGNvbmZpZworCisiIFN0YXRhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5hZG8sKi5jbGFzcywqLmRvLCouaW1hdGEsKi5tYXRhICAgc2V0ZiBzdGF0YQorCisiIFNNQ0wKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmhscCwqLmlobHAsKi5zbWNsCXNldGYgc21jbAorCisiIFN0b3JlZCBQcm9jZWR1cmVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zdHAJCQlzZXRmIHN0cAorCisiIFN0YW5kYXJkIE1MCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5zbWwJCQlzZXRmIHNtbAorCisiIFNyYXR1cyBWT1MgY29tbWFuZCBtYWNybworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouY20JCQlzZXRmIHZvc2NtCisKKyIgU3lzY3RsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zeXNjdGwuY29uZgkJc2V0ZiBzeXNjdGwKKworIiBTdWRvZXJzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy9zdWRvZXJzLHN1ZG9lcnMudG1wCXNldGYgc3Vkb2VycworCisiIElmIHRoZSBmaWxlIGhhcyBhbiBleHRlbnNpb24gb2YgJ3QnIGFuZCBpcyBpbiBhIGRpcmVjdG9yeSAndCcgdGhlbiBpdCBpcworIiBhbG1vc3QgY2VydGFpbmx5IGEgUGVybCB0ZXN0IGZpbGUuCisiIElmIHRoZSBmaXJzdCBsaW5lIHN0YXJ0cyB3aXRoICcjJyBhbmQgY29udGFpbnMgJ3BlcmwnIGl0J3MgcHJvYmFibHkgYSBQZXJsCisiIGZpbGUuCisiIChTbG93IHRlc3QpIElmIGEgZmlsZSBjb250YWlucyBhICd1c2UnIHN0YXRlbWVudCB0aGVuIGl0IGlzIGFsbW9zdCBjZXJ0YWlubHkKKyIgYSBQZXJsIGZpbGUuCitmdW5jISBzOkZUcGVybCgpCisgIGlmIGV4cGFuZCgiJTplIikgPT0gJ3QnICYmIGV4cGFuZCgiJTpwOmg6dCIpID09ICd0JworICAgIHNldGYgcGVybAorICAgIHJldHVybiAxCisgIGVuZGlmCisgIGlmIGdldGxpbmUoMSlbMF0gPT0gJyMnICYmIGdldGxpbmUoMSkgPX4gJ3BlcmwnCisgICAgc2V0ZiBwZXJsCisgICAgcmV0dXJuIDEKKyAgZW5kaWYKKyAgaWYgc2VhcmNoKCdedXNlXHNccypcaycsICduYycsIDMwKQorICAgIHNldGYgcGVybAorICAgIHJldHVybiAxCisgIGVuZGlmCisgIHJldHVybiAwCitlbmRmdW5jCisKKyIgVGFkcyAob3IgTnJvZmYgb3IgUGVybCB0ZXN0IGZpbGUpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50CisJXCBpZiAhczpGVG5yb2ZmKCkgJiYgIXM6RlRwZXJsKCkgfCBzZXRmIHRhZHMgfCBlbmRpZgorCisiIFRhZ3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB0YWdzCQkJc2V0ZiB0YWdzCisKKyIgVEFLCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50YWsJCQlzZXRmIHRhaworCisiIFRjbCAoSkFDTCB0b28pCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50Y2wsKi50aywqLml0Y2wsKi5pdGssKi5qYWNsCXNldGYgdGNsCisKKyIgVGVhbEluZm8KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnRsaQkJCXNldGYgdGxpCisKKyIgVGVsaXggU2FsdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2x0CQkJc2V0ZiB0c2FsdAorCisiIFRlcm1pbmZvCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50aQkJCXNldGYgdGVybWluZm8KKworIiBUZVgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmxhdGV4LCouc3R5LCouZHR4LCoubHR4LCouYmJsCXNldGYgdGV4CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50ZXgJCQljYWxsIHM6RlR0ZXgoKQorCisiIENob29zZSBjb250ZXh0LCBwbGFpbnRleCwgb3IgdGV4IChMYVRlWCkgYmFzZWQgb24gdGhlc2UgcnVsZXM6CisiIDEuIENoZWNrIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlIGZvciAiJSY8Zm9ybWF0PiIuCisiIDIuIENoZWNrIHRoZSBmaXJzdCAxMDAwIG5vbi1jb21tZW50IGxpbmVzIGZvciBMYVRlWCBvciBDb25UZVh0IGtleXdvcmRzLgorIiAzLiBEZWZhdWx0IHRvICJsYXRleCIgb3IgdG8gZzp0ZXhfZmxhdm9yLCBjYW4gYmUgc2V0IGluIHVzZXIncyB2aW1yYy4KK2Z1bmMhIHM6RlR0ZXgoKQorICBsZXQgZmlyc3RsaW5lID0gZ2V0bGluZSgxKQorICBpZiBmaXJzdGxpbmUgPX4gJ14lJlxzKlxhXCsnCisgICAgbGV0IGZvcm1hdCA9IHRvbG93ZXIobWF0Y2hzdHIoZmlyc3RsaW5lLCAnXGFcKycpKQorICAgIGxldCBmb3JtYXQgPSBzdWJzdGl0dXRlKGZvcm1hdCwgJ3BkZicsICcnLCAnJykKKyAgICBpZiBmb3JtYXQgPT0gJ3RleCcKKyAgICAgIGxldCBmb3JtYXQgPSAncGxhaW4nCisgICAgZW5kaWYKKyAgZWxzZQorICAgICIgRGVmYXVsdCB2YWx1ZSwgbWF5IGJlIGNoYW5nZWQgbGF0ZXI6CisgICAgbGV0IGZvcm1hdCA9IGV4aXN0cygiZzp0ZXhfZmxhdm9yIikgPyBnOnRleF9mbGF2b3IgOiAncGxhaW4nCisgICAgIiBTYXZlIHBvc2l0aW9uLCBnbyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLCBmaW5kIGZpcnN0IG5vbi1jb21tZW50IGxpbmUuCisgICAgbGV0IHNhdmVfY3Vyc29yID0gZ2V0cG9zKCcuJykKKyAgICBjYWxsIGN1cnNvcigxLDEpCisgICAgbGV0IGZpcnN0TkMgPSBzZWFyY2goJ15ccypbXls6c3BhY2U6XSVdJywgJ2MnLCAxMDAwKQorICAgIGlmIGZpcnN0TkMgIiBDaGVjayB0aGUgbmV4dCB0aG91c2FuZCBsaW5lcyBmb3IgYSBMYVRlWCBvciBDb25UZVh0IGtleXdvcmQuCisgICAgICBsZXQgbHBhdCA9ICdkb2N1bWVudGNsYXNzXD5cfHVzZXBhY2thZ2VcPlx8YmVnaW57XHxuZXdjb21tYW5kXD5cfHJlbmV3Y29tbWFuZFw+JworICAgICAgbGV0IGNwYXQgPSAnc3RhcnRcYVwrXHxzZXR1cFxhXCtcfHVzZW1vZHVsZVx8ZW5hYmxlbW9kZVx8ZW5hYmxlcmVnaW1lXHxzZXR2YXJpYWJsZXNcfHVzZWVuY29kaW5nXHx1c2VzeW1ib2xzXHxzdGVsbGVcYVwrXHx2ZXJ3ZW5kZVxhXCtcfHN0ZWxcYVwrXHxnZWJydWlrXGFcK1x8dXNhXGFcK1x8aW1wb3N0YVxhXCtcfHJlZ2xlXGFcK1x8dXRpbGlzZW1vZHVsZVw+JworICAgICAgbGV0IGt3bGluZSA9IHNlYXJjaCgnXlxzKlxcXCUoJyAuIGxwYXQgLiAnXClcfF5ccypcXFwoJyAuIGNwYXQgLiAnXCknLAorCQkJICAgICAgXCAnY25wJywgZmlyc3ROQyArIDEwMDApCisgICAgICBpZiBrd2xpbmUgPT0gMQkiIGxwYXQgbWF0Y2hlZAorCWxldCBmb3JtYXQgPSAnbGF0ZXgnCisgICAgICBlbHNlaWYga3dsaW5lID09IDIJIiBjcGF0IG1hdGNoZWQKKwlsZXQgZm9ybWF0ID0gJ2NvbnRleHQnCisgICAgICBlbmRpZgkJIiBJZiBuZWl0aGVyIG1hdGNoZWQsIGtlZXAgZGVmYXVsdCBzZXQgYWJvdmUuCisgICAgICAiIGxldCBsbGluZSA9IHNlYXJjaCgnXlxzKlxcXCUoJyAuIGxwYXQgLiAnXCknLCAnY24nLCBmaXJzdE5DICsgMTAwMCkKKyAgICAgICIgbGV0IGNsaW5lID0gc2VhcmNoKCdeXHMqXFxcJSgnIC4gY3BhdCAuICdcKScsICdjbicsIGZpcnN0TkMgKyAxMDAwKQorICAgICAgIiBpZiBjbGluZSA+IDAKKyAgICAgICIgICBsZXQgZm9ybWF0ID0gJ2NvbnRleHQnCisgICAgICAiIGVuZGlmCisgICAgICAiIGlmIGxsaW5lID4gMCAmJiAoY2xpbmUgPT0gMCB8fCBjbGluZSA+IGxsaW5lKQorICAgICAgIiAgIGxldCBmb3JtYXQgPSAndGV4JworICAgICAgIiBlbmRpZgorICAgIGVuZGlmICIgZmlyc3ROQworICAgIGNhbGwgc2V0cG9zKCcuJywgc2F2ZV9jdXJzb3IpCisgIGVuZGlmICIgZmlyc3RsaW5lID1+ICdeJSZccypcYVwrJworCisgICIgVHJhbnNsYXRpb24gZnJvbSBmb3JtYXRzIHRvIGZpbGUgdHlwZXMuICBUT0RPOiAgYWRkIEFNU1RlWCwgUmV2VGV4LCBvdGhlcnM/CisgIGlmIGZvcm1hdCA9PSAncGxhaW4nCisgICAgc2V0ZiBwbGFpbnRleAorICBlbHNlaWYgZm9ybWF0ID09ICdjb250ZXh0JworICAgIHNldGYgY29udGV4dAorICBlbHNlICIgcHJvYmFibHkgTGFUZVgKKyAgICBzZXRmIHRleAorICBlbmRpZgorICByZXR1cm4KK2VuZGZ1bmMKKworIiBDb25UZVh0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgdGV4L2NvbnRleHQvKi8qLnRleCwqLm1raWksKi5ta2l2ICAgc2V0ZiBjb250ZXh0CisKKyIgVGV4aW5mbworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGV4aW5mbywqLnRleGksKi50eGkJc2V0ZiB0ZXhpbmZvCisKKyIgVGVYIGNvbmZpZ3VyYXRpb24KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB0ZXhtZi5jbmYJCQlzZXRmIHRleG1mCisKKyIgVGlkeSBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAudGlkeXJjLHRpZHlyYwkJc2V0ZiB0aWR5CisKKyIgVEYgbXVkIGNsaWVudAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudGYsLnRmcmMsdGZyYwkJc2V0ZiB0ZgorCisiIFRQUCAtIFRleHQgUHJlc2VudGF0aW9uIFByb2dyYW0KK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZFBvc3QgKi50cHAJCQlzZXRmIHRwcAorCisiIFRydXN0ZWVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgdHJ1c3RlZXMuY29uZgkJc2V0ZiB0cnVzdGVlcworCisiIFRTUyAtIEdlb21ldHJ5CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWRQb3N0ICoudHNzZ20JCXNldGYgdHNzZ20KKworIiBUU1MgLSBPcHRpY3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZFBvc3QgKi50c3NvcAkJc2V0ZiB0c3NvcAorCisiIFRTUyAtIENvbW1hbmQgTGluZSAodGVtcG9yYXJ5KQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkUG9zdCAqLnRzc2NsCQlzZXRmIHRzc2NsCisKKyIgTW90aWYgVUlUL1VJTCBmaWxlcworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudWl0LCoudWlsCQlzZXRmIHVpbAorCisiIFVkZXYgY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvdWRldi91ZGV2LmNvbmYJc2V0ZiB1ZGV2Y29uZgorCisiIFVkZXYgcGVybWlzc2lvbnMKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3VkZXYvcGVybWlzc2lvbnMuZC8qLnBlcm1pc3Npb25zIHNldGYgdWRldnBlcm0KKyIKKyIgVWRldiBzeW1saW5rcyBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3VkZXYvY2RzeW1saW5rcy5jb25mCXNldGYgc2gKKworIiBVbnJlYWxTY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnVjCQkJc2V0ZiB1YworCisiIFVwZGF0ZWRiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgL2V0Yy91cGRhdGVkYi5jb25mCXNldGYgdXBkYXRlZGIKKworIiBWZXJhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi52ciwqLnZyaSwqLnZyaAkJc2V0ZiB2ZXJhCisKKyIgVmVyaWxvZyBIREwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnYJCQlzZXRmIHZlcmlsb2cKKworIiBWZXJpbG9nLUFNUyBIREwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnZhLCoudmFtcwkJc2V0ZiB2ZXJpbG9nYW1zCisKKyIgVkhETAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouaGRsLCoudmhkLCoudmhkbCwqLnZiZSwqLnZzdCAgc2V0ZiB2aGRsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi52aGRsX1swLTldKgkJY2FsbCBzOlN0YXJTZXRmKCd2aGRsJykKKworIiBWaW0gc2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi52aW0sKi52YmEsLmV4cmMsX2V4cmMJc2V0ZiB2aW0KKworIiBWaW1pbmZvIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAudmltaW5mbyxfdmltaW5mbwkJc2V0ZiB2aW1pbmZvCisKKyIgVmlyYXRhIENvbmZpZyBTY3JpcHQgRmlsZQorYXUgQnVmUmVhZCxCdWZOZXdGaWxlICouaHcsKi5tb2R1bGUsKi5wa2cJc2V0ZiB2aXJhdGEKKworIiBWaXN1YWwgQmFzaWMgKGFsc28gdXNlcyAqLmJhcykgb3IgRk9STQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouZnJtCQkJY2FsbCBzOkZUVkIoImZvcm0iKQorCisiIFNheEJhc2ljIGlzIGNsb3NlIHRvIFZpc3VhbCBCYXNpYworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouc2JhCQkJc2V0ZiB2YgorCisiIFZncmluZGVmcyBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgdmdyaW5kZWZzCQkJc2V0ZiB2Z3JpbmRlZnMKKworIiBWUk1MIFYxLjBjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53cmwJCQlzZXRmIHZybWwKKworIiBXZWJtYWNybworYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoud20JCQlzZXRmIHdlYm1hY3JvCisKKyIgV2dldCBjb25maWcKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAud2dldHJjLHdnZXRyYwkJc2V0ZiB3Z2V0CisKKyIgV2Vic2l0ZSBNZXRhTGFuZ3VhZ2UKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndtbAkJCXNldGYgd21sCisKKyIgV2luYmF0Y2gKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndidAkJCXNldGYgd2luYmF0Y2gKKworIiBXU01MCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi53c21sCQkJc2V0ZiB3c21sCisKKyIgV3ZEaWFsCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgd3ZkaWFsLmNvbmYsLnd2ZGlhbHJjCXNldGYgd3ZkaWFsCisKKyIgQ1ZTIFJDIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAuY3ZzcmMJCQlzZXRmIGN2c3JjCisKKyIgQ1ZTIGNvbW1pdCBmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgY3ZzXGRcKwkJCXNldGYgY3ZzCisKKyIgV0VCICgqLndlYiBpcyBhbHNvIHVzZWQgZm9yIFdpbmJhdGNoOiBHdWVzcywgYmFzZWQgb24gZXhwZWN0aW5nICIlIiBjb21tZW50CisiIGxpbmVzIGluIGEgV0VCIGZpbGUpLgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoud2ViCisJXCBpZiBnZXRsaW5lKDEpWzBdLmdldGxpbmUoMilbMF0uZ2V0bGluZSgzKVswXS5nZXRsaW5lKDQpWzBdLmdldGxpbmUoNSlbMF0gPX4gIiUiIHwKKwlcICAgc2V0ZiB3ZWIgfAorCVwgZWxzZSB8CisJXCAgIHNldGYgd2luYmF0Y2ggfAorCVwgZW5kaWYKKworIiBXaW5kb3dzIFNjcmlwdGluZyBIb3N0IGFuZCBXaW5kb3dzIFNjcmlwdCBDb21wb25lbnQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLndzW2ZjXQkJCXNldGYgd3NoCisKKyIgWEhUTUwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhodG1sLCoueGh0CQlzZXRmIHhodG1sCisKKyIgWCBQaXhtYXAgKGR5bmFtaWNhbGx5IHNldHMgY29sb3JzLCB1c2UgQnVmRW50ZXIgdG8gbWFrZSBpdCB3b3JrIGJldHRlcikKK2F1IEJ1ZkVudGVyICoueHBtCisJXCBpZiBnZXRsaW5lKDEpID1+ICJYUE0yIiB8CisJXCAgIHNldGYgeHBtMiB8CisJXCBlbHNlIHwKKwlcICAgc2V0ZiB4cG0gfAorCVwgZW5kaWYKK2F1IEJ1ZkVudGVyICoueHBtMgkJCQlzZXRmIHhwbTIKKworIiBYRnJlZTg2IGNvbmZpZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFhGODZDb25maWcKKwlcIGlmIGdldGxpbmUoMSkgPX4gJ1w8WENvbmZpZ3VyYXRvclw+JyB8CisJXCAgIGxldCBiOnhmODZjX3hmcmVlODZfdmVyc2lvbiA9IDMgfAorCVwgZW5kaWYgfAorCVwgc2V0ZiB4Zjg2Y29uZgorCisiIFhvcmcgY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgeG9yZy5jb25mLHhvcmcuY29uZi00CWxldCBiOnhmODZjX3hmcmVlODZfdmVyc2lvbiA9IDQgfCBzZXRmIHhmODZjb25mCisKKyIgWGluZXRkIGNvbmYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAvZXRjL3hpbmV0ZC5jb25mCQlzZXRmIHhpbmV0ZAorCisiIFhTIFBlcmwgZXh0ZW5zaW9uIGludGVyZmFjZSBsYW5ndWFnZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueHMJCQlzZXRmIHhzCisKKyIgWCByZXNvdXJjZXMgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC5YZGVmYXVsdHMsLlhwZGVmYXVsdHMsLlhyZXNvdXJjZXMseGRtLWNvbmZpZywqLmFkIHNldGYgeGRlZmF1bHRzCisKKyIgWG1hdGgKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLm1zYywqLm1zZgkJc2V0ZiB4bWF0aAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoubXMKKwlcIGlmICFzOkZUbnJvZmYoKSB8IHNldGYgeG1hdGggfCBlbmRpZgorCisiIFhNTCAgc3BlY2lmaWMgdmFyaWFudHM6IGRvY2JrIGFuZCB4YmwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhtbAkJCWNhbGwgczpGVHhtbCgpCisKK2Z1bmMhIHM6RlR4bWwoKQorICBsZXQgbiA9IDEKKyAgd2hpbGUgbiA8IDEwMCAmJiBuIDwgbGluZSgiJCIpCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lKG4pCisgICAgaWYgbGluZSA9fiAnPCFET0NUWVBFLipEb2NCb29rJworICAgICAgbGV0IGI6ZG9jYmtfdHlwZSA9ICJ4bWwiCisgICAgICBzZXRmIGRvY2JrCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGxpbmUgPX4gJ3htbG5zOnhibD0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy94YmwiJworICAgICAgc2V0ZiB4YmwKKyAgICAgIHJldHVybgorICAgIGVuZGlmCisgICAgbGV0IG4gKz0gMQorICBlbmR3aGlsZQorICBzZXRmIHhtbAorZW5kZnVuYworCisiIFhNSSAoaG9sZGluZyBVTUwgbW9kZWxzKSBpcyBhbHNvIFhNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueG1pCQkJc2V0ZiB4bWwKKworIiBDU1BST0ogZmlsZXMgYXJlIFZpc3VhbCBTdHVkaW8uTkVUJ3MgWE1MLWJhc2VkIHByb2plY3QgY29uZmlnIGZpbGVzCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jc3Byb2osKi5jc3Byb2oudXNlcglzZXRmIHhtbAorCisiIFF0IExpbmd1aXN0IHRyYW5zbGF0aW9uIHNvdXJjZSBhbmQgUXQgVXNlciBJbnRlcmZhY2UgRmlsZXMgYXJlIFhNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoudHMsKi51aQkJCXNldGYgeG1sCisKKyIgVFBNJ3MgYXJlIFJERi1iYXNlZCBkZXNjcmlwdGlvbnMgb2YgVGVYIHBhY2thZ2VzIChOaWtvbGFpIFdlaWJ1bGwpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi50cG0JCQlzZXRmIHhtbAorCisiIFhkZyBtZW51cworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMveGRnL21lbnVzLyoubWVudQlzZXRmIHhtbAorCisiIEFUSSBncmFwaGljcyBkcml2ZXIgY29uZmlndXJhdGlvbgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGZnbHJ4cmMJCQlzZXRmIHhtbAorCisiIFhMSUZGIChYTUwgTG9jYWxpc2F0aW9uIEludGVyY2hhbmdlIEZpbGUgRm9ybWF0KSBpcyBhbHNvIFhNTAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoueGxmCQkJc2V0ZiB4bWwKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhsaWZmCQkJc2V0ZiB4bWwKKworIiBYMTEgeG1vZG1hcCAoYWxzbyBzZWUgYmVsb3cpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKlhtb2RtYXAJCQlzZXRmIHhtb2RtYXAKKworIiBYcXVlcnkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhxLCoueHFsLCoueHFtLCoueHF1ZXJ5LCoueHF5CXNldGYgeHF1ZXJ5CisKKyIgWFNECithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi54c2QJCQlzZXRmIHhzZAorCisiIFhzbHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnhzbCwqLnhzbHQJCXNldGYgeHNsdAorCisiIFlhY2MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLnl5CQkJc2V0ZiB5YWNjCisKKyIgWWFjYyBvciByYWNjCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi55CQkJY2FsbCBzOkZUeSgpCisKK2Z1bmMhIHM6RlR5KCkKKyAgbGV0IG4gPSAxCisgIHdoaWxlIG4gPCAxMDAgJiYgbiA8IGxpbmUoIiQiKQorICAgIGxldCBsaW5lID0gZ2V0bGluZShuKQorICAgIGlmIGxpbmUgPX4gJ15ccyolJworICAgICAgc2V0ZiB5YWNjCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGlmIGdldGxpbmUobikgPX4gJ15ccypcKCNcfGNsYXNzXD5cKScgJiYgZ2V0bGluZShuKSAhfiAnXlxzKiNccyppbmNsdWRlJworICAgICAgc2V0ZiByYWNjCisgICAgICByZXR1cm4KKyAgICBlbmRpZgorICAgIGxldCBuID0gbiArIDEKKyAgZW5kd2hpbGUKKyAgc2V0ZiB5YWNjCitlbmRmdW5jCisKKworIiBZYW1sCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi55YW1sLCoueW1sCQlzZXRmIHlhbWwKKworIiBab3BlCisiICAgZHRtbCAoem9wZSBkeW5hbWljIHRlbXBsYXRlIG1hcmt1cCBsYW5ndWFnZSksIHB0ICh6b3BlIHBhZ2UgdGVtcGxhdGUpLAorIiAgIGNwdCAoem9wZSBmb3JtIGNvbnRyb2xsZXIgcGFnZSB0ZW1wbGF0ZSkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLmR0bWwsKi5wdCwqLmNwdAkJY2FsbCBzOkZUaHRtbCgpCisiICAgenNxbCAoem9wZSBzcWwgbWV0aG9kKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICouenNxbAkJCWNhbGwgczpTUUwoKQorCisiIFo4MCBhc3NlbWJsZXIgYXN6ODAKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqLno4YQkJCXNldGYgejhhCisKK2F1Z3JvdXAgRU5ECisKKworIiBTb3VyY2UgdGhlIHVzZXItc3BlY2lmaWVkIGZpbGV0eXBlIGZpbGUsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoCisiIFZpbSA1LnguCitpZiBleGlzdHMoIm15ZmlsZXR5cGVmaWxlIikgJiYgZmlsZXJlYWRhYmxlKGV4cGFuZChteWZpbGV0eXBlZmlsZSkpCisgIGV4ZWN1dGUgInNvdXJjZSAiIC4gbXlmaWxldHlwZWZpbGUKK2VuZGlmCisKKworIiBDaGVjayBmb3IgIioiIGFmdGVyIGxvYWRpbmcgbXlmaWxldHlwZWZpbGUsIHNvIHRoYXQgc2NyaXB0cy52aW0gaXMgb25seSB1c2VkCisiIHdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGZpbGUgbmFtZSBleHRlbnNpb25zLgorIiBEb24ndCBkbyB0aGlzIGZvciBjb21wcmVzc2VkIGZpbGVzLgorYXVncm91cCBmaWxldHlwZWRldGVjdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKSAmJiBleHBhbmQoIjxhbWF0Y2g+IikgIX4gZzpmdF9pZ25vcmVfcGF0CisJXCB8IHJ1bnRpbWUhIHNjcmlwdHMudmltIHwgZW5kaWYKK2F1IFN0ZGluUmVhZFBvc3QgKiBpZiAhZGlkX2ZpbGV0eXBlKCkgfCBydW50aW1lISBzY3JpcHRzLnZpbSB8IGVuZGlmCisKKworIiBFeHRyYSBjaGVja3MgZm9yIHdoZW4gbm8gZmlsZXR5cGUgaGFzIGJlZW4gZGV0ZWN0ZWQgbm93LiAgTW9zdGx5IHVzZWQgZm9yCisiIHBhdHRlcm5zIHRoYXQgZW5kIGluICIqIi4gIEUuZy4sICJ6c2gqIiBtYXRjaGVzICJ6c2gudmltIiwgYnV0IHRoYXQncyBhIFZpbQorIiBzY3JpcHQgZmlsZS4KKyIgTW9zdCBvZiB0aGVzZSBzaG91bGQgY2FsbCBzOlN0YXJTZXRmKCkgdG8gYXZvaWQgbmFtZXMgZW5kaW5nIGluIC5neiBhbmQgdGhlCisiIGxpa2UgYXJlIHVzZWQuCisKKyIgQXN0ZXJpc2sgY29uZmlnIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqYXN0ZXJpc2svKi5jb25mKgkJY2FsbCBzOlN0YXJTZXRmKCdhc3RlcmlzaycpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmFzdGVyaXNrKi8qdm9pY2VtYWlsLmNvbmYqIGNhbGwgczpTdGFyU2V0ZignYXN0ZXJpc2t2bScpCisKKyIgQmF6YWFyIHZlcnNpb24gY29udHJvbAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIGJ6cl9sb2cuKgkJCXNldGYgYnpyCisKKyIgQklORCB6b25lCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi9uYW1lZC9kYi4qLCovYmluZC9kYi4qCWNhbGwgczpTdGFyU2V0ZignYmluZHpvbmUnKQorCisiIENoYW5nZWxvZworYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFtjQ11oYW5nZVtsTF1vZyoKKwlcIGlmIGdldGxpbmUoMSkgPX4gJzsgdXJnZW5jeT0nCisJXHwgIGNhbGwgczpTdGFyU2V0ZignZGViY2hhbmdlbG9nJykKKwlcfGVsc2UKKwlcfCAgY2FsbCBzOlN0YXJTZXRmKCdjaGFuZ2Vsb2cnKQorCVx8ZW5kaWYKKworIiBDcm9udGFiCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgY3JvbnRhYixjcm9udGFiLioJCWNhbGwgczpTdGFyU2V0ZignY3JvbnRhYicpCisKKyIgRGViaWFuIFNvdXJjZXMubGlzdAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvYXB0L3NvdXJjZXMubGlzdC5kLyoJY2FsbCBzOlN0YXJTZXRmKCdkZWJzb3VyY2VzJykKKworIiBEcmFjdWxhCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgZHJhYy4qCQkJY2FsbCBzOlN0YXJTZXRmKCdkcmFjdWxhJykKKworIiBGdndtCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi8uZnZ3bS8qCQkJY2FsbCBzOlN0YXJTZXRmKCdmdndtJykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqZnZ3bXJjKiwqZnZ3bTk1Ki5ob29rCisJXCBsZXQgYjpmdndtX3ZlcnNpb24gPSAxIHwgY2FsbCBzOlN0YXJTZXRmKCdmdndtJykKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqZnZ3bTJyYyoKKwlcIGlmIGV4cGFuZCgiPGFmaWxlPjplIikgPT0gIm00IgorCVx8ICBjYWxsIHM6U3RhclNldGYoJ2Z2d20ybTQnKQorCVx8ZWxzZQorCVx8ICBsZXQgYjpmdndtX3ZlcnNpb24gPSAyIHwgY2FsbCBzOlN0YXJTZXRmKCdmdndtJykKKwlcfGVuZGlmCisKKyIgR1RLIFJDCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgLmd0a3JjKixndGtyYyoJCWNhbGwgczpTdGFyU2V0ZignZ3RrcmMnKQorCisiIEphbQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFBybCouKixKQU0qLioJCWNhbGwgczpTdGFyU2V0ZignamFtJykKKworIiBKYXJnb24KK2F1ISBCdWZOZXdGaWxlLEJ1ZlJlYWQgKmphcmcqCisJXCBpZiBnZXRsaW5lKDEpLmdldGxpbmUoMikuZ2V0bGluZSgzKS5nZXRsaW5lKDQpLmdldGxpbmUoNSkgPX4/ICdUSElTIElTIFRIRSBKQVJHT04gRklMRScKKwlcfCAgY2FsbCBzOlN0YXJTZXRmKCdqYXJnb24nKQorCVx8ZW5kaWYKKworIiBLY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgS2NvbmZpZy4qCQkJY2FsbCBzOlN0YXJTZXRmKCdrY29uZmlnJykKKworIiBNYWtlZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFttTV1ha2VmaWxlKgkJY2FsbCBzOlN0YXJTZXRmKCdtYWtlJykKKworIiBSdWJ5IE1ha2VmaWxlCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgW3JSXWFrZWZpbGUqCQljYWxsIHM6U3RhclNldGYoJ3J1YnknKQorCisiIE1haWwgKGFsc28gbWF0Y2hlcyBtdXR0cmMudmltLCBzbyB0aGlzIGlzIGJlbG93IHRoZSBvdGhlciBjaGVja3MpCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgbXV0dFtbOmFsbnVtOl0uXy1dXHs2XH0Jc2V0ZiBtYWlsCisKKyIgTW9kY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvbW9kcHJvYmUuKgkJY2FsbCBzOlN0YXJTZXRmKCdtb2Rjb25mJykKKworIiBNdXR0IHNldHVwIGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAubXV0dHtuZyx9cmMqLCovLm11dHR7bmcsfS9tdXR0e25nLH1yYyoJY2FsbCBzOlN0YXJTZXRmKCdtdXR0cmMnKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIG11dHR7bmcsfXJjKixNdXR0e25nLH1yYyoJCWNhbGwgczpTdGFyU2V0ZignbXV0dHJjJykKKworIiBOcm9mZiBtYWNyb3MKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCB0bWFjLioJCQljYWxsIHM6U3RhclNldGYoJ25yb2ZmJykKKworIiBQYW0gY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMvcGFtLmQvKgkJY2FsbCBzOlN0YXJTZXRmKCdwYW1jb25mJykKKworIiBQcmludGNhcCBhbmQgVGVybWNhcAorYXUgQnVmTmV3RmlsZSxCdWZSZWFkICpwcmludGNhcCoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKQorCVx8ICBsZXQgYjpwdGNhcF90eXBlID0gInByaW50IiB8IGNhbGwgczpTdGFyU2V0ZigncHRjYXAnKQorCVx8ZW5kaWYKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqdGVybWNhcCoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKQorCVx8ICBsZXQgYjpwdGNhcF90eXBlID0gInRlcm0iIHwgY2FsbCBzOlN0YXJTZXRmKCdwdGNhcCcpCisJXHxlbmRpZgorCisiIFZpbSBzY3JpcHQKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCAqdmltcmMqCQkJY2FsbCBzOlN0YXJTZXRmKCd2aW0nKQorCisiIFN1YnZlcnNpb24gY29tbWl0IGZpbGUKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCBzdm4tY29tbWl0Ki50bXAJCXNldGYgc3ZuCisKKyIgWCByZXNvdXJjZXMgZmlsZQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFhyZXNvdXJjZXMqLCovYXBwLWRlZmF1bHRzLyosKi9YcmVzb3VyY2VzLyogY2FsbCBzOlN0YXJTZXRmKCd4ZGVmYXVsdHMnKQorCisiIFhGcmVlODYgY29uZmlnCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgWEY4NkNvbmZpZy00KgorCVwgbGV0IGI6eGY4NmNfeGZyZWU4Nl92ZXJzaW9uID0gNCB8IGNhbGwgczpTdGFyU2V0ZigneGY4NmNvbmYnKQorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIFhGODZDb25maWcqCisJXCBpZiBnZXRsaW5lKDEpID1+ICdcPFhDb25maWd1cmF0b3JcPicKKwlcfCAgbGV0IGI6eGY4NmNfeGZyZWU4Nl92ZXJzaW9uID0gMworCVx8ZW5kaWYKKwlcfGNhbGwgczpTdGFyU2V0ZigneGY4NmNvbmYnKQorCisiIFgxMSB4bW9kbWFwCithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKnhtb2RtYXAqCQkJY2FsbCBzOlN0YXJTZXRmKCd4bW9kbWFwJykKKworIiBYaW5ldGQgY29uZgorYXUgQnVmTmV3RmlsZSxCdWZSZWFkIC9ldGMveGluZXRkLmQvKgkJY2FsbCBzOlN0YXJTZXRmKCd4aW5ldGQnKQorCisiIFotU2hlbGwgc2NyaXB0CithdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgenNoKix6bG9nKgkJY2FsbCBzOlN0YXJTZXRmKCd6c2gnKQorCisKKyIgR2VuZXJpYyBjb25maWd1cmF0aW9uIGZpbGUgKGNoZWNrIHRoaXMgbGFzdCwgaXQncyBqdXN0IGd1ZXNzaW5nISkKK2F1IEJ1Zk5ld0ZpbGUsQnVmUmVhZCxTdGRpblJlYWRQb3N0ICoKKwlcIGlmICFkaWRfZmlsZXR5cGUoKSAmJiBleHBhbmQoIjxhbWF0Y2g+IikgIX4gZzpmdF9pZ25vcmVfcGF0CisJXCAgICAmJiAoZ2V0bGluZSgxKSA9fiAnXiMnIHx8IGdldGxpbmUoMikgPX4gJ14jJyB8fCBnZXRsaW5lKDMpID1+ICdeIycKKwlcCXx8IGdldGxpbmUoNCkgPX4gJ14jJyB8fCBnZXRsaW5lKDUpID1+ICdeIycpIHwKKwlcICAgc2V0ZiBjb25mIHwKKwlcIGVuZGlmCisKKyIgVXNlIHRoZSBwbHVnaW4tZmlsZXR5cGUgY2hlY2tzIGxhc3QsIHRoZXkgbWF5IG92ZXJydWxlIGFueSBvZiB0aGUgcHJldmlvdXNseQorIiBkZXRlY3RlZCBmaWxldHlwZXMuCitydW50aW1lISBmdGRldGVjdC8qLnZpbQorCithdWdyb3VwIEVORAorCisKKyIgSWYgdGhlIEdVSSBpcyBhbHJlYWR5IHJ1bm5pbmcsIG1heSBzdGlsbCBuZWVkIHRvIGluc3RhbGwgdGhlIFN5bnRheCBtZW51LgorIiBEb24ndCBkbyBpdCB3aGVuIHRoZSAnTScgZmxhZyBpcyBpbmNsdWRlZCBpbiAnZ3Vpb3B0aW9ucycuCitpZiBoYXMoIm1lbnUiKSAmJiBoYXMoImd1aV9ydW5uaW5nIikKKyAgICAgIFwgJiYgIWV4aXN0cygiZGlkX2luc3RhbGxfc3ludGF4X21lbnUiKSAmJiAmZ3Vpb3B0aW9ucyAhfiMgIk0iCisgIHNvdXJjZSA8c2ZpbGU+OnA6aC9tZW51LnZpbQorZW5kaWYKKworIiBGdW5jdGlvbiBjYWxsZWQgZm9yIHRlc3RpbmcgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUuICBUaGVzZSBhcmUKKyIgc2NyaXB0LWxvY2FsLCB0aHVzIG5lZWQgdG8gYmUgZXhlY3V0ZWQgaGVyZS4KKyIgUmV0dXJucyBhIHN0cmluZyB3aXRoIGVycm9yIG1lc3NhZ2VzIChob3BlZnVsbHkgZW1wdHkpLgorZnVuYyEgVGVzdEZpbGV0eXBlRnVuY3ModGVzdGxpc3QpCisgIGxldCBvdXRwdXQgPSAnJworICBmb3IgZiBpbiBhOnRlc3RsaXN0CisgICAgdHJ5CisgICAgICBleGUgZgorICAgIGNhdGNoCisgICAgICBsZXQgb3V0cHV0ID0gb3V0cHV0IC4gIlxuIiAuIGYgLiAiOiAiIC4gdjpleGNlcHRpb24KKyAgICBlbmR0cnkKKyAgZW5kZm9yCisgIHJldHVybiBvdXRwdXQKK2VuZGZ1bmMKKworIiBSZXN0b3JlICdjcG9wdGlvbnMnCitsZXQgJmNwbyA9IHM6Y3BvX3NhdmUKK3VubGV0IHM6Y3BvX3NhdmUKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvcnVudGltZS9mdG9mZi52aW0gYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvZnRvZmYudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3N2M2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvZnRvZmYudmltCkBAIC0wLDAgKzEsMTEgQEAKKyIgVmltIHN1cHBvcnQgZmlsZSB0byBzd2l0Y2ggb2ZmIGRldGVjdGlvbiBvZiBmaWxlIHR5cGVzCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDAxIEp1biAxMQorCitpZiBleGlzdHMoImRpZF9sb2FkX2ZpbGV0eXBlcyIpCisgIHVubGV0IGRpZF9sb2FkX2ZpbGV0eXBlcworZW5kaWYKKworIiBSZW1vdmUgYWxsIGF1dG9jb21tYW5kcyBpbiB0aGUgZmlsZXR5cGVkZXRlY3QgZ3JvdXAKK3NpbGVudCEgYXUhIGZpbGV0eXBlZGV0ZWN0ICoKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvcnVudGltZS92aW0zMngzMi5wbmcgYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvdmltMzJ4MzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTA0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvdmltMzJ4MzIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3J1bnRpbWUvdHV0b3IvcnVudGltZS92aW1sb2dvLnhwbSBiL3J1bnRpbWUvdHV0b3IvcnVudGltZS92aW1sb2dvLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2UwZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci9ydW50aW1lL3ZpbWxvZ28ueHBtCkBAIC0wLDAgKzEsNzUgQEAKKy8qIFhQTSAqLworc3RhdGljIGNoYXIgKnZpbWxvZ29bXSA9IHsKKy8qIHdpZHRoIGhlaWdodCBudW1fY29sb3JzIGNoYXJzX3Blcl9waXhlbCAqLworIiAgIDEyNSAgICA2MCAgICAgICAgOCAgICAgICAgICAgIDEiLAorLyogY29sb3JzICovCisiLiBjICMwMDAwMDAiLAorIiMgYyAjMDAwMDdmIiwKKyJhIGMgIzAwN2YwMCIsCisiYiBjICM3ZjdmN2YiLAorImMgYyAjMDBmZjAwIiwKKyJkIGMgI2JmYmZiZiIsCisiZSBjICNmZmZmZmYiLAorImYgYyBOb25lIiwKKy8qIHBpeGVscyAqLworImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLmNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLmNjY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmVlZWVlZWVlZWVlZWVlZWVlZWVlLmNjYWFjYy5lZWZmZWVlZWVlZWVlZWVlZWVlZWVlZWVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmVlLi4uLi4uLi4uLi4uLi4uLi4uLi5jYWFhYWNjLmVlZWUuLi4uLi4uLi4uLi4uLi4uLi4uZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmRlZWVlZWVlZWVlZWVlZWVlZWViLmFhYWFhY2MuZWUuZGVlZWVlZWVlZWVlZWVlZWVlYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZlLmRlZGRkZGRkZGRkZGRkZGRkZGRkZGIuYWFhYWFjYy4uZGVkZGRkZGRkZGRkZGRkZGRkZGQuYmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZS5lZGRkZGRkZGRkZGRkZGRkZGRkZGRiLmFhYWFhYWNjLmVkZGRkZGRkZGRkZGRkZGRkZGRkYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmUuZWRkZGRkZGRkZGRkZGRkZGRkZGRkYi5hYWFhYWFhYy5lZGRkZGRkZGRkZGRkZGRkZGRkZGIuZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZlLmVkZGRkZGRkZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWEuZWRkZGRkZGRkZGRkZGRkZGRkZGJiLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZS5iYmRkZGRkZGRkZGRkZGRkZGRkYmJiLmFhYWFhYWFhLmJiZGRkZGRkZGRkZGRkZGRkZGJiLmJlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmJiYmJkZGRkZGRkZGRkZGRiYmJiLmFhYWFhYWFhYWEuYmJiYmRkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmVlZWVlZWVlZWVlZWUuLi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZWUuLmJlZGRkZGRkZGRkZGRkYmJiLmFhYWFhYWFhYWFhYS4uZGVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZlLi4uLi4uLi4uLmVlLi4uZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZlZWUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZS4uLi4uLi4uLi5lZWUuLmVlZWVlZWZmZmVlZWVlZWVmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmUuLmVlLi5lZS4uZWZlLi5lLi4uLmVlZmVlLi4uLi5lZWZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZlLi5lZS4uZWUuLmVmZS4uLi4uLi4uZWVlLi4uLi4uLmVlZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZS4uZWUuLmVlLi5lZmUuLi5lZWUuLmVlLi5lZWVlZS4uZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlZWVlLi5lZWVlZWZlLi5lZWZlLi5lZS4uLi4uLi4uLmVmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkYmIuYWFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZS4uZWZmZmZmZS4uZWZmZS4uZWUuLi4uLi4uLi5lZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGJiLmFhYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUuLmVmZmZmZmUuLmVmZmUuLmVlLi5lZWVlZWVlZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmVlLmVkZGRkZGRkZGRkZGRiYi5hYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlLi5lZWVmZmVlLi5lZWVlLi5lZS4uLmVlZWUuLmVmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmVlLi5lZGRkZGRkZGRkZGRkYmIuYWFhYWEuZWVkZGRkZGRkZGRkZGJiYi5jLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmUuLi4uLi5lZmZlLi4uLmVlLi4uLmVlLi4uLi4uLi5lZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmVlLmMuZWRkZGRkZGRkZGRkZGJiLmFhYWEuZWVkZGRkZGRkZGRkZGJiYi5hY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlLi4uLi4uZWZmZS4uLi5lZS4uLi5lZWUuLi4uLi5lZWZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmVlLmNjLmVkZGRkZGRkZGRkZGRiYi5hYWEuZWVkZGRkZGRkZGRkZGJiYi5hYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVlZWVlZWVmZmVlZWVlZWVlZWVlZWZlZWVlZWVlZWZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmVlLmNjYS5lZGRkZGRkZGRkZGRkYmIuYWEuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmVlLmNjYWEuZWRkZGRkZGRkZGRkZGJiLmEuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmVlLmNjYWFhLmVkZGRkZGRkZGRkZGRiYi4uZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImVlLmNjYWFhYS5lZGRkZGRkZGRkZGRkYmIuZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWNjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJlLmNjYWFhYWEuZWRkZGRkZGRkZGRkZGJiZWVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhY2MuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiLi4uYWFhYWFhLmVkZGRkZGRkZGRkZGRiZGVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFjYy5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImUuIyNhYWFhYS5lZGRkZGRkZGRkZGRkYmVkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYS4uLmVmZmZmZmZmZmZmZmZmZmZmZWVlZWVmZmZmZWVlZWZmZmZmZWVlZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJlZS4jI2FhYWEuZWRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmUuLi5lZmZmZmUuLmVmZmZmZmUuLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmVlLiMjYWFhLmVkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmZlLi4uZWZmZmZlLi5lZmZmZmZlLi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZWUuIyNhYS5lZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWVlZWVlZWZmZmZlZWVlZWUuLmVmZWVlZWVlZWZmZmVlZS4uZWVlZWVmZmZlZWVlZWVlZmZlZWVlZWVlZWVlIiwKKyJmZmZlZS4jI2EuZWRkZGRkZGRkZGRkZGRkZGRkZGRkZGJiYi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWUuLi4uLmVlZmZlZS4uLi5lLi5lZmUuLi4uLmVmZmZlLi4uLi4uLi5lZmZlZS4uLi4uZWVmZS4uLi5lLi4uZSIsCisiZmZmZmVlLiMjLmVkZGRkZGRkZGRkZGRkZGRkZGRkZC4uLi5hYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZWUuLi4uLi4uZWVlZS4uLi4uLi4uZWZlLi4uLi5lZmZmZS4uLi4uLi4uZWZlZS4uLi4uLi5lZWUuLi4uLi4uLi4iLAorImZmZmZmZWUuIy5lZGRkZGRkZGRkZGRkZGRkZGRkZC5kYmIuYWFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmUuLmVlZWVlLi5lZS4uLmVlZS4uLmVmZWVlZS4uZWZmZmVlZS4uZWVlZWVmZS4uLmVlZS4uLmVlZWUuLi5lZS4uIiwKKyJmZmZmZmZlZS4uZWRkZGRkZGRkZGRkZGRkZGRkZGQuZGRiLmFhYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZlLi4uLi4uLi4uZWUuLmVlZmVlLi5lZmZmZmUuLmVmZmZmZmUuLmVmZmZmZmUuLmVlZmVlLi5lZmZlLi5lZWVlZSIsCisiZmZmZmZmZmVlLmVkZGRkZGRkZGRkZGRkZGRkZGRiLmJiYi5hYWFhYWFhYWFhYWFhYSMjLmVlZmZmZmZmZS4uLi4uLi4uLmVlLi5lZmZmZS4uZWZmZmZlLi5lZmZmZmZlLi5lZmZmZmZlLi5lZmZmZS4uZWZmZS4uZWZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkZGRkZGRiYmIuLi5hYWFhYWFhYWFhYWFhYSMjLmVlZWVlZWVmZmUuLmVlZWVlZWVlZS4uZWVmZWUuLmVmZmZmZS4uZWZmZmZmZS4uZWZlZWVlZS4uZWVmZWUuLmVmZmUuLmVmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGRkZGRiYi4uLi4uLmFhLi4uLi5hYS4uLi4uIy4uLi4uLmJlZWZlLi4uZWVlZS4uZWUuLi5lZWUuLi5lZWVlZWUuLmVlZWVmZmUuLmVlZS4uZWUuLi5lZWUuLi5lZWVlLi5lZWVlZSIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRkZGRiYmIuZGJiYi5hYS5kYmJiLi5kYmJiYi4uZGJiYmIuYmVmZWUuLi4uLi4uLmVlZS4uLi4uLi4uLmVlLi4uLi4uLi5lZmZlLi4uLi4uLmVlZS4uLi4uLi5lZWUuLi4uLi4uLmUiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRkZGRiYmIuLmJkZC5hYWEuYmRkZGJiZGRkZGRiYmRkZGRkYi5lZmZlZS4uLi4uLmVlZmVlLi4uLmUuLi5lZS4uLi4uLi4uZWZmZWUuLi4uZWVlZmVlLi4uLi5lZWZlLi4uLi4uLi5lIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRkZGRiYmIuYS5kZGIuYWFhLmRkZGRkZGRkZGRkZGRkZGRkZGIuZWZmZmVlZWVlZWVlZmZmZWVlZWVlZWVlZWVlZWVlZWVlZWVmZmZlZWVlZWVmZmZmZWVlZWVlZWZmZWVlZWVlZWVlZSIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRkZGRiYmIuYS5iZGRiLmFhLmJkZGRiYmJiZGRkZGJiYmJkZGRiLmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRkZGRiYmIuYWEuYmRkLmFhYS5iZGRiLi4uLmJkZGIuLi4uYmRkLmJlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRkZGRiYmIuYWFhLmRkYi5hYWEuZGRiLiMjYi5kZGIuZWViLmRkYi5lZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRkZGRiYmIuLmFhLmJkZGIuYWEuYmRkYi4jZS5iZGRiLmVlLmJkZGIuZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRkZGRiYmIuLmFhYS5iZGQuYWFhLmJkZC4jZWUuYmRkLmJlZS5iZGQuYmVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuZWRkZGRkZGRiYmIuYWFhYWEuZGRiLmFhYS5kZGIuZWViLmRkYi5lZWIuZGRiLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlLmVkZGRkZGRiYmIuIyNhYWEuYmRkYi5hYS5iZGRiLmVlLmJkZGIuZWUuYmRkYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZS5lZGRkZGRiYmIuZS4jI2FhLmJkZC5hYWEuYmRkLmJlZS5iZGQuYmVlLmJkZC5iZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmUuYmRkZGRiYmIuZWVlLiMjYS5kZGIuYWFhLmRkYi5lZWIuZGRiLmVlYi5kZGIuZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZlZS4uYmJiYi4uZWVmZWUuIy5iYmJiYi5hLmJiYmJiLmUuYmJiYmIuZS5iYmJiYi5lZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZmVlYi4uLi5iZWVmZmZlZS4uLi4uLi4uYS4uLi4uLi5lLi4uLi4uLmUuLi4uLi4uZWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZWVlZWVlZWVmZmZmZmVlLiMjYWFhYSMjLmVlZWVlZWVlZWVlZWVlZWVlZWVlZWVmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWUuIyNhYSMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiLAorImZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZS4jIyMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIiwKKyJmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVlLiMjLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiIsCisiZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWUuLmVlZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiCit9OwpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci9ydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltIGIvcnVudGltZS90dXRvci9ydW50aW1lL3ZpbXJjX2V4YW1wbGUudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYTg5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3J1bnRpbWUvdmltcmNfZXhhbXBsZS52aW0KQEAgLTAsMCArMSw5NCBAQAorIiBBbiBleGFtcGxlIGZvciBhIHZpbXJjIGZpbGUuCisiCisiIE1haW50YWluZXI6CUJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+CisiIExhc3QgY2hhbmdlOgkyMDA4IEp1biAxNgorIgorIiBUbyB1c2UgaXQsIGNvcHkgaXQgdG8KKyIgICAgIGZvciBVbml4IGFuZCBPUy8yOiAgfi8udmltcmMKKyIJICAgICAgZm9yIEFtaWdhOiAgczoudmltcmMKKyIgIGZvciBNUy1ET1MgYW5kIFdpbjMyOiAgJFZJTVxfdmltcmMKKyIJICAgIGZvciBPcGVuVk1TOiAgc3lzJGxvZ2luOi52aW1yYworCisiIFdoZW4gc3RhcnRlZCBhcyAiZXZpbSIsIGV2aW0udmltIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhlc2Ugc2V0dGluZ3MuCitpZiB2OnByb2duYW1lID1+PyAiZXZpbSIKKyAgZmluaXNoCitlbmRpZgorCisiIFVzZSBWaW0gc2V0dGluZ3MsIHJhdGhlciB0aGVuIFZpIHNldHRpbmdzIChtdWNoIGJldHRlciEpLgorIiBUaGlzIG11c3QgYmUgZmlyc3QsIGJlY2F1c2UgaXQgY2hhbmdlcyBvdGhlciBvcHRpb25zIGFzIGEgc2lkZSBlZmZlY3QuCitzZXQgbm9jb21wYXRpYmxlCisKKyIgYWxsb3cgYmFja3NwYWNpbmcgb3ZlciBldmVyeXRoaW5nIGluIGluc2VydCBtb2RlCitzZXQgYmFja3NwYWNlPWluZGVudCxlb2wsc3RhcnQKKworaWYgaGFzKCJ2bXMiKQorICBzZXQgbm9iYWNrdXAJCSIgZG8gbm90IGtlZXAgYSBiYWNrdXAgZmlsZSwgdXNlIHZlcnNpb25zIGluc3RlYWQKK2Vsc2UKKyAgc2V0IGJhY2t1cAkJIiBrZWVwIGEgYmFja3VwIGZpbGUKK2VuZGlmCitzZXQgaGlzdG9yeT01MAkJIiBrZWVwIDUwIGxpbmVzIG9mIGNvbW1hbmQgbGluZSBoaXN0b3J5CitzZXQgcnVsZXIJCSIgc2hvdyB0aGUgY3Vyc29yIHBvc2l0aW9uIGFsbCB0aGUgdGltZQorc2V0IHNob3djbWQJCSIgZGlzcGxheSBpbmNvbXBsZXRlIGNvbW1hbmRzCitzZXQgaW5jc2VhcmNoCQkiIGRvIGluY3JlbWVudGFsIHNlYXJjaGluZworCisiIEZvciBXaW4zMiBHVUk6IHJlbW92ZSAndCcgZmxhZyBmcm9tICdndWlvcHRpb25zJzogbm8gdGVhcm9mZiBtZW51IGVudHJpZXMKKyIgbGV0ICZndWlvcHRpb25zID0gc3Vic3RpdHV0ZSgmZ3Vpb3B0aW9ucywgInQiLCAiIiwgImciKQorCisiIERvbid0IHVzZSBFeCBtb2RlLCB1c2UgUSBmb3IgZm9ybWF0dGluZworbWFwIFEgZ3EKKworIiBDVFJMLVUgaW4gaW5zZXJ0IG1vZGUgZGVsZXRlcyBhIGxvdC4gIFVzZSBDVFJMLUcgdSB0byBmaXJzdCBicmVhayB1bmRvLAorIiBzbyB0aGF0IHlvdSBjYW4gdW5kbyBDVFJMLVUgYWZ0ZXIgaW5zZXJ0aW5nIGEgbGluZSBicmVhay4KK2lub3JlbWFwIDxDLVU+IDxDLUc+dTxDLVU+CisKKyIgSW4gbWFueSB0ZXJtaW5hbCBlbXVsYXRvcnMgdGhlIG1vdXNlIHdvcmtzIGp1c3QgZmluZSwgdGh1cyBlbmFibGUgaXQuCitzZXQgbW91c2U9YQorCisiIFN3aXRjaCBzeW50YXggaGlnaGxpZ2h0aW5nIG9uLCB3aGVuIHRoZSB0ZXJtaW5hbCBoYXMgY29sb3JzCisiIEFsc28gc3dpdGNoIG9uIGhpZ2hsaWdodGluZyB0aGUgbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuLgoraWYgJnRfQ28gPiAyIHx8IGhhcygiZ3VpX3J1bm5pbmciKQorICBzeW50YXggb24KKyAgc2V0IGhsc2VhcmNoCitlbmRpZgorCisiIE9ubHkgZG8gdGhpcyBwYXJ0IHdoZW4gY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBhdXRvY29tbWFuZHMuCitpZiBoYXMoImF1dG9jbWQiKQorCisgICIgRW5hYmxlIGZpbGUgdHlwZSBkZXRlY3Rpb24uCisgICIgVXNlIHRoZSBkZWZhdWx0IGZpbGV0eXBlIHNldHRpbmdzLCBzbyB0aGF0IG1haWwgZ2V0cyAndHcnIHNldCB0byA3MiwKKyAgIiAnY2luZGVudCcgaXMgb24gaW4gQyBmaWxlcywgZXRjLgorICAiIEFsc28gbG9hZCBpbmRlbnQgZmlsZXMsIHRvIGF1dG9tYXRpY2FsbHkgZG8gbGFuZ3VhZ2UtZGVwZW5kZW50IGluZGVudGluZy4KKyAgZmlsZXR5cGUgcGx1Z2luIGluZGVudCBvbgorCisgICIgUHV0IHRoZXNlIGluIGFuIGF1dG9jbWQgZ3JvdXAsIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSB0aGVtIGVhc2lseS4KKyAgYXVncm91cCB2aW1yY0V4CisgIGF1IQorCisgICIgRm9yIGFsbCB0ZXh0IGZpbGVzIHNldCAndGV4dHdpZHRoJyB0byA3OCBjaGFyYWN0ZXJzLgorICBhdXRvY21kIEZpbGVUeXBlIHRleHQgc2V0bG9jYWwgdGV4dHdpZHRoPTc4CisKKyAgIiBXaGVuIGVkaXRpbmcgYSBmaWxlLCBhbHdheXMganVtcCB0byB0aGUgbGFzdCBrbm93biBjdXJzb3IgcG9zaXRpb24uCisgICIgRG9uJ3QgZG8gaXQgd2hlbiB0aGUgcG9zaXRpb24gaXMgaW52YWxpZCBvciB3aGVuIGluc2lkZSBhbiBldmVudCBoYW5kbGVyCisgICIgKGhhcHBlbnMgd2hlbiBkcm9wcGluZyBhIGZpbGUgb24gZ3ZpbSkuCisgICIgQWxzbyBkb24ndCBkbyBpdCB3aGVuIHRoZSBtYXJrIGlzIGluIHRoZSBmaXJzdCBsaW5lLCB0aGF0IGlzIHRoZSBkZWZhdWx0CisgICIgcG9zaXRpb24gd2hlbiBvcGVuaW5nIGEgZmlsZS4KKyAgYXV0b2NtZCBCdWZSZWFkUG9zdCAqCisgICAgXCBpZiBsaW5lKCInXCIiKSA+IDEgJiYgbGluZSgiJ1wiIikgPD0gbGluZSgiJCIpIHwKKyAgICBcICAgZXhlICJub3JtYWwhIGdgXCIiIHwKKyAgICBcIGVuZGlmCisKKyAgYXVncm91cCBFTkQKKworZWxzZQorCisgIHNldCBhdXRvaW5kZW50CQkiIGFsd2F5cyBzZXQgYXV0b2luZGVudGluZyBvbgorCitlbmRpZiAiIGhhcygiYXV0b2NtZCIpCisKKyIgQ29udmVuaWVudCBjb21tYW5kIHRvIHNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgdGhlCisiIGZpbGUgaXQgd2FzIGxvYWRlZCBmcm9tLCB0aHVzIHRoZSBjaGFuZ2VzIHlvdSBtYWRlLgorIiBPbmx5IGRlZmluZSBpdCB3aGVuIG5vdCBkZWZpbmVkIGFscmVhZHkuCitpZiAhZXhpc3RzKCI6RGlmZk9yaWciKQorICBjb21tYW5kIERpZmZPcmlnIHZlcnQgbmV3IHwgc2V0IGJ0PW5vZmlsZSB8IHIgIyB8IDBkXyB8IGRpZmZ0aGlzCisJCSAgXCB8IHdpbmNtZCBwIHwgZGlmZnRoaXMKK2VuZGlmCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yIGIvcnVudGltZS90dXRvci90dXRvcgppbmRleCAzMmFlZjk0Li4zMWJhNzEwIDEwMDY0NAotLS0gYS9ydW50aW1lL3R1dG9yL3R1dG9yCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IKQEAgLTEzOSwxMiArMTM5LDEyIEBACiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAkJICAgICBMZXNzb24gMS42OiBFRElUSU5HIEEgRklMRQogCi0KIAkJICAgICoqIFVzZSAgOndxICB0byBzYXZlIGEgZmlsZSBhbmQgZXhpdC4gKioKIAogICAhISBOT1RFOiBCZWZvcmUgZXhlY3V0aW5nIGFueSBvZiB0aGUgc3RlcHMgYmVsb3csIHJlYWQgdGhpcyBlbnRpcmUgbGVzc29uISEKIAogICAxLiBFeGl0IHRoaXMgdHV0b3IgYXMgeW91IGRpZCBpbiBsZXNzb24gMS4yOiAgOnEhCisgICAgIE9yLCBpZiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYW5vdGhlciB0ZXJtaW5hbCwgZG8gdGhlIGZvbGxvd2luZyB0aGVyZS4KIAogICAyLiBBdCB0aGUgc2hlbGwgcHJvbXB0IHR5cGUgdGhpcyBjb21tYW5kOiAgdmltIHR1dG9yIDxFTlRFUj4KICAgICAgJ3ZpbScgaXMgdGhlIGNvbW1hbmQgdG8gc3RhcnQgdGhlIFZpbSBlZGl0b3IsICd0dXRvcicgaXMgdGhlIG5hbWUgb2YgdGhlCkBAIC0xNTQsMTAgKzE1NCwxMCBAQAogCiAgIDQuIFNhdmUgdGhlIGZpbGUgd2l0aCBjaGFuZ2VzIGFuZCBleGl0IFZpbSB3aXRoOiAgOndxICA8RU5URVI+CiAKLSAgNS4gUmVzdGFydCB0aGUgdmltdHV0b3IgYW5kIG1vdmUgZG93biB0byB0aGUgZm9sbG93aW5nIHN1bW1hcnkuCisgIDUuIElmIHlvdSBoYXZlIHF1aXQgdmltdHV0b3IgaW4gc3RlcCAxIHJlc3RhcnQgdGhlIHZpbXR1dG9yIGFuZCBtb3ZlIGRvd24gdG8KKyAgICAgdGhlIGZvbGxvd2luZyBzdW1tYXJ5LgogCiAgIDYuIEFmdGVyIHJlYWRpbmcgdGhlIGFib3ZlIHN0ZXBzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZW06IGRvIGl0LgotCiAgIAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAJCQkgICAgICAgTGVzc29uIDEgU1VNTUFSWQpkaWZmIC0tZ2l0IGEvcnVudGltZS90dXRvci90dXRvci5mci51dGYtOCBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuZnIudXRmLTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiMTRjZAotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuZnIudXRmLTgKQEAgLTAsMCArMSw4MDkgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gQiBpIGUgbiB2IGUgbiB1IGUgIGRhbnMgbGUgIFQgdSB0IG8gciBpIGUgbCAgZGUgIFYgSSBNICAtICBWZXJzaW9uIDEuNS5mci4yID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICBWaW0gZXN0IHVuIMOpZGl0ZXVyIHRyw6hzIHB1aXNzYW50IHF1aSBhIHRyb3AgZGUgY29tbWFuZGVzIHBvdXIgcG91dm9pcgorICAgICB0b3V0ZXMgbGVzIGV4cGxpcXVlciBkYW5zIHVuIGNvdXJzIGNvbW1lIGNlbHVpLWNpLCBxdWkgZXN0IGNvbsOndSBwb3VyIGVuCisgICAgIGTDqWNyaXJlIHN1ZmZpc2FtbWVudCBhZmluIGRlIHZvdXMgcGVybWV0dHJlIGQndXRpbGlzZXIgc2ltcGxlbWVudCBWaW0uCisKKyAgICAgTGUgdGVtcHMgcmVxdWlzIHBvdXIgc3VpdnJlIGNlIGNvdXJzIGVzdCBkJ2Vudmlyb24gMjUgw6AgMzAgbWludXRlcywgc2Vsb24KKyAgICAgbGUgdGVtcHMgcXVlIHZvdXMgcGFzc2VyZXogw6AgZXhww6lyaW1lbnRlci4gIExlcyBjb21tYW5kZXMgdXRpbGlzw6llcyBkYW5zCisgICAgIGxlcyBsZcOnb25zIG1vZGlmaWVyb250IGxlIHRleHRlLiBGYWl0ZXMgdW5lIGNvcGllIGRlIGNlIGZpY2hpZXIgYWZpbiBkZQorICAgICB2b3VzIGVudHJhw65uZXIgZGVzc3VzIChzaSB2b3VzIGF2ZXogbGFuY8OpICJ2aW10dXRvciIgY2VjaSBlc3QgZMOpasOgIHVuZQorICAgICBjb3BpZSkuCisKKyAgICAgSWwgZXN0IGltcG9ydGFudCBkZSBnYXJkZXIgZW4gdMOqdGUgcXVlIGNlIGNvdXJzIGVzdCBjb27Dp3UgcG91ciBhcHByZW5kcmUKKyAgICAgcGFyIGxhIHByYXRpcXVlLiAgQ2VsYSBzaWduaWZpZSBxdWUgdm91cyBkZXZleiBleMOpY3V0ZXIgbGVzIGNvbW1hbmRlcworICAgICBwb3VyIGxlcyBhcHByZW5kcmUgY29ycmVjdGVtZW50LiAgU2kgdm91cyB2b3VzIGNvbnRlbnRleiBkZSBsaXJlIGxlCisgICAgIHRleHRlLCB2b3VzIG91YmxpZXJleiBsZXMgY29tbWFuZGVzICEKKworICAgICBNYWludGVuYW50LCB2w6lyaWZpZXogcXVlIHZvdHJlIGNsYXZpZXIgbidlc3QgUEFTIHZlcm91aWxsw6kgZW4gbWFqdXNjdWxlcywKKyAgICAgZXQgYXBwdXlleiBsYSB0b3VjaGUgIGogIGxlIG5vbWJyZSBkZSBmb2lzIHN1ZmZpc2FudCBwb3VyIHF1ZSBsYSBsZcOnb24KKyAgICAgMS4xIHJlbXBsaXNzZSBjb21wbMOodGVtZW50IGwnw6ljcmFuLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICAgIExlw6dvbiAxLjEgOiBEw4lQTEFDRU1FTlQgRFUgQ1VSU0VVUgorCisKKyAgKiogUG91ciBkw6lwbGFjZXIgbGUgY3Vyc2V1ciwgYXBwdXlleiBsZXMgdG91Y2hlcyBoLGosayxsIGNvbW1lIGluZGlxdcOpLiAqKgorCSAgICBeCisJICAgIGsJICAgICBBc3R1Y2U6ICBMYSB0b3VjaGUgaCBlc3Qgw6AgZ2F1Y2hlIGV0IGTDqXBsYWNlIMOgIGdhdWNoZS4KKyAgICAgIDwgaCAgICAgIGwgPgkgICAgICBMYSB0b3VjaGUgbCBlc3Qgw6AgZHJvaXRlIGV0IGTDqXBsYWNlIMOgIGRyb2l0ZS4KKwkgICBqCQkgICAgICBMYSB0b3VjaGUgaiByZXNzZW1ibGUgw6AgdW5lIGZsw6hjaGUgdmVycyBsZSBiYXMuCisJICAgdgorICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbCfDqWNyYW4ganVzcXUnw6Agdm91cyBzZW50aXIgw6AgbCdhaXNlLgorCisgIDIuIE1haW50ZW5leiBsYSB0b3VjaGUgQmFzIChqKSBlbmZvbmPDqWUganVzcXUnw6AgY2UgcXUnZWxsZSBzZSByw6lww6h0ZS4KKy0tLT4gTWFpbnRlbmFudCB2b3VzIMOqdGVzIGNhcGFibGUgZGUgdm91cyBkw6lwbGFjZXIganVzcXUnw6AgbGEgbGXDp29uIHN1aXZhbnRlLgorCisgIDMuIEVuIHV0aWxpc2FudCBsYSB0b3VjaGUgQmFzLCBhbGxleiDDoCBsYSBMZcOnb24gMS4yLgorCitOb3RlOiBTaSBqYW1haXMgdm91cyBkb3V0ZXogZGUgY2UgcXVlIHZvdXMgdmVuZXogZGUgdGFwZXIsIGFwcHV5ZXogPMOJY2hhcD4KKyAgICAgIHBvdXIgcmV2ZW5pciBlbiBtb2RlIE5vcm1hbC4gUHVpcyByZXRhcGV6IGxhIGNvbW1hbmRlIHF1ZSB2b3VzIHZvdWxpZXouCisKK05vdGU6IExlcyB0b3VjaGVzIGZsw6ljaMOpZXMgZGV2cmFpZW50IMOpZ2FsZW1lbnQgZm9uY3Rpb25uZXIuIE1haXMgZW4gdXRpbGlzYW50CisgICAgICBoamtsIHZvdXMgcG91cnJleiB2b3VzIGTDqXBsYWNlciBiZWF1Y291cCBwbHVzIHJhcGlkZW1lbnQsIHVuZSBmb2lzIHF1ZQorICAgICAgdm91cyBhdXJleiBwcmlzIGwnaGFiaXR1ZGUuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICBMZcOnb24gMS4yIDogRU5UUsOJRSBFVCBTT1JUSUUgREUgVklNCisKKworICEhIE5PVEU6IEF2YW50IGQnZWZmZWN0dWVyIGxlcyDDqXRhcGVzIGNpLWRlc3NvdXMsIGxpc2V6IHRvdXRlIGNldHRlIGxlw6dvbiAhIQorCisgIDEuIEFwcHV5ZXogbGEgdG91Y2hlCTzDiWNoYXA+ICAocG91ciDDqnRyZSBzw7tyIGQnw6p0cmUgZW4gbW9kZSBOb3JtYWwpLgorCisgIDIuIFRhcGV6OgkJCTpxISA8RW50csOpZT4KKworLS0tPiBDZWNpIHF1aXR0ZSBsJ8OpZGl0ZXVyIFNBTlMgc2F1dmVyIGxlcyBjaGFuZ2VtZW50cyBxdWUgdm91cyBhdmV6IGZhaXRzLgorICAgICBTaSB2b3VzIHZvdWxleiBlbnJlZ2lzdHJlciBsZXMgY2hhbmdlbWVudHMgZXQgc29ydGlyLCB0YXBlejoKKwkJCQk6d3EgPEVudHLDqWU+CisKKyAgMy4gTG9yc3F1ZSBsJ2ludml0ZSBkdSAnc2hlbGwnIHZvdXMgc2VyYSBwcsOpc2VudMOpZSwgdGFwZXogbGEgY29tbWFuZGUgcXVpCisgICAgIHZvdXMgYSBhbWVuw6kgZGFucyBjZSB0dXRvcmllbC4gIENlbGEgcG91cnJhaXQgw6p0cmU6ICAgIHZpbXR1dG9yIDxFbnRyw6llPgorICAgICBOb3JtYWxlbWVudCwgdm91cyB1dGlsaXNlcmllejoJCQkgICAgdmltIHR1dG9yIDxFbnRyw6llPgorCistLS0+ICd2aW0nIGxhbmNlIGwnw6lkaXRldXIsICd0dXRvcicgZXN0IGxlIGZpY2hpZXIgcXVlIHZvdXMgc291aGFpdGV6IMOpZGl0ZXIuCisKKyAgNC4gU2kgdm91cyBhdmV6IG3DqW1vcmlzw6kgY2VzIMOpdGFwZXMgZXQgw6p0ZXMgY29uZmlhbnQsIGVmZmVjdHVleiBsZXMgw6l0YXBlcworICAgICAxIMOgIDMgcG91ciBzb3J0aXIgcHVpcyByZW50cmVyIGRhbnMgbCfDqWRpdGV1ci4gIETDqXBsYWNleiBlbnN1aXRlIGxlCisgICAgICBjdXJzZXVyIGp1c3F1J8OgIGxhIExlw6dvbiAxLjMuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICBMZcOnb24gMS4zIDogw4lESVRJT04gREUgVEVYVEUgLSBFRkZBQ0VNRU5UCisKKworICoqIEVuIG1vZGUgTm9ybWFsLCBhcHB1eWV6ICB4CXBvdXIgZWZmYWNlciBsZSBjYXJhY3TDqHJlIHNvdXMgbGUgY3Vyc2V1ci4gKioKKworICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgbGlnbmUgbWFycXXDqWUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDIuIFBvdXIgY29ycmlnZXIgbGVzIGVycmV1cnMsIGTDqXBsYWNleiBsZSBjdXJzZXVyIGp1c3F1J8OgIGNlIHF1J2lsIHNvaXQKKyAgICAgc3VyIHVuIGNhcmFjdMOocmUgw6AgZWZmYWNlci4KKworICAzLiBBcHB1eWV6IGxhIHRvdWNoZQl4ICBwb3VyIGVmZmFjZXIgbGUgY2FyYWN0w6hyZSByZWRvbmRhbnQuCisKKyAgNC4gUsOpcMOpdGV6IGxlcyDDqXRhcGVzIDIgw6AgNCBqdXNxdSfDoCBjZSBxdWUgbGEgcGhyYXNlIHNvaXQgY29ycmVjdGUuCisKKy0tLT4gTGEgdnZhY2hlIMOgIHNhdXTDqcOpIGF1LWRkZXNzdXMgZGRlIGxhIGx1dW5lLgorCisgIDUuIE1haW50ZW5hbnQgcXVlIGxhIGxpZ25lIGVzdCBjb3JyZWN0ZSwgcGFzc2V6IMOgIGxhIGxlw6dvbiAxLjQuCisKK05PVEU6IEVuIGF2YW7Dp2FudCBkYW5zIGNlIGNvdXJzLCBuJ2Vzc2F5ZXogcGFzIGRlIG3DqW1vcmlzZXIsIGFwcHJlbmV6IHBhcgorICAgICAgbGEgcHJhdGlxdWUuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgIExlw6dvbiAxLjQgOiDDiURJVElPTiBERSBURVhURSAtIElOU0VSVElPTgorCisKKwkgICAqKiBFbiBtb2RlIE5vcm1hbCwgYXBwdXlleiAgaSAgcG91ciBpbnPDqXJlciBkdSB0ZXh0ZS4gKioKKworICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgcHJlbWnDqHJlIGxpZ25lIG1hcnF1w6llIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBQb3VyIHJlbmRyZSBsYSBwcmVtacOocmUgbGlnbmUgaWRlbnRpcXVlIMOgIGxhIHNlY29uZGUsIG1ldHRleiBsZSBjdXJzZXVyCisgICAgIHN1ciBsZSBwcmVtaWVyIGNhcmFjdMOocmUgQVBSw4hTIGwnZW5kcm9pdCBvw7kgaW5zw6lyZXIgbGUgdGV4dGUuCisKKyAgMy4gQXBwdXlleiAgaSAgZXQgdGFwZXogbGVzIGNhcmFjdMOocmVzIHF1aSBtYW5xdWVudC4KKworICA0LiBVbmUgZm9pcyBxdSd1bmUgZXJyZXVyIGVzdCBjb3JyaWfDqWUsIGFwcHV5ZXogPMOJY2hhcD4gcG91ciByZXZlbmlyIGVuIG1vZGUKKyAgICAgTm9ybWFsLiBSw6lww6l0ZXogbGVzIMOpdGFwZXMgMiDDoCA0IHBvdXIgY29ycmlnZXIgbGEgcGhyYXNlLgorCistLS0+IElsIG1ucWUgY2FyYWN0w6hyZXMgY2V0dGUgLgorLS0tPiBJbCBtYW5xdWUgZGVzIGNhcmFjdMOocmVzIGRhbnMgY2V0dGUgbGlnbmUuCisKKyAgNS4gVW5lIGZvaXMgcXVlIHZvdXMgw6p0ZXMgw6AgbCdhaXNlIGF2ZWMgbCdpbnNlcnRpb24gZGUgdGV4dGUsIGFsbGV6IGF1CisgICAgIHLDqXN1bcOpIGNpLWRlc3NvdXMuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgIFLDiVNVTcOJIERFIExBIExFw4dPTiAxCisKKyAgMS4gTGUgY3Vyc2V1ciBzZSBkw6lwbGFjZSBhdmVjIGxlcyB0b3VjaGVzIGZsw6ljaMOpZXMgb3UgbGVzIHRvdWNoZXMgaGprbC4KKwkgaCAoZ2F1Y2hlKQlqIChiYXMpICAgICAgICBrIChoYXV0KSAgICAgICBsIChkcm9pdGUpCisKKyAgMi4gUG91ciBlbnRyZXIgZGFucyBWaW0gKMOgIGwnaW52aXRlICUpIHRhcGV6OiAgdmltIEZJQ0hJRVIgPEVudHLDqWU+CisKKyAgMy4gUG91ciBxdWl0dGVyIFZpbSB0YXBlejogIDzDiWNoYXA+IDpxISA8RW50csOpZT4gIHBvdXIgcGVyZHJlIHRvdXMgbGVzCisJCQkJCQkgICAgY2hhbmdlbWVudHMuCisJCSAgIE9VIHRhcGV6OiAgPMOJY2hhcD4gOndxIDxFbnRyw6llPiAgcG91ciBlbnJlZ2lzdHJlciBsZXMKKwkJCQkJCSAgICBjaGFuZ2VtZW50cy4KKworICA0LiBQb3VyIGVmZmFjZXIgdW4gY2FyYWN0w6hyZSBzb3VzIGxlIGN1cnNldXIgZW4gbW9kZSBOb3JtYWwgdGFwZXo6ICB4CisKKyAgNS4gUG91ciBpbnPDqXJlciBkdSB0ZXh0ZSBhdSBuaXZlYXUgZHUgY3Vyc2V1ciBlbiBtb2RlIE5vcm1hbCB0YXBlejoKKwkgaSAgIHRhcGV6IGxlIHRleHRlICAgPMOJY2hhcD4KKworTk9URTogQXBwdXllciAgPMOJY2hhcD4Jdm91cyBwbGFjZSBlbiBtb2RlIE5vcm1hbCBvdSBhbm51bGUgdW5lIGNvbW1hbmRlCisgICAgICBwYXJ0aWVsbGVtZW50IHRhcMOpZSBkb250IHZvdXMgbmUgdm91ZHJpZXogcGx1cy4KKworUGFzc2V6IG1haW50ZW5hbnQgw6AgbGEgTGXDp29uIDIuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgTGXDp29uIDIuMSA6IEVGRkFDRU1FTlRTCisKKworCSAgICAqKiBUYXBleiAgZHcgIHBvdXIgZWZmYWNlciBqdXNxdSfDoCBsYSBmaW4gZCd1biBtb3QuICoqCisKKyAgMS4gQXBwdXlleiAgPMOJY2hhcD4gIHBvdXIgw6p0cmUgc8O7ciBkJ8OqdHJlIGVuIG1vZGUgTm9ybWFsLgorCisgIDIuIETDqXBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBtYXJxdcOpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgMy4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxlIGTDqWJ1dCBkJ3VuIG1vdCBxdWkgYSBiZXNvaW4gZCfDqnRyZSBlZmZhY8OpLgorCisgIDQuIFRhcGV6ICBkdwlwb3VyIGZhaXJlIGRpc3BhcmHDrnRyZSBjZSBtb3QuCisKK05PVEU6IExlcyBsZXR0cmVzICBkdyAgYXBwYXJhw650cm9udCBzdXIgbGEgZGVybmnDqHJlIGxpZ25lIGRlIGwnw6ljcmFuIGxvcnMgZGUKKyAgICAgIHZvdHJlIGZyYXBwZS4gU2kgdm91cyBhdmV6IG1hbCB0YXDDqSBxdWVscXVlIGNob3NlLCBhcHB1eWV6IDzDiWNoYXA+IGV0CisgICAgICByZWNvbW1lbmNlei4KKworLS0tPiBJbCB5IGEgcXVlbHF1ZXMgZHLDtGxlIG1vdHMgcXVpIG4nb250IHJpZW4gw6AgZmFpcmUgcGFwaWVyIHN1ciBjZXR0ZSBsaWduZS4KKworICA1LiBSw6lww6l0ZXogbGVzIMOpdGFwZXMgMyBldCA0IGp1c3F1J8OgIGNlIHF1ZSBsYSBwaHJhc2Ugc29pdCBjb3JyZWN0ZSBldCBhbGxlegorICAgICDDoCBsYSBMZcOnb24gMi4yLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCUxlw6dvbiAyLjIgOiBQTFVTIEQnRUZGQUNFTUVOVFMKKworCisJICAqKiBUYXBleiAgZCQJcG91ciBlZmZhY2VyIGp1c3F1J8OgIGxhIGZpbiBkZSBsYSBsaWduZS4gKioKKworICAxLiBBcHB1eWV6ICA8w4ljaGFwPiAgcG91ciDDqnRyZSBzw7tyIGQnw6p0cmUgZW4gbW9kZSBOb3JtYWwuCisKKyAgMi4gRMOpcGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIGxpZ25lIG1hcnF1w6llIC0tLT4gY2ktZGVzc291cy4KKworICAzLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBqdXNxdSfDoCBsYSBmaW4gY29ycmVjdGUgZGUgbGEgbGlnbmUKKyAgICAgKEFQUsOIUyBsZSBwcmVtaWVyIC4gKS4KKworICA0LiBUYXBleiAgZCQJcG91ciBlZmZhY2VyIGp1c3F1J8OgIGxhIGZpbiBkZSBsYSBsaWduZS4KKworLS0tPiBRdWVscXUndW4gYSB0YXDDqSBsYSBmaW4gZGUgY2V0dGUgbGlnbmUgZGV1eCBmb2lzLiBjZXR0ZSBsaWduZSBkZXV4IGZvaXMuCisKKyAgNS4gQWxsZXogw6AgbGEgTGXDp29uIDIuMyBwb3VyIGNvbXByZW5kcmUgY2UgcXVpIHNlIHBhc3NlLgorCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICBMZcOnb24gMi4zIDogREVTIENPTU1BTkRFUyBFVCBERVMgT0JKRVRTCisKKworICBMZSBmb3JtYXQgZGUgbGEgY29tbWFuZGUgZCdlZmZhY2VtZW50ICBkICBlc3QgbGUgc3VpdmFudDoKKworCSBbbm9tYnJlXSAgZCAgb2JqZXQJICAgT1UJICAgICBkCVtub21icmVdICBvYmpldAorICBvw7k6CisgICAgbm9tYnJlIC0gZXN0IGNvbWJpZW4gZGUgZm9pcyBleMOpY3V0ZXIgbGEgY29tbWFuZGUgKG9wdGlvbm5lbCwgZMOpZmF1dDogMSkuCisgICAgZCAtIGVzdCBsYSBjb21tYW5kZSBkJ2VmZmFjZW1lbnQuCisgICAgb2JqZXQgLSBlc3QgY2Ugc3VyIHF1b2kgbGEgY29tbWFuZGUgdmEgb3DDqXJlciAobGlzdGUgY2ktZGVzc291cykuCisKKyAgVW5lIGNvdXJ0ZSBsaXN0ZSBkJ29iamV0czoKKyAgICB3IC0gZHUgY3Vyc2V1ciBqdXNxdSfDoCBsYSBmaW4gZHUgbW90LCB5IGNvbXByaXMgbCdlc3BhY2UgcXVpIHN1aXQuCisgICAgZSAtIGR1IGN1cnNldXIganVzcXUnw6AgbGEgZmluIGR1IG1vdCwgU0FOUyBsJ2VzcGFjZSBxdWkgc3VpdC4KKyAgICAkIC0gZHUgY3Vyc2V1ciBqdXNxdSfDoCBsYSBmaW4gZGUgbGEgbGlnbmUuCisKK05PVEU6IFBvdXIgbGVzIGF2ZW50dXJldXgsIGxlIHNldWwgYXBwdWkgZCcgb2JqZXQgIGVuIG1vZGUgTm9ybWFsLCBzYW5zCisgICAgICBjb21tYW5kZSwgZMOpcGxhY2UgbGUgY3Vyc2V1ciBjb21tZSBpbmRpcXXDqSBkYW5zIGxhIGxpc3RlIGRlcyBvYmpldHMuCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgTGXDp29uIDIuNCA6IFVORSBFWENFUFRJT04gw4AgJ0NPTU1BTkRFLU9CSkVUJworCisJICAgICAgKiogVGFwZXoJZGQgIHBvdXIgZWZmYWNlciB1bmUgbGlnbmUgY29tcGzDqHRlLiAqKgorCisgIFZ1IGxlIG5vbWJyZSBkZSBmb2lzIG/DuSBsJ29uIGVmZmFjZSBkZXMgbGlnbmVzIGNvbXBsw6h0ZXMsIGxlcyBjb25jZXB0ZXVycworICBkZSBWaSBvbnQgZMOpY2lkw6kgcXUnaWwgc2VyYWl0IHBsdXMgZmFjaWxlIGRlIHRhcGVyIHNpbXBsZW1lbnQgZGV1eCBkIMOgIGxhCisgIHN1aXRlIHBvdXIgZWZmYWNlciB1bmUgbGlnbmUuCisKKyAgMS4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIHNlY29uZGUgbGlnbmUgZGUgbGEgcGhyYXNlIGNpLWRlc3NvdXMuCisgIDIuIFRhcGV6ICBkZAlwb3VyIGVmZmFjZXIgbGEgbGlnbmUuCisgIDMuIE1haW50ZW5hbnQgYWxsZXogw6AgbGEgcXVhdHJpw6htZSBsaWduZS4KKyAgNC4gVGFwZXogIDJkZCAgKHJhcHBlbGV6LXZvdXMsIG5vbWJyZS1jb21tYW5kZS1vYmpldCkgcG91ciBlZmZhY2VyIGxlcworICAgICBkZXV4IGxpZ25lcy4KKworICAgICAgMSkgIExlcyByb3NlcyBzb250IHJvdWdlcywKKyAgICAgIDIpICBMYSBib3VlIGMnZXN0IGRyw7RsZSwKKyAgICAgIDMpICBMZXMgdmlvbGV0dGVzIHNvbnQgYmxldWVzLAorICAgICAgNCkgIEonYWkgdW5lIHZvaXR1cmUsCisgICAgICA1KSAgTGVzIGhvcmxvZ2VzIGRvbm5lbnQgbCdoZXVyZSwKKyAgICAgIDYpICBMZSBzdWNyZSBlc3QgZG91eAorICAgICAgNykgIFRvdXQgY29tbWUgdm91cy4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgTGXDp29uIDIuNSA6IEwnQU5OVUxBVElPTgorCisJICAgICoqIFRhcGV6ICB1ICBwb3VyIGFubnVsZXIgbGVzIGRlcm5pw6hyZXMgY29tbWFuZGVzLiAqKgorCSAgICAgICAqKiBUYXBleiAgVSAgcG91ciByw6ljdXDDqXJlciB0b3V0ZSB1bmUgbGlnbmUuICoqCisKKyAgMS4gRMOpcGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIGxpZ25lIG1hcnF1w6llIC0tLT4gY2ktZGVzc291cyBldCBwbGFjZXotbGUgc3VyCisgICAgIGxhIHByZW1pw6hyZSBlcnJldXIuCisgIDIuIFRhcGV6ICB4ICBwb3VyIGVmZmFjZXIgbGUgcHJlbWllciBjYXJhY3TDqHJlIHJlZG9uZGFudC4KKyAgMy4gUHVpcyB0YXBleiAgdSAgcG91ciBhbm51bGVyIGxhIGRlcm5pw6hyZSBjb21tYW5kZSBleMOpY3V0w6llLgorICA0LiBDZXR0ZSBmb2lzLCBjb3JyaWdleiB0b3V0ZXMgbGVzIGVycmV1cnMgZGUgbGEgbGlnbmUgYXZlYyBsYSBjb21tYW5kZSAgeCAuCisgIDUuIFB1aXMgdGFwZXogdW4gIFUgIG1hanVzY3VsZSBwb3VyIHJlbWV0dHJlIGxhIGxpZ25lIGRhbnMgc29uIMOpdGF0IGluaXRpYWwuCisgIDYuIFB1aXMgdGFwZXogIHUgIGRldXgtdHJvaXMgZm9pcyBwb3VyIGFubnVsZXIgbGUgIFUJZXQgbGVzIGNvbW1hbmRlcworICAgICBwcsOpY8OpZGVudGVzLgorICA3LiBNYWludGVuYW50IHRhcGV6ICBDdHJsLVIgIChtYWludGVuZXogbGEgdG91Y2hlIEN0cmwgZW5mb25jw6llIHBlbmRhbnQgcXVlCisgICAgIHZvdXMgYXBwdXlleiBzdXIgUikgZGV1eC10cm9pcyBmb2lzIHBvdXIgcmVmYWlyZSBsZXMgY29tbWFuZGVzIChhbm51bGVyCisgICAgIGxlcyBhbm51bGF0aW9ucykuCisKKy0tLT4gQ29vcnJpZ2V6IGxlcyBlcnJldXJzIHN1dXIgY2NldHRlIGxpZ25lIGV0IHJlZW1ldHRlei1sZXMgYXZ2ZWMgJ2FubnVsZXInLgorCisgIDguIENlIHNvbnQgZGVzIGNvbW1hbmRlcyB0csOocyB1dGlsZXMuIE1haW50ZW5hbnQsIGFsbGV6IGF1IHLDqXN1bcOpIGRlIGxhCisgICAgIExlw6dvbiAyLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgUsOJU1VNw4kgREUgTEEgTEXDh09OIDIKKworCisgIDEuIFBvdXIgZWZmYWNlciBkdSBjdXJzZXVyIGp1c3F1J8OgIGxhIGZpbiBkJ3VuIG1vdCB0YXBlejoJZHcKKworICAyLiBQb3VyIGVmZmFjZXIgZHUgY3Vyc2V1ciBqdXNxdSfDoCBsYSBmaW4gZCd1bmUgbGlnbmUgdGFwZXo6CWQkCisKKyAgMy4gUG91ciBlZmZhY2VyIHRvdXRlIHVuZSBsaWduZSB0YXBlejogIGRkCisKKyAgNC4gTGUgZm9ybWF0IGQndW5lIGNvbW1hbmRlIGVuIG1vZGUgTm9ybWFsIGVzdDoKKworICAgICAgIFtub21icmVdICBjb21tYW5kZSAgb2JqZXQgICAgIE9VICAgICBjb21tYW5kZSAgW25vbWJyZV0Jb2JqZXQKKyAgICAgb8O5OgorICAgICAgIG5vbWJyZSAtIGVzdCBjb21iaWVuIGRlIGZvaXMgcsOpcMOpdGVyIGxhIGNvbW1hbmRlCisgICAgICAgY29tbWFuZGUgLSBlc3QgY2UgcXUnaWwgZmF1dCBmYWlyZSwgcGFyIGV4ZW1wbGUJZCAgcG91ciBlZmZhY2VyCisgICAgICAgb2JqZXQgLSBlc3QgY2Ugc3VyIHF1b2kgbGEgY29tbWFuZGUgZGV2cmFpdCBhZ2lyLCBwYXIgZXhlbXBsZSB3IChtb3QpLAorCSAgICAgICAkIChqdXNxdSfDoCBsYSBmaW4gZGUgbGEgbGlnbmUpLCBldGMuCisKKyAgNS4gUG91ciBhbm51bGVyIGRlcyBhY3Rpb25zIHByw6ljw6lkZW50ZXMsIHRhcGV6OgkgICAgIHUJKHUgbWludXNjdWxlKQorICAgICBQb3VyIGFubnVsZXIgdG91cyBsZXMgY2hhbmdlbWVudHMgc3VyIHVuZSBsaWduZSB0YXBlejogIFUJKFUgbWFqdXNjdWxlKQorICAgICBQb3VyIGFubnVsZXIgbCdhbm51bGF0aW9uIHRhcGV6OgkJCSAgICAgQ3RybC1SCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgICBMZcOnb24gMy4xIDogTEUgQ09MTEFHRQorCisKKyAgICoqIFRhcGV6ICBwCXBvdXIgcGxhY2VyIGFwcsOocyBsZSBjdXJzZXVyIGNlIHF1aSB2aWVudCBkJ8OqdHJlIGVmZmFjw6kuICoqCisKKyAgMS4gUGxhY2V6IGxlIGN1cnNldXIgc3VyIGxhIHByZW1pw6hyZSBsaWduZSBkdSAicG/DqG1lIiBjaS1kZXNzb3VzLgorCisgIDIuIFRhcGV6ICBkZAlwb3VyIGVmZmFjZXIgbGEgbGlnbmUgZXQgbGEgcGxhY2VyIGRhbnMgbGUgdGFtcG9uIGRlIFZpbS4KKworICAzLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgbGlnbmUgcXVpIFBSw4lDw4hERSBsJ2VuZHJvaXQgb8O5IHZvdXMgdm91bGV6CisgICAgIHJlbWV0dHJlIGxhIGxpZ25lIGVmZmFjw6llLgorCisgIDQuIEVuIG1vZGUgTm9ybWFsLCB0YXBleiAgcCAgcG91ciByZW1ldHRyZSBsYSBsaWduZS4KKworICA1LiBSw6lww6l0ZXogbGVzIMOpdGFwZXMgMiDDoCA0IHBvdXIgbWV0dHJlIHRvdXRlcyBsZXMgbGlnbmVzIGRhbnMgbGUgYm9uIG9yZHJlLgorCisgICAgIGQpIEV0IHZvdXMsIHF1J2FwcHJlbmV6LXZvdXMgPworICAgICBiKSBMZXMgdmlvbGV0dGVzIHNvbnQgYmxldWVzLAorICAgICBjKSBMJ2ludGVsbGlnZW5jZSBzJ2FwcHJlbmQsCisgICAgIGEpIExlcyByb3NlcyBzb250IHJvdWdlcywKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSBMZcOnb24gMy4yIDogTEUgUkVNUExBQ0VNRU5UCisKKworICoqIFRhcGV6ICByICBldCB1biBjYXJhY3TDqHJlIHBvdXIgcmVtcGxhY2VyIGxlIGNhcmFjdMOocmUgc291cyBsZSBjdXJzZXVyLiAqKgorCisgIDEuIETDqXBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBwcmVtacOocmUgbGlnbmUgbWFycXXDqWUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDIuIFBsYWNleiBsZSBjdXJzZXVyIGRlIG1hbmnDqHJlIMOgIGNlIHF1J2lsIHN1cnBsb21iZSBsYSBwcmVtacOocmUgZXJyZXVyLgorCisgIDMuIFRhcGV6ICByICBzdWl2aSBkdSBjYXJhY3TDqHJlIHF1aSBkb2l0IGNvcnJpZ2VyIGwnZXJyZXVyLgorCisgIDQuIFLDqXDDqXRleiBsZXMgw6l0YXBlcyAyIGV0IDMganVzcXUnw6AgY2UgcXVlIGxhIHByZW1pw6hyZSBsaWduZSBzb2l0IGNvcnJlY3RlLgorCistLS0+ICBRdWFuZCBjZXR0ZSBsaWduZSBhIMOpdMOpIHNhdXZpZSwgcXVlbHF1J3VuIGEgbGFpdCBkZXMgZmF1bmVzIGRlIGZyYXBwZSAhCistLS0+ICBRdWFuZCBjZXR0ZSBsaWduZSBhIMOpdMOpIHNhaXNpZSwgcXVlbHF1J3VuIGEgZmFpdCBkZXMgZmF1dGVzIGRlIGZyYXBwZSAhCisKKyAgNS4gTWFpbnRlbmFudCwgYWxsZXogw6AgbGEgTGXDp29uIDMuMy4KKworTk9URTogTidvdWJsaWV6IHBhcyBxdWUgdm91cyBkZXZyaWV6IGFwcHJlbmRyZSBwYXIgbGEgcHJhdGlxdWUsIHBhcyBwYXIKKyAgICAgIG3DqW1vcmlzYXRpb24uCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgIExlw6dvbiAzLjMgOiBMRSBDSEFOR0VNRU5UCisKKworCSAgICAqKiBQb3VyIGNoYW5nZXIgdG91dCBvdSBwYXJ0aWUgZCd1biBtb3QsIHRhcGV6ICBjdyAuKioKKworICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgcHJlbWnDqHJlIGxpZ25lIG1hcnF1w6llIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBQbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGUgdSBkZSBsdWhrby4KKworICAzLiBUYXBleiAgY3cJZXQgY29ycmlnZXogbGUgbW90IChkYW5zIG5vdHJlIGNhcywgdGFwZXogICdpZ25lJy4pCisKKyAgNC4gQXBwdXlleiA8w4ljaGFwPiBldCBwbGFjZXotdm91cyBzdXIgbCdlcnJldXIgc3VpdmFudGUgKGxlIHByZW1pZXIKKyAgICAgY2FyYWN0w6hyZSBxdWkgZG9pdCDDqnRyZSBjaGFuZ8OpKS4KKworICA1LiBSw6lww6l0ZXogbGVzIMOpdGFwZXMgMyBldCA0IGp1c3F1J8OgIGNlIHF1ZSBsYSBwcmVtacOocmUgcGhyYXNlIHNvaXQKKyAgICAgaWRlbnRpcXVlIMOgIGxhIHNlY29uZGUuCisKKy0tLT4gQ2V0dGUgbHVoa28gY29udGllbnQgcXVlbHF1ZXMgbXlxYSBxdWkgb250IHJpY25lIGQnw6p0cmUgY2hhbnR1ZmlwLgorLS0tPiBDZXR0ZSBsaWduZSBjb250aWVudCBxdWVscXVlcyBtb3RzIHF1aSBvbnQgYmVzb2luIGQnw6p0cmUgY2hhbmfDqXMuCisKK05vdGV6IHF1ZSAgY3cgIGVmZmFjZSBsZSBtb3QgZXQgdm91cyBwbGFjZSBlbnN1aXRlIGVuIG1vZGUgSW5zZXJ0aW9uLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgIExlw6dvbiAzLjQgOiBQTFVTIERFIENIQU5HRU1FTlRTIEFWRUMgYworCisKKyAgICAqKiBMZSBjaGFuZ2VtZW50IGZvbmN0aW9ubmUgYXZlYyBsZXMgbcOqbWVzIG9iamV0cyBxdWUgbCdlZmZhY2VtZW50LiAqKgorCisgIDEuIExlIGNoYW5nZW1lbnQgZm9uY3Rpb25uZSBkZSBsYSBtw6ptZSBtYW5pw6hyZSBxdWUgbCdlZmZhY2VtZW50LgorICAgICBMZSBmb3JtYXQgZXN0OgorCisJIFtub21icmVdICBjICBvYmpldAkgICBPVQkgICAgIGMJW25vbWJyZV0gIG9iamV0CisKKyAgMi4gTGVzIG9iamV0cyBzb250IMOpZ2FsZW1lbnQgbGVzIG3Dqm1lczogIHcgKG1vdCksICQgKGZpbiBkZSBsaWduZSksIGV0Yy4KKworICAzLiBEw6lwbGFjZXotdm91cyDDoCBsYSBwcmVtacOocmUgbGlnbmUgbWFycXXDqWUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDQuIFBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBwcmVtacOocmUgZXJyZXVyLgorCisgIDUuIFRhcGV6ICBjJAlwb3VyIGNoYW5nZXIgbGEgZmluIGRlIGxhIGxpZ25lLCByZW5kZXotbMOgIGlkZW50aXF1ZSDDoCBsYQorICAgICBzZWNvbmRlIGxpZ25lLCBwdWlzIHRhcGV6IDzDiWNoYXA+LgorCistLS0+IExhIGZpbiBkZSBjZXR0ZSBsaWduZSBkb2l0IMOqdHJlIHJlbmR1ZSBpZGVudGlxdWUgw6AgbGEgc2Vjb25kZS4KKy0tLT4gTGEgZmluIGRlIGNldHRlIGxpZ25lIGRvaXQgw6p0cmUgY29ycmlnw6llIGF2ZWMgbGEgY29tbWFuZGUJYyQgLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgUsOJU1VNw4kgREUgTEEgTEXDh09OIDMKKworCisgIDEuIFBvdXIgcmVtZXR0cmUgZHUgdGV4dGUgcXVpIHZpZW50IGQnw6p0cmUgZWZmYWPDqSwgdGFwZXogIHAgLiBDZWxhIFBsYWNlIGxlCisgICAgIHRleHRlIGVmZmFjw6kgQVBSw4hTIGxlIGN1cnNldXIgKHNpIHVuZSBsaWduZSBjb21wbMOodGUgYSDDqXTDqSBlZmZhY8OpZSwgZWxsZQorICAgICBzZXJhIHBsYWPDqWUgc291cyBsYSBsaWduZSBkdSBjdXJzZXVyKS4KKworICAyLiBQb3VyIHJlbXBsYWNlciBsZSBjYXJhY3TDqHJlIHNvdXMgbGUgY3Vyc2V1ciwgdGFwZXogIHIgIHN1aXZpIGR1IGNhcmFjdMOocmUKKyAgICAgcXVpIHJlbXBsYWNlcmEgbCdvcmlnaW5hbC4KKworICAzLiBMZSBjaGFuZ2VtZW50IHZvdXMgcGVybWV0IGRlIGNoYW5nZXIgbCdvYmpldCBzcMOpY2lmacOpLCBkdSBjdXJzZXVyIGp1c3F1J8OgCisgICAgIGxhIGZpbiBkZSBsJ29iamV0LiBQYXIgZXhlbXBsZSwgdGFwZXogIGN3CXBvdXIgY2hhbmdlciBkdSBjdXJzZXVyCisgICAgIGp1c3F1J8OgIGxhIGZpbiBkdSBtb3QsICBjJCAgcG91ciBjaGFuZ2VyIGp1c3F1J8OgIGxhIGZpbiBkJ3VuZSBsaWduZS4KKworICA0LiBMZSBmb3JtYXQgcG91ciBsZSBjaGFuZ2VtZW50IGVzdDoKKworCSBbbm9tYnJlXSAgYyAgb2JqZXQJICAgT1UJICAgICBjCVtub21icmVdICBvYmpldAorCitQYXNzZXogbWFpbnRlbmFudCDDoCBsYSBsZcOnb24gc3VpdmFudGUuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgTGXDp29uIDQuMSA6IFBPU0lUSU9OIEVUIMOJVEFUIERVIEZJQ0hJRVIKKworCisgICoqIFRhcGV6IEN0cmwtRyBwb3VyIGFmZmljaGVyIHZvdHJlIHBvc2l0aW9uIGRhbnMgbGUgZmljaGllciBldCBzb24gw6l0YXQuCisgICAgIFV0aWxpc2V6IE1hai1HIHBvdXIgdm91cyByZW5kcmUgw6AgdW5lIGxpZ25lIGRvbm7DqWUgZHUgZmljaGllci4gKioKKworICBOb3RlOiBMaXNleiB0b3V0ZSBjZXR0ZSBsZcOnb24gYXZhbnQgZCdlZmZlY3R1ZXIgbCd1bmUgZGVzIMOpdGFwZXMgIQorCisgIDEuIE1haW50ZW5leiBlbmZvbmPDqWUgbGEgdG91Y2hlIEN0cmwgZXQgYXBwdXlleiBzdXIgIEcgLiAgVW5lIGxpZ25lIGQnw6l0YXQKKyAgICAgdmEgYXBwYXJhw650cmUgZW4gYmFzIGRlIGwnw6ljcmFuIGF2ZWMgbGUgbm9tIGR1IGZpY2hpZXIgZXQgbGUgbnVtw6lybyBkZSBsYQorICAgICBsaWduZSBvw7kgdm91cyDDqnRlcy4gIE5vdGV6IGNlIG51bcOpcm8sIGlsIHNlcnZpcmEgbG9ycyBkZSBsJ8OpdGFwZSAzLgorCisgIDIuIFRhcGV6ICBHICBtYWp1c2N1bGUgKE1hai1HKSBwb3VyIHZvdXMgcmVuZHJlIMOgIGxhIGZpbiBkdSBmaWNoaWVyLgorCisgIDMuIFRhcGV6IGxlIG51bcOpcm8gZGUgbGEgbGlnbmUgb8O5IHZvdXMgw6l0aWV6IHN1aXZpIGRlIE1hai1HLglDZWxhIHZvdXMKKyAgICAgcmFtw6huZXJhIMOgIGxhIGxpZ25lIG/DuSB2b3VzIMOpdGlleiBhdSBkw6lwYXJ0LgorICAgICAoTG9yc3F1ZSB2b3VzIHRhcGV6IGxlcyBjaGlmZnJlcywgaWxzIG4nYXBwYXJhaXNzZW50IFBBUyDDoCBsJ8OpY3JhbikuCisKKyAgNC4gU2kgdm91cyB2b3VzIHNlbnRleiBwcsOqdCDDoCBmYWlyZSBjZWNpLCBlZmZlY3R1ZXogbGVzIMOpdGFwZXMgMSDDoCAzLgorCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgTGXDp29uIDQuMiA6IExBIFJFQ0hFUkNIRQorCisKKwkgICoqIFRhcGV6ICAvICBzdWl2aSBkJ3VuIHRleHRlIHBvdXIgcmVjaGVyY2hlciBjZSB0ZXh0ZS4gKioKKworICAxLiBUYXBleiBsZSBjYXJhY3TDqHJlICAvICBlbiBtb2RlIE5vcm1hbC4gTm90ZXogcXVlIGNlbHVpLWNpIGV0IGxlIGN1cnNldXIKKyAgICAgYXBwYXJhaXNzZW50IGVuIGJhcyBkZSBsJ8OpY3JhbiwgY29tbWUgbG9yc3F1ZSBsJ29uIHV0aWxpc2UgIDogLgorCisgIDIuIFB1aXMgdGFwZXogJ2VycnJldXVyJyA8RW50csOpZT4uICBDJ2VzdCBsZSBtb3QgcXVlIHZvdXMgdm91bGV6IHJlY2hlcmNoZXIuCisKKyAgMy4gUG91ciByZWNoZXJjaGVyIMOgIG5vdXZlYXUgbGUgbcOqbWUgdGV4dGUsIHRhcGV6IHNpbXBsZW1lbnQJbiAuCisgICAgIFBvdXIgcmVjaGVyY2hlciBsZSBtw6ptZSB0ZXh0ZSBkYW5zIGxhIGRpcmVjdGlvbiBvcHBvc8OpZSwgdGFwZXogIE1hai1OIC4KKworICA0LiBTaSB2b3VzIHZvdWxleiByZWNoZXJjaGVyIHVuIHRleHRlIHZlcnMgbGUgaGF1dCBkdSBmaWNoaWVyLCB1dGlsaXNleiAgPworICAgICDDoCBsYSBwbGFjZSBkZSAgLyAuCisKKy0tLT4gZXJyZXVyIG5lIHMnw6ljcml0IHBhcyAiZXJycmV1dXIiOyBlcnJyZXV1ciBlc3QgdW5lIGVycmV1ci4KKworTm90ZTogUXVhbmQgbGEgcmVjaGVyY2hlIGF0dGVpbnQgbGEgZmluIGR1IGZpY2hpZXIsIGVsbGUgcmVwcmVuZCBhdSBkw6lidXQuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgTGXDp29uIDQuMyA6IFJFQ0hFUkNIRSBERVMgUEFSRU5USMOIU0VTIENPUlJFU1BPTkRBTlRFUworCisKKwkgICAqKiBUYXBleiAgJQlwb3VyIHRyb3V2ZXIgZGVzICksIF0gb3UgfSBjb3JyZXNwb25kYW50cy4gKioKKworICAxLiBQbGFjZXogbGUgY3Vyc2V1ciBzdXIgbCd1biBkZXMgKCwgWyBvdSB7IGRlIGxhIGxpZ25lIG1hcnF1w6llIC0tLT4KKyAgICAgY2ktZGVzc291cy4KKworICAyLiBQdWlzIHRhcGV6IGxlIGNhcmFjdMOocmUgICUgLgorCisgIDMuIExlIGN1cnNldXIgZGV2cmFpdCBzZSBwbGFjZXIgc3VyIGxhIHBhcmVudGjDqHNlIGNvcnJlc3BvbmRhbnRlLgorCisgIDQuIFRhcGV6ICAlICBwb3VyIHJlcGxhY2VyIGxlIGN1cnNldXIgc3VyIGwnYXV0cmUgcGFyZW50aMOoc2UuCisKKy0tLT4gVm9pY2kgKCB1bmUgbGlnbmUgZGUgdGVzdCBjb250ZW5hbnQgZGVzICgsIGRlcyBbIF0gZXQgZGVzIHsgfSApKS4KKworTm90ZTogQ2V0dGUgZm9uY3Rpb25uYWxpdMOpIGVzdCB0csOocyB1dGlsZSBsb3JzIGR1IGTDqWJvZ2FnZSBkJ3VuIHByb2dyYW1tZSBxdWkKKyAgICAgIGNvbnRpZW50IGRlcyBwYXJlbnRow6hzZXMgZMOpc8OpcXVpbGlicsOpZXMgIQorCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgICAgTGXDp29uIDQuNCA6IFVORSBNQU5Jw4hSRSBERSBDT1JSSUdFUiBMRVMgRVJSRVVSUworCisKKyAgKiogVGFwZXogIDpzL2FuY2llbi9ub3V2ZWF1L2cgIHBvdXIgcmVtcGxhY2VyICdhbmNpZW4nIHBhciAnbm91dmVhdScuICAqKgorCisgIDEuIETDqXBsYWNleiBsZSBjdXJzZXVyIHN1ciBsYSBsaWduZSBtYXJxdcOpZSAtLS0+IGNpLWRlc3NvdXMuCisKKyAgMi4gVGFwZXogIDpzL2xlZS9sZSA8RW50csOpZT4gLiBOb3RleiBxdWUgY2V0dGUgY29tbWFuZGUgY2hhbmdlIHNldWxlbWVudCBsYQorICAgICBwcmVtacOocmUgb2NjdXJlbmNlIHN1ciBsYSBsaWduZS4KKworICAzLiBQdWlzIHRhcGV6ICA6cy9sZWUvbGUvZyAgcXVpIG9yZG9ubmUgZGUgZmFpcmUgdW5lIHN1YnN0aXR1dGlvbiBnbG9iYWxlCisgICAgIHN1ciBsYSBsaWduZS4gQ2VsYSBjaGFuZ2UgdG91dGVzIGxlcyBvY2N1cmVuY2VzIHN1ciBsYSBsaWduZQorCistLS0+IGxlZSBtZWlsbGV1ciBtb21lbnQgcG91ciByZWdhcmRlciBsZWVzIGZsZXVycyBlc3QgcGVuZGFudCBsZWUgUHJpbnRlbXBzLgorCisgIDQuIFBvdXIgY2hhbmdlciB0b3V0ZXMgbGVzIG9jY3VyZW5jZXMgZCd1biB0ZXh0ZSwgZW50cmUgZGV1eCBsaWduZXMsCisgICAgIHRhcGV6ICA6Iywjcy9hbmNpZW4vbm91dmVhdS9nICBvw7kgIywjIHNvbnQgbGVzIG51bcOpcm9zIGRlcyBkZXV4IGxpZ25lcy4KKyAgICAgVGFwZXogIDolcy9hbmNpZW4vbm91dmVhdS9nICAgIHBvdXIgY2hhbmdlciBjaGFxdWUgb2NjdXJlbmNlIGRhbnMgdG91dAorCQkJCSAgICBsZSBmaWNoaWVyLgorCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgIFLDiVNVTcOJIERFIExBIExFw4dPTiA0CisKKworICAxLiBDdHJsLUcgIGFmZmljaGUgdm90cmUgcG9zaXRpb24gZGFucyBsZSBmaWNoaWVyIGV0IGwnw6l0YXQgZGUgY2VsdWktY2kuCisgICAgIE1hai1HICB2b3VzIHBsYWNlIMOgIGxhIGZpbiBkdSBmaWNoaWVyLiBVbiBudW3DqXJvIGRlIGxpZ25lIHN1aXZpIGRlIE1hai1HCisgICAgIHZvdXMgcGxhY2Ugw6AgY2V0dGUgbGlnbmUuCisKKyAgMi4gVGFwZXIgIC8gIHN1aXZpIGQndW4gdGV4dGUgcmVjaGVyY2hlIGNlIHRleHRlIHZlcnMgbCdBVkFOVC4KKyAgICAgVGFwZXIgID8gIHN1aXZpIGQndW4gdGV4dGUgcmVjaGVyY2hlIGNlIHRleHRlIHZlcnMgbCdBUlJJw4hSRS4KKyAgICAgQXByw6hzIHVuZSByZWNoZXJjaGUgdGFwZXoJbiAgcG91ciB0cm91dmVyIGwnb2NjdXJlbmNlIHN1aXZhbnRlIGRhbnMgbGEKKyAgICAgbcOqbWUgZGlyZWN0aW9uIG91CU1hai1OICBwb3VyIHJlY2hlcmNoZXIgZGFucyBsYSBkaXJlY3Rpb24gb3Bwb3PDqWUuCisKKyAgMy4gVGFwZXIgICUgIGxvcnNxdWUgbGUgY3Vyc2V1ciBlc3Qgc3VyICAoLCApLCBbLCBdLCB7IG91IH0gIGTDqXBsYWNlCisgICAgIGNlbHVpLWNpIHN1ciBsZSBjYXJhY3TDqHJlIGNvcnJlc3BvbmRhbnQuCisKKyAgNC4gUG91ciByZW1wbGFjZXIgbGUgcHJlbWllciBhYSBwYXIgYmIgc3VyIHVuZSBsaWduZSB0YXBlegkgOnMvYWEvYmIKKyAgICAgUG91ciByZW1wbGFjZXIgdG91cyBsZXMgYWEgcGFyIGJiIHN1ciB1bmUgbGlnbmUgdGFwZXoJIDpzL2FhL2JiL2cKKyAgICAgUG91ciByZW1wbGFjZXIgZHUgdGV4dGUgZW50cmUgZGV1eCBudW3DqXJvcyBkZSBsaWduZSB0YXBlegkgOiMsI3MvYWEvYmIvZworICAgICBQb3VyIHJlbXBsYWNlciB0b3V0ZXMgbGVzIG9jY3VyZW5jZXMgZGFucyBsZSBmaWNoaWVyIHRhcGV6ICA6JXMvYWEvYmIvZworICAgICBQb3VyIGRlbWFuZGVyIHVuZSBjb25maXJtYXRpb24gw6AgY2hhcXVlIGZvaXMgYWpvdXRleiAnYycJIDolcy9hYS9iYi9nYworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgIExlw6dvbiA1LjEgOiBDT01NRU5UIEVYw4lDVVRFUiBVTkUgQ09NTUFOREUgRVhURVJORQorCisKKyAqKiBUYXBleiAgOiEgIHN1aXZpIGQndW5lIGNvbW1hbmRlIGV4dGVybmUgcG91ciBleMOpY3V0ZXIgY2V0dGUgY29tbWFuZGUuICoqCisKKyAgMS4gVGFwZXogbGUgIDogIGZhbWlsaWVyIHBvdXIgbWV0dHJlIGxlIGN1cnNldXIgZW4gYmFzIGRlIGwnw6ljcmFuLiBDZWxhIHZvdXMKKyAgICAgcGVybWV0IGRlIHNhaXNpciB1bmUgY29tbWFuZGUuCisKKyAgMi4gUHVpcyB0YXBleiB1biAgISAgKHBvaW50IGQnZXhjbGFtYXRpb24pLiBDZWxhIHZvdXMgcGVybWV0IGQnZXjDqWN1dGVyCisgICAgIG4naW1wb3J0ZSBxdWVsbGUgY29tbWFuZGUgdmFsaWRlIHBvdXIgdm90cmUgaW50ZXJwcsOpdGV1ciAoc2hlbGwpLgorCisgIDMuIFBhciBleGVtcGxlLCB0YXBleiAgbHMgIGFwcsOocyBsZSAgISAgZXQgYXBwdXlleiA8RW50csOpZT4uIENlY2kgYWZmaWNoZXJhCisgICAgIGxhIGxpc3RlIGRlcyBmaWNoaWVycyBkdSBkb3NzaWVyIGNvdXJhbnQsIGNvbW1lIHNpIHZvdXMgYXZpZXogdGFww6kgbGEKKyAgICAgY29tbWFuZGUgw6AgbCdpbnZpdGUgZHUgc2hlbGwuIFV0aWxpc2V6ICA6IWRpciAgc2kJOiFscyAgbmUgbWFyY2hlIHBhcy4KKworTm90ZTogIElsIGVzdCBwb3NzaWJsZSBkJ2V4w6ljdXRlciBuJ2ltcG9ydGUgcXVlbGxlIGNvbW1hbmRlIGV4dGVybmUgZGUgY2V0dGUKKyAgICAgICBtYW5pw6hyZS4KKworTm90ZTogIFRvdXRlcyBsZXMgY29tbWFuZGVzICA6ICBkb2l2ZW50IGZpbmlyIHBhciBsYSBmcmFwcGUgZGUgPEVudHLDqWU+LgorCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJIExlw6dvbiA1LjIgOiBQTFVTIERFIETDiVRBSUxTIFNVUiBMJ0VOUkVHSVNUUkVNRU5UIERFIEZJQ0hJRVJTCisKKworICoqIFBvdXIgZW5yZWdpc3RyZXIgbGVzIGNoYW5nZW1lbnRzIGZhaXRzIGF1IGZpY2hpZXIsIHRhcGV6ICA6dyBGSUNISUVSIC4gKioKKworICAxLiBUYXBleiAgOiFkaXIgIG91ICA6IWxzICBwb3VyIGF2b2lyIGxhIGxpc3RlIGRlcyBmaWNoaWVycyBkdSBkb3NzaWVyCisgICAgIGNvdXJhbnQuIFZvdXMgc2F2ZXogZMOpasOgIHF1J2lsIGZhdXQgYXBwdXllciA8RW50csOpZT4gYXByw6hzIGNlbGEuCisKKyAgMi4gQ2hvaXNpc3NleiB1biBub20gZGUgZmljaGllciBxdWkgbidleGlzdGUgcGFzIGVuY29yZSwgcGFyIGV4ZW1wbGUgVEVTVC4KKworICAzLiBQdWlzIHRhcGV6ICA6dyBURVNUICAob8O5IFRFU1QgZXN0IGxlIG5vbSBxdWUgdm91cyBhdmV6IGNob2lzaSkuCisKKyAgNC4gQ2VsYSBzYXV2ZWdhcmRlIHRvdXQgbGUgZmljaGllciAoVHV0b3JpZWwgVmltKSBzb3VzIGxlIG5vbSBURVNULgorICAgICBQb3VyIGxlIHbDqXJpZmllciwgdGFwZXogIDohZGlyICBwb3VyIHJldmlzdWFsaXNlciBsZSBjb250ZW51IGR1IGRvc3NpZXIuCisKK05vdGV6IHF1ZSBzaSB2b3VzIHF1aXR0ZXogVmltIGV0IHkgcmV0b3VybmV6IGF2ZWMgbGUgZmljaGllciBURVNULCBjZWx1aS1jaQorc2VyYSB1bmUgY29waWUgZXhhY3RlIGR1IGNvdXJzIGF1IG1vbWVudCBvw7kgdm91cyBsJ2F2ZXogc2F1dsOpLgorCisgIDUuIE1haW50ZW5hbnQsIGVmZmFjZXogbGUgZmljaGllciBlbiB0YXBhbnQgKE1TLURPUyk6ICAgIDohZGVsIFRFU1QKKwkJCQkJICAgb3UgKFVuaXgpOgkgICA6IXJtIFRFU1QKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgIExlw6dvbiA1LjMgOiBVTiBFTlJFR0lTVFJFTUVOVCBTw4lMRUNUSUYKKworCisgICAgICoqIFBvdXIgZW5yZWdpc3RyZXIgdW5lIHBvcnRpb24gZGUgZmljaGllciwgdGFwZXoJOiMsI3cgRklDSElFUiAqKgorCisgIDEuIFRhcGV6IMOgIG5vdXZlYXUgIDohZGlyICBvdSAgOiFscyAgcG91ciB2aXN1YWxpc2VyIGxlIGNvbnRlbnUgZHUgZG9zc2llcgorICAgICBjb3VyYW50IGV0IGNob2lzaXNzZXogdW4gbm9tIGRlIGZpY2hpZXIsIHRlbCBxdWUgVEVTVC4KKworICAyLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBqdXNxdSdlbiBoYXV0IGRlIGNldHRlIHBhZ2UgZXQgdGFwZXogIEN0cmwtRyAgcG91cgorICAgICBjb25uYcOudHJlIGxlIG51bcOpcm8gZGUgY2V0dGUgbGlnbmUuIE5PVEVaIENFIE5VTcOJUk8gIQorCisgIDMuIFB1aXMgcmVuZGV6LXZvdXMgYXUgYmFzIGRlIGNldHRlIHBhZ2UgZXQgdGFwZXogw6Agbm91dmVhdSAgQ3RybC1HIC4KKyAgICAgTk9URVogw4lHQUxFTUVOVCBDRSBOVU3DiVJPICEKKworICA0LiBQb3VyIGVucmVnaXN0cmVyIFNFVUxFTUVOVCB1bmUgcG9ydGlvbiBkJ3VuIGZpY2hpZXIsIHRhcGV6ICA6IywjdyBURVNUCisgICAgIG/DuSAjLCMgc29udCBsZXMgZGV1eCBudW3DqXJvcyBxdWUgdm91cyBhdmV6IG5vdMOpcyAoaGF1dCxiYXMpIGV0IFRFU1QgZXN0CisgICAgIGxlIG5vbSBkdSBmaWNoaWVyLgorCisgIDUuIFVuZSBmb2lzIGVuY29yZSwgdsOpcmlmaWV6IGxhIHByw6lzZW5jZSBkdSBmaWNoaWVyIGF2ZWMgIDohZGlyICBtYWlzIE5FCisgICAgIEwnRUZGQUNFWiBQQVMuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSBMZcOnb24gNS40IDogUsOJQ1VQw4lSQVRJT04gRVQgRlVTSU9OIERFIEZJQ0hJRVJTCisKKworCSoqIFBvdXIgaW5zw6lyZXIgbGUgY29udGVudSBkJ3VuIGZpY2hpZXIsIHRhcGV6CTpyIEZJQ0hJRVIgKioKKworICAxLiBUYXBleiAgOiFkaXIgIHBvdXIgdsOpcmlmaWVyIHF1ZSB2b3RyZSBmaWNoaWVyIFRFU1QgZXN0IGVuY29yZSBsw6AuCisKKyAgMi4gUGxhY2V6IGxlIGN1cnNldXIgZW4gaGF1dCBkZSBjZXR0ZSBwYWdlLgorCitOT1RFOiAgQXByw6hzIGF2b2lyIHN1aXZpIGwnw6l0YXBlIDMgdm91cyB2ZXJyZXogw6AgbCfDqWNyYW4gbGEgTGXDp29uIDUuMy4KKyAgICAgICBEw6lwbGFjZXotdm91cyB2ZXJzIGxlIGJhcyBqdXNxdSfDoCByZXZlbmlyIMOgIGNldHRlIGxlw6dvbi4KKworICAzLiBNYWludGVuYW50IHLDqWN1cMOpcmV6IHZvdHJlIGZpY2hpZXIgVEVTVCBlbiB1dGlsaXNhbnQgbGEgY29tbWFuZGUgIDpyIFRFU1QKKyAgICAgb8O5IFRFU1QgZXN0IGxlIG5vbSBkZSB2b3RyZSBmaWNoaWVyLgorCitOT1RFOiAgTGUgZmljaGllciBxdWUgdm91cyByw6ljdXDDqXJleiBlc3QgcGxhY8OpIGzDoCBvw7kgc2UgdHJvdXZlIGxlIGN1cnNldXIuCisKKyAgNC4gUG91ciB2w6lyaWZpZXIgcXVlIGxlIGZpY2hpZXIgYSBiaWVuIMOpdMOpIGluc8OpcsOpLCByZW1vbnRleiBldCB2w6lyaWZpZXoKKyAgICAgcXUnaWwgeSBhIG1haW50ZW5hbnQgZGV1eCBjb3BpZXMgZGUgbGEgTGXDp29uIDUuMywgbCdvcmlnaW5hbGUgZXQgY2VsbGUKKyAgICAgY29udGVudWUgZGFucyBsZSBmaWNoaWVyLgorCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgICBSw4lTVU3DiSBERSBMQSBMRcOHT04gNQorCisKKyAgMS4gIDohY29tbWFuZGUgIGV4w6ljdXRlIHVuZSBjb21tYW5kZSBleHRlcm5lLgorCisgICAgICBRdWVscXVlcyBleGVtcGxlcyBwcmF0aXF1ZXM6CisJKE1TLURPUykJKFVuaXgpCisJIDohZGlyCQkgOiFscwkJIGFmZmljaGUgbGUgY29udGVudSBkdSBkb3NzaWVyIGNvdXJhbnQuCisJIDohZGVsIEZJQ0hJRVIgICA6IXJtIEZJQ0hJRVIgICAgZWZmYWNlIEZJQ0hJRVIuCisKKyAgMi4gIDp3IEZJQ0hJRVIgIGVucmVnaXN0cmUgbGUgZmljaGllciBWaW0gY291cmFudCBzdXIgbGUgZGlzcXVlIGF2ZWMgcG91cgorCQkgIG5vbSBGSUNISUVSLgorCisgIDMuICA6IywjdyBGSUNISUVSICBlbnJlZ2lzdHJlIGxlcyBsaWduZXMgIyDDoCAjIGRhbnMgbGUgZmljaGllciBGSUNISUVSLgorCisgIDQuICA6ciBGSUNISUVSICByw6ljdXDDqHJlIGxlIGZpY2hpZXIgRklDSElFUiBldCBsJ2luc8OocmUgZGFucyBsZSBmaWNoaWVyCisJCSAgY291cmFudCDDoCBwYXJ0aXIgZGUgbGEgcG9zaXRpb24gZHUgY3Vyc2V1ci4KKworCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICBMZcOnb24gNi4xIDogTCdPVVZFUlRVUkUKKworCisqKiBUYXBleiAgbyAgcG91ciBvdXZyaXIgdW5lIGxpZ25lIHNvdXMgbGUgY3Vyc2V1ciBldCB5IGFsbGVyIGVuIEluc2VydGlvbi4gKioKKworICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgbGlnbmUgbWFycXXDqWUgLS0tPiBjaS1kZXNzb3VzLgorCisgIDIuIFRhcGV6ICBvICAobWludXNjdWxlKSBwb3VyIG91dnJpciB1bmUgbGlnbmUgU09VUyBsZSBjdXJzZXVyIGV0IHZvdXMgeQorICAgICBwbGFjZXIgZW4gbW9kZSBJbnNlcnRpb24uCisKKyAgMy4gUHVpcyByZWNvcGlleiBsYSBsaWduZSBtYXJxdcOpZSAtLS0+IGV0IGFwcHV5ZXogc3VyIDzDiWNoYXA+IHBvdXIgcXVpdHRlcgorICAgICBsZSBtb2RlIEluc2VydGlvbi4KKworLS0tPiBFbiB0YXBhbnQJbyAgbGUgY3Vyc2V1ciBzZSBtZXQgc3VyIGxhIGxpZ25lIG91dmVydGUsIGVuIG1vZGUgSW5zZXJ0aW9uLgorCisgIDQuIFBvdXIgb3V2cmlyIHVuZSBsaWduZSBhdSBERVNTVVMgZHUgY3Vyc2V1ciwgdGFwZXogc2ltcGxlbWVudCB1biAgTworICAgICBtYWp1c2N1bGUsIHBsdXTDtHQgcXUndW4gIG8gIG1pbnVzY3VsZS4gRmFpdGVzIHVuIGVzc2FpIHN1ciBsYSBsaWduZQorICAgICBjaS1kZXNzb3VzLgorT3V2cmV6IHVuZSBsaWduZSBjaS1kZXNzdXMgZW4gdGFwYW50IE1BSi1PIGxvcnNxdWUgbGUgY3Vyc2V1ciBlc3QgaWNpLgorCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICBMZcOnb24gNi4yIDogTCdBSk9VVAorCisKKwkgICAgKiogVGFwZXogIGEgIHBvdXIgaW5zw6lyZXIgZHUgdGV4dGUgQVBSw4hTIGxlIGN1cnNldXIuICoqCisKKyAgMS4gUGxhY2V6IGxlIGN1cnNldXIgw6AgbGEgZmluIGRlIGxhIHByZW1pw6hyZSBsaWduZSBtYXJxdcOpZSAtLS0+IGNpLWRlc3NvdXMKKyAgICAgZW4gdGFwYW50CSQgIGVuIG1vZGUgTm9ybWFsLgorCisgIDIuIFRhcGV6IHVuICBhICAobWludXNjdWxlKSBwb3VyIGFqb3V0ZXIgZHUgdGV4dGUgQVBSw4hTIGxlIGNhcmFjdMOocmUgc2l0dcOpCisgICAgIHNvdXMgbGUgY3Vyc2V1ci4gKCBBICBtYWp1c2N1bGUgYWpvdXRlIGR1IHRleHRlIMOgIGxhIGZpbiBkZSBsYSBsaWduZSkuCisKK05vdGU6IENlY2kgw6l2aXRlIGRlIHRhcGVyICBpICwgbGUgZGVybmllciBjYXJhY3TDqHJlLCBsZSB0ZXh0ZSDDoCBpbnPDqXJlciwKKyAgICAgIDzDiWNoYXA+LCBjdXJzZXVyLcOgLWRyb2l0ZSwgZXQgZmluYWxlbWVudAl4ICwganVzdGUgcG91ciBham91dGVyIGR1CisgICAgICB0ZXh0ZSDDoCBsYSBmaW4gZCd1bmUgbGlnbmUgIQorCisgIDMuIE1haW50ZW5hbnQsIGNvbXBsw6l0ZXogbGEgcHJlbWnDqHJlIGxpZ25lLiBOb3RleiDDqWdhbGVtZW50IHF1ZSBsJ2Fqb3V0IGVzdAorICAgICBpZGVudGlxdWUgYXUgbW9kZSBJbnNlcnRpb24sIGhvcm1pcyBsYSBwb3NpdGlvbiBvw7kgbGUgdGV4dGUgZXN0IGluc8OpcsOpLgorCistLS0+IENldHRlIGxpZ25lIHZvdXMgcGVybWV0IGRlIHByYXRpcXVlcgorLS0tPiBDZXR0ZSBsaWduZSB2b3VzIHBlcm1ldCBkZSBwcmF0aXF1ZXIgbCdham91dCBkZSB0ZXh0ZSBlbiBmaW4gZGUgbGlnbmUuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCUxlw6dvbiA2LjMgOiBVTkUgQVVUUkUgVkVSU0lPTiBEVSBSRU1QTEFDRU1FTlQKKworCisgICAgICAgKiogVGFwZXogdW4gIFIgIG1hanVzY3VsZSBwb3VyIHJlbXBsYWNlciBwbHVzIGQndW4gY2FyYWN0w6hyZS4gKioKKworICAxLiBEw6lwbGFjZXogbGUgY3Vyc2V1ciBzdXIgbGEgcHJlbWnDqHJlIGxpZ25lIG1hcnF1w6llIC0tLT4gY2ktZGVzc291cy4KKworICAyLiBQbGFjZXogbGUgY3Vyc2V1ciBhdSBkw6lidXQgZHUgcHJlbWllciBtb3QgcXVpIGRpZmbDqHJlIGRlIGxhIHNlY29uZGUgbGlnbmUKKyAgICAgbWFycXXDqWUgLS0tPiAobGUgbW90ICdjZWxsZScpLgorCisgIDMuIFB1aXMgdGFwZXogIFIgIGV0IHJlbXBsYWNleiBsZSByZXN0ZSBkdSB0ZXh0ZSBkZSBsYSBwcmVtacOocmUgbGlnbmUgZW4KKyAgICAgdGFwYW50IHBhciBkZXNzdXMgY2VsdWktY2ksIGRlIG1hbmnDqHJlIMOgIHJlbmRyZSBsYSBwcmVtacOocmUgbGlnbmUKKyAgICAgaWRlbnRpcXVlIMOgIGxhIHNlY29uZGUuCisKKy0tLT4gUG91ciByZW5kcmUgY2V0dGUgbGlnbmUgaWRlbnRpcXVlIMOgIGNlbGxlIGR1IGRlc3NvdXMgdXRpbGlzZXogbGUgY2xhdmllci4KKy0tLT4gUG91ciByZW5kcmUgY2V0dGUgbGlnbmUgaWRlbnRpcXVlIMOgIGxhIHNlY29uZGUsIHRhcGV6IFIgZXQgbGEgY29ycmVjdGlvbi4KKworICA0LiBOb3RleiBxdWUgbG9yc3F1ZSB2b3VzIGFwcHV5ZXogPMOJY2hhcD4sIGxlIHRleHRlIHF1aSBuJ2EgcGFzIGVuY29yZSDDqXTDqQorICAgICByZW1wbGFjw6kgcmVzdGUuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICAgIExlw6dvbiA2LjQgOiBSw4lHTEFHRSBERVMgT1BUSU9OUworCisKKyAgKiogUsOpZ2xvbnMgdW5lIG9wdGlvbiBhZmluIHF1ZSBsYSByZWNoZXJjaGUgZXQgbGEgc3Vic3RpdHV0aW9uIGlnbm9yZW50IGxhCisgICAgIGNhc3NlIGRlcyBjYXJhY3TDqHJlcy4gKioKKworICAxLiBSZWNoZXJjaGV6ICdpZ25vcmUnIGVuIHRhcGFudCAgL2lnbm9yZSAuCisgICAgIFLDqXDDqXRleiBjZWNpIHBsdXNpZXVycyBmb2lzIGVuIHV0aWxpc2FudCBsYSB0b3VjaGUgIG4gLgorCisgIDIuIEFjdGl2ZXogbCdvcHRpb24gJ2ljJyAoSWdub3JlciBjYXNzZSkgZW4gdGFwYW50ICA6c2V0IGljIC4KKworICAzLiBQdWlzIHBvdXJzdWl2ZXogdm90cmUgcmVjaGVyY2hlIGVuIHV0aWxpc2FudCAgbiAuCisgICAgIFLDqXDDqXRleiBjZXR0ZSByZWNoZXJjaGUgcGx1c2lldXJzIGZvaXMgYXZlYyBsYSB0b3VjaGUgIG4gLgorCisgIDQuIEFjdGl2ZXogbGVzIG9wdGlvbnMgJ2hsc2VhcmNoJyBldCAnaW5jc2VhcmNoJyBhdmVjICA6c2V0IGhscyBpcyAuCisKKyAgNS4gUHVpcyByZWNvbW1lbmNleiB1bmUgcmVjaGVyY2hlLCBldCBmYWl0ZXMgYmllbiBhdHRlbnRpb24gw6AgY2UgcXVpIHNlCisgICAgIHByb2R1aXQ6ICAvaWdub3JlIC4KKworICA2LiBQb3VyIGludGVycm9tcHJlIGxhIG1pc2UgZW4gc3VyYnJpbGxhbmNlIGRlcyByw6lzdWx0YXRzLCB0YXBlejoKKyAgICAgOm5vaGxzZWFyY2gKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgIFLDiVNVTcOJIERFIExBIExFw4dPTiA2CisKKworICAxLiBUYXBlciAgbyAgb3V2cmUgdW5lIGxpZ25lIFNPVVMgbGUgY3Vyc2V1ciBldCB5IHBsYWNlIGNlbHVpLWNpIGVuIG1vZGUKKyAgICAgSW5zZXJ0aW9uLiBUYXBlciB1biAgTyAgbWFqdXNjdWxlIG91dnJlIHVuZSBsaWduZSBhdSBERVNTVVMgZGUgbGEgbGlnbmUKKyAgICAgb8O5IHNlIHRyb3V2ZSBsZSBjdXJzZXVyLgorCisgIDIuIFRhcGV6IHVuICBhICBwb3VyIGluc8OpcmVyIGR1IHRleHRlIEFQUsOIUyBsZSBjYXJhY3TDqHJlIG/DuSBzZSB0cm91dmUgbGUKKyAgICAgY3Vyc2V1ci4gVGFwZXIgdW4JQSAgbWFqdXNjdWxlIGFqb3V0ZSBkdSB0ZXh0ZSBhdXRvbWF0aXF1ZW1lbnQgw6AgbGEgZmluCisgICAgIGRlIGxhIGxpZ25lLgorCisgIDMuIFRhcGVyIHVuICBSICBtYWp1c2N1bGUgYWN0aXZlIGxlIG1vZGUgUmVtcGxhY2VtZW50IGp1c3F1J8OgIGNlIHF1ZSBsYQorICAgICB0b3VjaGUgIDzDiWNoYXA+ICBzb2l0IGFwcHV5w6llIHBvdXIgZW4gc29ydGlyLgorCisgIDQuIFRhcGVyICA6c2V0IHh4eCAgYWN0aXZlIGwnb3B0aW9uICd4eHgnLgorCisKKworCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICBMZcOnb24gNyA6IEFDQ8OJREVSIMOAIEwnQUlERSBFTiBMSUdORQorCisJCSAgKiogVXRpbGlzZXIgbGUgc3lzdMOobWUgZCdhaWRlIGVuIGxpZ25lLiAqKgorCisgIFZpbSBhIHVuIHN5c3TDqG1lIGNvbXBsZXQgZCdhaWRlIGVuIGxpZ25lLiAgUG91ciB5IGFjY8OpZGVyLCBlc3NheWV6IGwndW5lIGRlCisgIGNlcyB0cm9pcyBtw6l0aG9kZXM6CisJLSBhcHB1eWV6IGxhIHRvdWNoZSA8SGVscD4gKHNpIHZvdXMgZW4gYXZleiB1bmUpCisJLSBhcHB1eWV6IGxhIHRvdWNoZSA8RjE+IChzaSB2b3VzIGVuIGF2ZXogdW5lKQorCS0gdGFwZXogIDpoZWxwIDxFbnRyw6llPgorCisgIFRhcGV6ICA6cSA8RW50csOpZT4gIHBvdXIgZmVybWVyIGxhIGZlbsOqdHJlIGQnYWlkZS4KKworICBWb3VzIHBvdXZleiBhY2PDqWRlciDDoCBsJ2FpZGUgc3VyIMOgIHBldSBwcsOocyBuJ2ltcG9ydGUgcXVlbCBzdWpldCBlbiBkb25uYW50CisgIGRlcyBhcmd1bWVudHMgw6AgbGEgY29tbWFuZGUgIDpoZWxwIC4gRXNzYXlleiBwYXIgZXhlbXBsZSAobidvdWJsaWV6IHBhcworICBkJ2FwcHV5ZXIgc3VyIDxFbnRyw6llPik6CisKKwk6aGVscCB3CisJOmhlbHAgY188VAorCTpoZWxwIGluc2VydC1pbmRleAorCTpoZWxwIHVzZXItbWFudWFsCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICBMZcOnb24gOCA6IENSw4lFUiBVTiBTQ1JJUFQgREUgRMOJTUFSUkFHRQorCisJCSAgKiogQWN0aXZlciBsZXMgZm9uY3Rpb25uYWxpdMOpcyBkZSBWaW0uICoqCisKKyAgVmltIGEgYmVhdWNvdXAgcGx1cyBkZSBmb25jdGlvbm5hbGl0w6lzIHF1ZSBWaSwgbWFpcyBsYSBwbHVwYXJ0IGRlIGNlbGxlcy1jaQorICBzb250IGTDqXNhY3RpdsOpZXMgcGFyIGTDqWZhdXQuICBQb3VyIGNvbW1lbmNlciDDoCBsZXMgdXRpbGlzZXIsIHZvdXMgZGV2ZXoKKyAgY3LDqWVyIHVuIGZpY2hpZXIgInZpbXJjIi4KKworICAxLiBDb21tZW5jZXogw6Agw6lkaXRlciBsZSBmaWNoaWVyICJ2aW1yYyIuIENlY2kgZMOpcGVuZCBkZSB2b3RyZSBzeXN0w6htZToKKwk6ZWRpdCB+Ly52aW1yYwkJCXBvdXIgVW5peAorCTplZGl0ICRWSU0vX3ZpbXJjCQlwb3VyIE1TLVdpbmRvd3MKKworICAyLiBJbnTDqWdyZXogbWFpbnRlbmFudCBsZSB0ZXh0ZSBkdSBmaWNoaWVyICJ2aW1yYyIgZCdleGVtcGxlOgorCTpyZWFkICRWSU1SVU5USU1FL3ZpbXJjX2V4YW1wbGUudmltCisKKyAgMy4gRW5yZWdpc3RyZXogbGUgZmljaGllciBhdmVjOgorCTp3cml0ZQorCisgIExhIHByb2NoYWluZSBmb2lzIHF1ZSB2b3VzIGTDqW1hcnJlcmV6IFZpbSwgbGUgc3VybGlnbmFnZSBzeW50YWN0aXF1ZSBzZXJhCisgIGFjdGl2w6kuIFZvdXMgcG91dmV6IGFqb3V0ZXIgdG91cyB2b3MgcsOpZ2xhZ2VzIHByw6lmw6lyw6lzIGRhbnMgY2UgZmljaGllci4KKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworICBDZWNpIGNvbmNsdXQgbGUgVHV0b3JpZWwgVmltLiAgTGUgYnV0IMOpdGFpdCBkZSB2b3VzIGRvbm5lciB1biBicmVmIGFwZXLDp3UgZGUKKyAgbCfDqWRpdGV1ciBWaW0sIGp1c3RlIGFzc2V6IHBvdXIgdm91cyBwZXJtZXR0cmUgZCd1dGlsaXNlciBsJ8OpZGl0ZXVyCisgIHJlbGF0aXZlbWVudCBmYWNpbGVtZW50LiAgSWwgZXN0IGxvaW4gZCfDqnRyZSBjb21wbGV0LCB2dSBxdWUgVmltIGEgYmVhdWNvdXAKKyAgYmVhdWNvdXAgcGx1cyBkZSBjb21tYW5kZXMuICBVbiBNYW51ZWwgZGUgbCd1dGlsaXNhdGV1ciBlc3QgZGlzcG9uaWJsZSBlbgorICBhbmdsYWlzOiAgOmhlbHAgdXNlci1tYW51YWwgLgorCisgIFBvdXIgY29udGludWVyIMOgIGTDqWNvdXZyaXIgZXQgw6AgYXBwcmVuZHJlIFZpbSwgaWwgZXhpc3RlIHVuIGxpdnJlIHRyYWR1aXQgZW4KKyAgZnJhbsOnYWlzLiBJbCBwYXJsZSBwbHVzIGRlIFZpIHF1ZSBkZSBWaW0sIG1haXMgcG91cnJhIHZvdXMgw6p0cmUgdXRpbGUuCisJTCfDqWRpdGV1ciBWaSAtIENvbGxlY3Rpb24gUHLDqWNpcyBldCBjb25jaXMgLSBwYXIgQXJub2xkIFJvYmJpbnMKKwnDiWRpdGV1cjogTydSZWlsbHkgRnJhbmNlCisJSVNCTjogMi04NDE3Ny0xMDItNAorCisgIERldXggbGl2cmVzIGVuIGFuZ2xhaXMgc29udCDDqWdhbGVtZW50IG1lbnRpb25uw6lzIGRhbnMgbGEgdmVyc2lvbiBvcmlnaW5hbGUKKyAgZGUgY2UgdHV0b3JpZWwsIGRvbnQgdW4gcXVpIHRyYWl0ZSBzcMOpY2lmaXF1ZW1lbnQgZGUgVmltLiBNZXJjaSBkZSB2b3VzIHkKKyAgcsOpZsOpcmVyIHNpIHZvdXMgw6p0ZXMgaW50w6lyZXNzw6kuCisKKyAgQ2UgdHV0b3JpZWwgYSDDqXTDqSDDqWNyaXQgcGFyIE1pY2hhZWwgQy4gUGllcmNlIGV0IFJvYmVydCBLLiBXYXJlIGRlIGwnw4ljb2xlCisgIGRlcyBNaW5lcyBkdSBDb2xvcmFkbyBldCByZXByZW5kIGRlcyBpZMOpZXMgZm91cm5pZXMgcGFyIENoYXJsZXMgU21pdGgsCisgIFVuaXZlcnN0w6kgZCfDiXRhdCBkdSBDb2xvcmFkby4gIEUtbWFpbDogYndhcmVAbWluZXMuY29sb3JhZG8uZWR1LgorCisgIE1vZGlmacOpIHBvdXIgVmltIHBhciBCcmFtIE1vb2xlbmFyLgorCisgIFRyYWR1aXQgZW4gRnJhbsOnYWlzIHBhciBBZHJpZW4gQmVhdSwgZW4gYXZyaWwgMjAwMS4KKyAgRS1tYWlsOgl2ZXJzaW9uLmZyYW5jYWlzZUBmcmVlLmZyCisgIExhc3QgQ2hhbmdlOgkyMDAzIE1heSAyOQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLmhyLmNwMTI1MCBiL3J1bnRpbWUvdHV0b3IvdHV0b3IuaHIuY3AxMjUwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNzcxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL3R1dG9yL3R1dG9yLmhyLmNwMTI1MApAQCAtMCwwICsxLDk3MiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBEIG8gYiByIG8gZCBvIJogbCBpICAgdSAgIFZJTSAgIHAgciBpIHIgdSDoIG4gaSBrICAtICAgIFZlcnppamEgMS43ICAgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSBqZSB2cmxvIG1v5mFuIGVkaXRvciBrb2ppIGltYSBtbm9nbyBuYXJlZGJpLCBwcmV2aZplIGRhIGJpIGloCisgICAgIHNlIHN2aWggb3ZkamUgc3BvbWVudWxvLiAgTmFtamVuYSBwcmlydehuaWthIGplIG9iamFzbml0aSBkb3ZvbGpubworICAgICBuYXJlZGJpIGtha28gYmkgcG/oZXRuaWNpIHpuYXRubyBsYWuaZSBrb3Jpc3RpbGkgb3ZhaiBzdmVzdHJhbiBlZGl0b3IuCisKKyAgICAgUHJpYmxpnm5vIHZyaWplbWUgcG90cmVibm8gemEgdXNwamWaYW4gemF2cppldGFrIHByaXJ16G5pa2EgamUgb2tvCisgICAgIDMwIG1pbnV0YSBhIG92aXNpIG8gdG9tZSBrb2xpa28g5mUgdGUgdnJlbWVuYSBvZHZvaml0aSB6YSB2amWeYmFuamUuCisKKyAgICAgVVBPWk9SRU5KRToKKyAgICAgTmFyZWRiZSB1IG92b20gcHJpcnXobmlrdSDmZSBwcm9taWplbml0aSBvdmFqIHRla3N0LgorICAgICBOYXByYXZpdGUga29waWp1IG92ZSBkYXRvdGVrZSBrYWtvIGJpIHN0ZSBuYSBpc3RvaiB2amWeYmFsaQorICAgICAoYWtvIHN0ZSBwb2tyZW51bGkgInZpbXR1dG9yIiBvdm8gamUgdmXmIGtvcGlqYSkuCisKKyAgICAgVnJsbyBqZSB2YZ5ubyBwcmltaWpldGl0aSBkYSBqZSBvdmFqIHByaXJ16G5payBuYW1pamVuamVuIHphIHZqZZ5iYW5qZS4KKyAgICAgUHJlY2l6bmlqZSwgbW9yYXRlIGl6dnKaaXRpIG5hcmVkYmUgdSBWaW0tdSBrYWtvIGJpIHN0ZSBpc3RlIG5hdehpbGkKKyAgICAgcHJhdmlsbm8ga29yaXN0aXRpLiBBa28gc2FtbyDoaXRhdGUgdGVrc3QsIHphYm9yYXZpdGkg5mUgdGUgbmFyZWRiZSEKKworICAgICBBa28gamUgQ2Fwc0xvY2sgdWtsanXoZW4gSVNLTEpVyElURSBnYS4gIFByaXRpc2thanRlIHRpcGt1ICBqICBrYWtvCisgICAgIGJpIHBvbWFrbGkga3Vyc29yIHN2ZSBkb2sgTGVrY2lqYSAxLjEgbmUgaXNwdW5pIGVrcmFuLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICAgTGVrY2lqYSAxLjE6ICBQT01JQ0FOSkUgS1VSU09SQQorCisKKyAqKiBaYSBwb21pY2FuamUga3Vyc29yYSwgcHJpdGlzbml0ZSBoLGosayxsIHRpcGtlIGtha28gamUgcHJpa2F6YW5vICoqCisJICAgICBeCisJICAgICBrCQkgICAgU2F2amV0OiAgaCB0aXBrYSBqZSBsaWpldm8gaSBwb21p6GUga3Vyc29yIGxpamV2by4KKyAgICAgICA8IGgJIGwgPgkJICAgbCB0aXBrYSBqZSBkZXNubyBpIHBvbWnoZSBrdXJzb3IgZGVzbm8uCisJICAgICBqICAgICAgICAgICAgICAgICAgICAgaiBpemdsZWRhIGthbyBzdHJlbGljYSB1c21qZXJlbmEgZG9samUuCisJICAgICB2CisgIDEuIFBvbWnoaXRlIGt1cnNvciBwbyBla3JhbnUgZG9rIHNlIG5lIG5hdmlrbmV0ZSBuYSBrb3JpmnRlbmplLgorCisgIDIuIERynml0ZSB0aXBrdSAoaikgcHJpdGlzbnV0b20uCisgICAgIFNhZGEgem5hdGUga2FrbyBkb+ZpIGRvIHNsamVkZeZlIGxla2NpamUuCisKKyAgMy4gS29yaXN0ZeZpIHRpcGt1IGogcHJpamXwaXRlIG5hIHNsamVkZeZ1IGxla2NpanUgMS4yLgorCitOQVBPTUVOQTogIEFrbyBuaXN0ZSBzaWd1cm5pIJp0byBzdGUgemFwcmF2byBwcml0aXNudWxpIHV2aWplayBrb3Jpc3RpdGUKKyAgICAgICAgICAgdGlwa3UgPEVTQz4ga2FrbyBiaSBwcmWabGkgdSBOb3JtYWwgbW9kIGkgb25kYSBwb2t1mmFqdGUgcG9ub3Zuby4KKworTkFQT01FTkE6ICBLdXJzb3Jza2UgdGlwa2UgcmFkZSBpc3RvLiAgS29yaZp0ZW5qZSBoamtsIHRpcGFrYSBqZSB6bmF0bm8KKyAgICAgICAgICAgYnKeZSwgbmFrb24gmnRvIHNlIGplZG5vbSBuYXZpa25ldGUgbmEgbmppaG92byBrb3JpmnRlbmplLiAgU3R2YXJubyEKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICBMZWtjaWphIDEuMjogSVpMQVogSVogVklNLWEKKworCisgICEhIFVQT1pPUkVOSkU6IFByaWplIGl6dm/wZW5qYSBiaWxvIGtvamVnIGtvcmFrYSwKKyAgICAgICAgICAgICAgICAgcHJv6Gl0YWp0ZSBjaWplbHUgbGVrY2lqdSEhCisKKyAgMS4gUHJpdGlzbml0ZSA8RVNDPiB0aXBrdSAoVmltIGplIHNhZGEgdSBOb3JtYWwgbW9kdSkuCisKKyAgMi4gT3RpcGthanRlOgk6cSEgPEVOVEVSPi4KKyAgICAgSXpsYXogaXogZWRpdG9yYSwgR1VCRSBzZSBzdmUgbmFwcmF2bGplbmUgcHJvbWplbmUuCisKKyAgMy4gS2FkYSBzZSBwb2phdmkgbGp1c2thLCB1dGlwa2FqdGUgbmFyZWRidSBrb2phIGplIHBva3JlbnVsYQorICAgICBvdmFqIHByaXJ16G5pazoJCXZpbXR1dG9yIDxFTlRFUj4KKworICA0LiBBa28gc3RlIHVwYW10aWxpIG92ZSBrb3Jha2UsIGl6dnKaaXRlIGloIHJlZG9tIG9kIDEgZG8gMworICAgICBrYWtvIGJpIHBvbm92bm8gcG9rcmVudWxpIGVkaXRvci4KKworTkFQT01FTkE6ICA6cSEgPEVOVEVSPiAgcG9uaZp0YXZhIHN2ZSBwcm9tamVuZSBrb2plIHN0ZSBuYXByYXZpbGkuCisgICAgICAgICAgIFUgc2xqZWRl5mltIGxla2NpamFtYSBuYXXoaXQg5mUgdGUga2FrbyBwcm9tamVuZSBzYeh1dmF0aS4KKworICA1LiBQb21ha25pdGUga3Vyc29yIG5hIExla2NpanUgMS4zLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgIExla2NpamEgMS4zOiBQUk9NSkVOQSBURUtTVEEgLSBCUklTQU5KRQorCisKKwkgICAgICAqKiBQcml0aXNuaXRlICB4ICB6YSBicmlzYW5qZSB6bmFrYSBwb2Qga3Vyc29yb20uICoqCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIEtha28gYmkgc3RlIGlzcHJhdmlsaSBwb2dyZZprZSwgcG9taehpdGUga3Vyc29yIGRvayBzZQorICAgICBuZSBidWRlIG5hbGF6aW8gbmEgc2xvdnUga29qZWcgdHJlYmF0ZSBpemJyaXNhdGkuCisKKyAgMy4gUHJpdGlzbml0ZSB0aXBrdSB4IGtha28gYmkgdWtsb25pbGkgbmWeZWxqZW5vIHNsb3ZvLgorCisgIDQuIFBvbm92aXRlIGtvcmFrZSBvZCAyIGRvIDQgZG9rIG5lIGlzcHJhdml0ZSBzdmUgcG9ncmWaa2UuCisKKy0tLT4gS0tLcmF2YWEgamVlIHByZXNza2/oaWxhIG1tamVzZWNjYy4KKworICA1LiBOYWtvbiCadG8gaXNwcmF2aXRlIGxpbmlqdSwgcHJpamXwaXRlIG5hIGxla2NpanUgMS40LgorCitOQVBPTUVOQTogIEtvcmlzdGXmaSBvdmFqIHByaXJ16G5payBuZSBwb2t1mmF2YWp0ZSBwYW10aXRpCisgICAgICAgICAgIHZl5iB16Gl0ZSBwcmltamVub20uCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSBMZWtjaWphIDEuNDogUFJPTUpFTkEgVEVLU1RBIC0gVUJBQ0lWQU5KRQorCisKKwkgICoqIFByaXRpc25pdGUgIGkgIHphIHViYWNpdmFuamUgdGVrc3RhIGlzcHJlZCBrdXJzb3JhLiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcHJ2dSBzbGplZGXmdSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIEtha28gYmkgbmFwcmF2aWxpIHBydnUgbGluaWp1IGlzdG92amV0bm9qIGRydWdvaiwgcG9tYWtuaXRlCisgICAgIGt1cnNvciBuYSBwcnZpIHpuYWsgUE9TTElKRSBrb2plZyDmZSB0ZSB1dGlwa2F0aSBwb3RyZWJhbiB0ZWtzdC4KKworICAzLiBQcml0aXNuaXRlICBpICB0ZSB1dGlwa2FqdGUgcG90cmVibmUgbmFkb3B1bmUuCisKKyAgNC4gTmFrb24gmnRvIGlzcHJhdml0ZSBwb2dyZZprdSBwcml0aXNuaXRlIDxFU0M+IGtha28gYmkgdnJhdGlsaSBWaW0KKyAgICAgdSBOb3JtYWwgbW9kLiBQb25vdml0ZSBrb3Jha2Ugb2QgMiBkbyA0IGtha28gYmkgaXNwcmF2aWxpIHN2ZSBwb2dyZZprZS4KKworLS0tPiBOZWRqZSBubyB0ZWthIG9kIHYgbGluLgorLS0tPiBOZWRvc3RhamUgbmWadG8gdGVrc3RhIG9kIG92ZSBsaW5pamUuCisKKyAgNS4gUHJpamXwaXRlIG5hIHNsamVkZeZ1IGxla2NpanUuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgIExla2NpamEgMS41OiBQUk9NSkVOQSBURUtTVEEgLSBET0RBVkFOSkUKKworCisJICAgICAgICAgICAqKiBQcml0aXNuaXRlICBBICB6YSBkb2RhdmFuamUgdGVrc3RhLiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcHJ2dSBzbGplZGXmdSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorICAgICBOaWplIHZhnm5vIG5hIGtvamVtIHNlIHNsb3Z1IG5hbGF6aSBrdXJzb3IgbmEgdG9qIGxpbmlqaS4KKworICAyLiBQcml0aXNuaXRlICBBICBpIG5hcHJhdml0ZSBwb3RyZWJuZSBwcm9tamVuZS4KKworICAzLiBOYWtvbiCadG8gc3RlIGRvZGFsaSB0ZWtzdCwgcHJpdGlzbml0ZSA8RVNDPgorICAgICB6YSBwb3ZyYXRhayB1IE5vcm1hbCBtb2QuCisKKyAgNC4gUG9tYWtuaXRlIGt1cnNvciBuYSBkcnVndSBsaW5panUgb3puYehlbnUgcyAtLS0+CisgICAgIGkgcG9ub3ZpdGUga29yYWtlIDIgaSAzIGRvayBuZSBwb3ByYXZpdGUgdGVrc3QuCisKKy0tLT4gSW1hIG5lmnRvIHRla3N0YSBrb2ppIG5lZG9zdGFqZSBuCisgICAgIEltYSBuZZp0byB0ZWtzdGEga29qaSBuZWRvc3RhamUgbmEgb3ZvaiBsaW5pamkuCistLS0+IEltYSBuZZp0byB0ZWtzdGEga29qaSBuZQorICAgICBJbWEgbmWadG8gdGVrc3RhIGtvamkgbmVkb3N0YWplIGJhmiBvdmRqZS4KKworICA1LiBQcmlqZfBpdGUgbmEgbGVrY2lqdSAxLjYuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICBMZWtjaWphIDEuNjogUFJPTUpFTkEgREFUT1RFS0UKKworCisgICAgICoqIEtvcmlzdGl0ZSAgOndxICB6YSBzcHJlbWFuamUgdGVrc3RhIGkgbmFwdZp0YW5qZSBWaW0tYS4gKioKKworICAhISBVUE9aT1JFTkpFOiBQcmlqZSBpenZymmF2YW5qYSBiaWxvIGtvamVnIGtvcmFrYSwgcHJv6Gl0YWp0ZSBsZWtjaWp1ISEKKworICAxLiBJemHwaXRlIGl6IHByb2dyYW1hIGthbyBzdG8gc3RlIG5hcHJhdmlsaSB1IGxla2NpamkgMS4yOiAgOnEhCisKKyAgMi4gSXogbGp1c2tlIHV0aXBrYWp0ZSBzbGplZGXmdSBuYXJlZGJ1OiAgdmltIHR1dG9yIDxFTlRFUj4KKyAgICAgJ3ZpbScgamUgbmFyZWRiYSBwb2tyZXRhbmphIFZpbSBlZGl0b3JhLCAndHV0b3InIGplIGltZSBkYXRvdGVrZSBrb2p1CisgICAgIJ5lbGl0ZSB1cmXwaXZhdGkuICBLb3Jpc3RpdGUgZGF0b3Rla3Uga29qdSBpbWF0ZSBvdmxhc3RpIG1pamVuamF0aS4KKworICAzLiBVYmFjaXRlIGkgaXpicmmaaXRlIHRla3N0IGthbyCadG8gc3RlIHRvIG5hcHJhdmlsaSB1IGxla2NpamFtYSBwcmlqZS4KKworICA0LiBTYeh1dmFqdGUgcHJvbWplbmplbmkgdGVrc3QgaSBpemHwaXRlIGl6IFZpbS1hOiAgOndxICA8RU5URVI+CisKKyAgNS4gUG9ub3ZubyBwb2tyZW5pdGUgdmltdHV0b3IgaSBuYXN0YXZpdGUg6Gl0YXRpIHNhnmV0YWsga29qaSBzbGplZGkuCisKKyAgNi4gTmFrb24gc3RvIHByb+hpdGF0ZSBnb3JuamUga29yYWtlIGkgdSBwb3RwdW5vc3RpIGloIHJhenVtaWpldGU6CisgICAgIGl6dnKaaXRlIGloLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgIExla2NpamEgMSBTQY5FVEFLCisKKworICAxLiBLdXJzb3Igc2UgcG9taehlIHN0cmVsaWNhbWEgaWxpIHBvbW/mdSBoamtsIHRpcGFrYS4KKwloIChsaWpldm8pCWogKGRvbGplKQlrIChnb3JlKQlsIChkZXNubykKKworICAyLiBQb2tyZXRhbmplIFZpbS1hIGl6IGxqdXNrZTogIHZpbSBJTUVfREFUT1RFS0UgPEVOVEVSPgorCisgIDMuIEl6bGF6Ogk8RVNDPgk6cSEgPEVOVEVSPiAJc3ZlIHByb21qZW5lIHN1IGl6Z3VibGplbmUuCisgICAgICAgSUxJOgk8RVNDPgk6d3EgPEVOVEVSPiAJcHJvbWplbmUgc3Ugc2HodXZhbmUuCisKKyAgNC4gQnJpc2FuamUgem5ha2EgbmEga29qZW0gc2UgbmFsYXppIGt1cnNvcjogIHgKKworICA1LiBVYmFjaXZhbmphIGlsaSBkb2RhdmFuamUgdGVrc3RhOgorCSBpICAgdXRpcGthanRlIHRla3N0IDxFU0M+CXVub3MgaXNwcmVkIGt1cnNvcmEKKwkgQSAgIHV0aXBrYWp0ZSB0ZWtzdCA8RVNDPglkb2RhdmFuamUgbmEga3JhanUgbGluaWplCisKK05BUE9NRU5BOiAgVGlwa2FuamVtIHRpcGtlIDxFU0M+IHByZWJhY3VqZSBWaW0gdSBOb3JtYWwgbW9kIGkKKyAgICAgICAgICAgcHJla2lkYSBuZZ5lbGplbnUgaWxpIGRqZWxvbWnobm8gemF2cpplbnUgbmFyZWRidS4KKworTmFzdGF2aXRlIOhpdGF0aSBMZWtjaWp1IDIuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJTGVrY2lqYSAyLjE6IE5BUkVEQkUgQlJJU0FOSkEKKworCisJCSAqKiBUaXBrYWp0ZSAgZHcgIHphIGJyaXNhbmplIHJpamXoaS4gKioKKworICAxLiBQcml0aXNuaXRlICA8RVNDPiAga2FrbyBiaSBiaWxpIHNpZ3VybmkgZGEgamUgVmltIHUgTm9ybWFsIG1vZHUuCisKKyAgMi4gUG9tYWtuaXRlIGt1cnNvciBuYSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDMuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcG/oZXRhayByaWpl6Gkga29qdSB0cmViYSBpemJyaXNhdGkuCisKKyAgNC4gT3RpcGthanRlICBkdyAga2FrbyBiaSB1a2xvbmlsaSByaWpl6C4KKworTkFQT01FTkE6ICBWaW0g5mUgcHJpa2F6YXRpIHNsb3ZvICBkICBuYSB6YWRuam9qIGxpbmlqaSBrYWQgZ2Egb3RpcGthdGUuCisgICAgICAgICAgIFZpbSDoZWthIGRhIG90aXBrYXRlICB3IC4gIEFrbyBqZSBwcmlrYXphbm8gbmVrbyBkcnVnbyBzbG92bywKKyAgICAgICAgICAga3Jpdm8gc3RlIG90aXBrYWxpOyBwcml0aXNuaXRlIDxFU0M+IGkgcG9rdZphanRlIHBvbm92bm8uCisKKy0tLT4gTmVrZSByaWpl6Gkgc21pamWabm8gbmUgcHJpcGFkYWp1IG5hIHBhcGlyIG92b2ogcmXoZW5pY2kuCisKKyAgNS4gUG9ub3ZpdGUga29yYWtlIDMgaSA0IGRvayBuZSBpc3ByYXZpdGUgcmXoZW5pY3U7CisgICAgIHByaWpl8Gl0ZSBuYSBMZWtjaWp1IDIuMi4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICAgIExla2NpamEgMi4yOiBKT4ogQlJJU0FOSkEKKworCisgICAgICAgKiogT3RpcGthanRlICBkJCB6YSBicmlzYW5qZSB6bmFrb3ZhIGRvIGtyYWphIGxpbmlqZS4gKioKKworICAxLiBQcml0aXNuaXRlICA8RVNDPiAga2FrbyBiaSBiaWxpCisgICAgIHNpZ3VybmkgZGEgamUgVmltIHUgTm9ybWFsIG1vZHUuCisKKyAgMi4gUG9tYWtuaXRlIGt1cnNvciBuYSBsaW5panUgb3puYehlbnUgcyAgLS0tPi4KKworICAzLiBQb21ha25pdGUga3Vyc29yIGRvIGtyYWphIGlzcHJhdm5lIHJl6GVuaWNlCisgICAgIChQT1NMSkUgcHJ2ZSAuICkuCisKKyAgNC4gT3RpcGthanRlICBkJAorICAgICBrYWtvIGJpIGl6YnJpc2FsaSBzdmUgem5ha292ZSBkbyBrcmFqYSBsaW5pamUuCisKKy0tLT4gTmV0a28gamUgdXRpcGthbyBrcmFqIG92ZSBsaW5pamUgZHZhcHV0LiBrcmFqIG92ZSBsaW5pamUgZHZhcHV0LgorCisgIDUuIFByaWpl8Gl0ZSBuYSBMZWtjaWp1IDIuMyB6YSBib2xqZSBvYmphmm5qZW5qZS4KKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgIExla2NpamEgMi4zOiBVS1JBVEtPIE8gT1BFUkFUT1JJTUEgSSBQT0tSRVRJTUEKKworCisgIE1ub2dvIG5hcmVkYmkga29qZSBtaWplbmphanUgdGVrc3Qgc2Ugc2FzdG9qZSBvZCBvcGVyYXRvcmEgaSBwb2tyZXRhLgorICBPYmxpayBuYXJlZGJlIGJyaXNhbmphIHNhICBkICBvcGVyYXRvcm9tIGplIHNsamVkZeZpOgorCisgIAlkICAgcG9rcmV0CisKKyAgUHJpIOhlbXUgamU6CisgICAgZCAgICAgIC0gb3BlcmF0b3IgYnJpc2FuamEuCisgICAgcG9rcmV0IC0gb25vIG5hIOhlbXUg5mUgc2Ugb3BlcmFjaWphIGl6dnKaYXZhdGkgKG5hdmVkZW5vIHUgbmFzdGF2a3UpLgorCisgIEtyYXRrYSBsaXN0YSBwb2tyZXRhOgorICAgIHcgLSBzdmUgZG8gcG/oZXRrYSBzbGplZGXmZSByaWpl6GksIE5FIFVLTEpVyFVKVcZJIHBydm8gc2xvdm8uCisgICAgZSAtIHN2ZSBkbyBrcmFqYSB0cmVudXRh6G5lIHJpamXoaSwgVUtMSlXIVUpVxkkgemFkbmplIHNsb3ZvLgorICAgICQgLSBzdmUgZG8ga3JhamUgbGluaWplLCBVS0xKVchVSlXGSSB6YWRuamUgc2xvdm8uCisKKyAgVGlwa2FuamVtICBkZSAg5mUgc2UgYnJpc2F0aSBvZCBrdXJzb3JhIGRvIGtyYWphIHJpamXoaS4KKworTkFQT01FTkE6ICBQcml0aXNrYWp15mkgc2FtbyBwb2tyZXRlIGRvayBzdGUgdSBOb3JtYWwgbW9kdSBiZXogb3BlcmF0b3JhIOZlCisgICAgICAgICAgIHBvbWljYXRpIGt1cnNvciBrYW8gmnRvIGplIG5hdmVkZW5vLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICBMZWtjaWphIDIuNDogS09SSYpURU5KRSBCUk9KQU5KQSBaQSBQT0tSRVRFCisKKworICAqKiBUaXBrYW5qZW0gbmVrb2cgYnJvamEgcHJpamUgcG9rcmV0YSwgcG9rcmV0IHNlIGl6dnKaYXZhIHRvbGlrbyBwdXRhLiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgbGluaWp1IG96bmHoZW51IHMgLS0tPi4KKworICAyLiBPdGlwa2FqdGUgIDJ3ICBkYSBwb21ha25ldGUga3Vyc29yIGR2aWplIHJpamXoaSBuYXByaWplZC4KKworICAzLiBPdGlwa2FqdGUgIDNlICBkYSBwb21ha25ldGUga3Vyc29yIG5hIGtyYWogdHJl5mUgcmlqZehpIG5hcHJpamVkLgorCisgIDQuIE90aXBrYWp0ZSAgMCAgKG51bHUpIGRhIHBvbWFrbmV0ZSBrdXJzb3IgbmEgcG/oZXRhayBsaW5pamUuCisKKyAgNS4gUG9ub3ZpdGUga29yYWtlIDIgaSAzIHMgbmVraW0gZHJ1Z2ltIGJyb2pldmltYS4KKworLS0tPiBSZehlbmljYSBzYSByaWpl6GltYSBwbyBrb2pvaiBtb55ldGUgcG9taWNhdGkga3Vyc29yLgorCisgIDYuIFByaWpl8Gl0ZSBuYSBMZWtjaWp1IDIuNS4KKworCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgICAgICAgICAgICAgTGVrY2lqYSAyLjU6IEtPUkmKVEVOSkUgQlJPSkFOSkEgWkEgVkXGRSBCUklTQU5KRQorCisKKwkgICoqIFRpcGthbmplIGJyb2phIE4gcyBvcGVyYXRvcm9tIHBvbmF2bGphIGdhIE4tcHV0YS4gKioKKworICBVIGtvbWJpbmFjaWppIG9wZXJhdG9yYSBicmlzYW5qYSBpIHBva3JldGEgc3BvbWVudXRpaCBpem5hZAorICB1YmFjdWpldGUgYnJvaiBwcmlqZSBwb2tyZXRhIGtha28gYmkgaXpicmlzYWxpIHZpmmUgem5ha292YToKKworCSBkICAgYnJvaiAgIHBva3JldAorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcHJ2byBzbG92byB1IHJpamXoaSBzYSBWRUxJS0lNIFNMT1ZJTUEKKyAgICAgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIE90aXBrYWp0ZSAgMmR3ICBkYSBpemJyaZpldGUgZHZpamUgcmlqZehpIHNhIFZFTElLSU0gU0xPVklNQQorCisgIDMuIFBvbm92aXRlIGtvcmFrZSAxIGkgMiBzYSByYXpsaehpdGltIGJyb2pldmltYSBkYSBpemJyaZpldGUKKyAgICAgdXphc3RvcG5lIHJpamXoaSBzYSBWRUxJS0lNIFNMT1ZJTUEgc2Egc2FtbyBqZWRub20gbmFyZWRib20uCisKKy0tLT4gb3ZhIEFCQ8jGIETQRSBsaW5pamEgRkdISSBKSyBMTU4gT1AgcmlqZehpIGplIFJTiiBUVVZajiBwb3ByYXZsamVuYS4KKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgIExla2NpamEgMi42OiBPUEVSSVJBTkpFIE5BRCBMSU5JSkFNQQorCisKKwkgICAgICAgKiogT3RpcGthanRlICBkZCAgIHphIGJyaXNhbmplIGNpamVsZSBsaW5pamUuICoqCisKKyAgWmJvZyB16GVzdGFsb3N0aSBicmlzYW5qYSBjaWplbGloIGxpbmlqYSwgZGl6YWpuZXJpIFZpLWEgc3Ugb2RsdehpbGkgZGEKKyAgamUgbGFrmmUgYnJpc2F0aSBsaW5pamUgdGlwa2FuamVtICBkICBkdmFwdXQuCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBkcnVndSBsaW5panUgdSBkb25qb2oga2l0aWNpLgorICAyLiBPdGlwa2FqdGUgIGRkICBrYWtvIGJpIGl6YnJpc2FsaSBsaW5panUuCisgIDMuIFBvbWFrbml0ZSBrdXJzb3IgbmEg6GV0dnJ0dSBsaW5panUuCisgIDQuIE90aXBrYWp0ZSAgIDJkZCAgIGtha28gYmkgaXpicmlzYWxpIGR2aWplIGxpbmlqZS4KKworLS0tPiAgMSkgIFJ1nmUgc3UgY3J2ZW5lLAorLS0tPiAgMikgIFBsYZ5hIGplIHN1cGVyLAorLS0tPiAgMykgIExqdWJpY2Ugc3UgcGxhdmUsCistLS0+ICA0KSAgSW1hbSBhdXRvLAorLS0tPiAgNSkgIFNhdG92aSB1a2F6dWp1IHZyaWplbWUsCistLS0+ICA2KSAgimXmZXIgamUgc2xhZGFrCistLS0+ICA3KSAgS2FvIGkgdGkuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICAgIExla2NpamEgMi43OiBOQVJFREJBIFBPTkmKVEVOSkEKKworCisgICoqIFByaXRpc25pdGUgIHUgIHphIHBvbmmadGVuamUgemFkbmplIG5hcmVkYmUsICBVICB6YSBjaWplbHUgbGluaWp1LiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgbGluaWp1IG96bmHoZW51IHMgLS0tPiBpIHBvc3Rhdml0ZSBrdXJzb3IgbmEgcHJ2dQorICAgICBwb2dyZZprdS4KKyAgMi4gT3RpcGthanRlICB4ICBrYWtvIGJpIGl6YnJpc2FsaSBwcnZpIG5lnmVsamVuaSB6bmFrLgorICAzLiBPdGlwa2FqdGUgIHUgIGtha28gYmkgcG9uaZp0aWxpIHphZG5qdSBpenZymmVudSBuYXJlZGJ1LgorICA0LiBPdmFqIHB1dCBpc3ByYXZpdGUgc3ZlIHBvZ3JlmmtlIG5hIGxpbmlqaSBrb3Jpc3Rl5mkgIHggIG5hcmVkYnUuCisgIDUuIFNhZGEgdXRpcGthanRlIHZlbGlrbyAgVSAga2FrbyBiaSBwb25pmnRpbGkgc3ZlIHByb21qZW5lCisgICAgIG5hIGxpbmlqaSwgdnJh5mFqdeZpIGplIHUgcHJpamGabmplIHN0YW5qZS4KKyAgNi4gU2FkYSB1dGlwa2FqdGUgIHUgIG5la29saWtvIHB1dGEga2FrbyBiaSBwb25pmnRpbGkgIFUKKyAgICAgaSBwcmlqYZpuamUgbmFyZWRiZS4KKyAgNy4gU2FkYSB1dGlwa2FqdGUgQ1RSTC1SIChkcp5l5mkgIENUUkwgIHRpcGt1IHByaXRpc251dG9tIGRvaworICAgICBuZSBwcml0aXNuZXRlICBSKSBuZWtvbGlrbyBwdXRhIGtha28gYmkgdnJhdGlsaSBwcm9tamVuZQorICAgICAocG9uaZp0aWxpIHBvbmmadGVuamEpLgorCistLS0+IFBvb3ByYXZpdGUgcG9ncmWaa2Ugbm5hIG92dm9qIGxpbmlqaSBpaSBwb29uaZp0aXRlZWUgaWguCisKKyAgOC4gVnJsbyBrb3Jpc25lIG5hcmVkYmUuICBQcmlqZfBpdGUgbmEgc2GeZXRhayBMZWtjaWplIDIuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgICAgTGVrY2lqYSAyIFNBjkVUQUsKKworCisgIDEuIEJyaXNhbmplIG9kIGt1cnNvcmEgZG8gc2xqZWRl5mUgcmlqZehpOiAgICBkdworICAyLiBCcmlzYW5qZSBvZCBrdXJzb3JhIGRvIGtyYWphIGxpbmlqZTogICAgZCQKKyAgMy4gQnJpc2FuamUgY2lqZWxlIGxpbmlqZTogICAgZGQKKworICA0LiBaYSBwb25hdmxqYW5qZSBwb2tyZXRhIHByZXRob2RpdGUgbXUgYnJvajogICAydworICA1LiBPYmxpayBuYXJlZGJlIG1pamVuamFuamE6CisgICAgICAgICAgICAgICBvcGVyYXRvciAgIFticm9qXSAgIHBva3JldAorICAgICBnZGplIGplOgorICAgICAgIG9wZXJhdG9yIC0gmnRvIG5hcHJhdml0aSwgbnByLiAgIGQgIHphIGJyaXNhbmplCisgICAgICAgW2Jyb2pdICAgLSBuZW9iYXZlemFuIGJyb2ogcG9uYXZsamFuamEgcG9rcmV0YQorICAgICAgIHBva3JldCAgIC0ga3JldGFuamUgcG8gdGVrc3R1IHBvIGtvamVtIHNlIG9wZXJpcmEsCisgICAgICAgICAgICAgICAgICBrYW8gmnRvIGplOiB3IChyaWpl6CksICQgKGtyYWogbGluaWplKSwgaXRkLgorCisgIDYuIFBvc3RhdmxqYW5qZSBrdXJzb3JhIG5hIHBv6GV0YWsgbGluaWplOiAgMAorCisgIDcuIFphIHBvbmmadGVuamUgcHJldGhvZG5paCBwcm9tamVuYSwgcHJpdGlzbml0ZToJICB1ICAobWFsbyB1KQorICAgICBaYSBwb25pmnRlbmplIHN2aWggcHJvbWplbmEgbmEgbGluaWppLCBwcml0aXNuaXRlOiAgIFUgICh2ZWxpa28gVSkKKyAgICAgWmEgdnJh5mFuamEgcHJvbWplbmEsIHV0aXBrYWp0ZToJQ1RSTC1SCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgICAgTGVrY2lqYSAzLjE6IE5BUkVEQkEgUE9TVEFWSQorCisKKwkqKiBwICB6YSB1bm9zIHByZXRob2RubyBpemJyaXNhbm9nIHRla3N0YSBpemEga3Vyc29yYS4gKioKKworICAxLiBQb21ha25pdGUga3Vyc29yIG5hIHBydnUgc2xqZWRl5nUgbGluaWp1IG96bmHoZW51IHMgLS0tPi4KKworICAyLiBPdGlwa2FqdGUgIGRkICBrYWtvIGJpIGl6YnJpc2FsaSBsaW5panUgaSBzcHJlbWlsaSBqZSB1IFZpbSByZWdpc3Rhci4KKworICAzLiBQb21ha25pdGUga3Vyc29yIG5hIGxpbmlqdSBjKSwgSVpOQUQgbGluaWplIGtvanUgdHJlYmF0ZSB1bmlqZXRpLgorCisgIDQuIE90aXBrYWp0ZSAgcCAga2FrbyBiaSBwb3N0YXZpbGkgbGluaWp1IGlzcG9kIGt1cnNvcmEuCisKKyAgNS4gUG9ub3ZpdGUga29yYWtlIDIgZG8gNCBrYWtvIGJpIHBvc3RhdmlsaSBzdmUgbGluaWplIHUgcHJhdmlsbm9tCisgICAgIHJhc3BvcmVkdS4KKworLS0tPiBkKSBNb55lmiBsaSBpIHRpIG5hdehpdGk/CistLS0+IGIpIExqdWJpY2Ugc3UgcGxhdmUsCistLS0+IGMpIEludGVsaWdlbmNpamEgamUgbmF16GVuYSwKKy0tLT4gYSkgUnWeZSBzdSBjcnZlbmUsCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICAgICBMZWtjaWphIDMuMjogTkFSRURCQSBQUk9NSkVORQorCisKKyAgICAgICoqIE90aXBrYWp0ZSAgcnggIHphIHphbWplbnUgc2xvdmEgaXNwb2Qga3Vyc29yYSBzYSBzbG92b20gIHggLiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcHJ2dSBzbGplZGXmdSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIFBvbWFrbml0ZSBrdXJzb3IgdGFrbyBkYSBzZSBuYWxhemkgbmEgcHJ2b2ogcG9ncmWaY2kuCisKKyAgMy4gT3RpcGthanRlICByICBpIG5ha29uIHRvZ2EgaXNwcmF2YW4gem5hayBuYSB0b20gbWplc3R1LgorCisgIDQuIFBvbm92aXRlIGtvcmFrZSAyIGkgMyBzdmUgZG9rIHBydmEKKyAgICAgbGluaWplIG5lIGJ1ZGUgaXN0b3ZqZXRuYSBkcnVnb2ouCisKKy0tLT4gIEtlZGUganUgb3Z1IGxpbWlqYSB0dXBqYW5hLCBuYXRrbyBqZSBwcm90dXNrYW8ga3J1dmUgdHVwa2UhCistLS0+ICBLYWRhIGplIG92YSBsaW5pamEgdGlwa2FuYSwgbmV0a28gamUgcHJpdGlza2FvIGtyaXZlIHRpcGtlIQorCisgIDUuIFByaWpl8Gl0ZSBuYSBMZWtjaWp1IDMuMi4KKworTkFQT01FTkE6ICBQcmlzamV0aXRlIGRhIHRyZWJhdGUgdehpdGkgdmplnmJhbmplbSwgbmUgcGFt5mVuamVtLgorCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgTGVrY2lqYSAzLjM6IE9QRVJBVE9SIE1JSkVOSkFOSkEKKworCisJICAqKiBaYSBtaWplbmphbmplIGRvIGtyYWphIHJpamXoaSwgaXN0aXBrYWp0ZSAgY2UgLiAqKgorCisgIDEuIFBvbWFrbml0ZSBrdXJzb3IgbmEgcHJ2dSBzbGplZGXmdSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIFBvc3Rhdml0ZSBrdXJzb3IgbmEgIGEgIHUgIGxhY2ttYi4KKworICAzLiBPdGlwa2FqdGUgIGNlICBpIGlzcHJhdml0ZSByaWpl6CAodSBvdm9tIHNsdehhanUgb3RpcGthanRlICBpbmlqYSApLgorCisgIDQuIFByaXRpc25pdGUgPEVTQz4gaSBwb21ha25pdGUga3Vyc29yIG5hIHNsamVkZeZpIHpuYWsKKyAgICAga29qZWcgamUgcG90cmVibm8gaXNwcmF2aXRpLgorCisgIDUuIFBvbm92aXRlIGtvcmFrZSAzIGkgNCBzdmUgZG9rIHBydmEgcmXoZW5pY2EgbmUgcG9zdGFuZSBpc3RvdmpldG5hCisgICAgIGRydWdvai4KKworLS0tPiBPdmEgbGFja21iIGltYSBuZWtvbGlrbyByamxjYWgga29qZSB0cmZjYiBtaWpkbWxmc3ouCistLS0+IE92YSBsaW5pamEgaW1hIG5la29saWtvIHJpamXoaSBrb2plIHRyZWJhIG1pamVuamF0aS4KKworUHJpbWlqZXRpdGUgZGEgIGNlICBicmmaZSByaWpl6CBpIHBvc3RhdmxqYSBWaW0gdSBJbnNlcnQgbW9kLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgICAgICBMZWtjaWphIDMuNDogSk+KIE1JSkVOSkFOSkEgS09SSYpURU5KRU0gYworCisKKyAgICAqKiBOYXJlZGJhIG1pamVuamFuamEgc2Uga29yaXN0aSBzYSBpc3RpbSBwb2tyZXRpbWEga2FvIGkgYnJpc2FuamUuICoqCisKKyAgMS4gT3BlcmF0b3IgbWlqZW5qYW5qYSBzZSBrb3Jpc3RpIG5hIGlzdGkgbmHoaW4ga2FvIGkgb3BlcmF0b3IgYnJpc2FuamE6CisKKyAgICAgICAgIGMgICAgW2Jyb2pdICAgcG9rcmV0CisKKyAgMi4gUG9rcmV0aSBzdSBpc3RpLCBucHI6ICAgdyAocmlqZegpIGkgICQgKGtyYWogbGluaWplKS4KKworICAzLiBQb21ha25pdGUga3Vyc29yIG5hIHBydnUgc2xqZWRl5nUgbGluaWp1IG96bmHoZW51IHMgLS0tPi4KKworICA0LiBQb21ha25pdGUga3Vyc29yIG5hIHBydnUgcG9ncmWaa3UuCisKKyAgNS4gT3RpcGthanRlICBjJCAgaSB1dGlwa2FqdGUgb3N0YXRhayBsaW5pamUgdGFrbyBkYSBidWRlIGlzdG92amV0bmEKKyAgICAgZHJ1Z29qIHRlIHByaXRpc25pdGUgPEVTQz4uCisKKy0tLT4gS3JhaiBvdmUgbGluaWplIHRyZWJhIHBvbW/mIHRha28gZGEgaXpnbGVkYSBrYW8gbGluaWphIGlzcG9kLgorLS0tPiBLcmFqIG92ZSBsaW5pamUgdHJlYmEgaXNwcmF2aXRpIGtvcmmadGVuamVtIGMkIG5hcmVkYmUuCisKK05BUE9NRU5BOiAgTW+eZXRlIGtvcmlzdGl0aSBCYWNrc3BhY2UgemEgaXNwcmF2bGphbmplIGdyZZpha2EuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgIExla2NpamEgMyBTQY5FVEFLCisKKworICAxLiBaYSBwb3N0YXZsamFuamUgdGVrc3RhIGtvamkgamUgdXByYXZvIGl6YnJpc2FuLCBwcml0aXNuaXRlICBwIC4gT3ZvCisgICAgIHBvc3RhdmxqYSB0ZWtzdCBJWkEga3Vyc29yYSAoYWtvIGplIHBhayBsaW5pamEgaXpicmlzYW5hIHRla3N0IHNlCisgICAgIHBvc3RhdmxqYSBuYSBsaW5panUgaXNwb2Qga3Vyc29yYSkuCisKKyAgMi4gWmEgcHJvbWplbnUgem5ha2EgbmEga29qZW0gc2UgbmFsYXppIGt1cnNvciwgcHJpdGlzbml0ZSAgciAgaSBuYWtvbiB0b2dhCisgICAgIJ5lbGplbmkgem5hay4KKworICAzLiBPcGVyYXRvciBtaWplbmphbmphIGRvenZvbGphdmEgcHJvbWplbnUgdGVrc3RhIG9kIGt1cnNvcmEgZG8gcG96aWNpamUgZG8KKyAgICAga29qZSBkb3ZlZGUgcG9rcmV0LiB0ai4gT3RpcGthanRlICBjZSAgemEgbWlqZW5qYW5qZSBvZCBrdXJzb3JhIGRvIGtyYWphCisgICAgIHJpamXoaSwgYyQgIHphIG1pamVuamFuamUgb2Qga3Vyc29yYSBkbyBrcmFqYSBsaW5pamUuCisKKyAgNC4gT2JsaWsgbmFyZWRiZSBtaWplbmphbmphOgorCisJIGMgICBbYnJval0gICBwb2tyZXQKKworUHJpamXwaXRlIG5hIHNsamVkZeZ1IGxla2NpanUuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgICBMZWtjaWphIDQuMTogUE9aSUNJSkEgS1VSU09SQSBJIFNUQVRVUyBEQVRPVEVLRQorCisgICoqIENUUkwtRyB6YSBwcmlrYXogcG96aWNpamUga3Vyc29yYSB1IGRhdG90ZWNpIGkgc3RhdHVzIGRhdG90ZWtlLgorICAgICBQcml0aXNuaXRlICBHICB6YSBwb21pY2FuamUga3Vyc29yYSBuYSBuZWt1IGxpbmlqdSB1IGRhdG90ZWNpLiAqKgorCitOQVBPTUVOQTogIFByb+hpdGFqdGUgY2lqZWx1IGxla2NpanUgcHJpamUgaXp2cpplbmphIGJpbG8ga29qZWcga29yYWthISEKKworICAxLiBEcp5pdGUgQ3RybCB0aXBrdSBwcml0aXNudXRvbSBpIHByaXRpc25pdGUgIGcgLiAgVWtyYXRrbzogQ1RSTC1HLgorICAgICBWaW0g5mUgaXNwaXNhdGkgcG9ydWt1IG5hIGRudSBla3JhbmEgc2EgaW1lbm9tIGRhdG90ZWtlIGkgcG96aWNpam9tCisgICAgIGt1cnNvcmEgdSBkYXRvdGVjaS4gIFphcGFtdGl0ZSBicm9qIGxpbmlqZSB6YSAzLiBrb3Jhay4KKworTkFQT01FTkE6ICBNb55ldGUgdmlkamV0aSBwb3ppY2lqdSBrdXJzb3JhIHUgZG9uamVtIGRlc25vbSBrdXR1IGFrbworICAgICAgICAgICBqZSBwb3N0YXZrYSAncnVsZXInIGFrdGl2aXJhbmEgKG9iamGabmplbm8gdSA2LiBsZWtjaWppKS4KKworICAyLiBQcml0aXNuaXRlICBHICB6YSBwb21pY2FuamUga3Vyc29yYSBuYSBrcmFqIGRhdG90ZWtlLgorICAgICBPdGlwa2FqdGUgIGdnICB6YSBwb21pY2FuamUga3Vyc29yYSBuYSBwb+hldGFrIGRhdG90ZWtlLgorCisgIDMuIE90aXBrYWp0ZSBicm9qIGxpbmlqZSBuYSBrb2pvaiBzdGUgYmlsaSBtYWxvcHJpamUgaSB6YXRpbSAgRyAuICBLdXJzb3IKKyAgICAg5mUgc2UgdnJhdGl0aSBuYSBsaW5panUgbmEga29qb2ogc2UgbmFsYXppbyBrYWRhIHN0ZSBvdGlwa2FsaSBDVFJMLUcuCisKKyAgNC4gQWtvIHN0ZSBzcHJlbW5pLCBpenZymml0ZSBrb3Jha2Ugb2QgMSBkbyAzLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCUxla2NpamEgNC4yOiBOQVJFREJFIFRSQY5FTkpBCisKKyAgICAgICAqKiBPdGlwa2FqdGUgIC8gIGkgbmFrb24gdG9nYSBpenJheiBrb2plZyCeZWxpdGUgdHJhnml0aS4gKioKKworICAxLiBVIE5vcm1hbCBtb2R1IG90aXBrYWp0ZSAgLyAgem5hay4gIFByaW1pamV0aXRlIGRhIHNlIHpuYWsKKyAgICAgcG9qYXZpbyB6YWplZG5vIHNhIGt1cnNvcm9tIG5hIGRudSBla3JhbmEga2FvIGtvZCAgOiAgbmFyZWRiZS4KKworICAyLiBTYWRhIG90aXBrYWp0ZSAnZ3JycnJlmmthJyA8RU5URVI+LiAgVG8gamUgcmlqZegga29qdSB6YXByYXZvIHRyYZ5pdGUuCisKKyAgMy4gWmEgcG9ub3ZubyB0cmGeZW5qZSBpc3RvZyBpenJhemEsIG90aXBrYWp0ZSAgbiAuCisgICAgIFphIHRyYZ5lbmplIGlzdG9nIGl6cmF6YSBhbGkgdSBzdXByb3Rub20gc21qZXJ1LCBvdGlwa2FqdGUgIE4gLgorCisgIDQuIFphIHRyYZ5lbmplIGl6cmF6YSB1bmF0cmFnLCBrb3Jpc3RpdGUgID8gIHVtamVzdG8gIC8gLgorCisgIDUuIFphIHBvdnJhdGFrIG5hIHByZXRob2RudSBwb3ppY2lqdSBrb3Jpc3RpdGUgIENUUkwtTyAgKGRynml0ZSBDdHJsCisgICAgIHByaXRpc251dGltIGRvayBuZSBwcml0aXNuZXRlIHRpcGt1IG8pLiAgUG9uYXZsamFqdGUgc3ZlIGRvayBzZSBuZQorICAgICB2cmF0aXRlIG5hIHBv6GV0YWsuICBDVFJMLUkgc2xp6G5vIGthbyBDVFJMLU8gYWxpIHUgc3Vwcm90bm9tIHNtamVydS4KKworLS0tPiAicG9ncnJycmWaa2EiIGplIHBvZ3Jlmm5vOyB1bWplc3RvIHBvZ3JycnJlmmthIHRyZWJhIHN0YWphdGkgcG9ncmWaa2EuCisKK05BUE9NRU5BOiAgQWtvIHNlIHRyYZ5lbmplbSBkb/BlIGRvIGtyYWphIGRhdG90ZWtlIG5hc3Rhdml0IOZlIHNlIG9kIG5qZW5vZworICAgICAgICAgICBwb+hldGthIG9zaW0gYWtvIGplIHBvc3RhdmthICd3cmFwc2NhbicgZGVha3RpdmlyYW5hLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgTGVrY2lqYSA0LjM6IFRSQY5FTkpFIFBSSVBBREFKVcZFIFpBR1JBREUKKworCisJKiogT3RpcGthanRlICAlICB6YSBwcm9uYWxhemFrIHByaXBhZGFqdeZlICksIF0gaWxpIH0gLiAqKgorCisgIDEuIFBvc3Rhdml0ZSBrdXJzb3IgbmEgYmlsbyBrb2p1IG9kICAoICwgIFsgIGlsaSAgeworICAgICBvdHZvcmVuaWggemFncmFkYSB1IGxpbmlqaSBvem5h6GVub2ogcyAtLS0+LgorCisgIDIuIE90aXBrYWp0ZSB6bmFrICAlIC4KKworICAzLiBLdXJzb3Ig5mUgc2UgcG9tYWtudXRpIG5hIHByaXBhZGFqdeZ1IHphdHZvcmVudSB6YWdyYWR1LgorCisgIDQuIE90aXBrYWp0ZSAgJSAga2FrbyBiaSBwb21ha2xpIGt1cnNvciBuYSBkcnVndSBwcmlwYWRhanXmdSB6YWdyYWR1LgorCisgIDUuIFBvbWFrbml0ZSBrdXJzb3IgbmEgbmVrdSBvZCAoLCksWyxdLHsgaWxpIH0gaSBwb25vdml0ZSAgJSAgbmFyZWRidS4KKworLS0tPiBMaW5pamEgKCB0ZXN0aXJhbmphIG9iaehuaWggKCBbIHVnbGF0aWggXSBpIHsgdml0aehhc3RpaCB9IHphZ3JhZGEuKSkKKworCitOQVBPTUVOQTogIFZybG8ga29yaXNubyB1IGlzcHJhdmxqYW5qdSBrb2RhIHNhIG5lcHJpcGFkYWp15mltIHphZ3JhZGFtYSEKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICAgTGVrY2lqYSA0LjQ6IE5BUkVEQkUgWkFNSUpFTkUKKworCisgICAgICAgKiogT3RpcGthanRlICA6cy9zdGFyby9ub3ZvL2cgIGRhIHphbWlqZW5pdGUgJ3N0YXJvJyB6YSAnbm92bycuICoqCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIE90aXBrYWp0ZSAgOnMvY3Zy5ugvY3Zy6CA8RU5URVI+IC4gIFByaW1qZXRpdGUgZGEgb3ZhIG5hcmVkYmEgemFtamVuanVqZQorICAgICBzYW1vIHBydmkgImN2cuboIiB1IGxpbmlqaS4KKworICAzLiBPdGlwa2FqdGUgIDpzL2N2cuboL2N2cugvZyAuICBEb2RhdmFuamUgIGcgIHN0YXZrZSB6bmHoaSBkYSDmZSBzZSBuYXJlZGJhCisgICAgIGl6dnKaaXRpIG5hIGNpamVsb2ogbGluaWppLCB6YW1qZW5qaXZhbmplbSBzdmloICJjdnLm6CIgdSBsaW5pamkuCisKKy0tLT4gaSBjdnLm6GkgY3Zy5uhpIGN2cuboYWsgbmEg6HZvcnUgY3JuZSBzbXLoZS4KKworICA0LiBaYSB6YW1qZW51IHN2aWggaXpyYXphIHUgcmFzcG9udSBkdmlqdSBsaW5pamEsCisgICAgIG90aXBrYWp0ZSA6Iywjcy9zdGFyby9ub3ZvL2cgICAjLCMgc3UgYnJvamV2aSBsaW5pamUgZGF0b3Rla2UgbmEga29qaW1hCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZSBpem1l8HUgbmppaCDmZSBzZSBpenZymml0aSB6YW1qZW5hLgorICAgICBPdGlwa2FqdGUgOiVzL3N0YXJvL25vdm8vZyAgICAgemEgemFtamVudSBzdmloIGl6cmF6YSB1IGNpamVsb2ogZGF0b3RlY2kuCisgICAgIE90aXBrYWp0ZSA6JXMvc3Rhcm8vbm92by9nYyAgICB6YSBwcm9uYWxhemFrIHN2YWtvZyBpenJhemEgdSBkYXRvdGVjaSBpCisgICAgIAkJCSAgICAgICAgICAgIHBvdHZyZHUgemFtamVuZS4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICBMZWtjaWphIDQgU0GORVRBSworCisKKyAgMS4gQ1RSTC1HICBwcmlrYXp1amUgcG96aWNpanUga3Vyc29yYSB1IGRhdG90ZWNpIGkgc3RhdHVzIGRhdG90ZWtlLgorICAgICAgICAgICAgIEcgIHBvc3RhdmxqYSBrdXJzb3IgbmEgemFkbmp1IGxpbmlqdSBkYXRvdGVrZS4KKyAgICAgYnJvaiAgICBHICBwb3N0YXZsamEga3Vyc29yIG5hICBicm9qICBsaW5panUuCisgICAgICAgICAgICBnZyAgcG9zdGF2bGphIGt1cnNvciBuYSBwcnZ1IGxpbmlqdS4KKworICAyLiBUaXBrYW5qZSAgLyAgc2EgaXpyYXpvbSB0cmGeaSBVTkFQUklKRUQgdGFqIGl6cmF6LgorICAgICBUaXBrYW5qZSAgPyAgc2EgaXpyYXpvbSB0cmGeaSBVTkFUUkFHIHRhaiBpenJhei4KKyAgICAgTmFrb24gbmFyZWRiZSB0cmGeZW5qYSBrb3Jpc3RpdGUgIG4gIHphIHByb25hbGF6YWsgaXpyYXphIHUgaXN0b20KKyAgICAgc21qZXJ1LCBpICBOICB6YSBwcm9uYWxhemFrIGlzdG9nIGl6cmF6YSBhbGkgdSBzdXByb3Rub20gc21qZXJ1LgorICAgICBDVFJMLU8gdnJh5mEga3Vyc29yIG5hIHByZXRob2RudSBwb3ppY2lqdSwgQ1RSTC1JIG5hIHNsamVkZeZ1IHBvemljaWp1LgorCisgIDMuIFRpcGthbmplICAlICBkb2sgamUga3Vyc29yIG5hIHphZ3JhZGkgcG9taehlIGdhIG5hIHByaXBhZGFqdeZ1IHphZ3JhZHUuCisKKyAgNC4gWmEgemFtamVudSBwcnZvZyBpenJhemEgc3Rhcm8gemEgaXpyYXogbm92bwkgICA6cy9zdGFyby9ub3ZvCisgICAgIFphIHphbWplbnUgc3ZpaCBpenJhemEgc3Rhcm8gbmEgY2lqZWxvaiBsaW5pamkJICAgOnMvc3Rhcm8vbm92by9nCisgICAgIFphIHphbWplbnUgc3ZpaCBpenJhemEgc3Rhcm8gdSByYXNwb251IGxpbmlqYSAjLCMgICAgIDojLCNzL3N0YXJvL25vdm8vZworICAgICBaYSB6YW1qZW51IHUgY2lqZWxvaiBkYXRvdGVjaQkJCSAgIDolcy9zdGFyby9ub3ZvL2cKKyAgICAgWmEgcG90dnJkdSBzdmFrZSB6YW1qZW5lIGRvZGFqdGUgJ2MnCQkgICA6JXMvc3Rhcm8vbm92by9nYworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICBMZWtjaWphIDUuMTogSVpWUopBVkFOSkUgVkFOSlNLSUggTkFSRURCSQorCisKKwkqKiBPdGlwa2FqdGUgIDohICBzYSB2YW5qc2tvbSBuYXJlZGJvbSBrb2p1IJ5lbGl0ZSBpenZymml0aS4gKioKKworICAxLiBPdGlwa2FqdGUgcG96bmF0dSBuYXJlZGJ1ICA6ICBrYWtvIGJpIGt1cnNvciBwcmVtamVzdGlsaSBuYSBkbm8KKyAgICAgZWtyYW5hLiAgVGltZSBvbW9ndeZhdmF0ZSB1bm9zIG5hcmVkYmUgdSBuYXJlZGJlbm9qIGxpbmlqaS4KKworICAyLiBPdGlwa2FqdGUgem5hayAgISAgKHVza2xp6G5paykuICBUYWtvIG9tb2d15mF2YXRlCisgICAgIGl6dnKaYXZhbmplIG5hcmVkYmUgdmFuanNrZSBsanVza2UuCisKKyAgMy4gS2FvIHByaW1qZXIgb3RpcGthanRlICAgbHMgICBuYWtvbiAhIHRlIHByaXRpc25pdGUgPEVOVEVSPi4KKyAgICAgT3ZvIOZlIHByaWthemF0aSBzYWRynmFqIGRpcmVrdG9yaWphLCBrYW8gZGEgc3RlIHUgbGp1c2NpLgorICAgICBLb3Jpc3RpdGUgICA6IWRpciAgIGFrbyAgIDohbHMgICBuZSByYWRpLgorCitOQVBPTUVOQTogIE1vZ3XmZSBqZSBpenZymmF2YXRpIGJpbG8ga29qdSB2YW5qc2t1IG5hcmVkYnUgbmEgb3ZhaiBuYehpbiwKKyAgICAgICAgICAgemFqZWRubyBzYSBuamVuaW0gYXJndW1lbnRpbWEuCisKK05BUE9NRU5BOiAgU3ZlICA6ICBuYXJlZGJlIHNlIGl6dnKaYXZhanUgbmFrb24gmnRvIHByaXRpc25ldGUgPEVOVEVSPgorCSAgIFUgZGFsam5qZW0gdGVrc3R1IHRvIG5l5mUgdXZpamVrIGJpdGkgbmFwb21lbnV0by4KKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgTGVrY2lqYSA1LjI6IFZJikUgTyBTUFJFTUFOSlUgREFUT1RFS0EKKworICAgICAgICAgICAqKiBaYSBzcHJlbWFuamUgcHJvbWplbmEsIG90aXBrYWp0ZSAgOncgSU1FX0RBVE9URUtFLiAqKgorCisgIDEuIE90aXBrYWp0ZSAgIDohZGlyICAgaWxpICAgOiFscyAgIHphIHByZWdsZWQgZGlyZWt0b3JpamEuCisgICAgIFZl5iB6bmF0ZSBkYSBtb3JhdGUgcHJpdGlzbnV0aSA8RU5URVI+IG5hIGtyYWp1IHRpcGthbmphLgorCisgIDIuIEl6YWJlcml0ZSBpbWUgZGF0b3Rla2Uga29qYSBqb5ogbmUgcG9zdG9qaSwgbnByLiBURVNULgorCisgIDMuIE90aXBrYWp0ZToJIDp3IFRFU1QgICAoZ2RqZSBqZSBURVNUIGltZSBrb2plIHN0ZSBwcmV0aG9kbm8gb2RhYnJhbGkuKQorCisgIDQuIFRpbWUg5mUgdGUgc3ByZW1pdGkgY2lqZWx1IGRhdG90ZWt1IChWaW0gVHV0b3IpIHBvZCBpbWVub20gVEVTVC4KKyAgICAgWmEgcHJvdmplcnUsIG90aXBrYWp0ZSBwb25vdm5vICAgOiFkaXIgICBpbGkgICA6IWxzCisgICAgIHphIHByZWdsZWQgZGlyZWt0b3JpamEuCisKK05BUE9NRU5BOiAgQWtvIGJpIG5hcHVzdGlsaSBWaW0gaSBwb25vdm5vIGdhIHBva3JlbnVsaSBzYSB2aW0gVEVTVCAsCisgICAgICAgICAgIGRhdG90ZWthIGJpIGJpbGEgcG90cHVuYSBrb3BpamEgb3ZlIGRhdG90ZWtlIHUgdHJlbnV0a3UKKyAgICAgICAgICAga2FkYSBzdGUgamUgc3ByZW1pbGkuCisKKyAgNS4gSXpicmmaaXRlIGRhdG90ZWt1IHRha28gZGEgb3RpcGthdGUgKE1TLURPUyk6CTohZGVsIFRFU1QKKwkJCQkgICAgICAgaWxpIChVbml4KToJOiFybSBURVNUCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgIExla2NpamEgNS4zOiBTUFJFTUFOSkUgT1pOQchFTk9HIFRFS1NUQQorCisKKyAgICoqIEtha28gYmkgc3ByZW1pbGkgZGlvIGRhdG90ZWtlLCBvdGlwa2FqdGUgIHYgIHBva3JldCAgOncgSU1FX0RBVE9URUtFICoqCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBvdnUgbGluaWp1LgorCisgIDIuIFByaXRpc25pdGUgIHYgIGkgcG9tYWtuaXRlIGt1cnNvciBwZXQgbGluaWphIGlzcG9kIG92ZS4KKyAgICAgUHJpbWlqZXRpdGUgcHJvbWplbnUsIG96bmHoZW5pIHRla3N0IHNlIHJhemxpa3VqZSBvZCBvYmnobm9nLgorCisgIDMuIFByaXRpc25pdGUgIDogIHpuYWsuICBOYSBkbnUgZWtyYW5hIHBvamF2aXQg5mUgc2UgIDonPCwnPiAuCisKKyAgNC4gT3RpcGthanRlICB3IFRFU1QgICwgcHJpdG9tIGplIFRFU1QgaW1lIGRhdG90ZWtlIGtvamEgam+aIG5lIHBvc3RvamkuCisgICAgIFByb3ZqZXJpdGUgZGEgemFpc3RhIHBpmmUgIDonPCwnPncgVEVTVAorICAgICBwcmlqZSBuZWdvIJp0byBwcml0aXNuaXRlIDxFTlRFUj4uCisKKyAgNS4gVmltIOZlIHNwcmVtaXRpIG96bmHoZW5pIHRla3N0IHUgVEVTVC4gIFByb3ZqZXJpdGUgc2EgOiFkaXIgIGlsaSAgIWxzIC4KKyAgICAgTmVtb2p0ZSBqZSBqb5ogYnJpc2F0aSEgIEtvcmlzdGl0aSDmZSB0ZSBqZSB1IHNsamVkZeZvaiBsZWtjaWppLgorCitOQVBPTUVOQTogIFRpcGthICB2ICB6YXBv6GluamUgVml6dWFsbm8gb3puYehhdmFuamUuICBNb55ldGUgcG9taWNhdGkga3Vyc29yCisgICAgICAgICAgIHVuYW9rb2xvIGtha28gYmkgbWlqZW5qYWxpIHZlbGnoaW51IG96bmHoZW5vZyB0ZWtzdGEuIE1vnmV0ZQorICAgICAgICAgICBrb3Jpc3RpdGkgaSBvcGVyYXRvcmUuICBOcHIsICBkICDmZSBpemJyaXNhdGkgb3puYehlbmkgdGVrc3QuCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgTGVrY2lqYSA1LjQ6IFXISVRBVkFOSkUgREFUT1RFS0EKKworCisgICAgICAgKiogWmEgdWJhY2l2YW5qZSBzYWRynmFqYSBkYXRvdGVrZSwgb3RpcGthanRlICA6ciBJTUVfREFUT1RFS0UgICoqCisKKyAgMS4gUG9zdGF2aXRlIGt1cnNvciBpem5hZCBvdmUgbGluaWplLgorCitOQVBPTUVOQTogIE5ha29uIJp0byBpenZymml0ZSAyLiBrb3JhayB2aWRqZXRpIOZlIHRlIHRla3N0IGl6IExla2NpamUgNS4zLgorICAgICAgICAgICBTdG9nYSBwb21ha25pdGUga3Vyc29yIERPTEpFIGtha28gYmkgcG9ub3ZubyB2aWRqZWxpIG92dSBsZWtjaWp1LgorCisgIDIuIFXoaXRhanRlIHZhmnUgVEVTVCBkYXRvdGVrdSBrb3Jpc3Rl5mkgbmFyZWRidSAgIDpyIFRFU1QKKyAgICAgZ2RqZSBqZSBURVNUIGltZSBkYXRvdGVrZSBrb2p1IHN0ZSBrb3Jpc3RpbGkgdSBwcmV0aG9kbm9qIGxla2NpamkuCisgICAgIFNhZHKeYWogdehpdGFuZSBkYXRvdGVrZSBqZSB1YmHoZW4gbGluaWp1IGlzcG9kIGt1cnNvcmEuCisKKyAgMy4gS2FrbyBiaSBwcm92amVyaWxpIGRhIGplIGRhdG90ZWthIHXoaXRhbmEsIHZyYXRpdGUga3Vyc29yIHVuYXRyYWcgaQorICAgICBwcmltaWpldGl0ZSBkdmlqZSBrb3BpamUgTGVrY2lqZSA1LjMsIG9yaWdpbmFsbnUgaSBvbnUgaXogZGF0b3Rla2UuCisKK05BUE9NRU5BOiAgTW+eZXRlIHRha2/wZXIgdehpdGF0aSBpc3BpcyB2YW5qc2tlIG5hcmVkYmUuICBOcHIsICA6ciAhbHMKKyAgICAgICAgICAg5mUgdehpdGF0aSBpc3BpcyAgbHMgIG5hcmVkYmUgaSBwb3N0YXZpdGkgaXNwaXMgbGluaWp1IGlzcG9kCisgICAgICAgICAgIGt1cnNvcmEuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICBMZWtjaWphIDUgU0GORVRBSworCisKKyAgMS4gIDohbmFyZWRiYSAgaXp2cpphdmEgdmFuanNrdSBuYXJlZGJ1LgorCisgICAgICBLb3Jpc25pIHByaW1qZXJpOgorCSAoTVMtRE9TKQkgIChVbml4KQorCSAgOiFkaXIJCSAgIDohbHMJCSAgIC0gIHByZWdsZWQgZGlyZWt0b3JpamEuCisJICA6IWRlbCBEQVRPVEVLQSAgIDohcm0gREFUT1RFS0EgICAtICBicmmaZSBkYXRvdGVrdSBEQVRPVEVLQS4KKworICAyLiAgOncgREFUT1RFS0EgIHphcGlzdWplIHRyZW51dGHobnUgZGF0b3Rla3UgbmEgZGlzayBzYSBpbWVub20gREFUT1RFS0EuCisKKyAgMy4gIHYgIHBva3JldCAgOncgSU1FX0RBVE9URUtFICBzcHJlbWEgdml6dWFsbm8gb3puYehlbmUgbGluaWplIHUKKyAgICAgIGRhdG90ZWt1IElNRV9EQVRPVEVLRS4KKworICA0LiAgOnIgSU1FX0RBVE9URUtFICB16Gl0YXZhIGRhdG90ZWt1IElNRV9EQVRPVEVLRSBzYSBkaXNrYSBpIHN0YXZsamEKKyAgICAgIG5qZW4gc2Fkcp5haiBsaW5panUgaXNwb2Qga3Vyc29yYS4KKworICA1LiAgOnIgIWRpciAgdehpdGF2YSBpc3BpcyBuYXJlZGJlIGRpciBpIHBvc3RhdmxqYSBzYWRynmFqIGlzcGlzYSBsaW5panUKKyAgICAgIGlzcG9kIGt1cnNvcmEuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgTGVrY2lqYSA2LjE6IE5BUkVEQkEgT1RWT1JJCisKKworCSoqIFByaXRpc25pdGUgIG8gIGtha28gYmkgb3R2b3JpbGkgbGluaWp1IGlzcG9kIGt1cnNvcmEKKwkgICBpIHByZZpsaSB1IEluc2VydCBtb2QuICoqCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBzbGplZGXmdSBsaW5panUgb3puYehlbnUgcyAtLS0+LgorCisgIDIuIE90aXBrYWp0ZSBtYWxvICBvICBrYWtvIGJpIG90dm9yaWxpIG5vdnUgbGluaWp1IElTUE9EIGt1cnNvcmEKKyAgICAgaSBwcmWabGkgdSBJbnNlcnQgbW9kLgorCisgIDMuIE90aXBrYWp0ZSBuZZp0byB0ZWtzdGEgaSBuYWtvbiB0b2dhIHByaXRpc25pdGUgPEVTQz4KKyAgICAga2FrbyBiaSBuYXB1c3RpbGkgSW5zZXJ0IG1vZC4KKworLS0tPiBOYWtvbiCadG8gcHJpdGlzbmV0ZSAgbyAga3Vyc29yIOZlIHByZeZpIHUgbm92dSBsaW5panUgdSBJbnNlcnQgbW9kLgorCisgIDQuIFphIG90dmFyYW5qZSBsaW5pamUgSVpOQUQga3Vyc29yYSwgb3RpcGthanRlIHVtamVzdG8gbWFsb2cgbyB2ZWxpa28gTyAsCisgICAgIFBva3WaYWp0ZSBuYSBkb25qb2ogbGluaWppIG96bmHoZW5vaiBzIC0tLT4uCisKKy0tLT4gT3R2b3JpdGUgbGluaWp1IGl6bmFkIG92ZSAtIG90aXBrYWp0ZSBPIGRvayBqZSBrdXJzb3IgbmEgb3ZvaiBsaW5pamkuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQlMZWtjaWphIDYuMjogTkFSRURCQSBET0RBSgorCisKKwkgICAgICoqIE90aXBrYWp0ZSAgYSAgemEgZG9kYXZhbmplIHRla3N0YSBJWkEga3Vyc29yYS4gKioKKworICAxLiBQb21ha25pdGUga3Vyc29yIG5hIHBv6GV0YWsgc2xqZWRl5mUgbGluaWplIG96bmHoZW5lIHMgLS0tPi4KKyAgCisgIDIuIFRpcGthanRlICBlICBkb2sgc2Uga3Vyc29yIG5lIG5hbGF6aSBuYSBrcmFqdSAgbGkgLgorCisgIDMuIE90aXBrYWp0ZSAgYSAgKG1hbG8pIGtha28gYmkgZG9kYWxpIHRla3N0IElaQSBrdXJzb3JhLgorCisgIDQuIERvcHVuaXRlIHJpamXoIGthbyCadG8gamUgbmEgbGluaWppIGlzcG9kLgorICAgICBQcml0aXNuaXRlIDxFU0M+IHphIGl6bGF6IGl6IEluc2VydCBtb2RhLgorCisgIDUuIFNhICBlICBwcmlqZfBpdGUgbmEgc2xqZWRl5nUgbmVwb3RwdW51IHJpamXoIGkgcG9ub3ZpdGUga29yYWtlIDMgaSA0LgorICAKKy0tLT4gT3ZhIGxpIG9tb2d15mF2YSB2amUgZG9kYXYgdGVrc3RhIG5la29qIGxpbmlqaS4KKy0tLT4gT3ZhIGxpbmlqYSBvbW9ndeZhdmEgdmplnmJhbmplIGRvZGF2YW5qYSB0ZWtzdGEgbmVrb2ogbGluaWppLgorCitOQVBPTUVOQTogIFNhIGksIGEsIGkgIEEgIHByZWxheml0ZSB1IGlzdGkgSW5zZXJ0IG1vZCwgamVkaW5hCisgICAgICAgICAgIHJhemxpa2EgamUgdSBwb3ppY2lqaSBvZCBrb2plIOZlIHNlIHRla3N0IHViYWNpdmF0aS4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICBMZWtjaWphIDYuMzogRFJVR0kgTkHISU4gTUlKRU5KQU5KQQorCisKKyAgICAgICoqIE90aXBrYWp0ZSB2ZWxpa28gIFIgIGtha28gYmkgemFtaWplbGlsaSB2aZplIG9kIGplZG5vZyB6bmFrYS4gKioKKworICAxLiBQb21ha25pdGUga3Vyc29yIG5hIHBydnUgc2xqZWRl5nUgbGluaWp1IG96bmHoZW51IHMgLS0tPi4KKyAgICAgUG9tYWtuaXRlIGt1cnNvciBuYSBwb+hldGFrIHBydm9nICB4eHggLgorCisgIDIuIFByaXRpc25pdGUgIFIgIGkgb3RpcGthanRlIGJyb2oga29qaSBqZSBsaW5panUgaXNwb2QsCisgICAgIHRha28gZGEgemFtaWplbmkgeHh4IC4KKworICAzLiBQcml0aXNuaXRlIDxFU0M+IHphIGl6bGF6IGl6IFJlcGxhY2UgbW9kYS4KKyAgICAgUHJpbWlqZXRpdGUgZGEgamUgb3N0YXRhayBsaW5pamUgb3N0YW8gbmVwcm9tamVuamVuLgorCisgIDUuIFBvbm92aXRlIGtvcmFrZSBrYWtvIGJpIHphbWlqZW5pbGkgcHJlb3N0YWxpIHh4eC4KKworLS0tPiBaYnJhamFuamU6IDEyMyBwbHVzIHh4eCBqZSB4eHguCistLS0+IFpicmFqYW5qZTogMTIzIHBsdXMgNDU2IGplIDU3OS4KKworTkFQT01FTkE6ICBSZXBsYWNlIG1vZCBqZSBrYW8gSW5zZXJ0IG1vZCwgYWxpIHNhIGJpdG5vbSByYXpsaWtvbSwKKyAgICAgICAgICAgc3Zha2kgb3RpcGthbmkgem5hayBicmmaZSB2ZeYgcG9zdG9qZeZpLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJTGVrY2lqYSA2LjQ6IEtPUElSQU5KRSBJIExJSkVQTEpFTkpFIFRFS1NUQQorCisKKyAgICAqKiBLb3Jpc3RpdGUgIHkgIG9wZXJhdG9yIHphIGtvcGlyYW5qZSBhICBwICB6YSBsaWplcGxqZW5qZSB0ZWtzdGEuICoqCisKKyAgMS4gUG9tYWtuaXRlIGt1cnNvciBuYSBsaW5panUgcyAtLS0+ICBpIHBvc3Rhdml0ZSBrdXJzb3IgbmFrb24gImEpIi4KKyAgCisgIDIuIFBva3Jlbml0ZSBWaXN1YWwgbW9kIHNhICB2ICBpIHBvbWFrbml0ZSBrdXJzb3Igc3ZlIGRvIGlzcHJlZCAicHJ2YSIuCisgIAorICAzLiBQcml0aXNuaXRlICB5ICBrYWtvIGJpIGtvcGlyYWxpIG96bmHoZW5pIHRla3N0LgorCisgIDQuIFBvbWFrbml0ZSBrdXJzb3IgZG8ga3JhamEgc2xqZWRl5mUgbGluaWplOiAgaiQKKworICA1LiBQcml0aXNuaXRlICBwICBrYWtvIGJpIHphbGlqZXBpbGkgdGVrc3QuICBPbmRhIHV0aXBrYWp0ZTogIGRydWdhIDxFU0M+IC4KKworICA2LiBLb3Jpc3RpdGUgVmlzdWFsIG1vZCBrYWtvIGJpIG96bmHoaWxpICIgbGluaWphLiIsIGtvcGlyYWp0ZTogIHkgLCBrdXJzb3IKKyAgICAgcG9zdGF2aXRlIG5hIGtyYWogc2xqZWRl5mUgbGluaWplOiAgaiQgIGkgb25kamUgemFsaWplcGl0ZSB0ZWtzdDogIHAgLgorCistLS0+ICBhKSBvdm8gamUgcHJ2YSBsaW5pamEuCisgICAgICBiKQorCitOQVBPTUVOQTogIG1vnmV0ZSBrb3Jpc3RpdGkgIHkgIGthbyBvcGVyYXRvcjsgIHl3ICAga29waXJhIGplZG51IHJpamXoLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICBMZWtjaWphIDYuNTogTUlKRU5KQU5KRSBQT1NUQVZLSQorCisKKyAqKiBQb3N0YXZrYTogbmFyZWRiZSB0cmGeZW5qYSBpIHphbWlqZW5lIG5lIHJhemxpa3VqdSBWRUxJS0EgaSBtYWxhIHNsb3ZhICoqCisKKyAgMS4gUG90cmGeaXRlICdyYXpsaWthJyB0aXBrYW5qZW06ICAgL3Jhemxpa2EgIDxFTlRFUj4KKyAgICAgTmVrb2xpa28gcHV0YSBwb25vdml0ZSBwcml0aXNrYW5qZW0gIG4gLgorCisgIDIuIEFrdGl2aXJhanRlICdpYycgKElnbm9yZSBjYXNlKSBwb3N0YXZrdTogICA6c2V0IGljCisKKyAgMy4gUG9ub3ZubyBwb3RyYZ5pdGUgJ3Jhemxpa2EnIHRpcGthbmplbSAgbgorICAgICBQcmltaWpldGl0ZSBkYSBzdSBzYWRhIGkgUkFaTElLQSBpIFJhemxpa2EgcHJvbmHwZW5pLgorCisgIDQuIEFrdGl2aXJhanRlICdobHNlYXJjaCcgaSAnaW5jc2VhcmNoJyBwb3N0YXZrZTogIDpzZXQgaGxzIGlzCisKKyAgNS4gT3RpcGthanRlIG5hcmVkYnUgdHJhnmVuamEgaSBwcmltaWpldGl0ZSByYXpsaWtlOiAgL3Jhemxpa2EgPEVOVEVSPgorCisgIDYuIFphIGRlYWt0aXZpcmFuamUgIGljICBwb3N0YXZrZSBrb3Jpc3RpdGU6ICA6c2V0IG5vaWMKKworTkFQT01FTkE6ICBaYSBuZW96bmHoYXZhbmplIHByb25h8GVuaWggaXpyYXphIG90aXBrYWp0ZTogICA6bm9obHNlYXJjaAorTkFQT01FTkE6ICBCZXogcmF6bGlrb3ZhbmphIHZlbGlraWggaSBtYWxpaCBzbG92YSB1IHNhbW8gamVkbm9qIG5hcmVkYmkKKwkgICBrb3Jpc3RpdGUgIFxjIHUgaXpyYXp1OiAgL3Jhemxpa2FcYyAgPEVOVEVSPgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICBMZWtjaWphIDYgU0GORVRBSworCisgIDEuIFByaXRpc25pdGUgIG8gIHphIG90dmFyYW5qZSBsaW5pamUgSVNQT0Qga3Vyc29yYSBpIHByZWxhemFrIHUgSW5zZXJ0IG1vZC4KKyAgICAgUHJpdGlzbml0ZSAgTyAgemEgb3R2YXJhbmplIGxpbmlqZSBJWk5BRCBrdXJzb3JhLgorCisgIDIuIFByaXRpc25pdGUgIGEgIHphIHVub3MgdGVrc3RhIElaQSBrdXJzb3JhLgorICAgICBQcml0aXNuaXRlICBBICB6YSB1bm9zIHRla3N0YSBuYSBrcmFqdSBsaW5pamUuCisKKyAgMy4gTmFyZWRiYSAgZSAgcG9taehlIGt1cnNvciBuYSBrcmFqIHJpamXoaS4KKworICA0LiBPcGVyYXRvciAgeSAga29waXJhIHRla3N0LCAgcCAgZ2EgbGlqZXBpLgorCisgIDUuIFRpcGthbmplbSB2ZWxpa29nICBSICBWaW0gcHJlbGF6aSB1IFJlcGxhY2UgbW9kIGRvayBuZSBwcml0aXNuZXRlIDxFU0M+IC4KKworICA2LiBUaXBrYW5qZW0gIjpzZXQgeHh4IiBha3RpdmlyYSBwb3N0YXZrdSAieHh4Ii4gIE5la2UgcG9zdGF2a2Ugc3U6CisgIAknaWMnICdpZ25vcmVjYXNlJwluZSByYXpsaWt1amUgdmVsaWthL21hbGEgc2xvdmEgcHJpIHRyYZ5lbmp1CisJJ2lzJyAnaW5jc2VhcmNoJwl0cmGeaSBuZWRvdnKaZW5lIGl6cmF6ZQorCSdobHMnICdobHNlYXJjaCcJb3puYehpIHN2ZSBwcm9uYfBlbmUgaXpyYXplCisgICAgIE1vnmV0ZSBrb3Jpc3RpdGUgZHVnbyBpbGkga3JhdGtvIGltZSBwb3N0YXZrZS4KKworICA3LiBQcmV0aG9kaXRlICJubyIgaW1lbnUgcG9zdGF2a2UgemEgZGVha3RpdmlyYW5qZSBpc3RlOiAgIDpzZXQgbm9pYworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICAgIExla2NpamEgNy4xOiBET0JJVkFOSkUgUE9NT8ZJCisKKworCQkgICAqKiBLb3Jpc3RpdGUgb24tbGluZSBzdXN0YXYgcG9tb+ZpICoqCisKKyAgVmltIGltYSBkZXRhbGphbiBvbi1saW5lIHN1c3RhdiBwb21v5mkuCisgIFphIHBv6GV0YWssIHBva3WaYWp0ZSBqZWRubyBvZCBzbGplZGXmZWc6CisJLSBwcml0aXNuaXRlIDxIRUxQPiB0aXBrdSAoYWtvIGplIHZhmmEgdGlwa292bmljYSBpbWEpCisJLSBwcml0aXNuaXRlIDxGMT4gdGlwa3UgKGFrbyBqZSB2YZphIHRpcGtvdm5pY2EgaW1hKQorCS0gdXRpcGthanRlICAgOmhlbHAgPEVOVEVSPgorCisgIFByb+hpdGFqdGUgdGVrc3QgdSBwcm96b3J1IHBvbW/maSBrYWtvIGJpIHN0ZSBzZSB6bmFsaSBzbHWeaXRpIGlzdG9tLgorICBUaXBrYW5qZW0gIENUUkwtVyBDVFJMLVcgICBwcmVsYXppdGUgaXogamVkbm9nIHByb3pvcmEgdSBkcnVnaS4KKyAgT3RpcGthanRlICAgIDpxIDxFTlRFUj4gICAga2FrbyBiaSB6YXR2b3JpbGkgcHJvem9yIHBvbW/maS4KKworICBQcm9uYeZpIOZlIHRlIHBvbW/mIG8gYmlsbyBrb2pvaiB0ZW1pLCB0YWtvIGRhIGRvZGF0ZSB1cGl0IHNhbW9qCisgICI6aGVscCIgbmFyZWRiaS4gIFBva3WaYWp0ZSAobmUgemFib3Jhdml0ZSBwcml0aXNudXRpIDxFTlRFUj4pOgorCisJOmhlbHAgdworCTpoZWxwIGNfQ1RSTC1ECisJOmhlbHAgaW5zZXJ0LWluZGV4CisJOmhlbHAgdXNlci1tYW51YWwKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJTGVrY2lqYSA3LjI6IFBSQVZMSkVOSkUgU0tSSVBURQorCisKKwkJICAgICAgICoqIEFrdGl2aXJhanRlIFZpbSBtb2d15m5vc3RpICoqCisKKyAgVmltIGltYSBtbm9nbyB2aZplIGFsYXRhIG9kIFZpLWphLCBhbGkgdmXmaW5hIG5qaWggbmlqZSBha3RpdmlyYW5hLgorICBLYWtvIGJpIG1vZ2xpIGtvcmlzdGl0aSB2aZplIG1vZ3Xmbm9zdGkgbmFwcmF2aXRlICJ2aW1yYyIgZGF0b3Rla3UuCisKKyAgMS4gVXJlZGl0ZSAidmltcmMiIGRhdG90ZWt1LiAgT3ZvIG92aXNpIG8gdmGaZW0gc2lzdGVtdToKKwk6ZSB+Ly52aW1yYwkJemEgVW5peAorCTplICRWSU0vX3ZpbXJjCQl6YSBNUy1XaW5kb3dzCisKKyAgMi4gU2FkYSB16Gl0YWp0ZSBwcmltamVyIHNhZHKeYWphICJ2aW1yYyIgZGF0b3Rla2U6CisJOnIgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBTYeh1dmFqdGUgZGF0b3Rla3Ugc2E6CisJOncKKworICBTbGplZGXmZWcgcHV0YSBrYWRhIHBva3JlbmV0ZSBWaW0sIGJvamFuamUgc2ludGFrc2UgdGVrc3RhIGJpdGkg5mUKKyAgYWt0aXZpcmFuby4gU3ZlIHZhmmUgcG9zdGF2a2UgbW+eZXRlIGRvZGF0aSB1ICJ2aW1yYyIgZGF0b3Rla3UuCisgIFphIHZpmmUgaW5mb3JtYWNpamEgb3RpcGthanRlICA6aGVscCB2aW1yYy1pbnRybworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICAgICBMZWtjaWphIDcuMzogQVVUT01BVFNLTyBET1ZSikFWQU5KRQorCisKKwkqKiBEb3ZymmF2YW5qZSBpeiBuYXJlZGJlbmUgbGluaWplIHBvbW/mdSBDVFJMLUQgaSA8VEFCPiAqKgorCisgIDEuIFByb3ZqZXJpdGUgZGEgVmltIG5pamUgdSBWaSBtb2R1OiAgOnNldCBub2NwCisKKyAgMi4gUG9nbGVkYWp0ZSBrb2plIGRhdG90ZWtlIHBvc3RvamUgdSBkaXJla3RvcmlqdTogIDohbHMgICBvciAgOiFkaXIKKworICAzLiBPdGlwa2FqdGUgcG/oZXRhayBuYXJlZGJlOiAgOmUKKworICA0LiBUaXBrYWp0ZSAgQ1RSTC1EICBpIHByaWthemF0aSDmZSBzZSBsaXN0YSBuYXJlZGJpIGtvamUgemFwb+hpbmp1IHNhICJlIi4KKworICA1LiBQcml0aXNuaXRlIDxUQUI+ICBpIFZpbSDmZSBkb3B1bml0aSB1bm9zIHUgbmFyZWRidSAiOmVkaXQiLgorCisgIDYuIERvZGFqdGUgcmF6bWFrIGkgcG/oZXRhayBkYXRvdGVrZTogIDplZGl0IEZJTAorCisgIDcuIFByaXRpc25pdGUgPFRBQj4uICBWaW0g5mUgbmFkb3B1bml0aSBpbWUgZGF0b3Rla2UgKGFrbyBqZSBqZWRpbnN0dmVubykuCisKK05BUE9NRU5BOiAgTW9ndeZlIGplIGRvcHVuaXRpIG1ub2dlIG5hcmVkYmUuICBLb3Jpc3RpdGUgQ1RSTC1EIGkgPFRBQj4uCisgICAgICAgICAgIE5hcm/oaXRvIGplIGtvcmlzbm8gemEgIDpoZWxwICBuYXJlZGJlLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgIExla2NpamEgNyBTQY5FVEFLCisKKworICAxLiBPdGlwa2FqdGUgIDpoZWxwICBpbGkgcHJpdGlzbml0ZSA8RjE+IGlsaSA8SGVscD4gIHphIHBvbW/mLgorCisgIDIuIE90aXBrYWp0ZSAgOmhlbHAgbmFyZWRiYSAga2FrbyBiaSBkb2JpbGkgcG9tb+YgemEgIG5hcmVkYmEgLgorCisgIDMuIE90aXBrYWp0ZSAgQ1RSTC1XIENUUkwtVyAgemEgcHJlbGF6YWsgdSBkcnVnaSBwcm96b3IKKworICA0LiBPdGlwa2FqdGUgIDpxICBrYWtvIGJpIHphdHZvcmlsaSBwcm96b3IgcG9tb+ZpCisKKyAgNS4gTmFwcmF2aXRlIHZpbXJjIHNrcmlwdHUgemEgcG9kaXphbmplIGtha28gYmkgdSBuanUgc3ByZW1hbGkKKyAgICAgdmGaZSBvbWlsamVuZSBwb3N0YXZrZS4KKworICA2LiBLYWRhIHRpcGthdGUgbmFyZWRidSBrb2phIHphcG/oaW5qZSBzYSAgOgorICAgICBwcml0aXNuaXRlIENUUkwtRCBrYWtvIGJpIHZpZGplbGkgbW9ndeZlIHZhbGphbmUgdnJpamVkbm9zdGkuCisgICAgIFByaXRpc25pdGUgPFRBQj4ga2FrbyBiaSBvZGFicmFsaSBqZWRudSBvZCBuamloLgorCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICBLcmFqLiAgQ2lsaiBwcmlydehuaWthIGplIGRhIHBva2GeZSBrcmF0YWsgcHJlZ2xlZCBWaW0gZWRpdG9yYSwgdGVrIHRvbGlrbworICBkYSBvbW9ndeZpIG5qZWdvdm8ga29yaZp0ZW5qZS4gUHJpcnXobmlrIG5pamUgcG90cHVuIGplciBWaW0gaW1hIG1ub2dvIHZpmmUKKyAgbmFyZWRiaS4gWmEgdmmaZSBpbmZvcm1hY2lqYTogIjpoZWxwIHVzZXItbWFudWFsIi4KKworICBaYSDoaXRhbmplIGkga29yaZp0ZW5qZSwgcHJlcG9ydehhbW86CisJVmltIC0gVmkgSW1wcm92ZWQgLSBieSBTdGV2ZSBPdWFsbGluZQorCUl6ZGF2Yeg6IE5ldyBSaWRlcnMKKyAgUHJ2YSBrbmppZ2EgcG90cHVubyBwb3N2ZeZlbmEgVmltLXUuIFZybG8ga29yaXNuYSB6YSBwb+hldG5pa2UuCisgIFNhIG1ub2dvIHByaW1qZXJhIGkgc2xpa2EuCisgIFBvc2pldGl0ZSBodHRwOi8vaWNjZi1ob2xsYW5kLm9yZy9jbGljazUuaHRtbAorCisgIFNsamVkZeZhIGtuamlnYSBqZSBuZZp0byBzdGFyaWphIGkgdmmaZSBvIFZpLXUgbmVnbyBvIFZpbS11LCBwcmVwb3J16GFtbzoKKwlMZWFybmluZyB0aGUgVmkgRWRpdG9yIC0gYnkgTGluZGEgTGFtYgorCUl6ZGF2Yeg6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIFNvbGlkbmEga25qaWdhLCBtb55ldGUgc2F6bmF0aSBza29ybyBzdmUgmnRvIG1vnmV0ZSBuYXByYXZpdGkKKyAgdSBWaS11LiCKZXN0byBpemRhbmplIGltYSBuZZp0byBpbmZvcm1hY2lqYSBpIG8gVmltLXUuCisKKyAgT3ZhaiBwcmlydehuaWsgc3UgbmFwaXNhbGk6IE1pY2hhZWwgQy4gUGllcmNlIGkgUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcyBrb3Jpc3Rl5mkgaWRlamUgQ2hhcmxlcyBTbWl0aCwKKyAgQ29sb3JhZG8gU3RhdGUgVW5pdmVyc2l0eS4gIEUtcG+adGE6IGJ3YXJlQG1pbmVzLmNvbG9yYWRvLmVkdS4KKworICBOYWtuYWRuZSBwcm9tamVuZSBuYXByYXZpbyBqZSBCcmFtIE1vb2xlbmFhci4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisgIFByZXZlbyBuYSBocnZhdHNraTogUGF1bCBCLiBNYWhvbCA8b25lbWRhQGdtYWlsLmNvbT4KKyAgUHJlaW5ha2EgMS40MiwgTGlwYW5qIDIwMDgKKworCmRpZmYgLS1naXQgYS9ydW50aW1lL3R1dG9yL3R1dG9yLml0LnV0Zi04IGIvcnVudGltZS90dXRvci90dXRvci5pdC51dGYtOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTFiNTFiCi0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS90dXRvci90dXRvci5pdC51dGYtOApAQCAtMCwwICsxLDk2NyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPSAgICBCZW52ZW51dG8gIGFsbGEgICBHIHUgaSBkIGEgICAgYWxsJ0VkaXRvciAgIFYgSSBNICAgLSAgICBWZXJzaW9uZSAxLjcgICAgPQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgIFZpbSDDqCB1biBFZGl0b3IgbW9sdG8gcG90ZW50ZSBlZCBoYSBwYXJlY2NoaSBjb21hbmRpLCB0cm9wcGkgcGVyCisgICAgIHNwaWVnYXJsaSB0dXR0aSBpbiB1bmEgZ3VpZGEgY29tZSBxdWVzdGEuICBRdWVzdGEgZ3VpZGEgc2VydmUgYQorICAgICBkZXNjcml2ZXJlIHF1ZWkgY29tYW5kaSBjaGUgdGkgcGVybWV0dG9ubyBkaSB1c2FyZSBmYWNpbG1lbnRlCisgICAgIFZpbSBjb21lIEVkaXRvciBkaSB1c28gZ2VuZXJhbGUuCisKKyAgICAgSWwgdGVtcG8gbmVjZXNzYXJpbyBwZXIgY29tcGxldGFyZSBsYSBndWlkYSDDqCBjaXJjYSAyNS0zMCBtaW51dGksCisgICAgIGEgc2Vjb25kYSBkaSBxdWFudG8gdGVtcG8gZGVkaWNoaSBhbGxhIHNwZXJpbWVudGF6aW9uZS4KKworICAgICBBVFRFTlpJT05FIQorICAgICBJIGNvbWFuZGkgbmVsbGUgbGV6aW9uaSBtb2RpZmljYW5vIHF1ZXN0byB0ZXN0by4gRmFpIHVuYSBjb3BpYSBkaSBxdWVzdG8KKyAgICAgZmlsZSBwZXIgZXNlcmNpdGFydGkgKHNlIGhhaSB1c2F0byAidmltdHV0b3IiLCBzdGFpIGdpw6AgdXNhbmRvIHVuYSBjb3BpYSkuCisKKyAgICAgRScgaW1wb3J0YW50ZSBub24gc2NvcmRhcmUgY2hlIHF1ZXN0YSBndWlkYSB2dW9sZSBpbnNlZ25hcmUgdHJhbWl0ZQorICAgICBsJ3Vzby4gUXVlc3RvIHZ1b2wgZGlyZSBjaGUgZGV2aSBlc2VndWlyZSBpIGNvbWFuZGkgcGVyIGltcGFyYXJsaQorICAgICBkYXZ2ZXJvLiBTZSBsZWdnaSBpbCB0ZXN0byBlIGJhc3RhLCBkaW1lbnRpY2hlcmFpIHByZXN0byBpIGNvbWFuZGkhCisKKyAgICAgQWRlc3NvLCBhc3NpY3VyYXRpIGNoZSBpbCB0YXN0byBCTE9DQ0EtTUFJVVNDT0xPIG5vbiBzaWEgc2NoaWFjY2lhdG8KKyAgICAgZSBwcmVtaSBpbCB0YXN0byAgICBqICAgIHRhbnRvIGRhIG11b3ZlcmUgaWwgY3Vyc29yZSBmaW5vIGEgY2hlIGxhCisgICAgIExlemlvbmUgMS4xIHJpZW1waWEgY29tcGxldGFtZW50ZSBsbyBzY2hlcm1vLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQlMZXppb25lIDEuMTogIE1PVklNRU5USSBERUwgQ1VSU09SRQorCisKKyAgICoqIFBlciBtdW92ZXJlIGlsIGN1cnNvcmUsIHByZW1pIGkgdGFzdGkgaCxqLGssbCBjb21lIGluZGljYXRvLiAqKgorCSAgICAgXgorCSAgICAgawkJICAgIE5PVEE6ICBJbCB0YXN0byBoIMOoIGEgc2luaXN0cmEgZSBtdW92ZSBhIHNpbmlzdHJhLgorICAgICAgIDwgaAkgbCA+CQkgICBJbCB0YXN0byBsIMOoIGEgZGVzdHJhIGUgbXVvdmUgYSBkZXN0cmEuCisJICAgICBqCQkJICAgSWwgdGFzdG8gaiByaWNvcmRhIHVuYSBmcmVjY2lhIGluIGdpw7kuCisJICAgICB2CisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgc3VsbG8gc2NoZXJtbyBmaW5jaMOpIG5vbiB0aSBzZW50aSBhIHR1byBhZ2lvLgorCisgIDIuIFRpZW5pIHNjaGlhY2NpYXRvIGlsIHRhc3RvICJnacO5IiAoaikgZmluY2jDqSBub24gc2kgcmlwZXRlIGlsIG1vdmltZW50by4KKyAgICAgQWRlc3NvIHNhaSBjb21lIGFycml2YXJlIGZpbm8gYWxsYSBsZXppb25lIHNlZ3VlbnRlLgorCisgIDMuIFVzYW5kbyBpbCB0YXN0byAiZ2nDuSIgc3Bvc3RhdGkgYWxsYSBMZXppb25lIDEuMi4KKworTk9UQTogUXVhbmRvIG5vbiBzZWkgc2ljdXJvIGRlbCB0YXN0byBjaGUgaGFpIHByZW11dG8sIHByZW1pIDxFU0M+IHBlciBhbmRhcmUKKyAgICAgIGluIE1vZGFsaXTDoCBOb3JtYWxlIFtOb3JtYWwgTW9kZV0uIFBvaSByaS1pbW1ldHRpIGlsIGNvbWFuZG8gY2hlIHZvbGV2aS4KKworTk9UQTogSSB0YXN0aSBjb24gbGUgZnJlY2NlIGZhbm5vIGxvIHN0ZXNzbyBzZXJ2aXppby4gTWEgdXNhbmRvIGhqa2wgcmllc2NpCisgICAgICBhIG11b3ZlcnRpIG1vbHRvIHBpw7kgcmFwaWRhbWVudGUsIGRvcG8gY2hlIGNpIHNpIGFiaXR1YS4gIERhdnZlcm8hCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJTGV6aW9uZSAxLjI6IFVTQ0lSRSBEQSBWSU0KKworCisgICEhIE5PVEE6IFByaW1hIGRpIGVzZWd1aXJlIHF1YW50byByaWNoaWVzdG8sIGxlZ2dpIGxhIExlemlvbmUgcGVyIGludGVybyEhCisKKyAgMS4gUHJlbWkgaWwgdGFzdG8gPEVTQz4gKHBlciBhc3NpY3VyYXJ0aSBkaSBlc3NlcmUgaW4gTW9kYWxpdMOgIE5vcm1hbGUpLgorCisgIDIuIEJhdHRpOiAgICAgOnEhIDxJTlZJTz4uCisgICAgIENvc8OsIGVzY2kgZGFsbCdFZGl0b3IgU0NBUlRBTkRPIHF1YWxzaWFzaSBtb2RpZmljYSBmYXR0YS4KKworICAzLiBRdWFuZG8gdmVkaSBpbCBQUk9NUFQgZGVsbGEgU2hlbGwsIGJhdHRpIGlsIGNvbWFuZG8gY29uIGN1aSBzZWkgYXJyaXZhdG8KKyAgICAgcXVpLiAgU2FyZWJiZToJdmltdHV0b3IgPElOVklPPgorCisgIDQuIFNlIGhhaSBtZW1vcml6emF0byBxdWVzdGkgY29tYW5kaSBlIHRpIHNlbnRpIHByb250bywgZXNlZ3VpIGkgcGFzc2kKKyAgICAgZGEgMSBhIDMgcGVyIHVzY2lyZSBlIHJpZW50cmFyZSBuZWxsJ0VkaXRvci4KKworTk9UQTogIDpxISA8SU5WSU8+IFNDQVJUQSBxdWFsc2lhc2kgbW9kaWZpY2EgZmF0dGEuICBJbiB1bmEgZGVsbGUgcHJvc3NpbWUKKyAgICAgICBsZXppb25pIGltcGFyZXJhaSBjb21lIHNhbHZhcmUgdW4gZmlsZSBjaGUgaGFpIG1vZGlmaWNhdG8uCisKKyAgNS4gTXVvdmkgaW4gZ2nDuSBpbCBjdXJzb3JlIHBlciBwYXNzYXJlIGFsbGEgbGV6aW9uZSAxLjMuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCUxlemlvbmUgMS4zOiBNT0RJRklDQSBESSBURVNUSSAtIENBTkNFTExBWklPTkUKKworCisJKiogUHJlbWVyZSAgeCAgcGVyIGNhbmNlbGxhcmUgaWwgY2FyYXR0ZXJlIHNvdHRvIGFsIGN1cnNvcmUgKioKKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgbGluZWEgcGnDuSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBQZXIgY29ycmVnZ2VyZSBlcnJvcmksIG11b3ZpIGlsIGN1cnNvcmUgZmlubyBhIHBvc2l6aW9uYXJsbyBzb3ByYSBpbAorICAgICBjYXJhdHRlcmUgZGEgY2FuY2VsbGFyZS4KKworICAzLiBQcmVtaSBpbCB0YXN0bwl4ICAgICBwZXIgY2FuY2VsbGFyZSBpbCBjYXJhdHRlcmUgc2JhZ2xpYXRvLgorCisgIDQuIFJpcGV0aSBpIHBhc3NpIGRhIDIgYSA0IGZpbmNow6kgbGEgZnJhc2Ugw6ggY29ycmV0dGEuCisKKy0tLT4gTGEgbW11Y2NhIHNhbHTDssOyIGZpbm5vbyBhbGxhYSBsdW5ubmEuCisKKyAgNS4gT3JhIGNoZSBsYSBsaW5lYSDDqCBjb3JyZXR0YSwgdmFpIGFsbGEgTGV6aW9uZSAxLjQKKworTk9UQTogTWVudHJlIHNlZ3VpIHF1ZXN0YSBndWlkYSwgbm9uIGNlcmNhcmUgZGkgaW1wYXJhcmUgYSBtZW1vcmlhLAorICAgICAgbWEgaW1wYXJhIGZhY2VuZG8gcHJhdGljYS4KKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJTGV6aW9uZSAxLjQ6IE1PRElGSUNBIERJIFRFU1RJIC0gSU5TRVJJTUVOVE8KKworCisgICAgICAgICAgICAgICAgICAgKiogUHJlbWVyZSAgaSAgcGVyIGluc2VyaXJlIHRlc3RvLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgYWxsYSBwcmltYSBsaW5lYSBxdWkgc290dG8sIGluZGljYXRhIGRhIC0tLT4uCisKKyAgMi4gUGVyIHJlbmRlcmUgbGEgcHJpbWEgbGluZWEgdWd1YWxlIGFsbGEgc2Vjb25kYSwgbXVvdmkgaWwgY3Vyc29yZSBzb3ByYQorICAgICBpbCBwcmltbyBjYXJhdHRlcmUgRE9QTyBsYSBwb3NpemlvbmUgaW4gY3VpIGlsIHRlc3RvIHZhIGluc2VyaXRvLgorCisgIDMuIFByZW1pICBpICBlIGJhdHRpIGxlIGFnZ2l1bnRlIG9wcG9ydHVuZS4KKworICA0LiBRdWFuZG8gdW4gZXJyb3JlIMOoIGNvcnJldHRvLCBwcmVtaSA8RVNDPiBwZXIgdG9ybmFyZSBpbiBNb2RhbGl0w6AgTm9ybWFsZS4KKyAgICAgUmlwZXRpIGkgcGFzc2kgZGEgMiBhIDQgZmlubyBhIGNvbXBsZXRhcmUgbGEgY29ycmV6aW9uZSBkZWxsYSBmcmFzZS4KKworLS0tPiBDJ2VyYSBkZWwgdHN0byBtbmNudCBxdWVzdGEgLgorLS0tPiBDJ2VyYSBkZWwgdGVzdG8gbWFuY2FudGUgZGEgcXVlc3RhIGxpbmVhLgorCisgIDUuIFF1YW5kbyBzZWkgYSB0dW8gYWdpbyBuZWxsJ2luc2VyaW1lbnRvIGRpIHRlc3RvIHZhaSBhbGxhIGxlemlvbmUgMS41LgorCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSBMZXppb25lIDEuNTogTU9ESUZJQ0EgREkgVEVTVEkgLSBBR0dJVU5UQQorCisKKwkgICAqKiBQcmVtZXJlICBBICBwZXIgYWdnaXVuZ2VyZSB0ZXN0byBhIGZpbmUgbGluZWEuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKyAgICAgTm9uIGltcG9ydGEgZG92ZSDDqCBwb3NpemlvbmF0byBpbCBjdXJzb3JlIHN1bGxhIGxpbmVhIHN0ZXNzYS4KKworICAyLiBCYXR0aSAgQSAgZSBpbnNlcmlzY2kgbGUgbmVjZXNzYXJpZSBhZ2dpdW50ZS4KKworICAzLiBBbGxhIGZpbmUgZGVsbGEgYWdnaXVudGEgcHJlbWkgPEVTQz4gcGVyIHRvcm5hcmUgaW4gbW9kYWxpdMOgIE5vcm1hbGUuCisKKyAgNC4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHNlY29uZGEgbGluZWEgaW5kaWNhdGEgLS0tPiBlIHJpcGV0aQorICAgICBpIHBhc3NpIDIgZSAzIHBlciBjb3JyZWdnZXJlIHF1ZXN0YSBmcmFzZS4KKworLS0tPiBDJ8OoIGRlbCB0ZXN0byBjaGUgbWFuY2EgZGEgcXUKKyAgICAgQyfDqCBkZWwgdGVzdG8gY2hlIG1hbmNhIGRhIHF1ZXN0YSBsaW5lYS4KKy0tLT4gQyfDqCBhbmNoZSBkZWwgdGVzdG8gY2hlIG1hCisgICAgIEMnw6ggYW5jaGUgZGVsIHRlc3RvIGNoZSBtYW5jYSBxdWkuCisKKyAgNS4gUXVhbmRvIHNlaSBhIHR1byBhZ2lvIG5lbGwnYWdnaXVudGEgZGkgdGVzdG8gdmFpIGFsbGEgbGV6aW9uZSAxLjYuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgIExlemlvbmUgMS42OiBNT0RJRklDQVJFIFVOIEZJTEUKKworCisJICAgICAgKiogVXNhcmUgIDp3cSAgcGVyIHNhbHZhcmUgdW4gZmlsZSBlIHVzY2lyZS4gKioKKworICAhISBOT1RBOiBQcmltYSBkaSBlc2VndWlyZSBxdWFudG8gcmljaGllc3RvLCBsZWdnaSBsYSBMZXppb25lIHBlciBpbnRlcm8hIQorCisgIDEuIEVzY2kgZGEgVmltIGNvbWUgaGFpIGZhdHRvIG5lbGxhIGxlemlvbmUgMS4yOiAgOnEhCisKKyAgMi4gUXVhbmRvIHZlZGkgaWwgUFJPTVBUIGRlbGxhIFNoZWxsLCBiYXR0aSBpbCBjb21hbmRvOiAgdmltIHR1dG9yIDxJTlZJTz4KKyAgICAgJ3ZpbScgw6ggaWwgY29tYW5kbyBwZXIgcmljaGlhbWFyZSBWaW0sICd0dXRvcicgw6ggaWwgbm9tZSBkZWwgZmlsZSBjaGUKKyAgICAgZGVzaWRlcmkgbW9kaWZpY2FyZS4gIFVzYSB1biBmaWxlIGNoZSBwb3NzYSBlc3NlcmUgbW9kaWZpY2F0by4KKworICAzLiBJbnNlcmlzY2kgZSBjYW5jZWxsYSB0ZXN0byBjb21lIGhhaSBpbXBhcmF0byBuZWxsZSBsZXppb25pIHByZWNlZGVudGkuCisKKyAgNC4gU2FsdmEgaWwgZmlsZSBlZCBlc2NpIGRhIFZpbSBjb246ICA6d3EgIDxJTlZJTz4KKworICA1LiBSaWVudHJhIGluIHZpbXR1dG9yIGUgc2NlbmRpIGFsIHNvbW1hcmlvIGNoZSBzZWd1ZS4KKworICA2LiBEb3BvIGF2ZXIgbGV0dG8gaSBwYXNzaSBxdWkgc29wcmEgZWQgYXZlcmxpIGNvbXByZXNpOiBlc2VndWlsaS4KKworICAKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgICAgIExlemlvbmUgMSBTT01NQVJJTworCisKKyAgMS4gSWwgY3Vyc29yZSBzaSBtdW92ZSB1c2FuZG8gaSB0YXN0aSBjb24gbGUgZnJlY2NlIG8gaSB0YXN0aSBoamtsLgorCSBoIChzaW5pc3RyYSkJaiAoZ2nDuSkgICAgICAgayAoc3UpCSAgICBsIChkZXN0cmEpCisKKyAgMi4gUGVyIGVzZWd1aXJlIFZpbSBkYWwgUFJPTVBUIGRlbGxhIFNoZWxsIGJhdHRpOiAgdmltIE5PTUVGSUxFIDxJTlZJTz4KKworICAzLiBQZXIgdXNjaXJlIGRhIFZpbSBiYXR0aTogPEVTQz4gOnEhIDxJTlZJTz4gcGVyIHVzY2lyZSBzZW56YSBzYWx2YXJlLgorCQlvcHB1cmUgYmF0dGk6IDxFU0M+IDp3cSA8SU5WSU8+IHBlciB1c2NpcmUgc2FsdmFuZG8gbW9kaWZpY2hlLgorCisgIDQuIFBlciBjYW5jZWxsYXJlIGlsIGNhcmF0dGVyZSBzb3R0byBhbCBjdXJzb3JlIGJhdHRpOiB4CisKKyAgNS4gUGVyIGluc2VyaXJlIHRlc3RvIHN1Yml0byBwcmltYSBkZWwgY3Vyc29yZSBiYXR0aToKKwkgaSAgICAgYmF0dGkgdGVzdG8gaW5zZXJpdG8JPEVTQz4JaW5zZXJpc2NpIHByaW1hIGRlbCBjdXJzb3JlCisJIEEgICAgIGJhdHRpIHRlc3RvIGFnZ2l1bnRvCTxFU0M+CWFnZ2l1bmdpIGEgZmluZSBsaW5lYQorCitOT1RBOiBwcmVtZW5kbyA8RVNDPiByaXRvcm5lcmFpIGluIE1vZGFsaXTDoCBOb3JtYWxlIG8gYW5udWxsZXJhaQorICAgICAgdW4gY29tYW5kbyBlcnJhdG8gY2hlIHB1b2kgYXZlciBpbnNlcml0byBpbiBwYXJ0ZS4KKworT3JhIGNvbnRpbnVhIGNvbiBsYSBMZXppb25lIDIuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICBMZXppb25lIDIuMTogQ09NQU5ESSBESSBDQU5DRUxMQVpJT05FCisKKworCQkqKiBCYXR0aSAgZHcgIHBlciBjYW5jZWxsYXJlIHVuYSBwYXJvbGEuICoqCisKKyAgMS4gUHJlbWkgIDxFU0M+ICBwZXIgYWNjZXJ0YXJ0aSBkaSBlc3NlcmUgaW4gTW9kYWxpdMOgIE5vcm1hbGUuCisKKyAgMi4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+LgorCisgIDMuIE11b3ZpIGlsIGN1cnNvcmUgYWxsJ2luaXppbyBkaSB1bmEgcGFyb2xhIGNoZSB2dW9pIGNhbmNlbGxhcmUuCisKKyAgNC4gQmF0dGkgICBkdyAgIHBlciBjYW5jZWxsYXJlIGxhIHBhcm9sYS4KKworTk9UQTogTGEgbGV0dGVyYSAgZCAgc2Fyw6AgdmlzaWJpbGUgc3VsbCd1bHRpbWEgbGluZWEgZGVsbG8gc2NoZXJtbyBtZW50cmUgbGEKKyAgICAgIGJhdHRpLiBWaW0gYXR0ZW5kZSBjaGUgdHUgYmF0dGEgIHcgLiBTZSB2ZWRpIHVuYSBsZXR0ZXJhIGRpdmVyc2EKKyAgICAgIGRhICBkICBoYWkgYmF0dHV0byBxdWFsY29zYSBkaSBzYmFnbGlhdG87IHByZW1pICA8RVNDPiAgZSByaWNvbWluY2lhLgorCistLS0+IENpIHNvbm8gbGUgYWxjdW5lIHBhcm9sZSBnaW9pYSBjaGUgbm9uIGMnZW50cmFubyBjYXJ0YSBpbiBxdWVzdGEgZnJhc2UuCisKKyAgNS4gUmlwZXRpIGkgcGFzc2kgMyBlIDQgZmluY2jDqSBsYSBmcmFzZSDDqCBjb3JyZXR0YSwgcG9pIHZhaSBhbGxhIExlemlvbmUgMi4yLgorCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQlMZXppb25lIDIuMjogQUxUUkkgQ09NQU5ESSBESSBDQU5DRUxMQVpJT05FCisKKworCSAgICoqIEJhdHRpICBkJAlwZXIgY2FuY2VsbGFyZSBmaW5vIGEgZmluZSBsaW5lYS4gKioKKworICAxLiBQcmVtaSAgPEVTQz4gIHBlciBhY2NlcnRhcnRpIGRpIGVzc2VyZSBpbiBNb2RhbGl0w6AgTm9ybWFsZS4KKworICAyLiBNdW92aSBpbCBjdXJzb3JlIGZpbm8gYWxsYSBsaW5lYSBxdWkgc290dG8sIGluZGljYXRhIGRhIC0tLT4uCisKKyAgMy4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIGZpbmUgZGVsbGEgbGluZWEgY29ycmV0dGEgKERPUE8gaWwgcHJpbW8gLiApLgorCisgIDQuIEJhdHRpICAgIGQkICAgIHBlciBjYW5jZWxsYXJlIGZpbm8gYSBmaW5lIGxpbmVhLgorCistLS0+IFF1YWxjdW5vIGhhIGJhdHR1dG8gbGEgZmluZSBkaSBxdWVzdGEgbGluZWEgZHVlIHZvbHRlLiBsaW5lYSBkdWUgdm9sdGUuCisKKworICA1LiBWYWkgYWxsYSBMZXppb25lIDIuMyBwZXIgY2FwaXJlIGlsIGZ1bnppb25hbWVudG8gZGkgcXVlc3RvIGNvbWFuZG8uCisKKworCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSAgICAgTGV6aW9uZSAyLjM6IE9QRVJBVE9SSSBFIE1PVklNRU5USQorCisKKyAgTW9sdGkgY29tYW5kaSBkaSBtb2RpZmljYSB0ZXN0aSBjb25zaXN0b25vIGluIHVuIG9wZXJhdG9yZSBlIHVuIG1vdmltZW50by4KKyAgSWwgZm9ybWF0byBkZWwgY29tYW5kbyBkaSBjYW5jZWxsYXppb25lIGNvbiBsJ29wZXJhdG9yZSAgZCAgw6ggaWwgc2VndWVudGU6CisKKwkgZAltb3ZpbWVudG8KKworICBEb3ZlOgorICAgIGQJICAgICAgLSDDqCBsJ29wZXJhdG9yZSBkaSBjYW5jZWxsYXppb25lCisgICAgbW92aW1lbnRvIC0gaW5kaWNhIGRvdmUgbCdvcGVyYXRvcmUgdmEgYXBwbGljYXRvIChsaXN0YSBxdWkgc290dG8pLgorCisgIEJyZXZlIGxpc3RhIGRpIG1vdmltZW50aToKKyAgICB3IC0gZmlubyBhIGluaXppbyBkZWxsYSBwYXJvbGEgc2VndWVudGUsIEVTQ0xVU08gaWwgc3VvIHByaW1vIGNhcmF0dGVyZS4KKyAgICBlIC0gYWxsYSBmaW5lIGRlbGxhIHBhcm9sYSBjb3JyZW50ZSwgQ09NUFJFU08gaWwgc3VvIHVsdGltbyBjYXJhdHRlcmUuCisgICAgJCAtIGRhbCBjdXJzb3JlIGZpbm8gYSBmaW5lIGxpbmVhLCBDT01QUkVTTyBsJ3VsdGltbyBjYXJhdHRlcmUgZGVsbGEgbGluZWEuCisKKyAgUXVpbmRpIHNlIGJhdHRpICBkZSAgY2FuY2VsbGkgZGFsIGN1cnNvcmUgZmlubyBhIGZpbmUgcGFyb2xhLgorCitOT1RBOiAgU2UgYmF0dGkgc29sbyBpbCBtb3ZpbWVudG8gbWVudHJlIHNlaSBpbiBNb2RhbGl0w6AgTm9ybWFsZSwgc2VuemEKKyAgICAgICBuZXNzdW4gb3BlcmF0b3JlLCBpbCBjdXJzb3JlIHNpIG11b3ZlcsOgIGNvbWUgc3BlY2lmaWNhdG8uCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSBMZXppb25lIDIuNDogVVNPIERJIFVOIENPTlRBVE9SRSBQRVIgVU4gTU9WSU1FTlRPCisKKworICAqKiBTZSBiYXR0aSB1biBudW1lcm8gcHJpbWEgZGkgdW4gbW92aW1lbnRvLCBsbyByaXBldGkgYWx0cmV0dGFudGUgdm9sdGUuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbCdpbml6aW8gZGVsbGEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+LgorCisgIDIuIEJhdHRpICAydyAgcGVyIHNwb3N0YXJlIGlsIGN1cnNvcmUgZHVlIHBhcm9sZSBwacO5IGF2YW50aS4KKworICAzLiBCYXR0aSAgM2UgIHBlciBzcG9zdGFyZSBpbCBjdXJzb3JlIGFsbGEgZmluZSBkZWxsYSB0ZXJ6YSBwYXJvbGEgc2VndWVudGUuCisKKyAgNC4gQmF0dGkgIDAgICh6ZXJvKSBwZXIgcG9zaXppb25hcnRpIGFsbCdpbml6aW8gZGVsbGEgbGluZWEuCisKKyAgNS4gUmlwZXRpIGkgcGFzc2kgMiBlIDMgdXNhbmRvIG51bWVyaSBkaWZmZXJlbnRpLgorCistLS0+IFF1ZXN0YSDDqCBzb2xvIHVuYSBsaW5lYSBjb24gcGFyb2xlIGFsbCdpbnRlcm5vIGRlbGxhIHF1YWxlIHB1b2kgbXVvdmVydGkuCisKKyAgNi4gVmFpIGFsbGEgTGV6aW9uZSAyLjUuCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCUxlemlvbmUgMi41OiBVU08gREkgVU4gQ09OVEFUT1JFIFBFUiBDQU5DRUxMQVJFIERJIFBJVScKKworCisgICoqIFNlIGJhdHRpIHVuIG51bWVybyBwcmltYSBkaSB1biBtb3ZpbWVudG8sIGxvIHJpcGV0aSBhbHRyZXR0YW50ZSB2b2x0ZS4gKioKKworICBOZWxsYSBjb21iaW5hemlvbmUgZGVsbCdvcGVyYXRvcmUgY2FuY2VsbGEgZSBkaSB1biBtb3ZpbWVudG8sIGRlc2NyaXR0byBwcmltYSwKKyAgaW5zZXJpdGUgdW4gY29udGF0b3JlIHByaW1hIGRlbCBtb3ZpbWVudG8gcGVyIGNhbmNlbGxhcmUgZGkgcGnDuToKKwkgZCAgIG51bWVybyAgIG1vdmltZW50bworCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgYWxsYSBwcmltYSBwYXJvbGEgTUFJVVNDT0xBIG5lbGxhIHJpZ2EgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBCYXR0aSAgZDJ3ICBwZXIgY2FuY2VsbGFyZSBsZSBkdWUgcGFyb2xlIE1BSVVTQ09MRQorCisgIDMuIFJpcGV0aSBpIHBhc3NpIDEgZSAyIGNvbiB1biBjb250YXRvcmUgZGl2ZXJzbyBwZXIgY2FuY2VsbGFyZSBsYSBwYXJvbGUKKyAgICAgTUFJVVNDT0xFIGNvbnNlY3V0aXZlIGNvbiB1biBzb2xvIGNvbWFuZG8KKworLS0tPiAgcXVlc3RhIEFCQyBERSBsaW5lYSBGR0hJIEpLIExNTiBPUCBkaSBwYXJvbGUgw6ggUSBSUyBUVVYgb3JhIHJpcHVsaXRhLgorCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQlMZXppb25lIDIuNjogTEFWT1JBUkUgU1UgTElORUUgSU5URVJFCisKKwkgICAgKiogQmF0dGkgIGRkICBwZXIgY2FuY2VsbGFyZSB1bidpbnRlcmEgbGluZWEuICoqCisKKyAgUGVyIGxhIGZyZXF1ZW56YSBjb24gY3VpIGNhcGl0YSBkaSBjYW5jZWxsYXJlIGxpbmVlIGludGVyZSwgY2hpIGhhCisgIGRpc2VnbmF0byBWaSBoYSBkZWNpc28gY2hlIHNhcmViYmUgc3RhdG8gcGnDuSBzZW1wbGljZSBiYXR0ZXJlCisgIGR1ZSBkIGNvbnNlY3V0aXZlIHBlciBjYW5jZWxsYXJlIHVuYSBsaW5lYS4KKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgbGluZWEgMikgbmVsbGEgZnJhc2UgcXVpIHNvdHRvLgorICAyLiBCYXR0aSAgZGQgIHBlciBjYW5jZWxsYXJlIGxhIGxpbmVhLgorICAzLiBPcmEgc3Bvc3RhdGkgYWxsYSBsaW5lYSA0KS4KKyAgNC4gQmF0dGkgICAyZGQgICBwZXIgY2FuY2VsbGFyZSBkdWUgbGluZWUuCisKKy0tLT4gIDEpICBMZSByb3NlIHNvbm8gcm9zc2UsCistLS0+ICAyKSAgSWwgZmFuZ28gw6ggZGl2ZXJ0ZW50ZSwKKy0tLT4gIDMpICBMZSB2aW9sZSBzb25vIGJsdSwKKy0tLT4gIDQpICBJbyBobyB1bidhdXRvbW9iaWxlLAorLS0tPiAgNSkgIEdsaSBvcm9sb2dpIHNlZ25hbm8gaWwgdGVtcG8sCistLS0+ICA2KSAgTG8genVjY2hlcm8gw6ggZG9sY2UsCistLS0+ICA3KSAgRSBjb3PDrCBzZWkgYW5jaGUgdHUuCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgICAgTGV6aW9uZSAyLjc6IElMIENPTUFORE8gVU5ETyBbQU5OVUxMQV0KKworICAgICoqICBQcmVtaSAgdSAgcGVyIGFubnVsbGFyZSBnbGkgdWx0aW1pIGNvbWFuZGkgZXNlZ3VpdGkuICAqKgorICAgICoqIFByZW1pICBVICBwZXIgYW5udWxsYXJlIGxlIG1vZGlmaWNoZSBhbGwndWx0aW1hIGxpbmVhLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgZmlubyBhbGxhIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKyAgICAgZSBwb3NpemlvbmF0aSBzdWwgcHJpbW8gZXJyb3JlLgorICAyLiBCYXR0aSAgeCAgcGVyIGNhbmNlbGxhcmUgaWwgcHJpbW8gY2FyYXR0ZXJlIHNiYWdsaWF0by4KKyAgMy4gQWRlc3NvIGJhdHRpICB1ICBwZXIgYW5udWxsYXJlIGwndWx0aW1vIGNvbWFuZG8gZXNlZ3VpdG8uCisgIDQuIE9yYSBpbnZlY2UsIGNvcnJlZ2dpIHR1dHRpIGdsaSBlcnJvcmkgc3VsbGEgbGluZWEgdXNhbmRvIGlsIGNvbWFuZG8gIHggLgorICA1LiBBZGVzc28gYmF0dGkgdW5hIFUgTWFpdXNjb2xhIHBlciByaXBvcnRhcmUgbGEgbGluZWEgYWwgc3VvIHN0YXRvIG9yaWdpbmFsZS4KKyAgNi4gQWRlc3NvIGJhdHRpICB1ICBwacO5IHZvbHRlIHBlciBhbm51bGxhcmUgbGEgIFUgIGUgaSBjb21hbmRpIHByZWNlZGVudGkuCisgIDcuIEFkZXNzbyBiYXR0aSBwacO5IHZvbHRlIENUUkwtciAodGllbmkgaWwgdGFzdG8gQ1RSTCBzY2hpYWNjaWF0bworICAgICBtZW50cmUgYmF0dGkgcikgcGVyIHJpZXNlZ3VpcmUgaSBjb21hbmRpIChhbm51bGxhcmUgbCdhbm51bGxhbWVudG8pLgorCistLS0+IENvcnJlZWdnaSBnbGkgZXJyb3JpIHNzdSBxdXVlc3RhIGxpbmVhIGUgcmlpbXBpYXp6YWxpIGNvb24gInVuZG8iLgorCisgIDguIFF1ZXN0aSBjb21hbmRpIHNvbm8gbW9sdG8gdXRpbGkuIE9yYSBzcG9zdGF0aSBhbCBTb21tYXJpbyBkZWxsYSBMZXppb25lIDIuCisKKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkJICAgICAgIExlemlvbmUgMiBTT01NQVJJTworCisKKyAgMS4gUGVyIGNhbmNlbGxhcmUgZGFsIGN1cnNvcmUgZmlubyBhbGxhIHBhcm9sYSBzZWd1ZW50ZSBiYXR0aTogICAgICBkdworICAyLiBQZXIgY2FuY2VsbGFyZSBkYWwgY3Vyc29yZSBmaW5vIGFsbGEgZmluZSBkZWxsYSBsaW5lYSBiYXR0aTogICAgIGQkCisgIDMuIFBlciBjYW5jZWxsYXJlIHVuJ2ludGVyYSBsaW5lYSBiYXR0aTogICAgZGQKKyAgNC4gUGVyIGVzZWd1aXJlIHBpw7kgdm9sdGUgdW4gbW92aW1lbnRvLCBtZXR0aWNpIGRhdmFudGkgdW4gbnVtZXJvOiAgMncKKyAgNS4gSWwgZm9ybWF0byBwZXIgdW4gY29tYW5kbyBkaSBtb2RpZmljYSDDqDoKKworICAgICAgIG9wZXJhdG9yZSAgIFtudW1lcm9dICAgbW92aW1lbnRvCisgICAgIGRvdmU6CisgICAgICAgb3BlcmF0b3JlIC0gaW5kaWNhIGlsIGRhIGZhcnNpLCBhZCBlcy4gIGQgIHBlciBbZGVsZXRlXSBjYW5jZWxsYXJlCisgICAgICAgW251bWVyb10gIC0gY29udGF0b3JlIGZhY29sdGF0aXZvIGRpIHJpcGV0aXppb25lIGRlbCBtb3ZpbWVudG8KKyAgICAgICBtb3ZpbWVudG8gLSBzcG9zdGFtZW50byBuZWwgdGVzdG8gc3UgY3VpIG9wZXJhcmUsIGFkIGVzLgorICAgICAgIAkJICAgdyBbd29yZF0gcGFyb2xhLCAkIChmaW5vIGEgZmluZSBsaW5lYSksIGV0Yy4KKworICA2LiBQZXIgYW5kYXJlIGEgaW5pemlvIGxpbmVhIHVzYXRlIHVubyB6ZXJvOgkwCisgIDcuIFBlciBhbm51bGxhcmUgaSBjb21hbmRpIHByZWNlZGVudGksIGJhdHRpOgkgCSAgICB1ICh1IG1pbnVzY29sYSkKKyAgICAgUGVyIGFubnVsbGFyZSB0dXR0ZSBsZSBtb2RpZmljaGUgYSB1bmEgbGluZWEgYmF0dGk6ICAgIFUgKFUgbWFpdXNjb2xhKQorICAgICBQZXIgYW5udWxsYXJlIGwnYW5udWxsYW1lbnRvIFsicmVkbyJdICAJICBiYXR0aTogICAgQ1RSTC1yCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCSBMZXppb25lIDMuMTogSUwgQ09NQU5ETyBQVVQgW01FVFRJLCBQT05JXQorCisKKyAgICoqIEJhdHRpICBwICBwZXIgcG9ycmUgW3B1dF0gdGVzdG8gKGNhbmNlbGxhdG8gcHJpbWEpIGRvcG8gaWwgY3Vyc29yZS4gKioKKworICAxLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgcHJpbWEgbGluZWEgaW5kaWNhdGEgY29uIC0tLT4gcXVpIGluIGJhc3NvLgorCisgIDIuIEJhdHRpICBkZCAgcGVyIGNhbmNlbGxhcmUgbGEgbGluZWEgZSBkZXBvc2l0YXJsYSBpbiB1biByZWdpc3RybyBkaSBWaW0uCisKKyAgMy4gTXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgYykgU09QUkEgcXVlbGxhIGRvdmUgYW5kcmViYmUgbWVzc2EKKyAgICAgbGEgbGluZWEgYXBwZW5hIGNhbmNlbGxhdGEuCisKKyAgNC4gQmF0dGkgIHAgIHBlciBtZXR0ZXJlIGxhIGxpbmVhIHNvdHRvIGlsIGN1cnNvcmUuCisKKyAgNS4gUmlwZXRpIGkgcGFzc2kgZGEgMiBhIDQgcGVyIG1ldHRlcmUgdHV0dGUgbGUgbGluZWUgbmVsIGdpdXN0byBvcmRpbmUuCisKKy0tLT4gZCkgIFB1b2kgaW1wYXJhcmxhIHR1PworLS0tPiBiKSAgTGUgdmlvbGUgc29ubyBibHUsCistLS0+IGMpICBMYSBzYWdnZXp6YSBzaSBpbXBhcmEsCistLS0+IGEpICBMZSByb3NlIHNvbm8gcm9zc2UsCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgICAgTGV6aW9uZSAzLjI6IElMIENPTUFORE8gUkVQTEFDRSBbUklNUElBWlpBUkVdCisKKworICAqKiBCYXR0aSAgcnggIHBlciByaW1waWF6emFyZSBpbCBjYXJhdHRlcmUgc290dG8gYWwgY3Vyc29yZSBjb24geCAuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBNdW92aSBpbCBjdXJzb3JlIGZpbm8gYSBwb3NpemlvbmFybG8gc29wcmEgaWwgcHJpbW8gZXJyb3JlLgorCisgIDMuIEJhdHRpICAgcgllIHBvaSBpbCBjYXJhdHRlcmUgY2hlIGRvdnJlYmJlIHN0YXJlIHF1aS4KKworICA0LiBSaXBldGkgaSBwYXNzaSAyIGUgMyBmaW5jaMOpIGxhIHByaW1hIGxpbmVhIMOoIHVndWFsZSBhbGxhIHNlY29uZGEuCisKKy0tLT4gIEFtbWF0dGVuZG8gcXVldHRhIGxpbmNlLCBxdWFsY3VubyBobyBwcmVkYXRvIGFsY3VuaSB0b3N0aSBzYmFsbGlhdGkhCistLS0+ICBJbW1ldHRlbmRvIHF1ZXN0YSBsaW5lYSwgcXVhbGN1bm8gaGEgcHJlbXV0byBhbGN1bmkgdGFzdGkgc2JhZ2xpYXRpIQorCisgIDUuIE9yYSBwYXNzYSBhbGxhIExlemlvbmUgMy4yLgorCitOT1RBOiBSaWNvcmRhdGkgY2hlIGRvdnJlc3RpIGltcGFyYXJlIGNvbiBsYSBwcmF0aWNhLCBub24gc29sbyBsZWdnZW5kby4KKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgTGV6aW9uZSAzLjM6IEwnT1BFUkFUT1JFIENIQU5HRSBbQ0FNQklBXQorCisKKyAgICAgKiogUGVyIGNhbWJpYXJlIGZpbm8gYWxsYSBmaW5lIGRpIHVuYSBwYXJvbGEsIGJhdHRpICBjZSAuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBQb3NpemlvbmEgaWwgY3Vyc29yZSBhbGxhICB1ICBpbiBsdWJ3LgorCisgIDMuIEJhdHRpICBjZSAgZSBsYSBwYXJvbGEgY29ycmV0dGEgKGluIHF1ZXN0byBjYXNvLCBiYXR0aSAgaW5lYSAgICApLgorCisgIDQuIFByZW1pIDxFU0M+IGUgdmFpIHN1bCBwcm9zc2ltbyBjYXJhdHRlcmUgZGEgbW9kaWZpY2FyZS4KKworICA1LiBSaXBldGkgaSBwYXNzaSAzIGUgNCBmaW5jaMOpIGxhIHByaW1hIGZyYXNlIMOoIHVndWFsZSBhbGxhIHNlY29uZGEuCisKKy0tLT4gUXVlc3RhIGx1YncgaGEgYWxjdW5lIHBwdGZkIGRhIGFzZGVydCB1c2dmayBsJ29wZXJhdG9yZSBDSEFOR0UuCistLS0+IFF1ZXN0YSBsaW5lYSBoYSBhbGN1bmUgcGFyb2xlIGRhIGNhbWJpYXJlIHVzYW5kbyBsJ29wZXJhdG9yZSBDSEFOR0UuCisKK05vdGEgY2hlICBjZSAgY2FuY2VsbGEgbGEgcGFyb2xhLCBlIHRpIG1ldHRlIGFuY2hlIGluIE1vZGFsaXTDoCBJbnNlcmltZW50bworICAgIFtJbnNlcnQgTW9kZV0KKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICBMZXppb25lIDMuNDogQUxUUkkgQ0FNQklBTUVOVEkgVVNBTkRPIGMKKworKiogTCdvcGVyYXRvcmUgYyBbQ0hBTkdFXSBhZ2lzY2Ugc3VnbGkgc3Rlc3NpIG1vdmltZW50aSBkaSAgZCAgW0RFTEVURV0gKioKKworICAxLiBMJ29wZXJhdG9yZSBDSEFOR0Ugc2kgY29tcG9ydGEgY29tZSBERUxFVEUuICBJbCBmb3JtYXRvIMOoOgorCisgICAgICAgYyAgIFtudW1lcm9dICAgbW92aW1lbnRvCisKKyAgMi4gSSBtb3ZpbWVudGkgc29ubyBnbGkgc3Rlc3NpLAorICAgICBhZCBlcy4gdyAod29yZCwgcGFyb2xhKSwgJCAoZmluZSBsaW5lYSksIGV0Yy4KKworICAzLiBNdW92aSBpbCBjdXJzb3JlIGFsbGEgcHJpbWEgbGluZWEgcXVpIHNvdHRvLCBpbmRpY2F0YSBkYSAtLS0+LgorCisgIDQuIFBvc2l6aW9uYSBpbCBjdXJzb3JlIGFsIHByaW1vIGVycm9yZS4KKworICA1LiBCYXR0aSAgYyQgIGUgaW5zZXJpc2NpIHJlc3RvIGRlbGxhIGxpbmVhIHV0aWxpenphbmRvIGNvbWUgbW9kZWxsbyBsYQorICAgICBsaW5lYSBzZWd1ZW50ZSwgZSBxdWFuZG8gaGFpIGZpbml0byBwcmVtaSA8RVNDPgorCistLS0+IExhIGZpbmUgZGkgcXVlc3RhIGxpbmVhIGRldmUgZXNzZXJlIGFpdXRhdGEgYSBkaXZlbmlyZSBjb21lIGxhIHNlZ3VlbnRlLgorLS0tPiBMYSBmaW5lIGRpIHF1ZXN0YSBsaW5lYSBkZXZlIGVzc2VyZSBjb3JyZXR0YSB1c2FuZG8gaWwgY29tYW5kbyAgYyQgIC4KKworTk9UQTogIFB1b2kgdXNhcmUgaWwgdGFzdG8gQmFja3NwYWNlIHNlIGRldmkgY29ycmVnZ2VyZSBlcnJvcmkgZGkgYmF0dGl0dXJhLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICAgTGV6aW9uZSAzIFNPTU1BUklPCisKKworICAxLiBQZXIgcmVpbnNlcmlyZSBkZWwgdGVzdG8gYXBwZW5hIGNhbmNlbGxhdG8sIGJhdHRpICAgcCAgIC4gIFF1ZXN0bworICAgICBpbnNlcmlzY2UgW3BvbmVdIGlsIHRlc3RvIGNhbmNlbGxhdG8gRE9QTyBpbCBjdXJzb3JlIChzZSBlcmEgc3RhdGEgdG9sdGEKKyAgICAgdW5hIGxpbmVhIGludGVyYSwgcXVlc3RhIHZlcnLDoCBtZXNzYSBuZWxsYSBsaW5lYSBTT1RUTyBpbCBjdXJzb3JlKS4KKworICAyLiBQZXIgcmltcGlhenphcmUgaWwgY2FyYXR0ZXJlIHNvdHRvIGlsIGN1cnNvcmUsIGJhdHRpICAgciAgIGUgcG9pIGlsCisgICAgIGNhcmF0dGVyZSBjaGUgdnVvaSBzb3N0aXR1aXJlLgorCisgIDMuIEwnb3BlcmF0b3JlIGNoYW5nZSB0aSBwZXJtZXR0ZSBkaSBjYW1iaWFyZSBkYWwgY3Vyc29yZSBmaW5vIGEgZG92ZQorICAgICBhcnJpdmEgaWwgbW92aW1lbnRvLiAgQWQgZXMuIEJhdHRpICBjZSAgcGVyIGNhbWJpYXJlIGRhbCBjdXJzb3JlCisgICAgIGZpbm8gYWxsYSBmaW5lIGRlbGxhIHBhcm9sYSwgIGMkICBwZXIgY2FtYmlhcmUgZmlubyBhIGZpbmUgbGluZWEuCisKKyAgNC4gSWwgZm9ybWF0byBkaSAgY2hhbmdlICDDqDoKKworICAgICAgIGMgICBbbnVtZXJvXSAgIG1vdmltZW50bworCitPcmEgdmFpIGFsbGEgcHJvc3NpbWEgTGV6aW9uZS4KKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgIExlemlvbmUgNC4xOiBQT1NJWklPTkFNRU5UTyBFIFNJVFVBWklPTkUgRklMRQorCisgICoqIEJhdHRpIENUUkwtRyBwZXIgdmVkZXJlIGEgY2hlIHB1bnRvIHNlaSBuZWwgZmlsZSBlIGxhIHNpdHVhemlvbmUgKioKKyAgKiogICAgIGRlbCBmaWxlLiAgQmF0dGkgRyAgcGVyIHJhZ2dpdW5nZXJlIHVuYSBsaW5lYSBuZWwgZmlsZS4gICAgICAqKgorCisgIE5PVEE6IExlZ2dpIGwnaW50ZXJhIExlemlvbmUgcHJpbWEgZGkgZXNlZ3VpcmUgdW4gcXVhbHNpYXNpIHBhc3NvISEKKworICAxLiBUaWVuaSBwcmVtdXRvIGlsIHRhc3RvIENUUkwgZSBiYXR0aSAgZyAgLiAgT3NzaWEgYmF0dGkgQ1RSTC1HLgorICAgICBVbiBtZXNzYWdnaW8gYXBwYXJpcsOgIGluIGZvbmRvIGFsbGEgcGFnaW5hIGNvbiBpbCBOT01FIEZJTEUgZSBsYQorICAgICBwb3NpemlvbmUgbmVsIGZpbGUuICBSaWNvcmRhdGkgaWwgbnVtZXJvIGRlbGxhIGxpbmVhIHBlciBpbCBQYXNzbyAzLgorCitOT1RBOiBMYSBwb3NpemlvbmUgZGVsIGN1cnNvcmUgc2kgdmVkZSBuZWxsJ2FuZ29sbyBpbiBiYXNzbyBhIGRlc3RyYSBkZWxsbworICAgICAgc2NoZXJtbywgc2Ugw6ggaW1wb3N0YXRhIGwnb3B6aW9uZSAncnVsZXInIChyaWdoZWxsbywgdmVkaSA6aGVscCBydWxlcikuCisKKyAgMi4gUHJlbWkgIEcgIFtHIE1haXVzY29sb10gcGVyIHBvc2l6aW9uYXJ0aSBpbiBmb25kbyBhbCBmaWxlLgorICAgICBCYXR0aSBnZyAgcGVyIHBvc2l6aW9uYXJ0aSBpbiBjaW1hIGFsIGZpbGUuCisKKyAgMy4gQmF0dGkgaWwgbnVtZXJvIGRlbGxhIGxpbmVhIGluIGN1aSB0aSB0cm92YXZpIGUgcG9pICBHICAuICBRdWVzdG8gdGkKKyAgICAgcmlwb3J0ZXLDoCBmaW5vIGFsbGEgbGluZWEgaW4gY3VpIHRpIHRyb3ZhdmkgcXVhbmRvIGF2ZXZpIGJhdHR1dG8gQ1RSTC1nLgorCisgIDQuIFNlIHRpIHNlbnRpIHNpY3VybyBuZWwgZmFybG8sIGVzZWd1aSBpIHBhc3NpIGRhIDEgYSAzLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJTGV6aW9uZSA0LjI6IElMIENPTUFORE8gU0VBUkNIIFtSSUNFUkNBXQorCisgICAgICoqIEJhdHRpICAvICBzZWd1aXRvIGRhIHVuYSBmcmFzZSBwZXIgcmljZXJjYXJlIHF1ZWxsYSBmcmFzZS4gKioKKworICAxLiBpbiBNb2RhbGl0w6AgTm9ybWFsZSBiYXR0aSBpbCBjYXJhdHRlcmUgIC8gIC4gTm90YSBjaGUgbGEgIi8iIGUgaWwgY3Vyc29yZQorICAgICBzb25vIHZpc2liaWxpIGluIGZvbmRvIGRlbGxvIHNjaGVybW8gY29tZSBxdWFuZG8gc2kgdXNhIGlsIGNvbWFuZG8gIDogLgorCisgIDIuIEFkZXNzbyBiYXR0aSAnZXJycm9vcmUnIDxJTlZJTz4uIFF1ZXN0YSDDqCBsYSBwYXJvbGEgY2hlIHZ1b2kgcmljZXJjYXJlLgorCisgIDMuIFBlciByaWNlcmNhcmUgYW5jb3JhIGxhIHN0ZXNzYSBmcmFzZSwgYmF0dGkgc29sdGFudG8gICAgICAgbiAgLgorICAgICBQZXIgcmljZXJjYXJlIGxhIHN0ZXNzYSBmcmFzZSBpbiBkaXJlemlvbmUgb3Bwb3N0YSwgYmF0dGkgIE4gIC4KKworICA0LiBQZXIgcmljZXJjYXJlIHVuYSBmcmFzZSBuZWxsYSBkaXJlemlvbmUgb3Bwb3N0YSwgdXNhICA/ICBhbCBwb3N0byBkaSAgLyAgLgorCisgIDUuIFBlciB0b3JuYXJlIGRvdmUgZXJpIHByaW1hIG5lbCBmaWxlIHByZW1pICBDVFJMLU8gICh0aWVuaSBpbCB0YXN0byBDVFJMCisgICAgIHNjaGlhY2NpYXRvIG1lbnRyZSBwcmVtaSBsYSBsZXR0ZXJhIG8pLiAgUmlwZXRpICBDVFJMLU8gIHBlciBhbmRhcmUgYW5jb3JhCisgICAgIGluZGlldHJvLiBQdW9pIHVzYXJlICBDVFJMLUkgIHBlciB0b3JuYXJlIGluIGF2YW50aS4KKworTk9UQTogImVycnJvb3JlIiBub24gw6ggaWwgbW9kbyBnaXVzdG8gZGkgZGlnaXRhcmUgZXJyb3JlOyBlcnJyb29yZSDDqCB1biBlcnJvcmUuCitOT1RBOiBRdWFuZG8gbGEgcmljZXJjYSBhcnJpdmEgYSBmaW5lIGZpbGUsIHJpY29taW5jaWEgZGFsbCdpbml6aW8gZGVsIGZpbGUsCisgICAgICBhIG1lbm8gY2hlIGwnb3B6aW9uZSAnd3JhcHNjYW4nIHNpYSBzdGF0YSBkaXNhdHRpdmF0YS4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgICAgTGV6aW9uZSA0LjM6IFJJQ0VSQ0EgREkgUEFSRU5URVNJIENPUlJJU1BPTkRFTlRJCisKKworCSAqKiBCYXR0aSAgJSAgcGVyIHRyb3ZhcmUgdW5hICApLF0sIG8gfSAgY29ycmlzcG9uZGVudGUuICoqCisKKyAgMS4gUG9zaXppb25hIGlsIGN1cnNvcmUgc3UgdW5hICgsIFssIG8geyBuZWxsYSBsaW5lYSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBBZGVzc28gYmF0dGkgaWwgY2FyYXR0ZXJlICAgJSAgLgorCisgIDMuIElsIGN1cnNvcmUgc2kgc3Bvc3RlcsOgIHN1bGxhIHBhcmVudGVzaSBjb3JyaXNwb25kZW50ZS4KKworICA0LiBCYXR0aSAgJSAgcGVyIG11b3ZlcmUgaWwgY3Vyc29yZSBhbGwnYWx0cmEgcGFyZW50ZXNpIGNvcnJpc3BvbmRlbnRlLgorCistLS0+IFF1ZXN0YSAoIMOoIHVuYSBsaW5lYSBkaSB0ZXN0IGNvbiAoLCBbIF0gZSB7IH0gYWwgc3VvIGludGVybm8uICkpCisKKworTk9UQTogUXVlc3RvIMOoIG1vbHRvIHV0aWxlIG5lbCAiZGVidWciIGRpIHVuIHByb2dyYW1tYSBjb24gcGFyZW50ZXNpIGVycmF0ZSEKKworCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgTGV6aW9uZSA0LjQ6IEwnT1BFUkFUT1JFIFNPU1RJVFVaSU9ORSAoU1VCU1RJVFVURSkKKworICAqKiBCYXR0aSAgOnMvdmVjY2hpby9udW92by9nICBwZXIgc29zdGl0dWlyZSAnbnVvdm8nIGEgJ3ZlY2NoaW8nLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgZmlubyBhbGxhIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBCYXR0aSAgOnMvbGxhL2xhIDxJTlZJTz4gLiAgTm90YSBjaGUgcXVlc3RvIGNvbWFuZG8gY2FtYmlhIHNvbG8KKyAgICAgTEEgUFJJTUEgb2Njb3JyZW56YSBkaSAibGxhIiBzdWxsYSBsaW5lYS4KKworICAzLiBBZGVzc28gYmF0dGkgIDpzL2xsYS9sYS9nIC4gQWdnaXVuZ2VuZG8gbGEgZmxhZyAgZyAgc2kgY2hpZWRlIGRpCisgICAgIHNvc3RpdHVpcmUgImdsb2JhbG1lbnRlIiBzdWxsYSBsaW5lYSwgb3NzaWEgdHV0dGUgbGUgb2Njb3JyZW56ZQorICAgICBkaSAibGxhIiBzdWxsYSBsaW5lYS4KKworLS0tPiBsbGEgc3RhZ2lvbmUgbWlnbGlvcmUgcGVyIGxsYSBmaW9yaXR1cmEgw6ggbGxhIHByaW1hdmVyYS4KKworICA0LiBQZXIgY2FtYmlhcmUgb2duaSByaWNvcnJlbnphIGRpIHVuYSBzdHJpbmdhIGRpIGNhcmF0dGVyaSB0cmEgZHVlIGxpbmVlLAorICAgICBiYXR0aSA6Iywjcy92ZWNjaGlvL251b3ZvL2cgIGRvdmUgIywjIHNvbm8gaSBudW1lcmkgY2hlIGRlbGltaXRhbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbCBncnVwcG8gZGkgbGluZWUgaW4gY3VpIHNpIHZ1b2xlIHNvc3RpdHVpcmUuCisgICAgIEJhdHRpIDolcy92ZWNjaGlvL251b3ZvL2cgICAgcGVyIGNhbWJpYXJlIG9nbmkgb2Njb3JyZW56YSBuZWxsJ2ludGVybyBmaWxlLgorICAgICBCYXR0aSA6JXMvdmVjY2hpby9udW92by9nYyAgIHBlciB0cm92YXJlIG9nbmkgb2Njb3JyZW56YSBuZWxsJ2ludGVybyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmljZXZlbmRvIHBlciBvZ251bmEgdW5hIHJpY2hpZXN0YSBzZQorCQkJCSAgZWZmZXR0dWFyZSBvIG1lbm8gbGEgc29zdGl0dXppb25lLgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICAgICAgTGV6aW9uZSA0IFNPTU1BUklPCisKKworMS4gQ1RSTC1HICB2aXN1YWxpenphIGEgY2hlIHB1bnRvIHNlaSBuZWwgZmlsZSBlIGxhIHNpdHVhemlvbmUgZGVsIGZpbGUuCisgICAgICAgICAgRyAgW0cgTWFpdXNjb2xvXSB0aSBwb3J0YSBhbGwndWx0aW1hIGxpbmVhIGRlbCBmaWxlLgorICAgbnVtZXJvIEcgIHRpIHBvcnRhIGFsbGEgbGluZWEgY29uIHF1ZWwgbnVtZXJvLgorICAgICAgICAgZ2cgIHRpIHBvcnRhIGFsbGEgcHJpbWEgbGluZWEgZGVsIGZpbGUuCisKKzIuIEJhdHRlbmRvICAvICBzZWd1aXRvIGRhIHVuYSBmcmFzZSByaWNlcmNhIElOIEFWQU5USSBxdWVsbGEgZnJhc2UuCisgICBCYXR0ZW5kbyAgPyAgc2VndWl0byBkYSB1bmEgZnJhc2UgcmljZXJjYSBBTEwnSU5ESUVUUk8gcXVlbGxhIGZyYXNlLgorICAgRE9QTyB1bmEgcmljZXJjYSBiYXR0aSAgICBuICAgcGVyIHRyb3ZhcmUgbGEgcHJvc3NpbWEgb2Njb3JyZW56YSBuZWxsYQorICAgc3Rlc3NhIGRpcmV6aW9uZSwgb3BwdXJlICBOICAgcGVyIGNlcmNhcmUgaW4gZGlyZXppb25lIG9wcG9zdGEuCisgICBDVFJMLU8gdGkgcG9ydGEgYWxsYSBwb3NpemlvbmUgcHJlY2VkZW50ZSwgQ1RSTC1JIGEgcXVlbGxhIHBpw7kgbnVvdmEuCisKKzMuIEJhdHRlbmRvICAlICBtZW50cmUgaWwgY3Vyc29yZSBzaSB0cm92YSBzdSAgKCwpLFssXSx7LCBvcHB1cmUgfQorICAgdGkgcG9zaXppb25pIHN1bGxhIGNvcnJpc3BvbmRlbnRlIHBhcmVudGVzaS4KKworNC4gUGVyIHNvc3RpdHVpcmUgIm51b3ZvIiBhbCBwcmltbyAidmVjY2hpbyIgaW4gMSBsaW5lYSBiYXR0aSA6cy92ZWNjaGlvL251b3ZvCisgICBQZXIgc29zdGl0dWlyZSAibnVvdm8iIGFkIG9nbmkgICJ2ZWNjaGlvIiBpbiAxIGxpbmVhIGJhdHRpIDpzL3ZlY2NoaW8vbnVvdm8vZworICAgUGVyIHNvc3RpdHVpcmUgZnJhc2kgdHJhIDIgbnVtZXJpIGRpIGxpbmVhIFsjXSAgYmF0dGkgICA6Iywjcy92ZWNjaGlvL251b3ZvL2cKKyAgIFBlciBzb3N0aXR1aXJlIHR1dHRlIGxlIG9jY29ycmVuemUgbmVsIGZpbGUgYmF0dGkJICAgICA6JXMvdmVjY2hpby9udW92by9nCisgICBQZXIgY2hpZWRlcmUgY29uZmVybWEgb2duaSB2b2x0YSBhZ2dpdW5naSAnYycJICAgIDolcy92ZWNjaGlvL251b3ZvL2djCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgICBMZXppb25lIDUuMTogQ09NRSBFU0VHVUlSRSBVTiBDT01BTkRPIEVTVEVSTk8KKworCisgICoqIEJhdHRpICA6ISAgc2VndWl0byBkYSB1biBjb21hbmRvIGVzdGVybm8gcGVyIGVzZWd1aXJlIHF1ZWwgY29tYW5kby4gKioKKworICAxLiBCYXR0aSBpbCBjb21hbmRvICAgOiAgIHBlciBwb3NpemlvbmFyZSBpbCBjdXJzb3JlIGluIGZvbmRvIGFsbG8gc2NoZXJtby4KKyAgICAgQ2nDsiB0aSBwZXJtZXR0ZSBkaSBpbW1ldHRlcmUgdW4gY29tYW5kbyBkYWxsYSBsaW5lYSBjb21hbmRpLgorCisgIDIuIEFkZXNzbyBiYXR0aSBpbCBjYXJhdHRlcmUgICEgIChwdW50byBlc2NsYW1hdGl2bykuICBDacOyIHRpIHBlcm1ldHRlIGRpCisgICAgIGVzZWd1aXJlIHF1YWxzaWFzaSBjb21hbmRvIGVzdGVybm8gc2kgcG9zc2EgZXNlZ3VpcmUgbmVsbGEgInNoZWxsIi4KKworICAzLiBBZCBlc2VtcGlvIGJhdHRpICAgbHMgICBkb3BvIGlsICEgZSBwb2kgcHJlbWkgPElOVklPPi4gIFF1ZXN0bworICAgICB2aXN1YWxpenphIHVuYSBsaXN0YSBkZWxsYSB0dWEgZGlyZWN0b3J5LCBwcm9wcmlvIGNvbWUgc2UgZm9zc2kgaW4gdW5hCisgICAgICJzaGVsbCIuIFVzYSAgIDohZGlyICBzZSAgbHMgIG5vbiBmdW56aW9uYS4gICBbVW5peDogbHMgIE1TLURPUzogZGlyXQorCitOT1RBOiAgRScgcG9zc2liaWxlIGluIHF1ZXN0byBtb2RvIGVzZWd1aXJlIHVuIGNvbWFuZG8gYSBwaWFjZXJlLCBzcGVjaWZpY2FuZG8KKyAgICAgICBhbmNoZSBkZWkgcGFyYW1ldHJpIHBlciBpIGNvbWFuZGkgc3Rlc3NpLgorCitOT1RBOiAgVHV0dGkgaSBjb21hbmRpICA6ICBkZXZvbm8gZXNzZXJlIHRlcm1pbmF0aSBwcmVtZW5kbyA8SU5WSU8+CisgICAgICAgRGEgcXVpIGluIGF2YW50aSBub24gbG8gcmlwZXRlcmVtbyBvZ25pIHZvbHRhLgorCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgIExlemlvbmUgNS4yOiBBTkNPUkEgU1VMTEEgU0NSSVRUVVJBIERFSSBGSUxFCisKKworICAgKiogUGVyIHNhbHZhcmUgbGUgbW9kaWZpY2hlIGFwcG9ydGF0ZSBhIHVuIHRlc3RvIGJhdHRpIDp3IE5PTUVGSUxFLiAqKgorCisgIDEuIEJhdHRpICA6IWRpciAgb3IgIDohbHMgIHBlciBwcm9jdXJhcnRpIHVuYSBsaXN0YSBkZWxsYSB0dWEgZGlyZWN0b3J5LgorICAgICBHacOgIHNhaSBjaGUgZGV2aSBwcmVtZXJlIDxJTlZJTz4gZG9wbyBhdmVyIHNjcml0dG8gaWwgY29tYW5kby4KKworICAyLiBTY2VnbGkgdW4gTk9NRUZJTEUgY2hlIGFuY29yYSBub24gZXNpc3RhLCBhZCBlcy4gVEVTVCAgIC4KKworICAzLiBBZGVzc28gYmF0dGk6CSA6dyBURVNUICAgKGRvdmUgVEVTVCDDqCBpbCBOT01FRklMRSBjaGUgaGFpIHNjZWx0bykuCisKKyAgNC4gUXVlc3RvIHNhbHZhIGwnaW50ZXJvIGZpbGUgKCJ0dXRvci5pdCIpICBjb24gaWwgbm9tZSBkaSBURVNULgorICAgICBQZXIgdmVyaWZpY2EgYmF0dGkgYW5jb3JhICA6IWRpciAgbyAgOiFscyAgcGVyIGxpc3RhcmUgbGEgdHVhIGRpcmVjdG9yeS4KKworTk9UQTogU2UgZXNjaSBkYSBWaW0gZSByaWVzZWd1aSBWaW0gYmF0dGVuZG8gIHZpbSBURVNUICwgaWwgZmlsZSBhcGVydG8KKyAgICAgIHNhcsOgIHVuYSBjb3BpYSBlc2F0dGEgZGkgInR1dG9yLml0IiBhbCBtb21lbnRvIGRlbCBzYWx2YXRhZ2dpby4KKworICA1LiBPcmEgY2FuY2VsbGEgaWwgZmlsZSBiYXR0ZW5kbyAoTVItRE9TKTogICA6IWRlbCBURVNUCisJCQkJIG8gKFVuaXgpOiAgICAgOiFybSBURVNUCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCUxlemlvbmUgNS4zOiBTRUxFWklPTkFSRSBJTCBURVNUTyBEQSBTQ1JJVkVSRQorCisgICAqKiBQZXIgc2FsdmFyZSB1bmEgcG9yemlvbmUgZGkgZmlsZSwgYmF0dGkgIHYgbW92aW1lbnRvIDp3IE5PTUVGSUxFICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBzdSBxdWVzdGEgbGluZWEuCisKKyAgMi4gUHJlbWkgIHYgIGUgbXVvdmkgaWwgY3Vyc29yZSBmaW5vIGFsbGEgbGluZWEgbnVtZXJhdGEgNS4sIHF1aSBzb3R0by4KKyAgICAgTm90YSBjaGUgaWwgdGVzdG8gdmllbmUgZXZpZGVuemlhdG8uCisKKyAgMy4gQmF0dGkgaWwgY2FyYXR0ZXJlICA6ICAuICBJbiBmb25kbyBhbGxvIHNjaGVybW8gYXBwYXJpcsOgIDonPCwnPiAgLgorCisgIDQuIEJhdHRpICB3IFRFU1QgICwgZG92ZSBURVNUIMOoIGlsIG5vbWUgZGkgdW4gZmlsZSBub24gYW5jb3JhIGVzaXN0ZW50ZS4KKyAgICAgVmVyaWZpY2EgY2hlIHNpIHZlZGEgIDonPCwnPncgVEVTVCAgIHByaW1hIGRpIGRhcmUgPElOVklPPi4KKworICA1LiBWaW0gc2NyaXZlcsOgIG5lbCBmaWxlIFRFU1QgbGUgbGluZWUgY2hlIGhhaSBzZWxlemlvbmF0by4gIFVzYSAgOiFkaXIKKyAgICAgbyAgOiFscyAgcGVyIGNvbnRyb2xsYXJlIGNoZSBlc2lzdGUuICBOb24gY2FuY2VsbGFybG8gb3JhISAgVGkgc2Vydmlyw6AKKyAgICAgbmVsbGEgcHJvc3NpbWEgbGV6aW9uZS4KKworTk9UQTogIEJhdHRlcmUgIHYgIGluaXppYSB1bmEgc2VsZXppb25lIHZpc3VhbGUuICBQdW9pIG11b3ZlcmUgaWwgY3Vyc29yZQorICAgICAgIGNvbWUgdnVvaSwgZSByZW5kZXJlIGxhIHNlbGV6aW9uZSBwacO5IHBpY2NvbGEgbyBwacO5IGdyYW5kZS4gIFBvaQorICAgICAgIHB1b2kgdXNhcmUgdW4gb3BlcmF0b3JlIHBlciBhZ2lyZSBzdWwgdGVzdG8gc2VsZXppb25hdG8uCisgICAgICAgQWQgZXMuLCAgZCAgY2FuY2VsbGEgaWwgdGVzdG8uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJICBMZXppb25lIDUuNDogSU5TRVJJUkUgRSBSSVVOSVJFIEZJTEUKKworCisgICAqKiBQZXIgaW5zZXJpcmUgaWwgY29udGVudXRvIGRpIHVuIGZpbGUsIGJhdHRpICA6ciBOT01FRklMRSAgKioKKworICAxLiBQb3NpemlvbmEgaWwgY3Vyc29yZSBhcHBlbmEgc29wcmEgcXVlc3RhIHJpZ2EuCisKK05PVEE6IERvcG8gYXZlciBlc2VndWl0byBpbCBQYXNzbyAyIHZlZHJhaSBpbCB0ZXN0byBkZWxsYSBMZXppb25lIDUuMy4KKyAgICAgIFF1aW5kaSBzcG9zdGF0aSBJTiBHSVUnIHBlciB0b3JuYXJlIGFuY29yYSBhIHF1ZXN0YSBMZXppb25lLgorCisgIDIuIE9yYSBpbnNlcmlzY2kgaWwgdHVvIGZpbGUgVEVTVCBjb24gaWwgY29tYW5kbyAgIDpyIFRFU1QgICBkb3ZlIFRFU1Qgw6gKKyAgICAgaWwgbm9tZSBjaGUgaGFpIHVzYXRvIHBlciBjcmVhcmUgaWwgZmlsZS4KKyAgICAgSWwgZmlsZSByaWNoaWVzdG8gw6ggaW5zZXJpdG8gc290dG8gbGEgbGluZWEgaW4gY3VpIHNpIHRyb3ZhIGlsIGN1cnNvcmUuCisKKyAgMy4gUGVyIHZlcmlmaWNhcmUgY2hlIHVuIGZpbGUgw6ggc3RhdG8gaW5zZXJpdG8sIHRvcm5hIGluZGlldHJvIGNvbCBjdXJzb3JlCisgICAgIGUgbm90YSBjaGUgY2kgc29ubyBvcmEgMiBjb3BpZSBkZWxsYSBMZXppb25lIDUuMywgcXVlbGxhIG9yaWdpbmFsZSBlCisgICAgIHF1ZWxsYSBjaGUgdmllbmUgZGFsIGZpbGUuCisKK05PVEE6ICBQdW9pIGFuY2hlIGxlZ2dlcmUgbCdvdXRwdXQgcHJvZG90dG8gZGEgdW4gY29tYW5kbyBlc3Rlcm5vLiBBZCBlcy4KKyAgICAgICA6ciAhbHMgIGxlZ2dlIGwnb3V0cHV0IGRlbCBjb21hbmRvICBscyBlIGxvIGluc2VyaXNjZSBzb3R0byBsYSBsaW5lYQorICAgICAgIGluIGN1aSBzaSB0cm92YSBpbCBjdXJzb3JlLgorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJCSAgICAgICBMZXppb25lIDUgU09NTUFSSU8KKworCisgIDEuICA6IWNvbWFuZG8gIGVzZWd1ZSB1biBjb21hbmRvIGVzdGVybm8uCisKKyAgICAgIEFsY3VuaSBlc2VtcGkgdXRpbGkgc29ubyBbaW4gTVNET1NdOgorCSAgOiFkaXIJCSAgICAgLQl2aXN1YWxpenphIGxpc3RhIGRpcmVjdG9yeQorCSAgOiFkZWwgTk9NRUZJTEUgICAgIC0JY2FuY2VsbGEgZmlsZSBOT01FRklMRS4KKworICAyLiAgOncgTk9NRUZJTEUgIHNjcml2ZSBzdSBkaXNjbyBpbCBmaWxlIGNoZSBzdGFpIGVkaXRhbmRvIGNvbiBub21lIE5PTUVGSUxFLgorCisgIDMuICB2IG1vdmltZW50byA6dyBOT01FRklMRSAgc2FsdmEgbGUgbGluZWUgc2VsZXppb25hdGUgaW4gbWFuaWVyYQorICAgICAgdmlzdWFsZSBuZWwgZmlsZSBOT01FRklMRS4KKworICA0LiAgOnIgTk9NRUZJTEUgIGxlZ2dlIGlsIGZpbGUgTk9NRUZJTEUgZGEgZGlzY28gZSBsbyBpbnNlcmlzY2UgbmVsIGZpbGUKKyAgICAgIGNoZSBzdGFpIG1vZGlmaWNhbmRvLCBkb3BvIGxhIGxpbmVhIGluIGN1aSDDqCBwb3NpemlvbmF0byBpbCBjdXJzb3JlLgorCisgIDUuICA6ciAhZGlyICBsZWdnZSBsJ291dHB1dCBkZWwgY29tYW5kbyAgZGlyICBlIGxvIGluc2VyaXNjZSBkb3BvIGxhCisgICAgICBsaW5lYSBpbiBjdWkgw6ggcG9zaXppb25hdG8gaWwgY3Vyc29yZS4KKworCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgTGV6aW9uZSA2LjE6IElMIENPTUFORE8gT1BFTiBbQVBSSVJFXQorCisKKyAgICAgICAgKiogQmF0dGkgICBvICAgcGVyIGFwcmlyZSB1bmEgbGluZWEgc290dG8gaWwgY3Vyc29yZSAqKgorICAgICAgICAqKiAgICAgICAgIGUgcGFzc2FyZSBpbiBNb2RhbGl0w6AgSW5zZXJpbWVudG8uICAgICAgICAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgZmlubyBhbGxhIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4KKworICAyLiBCYXR0aSBsYSBsZXR0ZXJhIG1pbnVzY29sYSAgbyAgcGVyIGFwcmlyZSB1bmEgbGluZWEgc290dG8gaWwgY3Vyc29yZSBlCisgICAgIHBhc3NhcmUgaW4gTW9kYWxpdMOgIEluc2VyaW1lbnRvLgorCisgIDMuIFBvaSBpbnNlcmlzY2kgZGVsIHRlc3RvIGUgcHJlbWkgPEVTQz4gcGVyIHVzY2lyZSBkYWxsYQorICAgICBNb2RhbGl0w6AgSW5zZXJpbWVudG8uCisKKy0tLT4gRG9wbyBiYXR0dXRvICBvICBpbCBjdXJzb3JlIMOoIHN1bGxhIGxpbmVhIGFwZXJ0YSAoaW4gTW9kYWxpdMOgIEluc2VyaW1lbnRvKS4KKworICA0LiBQZXIgYXByaXJlIHVuYSBsaW5lYSBTT1BSQSBpbCBjdXJzb3JlLCBiYXR0aSB1bmEgICBPICBtYWl1c2NvbGEsIGludmVjZQorICAgICBjaGUgdW5hICAgbyAgIG1pbnVzY29sYS4gUHJvdmEgc3VsbGEgbGluZWEgcXVpIHNvdHRvLgorQXByaSB1bmEgbGluZWEgU09QUkEgcXVlc3RhIGJhdHRlbmRvICBPICBtZW50cmUgaWwgY3Vyc29yZSDDqCBzdSBxdWVzdGEgbGluZWEuCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJTGV6aW9uZSA2LjI6IElMIENPTUFORE8gQVBQRU5EIFtBR0dJVU5HRVJFXQorCisJICAgICAqKiBCYXR0aSAgIGEgICBwZXIgaW5zZXJpcmUgdGVzdG8gRE9QTyBpbCBjdXJzb3JlLiAqKgorCisgIDEuIE11b3ZpIGlsIGN1cnNvcmUgYWxsJ2luaXppbyBkZWxsYSBsaW5lYSBxdWkgc290dG8sIGluZGljYXRhIGRhIC0tLT4uCisKKyAgMi4gQmF0dGkgIGUgIGZpbmNow6kgaWwgY3Vyc29yZSBhcnJpdmEgYWxsYSBmaW5lIGRpICBsaSAuCisKKyAgMy4gQmF0dGkgdW5hICBhICAobWludXNjb2xhKSBwZXIgYWdnaXVuZ2VyZSB0ZXN0byBET1BPIGlsIGN1cnNvcmUuCisKKyAgNC4gQ29tcGxldGEgbGEgcGFyb2xhIGNvbWUgbW9zdHJhdG8gbmVsbGEgbGluZWEgc3VjY2Vzc2l2YS4gIFByZW1pIDxFU0M+CisgICAgIHBlciB1c2NpcmUgZGFsbGEgTW9kYWxpdMOgIEluc2VyaW1lbnRvLgorCisgIDUuIFVzYSAgZSAgcGVyIHBhc3NhcmUgYWxsYSBzdWNjZXNzaXZhIHBhcm9sYSBpbmNvbXBsZXRhIGUgcmlwZXRpIGkgcGFzc2kKKyAgICAgMyBlIDQuCisKKy0tLT4gUXVlc3RhIGxpIHRpIHBlcm1ldHRlcsOgIGRpIGVzZXJjaXQgYWQgYWdnaXVuZ2VyZSB0ZXN0byBhIHVuYSBsaW5lYS4KKy0tLT4gUXVlc3RhIGxpbmVhIHRpIHBlcm1ldHRlcsOgIGRpIGVzZXJjaXRhcnRpIGFkIGFnZ2l1bmdlcmUgdGVzdG8gYSB1bmEgbGluZWEuCisKK05PVEE6IGEsIGkgZWQgQSBlbnRyYW5vIHNlbXByZSBpbiBNb2RhbGl0w6AgSW5zZXJpbWVudG8sIGxhIHNvbGEgZGlmZmVyZW56YQorICAgICAgw6ggZG92ZSB2ZXJyYW5ubyBpbnNlcml0aSBpIGNhcmF0dGVyaS4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgTGV6aW9uZSA2LjM6IFVOIEFMVFJPIE1PRE8gREkgUklNUElBWlpBUkUgW1JFUExBQ0VdCisKKworICAgICAqKiBCYXR0aSB1bmEgIFIgIG1haXVzY29sYSBwZXIgcmltcGlhenphcmUgcGnDuSBkaSB1biBjYXJhdHRlcmUuICoqCisKKyAgMS4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIHByaW1hIGxpbmVhIHF1aSBzb3R0bywgaW5kaWNhdGEgZGEgLS0tPi4gIE11b3ZpIGlsCisgICAgIGN1cnNvcmUgYWxsJ2luaXppbyBkZWwgcHJpbW8gIHh4eCAuCisKKyAgMi4gT3JhIGJhdHRpICBSICBlIGJhdHRpIGlsIG51bWVybyBjaGUgdmVkaSBuZWxsYSBsaW5lYSBzZWd1ZW50ZSwgaW4gbW9kbworICAgICBjaGUgcmltcGlhenppIGwnICB4eHggLgorCisgIDMuIFByZW1pIDxFU0M+IHBlciB1c2NpcmUgZGFsbGEgTW9kYWxpdMOgIFJlcGxhY2UuICBOb3RhIGNoZSBpbCByZXN0byBkZWxsYQorICAgICBsaW5lYSByZXN0YSBpbnZhcmlhdG8uCisKKyAgNC4gUmlwZXRpIGkgcGFzc2kgaW4gbW9kbyBkYSByaW1waWF6emFyZSBsJ2FsdHJvIHh4eCAuCisKKy0tLT4gQWdnaXVuZ2VuZG8gMTIzIGEgeHh4IHNpIG90dGllbmUgeHh4LgorLS0tPiBBZ2dpdW5nZW5kbyAxMjMgYSA0NTYgc2kgb3R0aWVuZSA1NzkuCisKK05PVEE6ICBMYSBNb2RhbGl0w6AgUmVwbGFjZSDDqCBjb21lIGxhIE1vZGFsaXTDoCBJbnNlcmltZW50bywgbWEgb2duaSBjYXJhdHRlcmUKKyAgICAgICBjaGUgdmllbmUgYmF0dHV0byByaWNvcHJlIHVuIGNhcmF0dGVyZSBlc2lzdGVudGUuCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgTGV6aW9uZSA2LjQ6IENPUElBIEUgSU5DT0xMQSBERUwgVEVTVE8KKworCisgICAgICoqIHVzYSBsJ29wZXJhdG9yZSAgeSAgcGVyIGNvcGlhcmUgZGVsIHRlc3RvIGUgIHAgIHBlciBpbmNvbGxhcmxvICoqCisKKyAgMS4gVmFpIGFsbGEgbGluZWEgaW5kaWNhdGEgZGEgLS0tPiBxdWkgc290dG8sIGUgbWV0dGkgaWwgY3Vyc29yZSBkb3BvICJhKSIuCisgIAorICAyLiBFbnRyYSBpbiBNb2RhbGl0w6AgVmlzdWFsZSBjb24gIHYgIGUgbWV0dGkgaWwgY3Vyc29yZSBkYXZhbnRpIGEgInByaW1vIi4KKyAgCisgIDMuIEJhdHRpICB5ICBwZXIgY29waWFyZSBbeWFua10gaWwgdGVzdG8gZXZpZGVuemlhdG8uCisKKyAgNC4gTXVvdmkgaWwgY3Vyc29yZSBhbGxhIGZpbmUgZGVsbGEgbGluZWEgc3VjY2Vzc2l2YTogIGokCisKKyAgNS4gQmF0dGkgIHAgIHBlciBpbmNvbGxhcmUgW3Bhc3RlXSBpbCB0ZXN0by4gIFBvaSBiYXR0aTogIGEgc2Vjb25kbyA8RVNDPiAuCisKKyAgNi4gVXNhIGxhIE1vZGFsaXTDoCBWaXN1YWxlIHBlciBzZWxlemlvbmFyZSAiIGVsZW1lbnRvLiIsIGNvcGlhbG8gY29uICB5ICwKKyAgICAgVmFpIGFsbGEgZmluZSBkZWxsYSBsaW5lYSBzdWNjZXNzaXZhIGNvbiAgaiQgIGUgaW5jb2xsYSBpbCB0ZXN0byBjb24gIHAgLgorCistLS0+ICBhKSBxdWVzdG8gw6ggaWwgcHJpbW8gZWxlbWVudG8uCisgICAgICBiKQorCitOT1RBOiBQdW9pIHVzYXJlICB5ICBjb21lIG9wZXJhdG9yZTsgIHl3ICBjb3BpYSB1bmEgcGFyb2xhIFt3b3JkXS4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgICAgICAgIExlemlvbmUgNi41OiBTRVQgW0lNUE9TVEFdIFVOJ09QWklPTkUKKworICAgICAgICoqIEltcG9zdGEgdW4nb3B6aW9uZSBwZXIgaWdub3JhcmUgbWFpdXNjb2xlL21pbnVzY29sZSAqKgorICAgICAgICoqICAgICAgICAgICAgIGR1cmFudGUgbGEgcmljZXJjYS9zb3N0aXR1emlvbmUgICAgICAgICAqKgorCisgMS4gUmljZXJjYSAnbm90YScgYmF0dGVuZG86ICAgL25vdGEgPEVOVEVSPgorICAgIFJpcGV0aSBsYSByaWNlcmNhIHBpw7kgdm9sdGUgdXNhbmRvIGlsIHRhc3RvICAgbgorCisgMi4gSW1wb3N0YSBsJ29wemlvbmUgJ2ljJyAoSWdub3JlIENhc2UsIFtJZ25vcmEgbWFpdXNjb2xvL21pbnVzY29sb10pCisgICAgYmF0dGVuZG86ICA6c2V0IGljCisKKyAzLiBPcmEgcmljZXJjYSBhbmNvcmEgJ25vdGEnIHByZW1lbmRvIGlsIHRhc3RvICAgIG4KKyAgICBUcm92ZXJhaSBhZGVzc28gYW5jaGUgIE5vdGEgIGUgIE5PVEEgLgorCisgNC4gSW1wb3N0YSBsZSBvcHppb25pICdobHNlYXJjaCcgZSAnaW5jc2VhcmNoJyAgICA6c2V0IGhscyBpcworCisgNS4gT3JhIGJhdHRpIGFuY29yYSBpbCBjb21hbmRvIGRpIHJpY2VyY2EsIGUgZ3VhcmRhIGNvc2Egc3VjY2VkZTogICAgL25vdGEKKyAKKyA2LiBQZXIgZGlzYWJpbGl0YXJlIGlsIHJpY29ub3NjaW1lbnRvIGRpIG1haXVzY29sZS9taW51c2NvbGUgYmF0dGk6ICA6c2V0IG5vaWMKK05PVEE6IFBlciBub24gZXZpZGVuemlhcmUgbGUgb2Njb3JyZW56ZSB0cm92YXRlIGJhdHRpOiAgIDpub2hsc2VhcmNoCitOT1RBOiBQZXIgaWdub3JhcmUgbWFpdXNjb2xlL21pbnVzY29sZSBzb2xvIHBlciB1bmEgcmljZXJjYSwgdXNhIFxjCisgICAgICBuZWwgY29tYW5kbyBkaSByaWNlcmNhOiAgICAvbm90YVxjIDxJTlZJTz4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgICAgTGV6aW9uZSA2IFNPTU1BUklPCisKKyAgMS4gQmF0dGkgIG8gIHBlciBhZ2dpdW5nZXJlIHVuYSBsaW5lYSBTT1RUTyBpbCBjdXJzb3JlIGVkIGVudHJhcmUgaW4KKyAgICAgICAgICAgICAgIE1vZGFsaXTDoCBJbnNlcmltZW50by4KKyAgICAgQmF0dGkgIE8gIHBlciBhZ2dpdW5nZXJlIHVuYSBsaW5lYSBTT1BSQSBpbCBjdXJzb3JlLgorCisgIDIuIEJhdHRpICBhICBwZXIgaW5zZXJpcmUgdGVzdG8gRE9QTyBpbCBjdXJzb3JlLgorICAgICBCYXR0aSAgQSAgcGVyIGluc2VyaXJlIHRlc3RvIGFsbGEgZmluZSBkZWxsYSBsaW5lYS4KKworICAzLiBJbCBjb21hbmRvICAgZSAgc3Bvc3RhIGlsIGN1cnNvcmUgYWxsYSBmaW5lIGRpIHVuYSBwYXJvbGEuCisKKyAgNC4gTCdvcGVyYXRvcmUgIHkgIGNvcGlhIGRlbCB0ZXN0bywgIHAgIGluY29sbGEgZGVsIHRlc3RvLgorCisgIDUuIEJhdHRpICBSICBwZXIgZW50cmFyZSBpbiBNb2RhbGl0w6AgUmVwbGFjZSwgZSBuZSBlc2NpIHByZW1lbmRvIDxFU0M+LgorCisgIDYuIEJhdHRpICI6c2V0IHh4eCIgcGVyIGltcG9zdGFyZSBsJ29wemlvbmUgInh4eCIuIEFsY3VuIG9wemlvbmkgc29ubzoKKyAgICAgICdpYycgJ2lnbm9yZWNhc2UnCWlnbm9yYXJlIG1haXVzY29sZS9taW51c2NvbGUgbmVsbGEgcmljZXJjYQorICAgICAgJ2lzJyAnaW5jc2VhcmNoJwltb3N0cmEgb2Njb3JyZW56ZSBwYXJ6aWFsaSBkdXJhbnRlIHVuYSByaWNlcmNhCisgICAgICAnaGxzJyAnaGxzZWFyY2gnCWV2aWRlbnppYSB0dXR0ZSBsZSBvY2NvcnJlbnplIGRpIHVuYSByaWNlcmNhCisgICAgIFB1b2kgdXNhcmUgc2lhIGlsIG5vbWUgY29tcGxldG8gZGkgdW4nb3B6aW9uZSBjaGUgcXVlbGxvIGFiYnJldmlhdG8uCisKKyAgNy4gVXNhIGlsIHByZWZpc3NvICJubyIgcGVyIGFubnVsbGFyZSB1bmEgb3B6aW9uZTogICA6c2V0IG5vaWMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCQkgICAgICBMZXppb25lIDcuMTogT1RURU5FUkUgQUlVVE8KKworCQkgKiogVXNhIGlsIHNpc3RlbWEgZGkgYWl1dG8gb24tbGluZSAqKgorCisgIFZpbSBoYSB1biBlc2F1cmllbnRlIHNpc3RlbWEgZGkgYWl1dG8gb24tbGluZS4gIFBlciBjb21pbmNpYXJlLCBwcm92YSB1bmEgZGkKKyAgcXVlc3RlIGFsdGVybmF0aXZlOgorCS0gcHJlbWkgaWwgdGFzdG8gPEFJVVRPPiAoc2UgY2UgbifDqCB1bm8pCisJLSBwcmVtaSBpbCB0YXN0byA8RjE+ICAgIChzZSBjZSBuJ8OoIHVubykKKwktIGJhdHRpICAgOmhlbHAgIDxJTlZJTz4gIE9QUFVSRSAgIDpoIDxJTlZJTz4KKworICBMZWdnaSBpbCB0ZXN0byBuZWxsYSBmaW5lc3RyYSBkaSBhaXV0byBwZXIgdmVkZXJlIGNvbWUgZnVuemlvbmEgbCdhaXV0by4KKyAgQmF0dGkgIENUUkwtVyBDVFJMLVcJcGVyIHBhc3NhcmUgZGEgdW5hIGZpbmVzdHJhIGFsbCdhbHRyYS4KKyAgQmF0dGkgIDpxIDxJTlZJTz4gICBwZXIgY2hpdWRlcmUgbGEgZmluZXN0cmEgZGkgYWl1dG8uCisKKyAgUHVvaSB0cm92YXJlIGFpdXRvIHN1IHF1YXNpIHR1dHRvLCBkYW5kbyB1biBhcmdvbWVudG8gYWwgY29tYW5kbyAiOmhlbHAiCisgIFByb3ZhIHF1ZXN0aSAobm9uIGRpbWVudGljYXJlIGRpIHByZW1lcmUgPElOVklPPik6CisKKwk6aGVscCB3CisJOmhlbHAgY19DVFJMLUQKKwk6aGVscCBpbnNlcnQtaW5kZXgKKwk6aGVscCB1c2VyLW1hbnVhbAorCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkJIExlemlvbmUgNy4yOiBQUkVQQVJBUkUgVU5PIFNDUklQVCBJTklaSUFMRQorCisJCSAgICAgICAgKiogQXR0aXZhIGxlIG9wemlvbmkgVmltICoqCisKKyAgVmltIGhhIG1vbHRlIHBpw7kgb3B6aW9uaSBkaSBWaSwgbWEgbW9sdGUgZGkgZXNzZSBzb25vIHByZWRlZmluaXRlIGluYXR0aXZlLgorICBQZXIgY29taW5jaWFyZSBhIHVzYXJlIHBpw7kgb3B6aW9uaSwgZGV2aSBjcmVhcmUgdW4gZmlsZSAidmltcmMiLgorCisgIDEuIENvbWluY2lhIGEgZWRpdGFyZSBpbCBmaWxlICJ2aW1yYyIuICBRdWVzdG8gZGlwZW5kZSBkYWwgdHVvIHNpc3RlbWE6CisJOmUgfi8udmltcmMJCXBlciBVbml4CisJOmUgJFZJTS9fdmltcmMJCXBlciBNUy1XaW5kb3dzCisKKyAgMi4gT3JhIGxlZ2dpIGkgY29udGVudXRpIGRlbCBmaWxlICJ2aW1yYyIgZGlzdHJpYnVpdG8gY29tZSBlc2VtcGlvOgorCisJOnIgJFZJTVJVTlRJTUUvdmltcmNfZXhhbXBsZS52aW0KKworICAzLiBTY3JpdmkgaWwgZmlsZSBjb246CisJOncKKworICBMYSBwcm9zc2ltYSB2b2x0YSBjaGUgYXByaSBWaW0sIHNhcsOgIGFiaWxpdGF0YSBsYSBjb2xvcmF6aW9uZSBzaW50YXR0aWNhLgorICBQdW9pIGFnZ2l1bmdlcmUgYSBxdWVzdG8gZmlsZSAidmltcmMiIHR1dHRlIGxlIHR1ZSBpbXBvc3RhemlvbmkgcHJlZmVyaXRlLgorICBQZXIgbWFnZ2lvcmkgaW5mb3JtYXppb25pIGJhdHRpOiAgOmhlbHAgdmltcmMtaW50cm8KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQlMZXppb25lIDcuMzogQ09NUExFVEFNRU5UTworCisKKwkgICAgICAqKiBDb21wbGV0YW1lbnRvIGxpbmVhIGNvbWFuZGkgY29uIENUUkwtRCBlIDxUQUI+ICoqCisKKyAgMS4gSW1wb3N0YSBWaW0gaW4gbW9kYWxpdMOgIGNvbXBhdGliaWxlOiAgOnNldCBub2NwCisKKyAgMi4gR3VhcmRhIGkgZmlsZSBlc2lzdGVudGkgbmVsbGEgZGlyZWN0b3J5OiAgOiFscyAgIG8gIDohZGlyCisKKyAgMy4gQmF0dGkgbCdpbml6aW8gZGkgdW4gY29tYW5kbzogIDplCisKKyAgNC4gUHJlbWkgIENUUkwtRCAgZSBWaW0gdGkgbW9zdHJhIHVuYSBsaXN0YSBkaSBjb21hbmRpIGNoZSBpbml6aWFubyBwZXIgImUiLgorCisgIDUuIFByZW1pICA8VEFCPiAgZSBWaW0gY29tcGxldGEgcGVyIHRlIGlsIG5vbWUgY29tYW5kbyBjb21lICI6ZWRpdCIuCisKKyAgNi4gT3JhIGJhdHRpIHVubyBzcGF6aW8gZSBsJ2luaXppbyBkZWwgbm9tZSBkaSB1biBmaWxlIGVzaXN0ZW50ZTogIDplZGl0IEZJTAorCisgIDcuIFByZW1pIDxUQUI+LiAgVmltIGNvbXBsZXRlcsOgIGlsIG5vbWUgZGVsIGZpbGUgKHNlIMOoIGlsIHNvbG8gcG9zc2liaWxlKS4KKworTk9UQTogIElsIGNvbXBsZXRhbWVudG8gw6ggZGlzcG9uaWJpbGUgcGVyIG1vbHRpIGNvbWFuZGkuICBQcm92YSBhIGJhdHRlcmUKKyAgICAgICBDVFJMLUQgZSA8VEFCPi4gIFBhcnRpY29sYXJtZW50ZSB1dGlsZSBwZXIgIDpoZWxwIC4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJCQkgICBMZXppb25lIDcgU29tbWFyaW8KKworCisgIDEuIEJhdHRpICA6aGVscCAgbyBwcmVtaSA8RjE+IG8gPEhlbHA+ICBwZXIgYXByaXJlIHVuYSBmaW5lc3RyYSBkaSBhaXV0by4KKworICAyLiBCYXR0aSAgOmhlbHAgY29tYW5kbyAgcGVyIGF2ZXJlIGFpdXRvIHN1ICBjb21hbmRvIC4KKworICAzLiBCYXR0aSAgQ1RSTC1XIENUUkwtVyAgcGVyIHNhbHRhcmUgYWxsYSBwcm9zc2ltYSBmaW5lc3RyYS4KKworICA0LiBCYXR0aSAgOnEgIHBlciBjaGl1ZGVyZSBsYSBmaW5lc3RyYSBkaSBhaXV0by4KKworICA1LiBDcmVhIHVubyBzY3JpcHQgaW5pemlhbGUgdmltcmMgY29udGVuZW50ZSBsZSB0dWUgaW1wb3N0YXppb25pIHByZWZlcml0ZS4KKworICA2LiBNZW50cmUgYmF0dGkgdW4gY29tYW5kbyAgOiAsIHByZW1pIENUUkwtRCBwZXIgdmVkZXJlIGkgcG9zc2liaWxpCisgICAgIGNvbXBsZXRhbWVudGkuICBQcmVtaSA8VEFCPiBwZXIgdXNhcmUgaWwgY29tcGxldGFtZW50byBkZXNpZGVyYXRvLgorCisKKworCisKKworCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAgUXVpIGZpbmlzY2UgbGEgR3VpZGEgYSBWaW0uICBJbCBzdW8gaW50ZW50byDDqCBkaSBmb3JuaXJlIHVuYSBicmV2ZSBwYW5vcmFtaWNhCisgIGRlbGwnRWRpdG9yIFZpbSwgY2hlIHRpIGNvbnNlbnRhIGRpIHVzYXJlIGwnRWRpdG9yIGFiYmFzdGFuemEgZmFjaWxtZW50ZS4KKyAgUXVlc3RhIGd1aWRhIMOoIGxhcmdhbWVudGUgaW5jb21wbGV0YSBwb2ljaMOpIFZpbSBoYSBtb2x0aXNzaW1pIGFsdHJpIGNvbWFuZGkuCisgIFB1b2kgYW5jaGUgbGVnZ2VyZSBpbCBtYW51YWxlIHV0ZW50ZSAoYW5jaGUgaW4gaXRhbGlhbm8pOiAiOmhlbHAgdXNlci1tYW51YWwiLgorCisgIFBlciB1bHRlcmlvcmUgbGV0dHVyYSBlIHN0dWRpbywgcmFjY29tYW5kaWFtbzoKKwlWaW0gLSBWaSBJbXByb3ZlZCAtIGRpIFN0ZXZlIE91YWxsaW5lICAgICBFZGl0b3JlOiBOZXcgUmlkZXJzCisgIElsIHByaW1vIGxpYnJvIGNvbXBsZXRhbWVudGUgZGVkaWNhdG8gYSBWaW0uIFV0aWxlIHNwZWNpZSBwZXIgcHJpbmNpcGlhbnRpLgorICBDb250aWVuZSBtb2x0aSBlc2VtcGkgZSBmaWd1cmUuCisgIFZlZGkgaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcvY2xpY2s1Lmh0bWwKKworICBRdWVzdCdhbHRybyBsaWJybyDDqCBwacO5IHN1IFZpIGNoZSBzdSBWaW0sIG1hIMOoIHB1cmUgY29uc2lnbGlhdG86CisJTGVhcm5pbmcgdGhlIFZpIEVkaXRvciAtIGRpIExpbmRhIExhbWIgZSBBcm5vbGQgUm9iYmlucworCUVkaXRvcmU6IE8nUmVpbGx5ICYgQXNzb2NpYXRlcyBJbmMuCisgIEUnIHVuIGJ1b24gbGlicm8gcGVyIGltcGFyYXJlIHF1YXNpIHR1dHRvIGNpw7IgY2hlIHB1b2kgdm9sZXIgZmFyZSBjb24gVmkuCisgIE5lIGVzaXN0ZSB1bmEgdHJhZHV6aW9uZSBpdGFsaWFuYSwgYmFzYXRhIHN1IHVuYSB2ZWNjaGlhIGVkaXppb25lLgorCisgIFF1ZXN0YSBndWlkYSDDqCBzdGF0YSBzY3JpdHRhIGRhIE1pY2hhZWwgQy4gUGllcmNlIGUgUm9iZXJ0IEsuIFdhcmUsCisgIENvbG9yYWRvIFNjaG9vbCBvZiBNaW5lcywgdXNhbmRvIGlkZWUgZm9ybml0ZSBkYSBDaGFybGVzIFNtaXRoLAorICBDb2xvcmFkbyBTdGF0ZSBVbml2ZXJzaXR5IC0gRS1tYWlsOiBid2FyZUBtaW5lcy5jb2xvcmFkby5lZHUKKyAgTW9kaWZpY2F0byBwZXIgVmltIGRhIEJyYW0gTW9vbGVuYWFyLgorICBTZWduYWxhcmUgcmVmdXNpIGFkIEFudG9uaW8gQ29sb21ibyAtIEUtbWFpbDogYXpjMTAwQGdtYWlsLmNvbQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Cg==